/* MP2I — feuille de style. Variables : papier, encre, craies de champ. */

:root {
  --fond: #f4efe4;
  --papier: #fbf7ee;
  --encre: #1c1914;
  --encre-pale: #6a6256;
  --trait: #e2d8c4;
  --trait-fort: #c9bda4;
  --algebre: #6f4ea3;
  --algebre-bg: #efe8f8;
  --analyse: #1f8a72;
  --analyse-bg: #e5f4ef;
  --probas: #b56a1e;
  --probas-bg: #f8ecd9;
  --transversal: #3d6ea8;
  --transversal-bg: #e4edf7;
  --craie: #d4a017;
  --craie-rose: #b84a58;
  --exi-bg: #e7f3ea;
  --exi-ink: #1f6b3a;
  --demo-bg: #e7eef8;
  --demo-ink: #2c4d86;
  --hp-bg: #f8e8ea;
  --hp-ink: #9a3040;
  --algo-bg: #f6edd4;
  --algo-ink: #7a5a12;
  --rail: 16.25rem;
  --page: 46rem;
  --page-large: 58rem;
  --rayon: 10px;
  --ombre: 0 1px 0 rgba(28, 25, 20, .04);
  --barre-chap: 4.75rem;
  color-scheme: light;
}

html[data-theme="dark"] {
  --fond: #14120f;
  --papier: #1c1914;
  --encre: #f3ece1;
  --encre-pale: #a89f90;
  --trait: #322c24;
  --trait-fort: #4a4338;
  --algebre: #c0a9e8;
  --algebre-bg: #2a2433;
  --analyse: #8fd6c6;
  --analyse-bg: #1a2c28;
  --probas: #efb57a;
  --probas-bg: #2e2418;
  --transversal: #a9c4e8;
  --transversal-bg: #1c2633;
  --craie: #f2c14e;
  --craie-rose: #e08a94;
  --exi-bg: #1c3324;
  --exi-ink: #9fd4b0;
  --demo-bg: #1e2a3d;
  --demo-ink: #9db6e0;
  --hp-bg: #3a2226;
  --hp-ink: #e8a0aa;
  --algo-bg: #3a3018;
  --algo-ink: #e6c56a;
  color-scheme: dark;
}

*, *::before, *::after { box-sizing: border-box; }

* {
  scrollbar-width: thin;
  scrollbar-color: var(--trait-fort) var(--fond);
}
::-webkit-scrollbar {
  width: .55rem;
  height: .55rem;
}
::-webkit-scrollbar-track {
  background: var(--fond);
}
::-webkit-scrollbar-thumb {
  background: var(--trait-fort);
  border-radius: 999px;
}
::-webkit-scrollbar-thumb:hover {
  background: var(--encre-pale);
}

html {
  scroll-behavior: smooth;
  scroll-padding-top: var(--barre-chap);
}
.point, #col, #hp, #res, #outils, .partie {
  scroll-margin-top: var(--barre-chap);
}

@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
  * { animation: none !important; transition: none !important; }
}

body {
  margin: 0;
  background: var(--fond);
  color: var(--encre);
  font-family: Newsreader, "Iowan Old Style", "Palatino Linotype", Palatino, serif;
  font-size: 1.0625rem;
  line-height: 1.6;
  font-weight: 400;
}

body.rail-ouvert { overflow: hidden; }

h1, h2, h3, h4, .numero, .t, .n, .btn, .chip, .tag, .mot, .kind, .sur, .fil, .lettre {
  font-family: "Bricolage Grotesque", "Avenir Next", "Segoe UI", sans-serif;
}

h1, h2, h3 { line-height: 1.2; font-weight: 700; letter-spacing: -.02em; }
h1 { font-size: clamp(1.85rem, 4vw, 2.65rem); margin: .2rem 0 .6rem; }
h2 { font-size: 1.45rem; margin: 0 0 .7rem; }
h3 { font-size: 1.15rem; margin: 0; }
h4 { font-size: .95rem; margin: 0 0 .4rem; font-weight: 650; }

p { margin: 0 0 .85rem; }
p:last-child { margin-bottom: 0; }
ul, ol { margin: 0 0 .7rem; padding-left: 1.15rem; }
li { margin: .2rem 0; }
a { color: var(--transversal); text-underline-offset: .15em; }
a:hover { color: var(--encre); }
code, kbd {
  font-family: "IBM Plex Mono", ui-monospace, Consolas, monospace;
  font-size: .86em;
  background: var(--algebre-bg);
  padding: .08em .28em;
  border-radius: 4px;
  overflow-wrap: anywhere;
  word-break: break-word;
}
strong { font-weight: 650; }

.skip {
  position: absolute;
  left: .8rem;
  top: -4rem;
  z-index: 80;
  background: var(--encre);
  color: var(--papier);
  padding: .45rem .8rem;
  border-radius: 6px;
  text-decoration: none;
}
.skip:focus { top: .8rem; }

:focus-visible {
  outline: 2px solid var(--craie);
  outline-offset: 2px;
}

.enveloppe {
  display: grid;
  grid-template-columns: var(--rail) minmax(0, 1fr);
  min-height: 100vh;
}

