/* Navigation par prismes — ajout à la direction T.
   Deux tokens nouveaux, et rien d'autre : les paliers peuplés.
   Mesures @graphiste, 2026-10-07, sur --panneau #161B21. */
:root{
  --pop-1:#7D858E;   /* 4,99:1 fond · 4,63:1 panneau */
  --pop-2:#B1B9C2;   /* 9,40:1 fond · 8,73:1 panneau */
  /* palier 3 = --encre, déjà là. --signal n'entre jamais ici. */
}

/* ─ le sélecteur de prisme : des LIENS, une URL par prisme.
     Sans JS le site reste entièrement navigable ; la transition
     est un enrichissement progressif, pas une condition. */
.prismes{display:flex;flex-wrap:wrap;gap:1px;margin:0 0 1.4rem;padding:0;list-style:none}
.prismes li{margin:0}
.prismes a{
  display:block;padding:.34rem .6rem;
  font-family:var(--mono);font-size:.72rem;letter-spacing:.06em;
  color:var(--muted);text-decoration:none;
  border:1px solid var(--filet);
}
.prismes a:hover{border-color:var(--filet-fort);color:var(--encre)}
.prismes a[aria-current="true"]{
  color:var(--encre);border-color:var(--filet-fort);background:var(--panneau);
}
.prismes .k{color:var(--half)}

/* ─ la figure. Panneau à 1,08:1 du fond : bordure 1 px obligatoire. */
.fig-prisme{
  background:var(--panneau);border:1px solid var(--filet-fort);
  padding:1rem;margin:0 0 1rem;
}
.fig-prisme svg{display:block;width:100%;height:auto}

/* La position s'interpole, la quantité commute à l'arrivée : une pastille
   qui passerait progressivement d'un palier à l'autre afficherait pendant
   420 ms une densité qui n'existe pas. La donnée ne mentira jamais en vol. */
.fig-prisme circle,.fig-prisme line,.fig-prisme text{
  transition:cx 420ms cubic-bezier(.22,.61,.36,1),
             cy 420ms cubic-bezier(.22,.61,.36,1),
             x1 420ms cubic-bezier(.22,.61,.36,1),
             y1 420ms cubic-bezier(.22,.61,.36,1),
             x2 420ms cubic-bezier(.22,.61,.36,1),
             y2 420ms cubic-bezier(.22,.61,.36,1),
             x  420ms cubic-bezier(.22,.61,.36,1),
             y  420ms cubic-bezier(.22,.61,.36,1),
             fill 0ms 420ms, stroke 0ms 420ms, r 0ms 420ms;
}

/* ─ la ligne des vides : l'information la plus intéressante de la figure,
     dite en mots parce qu'un anneau gris est discret et que le signal est
     interdit sur un dispositif de navigation. Permanente, pas un survol :
     elle survit au mouvement réduit, au téléphone et au papier. */
.vides{
  font-family:var(--mono);font-size:.72rem;line-height:1.7;
  color:var(--muted);margin:0 0 1.6rem;max-width:var(--mesure);
}
.vides b{color:var(--encre);font-weight:400}

/* ─ la légende de la rampe. Une couleur n'est jamais seule porteuse :
     le rayon double l'intensité, et le compte exact la triple. */
.rampe{display:flex;flex-wrap:wrap;gap:1.1rem;margin:0 0 1.6rem;padding:0;
  list-style:none;font-family:var(--mono);font-size:.68rem;color:var(--muted)}
.rampe li{display:flex;align-items:center;gap:.4rem}
.rampe span{display:inline-block;border-radius:50%}
.rampe .p0{width:8px;height:8px;background:var(--pop-1)}
.rampe .p1{width:10px;height:10px;background:var(--pop-2)}
.rampe .p2{width:13px;height:13px;background:var(--encre)}
.rampe .pv{width:8px;height:8px;background:var(--panneau);
  box-shadow:inset 0 0 0 1px var(--filet-fig)}

