:root{color:#dce7df;background:#10110f;font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;font-synthesis:none;text-rendering:optimizeLegibility}*{box-sizing:border-box}html,body,#root{min-width:320px;min-height:100%;margin:0}body{min-width:320px;min-height:100vh;margin:0;overflow:hidden;background:linear-gradient(180deg,#25312a6b,#10110f00 360px),#10110f}button,input{font:inherit}button{border:0}button:focus-visible,input:focus-visible{outline:2px solid #7dd3fc;outline-offset:2px}.app-shell{display:grid;grid-template-rows:auto minmax(0,1fr) auto;width:min(1440px,100%);height:100dvh;margin:0 auto;padding:18px 24px 16px;overflow:hidden}.lesson-header{display:grid;grid-template-columns:minmax(0,1fr);gap:20px;align-items:end;padding:0 0 14px}.lesson-copy{max-width:780px}.terminal-path,.panel-kicker{margin:0 0 8px;color:#8bd89f;font-family:SFMono-Regular,Consolas,Liberation Mono,monospace;font-size:.78rem;letter-spacing:0;text-transform:uppercase}h1,h2,p{margin-top:0}h1{margin-bottom:8px;color:#f8fafc;font-size:2rem;line-height:1.1}h2{margin-bottom:10px;color:#f6f3e8;font-size:1.1rem;line-height:1.2}.lesson-copy h2{color:#fbbf24;font-size:1.35rem}.lesson-copy p:last-child{max-width:68ch;margin-bottom:0;color:#b9c8bd;line-height:1.55}.progress-label,.line-count{color:#9fb0a6;font-family:SFMono-Regular,Consolas,Liberation Mono,monospace;font-size:.78rem}.lesson-progress-rail{display:grid;gap:8px}.progress-track{display:grid;grid-template-columns:repeat(17,minmax(8px,1fr));gap:5px}.progress-step{min-width:0;height:10px;border:1px solid #334139;border-radius:999px;background:#171c19;cursor:pointer}.progress-step.is-current{border-color:#7dd3fc;background:#7dd3fc}.progress-step.is-complete{border-color:#6ee7b7;background:#2a6d4f}.progress-step:disabled{cursor:not-allowed;opacity:.42}.workbench-layout{display:grid;min-height:0;grid-template-columns:minmax(360px,.95fr) minmax(420px,1.05fr);gap:18px;align-items:stretch}.workbench-panel{min-width:0;min-height:0;overflow:hidden;border:1px solid #2d3932;border-radius:8px;background:#151814;box-shadow:0 20px 70px #00000047}.file-panel,.terminal-panel{display:grid;grid-template-rows:auto minmax(0,1fr)}.panel-bar{display:flex;min-height:72px;align-items:center;justify-content:space-between;gap:16px;border-bottom:1px solid #2d3932;padding:14px 16px;background:#191f1b}.panel-bar>div:first-child{min-width:0}.panel-bar h2,.panel-bar p{margin-bottom:0}.editor-chrome{border-bottom:1px solid #2d3932;background:#171c19}.editor-tabs{display:flex;min-height:42px;align-items:end;gap:6px;padding:8px 10px 0}.editor-tab{min-height:34px;border:1px solid #2d3932;border-bottom-color:#0d100e;border-radius:6px 6px 0 0;padding:0 14px;color:#f6f3e8;background:#0d100e;cursor:default;font-family:SFMono-Regular,Consolas,Liberation Mono,monospace;font-size:.84rem}.editor-meta{display:flex;min-height:34px;align-items:center;gap:10px;border-top:1px solid #26312c;padding:0 12px;color:#9fb0a6;font-family:SFMono-Regular,Consolas,Liberation Mono,monospace;font-size:.78rem}.editor-path{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.editor-badge{border:1px solid #334139;border-radius:999px;padding:2px 7px;color:#8bd89f;background:#101411;white-space:nowrap}.file-viewer{min-height:0;max-height:none;margin:0;overflow:auto;padding:14px 0;background:#0d100e;color:#d8e4dd;font-family:SFMono-Regular,Consolas,Liberation Mono,monospace;font-size:.92rem;line-height:1.65}.file-line{display:grid;grid-template-columns:54px minmax(max-content,1fr);min-width:max-content;padding:0 16px 0 0}.line-number{padding-right:14px;color:#66746c;text-align:right;-webkit-user-select:none;user-select:none}.line-text{white-space:pre}.terminal-panel{overflow:hidden}.terminal-panel-body{min-height:0;overflow:auto}.icon-button{display:inline-grid;width:36px;height:36px;place-items:center;border:1px solid #334139;border-radius:6px;color:#d7e2dc;background:#101411;cursor:pointer}.learn-block,.lesson-prompt{border-bottom:1px solid #26312c;padding:16px}.learn-block{display:grid;gap:12px;background:#111511}.section-heading-row{display:flex;min-width:0;align-items:center;justify-content:flex-end;gap:12px}.lesson-prompt span,.section-heading-row>span,.example-command span,.command-form label,.terminal-output-title{display:block;margin-bottom:8px;color:#7dd3fc;font-family:SFMono-Regular,Consolas,Liberation Mono,monospace;font-size:.78rem;text-transform:uppercase}.ghost-button{display:inline-flex;min-height:34px;max-width:100%;align-items:center;justify-content:center;gap:6px;border:1px solid transparent;border-radius:6px;padding:0 10px;color:#dbe7df;background:transparent;cursor:pointer;font-size:.84rem;font-weight:700;white-space:nowrap}.ghost-button:hover,.ghost-button:focus-visible{border-color:#334139;background:#18201b}.learn-content,.lab-workspace{animation:panel-enter .18s ease-out}.learn-content{display:grid;gap:12px}.lab-workspace{display:grid}.learn-block p,.lesson-prompt p{margin-bottom:0;color:#f4f6ef;line-height:1.5}.expected-output{margin-top:14px;overflow-x:auto;border:1px solid #26312c;border-radius:6px;padding:10px 12px;background:#0d100e}.expected-output span{color:#8bd89f}.expected-output-line{margin:0 0 8px;color:#dbe7df;font-family:SFMono-Regular,Consolas,Liberation Mono,monospace;font-size:.86rem;line-height:1.5;white-space:pre}.expected-output-line:last-child{margin-bottom:0}.example-command{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:10px;align-items:end}.example-command code{display:block;width:100%;overflow-x:auto;border:1px solid #334139;border-radius:6px;padding:11px 12px;color:#dbe7df;background:#0b0f0c;font-family:SFMono-Regular,Consolas,Liberation Mono,monospace;font-size:.88rem;white-space:pre}.example-output{overflow-x:auto;border:1px solid #26312c;border-radius:6px;padding:10px 12px;background:#0d100e}.learn-output{min-height:auto;border:1px solid #26312c;border-radius:6px;padding:12px}.start-lab-button{margin-top:12px}.command-form{display:grid;gap:8px;border-bottom:1px solid #26312c;padding:16px}.command-line{display:grid;grid-template-columns:auto minmax(0,1fr) auto auto;gap:8px;align-items:center;min-height:44px;border:1px solid #26312c;border-radius:6px;padding:4px 4px 4px 12px;background:#080c09;box-shadow:inset 0 0 0 1px #8bd89f0a}.command-line:focus-within{border-color:#8bd89f;box-shadow:0 0 0 3px #8bd89f1f}.prompt-symbol{color:#8bd89f;font-family:SFMono-Regular,Consolas,Liberation Mono,monospace}.command-line input{width:100%;min-width:0;min-height:34px;border:0;padding:0;color:#f8fafc;background:transparent;font-family:SFMono-Regular,Consolas,Liberation Mono,monospace;font-size:.9rem;outline:0}.terminal-cursor{width:8px;height:18px;border-radius:1px;background:#8bd89f;opacity:.24}.command-line:focus-within .terminal-cursor{animation:cursor-blink 1s steps(2,start) infinite}.primary-button,.secondary-button{display:inline-flex;min-height:42px;align-items:center;justify-content:center;gap:8px;border-radius:6px;padding:0 14px;cursor:pointer;font-size:.9rem;font-weight:700;white-space:nowrap}.primary-button{color:#07110b;background:#8bd89f}.secondary-button{border:1px solid #3b493f;color:#e7ede8;background:#1b211d}.run-command-button{display:inline-flex;min-height:34px;align-items:center;justify-content:center;gap:6px;border-radius:5px;padding:0 12px;color:#07110b;background:#8bd89f;cursor:pointer;font-size:.84rem;font-weight:800;white-space:nowrap}.primary-button:disabled,.secondary-button:disabled{cursor:not-allowed;opacity:.48}.terminal-output{min-height:190px;border-bottom:1px solid #26312c;padding:16px;overflow-x:auto;background:#0d100e}.terminal-output-line,.example-output-line,.terminal-empty{margin:0 0 8px;color:#dbe7df;font-family:SFMono-Regular,Consolas,Liberation Mono,monospace;font-size:.9rem;line-height:1.55;white-space:pre}.terminal-command-echo{margin:0 0 8px;color:#8bd89f;font-family:SFMono-Regular,Consolas,Liberation Mono,monospace;font-size:.9rem;line-height:1.55;white-space:pre}.terminal-line-appear{animation:panel-enter .16s ease-out}.terminal-empty{color:#87958d;white-space:normal}.text-highlight{border-radius:3px;padding:1px 2px;color:#05130b;background:#8bd89f}.text-highlight-group{color:#170f03;background:#fbbf24;box-shadow:inset 0 -2px #7dd3fce6}.text-highlight-line-number{color:#04131a;background:#7dd3fc}.completion-note{margin:0;border-top:1px solid #26312c;padding:14px 16px;color:#fbbf24}.terminal-buddy{--buddy-nudge-x: 0px;--buddy-nudge-y: 0px;position:fixed;right:clamp(14px,2.5vw,28px);top:clamp(28px,5vh,44px);z-index:20;display:grid;grid-template-columns:minmax(240px,330px) 68px;gap:12px;align-items:start;pointer-events:none;transform:translate(var(--buddy-nudge-x),var(--buddy-nudge-y));transition:transform .18s cubic-bezier(.2,.8,.2,1)}.terminal-buddy.is-compact{grid-template-columns:68px}.terminal-buddy.is-hopping{animation:terminal-buddy-hop .42s ease-out}.terminal-buddy.is-hint{border-color:#7dd3fc}.terminal-buddy.is-fail{border-color:#f87171}.terminal-buddy.is-success{border-color:#6ee7b7}.terminal-buddy.is-complete{border-color:#fbbf24}.terminal-buddy-avatar-button{display:grid;width:68px;min-height:68px;place-items:center;border:1px solid #334139;border-radius:999px;background:radial-gradient(circle at 50% 25%,#8bd89f2e,#0d100ef5 62%),#0b0f0c;box-shadow:0 16px 40px #00000052,inset 0 1px #8bd89f29;cursor:pointer;pointer-events:auto}.terminal-buddy-avatar{width:56px;height:56px;image-rendering:auto}.terminal-buddy.is-idle .terminal-buddy-avatar,.terminal-buddy.is-hint .terminal-buddy-avatar{animation:terminal-buddy-idle 3.2s ease-in-out infinite}.terminal-buddy-panel{grid-column:1;grid-row:1;min-width:0;border:1px solid #26312c;border-radius:6px;padding:12px;background:#0d100e;box-shadow:0 18px 48px #00000061;pointer-events:auto}.terminal-buddy-panel:after{content:"";position:absolute;right:-7px;top:26px;width:12px;height:12px;border-top:1px solid #26312c;border-right:1px solid #26312c;background:#0d100e;transform:rotate(45deg)}.terminal-buddy-progress{margin:0 0 6px;color:#7dd3fc;font-family:SFMono-Regular,Consolas,Liberation Mono,monospace;font-size:.76rem;text-transform:uppercase}.terminal-buddy-status{margin:0;color:#f4f6ef;font-size:.92rem;line-height:1.45}.terminal-buddy-hints{display:grid;gap:6px;margin:10px 0 0;border:1px solid #334139;border-radius:8px;padding:10px 12px 10px 30px;background:#101411;color:#d7e2dc;line-height:1.45}.terminal-buddy-hints:empty{display:none}.terminal-buddy-hints li{padding-left:2px}.terminal-buddy-hints li+li{margin-top:4px}.terminal-buddy-panel{position:relative}.terminal-buddy-feedback{margin:8px 0 0;color:#d7e2dc;font-size:.9rem;line-height:1.45}.terminal-buddy-button{display:inline-flex;min-height:36px;align-items:center;justify-content:center;margin-top:12px;border:1px solid #3b493f;border-radius:6px;padding:0 12px;color:#e7ede8;background:#1b211d;cursor:pointer;font-size:.86rem;font-weight:700}.terminal-buddy-button:disabled{cursor:not-allowed;opacity:.5}.terminal-actions{display:flex;flex-wrap:wrap;gap:10px;justify-content:flex-end;padding:0}@keyframes cursor-blink{0%,45%{opacity:.95}46%,to{opacity:0}}@keyframes panel-enter{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}@keyframes terminal-buddy-idle{0%,to{filter:drop-shadow(0 0 0 rgba(139,216,159,0));transform:translateY(0)}50%{filter:drop-shadow(0 5px 12px rgba(139,216,159,.24));transform:translateY(-3px)}}@keyframes terminal-buddy-hop{0%{transform:translate(var(--buddy-nudge-x),var(--buddy-nudge-y)) scale(1)}42%{transform:translateY(-14px) scale(1.04)}to{transform:translate(0) scale(1)}}.site-footer{display:flex;justify-content:flex-end;gap:6px;margin-top:18px;color:#9fb0a6;font-size:.88rem;line-height:1.4}.site-footer a{color:#8bd89f;text-decoration:none}.site-footer a:hover{text-decoration:underline}.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}@media (max-width: 980px){body{overflow:auto}.app-shell{height:auto;min-height:100dvh;overflow:visible}.lesson-header,.workbench-layout{grid-template-columns:1fr}.workbench-layout{align-items:start}.lesson-progress-rail{justify-items:start}.file-viewer{min-height:280px;max-height:46vh}.terminal-panel{max-height:none}.site-footer{justify-content:flex-start}}@media (max-width: 640px){.app-shell{padding:14px}.lesson-header{gap:18px}h1{font-size:1.65rem}.progress-track{grid-template-columns:repeat(17,minmax(8px,1fr))}.panel-bar{flex-wrap:wrap;align-items:flex-start;min-height:64px;padding:12px}.command-line{grid-template-columns:auto minmax(0,1fr)}.example-command{grid-template-columns:1fr}.terminal-cursor{display:none}.command-line .run-command-button{grid-column:1 / -1}.primary-button,.secondary-button{width:100%}.terminal-buddy{right:14px;top:auto;bottom:14px;grid-template-columns:minmax(0,calc(100vw - 96px)) 56px;gap:8px;align-items:end}.terminal-buddy.is-compact{grid-template-columns:56px}.terminal-buddy-avatar-button{width:56px;min-height:56px}.terminal-buddy-avatar{width:48px;height:48px}.terminal-buddy-panel{max-width:calc(100vw - 96px);padding:10px}.terminal-buddy-panel:after{top:auto;bottom:20px}}@media (prefers-reduced-motion: reduce){*,*:before,*:after{scroll-behavior:auto!important;animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}.terminal-buddy,.terminal-buddy-avatar,.command-line:focus-within .terminal-cursor,.learn-content,.lab-workspace,.terminal-line-appear{animation:none}}
