@font-face{font-family:Bricolage Grotesque;font-style:normal;font-display:swap;font-weight:200 800;src:url(./bricolage-grotesque-latin-ext-opsz-normal-IcJDqblK.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;font-style:normal;font-display:swap;font-weight:200 800;src:url(./bricolage-grotesque-latin-opsz-normal-Cre6nC2_.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:Hanken Grotesk;font-style:normal;font-display:swap;font-weight:100 900;src:url(./hanken-grotesk-latin-ext-wght-normal-Dg-wlmqe.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:Hanken Grotesk;font-style:normal;font-display:swap;font-weight:100 900;src:url(./hanken-grotesk-latin-wght-normal-CaVRRdDk.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:Hanken Grotesk;font-style:italic;font-display:swap;font-weight:100 900;src:url(./hanken-grotesk-latin-ext-wght-italic-KoQsQXDA.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:Hanken Grotesk;font-style:italic;font-display:swap;font-weight:100 900;src:url(./hanken-grotesk-latin-wght-italic-ChtpyDsL.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:JetBrains Mono;font-style:normal;font-display:swap;font-weight:100 800;src:url(./jetbrains-mono-latin-ext-wght-normal-DBQx-q_a.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:JetBrains Mono;font-style:normal;font-display:swap;font-weight:100 800;src:url(./jetbrains-mono-latin-wght-normal-B9CIFXIH.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}:root{--sand-50:#fdfaf4;--sand-100:#faf5ec;--sand-150:#f5eee1;--sand-200:#efe6d5;--sand-300:#e4d7c2;--sand-400:#d3c2a6;--sand-500:#b4a184;--sand-600:#8a7c66;--ink-900:#211e18;--ink-800:#302b23;--ink-700:#4a4335;--ink-600:#5e5647;--ink-500:#837961;--ink-400:#a99c82;--green-50:#e7f5ec;--green-100:#cdebd8;--green-200:#9fd9b6;--green-300:#5fc08c;--green-400:#22a468;--green-500:#128a56;--green-600:#0e7248;--green-700:#0a5738;--green-800:#073f29;--orange-50:#fceee1;--orange-100:#fadec6;--orange-200:#f5be93;--orange-300:#f0995a;--orange-400:#e8742b;--orange-500:#d25e18;--orange-600:#ae4b12;--red-50:#fbe7e4;--red-100:#f6cfc9;--red-200:#eda69c;--red-300:#db6459;--red-400:#c6413a;--red-500:#a5322c;--slate-900:#1c1a16;--slate-850:#242019;--slate-800:#2e2a21;--slate-700:#3b362b;--slate-300:#b7ae9c;--slate-100:#ede6d6;--surface-app:var(--sand-100);--surface-card:#fff;--surface-raised:#fff;--surface-sunken:var(--sand-150);--surface-inset:var(--sand-200);--surface-tint:var(--green-50);--surface-dark:var(--slate-900);--surface-dark-2:var(--slate-800);--text-primary:var(--ink-900);--text-secondary:var(--ink-600);--text-muted:var(--ink-500);--text-on-green:#fff;--text-on-orange:#fff;--text-on-dark:var(--slate-100);--text-link:var(--green-600);--text-link-hover:var(--green-700);--border-subtle:var(--sand-200);--border:var(--sand-300);--border-strong:var(--sand-400);--border-dark:var(--slate-700);--divider:var(--sand-200);--brand:var(--green-500);--brand-hover:var(--green-600);--brand-press:var(--green-700);--brand-tint:var(--green-50);--accent:var(--orange-400);--accent-hover:var(--orange-500);--accent-tint:var(--orange-50);--success:var(--green-500);--success-tint:var(--green-50);--danger:var(--red-400);--danger-hover:var(--red-500);--danger-tint:var(--red-50);--warning:var(--orange-400);--warning-tint:var(--orange-50);--info:var(--green-600);--info-tint:var(--green-50);--system:var(--ink-900);--system-fg:var(--sand-50);--system-tint:var(--sand-200);--system-border:var(--sand-400);--focus-ring:0 0 0 3px #128a5659;--focus-ring-accent:0 0 0 3px #e8742b61;--focus-color:var(--green-500);--font-display:"Bricolage Grotesque", "Hanken Grotesk", system-ui, sans-serif;--font-text:"Hanken Grotesk", system-ui, -apple-system, "Segoe UI", sans-serif;--font-mono:"JetBrains Mono", ui-monospace, "SF Mono", "Cascadia Code", monospace;--fw-regular:400;--fw-medium:500;--fw-semibold:600;--fw-bold:700;--fw-extra:800;--fs-display:56px;--fs-h1:40px;--fs-h2:30px;--fs-h3:23px;--fs-h4:19px;--fs-body-lg:18px;--fs-body:16px;--fs-body-sm:14px;--fs-label:13px;--fs-caption:12px;--fs-mono:14px;--fs-mono-sm:13px;--lh-tight:1.08;--lh-snug:1.25;--lh-normal:1.45;--lh-reading:1.65;--lh-code:1.6;--ls-tight:-.02em;--ls-snug:-.01em;--ls-normal:0;--ls-label:.02em;--ls-eyebrow:.08em;--measure:68ch;--measure-tight:52ch;--space-0:0;--space-1:4px;--space-2:8px;--space-3:12px;--space-4:16px;--space-5:20px;--space-6:24px;--space-7:32px;--space-8:40px;--space-9:48px;--space-10:64px;--space-11:80px;--space-12:112px;--r-xs:6px;--r-sm:8px;--r-md:12px;--r-lg:16px;--r-xl:22px;--r-2xl:30px;--r-pill:999px;--shadow-xs:0 1px 2px #3a2c160f;--shadow-sm:0 1px 3px #3a2c1614, 0 1px 2px #3a2c160d;--shadow-md:0 4px 14px #3a2c1617, 0 2px 4px #3a2c160d;--shadow-lg:0 14px 36px #34281421, 0 4px 10px #3428140f;--shadow-xl:0 28px 64px #2e23102e;--shadow-inset:inset 0 1px 2px #3a2c1612;--dur-fast:.12s;--dur-base:.2s;--dur-slow:.32s;--dur-mascot:.48s;--ease-out:cubic-bezier(.22, .68, .3, 1);--ease-in-out:cubic-bezier(.5, 0, .2, 1);--ease-spring:cubic-bezier(.34, 1.56, .64, 1);--rail-nav:64px;--sidebar:280px;--lesson-max:720px;--content-max:1200px;--header-h:60px;--code-bg:var(--slate-900);--code-panel:var(--slate-800);--code-gutter:var(--slate-850);--code-line:var(--slate-700);--code-linenr:#6e664f;--code-linenr-active:#c8bca0;--code-selection:#22a46838;--code-cursor:var(--green-300);--code-active-line:#fffaeb09;--code-text:#e9e1cf;--code-comment:#8c846c;--code-tag:#4fd08c;--code-attr:#f0a35e;--code-string:#e7ce86;--code-keyword:#6fc2e8;--code-fn:#b79bea;--code-number:#e88c6a;--code-punct:#b7ae9c;--code-prop:#7fd6c4;--code-invalid:var(--red-300);--diag-error:var(--red-300);--diag-warn:var(--orange-300);--diag-ok:var(--green-300)}*,:before,:after{box-sizing:border-box}body{font-family:var(--font-text);font-size:var(--fs-body);line-height:var(--lh-normal);color:var(--text-primary);background:var(--surface-app);-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility;margin:0}h1,h2,h3,h4,h5,h6{font-family:var(--font-display);font-weight:var(--fw-bold);line-height:var(--lh-snug);letter-spacing:var(--ls-snug);color:var(--text-primary);text-wrap:balance;margin:0}p{text-wrap:pretty;margin:0}a{color:var(--text-link);-webkit-text-decoration-color:color-mix(in oklab, var(--text-link) 40%, transparent);text-decoration-color:color-mix(in oklab, var(--text-link) 40%, transparent);text-underline-offset:2px;transition:color var(--dur-fast) var(--ease-out)}a:hover{color:var(--text-link-hover)}code,kbd,samp,pre{font-family:var(--font-mono)}::selection{background:var(--green-100);color:var(--ink-900)}:focus-visible{box-shadow:var(--focus-ring);border-radius:var(--r-xs);outline:none}button{font-family:inherit}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}@keyframes gl-spin{to{transform:rotate(360deg)}}@keyframes gl-msway{0%,to{transform:rotate(-1.3deg)}50%{transform:rotate(1.3deg)}}@keyframes gl-mblink{0%,90%,to{transform:scaleY(.04)}94%{transform:scaleY(1)}}.gl-btn{--_bg:var(--brand);--_fg:var(--text-on-green);--_bd:transparent;justify-content:center;align-items:center;gap:var(--space-2);font-family:var(--font-text);font-weight:var(--fw-semibold);white-space:nowrap;border:1.5px solid var(--_bd);border-radius:var(--r-md);background:var(--_bg);color:var(--_fg);cursor:pointer;transition:background var(--dur-fast) var(--ease-out), box-shadow var(--dur-fast) var(--ease-out), border-color var(--dur-fast) var(--ease-out), transform var(--dur-fast) var(--ease-out);box-shadow:var(--shadow-xs);-webkit-tap-highlight-color:transparent;text-decoration:none;display:inline-flex}.gl-btn:focus-visible{box-shadow:var(--focus-ring);outline:none}.gl-btn:active{transform:translateY(1px)}.gl-btn[disabled],.gl-btn[aria-disabled=true]{opacity:.5;cursor:not-allowed;box-shadow:none;transform:none}.gl-btn--sm{height:34px;font-size:var(--fs-body-sm);border-radius:var(--r-sm);padding:0 14px}.gl-btn--md{height:42px;font-size:var(--fs-body);padding:0 18px}.gl-btn--lg{height:52px;font-size:var(--fs-body-lg);border-radius:var(--r-lg);padding:0 26px}.gl-btn--block{width:100%}.gl-btn--primary{--_bg:var(--brand);--_fg:var(--text-on-green)}.gl-btn--primary:hover{--_bg:var(--brand-hover);box-shadow:var(--shadow-sm)}.gl-btn--primary:active{--_bg:var(--brand-press)}.gl-btn--accent{--_bg:var(--accent);--_fg:var(--text-on-orange)}.gl-btn--accent:hover{--_bg:var(--accent-hover);box-shadow:var(--shadow-sm)}.gl-btn--accent:active{--_bg:var(--orange-600)}.gl-btn--secondary{--_bg:var(--surface-card);--_fg:var(--text-primary);--_bd:var(--border-strong)}.gl-btn--secondary:hover{--_bg:var(--sand-50);--_bd:var(--brand);--_fg:var(--brand-press)}.gl-btn--ghost{--_bg:transparent;--_fg:var(--text-secondary);box-shadow:none}.gl-btn--ghost:hover{--_bg:var(--sand-150);--_fg:var(--text-primary)}.gl-btn--danger{--_bg:var(--danger);--_fg:#fff}.gl-btn--danger:hover{--_bg:var(--danger-hover);box-shadow:var(--shadow-sm)}.gl-btn--danger:focus-visible{box-shadow:0 0 0 3px #c6413a59}.gl-btn__spin{border:2px solid;border-top-color:#0000;border-radius:50%;width:1em;height:1em;animation:.7s linear infinite gl-spin}.gl-iconbtn{--_bg:transparent;--_fg:var(--text-secondary);border-radius:var(--r-md);background:var(--_bg);color:var(--_fg);cursor:pointer;transition:background var(--dur-fast) var(--ease-out), color var(--dur-fast) var(--ease-out), box-shadow var(--dur-fast) var(--ease-out), transform var(--dur-fast) var(--ease-out);-webkit-tap-highlight-color:transparent;border:1.5px solid #0000;place-items:center;padding:0;display:inline-grid}.gl-iconbtn:hover{--_bg:var(--sand-150);--_fg:var(--text-primary)}.gl-iconbtn:focus-visible{box-shadow:var(--focus-ring);outline:none}.gl-iconbtn:active{transform:translateY(1px)}.gl-iconbtn[disabled]{opacity:.45;cursor:not-allowed}.gl-iconbtn--sm{border-radius:var(--r-sm);width:32px;height:32px}.gl-iconbtn--md{width:40px;height:40px}.gl-iconbtn--lg{width:48px;height:48px}.gl-iconbtn--solid{--_bg:var(--brand);--_fg:var(--text-on-green);box-shadow:var(--shadow-xs)}.gl-iconbtn--solid:hover{--_bg:var(--brand-hover);--_fg:var(--text-on-green)}.gl-iconbtn--outline{--_bg:var(--surface-card);--_fg:var(--text-secondary);border-color:var(--border)}.gl-iconbtn--outline:hover{--_bg:var(--surface-card);--_fg:var(--brand-press);border-color:var(--brand)}.gl-iconbtn--onDark{--_fg:var(--slate-300)}.gl-iconbtn--onDark:hover{--_bg:#fffaeb14;--_fg:var(--slate-100)}.gl-badge{font-family:var(--font-text);font-weight:var(--fw-semibold);font-size:var(--fs-caption);letter-spacing:var(--ls-label);border-radius:var(--r-pill);white-space:nowrap;border:1px solid #0000;align-items:center;gap:5px;padding:5px 9px;line-height:1;display:inline-flex}.gl-badge svg{width:13px;height:13px}.gl-badge--neutral{background:var(--sand-150);color:var(--text-secondary);border-color:var(--border-subtle)}.gl-badge--brand{background:var(--green-50);color:var(--green-700)}.gl-badge--accent{background:var(--orange-50);color:var(--orange-600)}.gl-badge--success{background:var(--green-50);color:var(--green-700)}.gl-badge--danger{background:var(--red-50);color:var(--red-500)}.gl-badge--warning{background:var(--orange-50);color:var(--orange-600)}.gl-badge--solid{background:var(--brand);color:var(--text-on-green)}.gl-badge--outline{color:var(--text-secondary);border-color:var(--border-strong);background:0 0}.gl-badge--dot:before{content:"";background:currentColor;border-radius:50%;width:6px;height:6px}.gl-pill{font-family:var(--font-text);font-weight:var(--fw-semibold);font-size:var(--fs-label);border-radius:var(--r-pill);white-space:nowrap;border:1px solid #0000;align-items:center;gap:6px;padding:6px 11px 6px 9px;line-height:1;display:inline-flex}.gl-pill--offline,.gl-pill--saving,.gl-pill--pending-sync,.gl-pill--backup-off{background:var(--system-tint);color:var(--ink-700)}.gl-pill--pending-sync{border-color:var(--system-border);border-style:dashed}.gl-pill--saved,.gl-pill--syncing,.gl-pill--online{background:var(--green-50);color:var(--green-700)}.gl-pill--unsaved{background:var(--orange-50);color:var(--orange-600)}.gl-pill--kept{background:var(--surface-card);color:var(--ink-800);border-color:var(--system-border)}.gl-pill--error{background:var(--system);color:var(--system-fg)}.gl-pill--recovery{background:var(--surface-card);color:var(--ink-900);border-color:var(--ink-900)}.gl-pill__spin{animation:1.1s linear infinite gl-spin}.gl-pill--onDark.gl-pill--offline,.gl-pill--onDark.gl-pill--saving,.gl-pill--onDark.gl-pill--pending-sync,.gl-pill--onDark.gl-pill--backup-off{background:var(--slate-700);color:var(--slate-100)}.gl-pill--onDark.gl-pill--error{background:var(--sand-50);color:var(--ink-900)}.gl-prog{font-family:var(--font-text);flex-direction:column;gap:6px;display:flex}.gl-prog__top{font-size:var(--fs-label);justify-content:space-between;align-items:baseline;display:flex}.gl-prog__label{font-weight:var(--fw-semibold);color:var(--text-secondary)}.gl-prog__val{font-weight:var(--fw-semibold);color:var(--text-muted);font-variant-numeric:tabular-nums}.gl-prog__track{background:var(--surface-sunken);border-radius:var(--r-pill);height:8px;position:relative;overflow:hidden}.gl-prog--lg .gl-prog__track{height:12px}.gl-prog--sm .gl-prog__track{height:6px}.gl-prog__fill{border-radius:var(--r-pill);background:linear-gradient(90deg, var(--green-400), var(--green-500));transition:width var(--dur-slow) var(--ease-out);position:absolute;inset:0 auto 0 0}.gl-prog__fill--accent{background:linear-gradient(90deg, var(--orange-300), var(--orange-400))}.gl-prog__seg{gap:4px;display:flex}.gl-prog__seg span{border-radius:var(--r-pill);background:var(--surface-sunken);flex:1;height:8px}.gl-prog__seg span[data-on=true]{background:var(--green-500)}.gl-card{background:var(--surface-card);border:1.5px solid var(--border-subtle);border-radius:var(--r-lg);box-shadow:var(--shadow-sm);color:var(--text-primary)}.gl-card--flat{box-shadow:none}.gl-card--raised{box-shadow:var(--shadow-md);border-color:#0000}.gl-card--outline{box-shadow:none;border-color:var(--border)}.gl-card--tint{background:var(--brand-tint);box-shadow:none;border-color:#0000}.gl-card--dark{background:var(--surface-dark-2);border-color:var(--border-dark);color:var(--text-on-dark);box-shadow:var(--shadow-md)}.gl-card--p0{padding:0}.gl-card--sm{padding:var(--space-4)}.gl-card--md{padding:var(--space-6)}.gl-card--lg{padding:var(--space-7)}.gl-card--interactive{cursor:pointer;transition:transform var(--dur-base) var(--ease-out), box-shadow var(--dur-base) var(--ease-out), border-color var(--dur-base) var(--ease-out)}.gl-card--interactive:hover{box-shadow:var(--shadow-lg);border-color:var(--border);transform:translateY(-3px)}.gl-card--interactive:focus-visible{box-shadow:var(--focus-ring);outline:none}.gl-field{font-family:var(--font-text);flex-direction:column;gap:6px;display:flex}.gl-field__label{font-size:var(--fs-label);font-weight:var(--fw-semibold);color:var(--text-secondary)}.gl-field__req{color:var(--danger);margin-left:2px}.gl-field__wrap{align-items:center;display:flex;position:relative}.gl-field__icon{color:var(--text-muted);pointer-events:none;place-items:center;display:grid;position:absolute;left:12px}.gl-input{width:100%;font-family:inherit;font-size:var(--fs-body);color:var(--text-primary);background:var(--surface-card);border:1.5px solid var(--border-strong);border-radius:var(--r-md);height:44px;transition:border-color var(--dur-fast) var(--ease-out), box-shadow var(--dur-fast) var(--ease-out);padding:0 14px}.gl-input::placeholder{color:var(--ink-400)}.gl-input:hover{border-color:var(--sand-500)}.gl-input:focus{border-color:var(--brand);box-shadow:var(--focus-ring);outline:none}.gl-input--withicon{padding-left:40px}.gl-input--sm{height:36px;font-size:var(--fs-body-sm)}.gl-input--lg{height:52px;font-size:var(--fs-body-lg)}.gl-input:disabled{background:var(--surface-sunken);color:var(--text-muted);cursor:not-allowed}.gl-field--error .gl-input{border-color:var(--danger)}.gl-field--error .gl-input:focus{box-shadow:0 0 0 3px #c6413a4d}.gl-field__msg{font-size:var(--fs-caption);color:var(--text-muted);align-items:center;gap:5px;display:flex}.gl-field__msg--error{color:var(--danger)}.gl-choice{text-align:left;width:100%;font-family:var(--font-text);font-size:var(--fs-body);color:var(--text-primary);background:var(--surface-card);border:1.5px solid var(--border);border-radius:var(--r-md);cursor:pointer;transition:border-color var(--dur-fast) var(--ease-out), background var(--dur-fast) var(--ease-out), box-shadow var(--dur-fast) var(--ease-out), transform var(--dur-fast) var(--ease-out);align-items:center;gap:14px;padding:14px 16px;display:flex}.gl-choice:hover{border-color:var(--brand);background:var(--sand-50)}.gl-choice:active{transform:translateY(1px)}.gl-choice:focus-visible{box-shadow:var(--focus-ring);outline:none}.gl-choice[disabled]{cursor:default}.gl-choice__key{min-width:32px;height:32px;font-family:var(--font-display);font-weight:var(--fw-bold);font-size:var(--fs-body);background:var(--sand-150);color:var(--text-secondary);border-radius:8px;flex:none;place-items:center;padding-inline:6px;transition:inherit;display:grid}.gl-choice__label{flex:1}.gl-choice__mark{flex:none;place-items:center;display:grid}.gl-choice--selected{border-color:var(--brand);background:var(--green-50)}.gl-choice--selected .gl-choice__key{background:var(--brand);color:#fff}.gl-choice--correct{border-color:var(--success);background:var(--green-50)}.gl-choice--correct .gl-choice__key{background:var(--success);color:#fff}.gl-choice--correct .gl-choice__mark{color:var(--success)}.gl-choice--incorrect{border-color:var(--danger);background:var(--red-50)}.gl-choice--incorrect .gl-choice__key{background:var(--danger);color:#fff}.gl-choice--incorrect .gl-choice__mark{color:var(--danger)}.gl-checkrow{font-family:var(--font-text);border-radius:var(--r-md);border:1.5px solid var(--border-subtle);background:var(--surface-card);align-items:flex-start;gap:11px;padding:11px 13px;display:flex}.gl-checkrow__icon{color:#fff;border-radius:50%;flex:none;place-items:center;width:22px;height:22px;margin-top:1px;display:grid}.gl-checkrow__body{flex-direction:column;flex:1;gap:2px;min-width:0;display:flex}.gl-checkrow__msg{font-size:var(--fs-body-sm);font-weight:var(--fw-medium);color:var(--text-primary)}.gl-checkrow__detail{font-size:var(--fs-caption);color:var(--text-muted)}.gl-checkrow--pass{background:var(--green-50);border-color:var(--green-100)}.gl-checkrow--pass .gl-checkrow__icon{background:var(--success)}.gl-checkrow--fail{background:var(--red-50);border-color:var(--red-100)}.gl-checkrow--fail .gl-checkrow__icon{background:var(--danger)}.gl-checkrow--partial{background:var(--orange-50);border-color:var(--orange-100)}.gl-checkrow--partial .gl-checkrow__icon{background:var(--orange-400)}.gl-checkrow--pending .gl-checkrow__icon{background:var(--sand-400)}.gl-checkrow--running .gl-checkrow__icon{background:var(--info)}.gl-checkrow--running .gl-checkrow__icon svg{animation:1.1s linear infinite gl-spin}.gl-checkrow--self{background:var(--sand-100);border-color:var(--border)}.gl-checkrow--self .gl-checkrow__icon{background:var(--ink-500)}.gl-callout{font-family:var(--font-text);border-radius:var(--r-lg);color:var(--text-primary);border:1.5px solid #0000;gap:12px;padding:14px 16px;display:flex}.gl-callout__icon{color:#fff;border-radius:8px;flex:none;place-items:center;width:28px;height:28px;display:grid}.gl-callout__body{flex-direction:column;gap:3px;min-width:0;display:flex}.gl-callout__title{font-weight:var(--fw-bold);font-size:var(--fs-body);font-family:var(--font-display);letter-spacing:var(--ls-snug)}.gl-callout__text{font-size:var(--fs-body-sm);line-height:var(--lh-normal);color:var(--text-secondary)}.gl-callout--info{background:var(--green-50);border-color:var(--green-100)}.gl-callout--info .gl-callout__icon{background:var(--info)}.gl-callout--hint{background:var(--orange-50);border-color:var(--orange-100)}.gl-callout--hint .gl-callout__icon{background:var(--accent)}.gl-callout--success{background:var(--green-50);border-color:var(--green-100)}.gl-callout--success .gl-callout__icon{background:var(--success)}.gl-callout--danger{background:var(--red-50);border-color:var(--red-100)}.gl-callout--danger .gl-callout__icon{background:var(--danger)}.gl-callout--note{background:var(--sand-100);border-color:var(--border)}.gl-callout--note .gl-callout__icon{background:var(--ink-600)}.gl-sys{font-family:var(--font-text);flex-wrap:wrap;align-items:center;gap:10px 12px;padding:10px 14px 10px 12px;display:flex}.gl-sys__tile{border-radius:var(--r-sm);flex:none;place-items:center;width:30px;height:30px;display:grid}.gl-sys__body{flex-direction:column;flex:160px;gap:1px;min-width:0;display:flex}.gl-sys__title{font-weight:var(--fw-bold);font-size:var(--fs-body-sm)}.gl-sys__text{font-size:var(--fs-label);line-height:1.4}.gl-sys__actions{flex:none;align-items:center;gap:8px;margin-left:auto;display:flex}.gl-sys--quiet{background:var(--system-tint);color:var(--ink-900)}.gl-sys--quiet .gl-sys__tile{background:var(--surface-card);color:var(--ink-800)}.gl-sys--quiet .gl-sys__text{color:var(--ink-600)}.gl-sys--attention{background:var(--system);color:var(--system-fg)}.gl-sys--attention .gl-sys__tile{color:var(--system-fg);background:#fdfaf41f}.gl-sys--attention .gl-sys__text{color:var(--slate-300)}.gl-sys--inline{border-radius:var(--r-lg)}.gl-sys__btn{font:inherit;font-weight:var(--fw-semibold);font-size:var(--fs-label);border-radius:var(--r-sm);cursor:pointer;transition:background var(--dur-fast) var(--ease-out);border:1.5px solid #0000;padding:7px 12px}.gl-sys__btn:focus-visible{box-shadow:var(--focus-ring);outline:none}.gl-sys--attention .gl-sys__btn--primary{background:var(--system-fg);color:var(--ink-900)}.gl-sys--attention .gl-sys__btn--primary:hover{background:#fff}.gl-sys--attention .gl-sys__btn--secondary{color:var(--system-fg);background:0 0;border-color:#fdfaf44d}.gl-sys--attention .gl-sys__btn--secondary:hover{background:#fdfaf41a}.gl-sys--quiet .gl-sys__btn--primary{background:var(--ink-900);color:var(--sand-50)}.gl-sys--quiet .gl-sys__btn--primary:hover{background:var(--ink-700)}.gl-sys--quiet .gl-sys__btn--secondary{color:var(--ink-800);border-color:var(--system-border);background:0 0}.gl-sys--quiet .gl-sys__btn--secondary:hover{background:var(--sand-150)}.gl-seg{background:var(--surface-sunken);border-radius:var(--r-md);border:1px solid var(--border-subtle);gap:3px;padding:3px;display:inline-flex}.gl-seg__btn{font-family:var(--font-text);font-weight:var(--fw-semibold);font-size:var(--fs-body-sm);color:var(--text-secondary);border-radius:var(--r-sm);cursor:pointer;transition:background var(--dur-fast) var(--ease-out), color var(--dur-fast) var(--ease-out), box-shadow var(--dur-fast) var(--ease-out);background:0 0;border:none;align-items:center;gap:7px;padding:7px 14px;display:inline-flex}.gl-seg__btn svg{width:16px;height:16px}.gl-seg__btn:hover{color:var(--text-primary)}.gl-seg__btn:focus-visible{box-shadow:var(--focus-ring);outline:none}.gl-seg__btn[aria-selected=true]{background:var(--surface-card);color:var(--brand-press);box-shadow:var(--shadow-sm)}.gl-seg--dark{background:var(--slate-850);border-color:var(--border-dark)}.gl-seg--dark .gl-seg__btn{color:var(--slate-300)}.gl-seg--dark .gl-seg__btn:hover{color:var(--slate-100)}.gl-seg--dark .gl-seg__btn[aria-selected=true]{background:var(--slate-700);color:var(--slate-100)}.gl-filetab{font-family:var(--font-mono);font-size:var(--fs-mono-sm);color:var(--slate-300);cursor:pointer;max-width:210px;transition:background var(--dur-fast) var(--ease-out), color var(--dur-fast) var(--ease-out);background:0 0;border:none;border-top:2px solid #0000;align-items:center;gap:8px;padding:9px 12px;display:inline-flex}.gl-filetab:hover{background:var(--slate-850);color:var(--slate-100)}.gl-filetab:focus-visible{box-shadow:var(--focus-ring);outline:none}.gl-filetab__name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.gl-filetab__dot{background:var(--orange-300);border-radius:50%;flex:none;width:7px;height:7px}.gl-filetab__x{width:18px;height:18px;color:var(--slate-300);opacity:.6;border-radius:5px;place-items:center;display:grid}.gl-filetab__x:hover{opacity:1;background:var(--slate-700)}.gl-filetab--active{background:var(--slate-900);color:var(--slate-100);border-top-color:var(--green-400)}.gl-filetab--active .gl-filetab__icon{color:var(--green-400)}.gl-filetab__icon{color:var(--slate-300);flex:none;place-items:center;display:grid}.gl-filetab--light{font-family:var(--font-mono);color:var(--text-muted);border-radius:var(--r-sm);border:1px solid #0000}.gl-filetab--light:hover{background:var(--sand-150);color:var(--text-primary)}.gl-filetab--light.gl-filetab--active{background:var(--surface-card);color:var(--text-primary);border-color:var(--border)}.gl-mb{font-family:var(--font-text);align-items:flex-end;gap:12px;display:flex}.gl-mb--right{flex-direction:row-reverse}.gl-mb__ant{filter:drop-shadow(0 6px 12px #0b6b412e);flex:none}.gl-mb__bubble{background:var(--surface-card);border:1.5px solid var(--border-subtle);border-radius:var(--r-lg);box-shadow:var(--shadow-md);max-width:340px;padding:13px 16px;position:relative}.gl-mb__name{font-family:var(--font-display);font-weight:var(--fw-bold);font-size:var(--fs-label);letter-spacing:var(--ls-label);color:var(--brand);align-items:center;gap:5px;margin-bottom:3px;display:flex}.gl-mb__text{font-size:var(--fs-body-sm);line-height:var(--lh-normal);color:var(--text-primary)}.gl-mb__bubble:before{content:"";background:var(--surface-card);border-left:1.5px solid var(--border-subtle);border-bottom:1.5px solid var(--border-subtle);width:14px;height:14px;position:absolute;bottom:14px;left:-8px;transform:rotate(45deg)}.gl-mb--right .gl-mb__bubble:before{left:auto;right:-8px;transform:rotate(225deg)}.gl-mb--hint .gl-mb__bubble,.gl-mb--hint .gl-mb__bubble:before{background:var(--orange-50);border-color:var(--orange-100)}.gl-mb--hint .gl-mb__name{color:var(--orange-600)}.gl-dialog__scrim{z-index:100;-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);animation:gl-fade var(--dur-base) var(--ease-out);background:#211e1870;place-items:center;padding:24px;display:grid;position:fixed;inset:0}.gl-dialog{background:var(--surface-card);border-radius:var(--r-xl);box-shadow:var(--shadow-xl);width:100%;max-width:460px;max-height:90vh;font-family:var(--font-text);animation:gl-pop var(--dur-slow) var(--ease-spring);overflow:auto}.gl-dialog--lg{max-width:640px}.gl-dialog__head{align-items:flex-start;gap:12px;padding:22px 22px 0;display:flex}.gl-dialog__titles{flex-direction:column;flex:1;gap:3px;display:flex}.gl-dialog__title{font-family:var(--font-display);font-weight:var(--fw-bold);font-size:var(--fs-h3);letter-spacing:var(--ls-snug);color:var(--text-primary)}.gl-dialog__sub{font-size:var(--fs-body-sm);color:var(--text-muted)}.gl-dialog__body{font-size:var(--fs-body);color:var(--text-secondary);line-height:var(--lh-normal);padding:16px 22px}.gl-dialog__foot{flex-wrap:wrap;justify-content:flex-end;gap:10px;padding:0 22px 22px;display:flex}@keyframes gl-fade{0%{opacity:0}to{opacity:1}}@keyframes gl-pop{0%{opacity:0;transform:translateY(10px)scale(.97)}to{opacity:1;transform:none}}html,body,#root{height:100%}button,input,textarea{font:inherit}.spacer{flex:1}.screen{background:var(--surface-app);flex-direction:column;height:100%;display:flex}.eyebrow{letter-spacing:var(--ls-eyebrow);text-transform:uppercase;color:var(--text-muted);font-size:11px;font-weight:700}.eyebrow-green{color:var(--green-700)}.topbar{background:var(--surface-card);border-bottom:1.5px solid var(--border-subtle);flex:none;align-items:center;gap:14px;height:56px;padding:0 16px;display:flex}.topbar-glyph{flex:none;margin-left:2px}.topbar-divider{background:var(--divider);width:1px;height:26px}.wordmark{font-family:var(--font-display);letter-spacing:-.02em;font-weight:800}.wordmark span{color:var(--accent)}.profile-chip{border-radius:var(--r-pill);cursor:pointer;transition:background var(--dur-fast) var(--ease-out);background:0 0;border:none;align-items:center;gap:8px;padding:4px 6px 4px 4px;display:flex}.profile-chip:hover{background:var(--sand-150)}.profile-chip>span:not(.profile-avatar){color:var(--text-primary);font-size:14px;font-weight:600}.crumb{align-items:center;gap:7px;min-width:0;display:flex}.crumb-sep{color:var(--ink-400)}.crumb-parent,.crumb-current{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.crumb-parent{color:var(--text-muted);flex-shrink:0;font-size:13px;font-weight:500}.crumb-current{font-family:var(--font-display);color:var(--text-primary);min-width:0;font-size:15px;font-weight:700}.profile-screen{background:radial-gradient(120% 90% at 50% -10%, var(--green-50), var(--surface-app) 60%);flex-direction:column;align-items:center;min-height:100%;padding:40px 24px;display:flex}.profile-top{align-self:stretch;align-items:center;gap:10px;display:flex}.profile-body{flex-direction:column;flex:1;justify-content:center;align-items:center;width:100%;max-width:960px;padding-bottom:56px;display:flex}.profile-bubble .gl-mb__bubble{max-width:420px;padding:16px 20px}.profile-bubble .gl-mb__name{font-size:14px}.profile-bubble .gl-mb__text{font-size:17px}.profile-banner{align-self:stretch;margin-bottom:20px}.profile-title{text-align:center;margin-top:32px;font-size:40px}.profile-sub{color:var(--text-muted);text-align:center;margin-top:8px;font-size:16px}.profile-tiles{flex-wrap:wrap;justify-content:center;gap:18px;margin-top:36px;display:flex}.profile-tile{text-align:center;flex-direction:column;align-items:center;gap:10px;width:200px;padding:22px 16px;display:flex}.profile-tile-name{font-size:18px;font-weight:700}.profile-tile-meta{color:var(--text-muted);font-size:13px}.profile-tile-add{color:var(--text-muted);border-style:dashed;justify-content:center}.profile-add-mark{background:var(--surface-sunken);border-radius:50%;place-items:center;width:72px;height:72px;display:grid}.profile-add-label{color:var(--text-secondary);font-size:17px;font-weight:600}.pin-card{text-align:center;flex-direction:column;align-items:center;gap:10px;width:420px;max-width:100%;display:flex}.pin-title{margin-top:4px;font-size:23px}.pin-sub{color:var(--text-muted);margin-top:-6px;font-size:13px}.pin-boxes{gap:10px;margin:8px 0 2px;display:flex}.pin-boxes.shake{animation:.4s pin-shake}.pin-box{text-align:center;width:44px;height:52px;color:var(--ink-900);caret-color:#0000;background:var(--surface-card);border:1.5px solid var(--border);border-radius:var(--r-md);transition:border-color var(--dur-fast) var(--ease-out), box-shadow var(--dur-fast) var(--ease-out);padding:0;font-size:22px}.pin-box:hover{border-color:var(--sand-500)}.pin-box:focus{border-color:var(--brand);box-shadow:var(--focus-ring);outline:none}.pin-box.error{border-color:var(--danger)}.pin-box:disabled{background:var(--surface-sunken)}.pin-error{color:var(--red-500);align-items:center;gap:6px;font-size:12.5px;font-weight:600;display:flex}.pin-hint{color:var(--text-muted);font-size:11.5px}@keyframes pin-shake{0%,to{transform:translate(0)}20%,60%{transform:translate(-6px)}40%,80%{transform:translate(6px)}}.add-card{flex-direction:column;gap:12px;width:420px;max-width:100%;display:flex}.add-bubble{margin-bottom:8px}.add-title{font-size:18px}.add-form{flex-direction:column;gap:12px;display:flex}.add-actions{justify-content:flex-end;gap:8px;margin-top:4px;display:flex}.home-scroll{flex:1;padding:28px 32px 40px;overflow:auto}.home-layout{max-width:var(--content-max);grid-template-columns:minmax(0,1fr) 320px;align-items:start;gap:28px;margin:0 auto;display:grid}.home-main{flex-direction:column;gap:28px;min-width:0;display:flex}.home-side{min-width:0}.home-hero-group{flex-direction:column;gap:12px;display:flex}.home-hero{color:#fff;border-radius:var(--r-2xl);background:linear-gradient(120deg, var(--green-700), var(--green-500));align-items:stretch;gap:24px;padding:26px 32px;display:flex;position:relative;overflow:hidden}.home-hero-text{flex-direction:column;flex:1;align-items:flex-start;min-width:0;display:flex}.home-hero h1{color:#fff;margin-top:14px;font-size:34px;line-height:1.05}.home-hero p{color:#ffffffdb;max-width:60ch;margin-top:8px;font-size:15px}.hero-badge.gl-badge{color:#fff;background:#ffffff29}.hero-progress{width:100%;max-width:320px;margin-top:18px}.hero-progress-caption{color:#fffc;margin-top:7px;font-size:12.5px;font-weight:600}.hero-cta{margin-top:20px}.home-hero-art{filter:drop-shadow(0 10px 24px #06321e66);flex:none;align-items:flex-end;display:flex}.hero-note{color:var(--text-muted);font-size:12px;font-weight:600}.hero-unavailable{border-radius:var(--r-2xl);background:var(--surface-card);border:1.5px solid var(--border-subtle);flex-direction:column;gap:8px;padding:22px 24px;display:flex}.hero-unavailable h1{font-size:23px}.hero-unavailable p{color:var(--text-secondary);font-size:14px}.saved-line{color:var(--text-secondary);align-items:center;gap:8px;font-size:13px;display:flex}.saved-line svg{color:var(--success)}.section-head{justify-content:space-between;align-items:baseline;margin-bottom:14px;display:flex}.section-head h2{font-size:20px}.section-head span{color:var(--text-muted);font-size:13px;font-weight:600}.unit-path{grid-template-columns:repeat(5,minmax(0,1fr));gap:12px;display:grid}.unit-step{text-align:left;border:1.5px solid var(--border-subtle);border-radius:var(--r-lg);cursor:default;min-width:0;transition:transform var(--dur-base) var(--ease-out), box-shadow var(--dur-base) var(--ease-out);background:0 0;padding:14px 15px}.unit-step:focus-visible{outline:3px solid var(--brand);outline-offset:3px}.unit-step.active{background:var(--surface-card);border-color:var(--brand);box-shadow:var(--shadow-md);cursor:pointer}.unit-step.active:hover{transform:translateY(-2px)}.unit-step.locked{opacity:.6}.unit-step-top{align-items:center;gap:9px;margin-bottom:8px;display:flex}.unit-step-mark{color:#fff;background:var(--sand-400);border-radius:50%;place-items:center;width:26px;height:26px;display:grid}.unit-step.done .unit-step-mark{background:var(--success)}.unit-step.active .unit-step-mark{background:var(--brand)}.unit-step-number{letter-spacing:.04em;text-transform:uppercase;color:var(--text-muted);font-size:12px;font-weight:700}.unit-step-title{font-family:var(--font-display);color:var(--text-primary);font-size:15px;font-weight:700;line-height:1.2}.unit-step-state{color:var(--text-muted);margin-top:8px;font-size:12px;font-weight:600}.unit-step.done .unit-step-state{color:var(--success)}.unit-step.active .unit-step-state{color:var(--brand)}.lesson-list{background:var(--surface-card);border:1.5px solid var(--border-subtle);border-radius:var(--r-lg);grid-template-columns:repeat(2,minmax(0,1fr));gap:2px 12px;margin:0;padding:6px;list-style:none;display:grid}.lesson-list li{border-radius:var(--r-sm);align-items:center;gap:10px;padding:9px 12px;font-size:14px;display:flex}.lesson-list li.current{background:var(--green-50);font-weight:700}.lesson-list li.upcoming{color:var(--text-muted)}.lesson-list-n{width:16px;font-family:var(--font-mono);color:var(--text-muted);font-size:12px}.lesson-list-mark{width:14px;color:var(--success);place-items:center;display:grid}.lesson-list li.current .lesson-list-mark{color:var(--brand)}.lesson-list-title{flex:1;min-width:0}.portfolio-grid{flex-direction:column;gap:10px;display:flex}.portfolio-card{align-items:stretch;display:flex;overflow:hidden}.portfolio-thumb{color:#fff;flex:none;place-items:center;width:76px;display:grid}.portfolio-thumb-code{font-family:var(--font-mono);background:linear-gradient(135deg, var(--orange-200), var(--orange-400));font-size:13px}.portfolio-thumb-green{background:linear-gradient(135deg, var(--green-200), var(--green-500))}.portfolio-caption{flex-direction:column;justify-content:center;padding:13px 14px;display:flex}.portfolio-name{font-size:14px;font-weight:700}.portfolio-meta{color:var(--text-muted);margin-top:2px;font-size:12px}.portfolio-empty{color:var(--text-muted);border-style:dashed;align-items:center;gap:10px;font-size:13px;font-weight:600;display:flex}.build-split{flex:1;grid-template-columns:minmax(0,min(45%,780px)) minmax(0,1fr);min-height:0;display:grid}.lesson-pane{border-right:1.5px solid var(--border-subtle);flex-direction:column;min-height:0;display:flex}.lesson-head{border-bottom:1px solid var(--border-subtle);flex:none;align-items:center;gap:8px;padding:10px 20px;display:flex}.lesson-scroll{flex:1;min-height:0;overflow:auto}.lesson-body{max-width:var(--lesson-max);flex-direction:column;gap:16px;padding:22px 28px 48px;display:flex}.lesson-kicker{color:var(--text-muted);margin-bottom:-10px;font-size:12.5px;font-weight:600}.lesson-body h1{font-size:30px;line-height:1.1}.reading{max-width:var(--measure);font-size:var(--fs-body-lg);line-height:var(--lh-reading);color:var(--text-primary);margin-bottom:-4px}.lesson-body code{font-family:var(--font-mono);background:var(--surface-sunken);border-radius:5px;padding:1px 5px;font-size:.88em}.lesson-complete{background:var(--surface-card);border:1.5px solid var(--border-subtle);border-radius:var(--r-lg);flex-direction:column;gap:12px;padding:16px;display:flex}.lesson-complete-head{align-items:center;gap:10px;display:flex}.lesson-complete-line{margin-top:2px;font-size:15px;font-weight:700}.build-pane{background:var(--surface-card);flex-direction:column;min-width:0;min-height:0;display:flex}.build-toolbar{border-bottom:1.5px solid var(--border-subtle);flex:none;align-items:center;gap:10px;padding:10px 14px;display:flex}.portfolio-file-switch{border-bottom:1px solid var(--border-subtle);white-space:nowrap;align-items:center;gap:8px;padding:8px 14px;font-size:12px;display:flex;overflow-x:auto}.portfolio-file-switch button{border:1px solid var(--border-subtle);background:var(--surface-card);color:inherit;cursor:pointer;border-radius:8px;flex:none;padding:5px 9px}.portfolio-file-switch button[aria-current=true]{border-color:var(--color-brand,#557c71);font-weight:700}.portfolio-file-switch button:focus-visible{outline-offset:2px;outline:2px solid}.build-view{min-height:0;animation:build-fade var(--dur-base) var(--ease-out);flex:1}@keyframes build-fade{0%{opacity:0}to{opacity:1}}.code-view{background:var(--code-bg);flex-direction:column;height:100%;display:flex}.code-tabs{border-bottom:1px solid var(--border-dark);align-items:center;padding-right:12px;display:flex}.code-tabs-list{flex:1;display:flex;overflow:hidden}.code-path{font-family:var(--font-mono);color:var(--slate-300);font-size:11px}.code-editor{min-height:0;font:var(--fs-mono)/1.7 var(--font-mono);flex:1;display:flex}.code-gutter{text-align:right;width:50px;color:var(--code-linenr);-webkit-user-select:none;user-select:none;flex:none;padding:12px 16px 12px 0;overflow:hidden}.code-gutter span{display:block}.code-gutter span.active{color:var(--code-linenr-active)}.code-gutter span.flagged{color:var(--code-invalid);font-weight:700}.code-flag{border-left:3px solid var(--code-invalid);pointer-events:none;background:#ff786e1f;height:1.7em;position:absolute;left:0;right:0}.code-surface{flex:1;min-width:0;position:relative}.code-highlight,.code-input{font:inherit;white-space:pre;tab-size:2;margin:0;padding:12px 16px 12px 0;position:absolute;inset:0;overflow:auto}.code-highlight{pointer-events:none;color:var(--code-text);overflow:hidden}.code-input{resize:none;color:#0000;caret-color:var(--code-cursor);background:0 0;border:0;outline:0}.code-input::selection{background:var(--code-selection);color:#0000}.code-input:focus-visible{box-shadow:none}.code-editor:focus-within{box-shadow:inset 0 0 0 2px #128a5659}.code-status{border-top:1px solid var(--border-dark);font-family:var(--font-mono);color:var(--slate-300);align-items:center;gap:10px;padding:7px 14px;font-size:11.5px;display:flex}.code-status-issue{color:var(--diag-error);align-items:center;gap:5px;display:flex}.code-status-ok{color:var(--diag-ok)}.preview-view{background:var(--sand-200);flex-direction:column;height:100%;display:flex}.preview-bar{align-items:center;gap:8px;padding:9px 12px;display:flex}.preview-dots{gap:5px;display:flex}.preview-dots span{background:var(--sand-300);border-radius:50%;width:10px;height:10px}.preview-address{background:var(--surface-card);font-family:var(--font-mono);color:var(--text-muted);border-radius:8px;flex:1;align-items:center;gap:7px;padding:5px 12px;font-size:12px;display:flex}.preview-well{min-height:0;box-shadow:var(--shadow-md);background:#fff;border-radius:10px;flex:1;margin:0 12px 12px;overflow:hidden}.preview-boundary-note{background:var(--sand-100);color:var(--text-secondary);border-radius:8px;margin:0 12px 9px;padding:7px 10px;font-size:12px;line-height:1.35}.preview-placeholder{color:var(--text-muted);padding:30px 34px;font-size:14px}.console-panel{max-height:32%;box-shadow:var(--shadow-md);background:#fff;border-radius:10px;flex-direction:column;flex:none;margin:0 12px 12px;display:flex;overflow:hidden}.console-head{letter-spacing:.06em;color:var(--text-secondary);border-bottom:1px solid var(--sand-200);align-items:center;padding:6px 10px;font-size:11px;font-weight:700;display:flex}.console-clear{font:inherit;letter-spacing:0;color:var(--text-secondary);cursor:pointer;background:0 0;border:0;font-weight:600}.console-empty{color:var(--text-muted);margin:0;padding:8px 10px;font-size:12px}.console-list{font-family:var(--font-mono);margin:0;padding:0;font-size:12px;list-style:none;overflow-y:auto}.console-entry{border-bottom:1px solid var(--sand-100);white-space:pre-wrap;overflow-wrap:anywhere;padding:4px 10px}.console-entry.error{color:var(--red-500)}.console-entry.giiyo{color:var(--text-secondary);font-style:italic}.checks-view{background:var(--surface-app);height:100%;padding:18px;overflow:auto}.checks-head{align-items:center;gap:8px;margin-bottom:4px;display:flex}.checks-head h3{font-size:17px}.checks-lead{color:var(--text-muted);margin-bottom:14px;font-size:13px}.reflect{flex-direction:column;gap:8px;display:flex}.reflect-prompt{font-weight:var(--fw-semibold)}.reflect-input{resize:vertical;height:auto;min-height:96px;font:inherit;padding:10px 12px;line-height:1.5}.in-view{gap:inherit;flex-direction:column;display:flex}.checks-list{flex-direction:column;gap:9px;display:flex}.check-show-line{border:1px solid var(--border);background:var(--surface-card,transparent);color:var(--text-link);font:inherit;font-size:12px;font-weight:var(--fw-semibold);white-space:nowrap;cursor:pointer;border-radius:999px;margin-left:10px;padding:1px 8px;display:inline-flex}.check-show-line:hover{text-decoration:underline}.check-fixed{animation:check-flash 1.2s var(--ease-out) 1}@keyframes check-flash{0%{box-shadow:0 0 0 3px #128a5659}to{box-shadow:0 0 0 3px #128a5600}}.checks-fixed{align-items:center;gap:8px;margin-top:18px;font-size:14px;font-weight:600;display:flex}.hint-offer{background:var(--surface-card);border:1.5px solid var(--border-subtle);border-radius:var(--r-lg);align-items:center;gap:12px;margin-top:18px;padding:14px;display:flex}.hint-offer>span{color:var(--text-secondary);flex:1;font-size:13.5px}.hint-step{flex-direction:column;align-items:flex-start;gap:10px;margin-top:18px;display:flex}.hint-example{align-self:stretch;align-items:flex-start;gap:10px;display:flex}.hint-example-code{border-radius:var(--r-md);background:var(--code-bg);font:13px/1.7 var(--font-mono);white-space:pre-wrap;flex:1;margin:0;padding:12px 14px}.hint-example-code mark{background:#5fc08c40;border-radius:3px}.hint-example-note{color:var(--text-secondary);font-size:13px}.tok-tag{color:var(--code-tag)}.tok-punct{color:var(--code-punct)}.tok-text{color:var(--code-text)}.tok-attr{color:var(--code-attr)}.tok-string{color:var(--code-string)}.tok-comment{color:var(--code-comment)}@media (width<=1279px){.build-split{grid-template-columns:minmax(0,38%) minmax(0,1fr)}.workspace .crumb>:nth-child(-n+2){display:none}.lesson-body{padding:20px 22px 40px}}@media (width<=1100px){.unit-path{grid-template-columns:repeat(3,minmax(0,1fr))}.home-layout{grid-template-columns:minmax(0,1fr)}.portfolio-grid{grid-template-columns:repeat(3,1fr);display:grid}}@media (width<=760px){.build-split{display:block;overflow-y:auto}.lesson-pane{border-right:0;border-bottom:1.5px solid var(--border-subtle);height:max(240px,48vh)}.build-pane{height:max(340px,64vh)}.build-toolbar{flex-wrap:wrap}.build-toolbar .spacer{display:none}.unit-path{grid-template-columns:repeat(2,minmax(0,1fr))}}.profile-avatar{border-radius:50%;flex:none;place-items:center;display:grid;overflow:hidden}.profile-menu{position:relative}.profile-chip svg:last-child{color:var(--text-muted)}.profile-menu-list{z-index:50;background:var(--surface-card);border:1.5px solid var(--border-subtle);border-radius:var(--r-lg);min-width:210px;box-shadow:var(--shadow-lg);animation:build-fade var(--dur-fast) var(--ease-out);flex-direction:column;padding:6px;display:flex;position:absolute;top:calc(100% + 8px);right:0}.profile-menu-item{border-radius:var(--r-sm);width:100%;color:var(--text-primary);text-align:left;cursor:pointer;background:0 0;border:0;align-items:center;gap:10px;padding:9px 12px;font-size:14px;font-weight:500;display:flex}.profile-menu-item svg{color:var(--text-muted)}.profile-menu-item:hover{background:var(--sand-150)}.profile-menu-item.danger,.profile-menu-item.danger svg{color:var(--red-500)}.profile-menu-item.danger:hover{background:var(--red-50)}.avatar-picker{flex-direction:column;gap:14px;display:flex}.avatar-faces{grid-template-columns:repeat(6,1fr);justify-items:center;gap:8px;display:grid}.avatar-option{cursor:pointer;transition:transform var(--dur-fast) var(--ease-out);background:0 0;border:0;border-radius:50%;padding:3px}.avatar-option:hover{transform:translateY(-2px)}.avatar-option.selected{box-shadow:0 0 0 3px var(--brand)}.avatar-colors{align-items:center;gap:10px;display:flex}.avatar-swatch{border:1.5px solid var(--border);cursor:pointer;border-radius:50%;width:28px;height:28px;padding:0}.avatar-swatch.selected{box-shadow:0 0 0 2px var(--surface-card), 0 0 0 4px var(--brand)}.avatar-colors .gl-btn{margin-left:auto}.avatar-dialog-preview{font-family:var(--font-display);color:var(--text-primary);align-items:center;gap:14px;margin-bottom:18px;font-size:20px;display:flex}.add-avatar{align-items:center;gap:14px;display:flex}.add-avatar-label{color:var(--text-secondary);margin-bottom:2px;font-size:13px;font-weight:600}.add-avatar .gl-btn{margin-left:-14px}.pin-links,.pin-actions{flex-wrap:wrap;justify-content:center;gap:8px;display:flex}.pin-actions{margin-top:8px}.pin-nudge{color:var(--text-muted);align-items:center;gap:8px;font-size:13px;display:flex}.text-button{color:var(--text-link);cursor:pointer;background:0 0;border:0;padding:0;font-size:13px;font-weight:600}.text-button:hover{color:var(--text-link-hover);text-decoration:underline}.pin-nudge-close{width:22px;height:22px;color:var(--text-muted);cursor:pointer;background:0 0;border:0;border-radius:6px;place-items:center;padding:0;display:grid}.pin-nudge-close:hover{background:var(--sand-150)}.dialog-reassure{border-radius:var(--r-md);background:var(--green-50);color:var(--green-700);align-items:center;gap:8px;margin-top:12px;padding:10px 12px;font-size:14px;display:flex}.lesson-pane.reading-mode{border-right:0;flex:1;min-height:0}.reading-mode .lesson-head{padding-left:max(28px, calc((100% - var(--lesson-max) * var(--read-zoom)) / 2 + 28px * var(--read-zoom)));padding-right:max(28px, calc((100% - var(--lesson-max) * var(--read-zoom)) / 2 + 28px * var(--read-zoom)))}.reading-mode .lesson-body{margin:0 auto;padding-top:32px}.lesson-steps{color:var(--text-muted);white-space:nowrap;align-items:center;gap:10px;font-size:12px;font-weight:600;display:flex}.lesson-steps .gl-prog{width:150px}.lesson-subhead{margin-top:6px;font-size:19px}.lesson-list-items{font-size:var(--fs-body-lg);color:var(--text-primary);margin:0;padding-left:22px;line-height:1.6}.lesson-list-items li+li{margin-top:2px}.lesson-body code,.question code,.reading code{font-family:var(--font-mono);background:var(--surface-sunken);border-radius:5px;padding:1px 5px;font-size:.88em}.step{flex-direction:column;gap:16px;scroll-margin-top:16px;display:flex}.step:not(.current){opacity:.92}.step-card{background:var(--surface-card);border:1.5px solid var(--border-subtle);border-radius:var(--r-xl);flex-direction:column;gap:14px;padding:20px 22px;display:flex}.step-card.active{border-color:var(--green-200);box-shadow:var(--shadow-md)}.step-card-title{font-family:var(--font-display);color:var(--text-primary);align-items:center;gap:8px;font-size:18px;font-weight:700;display:flex}.step-card-title svg{color:var(--brand)}.step-actions{flex-wrap:wrap;justify-content:flex-end;gap:10px;display:flex}.step-actions.start{justify-content:flex-start}.step-hint,.step-note{color:var(--text-secondary);font-size:14px}.step-note{border-radius:var(--r-md);background:var(--surface-sunken);padding:10px 12px}.done-mark{color:var(--green-700);align-self:flex-start;align-items:center;gap:6px;font-size:13px;font-weight:600;display:inline-flex}.literal{border-radius:var(--r-md);border:1.5px solid var(--border-subtle);background:var(--sand-50);font:15px/1.6 var(--font-mono);color:var(--ink-900);white-space:pre-wrap;margin:0;padding:12px 16px}.literal.folders{flex-direction:column;gap:4px;display:flex}.literal.folders span{align-items:center;gap:8px;display:flex}.literal.folders svg{color:var(--brand)}.code-block{border-radius:var(--r-md);background:var(--code-bg);font:14px/1.7 var(--font-mono);white-space:pre-wrap;margin:0;padding:12px 16px;overflow-x:auto}.flow{flex-wrap:wrap;align-items:center;gap:6px;margin:0;padding:0;list-style:none;display:flex}.flow li{align-items:center;gap:6px;display:flex}.flow svg{color:var(--ink-400)}.flow span{border-radius:var(--r-pill);background:var(--surface-card);border:1.5px solid var(--border-subtle);padding:6px 12px;font-size:14px;font-weight:600}.flow li:last-child span{background:var(--green-50);border-color:var(--green-100);color:var(--green-700)}.os-branch{border-left:3px solid var(--border-subtle);flex-direction:column;gap:8px;padding-left:12px;display:flex}.folder-line{border-radius:var(--r-md);background:var(--surface-card);border:1.5px solid var(--border-subtle);align-items:center;gap:12px;padding:10px 14px;display:flex}.folder-line>div{flex-direction:column;flex:1;min-width:0;display:flex}.folder-line strong{font-size:14px}.folder-line span{color:var(--text-muted);text-overflow:ellipsis;white-space:nowrap;font-size:12px;overflow:hidden}.folder-line svg{color:var(--ink-600)}.folder-line.ok{background:var(--green-50);border-color:var(--green-100)}.folder-line.ok svg{color:var(--brand)}.question{flex-direction:column;gap:12px;display:flex}.question-prompt{color:var(--text-primary);font-size:17px;font-weight:600}.question-options{flex-direction:column;gap:10px;display:flex}.option-code,.lesson-body code.option-code,.question code.option-code{font:14px var(--font-mono);background:var(--code-bg);color:var(--code-text);border-radius:6px;padding:4px 8px}.match-jobs{gap:6px;margin:0;padding:0;list-style:none;display:grid}.match-jobs li{color:var(--text-secondary);align-items:center;gap:10px;font-size:15px;display:flex}.match-key{background:var(--sand-150);min-width:26px;height:26px;font-family:var(--font-display);color:var(--text-secondary);border-radius:7px;flex:none;place-items:center;padding:0 6px;font-size:14px;font-weight:700;display:grid}.match-rows{border-radius:var(--r-md);background:var(--sand-50);flex-direction:column;gap:8px;padding:12px;display:flex}.match-row{align-items:center;gap:12px;display:flex}.match-row strong{width:120px;font-size:15px}.match-picks{gap:6px;display:flex}.match-pick{border:1.5px solid var(--border);background:var(--surface-card);min-width:34px;height:34px;font-family:var(--font-display);color:var(--text-secondary);cursor:pointer;border-radius:8px;padding:0 8px;font-weight:700}.match-pick:hover:not(:disabled){border-color:var(--brand)}.match-pick.selected{background:var(--brand);border-color:var(--brand);color:#fff}.mark-right{color:var(--success)}.mark-wrong{color:var(--danger)}.fill{font-size:var(--fs-body-lg);flex-wrap:wrap;align-items:center;gap:8px;display:flex}.fill-input{width:140px;height:40px}.fill-input.wrong{border-color:var(--danger)}.question .gl-btn,.step-card>.gl-btn{align-self:flex-start}.controls{-webkit-user-select:none;user-select:none;flex-direction:column;gap:10px;margin:0;padding:0;list-style:none;display:flex}.controls input{-webkit-user-select:text;user-select:text}.control-row{border-radius:var(--r-lg);background:var(--sand-50);border:1.5px solid var(--border-subtle);gap:14px;padding:14px 16px;display:flex}.control-row.done{background:var(--green-50);border-color:var(--green-100)}.control-row.waiting{opacity:.55}.control-mark{background:var(--surface-card);border:1.5px solid var(--border-strong);width:28px;height:28px;font-family:var(--font-display);color:var(--text-secondary);border-radius:50%;flex:none;place-items:center;font-size:14px;font-weight:700;display:grid}.control-row.done .control-mark{background:var(--success);border-color:var(--success);color:#fff}.control-body{flex-direction:column;flex:1;gap:10px;min-width:0;display:flex}.control-instruction{color:var(--text-primary);margin-top:3px;font-size:16px;line-height:1.5}.control-body .controls-target{align-self:flex-start}.controls-target{border:3px solid var(--accent);background:var(--orange-50);color:#fff;cursor:pointer;border-radius:50%;place-items:center;width:72px;height:72px;display:grid}.controls-dot{background:var(--accent);border-radius:50%;width:22px;height:22px}.controls-target.hit{border-color:var(--success);background:var(--success)}.controls-scroll{border-radius:var(--r-md);background:var(--surface-card);border:1.5px solid var(--border);height:120px;color:var(--text-muted);padding:8px 12px;font-size:14px;overflow-y:auto}.controls-scroll p{margin:6px 0}.controls-found{border-radius:var(--r-md);background:var(--orange-50);color:var(--orange-600);align-items:center;gap:6px;margin:10px 0 4px;padding:10px 12px;font-weight:700;display:flex}.controls-found.seen{background:var(--green-50);color:var(--green-700)}.practice{flex-direction:column;gap:10px;display:flex}.practice-box{resize:vertical;height:90px;padding:10px 14px}.visually-hidden{clip:rect(0 0 0 0);width:1px;height:1px;position:absolute;overflow:hidden}.confirmations{border-radius:var(--r-lg);background:var(--sand-100);border:1.5px dashed var(--border-strong);flex-direction:column;gap:8px;padding:14px 16px;display:flex}.confirm-note{color:var(--text-muted);font-size:13px}.confirm-row{cursor:pointer;align-items:flex-start;gap:10px;font-size:15px;display:flex}.confirm-row input{width:18px;height:18px;accent-color:var(--brand);margin-top:2px}.teach-offer{flex-direction:column;align-items:flex-start;gap:10px;display:flex}.teach{border-radius:var(--r-lg);background:var(--sand-50);border:1.5px solid var(--border);flex-direction:column;gap:12px;padding:18px 20px;display:flex}.lesson-complete-actions{justify-content:flex-end;gap:10px;display:flex}.unit-complete{background:linear-gradient(160deg, var(--green-50), var(--surface-app));place-items:center;min-height:100%;padding:40px 24px;display:grid;overflow:auto}.unit-complete-inner{text-align:center;flex-direction:column;align-items:center;gap:14px;width:100%;max-width:640px;display:flex}.unit-complete-mascot{animation:unit-spring var(--dur-mascot) var(--ease-spring)}@keyframes unit-spring{0%{opacity:0;transform:scale(.7)}to{opacity:1;transform:scale(1)}}.unit-complete h1{font-size:40px}.unit-complete-lead{color:var(--text-secondary);font-size:17px}.unit-complete-list{text-align:left;background:var(--surface-card);border:1.5px solid var(--border-subtle);border-radius:var(--r-xl);grid-template-columns:1fr 1fr;gap:8px 18px;margin:0;padding:18px 22px;list-style:none;display:grid}.unit-complete-list li{gap:8px;font-size:14px;display:flex}.unit-complete-list svg{color:var(--success);margin-top:1px}.unit-complete-next{color:var(--text-secondary)}.unit-complete-notice{border-radius:var(--r-md);background:var(--surface-sunken);color:var(--text-secondary);margin:0;padding:10px 12px}.unit-complete-actions{gap:10px;margin-top:6px;display:flex}.lesson-list-button{width:100%;font:inherit;color:inherit;text-align:left;cursor:pointer;background:0 0;border:0;align-items:center;gap:10px;padding:0;display:flex}.lesson-list-button:disabled{cursor:default}.lesson-list li.done .lesson-list-button:hover .lesson-list-title,.lesson-list li.current .lesson-list-button:hover .lesson-list-title{text-decoration:underline}.add-choice{flex-direction:column;align-items:center;gap:28px;display:flex}.add-choice-cards{grid-template-columns:repeat(2,minmax(0,300px));gap:18px;display:grid}.add-choice-card{text-align:left;flex-direction:column;gap:10px;display:flex}.add-choice-card svg{color:var(--brand)}.add-choice-card strong{font-family:var(--font-display);font-size:20px}.add-choice-card span{color:var(--text-secondary);font-size:14px;line-height:1.5}.activate-form{flex-direction:column;gap:14px;display:flex}.activate-form .gl-input{font-family:var(--font-mono);letter-spacing:.04em}.test-codes{border-radius:var(--r-md);border:1.5px dashed var(--border-strong);background:var(--sand-50);flex-direction:column;gap:6px;padding:10px 12px;display:flex}.test-codes div{flex-wrap:wrap;gap:12px;display:flex}.test-codes .text-button{font-family:var(--font-mono)}.guardian-sees{flex-direction:column;gap:10px;display:flex}.dialog-subhead{color:var(--text-primary);margin-bottom:8px;font-size:17px}.locked-lesson{border-color:var(--border)}.control-row.current{background:var(--surface-card);border-color:var(--green-200);box-shadow:var(--shadow-sm);padding:18px 20px}.control-row.compact{align-items:center;padding:10px 16px}.control-row.compact .control-instruction{color:var(--green-700);margin:0;font-size:15px}.control-row.current .control-instruction{font-size:18px}.control-body .eyebrow{margin-top:4px}.controls-target{width:96px;height:96px}.controls-dot{width:30px;height:30px}.controls-scroll{height:150px;font-size:16px;position:relative}.control-hint{border-radius:var(--r-md);background:var(--orange-50);border:1.5px solid var(--orange-100);color:var(--ink-800);flex-wrap:wrap;align-items:center;gap:8px 10px;padding:10px 14px;font-size:15px;display:flex}.control-hint>svg{color:var(--orange-600)}.control-hint span{flex:260px}.control-finished{border-radius:var(--r-lg);background:var(--green-50);color:var(--green-700);padding:12px 16px;font-size:16px}:root{--read-zoom:1}@media (width>=1300px){:root{--read-zoom:1.12}}@media (width>=1500px){:root{--read-zoom:1.22}}@media (width>=1750px){:root{--read-zoom:1.32}}.reading-mode .lesson-body,.unit-complete-inner{zoom:var(--read-zoom)}code,pre,kbd,.code-input,.code-highlight,.code-block,.option-code{font-variant-ligatures:none;font-feature-settings:"liga" 0, "calt" 0}.recovery-page{padding:32px}.recovery-layout{grid-template-columns:minmax(260px,1fr) minmax(360px,2fr);gap:24px;margin-top:24px;display:grid}.recovery-list{padding:0;list-style:none}.recovery-choice{text-align:left;border:1px solid var(--color-border,#ccc);cursor:pointer;background:0 0;border-radius:8px;flex-direction:column;gap:4px;width:100%;padding:12px;display:flex}.recovery-choice.selected{outline:2px solid #3156a8}.recovery-content{white-space:pre-wrap;overflow-wrap:anywhere;background:#f6f1e8;border-radius:8px;max-height:220px;padding:12px;overflow:auto}.recovery-confirm{margin:20px 0;display:block}@media (width<=800px){.recovery-layout{grid-template-columns:1fr}}.publication-ready{flex-direction:column;gap:.75rem;display:flex}.publication-ready h3,.publication-ready p{margin:0}.lesson-list-time{color:var(--text-muted);flex:none;font-size:12px;font-weight:400}.lesson-time{color:var(--text-muted);align-items:center;gap:5px;font-size:13px;display:inline-flex}.terms-gate{gap:16px;max-width:720px}.terms-gate .profile-title{margin-top:16px}.terms-summary{background:var(--surface-tint);font-weight:var(--fw-semibold);border-radius:14px;align-self:stretch;gap:8px;margin:0;padding:16px 20px 16px 36px;line-height:1.45;display:grid}.terms-scroll{background:var(--surface-card);border:1px solid var(--border);max-height:300px;color:var(--text-secondary);font-size:var(--fs-body-sm);border-radius:14px;align-self:stretch;padding:18px 22px;line-height:1.55;overflow-y:auto}.terms-scroll h2{font-size:var(--fs-h4);color:var(--text-primary)}.terms-scroll h3{font-size:var(--fs-body);color:var(--text-primary);margin:18px 0 6px}.terms-scroll p,.terms-scroll ul{margin:0 0 8px}.terms-scroll ul{padding-left:20px}.terms-effective,.terms-decline{color:var(--text-muted);font-size:var(--fs-body-sm)}.terms-agree{font-weight:var(--fw-semibold);align-self:stretch;align-items:flex-start;gap:12px;line-height:1.45;display:flex}.terms-agree input{width:20px;height:20px;accent-color:var(--green-600);flex:none;margin-top:1px}.terms-error{color:var(--danger-hover)}
