@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2) format("woff2-variations");unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2) format("woff2-variations");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2) format("woff2-variations");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/inter-greek-wght-normal-CkhJZR-_.woff2) format("woff2-variations");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2) format("woff2-variations");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2) format("woff2-variations");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,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:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/inter-latin-wght-normal-Dx4kXJAl.woff2) format("woff2-variations");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/jetbrains-mono-cyrillic-ext-400-normal-C_uLvvQ5.woff2) format("woff2"),url(/assets/jetbrains-mono-cyrillic-ext-400-normal-Bh0R7Dhr.woff) format("woff");unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/jetbrains-mono-cyrillic-400-normal-BEIGL1Tu.woff2) format("woff2"),url(/assets/jetbrains-mono-cyrillic-400-normal-ugxPyKxw.woff) format("woff");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/jetbrains-mono-greek-400-normal-C190GLew.woff2) format("woff2"),url(/assets/jetbrains-mono-greek-400-normal-B9oWc5Lo.woff) format("woff");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/jetbrains-mono-vietnamese-400-normal-ByoDsISC.woff2) format("woff2"),url(/assets/jetbrains-mono-vietnamese-400-normal-CqNFfHCs.woff) format("woff");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/jetbrains-mono-latin-ext-400-normal-Bc8Ftmh3.woff2) format("woff2"),url(/assets/jetbrains-mono-latin-ext-400-normal-fXTG6kC5.woff) format("woff");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,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:JetBrains Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/jetbrains-mono-latin-400-normal-V6pRDFza.woff2) format("woff2"),url(/assets/jetbrains-mono-latin-400-normal-6-qcROiO.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/jetbrains-mono-cyrillic-ext-600-normal-Dj6eZy5f.woff2) format("woff2"),url(/assets/jetbrains-mono-cyrillic-ext-600-normal-DVvC-yKp.woff) format("woff");unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/jetbrains-mono-cyrillic-600-normal-EVf6-Yzo.woff2) format("woff2"),url(/assets/jetbrains-mono-cyrillic-600-normal-8K4wrrwR.woff) format("woff");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/jetbrains-mono-greek-600-normal-H7WoG9Et.woff2) format("woff2"),url(/assets/jetbrains-mono-greek-600-normal-mc2nkWzM.woff) format("woff");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/jetbrains-mono-vietnamese-600-normal-Dtizs43-.woff2) format("woff2"),url(/assets/jetbrains-mono-vietnamese-600-normal-OWROknRo.woff) format("woff");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/jetbrains-mono-latin-ext-600-normal-BfB_LPfz.woff2) format("woff2"),url(/assets/jetbrains-mono-latin-ext-600-normal-DObL3zCW.woff) format("woff");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,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:JetBrains Mono;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/jetbrains-mono-latin-600-normal-C8RAYTDA.woff2) format("woff2"),url(/assets/jetbrains-mono-latin-600-normal-BfsvjouI.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root{--bg: #0a0f1c;--bg-2: #0d1424;--panel: #111a2e;--panel-2: #162138;--panel-3: #1b2844;--line: #22304e;--line-2: #2c3d61;--text: #e7edf7;--text-2: #a6b3cb;--muted: #7f8fae;--green: #2ee59d;--green-ink: #04261a;--green-dim: rgba(46, 229, 157, .14);--amber: #ffb547;--amber-dim: rgba(255, 181, 71, .14);--green-text: #2ee59d;--amber-text: #ffb547;--blue-text: #4cb4ff;--red-text: var(--red);--violet-text: var(--violet);--red: #ff5d6c;--red-dim: rgba(255, 93, 108, .14);--blue: #4cb4ff;--blue-dim: rgba(76, 180, 255, .14);--violet: #a78bfa;--term-bg: #070b14;--term-text: #d7e3f4;--term-prompt: #2ee59d;--shadow: 0 1px 0 rgba(255, 255, 255, .03) inset, 0 12px 32px rgba(0, 0, 0, .35);--radius: 14px;--radius-sm: 9px;--font: "Inter Variable", "Inter", system-ui, -apple-system, "Segoe UI", sans-serif;--mono: "JetBrains Mono", ui-monospace, "SFMono-Regular", Menlo, Consolas, monospace;--page: 1180px;color-scheme:dark}@media(prefers-color-scheme:light){:root:not([data-theme=dark]){--bg: #f5f7fb;--bg-2: #eef2f8;--panel: #ffffff;--panel-2: #f6f8fc;--panel-3: #eef2f8;--line: #dde3ee;--line-2: #cbd4e4;--text: #0e1626;--text-2: #46546f;--muted: #5f6b82;--green: #0e9f6c;--green-ink: #04261a;--green-dim: rgba(14, 159, 108, .12);--green-text: #096b49;--amber: #c27400;--amber-dim: rgba(194, 116, 0, .12);--amber-text: #8a5300;--red: #d43a4c;--red-dim: rgba(212, 58, 76, .1);--blue: #1a66c2;--blue-dim: rgba(26, 102, 194, .1);--blue-text: #155bb0;--red-text: #b42335;--violet-text: #5a3fc0;--violet: #6d4fd8;--term-bg: #0b1220;--term-text: #d7e3f4;--term-prompt: #2ee59d;--shadow: 0 1px 2px rgba(16, 24, 40, .05), 0 10px 28px rgba(16, 24, 40, .08);color-scheme:light}}:root[data-theme=light]{--bg: #f5f7fb;--bg-2: #eef2f8;--panel: #ffffff;--panel-2: #f6f8fc;--panel-3: #eef2f8;--line: #dde3ee;--line-2: #cbd4e4;--text: #0e1626;--text-2: #46546f;--muted: #5f6b82;--green: #0e9f6c;--green-ink: #04261a;--green-dim: rgba(14, 159, 108, .12);--green-text: #096b49;--amber: #c27400;--amber-dim: rgba(194, 116, 0, .12);--amber-text: #8a5300;--red: #d43a4c;--red-dim: rgba(212, 58, 76, .1);--blue: #1a66c2;--blue-dim: rgba(26, 102, 194, .1);--blue-text: #155bb0;--red-text: #b42335;--violet-text: #5a3fc0;--violet: #6d4fd8;--shadow: 0 1px 2px rgba(16, 24, 40, .05), 0 10px 28px rgba(16, 24, 40, .08);color-scheme:light}*{box-sizing:border-box}html,body{margin:0;background:var(--bg);color:var(--text);font-family:var(--font);font-size:16px;line-height:1.55;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}body{min-height:100vh;overflow-x:hidden}a{color:var(--blue);text-decoration:none}p a:not(.btn),li a:not(.btn),label a:not(.btn),.prose a:not(.btn),.alert a:not(.btn),.legal-note a{text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:2px}a:hover{text-decoration:underline}:focus-visible{outline:2px solid var(--blue);outline-offset:2px;border-radius:6px}h1,h2,h3,h4{line-height:1.2;margin:0 0 .5em;letter-spacing:-.015em}h1{font-size:clamp(1.9rem,4vw,2.8rem);font-weight:800}h2{font-size:clamp(1.4rem,2.6vw,1.9rem);font-weight:750}h3,.h3{font-size:1.15rem;font-weight:700}p{margin:0 0 .9em}code,kbd,pre{font-family:var(--mono);font-size:.92em}:not(pre)>code{background:var(--panel-3);border:1px solid var(--line);padding:.08em .36em;border-radius:6px;color:var(--text);white-space:break-spaces}.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}.page{max-width:var(--page);margin:0 auto;padding:0 20px}.muted{color:var(--muted)}.dim{color:var(--text-2)}.mono{font-family:var(--mono)}.row{display:flex;gap:12px;align-items:center}.row.wrap{flex-wrap:wrap}.spacer{flex:1}.stack>*+*{margin-top:12px}.site-head{position:sticky;top:0;z-index:40;background:color-mix(in srgb,var(--bg) 82%,transparent);backdrop-filter:saturate(1.4) blur(14px);border-bottom:1px solid var(--line)}.site-head .page{display:flex;align-items:center;gap:18px;height:62px}.brand{display:inline-flex;align-items:center;gap:10px;color:var(--text);font-weight:800;font-size:1.12rem;letter-spacing:-.02em}.brand:hover{text-decoration:none}.nav{display:flex;gap:4px;margin-left:10px}.nav a{color:var(--text-2);padding:7px 12px;border-radius:9px;font-weight:600;font-size:.95rem}.nav a:hover{color:var(--text);background:var(--panel-2);text-decoration:none}.nav a.active{color:var(--text);background:var(--panel-3)}.head-stats{display:flex;gap:10px;align-items:center}.chip{display:inline-flex;align-items:center;gap:6px;padding:4px 10px;border-radius:999px;border:1px solid var(--line);background:var(--panel);color:var(--text-2);font-size:.82rem;font-weight:650;white-space:nowrap}.chip.green{color:var(--green-text);border-color:color-mix(in srgb,var(--green) 35%,var(--line));background:var(--green-dim)}.chip.amber{color:var(--amber-text);border-color:color-mix(in srgb,var(--amber) 35%,var(--line));background:var(--amber-dim)}.chip.blue{color:var(--blue-text);border-color:color-mix(in srgb,var(--blue) 35%,var(--line));background:var(--blue-dim)}.chip.red{color:var(--red);border-color:color-mix(in srgb,var(--red) 35%,var(--line));background:var(--red-dim)}.btn.menu-btn{display:none}@media(max-width:860px){.nav{display:none}.nav.open{display:flex;position:absolute;top:62px;left:0;right:0;flex-direction:column;background:var(--bg);border-bottom:1px solid var(--line);padding:10px 16px 16px;margin:0}.btn.menu-btn{display:inline-flex}.head-stats .chip.hide-sm{display:none}}.site-foot{border-top:1px solid var(--line);margin-top:80px;padding:36px 0 48px;color:var(--muted);font-size:.88rem}.site-foot .cols{display:grid;grid-template-columns:1.4fr repeat(3,1fr);gap:28px}.site-foot h2{color:var(--text-2);font-size:.82rem;font-weight:700;text-transform:uppercase;letter-spacing:.08em;margin:0 0 .6em}.site-foot a{color:var(--text-2);display:block;padding:2px 0}.site-foot .legal-note{margin-top:26px;font-size:.8rem;line-height:1.6}@media(max-width:760px){.site-foot .cols{grid-template-columns:1fr 1fr}}.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;padding:10px 18px;border-radius:11px;border:1px solid var(--line-2);background:var(--panel-2);color:var(--text);font:inherit;font-weight:700;font-size:.95rem;cursor:pointer;transition:transform .06s ease,background .15s ease,border-color .15s ease,box-shadow .15s ease;text-decoration:none;user-select:none}.btn:hover{background:var(--panel-3);text-decoration:none}.btn:active{transform:translateY(1px)}.btn:disabled{opacity:.5;cursor:not-allowed}.btn.primary{background:var(--green);border-color:var(--green);color:var(--green-ink);box-shadow:0 0 #2ee59d00}.btn.primary:hover{box-shadow:0 6px 24px -6px color-mix(in srgb,var(--green) 70%,transparent);background:color-mix(in srgb,var(--green) 92%,white)}.btn.ghost{background:transparent;border-color:transparent;color:var(--text-2)}.btn.ghost:hover{background:var(--panel-2);color:var(--text)}.btn.danger{border-color:color-mix(in srgb,var(--red) 50%,var(--line));color:var(--red);background:transparent}.btn.sm{padding:6px 12px;font-size:.86rem;border-radius:9px}.btn.lg{padding:14px 24px;font-size:1.05rem;border-radius:13px}.btn.block{width:100%}.card{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);padding:20px}.card.flat{box-shadow:none}.card h3,.card .h3{margin-bottom:6px}.grid{display:grid;gap:16px}.grid>*{min-width:0}.dash-grid{display:grid;gap:18px;grid-template-columns:minmax(0,1.5fr) minmax(0,1fr)}@media(max-width:900px){.dash-grid{grid-template-columns:minmax(0,1fr)}}.grid.two{grid-template-columns:repeat(2,minmax(0,1fr))}.grid.three{grid-template-columns:repeat(3,minmax(0,1fr))}.grid.four{grid-template-columns:repeat(4,minmax(0,1fr))}@media(max-width:900px){.grid.three,.grid.four{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(max-width:640px){.grid.two,.grid.three,.grid.four{grid-template-columns:minmax(0,1fr)}}label.field{display:block;font-weight:650;font-size:.9rem;margin-bottom:14px}label.field span{display:block;margin-bottom:6px;color:var(--text-2)}input.text,select.text,textarea.text{width:100%;font:inherit;padding:11px 13px;border-radius:10px;border:1px solid var(--line-2);background:var(--bg-2);color:var(--text)}input.text:focus,select.text:focus,textarea.text:focus{outline:none;border-color:var(--blue);box-shadow:0 0 0 3px var(--blue-dim)}.check-row{display:flex;gap:10px;align-items:flex-start;font-size:.9rem;color:var(--text-2);margin:10px 0}.check-row input{margin-top:4px}.alert{border-radius:11px;padding:11px 14px;font-size:.92rem;border:1px solid var(--line);background:var(--panel-2)}.alert.err{border-color:color-mix(in srgb,var(--red) 40%,var(--line));background:var(--red-dim);color:var(--text)}.alert.ok{border-color:color-mix(in srgb,var(--green) 40%,var(--line));background:var(--green-dim)}.led{--c: var(--muted);width:9px;height:9px;border-radius:50%;background:color-mix(in srgb,var(--c) 30%,var(--panel-3));display:inline-block;flex:none}.led.on{--c: var(--green);background:var(--c);box-shadow:0 0 8px var(--c),0 0 2px var(--c)}.led.amber{--c: var(--amber);background:var(--c);box-shadow:0 0 7px var(--c);animation:blink 1.4s steps(2,jump-none) infinite}.led.red{--c: var(--red);background:var(--c);box-shadow:0 0 7px var(--c)}@keyframes blink{0%,60%{opacity:1}61%,to{opacity:.35}}.port{width:46px;height:40px;border-radius:7px;background:linear-gradient(#0c1220,#121a2c);border:1px solid #2a3a5c;position:relative;display:inline-flex;align-items:flex-end;justify-content:center;padding-bottom:6px;box-shadow:inset 0 3px 8px #0009;cursor:pointer;transition:transform .12s ease,border-color .15s ease;flex:none}.port:before{content:"";position:absolute;left:9px;right:9px;top:8px;height:17px;border-radius:3px;background:#05080f;clip-path:polygon(0 0,100% 0,100% 70%,78% 70%,78% 100%,22% 100%,22% 70%,0 70%)}.port .led{position:absolute;top:4px;width:6px;height:6px}.port .led.l{left:5px}.port .led.r{right:5px}.port:hover{transform:translateY(-2px);border-color:var(--blue)}.port.locked{opacity:.55}.port.done{border-color:color-mix(in srgb,var(--green) 55%,#2a3a5c)}.port .num{position:relative;font-family:var(--mono);font-size:9px;color:#6b7a97}.rack{display:flex;flex-direction:column;gap:14px}.rack-unit{border-radius:16px;border:1px solid #263452;background:linear-gradient(180deg,#ffffff0a,#fff0 40%),repeating-linear-gradient(90deg,#121a2d 0 2px,#131c31 2px 4px);padding:16px 18px;box-shadow:var(--shadow);color:#e7edf7}:root[data-theme=light] .rack-unit,.light-rack .rack-unit{border-color:#263452}.rack-unit .unit-head{display:flex;align-items:center;gap:12px;margin-bottom:12px}.rack-unit .unit-label{font-family:var(--mono);font-size:.75rem;color:#8fa0bf;letter-spacing:.08em;text-transform:uppercase}.rack-unit h3{margin:0;color:#f1f5fb}.rack-unit .unit-meta{margin-left:auto;font-size:.8rem;color:#8fa0bf}.rack-ports{display:flex;flex-wrap:wrap;gap:10px 12px}.port-wrap{display:flex;flex-direction:column;align-items:center;width:78px;gap:6px;text-decoration:none!important}.port-wrap .cap{font-size:.7rem;line-height:1.2;text-align:center;color:#a9b6cf;min-height:2.4em}.port-wrap:hover .cap{color:#fff}.screw{width:9px;height:9px;border-radius:50%;background:radial-gradient(circle at 35% 35%,#8a96ad,#3d4860);box-shadow:inset 0 0 0 1px #20293c}.bar{height:8px;border-radius:99px;background:var(--panel-3);overflow:hidden}.bar>i{display:block;height:100%;border-radius:99px;background:linear-gradient(90deg,var(--green),color-mix(in srgb,var(--green) 70%,var(--blue)));transition:width .6s cubic-bezier(.2,.8,.2,1)}.ring{--p: 0;width:64px;height:64px;border-radius:50%;background:conic-gradient(var(--green) calc(var(--p) * 1%),var(--panel-3) 0);display:grid;place-items:center}.ring>span{width:50px;height:50px;border-radius:50%;background:var(--panel);display:grid;place-items:center;font-weight:800;font-size:.88rem}.prose{font-size:1.04rem;line-height:1.68}.prose p,.prose ul,.prose ol{margin:0 0 .95em}.prose li{margin:.25em 0}.prose strong{color:var(--text);font-weight:750}.prose pre{background:var(--term-bg);color:var(--term-text);border:1px solid var(--line);border-radius:11px;padding:14px 16px;overflow-x:auto;line-height:1.5;font-size:.86rem}.prose pre code{background:none;border:0;padding:0;color:inherit;white-space:pre}.prose table{width:100%;border-collapse:collapse;margin:.4em 0 1.1em;font-size:.94rem;display:block;overflow-x:auto}.prose th,.prose td{border-bottom:1px solid var(--line);padding:8px 10px;text-align:left;vertical-align:top}.prose th{color:var(--text-2);font-weight:700;font-size:.86rem;background:var(--panel-2)}.prose h3,.prose h4{margin-top:1.2em}.term-hints{font-weight:500;white-space:nowrap;color:#8794b0}@media(max-width:560px){.term-hints{display:none}}.counter{color:var(--text-2)}.step-later{color:var(--muted)}.callout{--c: var(--blue);--ct: var(--blue-text);border:1px solid color-mix(in srgb,var(--c) 35%,var(--line));background:color-mix(in srgb,var(--c) 9%,var(--panel));border-left:4px solid var(--c);border-radius:12px;padding:14px 16px 6px}.callout .ctitle{display:flex;align-items:center;gap:8px;font-weight:800;font-size:.86rem;text-transform:uppercase;letter-spacing:.06em;color:var(--ct);margin-bottom:6px}.callout.exam{--c: var(--violet);--ct: var(--violet-text)}.callout.warning{--c: var(--red);--ct: var(--red-text)}.callout.tip{--c: var(--green);--ct: var(--green-text)}.callout.real-world{--c: var(--blue);--ct: var(--blue-text)}.callout.v2-new{--c: var(--amber);--ct: var(--amber-text)}.term{min-width:0;max-width:100%;background:var(--term-bg);color:var(--term-text);border:1px solid #1d2a45;border-radius:12px;font-family:var(--mono);font-size:.86rem;line-height:1.45;display:flex;flex-direction:column;min-height:0;overflow:hidden;box-shadow:inset 0 0 0 1px #ffffff05,0 14px 34px #00000059}.term-bar{display:flex;align-items:center;gap:8px;padding:8px 12px;border-bottom:1px solid #172340;background:#0b1222;color:#8fa0bf;font-size:.78rem;font-family:var(--font);font-weight:650}.term-bar .dots{display:flex;gap:6px}.term-bar .dots i{width:10px;height:10px;border-radius:50%;background:#24324f}.term-screen{flex:1;overflow-y:auto;padding:12px 14px 4px;white-space:pre;overflow-x:auto;min-height:0;cursor:text}.term-line{min-height:1.45em}.term-line.err{color:#ff8a96}.term-line.log{color:#ffc56b;white-space:pre-wrap;overflow-wrap:anywhere}.term-line.ok{color:#57f0ad}.term-line.dim{color:#7f8fae}.term-line.echo .p{color:var(--term-prompt)}.term-line.echo .c{color:#fff}.term-input{display:flex;align-items:baseline;padding:0 14px 12px;gap:0}.term-input .p{color:var(--term-prompt);white-space:pre}.term-input input{flex:1;background:transparent;border:0;outline:none;color:#fff;font:inherit;padding:0;min-width:40px;caret-color:var(--green)}.term-input input::placeholder{color:#4a5a78;font-style:italic}.term-keys{display:none;gap:6px;padding:8px 10px;border-top:1px solid #172340;overflow-x:auto;background:#0b1222}.term-keys button{flex:none;background:#18233b;border:1px solid #263452;color:#dfe7f4;border-radius:7px;padding:7px 11px;font:inherit;font-size:.86rem}@media(pointer:coarse){.term-keys{display:flex}}.topo{width:100%;height:auto;display:block}.topo-scroll{overflow-x:auto;overscroll-behavior-x:contain;background:linear-gradient(to right,var(--panel) 30%,transparent) left / 40px 100% no-repeat local,linear-gradient(to left,var(--panel) 30%,transparent) right / 40px 100% no-repeat local,radial-gradient(farthest-side at 0 50%,rgba(76,180,255,.28),transparent) left / 14px 100% no-repeat scroll,radial-gradient(farthest-side at 100% 50%,rgba(76,180,255,.28),transparent) right / 14px 100% no-repeat scroll}.topo .link{stroke:#3a4c72;stroke-width:2.5;fill:none}.topo .link.up{stroke:var(--green)}.topo .link.down{stroke:#ff5d6c;stroke-dasharray:5 5}.topo .link.blocked{stroke:var(--amber);stroke-dasharray:2 6}.topo .node rect.box{fill:var(--panel-2);stroke:var(--line-2)}.topo .node.selected rect.box{stroke:var(--blue);stroke-width:2}.topo .node text{fill:var(--text);font-family:var(--font);font-size:13px;font-weight:700}.topo .node text.sub{fill:var(--text-2);font-weight:500;font-size:11px}.topo .portlabel{fill:var(--text-2);font-family:var(--mono);font-size:10px;paint-order:stroke;stroke:var(--panel);stroke-width:3px;stroke-linejoin:round}.topo .linklabel{fill:var(--blue);font-weight:700}.topo .node.clickable{cursor:pointer}.topo .node.clickable:focus-visible rect.box{stroke:var(--blue);stroke-width:2.5}.topo-expand{position:absolute;top:8px;right:8px;z-index:1;font-size:.78rem;gap:5px}.modal-back{position:fixed;inset:0;z-index:100;background:#03060eb8;display:grid;place-items:center;padding:16px;animation:fade-in .15s ease-out}.modal{width:min(1180px,100%);max-height:calc(100vh - 32px);overflow:auto}@keyframes fade-in{0%{opacity:0}to{opacity:1}}.q{border:1px solid var(--line);border-radius:var(--radius);background:var(--panel);padding:18px}.q-prompt{margin-bottom:12px}.q-kicker{display:flex;align-items:center;gap:8px;font-size:.75rem;font-weight:800;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);margin-bottom:8px}.q-output{background:var(--term-bg);color:var(--term-text);border-radius:10px;padding:12px 14px;font-family:var(--mono);font-size:.82rem;line-height:1.45;white-space:pre;overflow-x:auto;margin:10px 0 14px;border:1px solid #1d2a45}.opts{display:flex;flex-direction:column;gap:8px}.opt{display:flex;gap:12px;align-items:flex-start;text-align:left;width:100%;border:1px solid var(--line-2);background:var(--panel-2);color:var(--text);border-radius:11px;padding:11px 14px;font:inherit;cursor:pointer;transition:border-color .12s,background .12s,transform .06s}.opt:hover:not(:disabled){border-color:var(--blue)}.opt .key{flex:none;width:24px;height:24px;border-radius:7px;border:1px solid var(--line-2);display:grid;place-items:center;font-size:.78rem;font-weight:800;color:var(--text-2);font-family:var(--mono)}.opt.sel{border-color:var(--blue);background:var(--blue-dim)}.opt.right{border-color:var(--green);background:var(--green-dim)}.opt.right .key{background:var(--green);color:var(--green-ink);border-color:var(--green)}.opt.wrong{border-color:var(--red);background:var(--red-dim)}.opt:disabled{cursor:default}.feedback{margin-top:14px;border-radius:12px;padding:12px 14px 4px;border:1px solid var(--line);background:var(--panel-2);animation:rise .25s ease}.feedback.good{border-color:color-mix(in srgb,var(--green) 45%,var(--line));background:var(--green-dim)}.feedback.bad{border-color:color-mix(in srgb,var(--red) 40%,var(--line));background:var(--red-dim)}.feedback .verdict{font-weight:800;margin-bottom:4px}@keyframes rise{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}.cfg-lines{font-family:var(--mono);font-size:.86rem;background:var(--term-bg);color:var(--term-text);border-radius:10px;padding:8px 0;border:1px solid #1d2a45}.cfg-lines button{display:block;width:100%;text-align:left;background:transparent;border:0;color:inherit;font:inherit;padding:3px 14px;white-space:pre;cursor:pointer;border-left:3px solid transparent}.cfg-lines button:hover:not(:disabled){background:#121c33}.cfg-lines button.sel{background:#13264a;border-left-color:var(--blue)}.cfg-lines button.right{background:#2ee59d24;border-left-color:var(--green)}.cfg-lines button.wrong{background:#ff5d6c29;border-left-color:var(--red)}.order-list,.match-list{display:flex;flex-direction:column;gap:8px}.order-item{display:flex;align-items:center;gap:10px;border:1px solid var(--line-2);border-radius:11px;padding:9px 10px 9px 12px;background:var(--panel-2)}.order-item .n{font-family:var(--mono);color:var(--muted);width:18px}.order-item .grow{flex:1}.order-item.right{border-color:var(--green)}.order-item.wrong{border-color:var(--red)}.icon-btn{border:1px solid var(--line-2);background:var(--panel);color:var(--text-2);border-radius:8px;width:30px;height:30px;display:inline-grid;place-items:center;cursor:pointer;font:inherit}.icon-btn:hover:not(:disabled){color:var(--text);border-color:var(--blue)}.icon-btn:disabled{opacity:.35;cursor:default}.match-row{display:grid;grid-template-columns:1fr 1.2fr;gap:10px;align-items:center}.match-row .left{border:1px solid var(--line-2);border-radius:10px;padding:9px 12px;background:var(--panel-2);font-weight:650}@media(max-width:640px){.match-row{grid-template-columns:1fr}}.transcript{display:flex;flex-direction:column;gap:10px;margin:8px 0 14px}.bubble{max-width:88%;border-radius:14px;padding:10px 14px 2px;border:1px solid var(--line);font-size:.95rem}.bubble.user{align-self:flex-end;background:var(--blue-dim);border-color:color-mix(in srgb,var(--blue) 30%,var(--line))}.bubble.assistant{align-self:flex-start;background:var(--panel-2)}.bubble.tool{align-self:flex-start;background:var(--term-bg);color:var(--term-text);font-family:var(--mono);font-size:.82rem;border-color:#1d2a45}.bubble .who{font-size:.72rem;font-weight:800;text-transform:uppercase;letter-spacing:.08em;color:var(--muted);margin-bottom:4px}.player{max-width:780px;margin:0 auto;padding:18px 20px 120px}.player-top{position:sticky;top:62px;z-index:20;background:color-mix(in srgb,var(--bg) 90%,transparent);backdrop-filter:blur(10px);padding:12px 0;display:flex;align-items:center;gap:14px}.player-top .bar{flex:1}.block{margin:22px 0;animation:rise .35s ease}.block-actions{position:fixed;left:0;right:0;bottom:0;z-index:30;background:color-mix(in srgb,var(--bg) 88%,transparent);backdrop-filter:blur(12px);border-top:1px solid var(--line);padding:12px 20px calc(12px + env(safe-area-inset-bottom))}.block-actions .inner{max-width:780px;margin:0 auto;display:flex;align-items:center;gap:12px}.flashcards{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:12px}.flash{perspective:900px;min-height:150px;cursor:pointer}.flash .inner{position:relative;width:100%;height:100%;min-height:150px;transition:transform .45s cubic-bezier(.2,.8,.2,1);transform-style:preserve-3d}.flash.flipped .inner{transform:rotateY(180deg)}.flash .face{position:absolute;inset:0;backface-visibility:hidden;border:1px solid var(--line-2);border-radius:13px;background:var(--panel-2);padding:14px 16px;display:flex;flex-direction:column;justify-content:center;font-size:.95rem;overflow:auto}.flash .face p:last-child{margin-bottom:0}.flash .back{transform:rotateY(180deg);background:var(--green-dim);border-color:color-mix(in srgb,var(--green) 40%,var(--line))}.xp-pop{position:fixed;z-index:80;pointer-events:none;font-weight:900;color:var(--green-text);font-size:1.05rem;text-shadow:0 0 12px rgba(46,229,157,.5);animation:xp 1.1s ease forwards}@keyframes xp{0%{opacity:0;transform:translateY(8px) scale(.9)}20%{opacity:1;transform:translateY(0) scale(1.08)}to{opacity:0;transform:translateY(-34px) scale(1)}}.linkup{text-align:center;padding:40px 18px 10px}.linkup .cable{width:min(420px,90%);height:70px;margin:0 auto 18px;position:relative}.linkup .cable svg{width:100%;height:100%}.linkup .pulse{stroke-dasharray:600;stroke-dashoffset:600;animation:draw 1.2s .15s cubic-bezier(.6,0,.2,1) forwards}@keyframes draw{to{stroke-dashoffset:0}}.stat-row{display:flex;justify-content:center;gap:14px;flex-wrap:wrap;margin:18px 0 26px}.stat{min-width:120px;border:1px solid var(--line);border-radius:13px;background:var(--panel);padding:12px 16px}.stat b{display:block;font-size:1.5rem;font-weight:850}.stat span{font-size:.78rem;color:var(--muted);font-weight:650;text-transform:uppercase;letter-spacing:.06em}.lab{display:grid;grid-template-columns:minmax(300px,420px) minmax(0,1fr);gap:16px;padding:16px 20px 24px;max-width:1440px;margin:0 auto}.lab-side{display:flex;flex-direction:column;gap:14px;min-width:0}.lab-main{display:flex;flex-direction:column;gap:10px;min-width:0;height:calc(100vh - 110px);position:sticky;top:78px}.lab-main .term{flex:1}.tab.active .muted{color:var(--text-2)}.tabs{display:flex;gap:6px;flex-wrap:wrap}.tab{border:1px solid var(--line-2);background:var(--panel);color:var(--text-2);border-radius:9px;padding:6px 12px;font:inherit;font-size:.86rem;font-weight:700;cursor:pointer;display:inline-flex;align-items:center;gap:7px}.tab.active{color:var(--text);border-color:var(--blue);background:var(--blue-dim)}.objective{display:flex;gap:10px;align-items:flex-start;padding:10px 0;border-bottom:1px dashed var(--line)}.objective:last-child{border-bottom:0}.objective .led{margin-top:7px}.objective.done .otext{color:var(--text)}.objective .otext{color:var(--text-2);font-size:.94rem}.objective .hint{font-size:.86rem;color:var(--amber-text);margin-top:4px}@media(max-width:980px){.lab{grid-template-columns:minmax(0,1fr)}.lab-main{position:static;height:70vh}}.editor{width:100%;min-height:220px;background:var(--term-bg);color:var(--term-text);border:1px solid #1d2a45;border-radius:10px;font-family:var(--mono);font-size:.84rem;padding:12px;line-height:1.5;resize:vertical}.hero{padding:64px 0 40px;position:relative}.hero .eyebrow{display:inline-flex;gap:8px;align-items:center}.hero h1{font-size:clamp(2.3rem,5.4vw,3.9rem);line-height:1.04;letter-spacing:-.035em;margin:18px 0 16px}.hero h1 em{font-style:normal;color:var(--green)}.hero .lede{font-size:clamp(1.05rem,1.6vw,1.22rem);color:var(--text-2);max-width:640px}.hero-grid{display:grid;grid-template-columns:minmax(0,1.05fr) minmax(0,.95fr);gap:36px;align-items:center}@media(max-width:960px){.hero-grid{grid-template-columns:minmax(0,1fr)}}.section{padding:56px 0 8px}.section>.page>.kicker,.kicker{font-family:var(--mono);font-size:.78rem;color:var(--green-text);letter-spacing:.12em;text-transform:uppercase;font-weight:700;margin-bottom:10px}.feature{display:flex;flex-direction:column;gap:8px}.feature .ico{width:40px;height:40px;border-radius:11px;background:var(--green-dim);color:var(--green);display:grid;place-items:center}.price-card{position:relative;display:flex;flex-direction:column;gap:10px}.price-card.featured{border-color:color-mix(in srgb,var(--green) 55%,var(--line));box-shadow:0 0 0 1px color-mix(in srgb,var(--green) 35%,transparent),var(--shadow)}.price{font-size:2.6rem;font-weight:900;letter-spacing:-.03em}.price small{font-size:.95rem;color:var(--muted);font-weight:650;letter-spacing:0}.ticks{list-style:none;padding:0;margin:6px 0 14px}.ticks li{padding:5px 0 5px 26px;position:relative;color:var(--text-2)}.ticks li:before{content:"";position:absolute;left:4px;top:12px;width:9px;height:9px;border-radius:50%;background:var(--green);box-shadow:0 0 8px var(--green)}.ticks li.off:before{background:var(--panel-3);box-shadow:none}details.faq{border-bottom:1px solid var(--line);padding:14px 0}details.faq summary{cursor:pointer;font-weight:700;list-style:none}details.faq summary::-webkit-details-marker{display:none}details.faq summary:after{content:"+";float:right;color:var(--muted);font-weight:400}details.faq[open] summary:after{content:"–"}details.faq p{color:var(--text-2);margin:10px 0 0}.legal{max-width:780px;margin:0 auto;padding:40px 20px}.legal h1{font-size:2.1rem}.legal h2{font-size:1.25rem;margin-top:1.8em}.legal p,.legal li{color:var(--text-2)}.legal .updated{color:var(--muted);font-size:.9rem}.lock{display:inline-flex;align-items:center;gap:6px;color:var(--amber-text);font-weight:700;font-size:.86rem}.empty{text-align:center;padding:60px 20px;color:var(--text-2)}.toast-wrap{position:fixed;right:18px;bottom:18px;z-index:100;display:flex;flex-direction:column;gap:10px}.toast{background:var(--panel);border:1px solid var(--line-2);border-radius:12px;padding:12px 16px;box-shadow:var(--shadow);animation:rise .25s ease;max-width:360px;display:flex;gap:10px;align-items:center}.kbd{font-family:var(--mono);font-size:.78rem;border:1px solid var(--line-2);border-bottom-width:2px;border-radius:6px;padding:1px 6px;color:var(--text-2)}.badge-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:12px}.badge{border:1px solid var(--line);border-radius:14px;padding:14px;text-align:center;background:var(--panel)}.badge.locked .emblem{background:var(--panel-3);color:var(--muted)}.badge.locked b{color:var(--text-2);font-weight:650}.badge .emblem{width:46px;height:46px;margin:0 auto 8px;border-radius:13px;display:grid;place-items:center;background:var(--green-dim);color:var(--green)}.badge b{display:block;font-size:.92rem}.badge span{font-size:.78rem;color:var(--muted)}.heat{display:grid;grid-template-columns:repeat(14,1fr);gap:4px}.heat i{aspect-ratio:1;border-radius:4px;background:var(--panel-3)}.heat i.l1{background:color-mix(in srgb,var(--green) 30%,var(--panel-3))}.heat i.l2{background:color-mix(in srgb,var(--green) 60%,var(--panel-3))}.heat i.l3{background:var(--green)}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.001ms!important;animation-iteration-count:1!important;transition-duration:.001ms!important}}
