:root{--bg: #f4f2ee;--surface: #fffefc;--surface-2: #f7f4ef;--line: #e4dfd6;--line-strong: #cfc8bb;--ink: #1b1917;--ink-2: #4c4740;--ink-3: #857c70;--accent: #cf4f26;--accent-soft: #fbeee8;--ok: #2c6b41;--ok-line: #c2dcca;--warn: #86610c;--warn-line: #e8d5a4;--bad: #a63127;--bad-line: #eecac6;--term-bg: #191714;--term-text: #e8e4dd;--term-dim: #918a7e;--term-green: #9fd67f;--term-red: #ff9c85;--r: 4px;--mono: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace;--sans: system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, sans-serif}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--ink);font:15px/1.55 var(--sans);-webkit-font-smoothing:antialiased}h1,h2,h3{margin:0;font-weight:600}:focus-visible{outline:2px solid var(--accent);outline-offset:1px;border-radius:2px}button{font-family:var(--mono);font-size:12px;padding:6px 11px;border:1px solid var(--line-strong);border-radius:var(--r);background:var(--surface);color:var(--ink-2);cursor:pointer;white-space:nowrap;transition:border-color .12s,color .12s,background .12s}button:hover:not(:disabled){border-color:var(--ink-2);color:var(--ink)}button:disabled{opacity:.35;cursor:default}button.primary{background:var(--ink);border-color:var(--ink);color:#fff}button.primary:hover{background:var(--accent);border-color:var(--accent);color:#fff}button.block{display:block;width:100%}button.ghost{background:none;border-color:var(--line);color:var(--ink-3)}button.ghost:hover{border-color:var(--line-strong);color:var(--ink-2)}button.tiny{padding:2px 7px;font-size:11px}input,textarea{font-family:var(--mono);font-size:12.5px;padding:6px 8px;border:1px solid var(--line-strong);border-radius:var(--r);background:var(--surface);color:var(--ink)}input:focus,textarea:focus{outline:none;border-color:var(--accent)}code{font-family:var(--mono);font-size:.86em;background:var(--surface-2);border-radius:3px;padding:1px 4px;white-space:nowrap;color:var(--ink)}.app{display:grid;grid-template-rows:auto minmax(0,1fr);height:100vh}.header{display:flex;flex-wrap:wrap;gap:16px;align-items:center;justify-content:space-between;padding:12px 18px;border-bottom:1px solid var(--line)}.brand{display:flex;gap:10px;align-items:center}.brand-mark{flex:none;color:var(--accent)}.header h1{font-family:var(--mono);font-size:14px;font-weight:500;letter-spacing:-.01em}.header p{margin:2px 0 0;color:var(--ink-3);font-size:12px}.header-actions{display:flex;gap:18px;align-items:center}.progress{display:flex;gap:10px;align-items:center;font-family:var(--mono);font-size:11px;color:var(--ink-3)}.progress-ticks{display:flex;gap:3px;align-items:flex-end}.tick{width:4px;height:11px;border-radius:1px;background:var(--line)}.tick.done{background:var(--ok)}.tick.current{background:var(--accent);height:15px}.workspace{display:grid;grid-template-columns:clamp(264px,21vw,330px) minmax(0,1fr) clamp(372px,28vw,440px);gap:14px;padding:14px 18px 18px;overflow:hidden}.rail{display:flex;flex-direction:column;gap:14px;overflow-y:auto;min-height:0}.rail .panel{flex:0 0 auto;overflow:visible}.panel{background:var(--surface);border:1px solid var(--line);border-radius:var(--r);padding:0 14px 14px;overflow:auto}.panel-title{display:flex;align-items:center;justify-content:space-between;gap:10px;margin:0 -14px 14px;padding:9px 14px;border-bottom:1px solid var(--line);font-family:var(--mono);font-size:10.5px;font-weight:500;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-3)}.empty,.legend{color:var(--ink-3);font-size:13px}.files-panel .legend{font-size:11.5px;line-height:1.45;margin-bottom:0}.warning{color:var(--warn);font-size:12.5px}.lesson-panel{display:flex;flex-direction:column;padding-top:14px}.lesson-panel>*{flex-shrink:0}.lesson-panel code{white-space:pre-wrap;overflow-wrap:break-word}.lesson-list{margin-bottom:18px;font-size:13px}.lesson-list summary{cursor:pointer;color:var(--ink-2);font-family:var(--mono);font-size:11.5px;letter-spacing:.04em;list-style:none}.lesson-list summary::-webkit-details-marker{display:none}.lesson-list summary:before{content:"+";display:inline-block;width:12px;color:var(--ink-3)}.lesson-list[open] summary:before{content:"−"}.lesson-list summary:hover{color:var(--accent)}.lesson-list ol{list-style:none;margin:8px 0 0;padding:0;max-height:264px;overflow:auto;border-left:1px solid var(--line)}.lesson-link{display:flex;gap:10px;align-items:baseline;width:100%;text-align:left;border:none;border-left:2px solid transparent;border-radius:0;background:none;padding:4px 8px;margin-left:-1px;font-family:var(--sans);font-size:13px;color:var(--ink-2);white-space:normal}.lesson-link:hover{background:var(--surface-2);border-left-color:var(--line-strong);color:var(--ink)}.lesson-link.current{border-left-color:var(--accent);color:var(--ink);font-weight:550}.lesson-number{font-family:var(--mono);font-size:11px;color:var(--ink-3);font-variant-numeric:tabular-nums;min-width:15px}.check{margin-left:auto;color:var(--ok);font-size:12px}.lesson-counter{margin:0;font-family:var(--mono);font-size:10.5px;font-weight:500;letter-spacing:.14em;text-transform:uppercase;color:var(--accent)}.lesson-title{font-size:21px;line-height:1.2;letter-spacing:-.022em;margin:7px 0 12px}.lesson-intro{margin:0 0 11px;color:var(--ink-2);font-size:14.5px;line-height:1.62;max-width:62ch}.lesson-goal{margin-top:18px;padding-left:13px;border-left:2px solid var(--accent)}.lesson-goal h3{font-family:var(--mono);font-size:10.5px;font-weight:500;text-transform:uppercase;letter-spacing:.14em;color:var(--accent);margin-bottom:4px}.lesson-goal p{margin:0;font-size:14.5px;line-height:1.55}.lesson-note{margin-top:16px;padding-left:13px;border-left:2px solid var(--warn-line);font-size:13px;color:var(--ink-2)}.lesson-note h3{font-family:var(--mono);font-size:10.5px;font-weight:500;text-transform:uppercase;letter-spacing:.14em;color:var(--warn);margin-bottom:3px}.lesson-note p{margin:0}.lesson-hints{margin-top:18px}.hint{padding:0 0 9px 13px;margin-bottom:9px;border-left:2px solid var(--line-strong);font-size:14px;color:var(--ink-2)}.hint p{margin:0}.hint p+p{margin-top:7px}.commands{margin:8px 0 0;padding:8px 10px;background:var(--surface-2);border:1px solid var(--line);border-radius:3px;overflow-x:auto}.commands code{display:block;background:none;border:none;border-radius:0;padding:0 0 0 1.4em;text-indent:-1.4em;white-space:pre-wrap;font-size:11px;line-height:1.7;color:var(--ink)}.commands+p{margin-top:8px}.hint-title{display:block;font-family:var(--mono);font-size:10px;font-weight:500;text-transform:uppercase;letter-spacing:.14em;color:var(--ink-3);margin-bottom:3px}.hint.solution{border-left-color:var(--accent)}.hint.solution .hint-title{color:var(--accent)}button.solution{border-color:var(--accent);color:var(--accent)}button.solution:hover:not(:disabled){background:var(--accent-soft);border-color:var(--accent);color:var(--accent)}.lesson-nav{position:sticky;bottom:-14px;display:grid;gap:7px;margin:auto -14px -14px;padding:12px 14px 14px;background:var(--surface);border-top:1px solid var(--line)}.lesson-nav.solved{border-top-color:var(--ok-line)}.lesson-solved{display:flex;flex-direction:column;gap:5px;margin:-12px -14px 12px;padding:12px 14px;background:var(--ok-soft);border-bottom:1px solid var(--ok-line);animation:solved-in .24s ease-out}@keyframes solved-in{0%{opacity:0;transform:translateY(5px)}}@media (prefers-reduced-motion: reduce){.lesson-solved{animation:none}}.lesson-solved h3{display:flex;gap:9px;align-items:center;color:var(--ok);font-family:var(--mono);font-size:13px;font-weight:600;letter-spacing:.01em}.lesson-solved h3:before{content:"✓";flex:none;display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;border-radius:50%;background:var(--ok);color:#fff;font-size:10.5px}.lesson-solved p{margin:0;font-size:12.5px;line-height:1.5;color:var(--ink-2)}.lesson-steps{display:grid;grid-template-columns:1fr 1fr;gap:7px}.lesson-steps button{text-align:center}button.reset{margin-top:9px;font-size:11.5px}.graph-columns{display:flex;flex-direction:column;gap:18px;overflow-x:auto;padding-bottom:2px}.graph-column{flex:0 0 auto;min-width:min-content}.graph-column+.graph-column{border-top:1px solid var(--line);padding-top:16px}.graph-label{font-family:var(--mono);font-size:11.5px;font-weight:500;color:var(--ink-2);margin-bottom:10px}.graph-scroll{overflow:visible}.edge{fill:none;stroke:var(--line-strong);stroke-width:1.75}.node{fill:var(--surface);stroke:var(--ink-2);stroke-width:1.75}.node-merge{fill:var(--accent-soft);stroke:var(--accent)}.node-text{font-family:var(--mono);font-size:11px;font-weight:500;fill:var(--ink)}.node-message{font-family:var(--sans);font-size:11.5px;fill:var(--ink-3)}.ref{fill:var(--surface);stroke:var(--line-strong)}.ref-head{fill:var(--ink);stroke:var(--ink)}.ref-remote{fill:var(--surface);stroke:var(--warn-line)}.ref-text{font-family:var(--mono);font-size:10.5px;fill:var(--ink-2)}.ref-text-head{fill:#fff}.ref-text-remote{fill:var(--warn)}.terminal-panel{display:flex;flex-direction:column;overflow:hidden;background:none;border:none;border-radius:0;padding:0}.terminal-panel .panel-title{margin:0 0 10px;padding:0 2px 9px}.terminal-meta{display:flex;gap:12px;align-items:center;text-transform:none;letter-spacing:.02em}.terminal-where b{font-weight:500;color:var(--accent)}.terminal{flex:1;overflow:auto;background:var(--term-bg);color:var(--term-text);border-radius:var(--r);padding:13px 15px;font-family:var(--mono);font-size:12.5px;line-height:1.55;cursor:text}.terminal-welcome{color:var(--term-dim);margin-bottom:11px;padding-bottom:11px;border-bottom:1px solid rgba(255,255,255,.07)}.terminal-welcome p{margin:0}.terminal-welcome code{background:#ffffff17;color:var(--term-text)}.terminal-line{margin:0;white-space:pre-wrap;word-break:break-word;font-size:12.5px;line-height:1.55}.terminal-command{color:var(--term-green);margin-top:9px}.terminal-error,.ansi-red{color:var(--term-red)}.ansi-green{color:var(--term-green)}.ansi-yellow{color:#e3b552}.ansi-blue{color:#8ab8ea}.ansi-magenta{color:#cfa2e2}.ansi-cyan{color:#6ccac2}.ansi-bold{font-weight:700}.terminal-input{display:flex;gap:9px;align-items:center;margin-top:9px}.prompt{color:var(--term-green)}.terminal-input input{flex:1;border:none;background:none;color:var(--term-text);font-family:var(--mono);font-size:12.5px;padding:0}.terminal-input input:focus{outline:none;border:none}.terminal-input input::placeholder{color:#6b655b}.hint-card{margin:10px 0 12px;padding:2px 0 2px 12px;border-left:2px solid var(--accent);color:#e6ded3;font-family:var(--sans);font-size:13.5px;line-height:1.5}.hint-error{border-left-color:var(--term-red)}.hint-error .hint-card-title{color:var(--term-red)}.hint-warn{border-left-color:#e3b552}.hint-warn .hint-card-title{color:#e3b552}.hint-info{border-left-color:#8ab8ea}.hint-info .hint-card-title{color:#8ab8ea}.hint-card p{margin:0 0 4px;white-space:pre-wrap}.hint-card p:last-child{margin-bottom:0}.hint-card code{background:#ffffff1a;color:#fff}.hint-card-title{display:block;font-family:var(--mono);font-size:10px;font-weight:500;text-transform:uppercase;letter-spacing:.14em;color:#e9906d;margin-bottom:3px}.file-list{list-style:none;margin:0;padding:0}.file{padding:11px 0;border-top:1px solid var(--line)}.file-list li:first-child{border-top:none;padding-top:0}.file-head{display:flex;flex-wrap:wrap;gap:6px;align-items:center;justify-content:space-between}.file.folder .file-name{color:var(--ink-2)}.file-name{font-family:var(--mono);font-size:12.5px;color:var(--ink);word-break:break-all}.file-badges{display:flex;gap:4px;flex-wrap:wrap}.badge{font-family:var(--mono);font-size:10px;font-weight:500;letter-spacing:.06em;text-transform:uppercase;padding:2px 5px;border-radius:2px;border:1px solid var(--line);background:none;color:var(--ink-3);white-space:nowrap}.badge-staged{border-color:var(--ok-line);color:var(--ok)}.badge-modified{border-color:var(--warn-line);color:var(--warn)}.badge-untracked,.badge-deleted{border-color:var(--bad-line);color:var(--bad)}.badge-conflict{border-color:var(--bad);background:var(--bad);color:#fff}.file-preview{margin:8px 0;padding:8px 10px;background:var(--surface-2);border-radius:3px;font-family:var(--mono);font-size:11.5px;line-height:1.55;color:var(--ink-2);white-space:pre-wrap;word-break:break-word;max-height:108px;overflow:auto}.file-actions{display:flex;gap:5px;margin-top:8px}.file-editor textarea{width:100%;font-size:11.5px;line-height:1.55;margin-top:8px;resize:vertical}.file-create{display:flex;flex-wrap:wrap;gap:6px;margin:12px 0}.file-create input{flex:1;min-width:110px}.files-panel>button{margin:12px 0}.tour{position:fixed;top:0;right:0;bottom:0;left:0;z-index:50}.tour-catcher{position:absolute;top:0;right:0;bottom:0;left:0;cursor:default}.tour-veil{position:absolute;top:0;right:0;bottom:0;left:0;background:#1815128c;pointer-events:none}.tour-hole{position:fixed;border-radius:6px;box-shadow:0 0 0 9999px #1815128c;outline:2px solid var(--accent);outline-offset:-1px;pointer-events:none;transition:top .18s ease,left .18s ease,width .18s ease,height .18s ease}.tour-card{position:fixed;z-index:1;width:min(330px,calc(100vw - 28px));background:var(--surface);border:1px solid var(--line-strong);border-radius:6px;padding:15px 16px 13px;box-shadow:0 10px 30px #18151238}.tour-card:focus{outline:none}.tour-step{margin:0;font-family:var(--mono);font-size:10.5px;font-weight:500;letter-spacing:.14em;text-transform:uppercase;color:var(--accent)}.tour-title{font-size:17px;letter-spacing:-.015em;margin:6px 0 8px}.tour-body{margin:0 0 9px;font-size:13.5px;line-height:1.55;color:var(--ink-2)}.tour-actions{display:flex;flex-wrap:wrap;gap:7px;align-items:center;margin-top:13px;padding-top:12px;border-top:1px solid var(--line)}.tour-spacer{flex:1}@media (prefers-reduced-motion: reduce){.tour-hole{transition:none}}@media (max-width: 1100px){.app{height:auto}.workspace{grid-template-columns:1fr;overflow:visible}.rail,.panel{overflow:visible}.terminal{min-height:320px}}
