@font-face{font-family:Bricolage Grotesque Variable;font-style:normal;font-display:swap;font-weight:200 800;src:url(/assets/bricolage-grotesque-vietnamese-wght-normal-BUzh504Q.woff2)format("woff2-variations");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Bricolage Grotesque Variable;font-style:normal;font-display:swap;font-weight:200 800;src:url(/assets/bricolage-grotesque-latin-ext-wght-normal-CcLUaPy7.woff2)format("woff2-variations");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Bricolage Grotesque Variable;font-style:normal;font-display:swap;font-weight:200 800;src:url(/assets/bricolage-grotesque-latin-wght-normal-DLoelf7F.woff2)format("woff2-variations");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Atkinson Hyperlegible;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/atkinson-hyperlegible-latin-ext-400-normal-DRk46D-x.woff2)format("woff2"),url(/assets/atkinson-hyperlegible-latin-ext-400-normal-Bbz-b3yf.woff)format("woff");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Atkinson Hyperlegible;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/atkinson-hyperlegible-latin-400-normal-BrHNak5F.woff2)format("woff2"),url(/assets/atkinson-hyperlegible-latin-400-normal-BbWidj28.woff)format("woff");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Atkinson Hyperlegible;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/atkinson-hyperlegible-latin-ext-700-normal-BoVPHkS0.woff2)format("woff2"),url(/assets/atkinson-hyperlegible-latin-ext-700-normal-CKkU2Dpt.woff)format("woff");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Atkinson Hyperlegible;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/atkinson-hyperlegible-latin-700-normal-GZI4o3u0.woff2)format("woff2"),url(/assets/atkinson-hyperlegible-latin-700-normal-BK6Glc0m.woff)format("woff");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root{--bg:#e4e9ec;--panel:#f5f7f8;--ink:#1c2433;--ink-soft:#4a5468;--line:#c9d1d8;--accent:#2f5bd3;--accent-ink:#fff;--gold:#a86f00;--gold-fill:#d99a1e;--warn:#b8332b;--focus:#2f5bd3;--shadow-tint:.1, .13, .2;--radius:10px;--font-display:"Bricolage Grotesque Variable", "Bricolage Grotesque", system-ui, sans-serif;--font-text:"Atkinson Hyperlegible", system-ui, sans-serif;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}@media (prefers-color-scheme:dark){:root:not([data-theme=light]){--bg:#141a24;--panel:#1e2634;--ink:#e7ebf1;--ink-soft:#a9b3c4;--line:#333e52;--accent:#86a6ff;--accent-ink:#0f1522;--gold:#f0be4a;--gold-fill:#f0be4a;--warn:#ff7a6e;--focus:#86a6ff;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}}:root[data-theme=dark]{--bg:#141a24;--panel:#1e2634;--ink:#e7ebf1;--ink-soft:#a9b3c4;--line:#333e52;--accent:#86a6ff;--accent-ink:#0f1522;--gold:#f0be4a;--gold-fill:#f0be4a;--warn:#ff7a6e;--focus:#86a6ff;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}*{box-sizing:border-box}html,body{height:100%;margin:0}body{background:var(--bg);color:var(--ink);font-family:var(--font-text);-webkit-font-smoothing:antialiased;font-size:16px;line-height:1.5}#app{min-height:100%}:focus-visible{outline:3px solid var(--focus);outline-offset:2px;border-radius:6px}h1,h2,h3{font-family:var(--font-display);margin:0;line-height:1.15}button,input,select{font:inherit;color:inherit}a{color:var(--accent)}.sr-only{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.app{grid-template-rows:auto minmax(0,1fr);grid-template-columns:minmax(0,1fr) 390px;height:100dvh;display:grid}.topbar{border-bottom:1px solid var(--line);grid-column:1/-1;align-items:center;gap:20px;padding:12px 20px;display:flex}.brand{color:inherit;align-items:baseline;gap:10px;text-decoration:none;display:flex}.brand h1{letter-spacing:-.02em;font-size:1.55rem;font-weight:750}.brand span{color:var(--ink-soft);font-size:.95rem}.tabs{gap:4px;margin-left:auto;display:flex}.tabs button{color:var(--ink-soft);cursor:pointer;background:0 0;border:0;border-radius:8px;padding:8px 12px}.tabs button[aria-current=page]{color:var(--ink);background:color-mix(in srgb, var(--ink) 8%, transparent);font-weight:700}.tabs button:hover{color:var(--ink)}.theme-toggle{border:1px solid var(--line);cursor:pointer;color:var(--ink-soft);background:0 0;border-radius:8px;padding:6px 10px}.stage-col{flex-direction:column;min-width:0;min-height:0;display:flex;position:relative}.viewer{touch-action:none;flex:1;min-height:0;position:relative}.viewer-canvas{width:100%;height:100%;display:block;position:absolute;inset:0}.side{border-left:1px solid var(--line);background:var(--panel);padding:22px 24px 40px;overflow-y:auto}.search{z-index:5;width:min(420px,100% - 32px);position:absolute;top:16px;left:16px}.search-box{background:var(--panel);border:1px solid var(--line);border-radius:999px;align-items:center;gap:8px;padding:4px 6px 4px 16px;display:flex}.search-box input{background:0 0;border:0;flex:1;min-width:0;padding:8px 0;font-size:1.05rem}.search-box input:focus-visible{outline:none}.search-box:focus-within{outline:3px solid var(--focus);outline-offset:2px}.search-box button{background:var(--accent);color:var(--accent-ink);cursor:pointer;border:0;border-radius:999px;padding:8px 14px;font-weight:700}.suggestions{background:var(--panel);border:1px solid var(--line);border-radius:14px;max-height:50vh;margin:6px 0 0;padding:6px;list-style:none;overflow-y:auto}.suggestions li{cursor:pointer;border-radius:8px;justify-content:space-between;gap:12px;padding:8px 12px;display:flex}.suggestions li[aria-selected=true],.suggestions li:hover{background:color-mix(in srgb, var(--accent) 14%, transparent)}.suggestions .g{color:var(--ink-soft);white-space:nowrap;font-size:.9rem}.suggestions .empty{cursor:default;color:var(--ink-soft);display:block}.suggestions .empty button{margin-top:6px}.viewer-tools{z-index:4;flex-wrap:wrap;justify-content:flex-end;gap:6px;display:flex;position:absolute;top:16px;right:16px}.chip{border:1px solid var(--line);background:var(--panel);cursor:pointer;border-radius:999px;padding:6px 12px;font-size:.9rem}.chip[aria-pressed=true]{background:var(--ink);color:var(--bg);border-color:var(--ink)}.viewer-note{z-index:3;pointer-events:none;color:var(--ink-soft);font-size:.9rem;position:absolute;bottom:12px;left:16px;right:16px}.cross-note{color:var(--warn);font-weight:700}.webgl-error{text-align:center;place-items:center;padding:24px;display:grid;position:absolute;inset:0}.timeline{border-top:1px solid var(--line);grid-template-columns:auto auto minmax(0,1fr) auto;align-items:center;gap:12px;padding:10px 16px 14px;display:grid}.play{background:var(--accent);width:44px;height:44px;color:var(--accent-ink);cursor:pointer;border:0;border-radius:50%;place-items:center;display:grid}.restart{border:1px solid var(--line);cursor:pointer;background:0 0;border-radius:50%;place-items:center;width:36px;height:36px;display:grid}.track{padding-top:18px;position:relative}.track input[type=range]{width:100%;accent-color:var(--accent);height:28px;margin:0}.stage-marks{height:18px;color:var(--ink-soft);font-size:.78rem;position:absolute;top:0;left:0;right:0}.stage-marks span{white-space:nowrap;text-overflow:ellipsis;border-left:1px solid var(--line);padding-left:6px;position:absolute;top:0;overflow:hidden}.stage-marks span.on{color:var(--ink);font-weight:700}.speed{border:1px solid var(--line);background:var(--panel);border-radius:8px;padding:6px 8px}.obj-title{letter-spacing:-.02em;text-transform:none;font-size:2rem;font-weight:750}.obj-title:first-letter{text-transform:uppercase}.numbers{flex-wrap:wrap;gap:28px;margin:14px 0 6px;display:flex}.num{flex-direction:column;display:flex}.num b{font-family:var(--font-display);color:var(--gold);font-size:3rem;font-weight:780;line-height:1}.num span{color:var(--ink-soft);font-size:.9rem}.canon{margin:8px 0 18px}.canon strong{color:var(--ink)}.side section{border-top:1px solid var(--line);padding:16px 0}.side h2{margin-bottom:6px;font-size:1.15rem;font-weight:700}.side p{margin:6px 0}.muted{color:var(--ink-soft)}.euler{font-family:var(--font-display);font-size:1.1rem}.euler .eq{color:var(--gold);font-weight:750}.allow{grid-template-columns:1fr 1fr;gap:8px 16px;margin:8px 0 0;padding:0;list-style:none;display:grid}.allow li:before{content:"✓ ";color:#2e8a57;font-weight:700}.allow li.no:before{content:"✗ ";color:var(--warn)}details{border-top:1px solid var(--line);padding:14px 0}summary{cursor:pointer;font-family:var(--font-display);font-size:1.1rem;font-weight:700}details p{margin:10px 0}.stage-now{font-size:.95rem}.stage-now b{font-family:var(--font-display)}.note{border-left:3px solid var(--gold-fill);margin:10px 0;padding:4px 0 4px 12px}.warning{border-left:3px solid var(--warn);margin:10px 0;padding:4px 0 4px 12px}.btn{background:var(--accent);color:var(--accent-ink);cursor:pointer;border:0;border-radius:8px;padding:9px 14px;font-weight:700}.btn.secondary{color:var(--ink);border:1px solid var(--line);background:0 0}.btn:disabled{opacity:.5;cursor:not-allowed}.compare{flex:1;grid-template-columns:1fr 1fr;min-height:0;display:grid}.compare>div{border-right:1px solid var(--line);flex-direction:column;min-height:0;display:flex;position:relative}.compare>div:last-child{border-right:0}.compare .viewer{flex:1}.compare .search{width:calc(100% - 24px);position:absolute;top:12px;left:12px}.compare-label{z-index:3;font-family:var(--font-display);font-size:1.2rem;font-weight:700;position:absolute;bottom:10px;left:12px}.compare-label small{font-family:var(--font-text);color:var(--ink-soft);font-size:.9rem;font-weight:400}.verdict{font-size:1.05rem}.verdict.yes{border-left:3px solid #2e8a57;padding-left:12px}.verdict.no{border-left:3px solid var(--warn);padding-left:12px}.builder label{justify-content:space-between;align-items:center;gap:12px;padding:6px 0;display:flex}.builder select,.builder input[type=number]{border:1px solid var(--line);background:var(--bg);border-radius:8px;width:9rem;padding:6px 8px}.stepper{align-items:center;gap:6px;display:flex}.stepper button{border:1px solid var(--line);background:var(--bg);cursor:pointer;border-radius:8px;width:34px;height:34px;font-size:1.1rem}.stepper output{text-align:center;min-width:2ch;font-family:var(--font-display);font-size:1.2rem;font-weight:700}.drop{border:2px dashed var(--line);border-radius:var(--radius);text-align:center;margin:12px 0;padding:24px}.drop.over{border-color:var(--accent)}.klein-badge{border:1px solid var(--line);color:var(--ink-soft);border-radius:999px;padding:2px 10px;font-size:.85rem;display:inline-block}@media (max-width:900px){.app{grid-template-rows:auto auto auto;grid-template-columns:1fr;height:auto;min-height:100dvh}.topbar{flex-wrap:wrap;gap:8px 12px;padding:10px 16px}.brand span{display:none}.tabs{order:3;width:100%;margin-left:0;overflow-x:auto}.theme-toggle{margin-left:auto}.stage-col{height:62dvh;min-height:380px}.side{border-left:0;border-top:1px solid var(--line);padding:18px 16px 48px}.search{width:calc(100% - 20px);top:10px;left:10px}.viewer-tools{top:auto;bottom:10px;right:10px}.viewer-note{bottom:52px}.timeline{grid-template-columns:auto minmax(0,1fr) auto;gap:10px;padding:8px 12px 10px}.timeline .restart{display:none}.stage-marks span{font-size:.7rem}.compare{grid-template-rows:1fr 1fr;grid-template-columns:1fr}.compare>div{border-right:0;border-bottom:1px solid var(--line)}.num b{font-size:2.4rem}.allow{grid-template-columns:1fr}}@media (prefers-reduced-motion:reduce){*{scroll-behavior:auto!important;transition:none!important}}