/* ─ la liste : 15ᵉ prisme, vue téléphone des cubes, version imprimée.
     Classe .cote et NON .piste — C11 compte les .piste et doit continuer
     à en compter autant que de sections à marqueurs. */
.nuage{width:100%;border-collapse:collapse;font-size:.92rem}
.nuage th{
  text-align:left;font-family:var(--mono);font-size:.68rem;font-weight:400;
  letter-spacing:.06em;color:var(--muted);
  border-bottom:1px solid var(--filet-fort);padding:0 .7rem .4rem 0;
}
.nuage td{padding:.44rem .7rem .44rem 0;border-bottom:1px solid var(--filet);
  vertical-align:baseline}
.nuage tr.vide td{color:var(--muted)}
.nuage .n{font-family:var(--mono);font-size:.74rem;color:var(--muted);
  text-align:right;width:2.2rem}
.nuage a{color:var(--encre);text-decoration-color:var(--filet-fort);
  text-underline-offset:.22em;text-decoration-thickness:1px}
.nuage a:hover{text-underline-offset:.14em}
.nuage .rien{color:var(--muted)}

/* La cote réutilise le vocabulaire du geste 1 : cellules jointives,
   marqueur traité à 2 px, non traité à 1 px. Troisième état nécessaire
   ici, « hors champ » : un VIDE, une cellule sans filet du tout.
   L'absence n'est pas une épaisseur, donc la loi des filets reste intacte. */
.nuage td.cote{display:flex;gap:2px;width:4.6rem;padding-top:.7rem}
.nuage td.cote i{display:block;width:9px;height:1px;background:var(--filet-fort)}
.nuage td.cote i.on{height:2px;background:var(--encre)}
.nuage td.cote i.hors{background:none}

@media (max-width:560px){
  .fig-prisme{padding:.6rem}
  .prismes a{padding:.3rem .45rem;font-size:.68rem}
}
@media (max-width:480px){
  /* Un prisme est une projection ; sous 480 px, on projette plus fort. Ce
     n'est pas une dégradation, c'est la règle appliquée à la largeur de
     l'appareil.
     Le cube (8 nœuds) passe à la LISTE : le SVG se met à l'échelle de la
     largeur, donc à 390 px le viewBox de 560 est réduit à 0,70 — les nœuds
     du palier 1 tombent à 2,9 px, le texte des cotes à 7 px sous le plancher
     de la charte, et un trait d'1 px devient sous-pixellaire. Un palier qui
     disparaît est un mensonge.
     La face (4 nœuds) et l'axe (2 nœuds) restent des figures : il y a plus de
     place par nœud à 390 px en vue face qu'à 560 px en vue cube. */
  .fig-prisme.k3{display:none}
  .fig-prisme.k3 + .rampe{display:none}
}
@media print{
  /* Pas de rampe sur le papier : une pastille de 4 mm tramée à 25 %
     en laser fait une pastille sale, pas un palier. La figure est un
     instrument d'écran ; sur papier, l'instrument est le tableau. */
  .fig-prisme,.prismes,.rampe{display:none}
  .nuage td.cote i.on{height:1.2pt;background:#000}
  .nuage td.cote i{background:#777}
}

/* ─ P1 : les constats avec leur fragilité.
     Un constat qui tient à un seul placement n'est pas énoncé comme un
     résultat — il est énoncé comme une observation, et la liste le dit.
     Même esprit que variance_pistes() : le build retire la figure quand la
     donnée est plate, il retire l'affirmation quand elle tient à un fil. */
.eprouve{
  list-style:none;margin:0 0 1.8rem;padding:0 0 0 .9rem;
  border-left:1px solid var(--filet-fort);
  font-family:var(--mono);font-size:.7rem;line-height:1.8;color:var(--muted);
  max-width:72ch;
}
.eprouve li{margin:0 0 .5rem}
.eprouve b{color:var(--encre);font-weight:400}
