:root{--ink:#2b2a28;--ink-soft:#2b2a289e;--paper:#f5f0e8;--chip:#f8f4edb8;--chip-line:#2b2a2814;--accent:#ff5fa2;--screen-bg:#1d1f27;--screen-ink:#e8e2d4;--screen-soft:#e8e2d49e;--mono:ui-monospace, "SF Mono", "JetBrains Mono", Menlo, monospace}*{box-sizing:border-box;margin:0;padding:0}html,body{height:100%;color:var(--ink);font:12px/1.5 var(--mono);-webkit-font-smoothing:antialiased;background:#e9e1d5;overflow:hidden}button{font:inherit;color:inherit;cursor:pointer;background:0 0;border:0}a{color:inherit}#scene{touch-action:none;outline:none;width:100%;height:100%;display:block;position:fixed;inset:0}body.hovering #scene{cursor:pointer}.hud{left:max(16px, env(safe-area-inset-left));right:max(16px, env(safe-area-inset-right));pointer-events:none;z-index:5;justify-content:space-between;align-items:flex-end;gap:12px;display:flex;position:fixed}.hud.top{align-items:flex-start;top:16px}.hud.bottom{bottom:max(16px, env(safe-area-inset-bottom))}.menu{z-index:5;background:#ffffffd1;border-radius:12px;gap:2px;padding:4px;font-size:13px;display:flex;position:fixed;top:16px;left:50%;transform:translate(-50%)}.menu button{color:var(--ink);border-radius:9px;padding:6px 12px;transition:background .15s,color .15s}.menu button:hover{color:#c2185b;background:#ff5fa21f}.menu button.on{background:var(--accent);color:#fff}body.night .menu{background:#1e1e26b3}.hud>*{pointer-events:auto}.chip{background:var(--chip);border:1px solid var(--chip-line);-webkit-backdrop-filter:blur(10px)saturate(1.2);border-radius:10px;padding:6px 10px;box-shadow:0 6px 20px #3c281414}.who{background:var(--chip);border:1px solid var(--chip-line);-webkit-backdrop-filter:blur(10px);border-radius:12px;flex-direction:column;gap:2px;padding:8px 12px;display:flex}.who b{letter-spacing:.01em;font-size:14px}.who span{color:var(--ink-soft)}#lang{white-space:nowrap}#lang b{color:var(--accent)}.modes{flex-wrap:wrap;align-items:center;gap:2px 4px;display:flex}.modes .lbl{color:var(--ink-soft);margin-right:4px}.modes button{color:var(--ink-soft);border-radius:7px;padding:3px 7px;transition:background .15s,color .15s}.modes button:hover{color:var(--ink);background:#2b2a280f}.modes button.on{color:var(--ink);background:#fff;box-shadow:0 1px #0000000f}.modes kbd{font:inherit;opacity:.5;margin-right:5px;font-size:10px}.hint{color:var(--ink-soft);white-space:nowrap}.tag{z-index:6;background:var(--accent);color:#fff;pointer-events:none;opacity:0;white-space:nowrap;border-radius:6px;padding:3px 8px;font-weight:600;transition:opacity .12s;position:fixed;top:0;left:0}.tag.on{opacity:1}.panel{z-index:4;opacity:0;pointer-events:none;flex-direction:column;transition:opacity .35s;display:flex;position:fixed;overflow:hidden}.panel.on{opacity:1;pointer-events:auto}.panel header{justify-content:space-between;align-items:baseline;gap:1em;display:flex}.panel h2{letter-spacing:-.01em;font-size:1.6em;font-weight:600}.panel .x{opacity:.6;font-size:1.6em;line-height:1}.panel .x:hover{opacity:1}.panel .body{scrollbar-width:thin;overflow-y:auto}.panel p+p,.panel h3+p{margin-top:.6em}.panel h3{letter-spacing:.08em;text-transform:uppercase;opacity:.55;margin-top:1.4em;font-size:.85em;font-weight:600}.panel .lead{font-size:1.15em;line-height:1.45}.panel .tags{flex-wrap:wrap;gap:.4em;display:flex}.panel .tags span{opacity:.75;border:1px solid;border-radius:99px;padding:.15em .6em}.panel ul,.panel ol{list-style:none}.panel .timeline li,.panel .works li,.panel .pubs li{border-top:1px solid #7f7f7f2e;grid-template-columns:5.5em 1fr;gap:.2em 1em;padding:.6em 0;display:grid}.panel .works li,.panel .works b{display:block}.panel .works em{color:var(--accent);margin-left:.3em;font-style:normal}.panel .timeline span,.panel .pubs .yr{opacity:.55}.panel .pubs .pt{font-weight:600}.panel .pubs li.hl{box-shadow:inset 3px 0 0 var(--accent);background:#ff5fa21a;padding-left:.6em}.screen-nav{flex-wrap:wrap;gap:.3em;display:flex}.screen-nav button{color:var(--screen-soft);border:1px solid #e8e2d42e;border-radius:.4em;padding:.2em .7em}.screen-nav button:hover,.screen-nav button.on{color:#fff;border-color:var(--accent);background:#ff5fa233}.panel .pubs .pa,.panel .pubs .pv{opacity:.7}.panel .links{flex-wrap:wrap;gap:.5em 1.2em;margin-top:1em;display:flex}.panel .links a,.panel .pubs a{color:var(--accent);border-bottom:1px solid;text-decoration:none}.panel .note{opacity:.7;margin-top:1.2em}.panel .keys li{padding:.3em 0}.panel kbd{font:inherit;border:1px solid #7f7f7f66;border-radius:4px;padding:0 .4em}.screen-ui{background:var(--screen-bg);color:var(--screen-ink);border-radius:2px;gap:1em;padding:1.6em 2em}.screen-ui .body{color:var(--screen-ink)}.card{right:max(20px, env(safe-area-inset-right));background:var(--paper);width:min(420px,42vw);max-height:min(70vh,640px);color:var(--ink);border-radius:6px;gap:12px;padding:22px 24px;font-size:12.5px;top:50%;transform:translateY(-50%)rotate(.6deg);box-shadow:0 1px #0000000a,0 18px 50px #462d142e}.card:before{content:"";background:#ff5fa259;width:70px;height:18px;position:absolute;top:-8px;left:50%;transform:translate(-50%)rotate(-2deg)}#boxes{pointer-events:none;z-index:3;display:none;position:fixed;inset:0}#boxes.on{display:block}.det{border:1px solid var(--c);opacity:.38;border-radius:2px;position:absolute}.det span{color:#fff;background:var(--c);white-space:nowrap;height:14px;padding:0 4px;font-size:9.5px;line-height:14px;position:absolute;top:-15px;left:-1px}.det.nav{border:2.5px solid var(--accent);opacity:1;pointer-events:auto;cursor:pointer;transition:background .15s}.det.inside span{top:0!important;left:0!important}.det.nav:hover{background:#ff5fa21f}.det.nav span{background:var(--accent);height:18px;padding:0 6px;font-size:11px;font-weight:700;line-height:18px;top:-20px;left:-2.5px}#loader{z-index:20;color:#ece6da;background:#1c1b24;place-items:center;transition:opacity .6s;display:grid;position:fixed;inset:0}#loader.done{opacity:0;pointer-events:none}#loader div{flex-direction:column;align-items:center;gap:6px;display:flex}#loader b{letter-spacing:.02em;font-size:14px}#loader span{color:#ece6da8c}#loader i{background:linear-gradient(90deg, transparent, var(--accent), transparent);background-size:200% 100%;width:120px;height:2px;margin-top:6px;animation:1s linear infinite load}@keyframes load{to{background-position:-200% 0}}.sr-only{clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.noscript{background:var(--paper);border-radius:8px;padding:12px 16px;position:fixed;inset:auto 16px 16px}.det.pop{animation:.45s cubic-bezier(.2,1.5,.4,1) detpop}@keyframes detpop{0%{opacity:0;transform:scale(1.18)}to{transform:scale(1)}}#pulses{pointer-events:none;z-index:3;opacity:0;transition:opacity .5s;position:fixed;inset:0}#pulses.on{opacity:1}.pulse{width:44px;height:44px;position:absolute;top:-22px;left:-22px}.pulse:before,.pulse:after{content:"";border:2px solid var(--accent);border-radius:50%;animation:1.6s ease-out infinite pulse;position:absolute;inset:0}.pulse:after{background:var(--accent);border:0;animation:none;inset:16px;box-shadow:0 0 12px #ff5fa2cc}@keyframes pulse{0%{opacity:1;transform:scale(.4)}to{opacity:0;transform:scale(1.5)}}.coach{z-index:6;background:var(--accent);color:#fff;white-space:nowrap;opacity:0;pointer-events:none;border-radius:10px;padding:8px 14px;font-weight:600;transition:opacity .4s,transform .4s;position:fixed;top:68px;left:50%;transform:translate(-50%,-8px)}.coach.on{opacity:1;transform:translate(-50%)}#scan{z-index:2;pointer-events:none;background:var(--accent);opacity:0;height:3px;position:fixed;top:0;left:0;right:0;box-shadow:0 0 24px 6px #ff5fa273}#scan.run{animation:.55s cubic-bezier(.6,0,.3,1) scan}#scan.run.slow{animation:1.1s linear scan}@keyframes scan{0%{opacity:1;transform:translateY(0)}to{opacity:.2;transform:translateY(100vh)}}body.night{--chip:#1e1e2699;--chip-line:#ffffff14;--ink:#ece6da;--ink-soft:#ece6da99}body.night .modes button.on{background:#ffffff24}@media (width<=720px){.hud{left:10px;right:10px}.hud.bottom{flex-direction:column;align-items:stretch;gap:8px;display:flex}.menu{top:auto;bottom:calc(max(16px, env(safe-area-inset-bottom)) + 52px);scrollbar-width:none;left:10px;right:10px;overflow-x:auto;transform:none}.hud.bottom .hint{display:none}.coach{white-space:normal;text-align:center;width:calc(100% - 40px);top:auto;bottom:128px}.modes{scrollbar-width:none;flex-wrap:nowrap;overflow-x:auto}.modes kbd{display:none}.hint{align-self:flex-end}.card{width:auto;max-height:52vh;inset:auto 10px 120px;transform:none}}@media (prefers-reduced-motion:reduce){#scan.run{animation:none}}