/* ——— Rail ——— */
.rail {
  position: sticky;
  top: 0;
  align-self: start;
  height: 100vh;
  overflow: auto;
  background: var(--papier);
  border-right: 1px solid var(--trait);
  padding: 1.1rem .9rem 2rem;
  font-family: "Bricolage Grotesque", sans-serif;
  font-size: .86rem;
}
.rail a { text-decoration: none; color: inherit; }
.rail-marque {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: .5rem;
  margin-bottom: 1rem;
}
.rail-marque a {
  font-weight: 750;
  letter-spacing: -.03em;
  font-size: 1.05rem;
}
.rail-marque a span { color: var(--encre-pale); font-weight: 500; }
.rail-cherche {
  margin: 0 0 1rem;
}
.rail-cherche label {
  display: block;
  font-size: .68rem;
  letter-spacing: .12em;
  text-transform: uppercase;
  color: var(--encre-pale);
  font-weight: 650;
  margin: 0 0 .3rem .15rem;
}
.rail-cherche input {
  width: 100%;
  box-sizing: border-box;
  font: inherit;
  font-size: .86rem;
  padding: .4rem .55rem;
  border: 1px solid var(--trait-fort);
  border-radius: 6px;
  background: var(--fond);
  color: var(--encre);
}
.rail-cherche input:focus {
  outline: 2px solid var(--craie);
  outline-offset: 1px;
}
.rail-meta, .rail-liste { list-style: none; margin: 0; padding: 0; }
.rail-meta { margin-bottom: 1.1rem; }
.rail-meta a, .rail-liste a {
  display: block;
  padding: .32rem .5rem;
  border-radius: 6px;
}
.rail-meta a:hover, .rail-liste a:hover { background: var(--fond); }
.rail-meta a[aria-current="page"],
.rail-liste a[aria-current="page"] {
  background: var(--encre);
  color: var(--fond);
}
.rail-meta a[aria-current="page"]:hover,
.rail-liste a[aria-current="page"]:hover {
  background: var(--encre);
  color: var(--fond);
}
.rail-groupe {
  font-size: .68rem;
  letter-spacing: .14em;
  text-transform: uppercase;
  color: var(--encre-pale);
  margin: .85rem .5rem .25rem;
  font-weight: 650;
}
.rail-liste a {
  display: grid;
  grid-template-columns: 1.6rem 1fr;
  gap: .35rem;
  align-items: baseline;
}
.rail-liste .rn {
  font-variant-numeric: tabular-nums;
  color: var(--encre-pale);
  font-weight: 650;
  font-size: .78rem;
}
.rail-liste a[aria-current="page"] .rn { color: inherit; opacity: .7; }
.rail-liste .brouillon { opacity: .55; }
.rail-dot {
  display: inline-block;
  width: .45rem;
  height: .45rem;
  border-radius: 50%;
  margin-left: .2rem;
  vertical-align: middle;
  background: var(--trait-fort);
}
.rail-dot.lu { background: var(--analyse); }
.rail-dot.revoir { background: var(--craie); }
.rail-dot.cours { background: var(--transversal); }

.btn-icon {
  appearance: none;
  border: 1px solid var(--trait);
  background: var(--fond);
  color: var(--encre);
  width: 2rem;
  height: 2rem;
  border-radius: 8px;
  cursor: pointer;
  font-size: 1rem;
  line-height: 1;
  padding: 0;
}
.btn-icon:hover { border-color: var(--encre-pale); }
.btn-fermer-rail, .btn-menu, .btn-theme-flottant { display: none; }

.voile {
  display: none;
  position: fixed;
  inset: 0;
  background: rgba(20, 18, 15, .45);
  z-index: 40;
  border: 0;
  padding: 0;
  cursor: pointer;
}
body.rail-ouvert .voile { display: block; }

/* ——— Page ——— */
.page { min-width: 0; }
.dedans {
  width: min(var(--page), calc(100% - 2.4rem));
  margin: 0 auto;
  padding: 0 0 4rem;
}
.dedans.large { width: min(var(--page-large), calc(100% - 2.4rem)); }

.accueil-hero, .entete {
  background: var(--papier);
  border-bottom: 1px solid var(--trait);
  padding: 2.4rem 0 2rem;
  margin-bottom: 2rem;
}
.fil {
  font-size: .78rem;
  letter-spacing: .04em;
  color: var(--encre-pale);
  margin-bottom: .6rem;
}
.fil a { color: inherit; }
.chapo {
  font-size: 1.12rem;
  color: var(--encre-pale);
  max-width: 40rem;
}
.numero {
  font-size: .82rem;
  font-weight: 700;
  letter-spacing: .16em;
  color: var(--encre-pale);
  margin: 0 0 .15rem;
}
.signal {
  display: flex;
  flex-wrap: wrap;
  gap: .5rem 1.1rem;
  margin-top: 1.1rem;
  font-size: .88rem;
  color: var(--encre-pale);
}
.signal b { color: var(--encre); font-weight: 650; }

