:root{--bg:#030816;--cyan:#37e6ff;--gold:#fc6;--ink:#eef7ff;--dim:#9fc3dc;--font:"PingFang SC", "Microsoft YaHei", "Noto Sans CJK SC", "Source Han Sans SC", "Segoe UI", system-ui, -apple-system, sans-serif;--num:"Bahnschrift", "DIN Alternate", "Avenir Next Condensed", "Segoe UI", "Helvetica Neue", Arial, sans-serif;--year-size:clamp(84px, 24vw, 112px);--title-size:clamp(22px, 6vw, 32px);--note-size:clamp(16px, 4.4vw, 20px);--theme-size:clamp(56px, 17vw, 96px);--school-size:clamp(28px, 8vw, 40px);--maxw:calc(100vw - 80px);--maxw-wide:calc(100vw - 80px);--vp-y:50%}@media (width>=900px){:root{--year-size:clamp(120px, 8.6vw, 220px);--title-size:clamp(40px, 2.8vw, 68px);--note-size:clamp(28px, 1.62vw, 40px);--theme-size:clamp(140px, 11vw, 260px);--school-size:clamp(56px, 4.4vw, 104px);--maxw:min(72vw, 680px);--maxw-wide:min(84vw, 1500px)}}*{box-sizing:border-box}html,body{overscroll-behavior:none;background:var(--bg);height:100%;color:var(--ink);font-family:var(--font);-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%;margin:0;overflow:hidden}body{touch-action:none;-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;background:radial-gradient(ellipse at 50% var(--vp-y), #0a2440 0%, #051226 38%, var(--bg) 72%)}#stage{width:100%;height:100%;display:block;position:fixed;inset:0}.no-webgl #stage{display:none}#veil{z-index:1;background:var(--bg);opacity:0;pointer-events:none;transition:opacity .28s;position:fixed;inset:0}.veil-on #veil{opacity:1}#caption{z-index:2;pointer-events:none;position:fixed;inset:0}.cap{left:50%;top:var(--top,50%);width:max-content;max-width:var(--maxw);text-align:center;opacity:var(--o,0);transform:translate(-50%, -50%) scale(var(--s,1));will-change:opacity, transform;position:absolute}.cap.is-off{visibility:hidden}.cap p,.cap h1,.cap h2{margin:0}.reduced .cap{transition:opacity .28s}.veil-on .cap{opacity:0!important}.cap--node:before,.cap--intro:before,.cap--finale:before{content:"";z-index:-1;background:radial-gradient(closest-side,#030816d1,#0308168c 58%,#03081600);position:absolute;inset:-16% -18%}.year,.theme{background:linear-gradient(#fff6da 0%,#fc6 52%,#e9a038 100%);color:#0000;filter:drop-shadow(0 0 22px #ffbe506b);-webkit-background-clip:text;background-clip:text}.year{font:700 var(--year-size) / .95 var(--num);font-variant-numeric:tabular-nums;letter-spacing:.02em}.title{font-size:var(--title-size);letter-spacing:.06em;color:#fff;text-shadow:0 0 18px #37e6ff8c,0 2px 8px #000c;text-wrap:balance;font-weight:700;line-height:1.25;margin-top:.22em!important}.note{font-size:var(--note-size);color:#d6ecff;text-shadow:0 2px 10px #000000e6;overflow-wrap:anywhere;line-break:strict;text-wrap:pretty;line-height:1.55;margin-top:.5em!important}.cap--intro{max-width:var(--maxw-wide)}.kicker{font-size:calc(var(--note-size) * 1.08);letter-spacing:.22em;text-indent:.22em;color:var(--cyan);text-shadow:0 0 16px #37e6ff99}.theme{font-size:var(--theme-size);letter-spacing:.08em;text-indent:.08em;font-weight:800;line-height:1.15;margin-top:.08em!important}.span{font:600 calc(var(--note-size) * 1.25) / 1.2 var(--num);letter-spacing:.16em;color:#d6ecff;margin-top:.3em!important}.cap--finale{--top:68%;max-width:var(--maxw-wide);transform:translate(-50%, 0) scale(var(--s,1))}.school{font-size:var(--school-size);letter-spacing:.14em;text-indent:.14em;color:#fff;text-shadow:0 0 26px #37e6ffb3,0 2px 10px #000c;font-weight:800;line-height:1.2}.tagline{font-size:calc(var(--note-size) * 1.1);letter-spacing:.2em;text-indent:.2em;color:var(--gold);text-shadow:0 0 16px #ffbe5080;margin-top:.5em!important}.portrait .cap--node{width:100%;max-width:none;height:100%;transform:scale(var(--s,1));transform-origin:50% var(--vp-y);top:0;left:0}.portrait .cap--node:before{display:none}.portrait .cap--node .year{left:0;right:0;top:var(--vp-y);position:absolute;transform:translateY(-50%)}.portrait .cap--node .body{left:40px;right:40px;top:calc(var(--vp-y) + 23%);position:absolute}.portrait .cap--node .title{margin-top:0!important}.portrait .cap--intro{--top:var(--vp-y)}.portrait .cap--finale{--top:57%}#rail{z-index:5;--n:12;--p:0;height:min(74vh,840px);position:fixed;top:50%;right:clamp(4px,1.4vw,32px);transform:translateY(-50%)}#rail .track{right:15px;top:calc(50% / var(--n));bottom:calc(50% / var(--n));background:#37e6ff33;width:2px;position:absolute}#rail .fill{height:calc(var(--p) * 100%);background:linear-gradient(var(--cyan), var(--gold));box-shadow:0 0 10px var(--cyan);position:absolute;inset:0 0 auto}#rail ol{flex-direction:column;height:100%;margin:0;padding:0;list-style:none;display:flex;position:relative}#rail li{flex:1 1 0;min-height:0;display:flex}#rail button{all:unset;box-sizing:border-box;cursor:pointer;min-width:44px;color:var(--dim);font:600 20px/1 var(--num);letter-spacing:.04em;opacity:.72;flex:1;justify-content:flex-end;align-items:center;gap:10px;transition:opacity .2s,color .2s;display:flex}#rail button .dot{flex:none;place-items:center;width:32px;display:grid}#rail button .dot:before{content:"";border:2px solid var(--cyan);background:var(--bg);border-radius:50%;width:12px;height:12px;transition:transform .2s,background .2s,border-color .2s,box-shadow .2s}#rail button:hover,#rail button[aria-current=step]{opacity:1}#rail button.is-past .dot:before{background:var(--cyan)}#rail button[aria-current=step]{color:var(--gold)}#rail button[aria-current=step] .dot:before{border-color:var(--gold);background:var(--gold);box-shadow:0 0 14px var(--gold);transform:scale(1.35)}@media (width<=899px){#rail button .txt{display:none}#rail button .dot:before{width:8px;height:8px}.kicker{letter-spacing:.1em;text-indent:.1em;white-space:nowrap;font-size:clamp(13px,4vw,18px)}}#controls{left:clamp(12px,2vw,40px);bottom:max(clamp(12px, 2.4vh, 32px), env(safe-area-inset-bottom));z-index:6;gap:12px;display:flex;position:fixed}.btn{all:unset;box-sizing:border-box;min-height:44px;color:var(--ink);letter-spacing:.06em;cursor:pointer;background:#03081699;border:1px solid #37e6ff61;border-radius:999px;align-items:center;gap:8px;padding:0 18px;font-size:clamp(14px,1.05vw,20px);transition:border-color .2s,background .2s;display:inline-flex}.btn:hover{border-color:var(--cyan);background:#0a2440cc}.btn .ico{width:1em;height:1em;fill:var(--cyan)}#play .ico-pause,#play[aria-pressed=true] .ico-play{display:none}#play[aria-pressed=true] .ico-pause{display:block}#play[aria-pressed=true]{border-color:var(--gold)}#play[aria-pressed=true] .ico{fill:var(--gold)}:focus-visible{outline:2px solid var(--gold);outline-offset:3px}#hint{z-index:4;text-align:center;letter-spacing:.14em;color:var(--dim);opacity:var(--o,0);pointer-events:none;margin:0;padding:0 16px;font-size:clamp(14px,1.15vw,22px);position:fixed;bottom:clamp(20px,5vh,64px);left:0;right:0}@media (width<=899px){#hint{bottom:84px}}#notice{z-index:4;color:var(--dim);opacity:.8;pointer-events:none;margin:0;font-size:clamp(12px,.9vw,16px);position:fixed;top:clamp(10px,2vh,28px);left:clamp(12px,2vw,40px)}#hud{z-index:9;color:#8dffb0;pointer-events:none;background:#0009;border-radius:6px;margin:0;padding:6px 10px;font:12px/1.4 ui-monospace,Consolas,monospace;position:fixed;top:8px;right:8px}.noscript{text-align:center;font-size:20px;position:fixed;inset:40% 0 auto}#sources{width:min(92vw,900px);max-height:84vh;color:var(--ink);touch-action:pan-y;overscroll-behavior:contain;-webkit-user-select:text;user-select:text;background:#061226;border:1px solid #37e6ff61;border-radius:16px;padding:0}#sources::backdrop{background:#01040cb8}#sources header{background:#061226;border-bottom:1px solid #37e6ff2e;justify-content:space-between;align-items:center;padding:16px 20px;display:flex;position:sticky;top:0}#sources h2{letter-spacing:.1em;margin:0;font-size:clamp(20px,1.5vw,28px)}.src-lead{color:var(--dim);margin:14px 20px 0;font-size:clamp(14px,1vw,18px);line-height:1.6}.src-list{margin:0;padding:8px 20px 20px;list-style:none}.src-list li{border-bottom:1px solid #37e6ff1a;grid-template-columns:4.2em 1fr;gap:2px 12px;padding:12px 0;font-size:clamp(15px,1.05vw,20px);line-height:1.5;display:grid}.src-list .y{font:700 1.25em/1.2 var(--num);color:var(--gold);grid-row:span 2}.src-list a{color:var(--cyan);overflow-wrap:anywhere;font-size:.86em}.src-list .none{color:var(--dim);font-size:.86em}
