@font-face{font-family:JetBrains Mono;src:url(/fonts/JetBrainsMono-Regular.woff2) format("woff2");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:JetBrains Mono;src:url(/fonts/JetBrainsMono-Bold.woff2) format("woff2");font-weight:700;font-style:normal;font-display:swap}@font-face{font-family:JetBrains Mono;src:url(/fonts/JetBrainsMono-Italic.woff2) format("woff2");font-weight:400;font-style:italic;font-display:swap}:root{--font-mono: "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;--toolbar-h: 32px;--bg-0: #0e0e10;--bg-1: #16161a;--bg-2: #1c1c22;--fg-0: #d7d7db;--fg-1: #8a8a90;--fg-2: #5a5a60;--accent: #7dd3fc;--accent-strong: #38bdf8;--warn: #fbbf24;--err: #f87171;--ok: #86efac;--shadow: 0 8px 24px rgba(0, 0, 0, .5)}:root[data-theme=dark]{--bg-0: #0e0e10;--bg-1: #16161a;--bg-2: #1c1c22;--fg-0: #d7d7db;--fg-1: #8a8a90;--fg-2: #5a5a60;--accent: #7dd3fc;--accent-strong: #38bdf8;--warn: #fbbf24;--err: #f87171;--ok: #86efac;--shadow: 0 8px 24px rgba(0, 0, 0, .5)}:root[data-theme=light]{--bg-0: #fafafa;--bg-1: #f0f0f3;--bg-2: #e2e2e8;--fg-0: #1a1a1f;--fg-1: #5a5a62;--fg-2: #9094a0;--accent: #0284c7;--accent-strong: #0369a1;--warn: #b45309;--err: #b91c1c;--ok: #15803d;--shadow: 0 8px 24px rgba(20, 30, 50, .1)}html,body,#app{height:100%;margin:0;padding:0;background:var(--bg-0);color:var(--fg-0);font-family:var(--font-mono);font-size:13px}#app{display:grid;grid-template-columns:minmax(300px,var(--sidebar-w, 300px)) 4px 1fr;grid-template-rows:var(--toolbar-h) 1fr 24px;grid-template-areas:"toolbar toolbar toolbar" "sidebar handle  editor" "status  status  status";height:100%}#app[data-mode=tutorial] #file-tree{display:none}#toolbar{grid-area:toolbar;display:flex;align-items:stretch;gap:0;padding:0;background:var(--bg-1);border-bottom:1px solid var(--bg-2)}#toolbar .toolbar-spacer{flex:1}.btn{background:var(--bg-2);color:var(--fg-0);border:1px solid var(--fg-2);border-radius:0;display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:3px 10px;font-family:var(--font-mono);font-size:11px;line-height:1;letter-spacing:.02em;cursor:pointer;transition:color .12s,border-color .12s,background .12s}.btn:hover{border-color:var(--accent);color:var(--accent)}.btn:disabled{opacity:.5;cursor:default}.btn:focus-visible{outline:2px solid var(--accent);outline-offset:-1px}.btn-primary{background:var(--accent);border-color:var(--accent-strong);color:var(--bg-0)}.btn-primary:hover{background:var(--accent-strong);color:var(--bg-0)}.btn-icon{min-width:28px}.btn svg{width:16px;height:16px;flex:0 0 16px;display:block}.btn-label{line-height:1}#toolbar .btn{border:none;border-right:1px solid var(--bg-2);padding-top:0;padding-bottom:0}.account-widget summary{border:none}#toolbar>.btn:last-child,.account-host .btn{border-right:none}#toolbar .btn:hover,.account-widget summary:hover{background:var(--bg-0);color:var(--accent)}#toolbar .btn:disabled:hover{background:var(--bg-2);color:var(--fg-0)}#toolbar .btn.btn-primary:hover{background:var(--accent-strong);color:var(--bg-0)}#sidebar{grid-area:sidebar;background:var(--bg-1);border-right:1px solid var(--bg-2);overflow-y:auto;min-width:0}#resize-handle{grid-area:handle;background:var(--bg-2);cursor:col-resize;transition:background .12s}#resize-handle:hover,#resize-handle:active{background:var(--accent)}#sidebar-header{display:flex;align-items:center;gap:8px;padding:10px 12px 8px;border-bottom:1px solid var(--bg-2)}.sb-mark{display:block;width:22px;height:22px;flex-shrink:0}.sb-title{color:var(--accent);font-weight:700;letter-spacing:.15em;text-transform:lowercase;font-size:13px}#editor-pane{grid-area:editor;overflow:hidden;display:flex;flex-direction:column;min-height:0}#tab-bar{flex:0 0 28px;display:flex;align-items:stretch;background:var(--bg-1);border-bottom:1px solid var(--bg-2);overflow-x:auto;scrollbar-width:thin}.tab{display:flex;align-items:center;gap:6px;padding:0 6px 0 12px;border-right:1px solid var(--bg-2);font-size:11px;color:var(--fg-1);cursor:pointer;white-space:nowrap;user-select:none;position:relative;min-width:0}.tab:hover{background:var(--bg-2);color:var(--fg-0)}.tab:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.tab-active{background:var(--bg-0);color:var(--accent);box-shadow:inset 0 -2px 0 var(--accent)}.tab-active:hover{background:var(--bg-0);color:var(--accent)}.tab-title{overflow:hidden;text-overflow:ellipsis;max-width:220px}.tab-dirty{width:6px;height:6px;background:currentColor;display:inline-block;flex:0 0 6px}.tab-close{width:16px;height:16px;display:inline-flex;align-items:center;justify-content:center;font-size:14px;line-height:1;opacity:0;transition:opacity 80ms,background 80ms}.tab:hover .tab-close,.tab-active .tab-close{opacity:.6}.tab-close:hover{opacity:1;background:var(--bg-2)}.tab-active .tab-close:hover{background:var(--bg-1)}#editor-host{flex:1;min-height:0;display:flex;flex-direction:column}#editor-host .cm-editor{flex:1;height:100%;min-height:0;font-family:var(--font-mono);font-size:13px}#editor-host .cm-scroller{overflow:auto}#output-divider{flex:0 0 4px;background:var(--bg-2);cursor:row-resize;transition:background .12s}#output-divider:hover,#output-divider:active{background:var(--accent)}#output-host{flex:0 0 var(--output-h, 220px);overflow:auto;background:var(--bg-1);padding:6px 10px;font-size:12px;border-top:1px solid var(--bg-2)}#lessons-rail{padding:12px 16px}.rail-header{margin-bottom:12px;padding-bottom:8px;border-bottom:1px solid var(--bg-2)}.rail-title{color:var(--accent);letter-spacing:.15em;text-transform:lowercase;font-weight:700;font-size:12px}.rail-slice{margin-bottom:16px}.rail-slice-title{color:var(--fg-1);font-size:10px;font-weight:700;letter-spacing:.15em;text-transform:uppercase;margin:6px 0 4px}.rail-list{list-style:none;margin:0;padding:0}.rail-item{display:flex;align-items:center;gap:8px;padding:4px 8px;cursor:pointer;font-size:12px;user-select:none}.rail-item:hover{background:var(--bg-2)}.rail-item:focus-visible{outline:2px solid var(--accent);outline-offset:-1px}.rail-item-active{background:var(--bg-2);color:var(--accent);border-left:2px solid var(--accent);padding-left:6px}.rail-dot{width:1ch;font-size:10px}.rail-dot-untouched{color:var(--fg-2)}.rail-dot-attempted{color:var(--warn)}.rail-dot-passed{color:var(--ok)}.rail-label{flex:1}#app[data-mode=tutorial] #sidebar{display:flex;flex-direction:column;overflow:hidden}#app[data-mode=tutorial] #lessons-rail{display:flex;flex-direction:column;flex:1 1 0;min-height:0;overflow:hidden}#app[data-mode=tutorial] .rail-header{flex:0 0 auto}#app[data-mode=tutorial] .rail-nav{flex:0 1 auto;max-height:45%;overflow-y:auto;border-bottom:1px solid var(--bg-2);padding-bottom:8px;margin-bottom:12px}#app[data-mode=tutorial] .rail-nav .rail-slice:last-child{margin-bottom:0}#app[data-mode=tutorial] .lesson-panel{flex:1 1 0;min-height:0;display:flex;flex-direction:column}#app[data-mode=tutorial] .lesson-title{flex:0 0 auto}#app[data-mode=tutorial] .lesson-body{flex:1 1 0;min-height:0;overflow-y:auto}#app[data-mode=tutorial] .lesson-actions{flex:0 0 auto}.lesson-title{color:var(--accent);font-size:14px;font-weight:700;margin:0 0 10px;letter-spacing:.02em}.lesson-body{font-size:12px;line-height:1.55;color:var(--fg-0)}.lesson-body h1,.lesson-body h2,.lesson-body h3{color:var(--fg-0);margin:14px 0 6px;font-weight:700}.lesson-body h1{font-size:13px}.lesson-body h2{font-size:12px}.lesson-body h3{font-size:11px;color:var(--fg-1);text-transform:uppercase;letter-spacing:.1em}.lesson-body p{margin:6px 0}.lesson-body code{background:var(--bg-2);padding:1px 5px;font-size:11px;color:var(--accent)}.lesson-body pre{background:var(--bg-2);border-left:3px solid var(--accent);padding:8px 12px;margin:10px 0;overflow-x:auto;font-size:11px}.lesson-body pre code{background:transparent;color:var(--fg-0);padding:0;font-size:11px}.lesson-actions{display:flex;flex-wrap:nowrap;gap:0;margin-top:12px}.lesson-error{color:var(--err)}.out-log,.out-note,.out-warn,.out-err{margin:0;padding:1px 0;white-space:pre-wrap;font-family:var(--font-mono);font-size:12px}.out-log{color:var(--fg-0)}.out-note{color:var(--fg-1)}.out-warn{color:var(--warn)}.out-err{color:var(--err)}.out-table{border-collapse:collapse;margin:4px 0 10px;font-size:12px}.out-table th,.out-table td{padding:2px 10px 2px 0;text-align:left;white-space:nowrap;border-bottom:1px solid var(--bg-2)}.out-table th{color:var(--fg-1);font-weight:400;text-transform:lowercase;letter-spacing:.05em}.out-table td{color:var(--fg-0)}#status-bar{grid-area:status;background:var(--bg-1);color:var(--fg-1);border-top:1px solid var(--bg-2);padding:0 12px;display:flex;align-items:center;gap:12px;font-size:11px;letter-spacing:.05em}#status-crumbs{flex:1;color:var(--fg-0);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}#status-counts{color:var(--fg-1)}#status-version{margin-left:auto;color:var(--fg-2);white-space:nowrap}.tree-header{padding:6px 12px;color:var(--fg-1);font-size:10px;text-transform:lowercase;letter-spacing:.1em;border-bottom:1px solid var(--bg-2)}.tree-root,.tree-subtree{list-style:none;margin:0;padding:0}.tree-root li,.tree-subtree li{display:flex;gap:4px;padding:2px 8px;cursor:pointer;white-space:nowrap;font-size:12px;user-select:none}.tree-root li:hover,.tree-subtree li:hover{background:var(--bg-2)}.tree-root li:focus-visible,.tree-subtree li:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.tree-dir .tree-label{color:var(--fg-0)}.tree-file .tree-label{color:var(--fg-1)}.tree-file.active{background:var(--bg-2);border-left:2px solid var(--accent);padding-left:6px}.tree-file.active .tree-label{color:var(--accent)}.chev{color:var(--fg-2);width:1ch;display:inline-block}.batch-overlay{position:fixed;inset:0;background:#000000b3;display:flex;align-items:stretch;justify-content:stretch;z-index:100}.batch-panel{flex:1;margin:48px;background:var(--bg-1);border:1px solid var(--fg-2);display:flex;flex-direction:column;overflow:hidden;font-size:12px;box-shadow:var(--shadow)}.batch-header{display:flex;justify-content:space-between;padding:10px 16px;border-bottom:1px solid var(--bg-2)}.batch-title{color:var(--accent);letter-spacing:.1em;text-transform:lowercase}.batch-close{background:transparent;border:none;color:var(--fg-1);cursor:pointer;font-size:14px}.batch-close:hover{color:var(--err)}.batch-status{padding:8px 16px;color:var(--fg-1);border-bottom:1px solid var(--bg-2)}.batch-controls{display:flex;gap:8px;padding:8px 16px;border-bottom:1px solid var(--bg-2)}.batch-filter{flex:1;background:var(--bg-0);border:1px solid var(--fg-2);color:var(--fg-0);padding:4px 8px;font-family:var(--font-mono);font-size:12px}.batch-filter:focus{outline:none;border-color:var(--accent)}.batch-export{background:var(--bg-0);border:1px solid var(--fg-2);color:var(--fg-0);padding:4px 12px;font-family:var(--font-mono);font-size:11px;cursor:pointer}.batch-export:hover{border-color:var(--accent);color:var(--accent)}.batch-table{flex:1;overflow:auto;width:100%;border-collapse:collapse;display:block}.batch-table thead{position:sticky;top:0;background:var(--bg-2)}.batch-table th,.batch-table td{padding:4px 12px;text-align:left;white-space:nowrap}.batch-table th{cursor:pointer;user-select:none;color:var(--fg-1);font-weight:400;letter-spacing:.05em;text-transform:lowercase}.batch-table th:hover{color:var(--accent)}.batch-table th[data-dir=asc]:after{content:" ↑";color:var(--accent)}.batch-table th[data-dir=desc]:after{content:" ↓";color:var(--accent)}.col-n{text-align:right;width:80px}.col-path{min-width:300px}.col-first{color:var(--warn);font-style:italic}.batch-table tbody tr{cursor:pointer;border-bottom:1px solid var(--bg-2)}.batch-table tbody tr:hover{background:var(--bg-2)}.batch-table tbody tr.row-ok .col-n:last-of-type{color:var(--ok)}.batch-table tbody tr.row-warn .col-n:last-of-type{color:var(--warn)}.batch-table tbody tr.row-err{color:var(--err)}.batch-proc-summary{margin:0 0 8px}.batch-proc-summary summary{cursor:pointer;color:var(--fg-1);letter-spacing:.08em;text-transform:lowercase;margin-bottom:4px}.batch-proc-summary table{max-height:28vh}.batch-proc-summary td:not(:first-child),.batch-proc-summary th:not(:first-child){text-align:right;width:80px}.batch-proc-summary tr.tier-paid td:nth-child(2){color:var(--warn)}.batch-proc-summary tr.proc-selected{background:var(--bg-2);outline:1px solid var(--accent)}dialog#cmd-palette{border:1px solid var(--fg-2);background:var(--bg-1);color:var(--fg-0);padding:0;width:min(520px,90vw);max-height:60vh;box-shadow:var(--shadow);font-family:var(--font-mono);margin:15vh auto auto}dialog#cmd-palette::backdrop{background:#00000073}.palette-input{width:100%;box-sizing:border-box;background:transparent;border:none;border-bottom:1px solid var(--bg-2);color:var(--fg-0);padding:10px 14px;font-family:var(--font-mono);font-size:13px;outline:none}.palette-input::placeholder{color:var(--fg-1)}.palette-list{list-style:none;margin:0;padding:4px 0;max-height:50vh;overflow-y:auto}.palette-list li{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:6px 14px;cursor:pointer;font-size:12px}.palette-list li[data-active=true],.palette-list li:hover{background:var(--bg-2);color:var(--accent)}.palette-list .palette-label{flex:1}.palette-list kbd{font-family:var(--font-mono);font-size:10px;color:var(--fg-1);background:var(--bg-2);border:1px solid var(--fg-2);padding:1px 5px}.palette-list .palette-empty{color:var(--fg-1);font-style:italic;cursor:default}.palette-list .palette-empty:hover{background:transparent;color:var(--fg-1)}dialog#login-modal{border:1px solid var(--fg-2);background:var(--bg-1);color:var(--fg-0);padding:20px 22px 18px;width:min(360px,92vw);box-shadow:var(--shadow);font-family:var(--font-mono);margin:auto;position:relative}dialog#login-modal::backdrop{background:#00000073}.login-title{color:var(--accent);letter-spacing:.12em;text-transform:lowercase;font-weight:700;font-size:12px;margin-bottom:14px}.login-context{color:var(--fg-1);font-size:12px;line-height:1.4;margin-bottom:2px}.login-close{position:absolute;top:6px;right:8px;background:transparent;border:none;color:var(--fg-1);font-size:18px;line-height:1;cursor:pointer;padding:4px 6px}.login-close:hover{color:var(--err)}.login-intro{display:flex;flex-direction:column;gap:10px}.login-google,.login-microsoft{width:100%;padding:6px 10px}.login-divider{text-align:center;color:var(--fg-2);font-size:10px;text-transform:uppercase;letter-spacing:.15em;margin:2px 0}.login-link-form{display:flex;flex-direction:column;gap:6px}.login-label{font-size:10px;color:var(--fg-1);text-transform:lowercase;letter-spacing:.1em}.login-input{background:var(--bg-0);border:1px solid var(--fg-2);color:var(--fg-0);padding:6px 8px;font-family:var(--font-mono);font-size:12px}.login-input:focus{outline:none;border-color:var(--accent)}.login-magic{width:100%;padding:6px 10px}.login-error{color:var(--err);font-size:11px;padding:4px 0}.login-fineprint{color:var(--fg-2);font-size:10px;margin-top:4px;text-align:center}.login-sent{padding:8px 0 4px}.login-sent-title{color:var(--ok);font-weight:700;font-size:13px;margin-bottom:6px}.login-sent-body{color:var(--fg-0);font-size:12px;line-height:1.5}dialog#name-modal{border:1px solid var(--fg-2);background:var(--bg-1);color:var(--fg-0);padding:18px 20px 16px;width:min(340px,92vw);box-shadow:var(--shadow);font-family:var(--font-mono);margin:auto;position:relative}dialog#name-modal::backdrop{background:#00000073}.name-title{color:var(--accent);letter-spacing:.12em;text-transform:lowercase;font-weight:700;font-size:12px;margin-bottom:12px}.name-form{display:flex;flex-direction:column;gap:10px}.name-input{background:var(--bg-0);border:1px solid var(--fg-2);color:var(--fg-0);padding:6px 8px;font-family:var(--font-mono);font-size:12px}.name-input:focus{outline:none;border-color:var(--accent)}.name-error{color:var(--err);font-size:11px}.name-actions{display:flex;gap:8px;justify-content:flex-end}.name-close{position:absolute;top:6px;right:8px;background:transparent;border:none;color:var(--fg-1);font-size:18px;line-height:1;cursor:pointer;padding:4px 6px}.name-close:hover{color:var(--err)}#toast-region{position:fixed;right:16px;bottom:16px;z-index:90;display:flex;flex-direction:column;gap:8px}.toast{background:var(--bg-1);border:1px solid var(--fg-2);box-shadow:var(--shadow);padding:10px 12px;max-width:320px;font-size:12px;color:var(--fg-0);font-family:var(--font-mono)}.toast-message{line-height:1.5}.toast-actions{display:flex;gap:8px;justify-content:flex-end;margin-top:10px}.account-host{display:inline-flex;align-items:stretch}.account-host .btn{padding-top:0;padding-bottom:0}.account-widget{position:relative;display:inline-flex;align-items:stretch}.account-widget summary{list-style:none;cursor:pointer;display:inline-flex;align-items:center;box-sizing:border-box;padding:0 10px;font-size:11px;color:var(--fg-1);background:var(--bg-2)}.account-widget summary::-webkit-details-marker{display:none}.account-widget summary:focus-visible{outline:2px solid var(--accent);outline-offset:-1px}.account-widget[open] summary{color:var(--accent);background:var(--bg-0)}.account-menu{position:absolute;top:100%;right:0;min-width:200px;background:var(--bg-1);border:1px solid var(--fg-2);box-shadow:var(--shadow);z-index:50;padding:6px 0;font-size:11px}.account-menu-email{padding:4px 12px;color:var(--fg-1);border-bottom:1px solid var(--bg-2);margin-bottom:4px;word-break:break-all}.account-menu-action{display:block;width:100%;background:transparent;border:none;color:var(--fg-0);font-family:var(--font-mono);font-size:11px;text-align:left;padding:5px 12px;cursor:pointer}.account-menu-action:hover{background:var(--bg-2);color:var(--accent)}*{scrollbar-width:thin;scrollbar-color:var(--bg-2) transparent}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:var(--bg-2);border:2px solid transparent;background-clip:padding-box}::-webkit-scrollbar-thumb:hover{background:var(--fg-2);background-clip:padding-box;border:2px solid transparent}::-webkit-scrollbar-corner{background:transparent}@media (prefers-reduced-motion: reduce){*{transition:none!important;animation:none!important}}