.cta-bande {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: .8rem 1.2rem;
  margin: 1.4rem 0 .4rem;
}
.btn {
  appearance: none;
  display: inline-flex;
  align-items: center;
  gap: .45rem;
  border: 0;
  background: var(--encre);
  color: var(--papier);
  font-family: "Bricolage Grotesque", sans-serif;
  font-weight: 650;
  font-size: .95rem;
  padding: .65rem 1.05rem;
  border-radius: 8px;
  text-decoration: none;
  cursor: pointer;
}
.btn:hover { filter: brightness(1.08); color: var(--papier); }
.btn.secondaire {
  background: transparent;
  color: var(--encre);
  border: 1px solid var(--trait-fort);
}
.btn.secondaire:hover { background: var(--fond); color: var(--encre); }
.btn[aria-pressed="true"] {
  background: var(--analyse);
  color: #07261e;
}
html[data-theme="dark"] .btn[aria-pressed="true"] { color: #07261e; }
.compteur {
  font-family: "Bricolage Grotesque", sans-serif;
  font-size: .88rem;
  color: var(--encre-pale);
}
kbd {
  font-family: "IBM Plex Mono", ui-monospace, Consolas, monospace;
  font-size: .82em;
  border: 1px solid var(--trait-fort);
  background: var(--papier);
  padding: .05em .35em;
  border-radius: 4px;
}

.cherche-form {
  margin: 0 0 1rem;
}
.cherche-form label {
  display: block;
  font-family: "Bricolage Grotesque", sans-serif;
  font-size: .72rem;
  letter-spacing: .12em;
  text-transform: uppercase;
  font-weight: 650;
  color: var(--encre-pale);
  margin-bottom: .4rem;
}
.cherche-form input {
  width: 100%;
  box-sizing: border-box;
  font-family: "Bricolage Grotesque", sans-serif;
  font-size: 1.15rem;
  padding: .65rem .8rem;
  border: 1px solid var(--trait-fort);
  border-radius: 8px;
  background: var(--papier);
  color: var(--encre);
}
.cherche-form input:focus {
  outline: 2px solid var(--craie);
  outline-offset: 2px;
}
.cherche-hit {
  display: grid;
  grid-template-columns: 5.4rem 1fr;
  grid-template-rows: auto auto;
  column-gap: .7rem;
  row-gap: .1rem;
  padding: .7rem 0;
  border-top: 1px solid var(--trait);
  text-decoration: none;
  color: inherit;
}
.cherche-hit:first-child { border-top: 0; }
.cherche-hit:hover .t { text-decoration: underline; }
.cherche-hit .kind {
  grid-row: 1 / span 2;
  align-self: start;
  margin-top: .2rem;
}
.cherche-hit .t {
  font-family: "Bricolage Grotesque", sans-serif;
  font-weight: 650;
  font-size: 1.02rem;
}
.cherche-hit .c {
  font-size: .82rem;
  color: var(--encre-pale);
}

.ce-soir {
  margin: 0 0 1.8rem;
  padding: 1rem 1.1rem 1.05rem;
  background: var(--papier);
  border: 1px solid var(--trait);
  border-radius: var(--rayon);
  border-left: 4px solid var(--craie);
}
.ce-soir[hidden] { display: none; }
.ce-soir h2 { margin: 0 0 .35rem; font-size: 1.2rem; }
.ce-soir-leg { color: var(--encre-pale); margin: 0 0 .7rem; }
.ce-soir ol { list-style: none; padding: 0; margin: 0; }
.ce-soir li {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: .45rem .7rem;
  padding: .55rem 0;
  border-top: 1px solid var(--trait);
}
.ce-soir li:first-child { border-top: 0; padding-top: .15rem; }
.ce-soir li a {
  flex: 1 1 12rem;
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: .25rem .65rem;
  text-decoration: none;
  color: inherit;
}
.ce-soir li a:hover .t { text-decoration: underline; }
.ce-soir .n {
  font-family: "Bricolage Grotesque", sans-serif;
  font-size: .72rem;
  font-weight: 700;
  letter-spacing: .06em;
  text-transform: uppercase;
  color: var(--encre-pale);
}
.ce-soir .t { font-weight: 650; }
.ce-soir li .btn { padding: .28rem .65rem; font-size: .82rem; }

/* ——— Carte programme ——— */
.filtres {
  display: flex;
  flex-wrap: wrap;
  gap: .4rem;
  margin: 0 0 1.2rem;
}
.filtre {
  appearance: none;
  border: 1px solid var(--trait);
  background: var(--papier);
  color: var(--encre);
  font-family: "Bricolage Grotesque", sans-serif;
  font-size: .8rem;
  font-weight: 600;
  padding: .35rem .7rem;
  border-radius: 999px;
  cursor: pointer;
}
.filtre:hover, .filtre[aria-pressed="true"] {
  border-color: var(--encre);
  background: var(--encre);
  color: var(--papier);
}
.semestre-titre {
  font-family: "Bricolage Grotesque", sans-serif;
  font-size: .75rem;
  letter-spacing: .16em;
  text-transform: uppercase;
  color: var(--encre-pale);
  margin: 1.6rem 0 .7rem;
}
.carte {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(16.5rem, 1fr));
  gap: .65rem;
}
.carte a, .carte .carte-item {
  display: flex;
  flex-direction: column;
  gap: .28rem;
  padding: .75rem .85rem .8rem;
  background: var(--papier);
  border: 1px solid var(--trait);
  border-radius: var(--rayon);
  text-decoration: none;
  color: inherit;
  box-shadow: var(--ombre);
  border-left: 4px solid var(--trait-fort);
  min-height: 6.2rem;
  position: relative;
}
.carte a:hover { border-color: var(--encre-pale); }
.carte a.champ-alg, .carte .carte-item.champ-alg { border-left-color: var(--algebre); }
.carte a.champ-ana, .carte .carte-item.champ-ana { border-left-color: var(--analyse); }
.carte a.champ-pro, .carte .carte-item.champ-pro { border-left-color: var(--probas); }
.carte a.champ-tra, .carte .carte-item.champ-tra { border-left-color: var(--transversal); }
.carte .n {
  font-size: .72rem;
  letter-spacing: .08em;
  color: var(--encre-pale);
  font-weight: 650;
}
.carte .t { font-size: .98rem; font-weight: 650; letter-spacing: -.02em; }
.carte .c {
  font-size: .72rem;
  font-weight: 600;
  letter-spacing: .04em;
  margin-top: auto;
}
.carte .c.alg { color: var(--algebre); }
.carte .c.ana { color: var(--analyse); }
.carte .c.pro { color: var(--probas); }
.carte .c.tra { color: var(--transversal); }
.carte .pastille {
  position: absolute;
  top: .7rem;
  right: .7rem;
  width: .55rem;
  height: .55rem;
  border-radius: 50%;
  background: var(--trait-fort);
}
.carte .pastille.lu { background: var(--analyse); }
.carte .pastille.revoir { background: var(--craie); }
.carte .pastille.cours { background: var(--transversal); }
.carte a.stub { opacity: .78; }
.carte a.stub .t::after {
  content: " · en rédaction";
  font-weight: 500;
  color: var(--encre-pale);
  font-size: .78rem;
}
.carte a.estompe { display: none; }
.legende {
  display: flex;
  flex-wrap: wrap;
  gap: .5rem 1rem;
  font-style: normal;
  font-size: .82rem;
  color: var(--encre-pale);
  margin-top: 1rem;
  font-family: "Bricolage Grotesque", sans-serif;
}
.legende i { font-style: normal; }

