/* SLH ▶ Animate component (preview, 2026-11-03) */
.sa{--sa-bg:#0d0b08;--sa-bg2:#16120b;--sa-ink:#f6ead2;--sa-mut:#a99878;--sa-line:#3a3020;--sa-g1:#f8e0b6;--sa-g2:#e2bc72;--sa-g3:#c39552;--sa-g4:#9a6e2a;--sa-water:rgba(96,165,250,.20);--sa-panel:rgba(255,255,255,.04);
 position:relative;margin:1.2rem 0;border-radius:18px;border:1px solid rgba(226,188,114,.38);background:radial-gradient(120% 90% at 0% 0%,#1d170d 0%,var(--sa-bg) 55%);color:var(--sa-ink);box-shadow:0 18px 40px -26px rgba(0,0,0,.8),inset 0 1px 0 rgba(248,224,182,.08);overflow:hidden;max-width:100%;font:inherit}
html[data-theme=light] .sa{--sa-bg:#fffaf0;--sa-bg2:#fbf2df;--sa-ink:#2a2112;--sa-mut:#7a6a4c;--sa-line:#e5d5b2;--sa-g1:#9a6e2a;--sa-g2:#b0812f;--sa-g3:#94692a;--sa-g4:#6e4d17;--sa-water:rgba(59,130,246,.14);--sa-panel:rgba(0,0,0,.025);background:linear-gradient(160deg,#fffdf7,#fbf1dc);box-shadow:0 14px 30px -24px rgba(90,60,10,.45)}
.sa *{box-sizing:border-box}
.sa-hd{display:flex;align-items:center;gap:.55rem;padding:.75rem .95rem .2rem;flex-wrap:wrap}
.sa-tag{font-size:.66rem;letter-spacing:.12em;text-transform:uppercase;font-weight:700;padding:.22rem .55rem;border-radius:99px;color:#1a1206;background:linear-gradient(135deg,#f8e0b6,#e2bc72 45%,#c39552)}
.sa-t{font-weight:700;font-size:1.02rem;line-height:1.3;color:var(--sa-ink);margin:0;flex:1 1 100%;order:3}
.sa-stage{position:relative;padding:.3rem .55rem 0}
.sa-stage svg{display:block;width:100%;height:auto;max-height:62vh;overflow:visible;font-family:inherit;-webkit-user-select:none;user-select:none}
.sa-load{display:grid;place-items:center;aspect-ratio:16/10;color:var(--sa-mut);font-size:.9rem}
.sa-cap{position:relative;min-height:3.6em;margin:.35rem .9rem .2rem;padding:.6rem .8rem;border-radius:12px;background:var(--sa-panel);border:1px solid var(--sa-line);font-size:.95rem;line-height:1.5;color:var(--sa-ink)}
.sa-cap b.sa-sn{color:var(--sa-g2);font-weight:700;margin-right:.35rem;white-space:nowrap}
.sa-ctl{display:flex;align-items:center;gap:.45rem;padding:.55rem .9rem .85rem;flex-wrap:wrap}
.sa-ctl button{font:inherit;cursor:pointer;border-radius:12px;min-height:44px;min-width:44px;border:1px solid var(--sa-line);background:var(--sa-panel);color:var(--sa-ink);font-size:.95rem;padding:0 .7rem;display:inline-flex;align-items:center;justify-content:center;gap:.35rem;transition:transform .12s,background .2s,border-color .2s}
.sa-ctl button:hover{border-color:var(--sa-g3)}
.sa-ctl button:active{transform:scale(.96)}
.sa-ctl button:focus-visible{outline:2px solid var(--sa-g2);outline-offset:2px}
.sa-ctl button[disabled]{opacity:.38;cursor:default}
.sa-ctl .sa-play{font-weight:700;color:#1a1206;border:0;padding:0 1.1rem;background:linear-gradient(135deg,#f8e0b6 0%,#e2bc72 40%,#c39552 75%,#9a6e2a 100%);box-shadow:0 6px 18px -8px rgba(226,188,114,.8),inset 0 1px 0 rgba(255,255,255,.5)}
.sa.sa-idle .sa-play{animation:saPulse 2.4s ease-in-out infinite}
@keyframes saPulse{0%,100%{box-shadow:0 6px 18px -8px rgba(226,188,114,.8),0 0 0 0 rgba(226,188,114,.45)}50%{box-shadow:0 6px 18px -8px rgba(226,188,114,.8),0 0 0 8px rgba(226,188,114,0)}}
.sa-dots{display:flex;gap:5px;align-items:center;flex:1 1 0;justify-content:center;min-width:0;overflow:hidden}
.sa-dots i{width:7px;height:7px;border-radius:50%;background:var(--sa-line);transition:all .25s}
.sa-dots i.on{background:var(--sa-g2);width:18px;border-radius:5px}
.sa-dots i.dn{background:var(--sa-g4)}
.sa-hd .sa-sp{font:inherit;font-size:.8rem;font-weight:700;cursor:pointer;margin-left:auto;min-height:36px;min-width:44px;border-radius:99px;border:1px solid var(--sa-line);background:var(--sa-panel);color:var(--sa-g2);padding:0 .6rem}.sa-hd .sa-sp:focus-visible{outline:2px solid var(--sa-g2);outline-offset:2px}
/* SVG palette */
.sa svg .t{fill:var(--sa-ink)}.sa svg .tm{fill:var(--sa-mut)}.sa svg .tg{fill:var(--sa-g2)}
.sa svg .s{stroke:var(--sa-ink);fill:none}.sa svg .sm{stroke:var(--sa-mut);fill:none}.sa svg .sg{stroke:var(--sa-g2);fill:none}
.sa svg .sbg{stroke:var(--sa-bg);fill:none}.sa svg .fg{fill:var(--sa-g2)}.sa svg .fbg{fill:var(--sa-bg)}.sa svg .fp{fill:var(--sa-bg2)}.sa svg .fw{fill:var(--sa-water)}
.sa svg text{font-size:12.5px;font-weight:600;paint-order:stroke;stroke:var(--sa-bg);stroke-width:3px;stroke-linejoin:round}
.sa svg text.nb{stroke:none}
.sa svg .hl{filter:drop-shadow(0 0 4px rgba(226,188,114,.9))}
@media (max-width:440px){.sa-dots{display:none}.sa-ctl .sa-prev{margin-left:auto}}
@media (max-width:480px){.sa-cap{font-size:.92rem;margin:.3rem .6rem .2rem}.sa-ctl{padding:.5rem .6rem .75rem;gap:.35rem}.sa-ctl button{padding:0 .55rem}.sa-stage{padding:.2rem .2rem 0}.sa-hd{padding:.65rem .7rem .15rem}}
@media (prefers-reduced-motion:reduce){.sa.sa-idle .sa-play{animation:none}.sa-dots i{transition:none}}
/* chip used inside chapter text, next to the existing diagram / 3D chips */
a.cc.an{background:linear-gradient(135deg,rgba(248,224,182,.22),rgba(195,149,82,.22));border-radius:7px;padding:0 .3rem;text-decoration:none;font-weight:700;color:inherit;white-space:nowrap}
a.cc.an:before{content:"▶ ";color:#c39552;font-size:.8em}

/* 3D mode (2026-11-03) */
.sa-dim{display:inline-flex;margin-left:auto;border:1px solid var(--sa-line);border-radius:99px;padding:2px;background:var(--sa-panel);gap:2px}
.sa-dim button{font:inherit;font-size:.8rem;font-weight:800;min-height:32px;min-width:44px;border:0;border-radius:99px;background:transparent;color:var(--sa-mut);cursor:pointer;padding:0 .7rem;letter-spacing:.02em}
.sa-dim button[aria-pressed=true]{background:linear-gradient(135deg,var(--sa-g1),var(--sa-g3));color:#1a1206;box-shadow:0 1px 6px rgba(226,188,114,.35)}
html[data-theme=light] .sa-dim button[aria-pressed=true]{background:linear-gradient(135deg,#e2bc72,#c39552);color:#1a1206}
.sa-dim button:disabled{opacity:.45;cursor:not-allowed}
.sa-dim button:focus-visible{outline:2px solid var(--sa-g2);outline-offset:2px}
.sa-hd .sa-dim+.sa-sp{margin-left:.4rem}
.sa-note{margin:.35rem .95rem 0;font-size:.85rem;color:var(--sa-mut)}.sa-note:empty{display:none}
.sa3-box{position:relative}
.sa3{position:relative;width:100%;overflow:hidden;border-radius:14px;background:radial-gradient(ellipse at 50% 42%,var(--sa-bg2) 0%,var(--sa-bg) 78%);border:1px solid var(--sa-line);-webkit-user-select:none;user-select:none}
.sa3-cv{display:block;width:100%;height:100%;touch-action:none;cursor:grab}.sa3-cv:active{cursor:grabbing}
.sa3-lab{position:absolute;inset:0;pointer-events:none;overflow:hidden}
.sa3-l{position:absolute;left:0;top:0;font-size:11.5px;line-height:1.25;font-weight:700;color:var(--sa-ink);background:var(--sa-bg);border:1px solid var(--sa-line);padding:1px 6px;border-radius:8px;white-space:nowrap;will-change:transform}
.sa3-l.sm{font-size:10.5px;color:var(--sa-mut)}
.sa3-l.b{border-color:rgba(96,165,250,.55)}.sa3-l.r{border-color:rgba(239,68,68,.55)}
.sa3-l.k{font-weight:800}.sa3-l.b.k{color:#60a5fa}.sa3-l.r.k{color:#f87171}
html[data-theme=light] .sa3-l.b.k{color:#2563eb}html[data-theme=light] .sa3-l.r.k{color:#dc2626}
.sa3-l.on{color:#1a1206;background:var(--sa-g2);border-color:var(--sa-g2);box-shadow:0 0 10px rgba(226,188,114,.55)}
html[data-theme=light] .sa3-l.on{background:#e2bc72;border-color:#c39552}
.sa3-hint{position:absolute;left:8px;top:8px;max-width:calc(100% - 64px);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;text-align:center;font-size:.7rem;font-weight:600;color:var(--sa-ink);background:var(--sa-panel);border:1px solid var(--sa-line);border-radius:99px;padding:.2rem .7rem;pointer-events:none;transition:opacity .6s;backdrop-filter:blur(4px)}
.sa3-hint.gone{opacity:0}
.sa3-tools{position:absolute;right:6px;top:6px;display:flex;flex-direction:column;gap:5px}
.sa3-tools button{width:36px;height:36px;border-radius:50%;border:1px solid var(--sa-line);background:var(--sa-bg);color:var(--sa-g2);font:inherit;font-size:1.05rem;font-weight:800;line-height:1;cursor:pointer;display:grid;place-items:center;padding:0}
.sa3-tools button:focus-visible{outline:2px solid var(--sa-g2);outline-offset:1px}
.sa3-ld{position:absolute;inset:0;display:grid;place-items:center;background:rgba(0,0,0,.35);border-radius:14px;z-index:2;color:#f6ead2}
@media (max-width:480px){.sa3-l{font-size:10.5px;padding:1px 5px}.sa3-l.sm{font-size:9.5px}.sa-dim button{min-width:40px;padding:0 .55rem}}
@media (prefers-reduced-motion:reduce){.sa3-hint{transition:none}}

.dcard.an-dc{border-color:rgba(226,188,114,.7)!important}.dcard.an-dc small{color:#c39552;font-weight:700}

/* Wide + full screen (2026-11-04) */
.sa-hd .sa-fsb{font:inherit;font-size:.8rem;font-weight:800;cursor:pointer;min-height:36px;min-width:44px;border-radius:99px;border:1px solid rgba(226,188,114,.55);background:var(--sa-panel);color:var(--sa-g2);padding:0 .7rem;display:inline-flex;align-items:center;gap:.3rem;margin-left:.4rem;white-space:nowrap}
.sa-hd .sa-fsb:hover{border-color:var(--sa-g2)}.sa-hd .sa-fsb:focus-visible{outline:2px solid var(--sa-g2);outline-offset:2px}
.sa-fsb .sa-fi{display:inline-flex;line-height:0}
.sa-hd .sa-sp:last-child,.sa-hd .sa-fsb{flex:0 0 auto}
@media (max-width:480px){.sa-fsb .sa-fl{display:none}.sa-hd .sa-fsb{padding:0 .5rem}}
@media (min-width:1024px){
 .sa:not(.sa-fs){width:max(100%,min(1200px,94vw));max-width:none;margin-left:calc((100% - max(100%,min(1200px,94vw)))/2);margin-right:calc((100% - max(100%,min(1200px,94vw)))/2)}
 .sa:not(.sa-fs) .sa-stage{padding:.5rem 1.2rem 0}
 .sa:not(.sa-fs) .sa-stage svg{max-height:min(78vh,calc(100vh - 290px));min-height:0}
 .sa:not(.sa-fs) .sa-cap{font-size:1.04rem;margin:.45rem 1.2rem .25rem;max-width:none}
 .sa:not(.sa-fs) .sa-hd{padding:.85rem 1.2rem .25rem}.sa:not(.sa-fs) .sa-ctl{padding:.6rem 1.2rem .95rem}
 .sa-t{font-size:1.12rem}
}
/* full screen: native (element) or fixed overlay fallback */
.sa.sa-fs{position:fixed;inset:0;z-index:2147483000;width:100%!important;height:100%;max-width:none!important;margin:0!important;border-radius:0;border:0;display:flex;flex-direction:column;background:radial-gradient(120% 90% at 50% 0%,#1d170d 0%,#0b0906 60%)!important;box-shadow:none;overflow:hidden}
.sa.sa-fs:fullscreen{position:static;width:100vw!important;height:100vh}
.sa.sa-fs:-webkit-full-screen{position:static;width:100vw!important;height:100vh}
html[data-theme=light] .sa.sa-fs{--sa-bg:#0d0b08;--sa-bg2:#16120b;--sa-ink:#f6ead2;--sa-mut:#a99878;--sa-line:#3a3020;--sa-g1:#f8e0b6;--sa-g2:#e2bc72;--sa-g3:#c39552;--sa-g4:#9a6e2a;--sa-water:rgba(96,165,250,.20);--sa-panel:rgba(255,255,255,.04)}
.sa.sa-fs::backdrop{background:#0b0906}
.sa.sa-fs .sa-hd{flex:0 0 auto;padding:max(.6rem,env(safe-area-inset-top)) max(1rem,env(safe-area-inset-right)) .2rem max(1rem,env(safe-area-inset-left));border-bottom:1px solid rgba(226,188,114,.18)}
.sa.sa-fs .sa-t{flex:1 1 auto;order:0;font-size:1.05rem;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.sa.sa-fs .sa-tag{display:none}
.sa.sa-fs .sa-stage{flex:1 1 0;min-height:0;overflow:hidden;padding:.5rem max(.6rem,env(safe-area-inset-right)) 0 max(.6rem,env(safe-area-inset-left));display:flex;flex-direction:column;justify-content:center}
.sa.sa-fs .sa-stage>svg{width:100%;height:100%;max-height:none;flex:1 1 0;min-height:0}
.sa.sa-fs .sa3-box{flex:1 1 0;min-height:0}
.sa.sa-fs .sa-load{flex:1 1 0;aspect-ratio:auto}
.sa.sa-fs .sa-cap{flex:0 0 auto;width:min(1100px,calc(100% - 1.6rem));margin:.4rem auto .2rem;font-size:clamp(.95rem,1.25vw,1.15rem)}
.sa.sa-fs .sa-note{flex:0 0 auto;text-align:center}
.sa.sa-fs .sa-ctl{flex:0 0 auto;width:min(1100px,100%);margin:0 auto;padding:.5rem 1rem max(.8rem,env(safe-area-inset-bottom))}
.sa.sa-fs .sa-fsb{border-color:var(--sa-g2);color:#1a1206;background:linear-gradient(135deg,#f8e0b6,#e2bc72 45%,#c39552)}
html.sa-lock,html.sa-lock body{overflow:hidden!important}
@media (max-width:480px){.sa.sa-fs .sa-cap{font-size:.92rem;min-height:0!important;max-height:32vh;overflow:auto}.sa.sa-fs .sa-t{font-size:.95rem}}
@media (max-height:500px){.sa.sa-fs .sa-cap{min-height:0!important;max-height:28vh;overflow:auto;font-size:.88rem;margin:.2rem auto}.sa.sa-fs .sa-ctl{padding-top:.25rem;padding-bottom:.3rem}.sa.sa-fs .sa-ctl button{min-height:38px}}
/* anchor offset: #an-… lands below sticky nav (63px) + language bar (61px); html already has scroll-padding-top 76px (f08bacb3) */
.slh-anim{scroll-margin-top:64px}

@media (min-width:1024px){.an-grid .sa:not(.sa-fs){width:100%;max-width:100%;margin-left:0;margin-right:0}}
