/* ==========================================================================
   schemas.css — schémas pédagogiques des démos DoctoClic (v1, 30/09/2026)
   Se charge après socle.css et la feuille du style. Couleurs : jetons --ds-* uniquement.
   --k : inverse de l'échelle d'un groupe réduit (garde des traits de même épaisseur partout).
   ========================================================================== */

/* ---- Cadre et bascule ordinateur / téléphone ---- */
.ds-a-schema{max-width:620px}
.ds-a-schema svg{display:block;width:100%;height:auto;background:var(--ds-surface);border:1px solid var(--ds-rule);border-radius:var(--ds-r-l)}
.ds-a-schema .sa-v-p{display:none}
@media (max-width:640px){.ds-a-schema .sa-v-l{display:none}.ds-a-schema .sa-v-p{display:block}}

/* ---- Formes ---- */
.ds-a-schema .sa-dent{fill:#fff;stroke:var(--ds-ink);stroke-width:calc(1.6px * var(--k,1));stroke-linejoin:round}
.ds-a-schema .sa-email{fill:var(--ds-surface);stroke:var(--ds-ink);stroke-width:calc(1.2px * var(--k,1));stroke-linejoin:round}
.ds-a-schema .sa-pulpe{fill:var(--ds-accent)}
.ds-a-schema .sa-pulpe-n{fill:color-mix(in srgb,var(--ds-ink) 8%,#fff);stroke:color-mix(in srgb,var(--ds-ink) 30%,transparent);stroke-width:calc(1px * var(--k,1))}
.ds-a-schema .sa-pulpe-x{fill:color-mix(in srgb,var(--ds-ink) 32%,#fff)}
.ds-a-schema .sa-gen{fill:var(--ds-tint-2)}
.ds-a-schema .sa-os{fill:var(--ds-tint)}
.ds-a-schema .sa-os-l{fill:none;stroke:color-mix(in srgb,var(--ds-accent) 16%,transparent);stroke-width:calc(1.2px * var(--k,1))}
.ds-a-schema .sa-acc{fill:var(--ds-accent)}
.ds-a-schema .sa-acc-55{fill:color-mix(in srgb,var(--ds-accent) 55%,#fff)}
.ds-a-schema .sa-acc-30{fill:color-mix(in srgb,var(--ds-accent) 30%,#fff)}
.ds-a-schema .sa-acc-l{fill:none;stroke:var(--ds-accent);stroke-width:calc(2px * var(--k,1))}
.ds-a-schema .sa-halo{fill:color-mix(in srgb,var(--ds-accent) 22%,transparent);stroke:var(--ds-accent);stroke-width:calc(1.4px * var(--k,1));stroke-dasharray:calc(3px * var(--k,1)) calc(3px * var(--k,1))}
.ds-a-schema .sa-vide{fill:var(--ds-surface);stroke:var(--ds-accent);stroke-width:calc(1.3px * var(--k,1));stroke-dasharray:calc(4px * var(--k,1)) calc(3px * var(--k,1))}
.ds-a-schema .sa-ouvert{fill:var(--ds-surface);stroke:var(--ds-ink);stroke-width:calc(1.2px * var(--k,1))}
.ds-a-schema .sa-provisoire{fill:color-mix(in srgb,var(--ds-ink) 18%,#fff);stroke:var(--ds-ink);stroke-width:calc(1px * var(--k,1))}
.ds-a-schema .sa-coiffe{fill:color-mix(in srgb,var(--ds-accent) 30%,#fff);stroke:var(--ds-accent);stroke-width:calc(2px * var(--k,1));stroke-linejoin:round}
.ds-a-schema .sa-metal{fill:color-mix(in srgb,var(--ds-ink) 16%,var(--ds-surface));stroke:var(--ds-ink);stroke-width:calc(1.2px * var(--k,1));stroke-linejoin:round}
.ds-a-schema .sa-implant{fill:var(--ds-accent);stroke:var(--ds-ink);stroke-width:calc(1.2px * var(--k,1));stroke-linejoin:round}
.ds-a-schema .sa-spire{fill:none;stroke:var(--ds-surface);stroke-width:calc(1.6px * var(--k,1));stroke-linecap:round;opacity:.75}
.ds-a-schema .sa-lime{fill:none;stroke:var(--ds-ink);stroke-width:calc(1.4px * var(--k,1));stroke-linecap:round}
.ds-a-schema .sa-fl{fill:none;stroke:var(--ds-ink);stroke-width:calc(1.6px * var(--k,1));stroke-linecap:round;stroke-linejoin:round}

/* ---- Repères et textes ---- */
.ds-a-schema .sa-trait{fill:none;stroke:var(--ds-mute);stroke-width:1}
.ds-a-schema .sa-pt{fill:var(--ds-ink);stroke:#fff;stroke-width:1.5}
.ds-a-schema .sa-crochet{fill:none;stroke:var(--ds-mute);stroke-width:1}
.ds-a-schema text{font:500 16px var(--ds-f-body);fill:var(--ds-ink)}
.ds-a-schema text tspan.sa-k,.ds-a-schema text.sa-k{font:500 13.5px var(--ds-f-mono);letter-spacing:.08em;fill:var(--ds-mute)}
.ds-a-schema text.sa-t{font-weight:600}
.ds-a-schema text.sa-st{font-size:15px;font-weight:400;fill:var(--ds-body)}
.ds-a-schema .sa-num{fill:var(--ds-ink)}
.ds-a-schema .sa-num.sa-on{fill:var(--ds-accent)}
.ds-a-schema text.sa-num-t{font:600 13px var(--ds-f-body);fill:var(--ds-surface);text-anchor:middle}
.ds-a-schema .sa-v-p text{font-size:17px}
.ds-a-schema .sa-v-p text.sa-st{font-size:15px}
.ds-a-schema .sa-v-p text.sa-k,.ds-a-schema .sa-v-p text tspan.sa-k{font-size:13px}
.ds-a-schema .sa-v-p text.sa-num-t{font-size:13px}

/* ==========================================================================
   Animation d'apparition — déclenchée par .vu (famille.js), seulement sous html.dsa.
   Chaque élément porte style="--t:<ms>".
   ========================================================================== */
html.dsa .ds-a-schema .sa-tr{stroke-dasharray:1 1;transition:stroke-dashoffset .6s var(--ds-ease) calc(var(--t,0) * 1ms),fill-opacity .4s var(--ds-ease) calc(var(--t,0) * 1ms + 350ms)}
html.dsa .ds-a-schema:not(.vu) .sa-tr{stroke-dashoffset:1;fill-opacity:0}
html.dsa .ds-a-schema .sa-ap{transition:opacity .45s var(--ds-ease) calc(var(--t,0) * 1ms)}
html.dsa .ds-a-schema:not(.vu) .sa-ap{opacity:0}
html.dsa .ds-a-schema .sa-pt,html.dsa .ds-a-schema .sa-num{transform-box:fill-box;transform-origin:center;transition:transform .3s cubic-bezier(.3,1.6,.5,1) calc(var(--t,0) * 1ms)}
html.dsa .ds-a-schema:not(.vu) .sa-pt,html.dsa .ds-a-schema:not(.vu) .sa-num{transform:scale(0)}
html.dsa .ds-a-schema .sa-lb{transition:opacity .35s var(--ds-ease) calc(var(--t,0) * 1ms),transform .35s var(--ds-ease) calc(var(--t,0) * 1ms)}
html.dsa .ds-a-schema:not(.vu) .sa-lb{opacity:0;transform:translateX(-6px)}
html.dsa .ds-a-schema:not(.vu) .sa-num-t{opacity:0}
html.dsa .ds-a-schema .sa-num-t{transition:opacity .2s linear calc(var(--t,0) * 1ms + 150ms)}

/* Mouvements propres (une seule fois) */
html.dsa .ds-a-schema:not(.vu) .sa-an{opacity:0}
html.dsa .ds-a-schema .sa-an{transform-box:fill-box;transform-origin:var(--o,50% 50%)}
html.dsa .ds-a-schema.vu .sa-pousse{animation:sa-pousse .45s var(--ds-ease) calc(var(--t,0) * 1ms) both}
html.dsa .ds-a-schema.vu .sa-coule{animation:sa-coule .5s var(--ds-ease) calc(var(--t,0) * 1ms) both}
html.dsa .ds-a-schema.vu .sa-bat{animation:sa-bat .6s var(--ds-ease) calc(var(--t,0) * 1ms) both}
html.dsa .ds-a-schema.vu .sa-pose{animation:sa-pose .45s var(--ds-ease) calc(var(--t,0) * 1ms) both}
html.dsa .ds-a-schema.vu .sa-visse{animation:sa-visse .45s var(--ds-ease) calc(var(--t,0) * 1ms) both}
html.dsa .ds-a-schema.vu .sa-lime-a{animation:sa-lime .8s var(--ds-ease) calc(var(--t,0) * 1ms) both}
html.dsa .ds-a-schema.vu .sa-retire{animation:sa-retire .5s var(--ds-ease) calc(var(--t,0) * 1ms) both}
html.dsa .ds-a-schema.vu .sa-monte{animation:sa-monte .5s var(--ds-ease) calc(var(--t,0) * 1ms) both}
@keyframes sa-pousse{from{opacity:0;transform:scale(.3)}to{opacity:1;transform:none}}
@keyframes sa-coule{from{opacity:.2;transform:scaleY(0)}to{opacity:1;transform:none}}
@keyframes sa-bat{0%{opacity:0;transform:scale(.7)}60%{opacity:1;transform:scale(1.08)}100%{opacity:1;transform:none}}
@keyframes sa-pose{from{opacity:0;transform:translateY(-16px)}75%{opacity:1;transform:translateY(2px)}to{opacity:1;transform:none}}
@keyframes sa-visse{from{opacity:0;transform:translateY(-34px)}to{opacity:1;transform:none}}
@keyframes sa-lime{0%{opacity:0;transform:translateY(-26px)}35%{opacity:1;transform:none}55%{transform:translateY(-7px)}75%{transform:none}88%{transform:translateY(-5px)}100%{opacity:1;transform:none}}
@keyframes sa-retire{from{opacity:1;fill-opacity:1}to{opacity:1;fill-opacity:.55}}
@keyframes sa-monte{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}

@media (prefers-reduced-motion:reduce){
  .ds-a-schema *{animation:none!important;transition:none!important}
}

/* v2 — ligament autour des racines */
.ds-a-schema .sa-lig{fill:none;stroke:var(--ds-tint-2);stroke-width:calc(7px * var(--k,1))}
.ds-a-schema .sa-bord{fill:none;stroke:color-mix(in srgb,var(--ds-ink) 22%,transparent);stroke-width:calc(1px * var(--k,1))}

/* v2 — rangées, bridge, arcades, icônes */
.ds-a-schema .sa-pont-trait{fill:none;stroke:var(--ds-accent);stroke-width:calc(2.4px * var(--k,1));stroke-linejoin:round}
.ds-a-schema .sa-pont-fond{fill:color-mix(in srgb,var(--ds-accent) 20%,var(--ds-surface))}
.ds-a-schema .sa-fantome{fill:none;stroke:color-mix(in srgb,var(--ds-ink) 45%,transparent);stroke-width:calc(1.2px * var(--k,1));stroke-dasharray:calc(4px * var(--k,1)) calc(3px * var(--k,1))}
.ds-a-schema .sa-dent-d{fill:#fff;stroke:var(--ds-ink);stroke-width:calc(1.1px * var(--k,1));stroke-linejoin:round}
.ds-a-schema .sa-dent-acc{fill:color-mix(in srgb,var(--ds-accent) 55%,#fff);stroke:var(--ds-accent);stroke-width:calc(1.3px * var(--k,1));stroke-linejoin:round}
.ds-a-schema .sa-dent-acc30{fill:color-mix(in srgb,var(--ds-accent) 25%,#fff);stroke:var(--ds-accent);stroke-width:calc(1.3px * var(--k,1));stroke-linejoin:round}
.ds-a-schema .sa-dent-vide{fill:none;stroke:color-mix(in srgb,var(--ds-ink) 40%,transparent);stroke-width:calc(1px * var(--k,1));stroke-dasharray:calc(3px * var(--k,1)) calc(2.5px * var(--k,1))}
.ds-a-schema .sa-sillon{fill:none;stroke:color-mix(in srgb,var(--ds-ink) 28%,transparent);stroke-width:calc(.8px * var(--k,1));stroke-linecap:round}
.ds-a-schema .sa-gen-d{fill:var(--ds-tint-2)}
.ds-a-schema .sa-ico{fill:none;stroke:var(--ds-ink);stroke-width:calc(1.6px * var(--k,1));stroke-linecap:round;stroke-linejoin:round}
.ds-a-schema .sa-ico-acc{fill:none;stroke:var(--ds-accent);stroke-width:calc(1.6px * var(--k,1));stroke-linecap:round;stroke-linejoin:round}
.ds-a-schema .sa-ok{fill:none;stroke:var(--ds-accent);stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.ds-a-schema .sa-non{fill:none;stroke:color-mix(in srgb,var(--ds-ink) 60%,transparent);stroke-width:2;stroke-linecap:round}
.ds-a-schema .sa-carte{fill:#fff;stroke:var(--ds-rule-2,var(--ds-rule));stroke-width:1}
.ds-a-schema .sa-carte-acc{fill:color-mix(in srgb,var(--ds-accent) 10%,#fff);stroke:var(--ds-accent);stroke-width:1.4}
.ds-a-schema .sa-fl-acc{fill:none;stroke:var(--ds-accent);stroke-width:calc(2px * var(--k,1));stroke-linecap:round;stroke-linejoin:round}
.ds-a-schema text.sa-t2{font-weight:600;font-size:17px}
.ds-a-schema text.sa-acc-t{fill:var(--ds-accent)}
.ds-a-schema .sa-rule-v{fill:none;stroke:var(--ds-rule);stroke-width:1}
.ds-a-schema .sa-gen-inf{fill:color-mix(in srgb,var(--ds-accent) 26%,var(--ds-tint-2))}
.ds-a-schema .sa-poche{fill:var(--ds-surface);stroke:color-mix(in srgb,var(--ds-ink) 45%,transparent);stroke-width:calc(1px * var(--k,1))}
.ds-a-schema .sa-tartre{fill:color-mix(in srgb,var(--ds-ink) 42%,#fff);stroke:none}
.ds-a-schema .sa-fenetre{fill:var(--ds-bg,#fff);stroke:var(--ds-rule);stroke-width:1}
.ds-a-schema .sa-email-acc{fill:none;stroke:var(--ds-accent);stroke-width:calc(1px * var(--k,1));opacity:.7}
.ds-a-schema .sa-gouttiere{fill:color-mix(in srgb,var(--ds-accent) 7%,transparent);stroke:var(--ds-accent);stroke-width:calc(1.2px * var(--k,1));stroke-linejoin:round;opacity:.9}
.ds-a-schema .sa-encart{fill:var(--ds-bg,#fff);stroke:var(--ds-rule);stroke-width:1}
.ds-a-schema .sa-jalon{fill:var(--ds-bg,#fff);stroke:var(--ds-accent);stroke-width:2}
.ds-a-schema .sa-axe{fill:none;stroke:color-mix(in srgb,var(--ds-ink) 30%,transparent);stroke-width:1.5}
.ds-a-schema .sa-bande{fill:color-mix(in srgb,var(--ds-accent) 22%,transparent)}
.ds-a-schema .sa-graduation{fill:none;stroke:var(--ds-accent);stroke-width:1;opacity:.6}
.ds-a-schema .sa-curseur{fill:var(--ds-accent)}
html.dsa .ds-a-schema.vu .sa-glisse{animation:sa-glisse 1.5s var(--ds-ease) calc(var(--t,0) * 1ms) both}
@keyframes sa-glisse{from{transform:translate(0,0)}to{transform:translate(var(--dx,0),var(--dy,0))}}
.ds-a-schema .sa-brosse{fill:var(--ds-accent)}
.ds-a-schema .sa-brosse-manche{fill:color-mix(in srgb,var(--ds-accent) 70%,#fff)}
.ds-a-schema .sa-poils{fill:none;stroke:color-mix(in srgb,var(--ds-accent) 55%,#fff);stroke-width:calc(1.6px * var(--k,1));stroke-linecap:round}
.ds-a-schema text.sa-lettre{font-family:var(--ds-f-title);font-weight:700;font-size:34px;fill:var(--ds-accent)}
.ds-a-schema .sa-chemin{fill:none;stroke:var(--ds-accent);stroke-width:calc(1.6px * var(--k,1));stroke-dasharray:calc(4px * var(--k,1)) calc(4px * var(--k,1));stroke-linecap:round}
html.dsa .ds-a-schema.vu .sa-brosse-va{animation:sa-brosse-va .9s ease-in-out calc(var(--t,0) * 1ms) 1 both}
@keyframes sa-brosse-va{0%,100%{transform:none}25%{transform:translate(3px,-4px)}50%{transform:none}75%{transform:translate(3px,-4px)}}
.ds-a-schema .sa-badge{stroke:var(--ds-surface);stroke-width:4px}
.ds-a-schema text.sa-num-t.sa-lettre-b{font:700 20px var(--ds-f-title);fill:var(--ds-surface)}
.ds-a-schema .sa-medaillon{fill:var(--ds-surface);stroke:color-mix(in srgb,var(--ds-accent) 35%,transparent);stroke-width:1.4}
.ds-a-schema .sa-medaillon.sa-on{fill:var(--ds-accent);stroke:none}
.ds-a-schema .sa-ico-inv{fill:none;stroke:var(--ds-surface);stroke-width:calc(1.6px * var(--k,1));stroke-linecap:round;stroke-linejoin:round}
.ds-a-schema .sa-frise{fill:none;stroke:color-mix(in srgb,var(--ds-accent) 45%,transparent);stroke-width:1.6;stroke-dasharray:none}
.ds-a-schema .sa-alerte{fill:color-mix(in srgb,var(--ds-accent) 9%,var(--ds-surface));stroke:color-mix(in srgb,var(--ds-accent) 30%,transparent);stroke-width:1}
.ds-a-schema .sa-barre{fill:var(--ds-accent)}
.ds-a-schema .sa-noeud{fill:var(--ds-surface);stroke:var(--ds-ink);stroke-width:1.4}
.ds-a-schema .sa-rail{fill:none;stroke:var(--ds-accent);stroke-width:2.5;stroke-linecap:round;stroke-linejoin:round}
.ds-a-schema .sa-filet{fill:none;stroke:var(--ds-rule);stroke-width:1}
.ds-a-schema .sa-barre-t{fill:none;stroke:var(--ds-ink);stroke-width:1.8;stroke-linecap:round}
.ds-a-schema .sa-anneau{fill:none;stroke:var(--ds-accent);stroke-width:4;stroke-linecap:round}
.ds-a-schema .sa-anneau-fond{fill:var(--ds-surface);stroke:color-mix(in srgb,var(--ds-accent) 18%,transparent);stroke-width:4}
.ds-a-schema text.sa-vingt{font:700 30px var(--ds-f-title);fill:var(--ds-accent)}
/* lot 2 */
.ds-a-schema .sa-piece{fill:color-mix(in srgb,var(--ds-accent) 28%,#fff);stroke:var(--ds-accent);stroke-width:calc(1.8px * var(--k,1));stroke-linejoin:round}
.ds-a-schema .sa-piece-f{fill:color-mix(in srgb,var(--ds-accent) 28%,#fff)}
.ds-a-schema .sa-piece-l{fill:none;stroke:var(--ds-accent);stroke-width:calc(1.8px * var(--k,1));stroke-linejoin:round}
.ds-a-schema .sa-dent-l{fill:none;stroke:var(--ds-ink);stroke-width:calc(1.6px * var(--k,1));stroke-linejoin:round}
.ds-a-schema .sa-jauge-f{fill:var(--ds-tint-2)}
.ds-a-schema .sa-jauge-v{fill:color-mix(in srgb,var(--ds-ink) 72%,transparent)}
html.dsa .ds-a-schema .sa-jauge-v{transform-box:fill-box;transform-origin:left center;transition:transform .5s var(--ds-ease) calc(var(--t,0) * 1ms)}
html.dsa .ds-a-schema:not(.vu) .sa-jauge-v{transform:scaleX(0)}
.ds-a-schema .sa-tray-b path{fill:var(--ds-accent);stroke:var(--ds-accent);stroke-width:calc(17px * var(--k,1));stroke-linejoin:round}
.ds-a-schema .sa-tray path{fill:color-mix(in srgb,var(--ds-accent) 14%,var(--ds-surface));stroke:color-mix(in srgb,var(--ds-accent) 14%,var(--ds-surface));stroke-width:calc(14px * var(--k,1));stroke-linejoin:round}
.ds-a-schema .sa-racine-nue{fill:color-mix(in srgb,var(--ds-ink) 14%,#fff);stroke:none}
.ds-a-schema .sa-bord-g{fill:none;stroke:color-mix(in srgb,var(--ds-ink) 35%,transparent);stroke-width:1.2}
.ds-a-schema .sa-fl-pt{fill:none;stroke:var(--ds-accent);stroke-width:1.8;stroke-linecap:round}
.ds-a-schema .sa-sinus{fill:var(--ds-surface)}
.ds-a-schema .sa-membrane{fill:none;stroke:var(--ds-accent);stroke-width:calc(2.2px * var(--k,1));stroke-linecap:round}
.ds-a-schema .sa-trait-pt{fill:none;stroke:color-mix(in srgb,var(--ds-ink) 45%,transparent);stroke-width:calc(1.2px * var(--k,1));stroke-dasharray:calc(4px * var(--k,1)) calc(3px * var(--k,1))}
.ds-a-schema .sa-granule{fill:color-mix(in srgb,var(--ds-accent) 45%,var(--ds-surface));stroke:var(--ds-accent);stroke-width:calc(.8px * var(--k,1))}
.ds-a-schema .sa-os-neuf{fill:color-mix(in srgb,var(--ds-accent) 12%,var(--ds-tint))}
.ds-a-schema .sa-fantome-acc{fill:none;stroke:var(--ds-accent);stroke-width:calc(1.6px * var(--k,1));stroke-dasharray:calc(5px * var(--k,1)) calc(4px * var(--k,1))}
.ds-a-schema .sa-ecran{fill:var(--ds-ink);stroke:none}
.ds-a-schema .sa-ecran-pied{fill:none;stroke:var(--ds-ink);stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.ds-a-schema .sa-ecran-grille{fill:none;stroke:color-mix(in srgb,var(--ds-surface) 10%,transparent);stroke-width:.8}
.ds-a-schema .sa-ecran-os{fill:color-mix(in srgb,var(--ds-surface) 22%,transparent);stroke:color-mix(in srgb,var(--ds-surface) 85%,transparent);stroke-width:calc(1.4px * var(--k,1))}
.ds-a-schema .sa-ecran-gen{fill:color-mix(in srgb,var(--ds-surface) 45%,transparent)}
.ds-a-schema .sa-ecran-nerf{fill:none;stroke:color-mix(in srgb,var(--ds-surface) 60%,transparent);stroke-width:calc(1.2px * var(--k,1))}
.ds-a-schema .sa-ecran-axe{fill:none;stroke:color-mix(in srgb,var(--ds-accent) 45%,#fff);stroke-width:calc(1.4px * var(--k,1));stroke-dasharray:calc(5px * var(--k,1)) calc(4px * var(--k,1))}
.ds-a-schema .sa-ecran-impl{fill:color-mix(in srgb,var(--ds-accent) 35%,transparent);stroke:color-mix(in srgb,var(--ds-accent) 40%,#fff);stroke-width:calc(1.4px * var(--k,1))}
.ds-a-schema .sa-guide{fill:color-mix(in srgb,var(--ds-accent) 22%,transparent);stroke:var(--ds-accent);stroke-width:calc(1.8px * var(--k,1));stroke-linejoin:round}
.ds-a-schema .sa-bague-trou{fill:var(--ds-bg,#fff)}
.ds-a-schema .sa-axe-pt{fill:none;stroke:var(--ds-accent);stroke-width:calc(1.4px * var(--k,1));stroke-dasharray:calc(6px * var(--k,1)) calc(5px * var(--k,1))}
html.dsa .ds-a-schema.vu .sa-descend{animation:sa-descend .6s var(--ds-ease) calc(var(--t,0) * 1ms) both}
@keyframes sa-descend{from{opacity:0;transform:translateY(-60px)}to{opacity:1;transform:none}}
@media (prefers-reduced-motion:reduce){html.dsa .ds-a-schema.vu .sa-descend{animation:none}}
.ds-a-schema .sa-chassis{fill:none;stroke:color-mix(in srgb,var(--ds-ink) 55%,var(--ds-surface));stroke-width:calc(5px * var(--k,1));stroke-linecap:round}
.ds-a-schema .sa-crochet{fill:none;stroke:color-mix(in srgb,var(--ds-ink) 55%,var(--ds-surface));stroke-width:calc(2.4px * var(--k,1));stroke-linecap:round}
.ds-a-schema .sa-gencive-art{fill:color-mix(in srgb,var(--ds-accent) 30%,var(--ds-surface));stroke:var(--ds-accent);stroke-width:calc(1.4px * var(--k,1))}
.ds-a-schema .sa-fil{fill:none;stroke:var(--ds-accent);stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.ds-a-schema .sa-brossette-tige{fill:none;stroke:color-mix(in srgb,var(--ds-ink) 60%,var(--ds-surface));stroke-width:1.6;stroke-linecap:round}
.ds-a-schema .sa-poils-b{fill:none;stroke:var(--ds-accent);stroke-width:1.3;stroke-linecap:round}
.ds-a-schema .sa-brossette-manche{fill:var(--ds-accent)}
.ds-a-schema .sa-rule-h{fill:none;stroke:var(--ds-rule);stroke-width:1}
html.dsa .ds-a-schema.vu .sa-va-vient{animation:sa-va-vient 1s var(--ds-ease) calc(var(--t,0) * 1ms) both}
@keyframes sa-va-vient{0%{opacity:0;transform:translate(14px,13px)}25%{opacity:1;transform:none}50%{transform:translate(8px,7px)}75%,100%{opacity:1;transform:none}}
@media (prefers-reduced-motion:reduce){html.dsa .ds-a-schema.vu .sa-va-vient{animation:none}}
.ds-a-schema .sa-peau{fill:color-mix(in srgb,var(--ds-ink) 5%,var(--ds-surface))}
.ds-a-schema .sa-profil{fill:none;stroke:var(--ds-ink);stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}
.ds-a-schema .sa-air{fill:color-mix(in srgb,var(--ds-accent) 14%,var(--ds-surface))}
.ds-a-schema .sa-palais{fill:var(--ds-tint-2);stroke:color-mix(in srgb,var(--ds-ink) 35%,transparent);stroke-width:1}
.ds-a-schema .sa-palais-dur{fill:none;stroke:color-mix(in srgb,var(--ds-ink) 55%,transparent);stroke-width:3;stroke-linecap:round}
.ds-a-schema .sa-langue{fill:color-mix(in srgb,var(--ds-accent) 26%,var(--ds-surface));stroke:color-mix(in srgb,var(--ds-accent) 60%,transparent);stroke-width:1.2}
.ds-a-schema .sa-muscle{fill:color-mix(in srgb,var(--ds-ink) 9%,transparent);stroke:color-mix(in srgb,var(--ds-ink) 18%,transparent);stroke-width:1}
.ds-a-schema .sa-bord-os{fill:none;stroke:var(--ds-ink);stroke-width:calc(1.4px * var(--k,1));stroke-linejoin:round}
.ds-a-schema .sa-disque{fill:var(--ds-accent);stroke:none}
html.dsa .ds-a-schema.vu .sa-ouvre{transform-box:fill-box;animation:sa-ouvre 1.6s var(--ds-ease) calc(var(--t,0) * 1ms) both}
@keyframes sa-ouvre{0%,10%{transform:none}45%,60%{transform:translate(-22px,9px) rotate(-15deg)}95%,100%{transform:none}}
@media (prefers-reduced-motion:reduce){html.dsa .ds-a-schema.vu .sa-ouvre{animation:none}}

/* ---- Téléphone, variante A (telephone.css limite les figures à 220 px, pour les photos) : un schéma garde sa hauteur ---- */
html.mob-a .ds-a-schema{max-height:none;overflow:visible}