/* ——— Blocs pédagogiques ——— */
.objectifs, .bloc, .point {
  background: var(--papier);
  border: 1px solid var(--trait);
  border-radius: var(--rayon);
  padding: 1.2rem 1.3rem 1.3rem;
  margin: 0 0 1.15rem;
}
.objectifs { border-left: 4px solid var(--craie); }
.tag {
  display: inline-block;
  font-size: .68rem;
  letter-spacing: .12em;
  text-transform: uppercase;
  color: var(--encre-pale);
  font-weight: 650;
  margin-bottom: .35rem;
}
.sur {
  display: block;
  font-size: .72rem;
  letter-spacing: .12em;
  text-transform: uppercase;
  color: var(--encre-pale);
  font-weight: 650;
  margin-bottom: .35rem;
}

.point > header {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: .4rem .55rem;
  margin-bottom: 1rem;
  padding-bottom: .75rem;
  border-bottom: 1px solid var(--trait);
}
.lettre {
  width: 1.7rem;
  height: 1.7rem;
  display: grid;
  place-items: center;
  border-radius: 6px;
  background: var(--encre);
  color: var(--papier);
  font-weight: 750;
  font-size: .95rem;
}
.point > header h3 { flex: 1 1 8rem; }
.point-suivi {
  display: flex;
  gap: .3rem;
  margin-left: auto;
}
.point-suivi button {
  appearance: none;
  border: 1px solid var(--trait);
  background: transparent;
  color: var(--encre-pale);
  font-family: "Bricolage Grotesque", sans-serif;
  font-size: .72rem;
  font-weight: 650;
  padding: .25rem .55rem;
  border-radius: 999px;
  cursor: pointer;
}
.point-suivi button:hover { border-color: var(--encre-pale); color: var(--encre); }
.point-suivi button[aria-pressed="true"][data-etat="lu"] {
  background: var(--exi-bg);
  border-color: var(--exi-ink);
  color: var(--exi-ink);
}
.point-suivi button[aria-pressed="true"][data-etat="revoir"] {
  background: var(--algo-bg);
  border-color: var(--algo-ink);
  color: var(--algo-ink);
}

.chip {
  display: inline-block;
  font-size: .68rem;
  font-weight: 650;
  letter-spacing: .04em;
  padding: .18rem .45rem;
  border-radius: 4px;
  background: var(--fond);
  color: var(--encre-pale);
}
.chip.exi { background: var(--exi-bg); color: var(--exi-ink); }
.chip.demo { background: var(--demo-bg); color: var(--demo-ink); }
.chip.hp { background: var(--hp-bg); color: var(--hp-ink); }
.chip.algo { background: var(--algo-bg); color: var(--algo-ink); }

.bo {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 1rem 1.4rem;
  margin: .4rem 0 1rem;
  font-size: .95rem;
  min-width: 0;
}
.bo > div { min-width: 0; overflow-wrap: break-word; }
.bo h4 { color: var(--encre-pale); font-size: .72rem; letter-spacing: .1em; text-transform: uppercase; }
@media (max-width: 720px) { .bo { grid-template-columns: 1fr; } }

