:root{color-scheme:light dark;--bg: light-dark(#fffff8, #14130f);--ink: light-dark(#1a1a1a, #e8e6df);--muted: light-dark(#666, #a09a8c);--accent: light-dark(#b3382c, #e07a6a);--accent-soft: light-dark(#f6e3e1, #3a2320);--code-bg: light-dark(#f4f2ec, #201e18);--border: light-dark(#ddd8cc, #3a372e);--ok: light-dark(#2e7d32, #81c784);--ko: light-dark(#c62828, #ef9a9a);--zone-wd: light-dark(#7b6aa8, #a998d8);--zone-stage: light-dark(#c07a2c, #e0a45f);--zone-repo: light-dark(#2e7d64, #6fbfa2);--ease-out: cubic-bezier(.23, 1, .32, 1)}:root[data-theme=light]{color-scheme:light}:root[data-theme=dark]{color-scheme:dark}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--ink);font-family:Georgia,Times New Roman,serif;font-size:1.06rem;line-height:1.65}main{max-width:46rem;margin:0 auto;padding:2.5rem 1.5rem 5rem}h1,h2,h3{font-family:Gill Sans,Helvetica Neue,Helvetica,Arial,sans-serif;line-height:1.25}h1{font-size:2rem;margin-bottom:.3rem}h2{margin-top:2.5rem;border-bottom:1px solid var(--border);padding-bottom:.3rem}.lesson-meta{color:var(--muted);font-style:italic;margin-top:0}code,pre{font-family:SF Mono,Menlo,Consolas,monospace;font-size:.88em;background:var(--code-bg);border-radius:4px}code{padding:.1em .35em}pre{padding:.9rem 1.1rem;overflow-x:auto;border:1px solid var(--border);line-height:1.5}pre code{background:none;padding:0}pre .out{color:var(--muted)}pre .comment{color:var(--muted);font-style:italic}a{color:var(--accent)}blockquote{margin:1.5rem 0;padding:.2rem 1.2rem;border-left:3px solid var(--accent);background:var(--accent-soft);border-radius:0 6px 6px 0}.callout{border:1px solid var(--border);border-radius:8px;padding:1rem 1.2rem;margin:1.5rem 0}.callout .callout-title{font-family:Gill Sans,Helvetica Neue,sans-serif;font-weight:600;display:block;margin-bottom:.3rem}.zone{font-weight:600;white-space:nowrap}.zone-wd{color:var(--zone-wd)}.zone-stage{color:var(--zone-stage)}.zone-repo{color:var(--zone-repo)}.checklist{list-style:none;padding-left:0;counter-reset:step}.checklist li{counter-increment:step;margin:1.1rem 0;padding-left:2.6rem;position:relative}.checklist li:before{content:counter(step);position:absolute;left:0;top:.1rem;width:1.8rem;height:1.8rem;border-radius:50%;background:var(--accent);color:var(--bg);font-family:Gill Sans,Helvetica Neue,sans-serif;font-weight:700;display:flex;align-items:center;justify-content:center}.quiz{border:1px solid var(--border);border-radius:8px;padding:1.2rem 1.4rem;margin:1.5rem 0}.quiz .q{font-weight:600;font-family:Gill Sans,Helvetica Neue,sans-serif}.quiz button.choice{display:block;width:100%;text-align:left;margin:.45rem 0;padding:.55rem .9rem;font:inherit;color:var(--ink);background:var(--code-bg);border:1px solid var(--border);border-radius:6px;cursor:pointer;transition:border-color .15s var(--ease-out),transform .16s var(--ease-out)}@media(hover:hover)and (pointer:fine){.quiz button.choice:hover{border-color:var(--accent)}}.quiz button.choice:active{transform:scale(.98)}.quiz button.choice.ok{border-color:var(--ok);background:transparent;outline:2px solid var(--ok)}.quiz button.choice.ko{border-color:var(--ko);opacity:.7}.quiz .feedback{margin-top:.6rem;font-style:italic;min-height:1.4em}.quiz .feedback.ok,.quiz .feedback.ko{animation:feedback-in .2s var(--ease-out)}@keyframes feedback-in{0%{opacity:0;transform:translateY(3px)}}.quiz .feedback.ok{color:var(--ok)}.quiz .feedback.ko{color:var(--ko)}footer.lesson-footer{margin-top:3.5rem;padding-top:1.2rem;border-top:1px solid var(--border);color:var(--muted);font-size:.95rem}table{border-collapse:collapse;width:100%;margin:1.2rem 0}th,td{border:1px solid var(--border);padding:.5rem .8rem;text-align:left}th{font-family:Gill Sans,Helvetica Neue,sans-serif;background:var(--code-bg)}header.site-header{border-bottom:1px solid var(--border);background:var(--code-bg)}header.site-header .inner{max-width:46rem;margin:0 auto;padding:.7rem 1.5rem;display:flex;align-items:baseline;gap:1rem;flex-wrap:wrap}header.site-header a.brand{font-family:Gill Sans,Helvetica Neue,Helvetica,Arial,sans-serif;font-weight:700;text-decoration:none;color:var(--ink)}header.site-header nav a{color:var(--muted);text-decoration:none;font-size:.95rem;transition:color .15s ease}header.site-header nav a:hover{color:var(--accent)}.theme-toggle{margin-left:auto;font:inherit;font-size:1rem;line-height:1;padding:.3rem .45rem;background:none;border:1px solid transparent;border-radius:6px;cursor:pointer;transition:transform .16s var(--ease-out),border-color .15s ease}.theme-toggle:hover{border-color:var(--border)}.theme-toggle:active{transform:scale(.94)}.theme-toggle .icon-sun{display:none}:root[data-theme=dark] .theme-toggle .icon-sun{display:inline}:root[data-theme=dark] .theme-toggle .icon-moon{display:none}.course-grid{display:grid;gap:1.2rem;margin:1.5rem 0}.course-card{border:1px solid var(--border);border-radius:10px;padding:1.2rem 1.4rem;display:block;text-decoration:none;color:var(--ink);transition:border-color .15s var(--ease-out),transform .2s var(--ease-out)}@media(hover:hover)and (pointer:fine){.course-card:hover{border-color:var(--accent)}}.course-card:active{transform:scale(.99)}.course-card h3{margin:0 0 .3rem}.course-card .desc{color:var(--muted);margin:.2rem 0 .8rem}.course-card .meta{font-size:.85rem;color:var(--muted);font-style:italic}.progress{height:.5rem;background:var(--code-bg);border:1px solid var(--border);border-radius:99px;overflow:hidden;margin-top:.6rem}.progress>.bar{height:100%;width:0;background:var(--ok);border-radius:99px;transition:width .4s var(--ease-out)}.progress-label{font-size:.82rem;color:var(--muted);margin-top:.25rem}.lesson-list{list-style:none;padding:0}.lesson-list li{display:flex;align-items:baseline;gap:.7rem;padding:.55rem .2rem;border-bottom:1px dashed var(--border)}.lesson-list .num{font-family:Gill Sans,Helvetica Neue,sans-serif;font-weight:700;color:var(--muted);min-width:1.6rem}.lesson-list .done-mark{margin-left:auto;color:var(--ok)}.lesson-list .dur{color:var(--muted);font-size:.85rem;font-style:italic}nav.lesson-nav{display:flex;justify-content:space-between;gap:1rem;margin-top:2.5rem;padding-top:1.2rem;border-top:1px solid var(--border);font-family:Gill Sans,Helvetica Neue,sans-serif}nav.lesson-nav a{text-decoration:none}.lesson-done-toggle{font:inherit;font-family:Gill Sans,Helvetica Neue,sans-serif;padding:.55rem 1.1rem;border:1px solid var(--border);border-radius:8px;background:var(--code-bg);color:var(--ink);cursor:pointer;transition:transform .16s var(--ease-out),border-color .15s var(--ease-out),color .15s ease}.lesson-done-toggle:active{transform:scale(.97)}.lesson-done-toggle[data-done="1"]{border-color:var(--ok);color:var(--ok);outline:1px solid var(--ok)}.checklist li{padding-left:3.2rem}.checklist li>input.step-check{position:absolute;left:2.1rem;top:.35rem;width:1rem;height:1rem;accent-color:var(--ok);cursor:pointer}.checklist li:before{transition:background-color .2s ease}.checklist li.stepped-done:before{background:var(--ok)}.git-terminal{border:1px solid var(--border);border-radius:10px;margin:1.5rem 0;overflow:hidden}.git-terminal .term-head{display:flex;align-items:center;gap:.6rem;padding:.45rem .9rem;background:var(--code-bg);border-bottom:1px solid var(--border);font-family:Gill Sans,Helvetica Neue,sans-serif;font-size:.88rem}.git-terminal .term-head .goal{color:var(--muted)}.git-terminal .term-head .status-ok{color:var(--ok);font-weight:700;margin-left:auto}.git-terminal .term-screen{font-family:SF Mono,Menlo,Consolas,monospace;font-size:.85rem;line-height:1.5;background:#14130f;color:#e8e6df;padding:.9rem 1rem;max-height:22rem;overflow-y:auto;white-space:pre-wrap;word-break:break-word}.git-terminal .term-screen .cmd-line{color:#8fd3a7}.git-terminal .term-screen .err{color:#ef9a9a}.git-terminal .term-screen .hint{color:#a09a8c;font-style:italic}.git-terminal .term-input-row{display:flex;align-items:center;gap:.5rem;background:#14130f;padding:.3rem 1rem .8rem;border-top:1px dashed #3a372e}.git-terminal .term-input-row .prompt-sign{font-family:SF Mono,Menlo,Consolas,monospace;color:#8fd3a7;font-size:.85rem;white-space:nowrap}.git-terminal input.term-input{flex:1;font-family:SF Mono,Menlo,Consolas,monospace;font-size:.85rem;background:transparent;border:none;outline:none;color:#e8e6df}.git-terminal .term-reset{font:inherit;font-size:.78rem;background:none;border:1px solid var(--border);border-radius:6px;color:var(--muted);cursor:pointer;padding:.1rem .5rem;transition:transform .16s var(--ease-out),color .15s ease}.git-terminal .term-reset:active{transform:scale(.96)}.py-runner{border:1px solid var(--border);border-radius:10px;margin:1.5rem 0;overflow:hidden}.py-runner .py-head{display:flex;align-items:center;gap:.6rem;padding:.45rem .9rem;background:var(--code-bg);border-bottom:1px solid var(--border);font-family:Gill Sans,Helvetica Neue,sans-serif;font-size:.88rem}.py-runner .status-ok{color:var(--ok);font-weight:700;margin-left:auto}.py-runner textarea.py-editor{display:block;width:100%;min-height:10rem;border:none;outline:none;resize:vertical;padding:.9rem 1rem;font-family:SF Mono,Menlo,Consolas,monospace;font-size:.85rem;line-height:1.5;background:var(--code-bg);color:var(--ink);tab-size:4}.py-runner .py-actions{display:flex;gap:.6rem;align-items:center;padding:.5rem .9rem;border-top:1px solid var(--border)}.py-runner button.py-run{font:inherit;font-family:Gill Sans,Helvetica Neue,sans-serif;padding:.35rem 1rem;border-radius:6px;border:1px solid var(--accent);background:var(--accent);color:var(--bg);cursor:pointer;transition:transform .16s var(--ease-out),opacity .15s ease}.py-runner button.py-run:active{transform:scale(.97)}.py-runner button.py-run:disabled{opacity:.5;cursor:wait}.py-runner .py-loading{color:var(--muted);font-size:.85rem;font-style:italic}.py-runner pre.py-output{margin:0;border:none;border-top:1px solid var(--border);border-radius:0;max-height:14rem;overflow-y:auto}.py-runner pre.py-output .err{color:var(--ko)}.py-runner pre.py-output .test-ok{color:var(--ok)}button:focus-visible,a:focus-visible,input:focus-visible{outline:2px solid var(--accent);outline-offset:2px}@media(prefers-reduced-motion:reduce){.course-card,.quiz button.choice,.lesson-done-toggle,.py-runner button.py-run,.git-terminal .term-reset{transition-property:border-color,color,opacity}.course-card:hover,.course-card:active,.quiz button.choice:active,.lesson-done-toggle:active,.py-runner button.py-run:active,.git-terminal .term-reset:active{transform:none}.quiz .feedback.ok,.quiz .feedback.ko{animation:none}.progress>.bar{transition:none}}