.mot {
  display: block;
  font-size: .72rem;
  letter-spacing: .12em;
  text-transform: uppercase;
  font-weight: 650;
  color: var(--encre-pale);
  margin-bottom: .35rem;
}
.clair, .formules, .piege, .astuce, .histoire, .res {
  margin: .85rem 0 0;
  padding: .85rem 1rem;
  border-radius: 8px;
}
.clair { background: var(--transversal-bg); }
.formules {
  background: var(--fond);
  border: 1px solid var(--trait);
  overflow-x: auto;
  font-size: .98rem;
}
.formules .katex-display,
.katex-display {
  overflow-x: auto;
  overflow-y: hidden;
  max-width: 100%;
  padding-bottom: .2rem;
}
.piege {
  background: var(--hp-bg);
  border-left: 3px solid var(--craie-rose);
}
.astuce {
  background: var(--analyse-bg);
  border-left: 3px solid var(--analyse);
}
.histoire {
  background: var(--algebre-bg);
  font-size: .97rem;
}
.histoire h4 { margin: .2rem 0 .45rem; }
.dates { font-size: .82rem; color: var(--encre-pale); font-family: "Bricolage Grotesque", sans-serif; }
.res { background: var(--fond); }
.res ul { list-style: none; padding: 0; }
.res li {
  display: flow-root;
  position: relative;
  margin: .7rem 0;
  padding-left: 5.6rem;
  min-width: 0;
  line-height: 1.55;
}
.res .kind {
  position: absolute;
  left: 0;
  top: .12rem;
  width: 4.9rem;
  box-sizing: border-box;
}
.kind {
  display: inline-block;
  font-size: .68rem;
  font-weight: 700;
  letter-spacing: .04em;
  text-transform: uppercase;
  padding: .18rem .3rem;
  border-radius: 4px;
  text-align: center;
  background: var(--papier);
  border: 1px solid var(--trait);
  line-height: 1.2;
}
.kind.pdf { color: var(--hp-ink); }
.kind.exo { color: var(--analyse); }
.kind.video { color: var(--algebre); }
.kind.site, .kind.soft { color: var(--transversal); }
.kind.livre { color: var(--probas); }

.mot a { color: inherit; text-decoration: none; }
.mot a:hover { text-decoration: underline; }

details.couche {
  margin: .7rem 0 0;
  border: 1px dashed var(--trait-fort);
  border-radius: 8px;
  padding: .2rem .7rem .55rem;
}
details.couche > summary {
  cursor: pointer;
  font-family: "Bricolage Grotesque", sans-serif;
  font-size: .82rem;
  font-weight: 650;
  color: var(--encre-pale);
  padding: .45rem 0;
  list-style: none;
}
details.couche > summary::-webkit-details-marker { display: none; }
details.couche > summary::before {
  content: "▸ ";
  color: var(--craie);
}
details.couche[open] > summary::before { content: "▾ "; }

body.mode-revision .couche-bo,
body.mode-revision .couche-histoire,
body.mode-revision #res,
body.mode-revision #outils,
body.mode-revision .point > .res {
  display: none;
}

figure {
  margin: 1.1rem 0;
  padding: .6rem;
  background: var(--fond);
  border-radius: 8px;
  overflow-x: auto;
}
figure svg { display: block; width: 100%; height: auto; max-width: 700px; margin: 0 auto; }
figcaption {
  font-size: .88rem;
  color: var(--encre-pale);
  padding: .55rem .3rem 0;
}

table {
  width: 100%;
  max-width: 100%;
  border-collapse: collapse;
  font-size: .92rem;
  margin: .6rem 0 1rem;
}
th, td { overflow-wrap: break-word; }
th, td {
  text-align: left;
  vertical-align: top;
  padding: .45rem .55rem;
  border-bottom: 1px solid var(--trait);
}
th {
  font-family: "Bricolage Grotesque", sans-serif;
  font-size: .75rem;
  letter-spacing: .06em;
  text-transform: uppercase;
  color: var(--encre-pale);
  font-weight: 650;
}

.cartes-liens {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(15rem, 1fr));
  gap: .7rem;
  margin: .8rem 0 1rem;
}
.cartes-liens a {
  display: block;
  padding: .9rem 1rem;
  background: var(--papier);
  border: 1px solid var(--trait);
  border-radius: var(--rayon);
  text-decoration: none;
  color: inherit;
}
.cartes-liens a:hover { border-color: var(--encre-pale); }
.cartes-liens b { display: block; margin-bottom: .3rem; }
.cartes-liens span { color: var(--encre-pale); font-size: .92rem; }

/* ——— Chrome chapitre ——— */
.chap-barre {
  position: sticky;
  top: 0;
  z-index: 20;
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: .5rem .8rem;
  background: var(--fond);
  background: color-mix(in srgb, var(--fond) 88%, transparent);
  backdrop-filter: blur(8px);
  padding: .55rem 0 .5rem;
  margin: -.4rem 0 1rem;
  border-bottom: 1px solid var(--trait);
}
.sommaire-interne {
  display: flex;
  flex-wrap: nowrap;
  gap: .3rem;
  overflow-x: auto;
  flex: 1;
  scrollbar-width: thin;
}
.sommaire-interne a {
  flex: 0 0 auto;
  text-decoration: none;
  font-family: "Bricolage Grotesque", sans-serif;
  font-size: .78rem;
  font-weight: 650;
  padding: .28rem .55rem;
  border-radius: 6px;
  color: var(--encre-pale);
  border: 1px solid transparent;
}
.sommaire-interne a:hover { color: var(--encre); background: var(--papier); }
.sommaire-interne a[aria-current="location"] {
  color: var(--encre);
  background: var(--papier);
  border-color: var(--trait);
}

.suite {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: .65rem;
  margin: 1.2rem 0 1.6rem;
}
.suite a {
  display: flex;
  flex-direction: column;
  gap: .15rem;
  padding: .75rem .9rem;
  background: var(--papier);
  border: 1px solid var(--trait);
  border-radius: var(--rayon);
  text-decoration: none;
  color: inherit;
}
.suite a:last-child { text-align: right; }
.suite a span { font-size: .72rem; color: var(--encre-pale); font-family: "Bricolage Grotesque", sans-serif; letter-spacing: .06em; text-transform: uppercase; }
.suite a b { font-size: .95rem; }
.suite.haut { margin-top: 0; }

.pied {
  margin-top: 2rem;
  padding-top: 1rem;
  border-top: 1px solid var(--trait);
  color: var(--encre-pale);
  font-size: .88rem;
}

.stub-note {
  padding: 1rem 1.1rem;
  background: var(--algo-bg);
  border-radius: var(--rayon);
  margin-bottom: 1.2rem;
}

.comprendre {
  margin: 2rem 0 0;
}
.comprendre summary {
  cursor: pointer;
  font-family: "Bricolage Grotesque", sans-serif;
  font-weight: 650;
  color: var(--encre-pale);
}

.formulaire-chap { margin-bottom: 2.2rem; }
.formulaire-chap h2 a { color: inherit; text-decoration: none; }
.formulaire-chap h2 a:hover { text-decoration: underline; }

.fiches-saut {
  display: flex;
  flex-wrap: wrap;
  gap: .4rem;
  margin: 0 0 1.6rem;
}
.fiches-saut a {
  display: inline-flex;
  align-items: center;
  gap: .4rem;
  font-family: "Bricolage Grotesque", sans-serif;
  font-size: .82rem;
  font-weight: 650;
  text-decoration: none;
  color: var(--encre);
  border: 1px solid var(--trait-fort);
  background: var(--papier);
  padding: .28rem .45rem .28rem .55rem;
  border-radius: 6px;
}
.fiches-saut a:hover { border-color: var(--encre); }
.fiches-saut .nb {
  min-width: 1.15em;
  padding: .05em .32em;
  border-radius: 4px;
  background: var(--fond);
  font-size: .68rem;
  font-weight: 650;
  color: var(--encre-pale);
  text-align: center;
}
.colles-chap { margin-bottom: 2.4rem; }
.colles-chap > h2 { margin-bottom: .7rem; }
.colles-chap > h2 a { color: inherit; text-decoration: none; }
.colles-chap > h2 a:hover { text-decoration: underline; }
.fiche-note { color: var(--encre-pale); }
.fiche-admis {
  margin: .7rem 0 1rem;
  padding: .75rem 1rem;
  border-radius: 8px;
  background: var(--demo-bg);
  border-left: 3px solid var(--demo-ink);
}
.fiche-admis b {
  display: block;
  font-family: "Bricolage Grotesque", sans-serif;
  font-size: .72rem;
  letter-spacing: .1em;
  text-transform: uppercase;
  color: var(--demo-ink);
  margin-bottom: .3rem;
}
.fiche-demo {
  margin: .9rem 0 0;
  padding: .95rem 1.05rem 1rem;
  border: 1px solid var(--trait);
  border-radius: 8px;
  background: var(--papier);
}
.fiche-demo header {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: .25rem .75rem;
  margin-bottom: .55rem;
}
.fiche-demo h3 { font-size: 1.08rem; }
.fiche-lien {
  font-family: "Bricolage Grotesque", sans-serif;
  font-size: .72rem;
  font-weight: 700;
  letter-spacing: .08em;
  text-transform: uppercase;
  text-decoration: none;
  color: var(--encre-pale);
}
.fiche-lien:hover { color: var(--encre); }
.fiche-enonce p:last-child { margin-bottom: 0; }
.fiche-enonce ol { margin-bottom: .4rem; }
.fiche-plan {
  margin-top: .7rem;
  border-top: 1px dashed var(--trait-fort);
  padding-top: .35rem;
}
.fiche-plan > summary {
  cursor: pointer;
  font-family: "Bricolage Grotesque", sans-serif;
  font-size: .82rem;
  font-weight: 650;
  color: var(--encre-pale);
  padding: .4rem 0;
  list-style: none;
}
.fiche-plan > summary::-webkit-details-marker { display: none; }
.fiche-plan > summary::before { content: "▸ "; color: var(--craie); }
.fiche-plan[open] > summary::before { content: "▾ "; }
.fiche-plan ol { margin: .2rem 0 .2rem 1.1rem; }
.fiche-plan li { margin: .35rem 0; }

.page, .dedans, .bloc, .point, .formules {
  min-width: 0;
}
h1, h2, h3, .chapo, .t {
  overflow-wrap: break-word;
}

/* ——— Mobile ——— */
@media (max-width: 860px) {
  .enveloppe { grid-template-columns: 1fr; }
  .rail {
    position: fixed;
    left: 0;
    top: 0;
    z-index: 50;
    width: min(20rem, 88vw);
    transform: translateX(-105%);
    transition: transform .2s ease;
    box-shadow: none;
  }
  body.rail-ouvert .rail { transform: translateX(0); box-shadow: 8px 0 32px rgba(0,0,0,.25); }
  .btn-menu {
    display: inline-flex;
    position: fixed;
    top: .7rem;
    left: .7rem;
    z-index: 30;
    align-items: center;
    justify-content: center;
  }
  .btn-theme-flottant {
    display: inline-flex;
    position: fixed;
    top: .7rem;
    right: .7rem;
    z-index: 30;
    align-items: center;
    justify-content: center;
  }
  .btn-fermer-rail { display: inline-flex; }
  .accueil-hero, .entete { padding: 3.4rem 0 1.5rem; }
  .suite { grid-template-columns: 1fr; }
  .suite a:last-child { text-align: left; }
  .chap-barre { top: 0; }
  :root { --barre-chap: 6.5rem; }
  .res li { padding-left: 5.2rem; }
  .res .kind { width: 4.6rem; }
}

/* ——— Parties A / B d'un chapitre ——— */
.partie {
  margin: 2.4rem 0 1.15rem;
  padding: 1.05rem 1.2rem;
  background: var(--encre);
  color: var(--papier);
  border-radius: var(--rayon);
}
.partie h2 {
  font-size: 1.2rem;
  color: inherit;
  margin: 0;
  padding: 0;
  border: 0;
}
.partie h2 .sur {
  display: block;
  font-size: .68rem;
  letter-spacing: .14em;
  text-transform: uppercase;
  color: var(--craie);
  margin-bottom: .3rem;
}
.partie p {
  margin: .55rem 0 0;
  color: rgba(251, 247, 238, .78);
  font-size: .95rem;
  max-width: 64ch;
}
.partie + .point { margin-top: 0; }
.formules .leg {
  font-size: .88rem;
  color: var(--encre-pale);
  margin: .45rem 0 0;
}

/* ——— Emploi du temps ——— */
:root {
  --m-maths: #4A3E8E;
  --m-physique: #1F7A6B;
  --m-info: #A85A16;
  --m-sii: #7A4A6B;
  --m-francais: #A33552;
  --m-langues: #2A5480;
  --m-eps: #526E26;
  --m-tipe: #8A5B12;
  --m-devoirs: #3D4654;
  --m-pause: #E4E7DF;
}
html[data-theme="dark"] { --m-pause: #2A2620; }

.edt-filtres {
  position: sticky;
  top: 0;
  z-index: 20;
  background: var(--papier);
  border-bottom: 1px solid var(--trait);
  padding: .9rem 0 .85rem;
  margin-bottom: 1.6rem;
}
.edt-filtres .rangee {
  display: flex;
  flex-wrap: wrap;
  gap: 1.2rem;
  align-items: flex-start;
}
.groupe-filtre { display: flex; flex-direction: column; gap: .35rem; }
.groupe-filtre > span {
  font-family: "IBM Plex Mono", ui-monospace, Consolas, monospace;
  font-size: .62rem;
  letter-spacing: .14em;
  text-transform: uppercase;
  color: var(--encre-pale);
}
.groupe-filtre .boutons { display: flex; gap: .25rem; flex-wrap: wrap; }
.groupe-filtre button {
  font-family: "IBM Plex Mono", ui-monospace, Consolas, monospace;
  font-size: .72rem;
  border: 1px solid var(--trait);
  background: var(--papier);
  color: var(--encre-pale);
  padding: .32rem .62rem;
  border-radius: 6px;
  cursor: pointer;
}
.groupe-filtre button:hover { border-color: var(--encre); color: var(--encre); }
.groupe-filtre button[aria-pressed="true"] {
  background: var(--encre);
  border-color: var(--encre);
  color: var(--papier);
}

.grille {
  display: grid;
  grid-template-columns: 52px repeat(6, minmax(0, 1fr));
  grid-template-rows: auto 1fr;
  align-content: start;
  gap: 0 4px;
  position: relative;
  border-top: 1px solid var(--trait);
}
.grille .entete-jour {
  font-family: "Bricolage Grotesque", sans-serif;
  font-weight: 700;
  font-size: .86rem;
  text-align: center;
  padding: .55rem 0 .5rem;
  border-bottom: 1px solid var(--trait);
  position: sticky;
  top: 0;
  background: var(--papier);
  z-index: 5;
}
.grille .coin { border-bottom: 1px solid var(--trait); }
.piste, .axe { position: relative; }
.axe .heure {
  position: absolute;
  right: 6px;
  transform: translateY(-50%);
  font-family: "IBM Plex Mono", ui-monospace, Consolas, monospace;
  font-size: .62rem;
  color: var(--encre-pale);
  white-space: nowrap;
}
.ligne {
  position: absolute;
  left: 0;
  right: 0;
  height: 0;
  border-top: 1px solid var(--trait);
  pointer-events: none;
  opacity: .45;
}
.ligne.forte { opacity: 1; }
.pause {
  position: absolute;
  left: 0;
  right: 0;
  background: repeating-linear-gradient(45deg, var(--fond) 0 6px, transparent 6px 12px);
  pointer-events: none;
}
.plage {
  position: absolute;
  left: 0;
  right: 0;
  border-radius: 6px;
  padding: .4rem .5rem;
  border-left: 3px solid;
  overflow: hidden;
  text-decoration: none;
  color: #fff;
  display: block;
  font-size: .74rem;
  line-height: 1.22;
}
.plage:hover { filter: brightness(1.12); color: #fff; }
.plage .n { font-family: "Bricolage Grotesque", sans-serif; font-weight: 700; font-size: .8rem; display: block; }
.plage .p, .plage .s { opacity: 1; display: block; color: #fff; }
.plage .s { font-family: "IBM Plex Mono", ui-monospace, Consolas, monospace; font-size: .62rem; }
.plage .n, .plage .p, .plage .s {
  text-shadow: 0 1px 1px rgba(0, 0, 0, .4);
}
.plage .tag {
  font-family: "IBM Plex Mono", ui-monospace, Consolas, monospace;
  font-size: .64rem;
  font-weight: 600;
  letter-spacing: .04em;
  text-transform: uppercase;
  color: #1a1712;
  background: #f7f2e6;
  padding: .14rem .4rem;
  border-radius: 3px;
  display: inline-block;
  margin-bottom: .22rem;
  line-height: 1.15;
  text-shadow: none;
}
.plage .flag { position: absolute; top: 2px; right: 4px; font-size: .7rem; opacity: .85; }
.plage.demi { font-size: .68rem; }
.plage.demi .n { font-size: .72rem; }
.plage.repas {
  background: var(--m-pause);
  color: var(--encre-pale);
  border-left-color: var(--trait);
  display: grid;
  place-items: center;
}
.plage.repas .n {
  font-family: "IBM Plex Mono", ui-monospace, Consolas, monospace;
  font-size: .62rem;
  font-weight: 500;
  letter-spacing: .12em;
  text-transform: uppercase;
}

.liste { display: none; }
.liste .jour { margin-bottom: 1.9rem; }
.liste .jour > h3 {
  font-size: 1.05rem;
  padding-bottom: .4rem;
  border-bottom: 2px solid var(--encre);
  margin-bottom: .7rem;
}
.liste .creneau {
  display: grid;
  grid-template-columns: 66px 1fr;
  gap: .7rem;
  align-items: start;
  padding: .55rem 0;
  border-bottom: 1px solid var(--trait);
  text-decoration: none;
  color: var(--encre);
}
.liste .creneau .h {
  font-family: "IBM Plex Mono", ui-monospace, Consolas, monospace;
  font-size: .7rem;
  color: var(--encre-pale);
  padding-top: .15rem;
}
.liste .creneau .corps { border-left: 3px solid; padding-left: .65rem; }
.liste .creneau .n { font-family: "Bricolage Grotesque", sans-serif; font-weight: 700; font-size: .95rem; display: block; }
.liste .creneau .tag {
  font-family: "IBM Plex Mono", ui-monospace, Consolas, monospace;
  font-size: .68rem;
  font-weight: 600;
  letter-spacing: .04em;
  text-transform: uppercase;
  color: #1a1712;
  background: #f7f2e6;
  border: 1px solid var(--trait);
  padding: .08rem .35rem;
  border-radius: 3px;
  display: inline-block;
  vertical-align: .1em;
}
.liste .creneau .p { font-size: .85rem; color: var(--encre-pale); display: block; }
.liste .vide { font-size: .88rem; color: var(--encre-pale); font-style: italic; }

.legende-mat { display: flex; flex-wrap: wrap; gap: .5rem; margin: 1.4rem 0 0; }
.legende-mat a {
  display: inline-flex;
  align-items: center;
  gap: .4rem;
  text-decoration: none;
  font-size: .82rem;
  color: var(--encre);
  border: 1px solid var(--trait);
  padding: .28rem .6rem;
  border-radius: 6px;
  background: var(--papier);
}
.legende-mat a:hover { border-color: var(--encre); }
.legende-mat i { width: .7rem; height: .7rem; border-radius: 2px; display: inline-block; }

@media (max-width: 700px) {
  .grille { display: none; }
  .liste { display: block; }
}

/* ——— Impression ——— */
@media print {
  :root { --fond: #fff; --papier: #fff; --encre: #000; --encre-pale: #333; --trait: #ccc; }
  html[data-theme="dark"] { --fond: #fff; --papier: #fff; --encre: #000; }
  .skip, .rail, .btn-menu, .btn-icon, .voile, .chap-barre, .point-suivi, .cta-bande, .filtres, .edt-filtres { display: none !important; }
  .liste { display: none !important; }
  .grille { display: grid !important; }
  .enveloppe { display: block; }
  .page { background: #fff; }
  .dedans { width: 100%; }
  .formules, .clair, .piege, .astuce, .histoire, .fiche-demo, .fiche-admis { background: #fff; color: #000; border: 1px solid #000; }
  .formules { border-width: 1px; }
  a { color: #000; text-decoration: none; }
  details.couche { border-style: solid; }
  details.couche > *:not(summary) { display: block !important; }
  body.mode-revision .couche-bo,
  body.mode-revision .couche-histoire,
  body.mode-revision #res { display: block !important; }
}
