:root{color-scheme:light;--bg:#fff;--surface:#f4f5f7;--text:#1b1d21;--muted:#4d535c;--border:#d3d7de;--accent:#0a58ca;--accent-text:#fff;--focus:#b8460b;--font-body:system-ui, sans-serif;--font-code:ui-monospace, monospace;--measure:72ch;--gutter:16px}@media (prefers-color-scheme:dark){:root:not([data-theme=light]){color-scheme:dark;--bg:#15171b;--surface:#1f2329;--text:#e8eaed;--muted:#aab1bb;--border:#3a414b;--accent:#7cb2ff;--accent-text:#0b1220;--focus:#ffb37a}}:root[data-theme=dark]{color-scheme:dark;--bg:#15171b;--surface:#1f2329;--text:#e8eaed;--muted:#aab1bb;--border:#3a414b;--accent:#7cb2ff;--accent-text:#0b1220;--focus:#ffb37a}*,:before,:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%;text-size-adjust:100%}body{background:var(--bg);min-height:100vh;color:var(--text);font-family:var(--font-body);flex-direction:column;margin:0;font-size:1.0625rem;line-height:1.6;display:flex}main{width:100%;max-width:calc(var(--measure) + 2 * var(--gutter));padding:1.5rem var(--gutter) 3rem;flex:1;margin:0 auto}a{color:var(--accent)}code,pre,kbd{font-family:var(--font-code);font-size:.92em}:focus-visible{outline:3px solid var(--focus);outline-offset:2px}.skip-link{left:var(--gutter);background:var(--accent);color:var(--accent-text);z-index:10;padding:.5rem .75rem;position:absolute;top:-3rem}.skip-link:focus{top:.5rem}.visually-hidden{clip:rect(0 0 0 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.site-header{border-bottom:1px solid var(--border);background:var(--surface)}.site-header-inner{max-width:72rem;padding:.6rem var(--gutter);flex-wrap:wrap;align-items:center;gap:.75rem 1.25rem;margin:0 auto;display:flex}.site-name{color:var(--text);margin-right:auto;font-size:1.2rem;font-weight:700;text-decoration:none}.book-switcher{position:relative}.book-switcher summary{cursor:pointer;border:1px solid var(--border);border-radius:6px;padding:.35rem .6rem;list-style:none}.book-switcher summary::-webkit-details-marker{display:none}.book-switcher summary:after{content:" ▾"}.book-switcher ul{z-index:5;min-width:16rem;max-width:calc(100vw - 2 * var(--gutter));background:var(--bg);border:1px solid var(--border);border-radius:6px;margin:.35rem 0 0;padding:.35rem 0;list-style:none;position:absolute;right:0}.book-switcher a{padding:.4rem .8rem;text-decoration:none;display:block}.book-switcher a[aria-current=page]{font-weight:700}.theme-toggle{font:inherit;border:1px solid var(--border);color:var(--text);cursor:pointer;background:0 0;border-radius:6px;padding:.35rem .6rem}.site-footer{border-top:1px solid var(--border);background:var(--surface);color:var(--muted);font-size:.9rem}.site-footer-inner{max-width:72rem;padding:1rem var(--gutter);flex-wrap:wrap;gap:.5rem 1.25rem;margin:0 auto;display:flex}.site-footer ul{flex-wrap:wrap;gap:.25rem 1rem;margin:0;padding:0;list-style:none;display:flex}.site-footer a{color:inherit}.catalog{gap:1rem;margin:1.5rem 0 0;padding:0;list-style:none;display:grid}.catalog-card{border:1px solid var(--border);background:var(--surface);border-radius:8px;padding:1rem 1.25rem}.catalog-card h2{margin:0 0 .25rem;font-size:1.3rem}.catalog-card p{color:var(--muted);margin:.25rem 0 0}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}.site-search-link{border:1px solid var(--border);color:var(--text);border-radius:6px;padding:.35rem .6rem;text-decoration:none}.muted{color:var(--muted)}.site-text h2{margin-top:2rem}.site-text li+li{margin-top:.3rem}:root{--panel-opener:#eef4ff;--panel-opener-edge:#9db8e8;--panel-goals:#edf8ef;--panel-goals-edge:#8cc79a;--panel-recap:#eef3fb;--panel-recap-edge:#94acd4;--panel-notice:#fdf8e6;--panel-notice-edge:#b8860b;--panel-tryit:#effaf1;--panel-tryit-edge:#8cc79a;--panel-error:#fdf0ef;--panel-error-edge:#d48a85;--panel-hang:#fff3e6;--panel-hang-edge:#e0a060;--panel-program:#eff4fb;--panel-program-edge:#94acd4;--label-goals:#1e6b2f;--label-notice:#7a5a00;--label-tryit:#1e6b2f;--label-error:#a3271f;--label-hang:#8a4500;--label-info:#1f4f8f;--output-bg:#f1f6fd;--badge:#e6e9ee}@media (prefers-color-scheme:dark){:root:not([data-theme=light]){--panel-opener:#1b2433;--panel-opener-edge:#3e5a88;--panel-goals:#18271c;--panel-goals-edge:#3d6f48;--panel-recap:#1b2230;--panel-recap-edge:#435a80;--panel-notice:#2a2615;--panel-notice-edge:#b8902a;--panel-tryit:#18271c;--panel-tryit-edge:#3d6f48;--panel-error:#2e1c1b;--panel-error-edge:#8a4a45;--panel-hang:#2e2216;--panel-hang-edge:#8a6030;--panel-program:#1b2230;--panel-program-edge:#435a80;--label-goals:#8fd6a0;--label-notice:#f0cc6a;--label-tryit:#8fd6a0;--label-error:#f3a29b;--label-hang:#f5b87a;--label-info:#9cc2f5;--output-bg:#1a2230;--badge:#2c323b}}:root[data-theme=dark]{--panel-opener:#1b2433;--panel-opener-edge:#3e5a88;--panel-goals:#18271c;--panel-goals-edge:#3d6f48;--panel-recap:#1b2230;--panel-recap-edge:#435a80;--panel-notice:#2a2615;--panel-notice-edge:#b8902a;--panel-tryit:#18271c;--panel-tryit-edge:#3d6f48;--panel-error:#2e1c1b;--panel-error-edge:#8a4a45;--panel-hang:#2e2216;--panel-hang-edge:#8a6030;--panel-program:#1b2230;--panel-program-edge:#435a80;--label-goals:#8fd6a0;--label-notice:#f0cc6a;--label-tryit:#8fd6a0;--label-error:#f3a29b;--label-hang:#f5b87a;--label-info:#9cc2f5;--output-bg:#1a2230;--badge:#2c323b}.crumbs{color:var(--muted);margin:0 0 .5rem;font-size:.95rem}.entry-kind{color:var(--muted);text-transform:capitalize;margin:0;font-size:.95rem}.entry-title{margin:0 0 1rem;line-height:1.25}.entry-actions{flex-wrap:wrap;gap:.5rem .75rem;margin:0 0 1.5rem;padding:0;list-style:none;display:flex}.button-link{border:1px solid var(--accent);border-radius:6px;padding:.4rem .9rem;font-weight:600;text-decoration:none;display:inline-block}.button-link:hover{background:var(--accent);color:var(--accent-text)}.entry-nav{border-top:1px solid var(--border);flex-wrap:wrap;justify-content:space-between;gap:1rem;margin:2.5rem 0 0;padding:1rem 0 0;display:flex}.entry-nav a{max-width:100%;text-decoration:none;display:block}.entry-nav .nav-dir{color:var(--muted);font-size:.85rem;display:block}.entry-nav .nav-next{text-align:right;margin-left:auto}.report{color:var(--muted);margin:1.5rem 0 0;font-size:.9rem}.report a{color:var(--muted)}.block{overflow-wrap:anywhere;margin:1rem 0}.block>:first-child,.callout>:first-child{margin-top:0}.block>:last-child,.callout>:last-child{margin-bottom:0}.panel,.callout{border:1px solid var(--border);background:var(--surface);border-radius:8px;padding:.75rem 1rem}.panel-label,.callout-label,.io-label{letter-spacing:.01em;margin:0 0 .35rem;font-size:.85rem;font-weight:700}.panel-opener{background:var(--panel-opener);border-color:var(--panel-opener-edge)}.panel-goals{background:var(--panel-goals);border-color:var(--panel-goals-edge)}.panel-goals .panel-label{color:var(--label-goals);font-size:1rem}.panel-recap{background:var(--panel-recap);border-color:var(--panel-recap-edge)}.panel-recap .panel-label{color:var(--label-info);font-size:1rem}.panel-notice,.callout-notice{background:var(--panel-notice);border-color:var(--panel-notice-edge);border-left-width:4px}.panel-notice .panel-label,.callout-notice .callout-label{color:var(--label-notice)}.panel-tryit,.callout-realprog{background:var(--panel-tryit);border-color:var(--panel-tryit-edge)}.panel-tryit .panel-label,.callout-realprog .callout-label{color:var(--label-tryit)}.callout-realprog{border-left-width:4px}.panel-error-demo{background:var(--panel-error);border-color:var(--panel-error-edge)}.panel-error-demo .panel-label{color:var(--label-error)}.panel-hang-demo{background:var(--panel-hang);border-color:var(--panel-hang-edge)}.panel-hang-demo .panel-label{color:var(--label-hang)}.panel-program,.panel-starter,.callout-program,.callout-datafile,.callout-goals,.callout-recap,.callout-opener{background:var(--panel-program);border-color:var(--panel-program-edge)}.panel-program .panel-label,.callout-program .callout-label{color:var(--label-info)}.callout-challenge{background:var(--panel-hang);border-color:var(--panel-hang-edge)}.callout-unknown{background:var(--surface)}pre{border:1px solid var(--border);tab-size:4;border-radius:6px;margin:.5rem 0;padding:.75rem .9rem;line-height:1.45;overflow-x:auto}pre code{font-size:.9rem}:not(pre)>code{background:var(--surface);overflow-wrap:anywhere;border-radius:4px;padding:.05em .3em}.panel :not(pre)>code,.callout :not(pre)>code{background:var(--bg)}.io{margin:.5rem 0 0}.output-text{background:var(--output-bg);color:var(--text)}.raw-block{background:var(--surface)}.math-error{color:var(--label-error)}math[display=block]{margin:.75rem 0;overflow-x:auto}.table-wrap{max-width:100%;margin:.75rem 0;overflow-x:auto}.table-wrap table{border-collapse:collapse;min-width:50%}.table-wrap th,.table-wrap td{border:1px solid var(--border);vertical-align:top;text-align:left;padding:.35rem .65rem}.table-wrap th{background:var(--surface)}.align-center{text-align:center!important}.align-right{text-align:right!important}.turtle{margin:.75rem 0 0}.turtle-figure{border:1px solid var(--border);border-radius:6px;width:100%;max-width:22rem;height:auto;display:block}.image-alt{font-style:italic}.practice-intro,.practice-outro{margin:0 0 1.5rem}.practice-item{border:1px solid var(--border);border-radius:10px;margin:2rem 0;padding:1rem 1.1rem}.practice-item>h2{margin:0 0 .4rem;font-size:1.3rem;line-height:1.3}.item-tags{flex-wrap:wrap;gap:.35rem;margin:0 0 .75rem;padding:0;list-style:none;display:flex}.tag{background:var(--badge);border-radius:999px;padding:.1rem .55rem;font-size:.82rem;font-weight:600;display:inline-block}.tag-stretch{background:var(--panel-hang);color:var(--label-hang);border:1px solid var(--panel-hang-edge)}.starter-label{margin:.75rem 0 .25rem;font-size:.85rem;font-weight:700}.how-checked{margin:.75rem 0 0;font-size:.95rem}.format-hint,.checking-soon{color:var(--muted);margin:.35rem 0 0;font-size:.95rem}.self-check{border:1px solid var(--border);border-radius:8px;margin:.75rem 0 0;padding:.6rem .9rem}.self-check legend{padding:0 .3rem;font-weight:700}.self-check ul{margin:0;padding:0;list-style:none}.self-check li{align-items:flex-start;gap:.6rem;margin:.35rem 0;display:flex}.self-check input{width:1.15rem;height:1.15rem;accent-color:var(--accent);flex:none;margin-top:.25rem}.book-subtitle{color:var(--muted);margin-top:-.5rem;font-size:1.15rem}.book-tools{flex-wrap:wrap;gap:.6rem;margin:1rem 0 1.5rem;padding:0;list-style:none;display:flex}.contents{margin:0;padding:0;list-style:none}.contents-entry{border-bottom:1px solid var(--border);flex-wrap:wrap;align-items:baseline;gap:.25rem .75rem;padding:.6rem 0;display:flex}.contents-kind{min-width:6.5rem;color:var(--muted);text-transform:uppercase;letter-spacing:.03em;font-size:.85rem;font-weight:600}.contents-title{flex:14rem;font-weight:600}.contents-checkpoint,.contents-project{background:var(--surface);padding-left:.5rem;padding-right:.5rem}.contents-links{gap:.9rem;font-size:.95rem;display:flex}.pdf-list{margin-top:.25rem}.glossary-entry{border-bottom:1px solid var(--border);padding:.75rem 0;scroll-margin-top:1rem}.glossary dt{font-size:1.05rem;font-weight:700}.glossary dd{margin:.25rem 0 0}.glossary dd>p:first-child{margin-top:0}.glossary-first{color:var(--muted);margin-bottom:0;font-size:.92rem}.search-form{flex-wrap:wrap;align-items:end;gap:.75rem 1.25rem;display:flex}.search-field{flex-direction:column;flex:14rem;gap:.25rem;display:flex}.search-field input,.search-field select{font:inherit;border:1px solid var(--muted);background:var(--bg);color:var(--text);border-radius:6px;max-width:100%;padding:.45rem .6rem}.search-results{margin:0;padding:0;list-style:none}.search-result{border-bottom:1px solid var(--border);padding:.75rem 0}.search-result p{margin:.15rem 0}.search-result-title{font-weight:600}.search-result-book{color:var(--muted);font-size:.9rem}.search-result-excerpt mark{background:var(--surface);color:var(--text);font-weight:700;text-decoration:underline}.search-more{font:inherit;color:var(--accent);cursor:pointer;background:0 0;margin-top:1rem}[hidden]{display:none!important}.progress-notice{border:1px solid var(--border);border-left:4px solid var(--focus);background:var(--surface);border-radius:6px;margin:0 0 1.25rem;padding:.75rem 1rem}.resume{margin:.75rem 0}.resume-link{border:1px solid var(--accent);border-radius:6px;padding:.4rem .8rem;font-weight:600;text-decoration:none;display:inline-block}.crumbs{font-size:.95rem}.button{font:inherit;border:1px solid var(--border);background:var(--bg);min-height:2.5rem;color:var(--text);cursor:pointer;border-radius:6px;padding:.4rem .9rem}.button-primary{border-color:var(--accent);background:var(--accent);color:var(--accent-text)}.button:disabled{cursor:default;opacity:.7}.button:focus-visible,.card-heading:focus-visible,.card-code:focus-visible,.deck select:focus-visible,.card-typed input:focus-visible{outline:3px solid var(--focus);outline-offset:2px}.deck-bar{flex-wrap:wrap;align-items:center;gap:.5rem .75rem;margin:1rem 0;display:flex}.deck select,.card-typed input{font:inherit;border:1px solid var(--border);background:var(--bg);max-width:100%;color:var(--text);border-radius:6px;padding:.35rem .5rem}.deck-counts{color:var(--muted);margin:0}.card{border:1px solid var(--border);background:var(--surface);border-radius:8px;padding:1rem 1.25rem}.card-heading{margin:0;font-size:1.15rem}.card-status,.card-report{color:var(--muted);margin:.25rem 0 .75rem;font-size:.9rem}.card-report{margin:1rem 0 0}.card-label{margin:.75rem 0 .25rem;font-weight:600}.card-code{border:1px solid var(--border);background:var(--bg);font-family:var(--font-code);border-radius:6px;margin:.25rem 0 .75rem;padding:.75rem;font-size:.95rem;line-height:1.45;overflow-x:auto}.card-prelude .card-code{opacity:.85}.card-term{font-size:1.25rem;font-weight:700}.card-definition{border-left:4px solid var(--accent);background:var(--bg);margin:.5rem 0 1rem;padding:.5rem 1rem}.card-definition code,.card-term code{font-family:var(--font-code)}.card-typed{flex-wrap:wrap;align-items:center;gap:.5rem;display:flex}.card-typed input{font-family:var(--font-code);flex:12rem}.card-options,.card-actions{flex-wrap:wrap;gap:.5rem;margin:.5rem 0;display:flex}.card-option.is-correct{border:2px solid #1a7f37;font-weight:700}.card-option.is-correct:before{content:"✓ "}.card-option.is-wrong{border:2px solid #b42318;text-decoration:line-through}.card-feedback{min-height:1.6em;margin:.5rem 0;font-weight:600}.mastery-details>summary{cursor:pointer;margin:0 0 .5rem;font-weight:600}.mastery-list{margin:0 0 1rem;padding:0;list-style:none}.mastery-row{border-bottom:1px solid var(--border);flex-wrap:wrap;justify-content:space-between;gap:.25rem 1rem;padding:.35rem 0;display:flex}.mastery-value{align-items:center;gap:.5rem;display:inline-flex}.mastery-value progress{width:8rem}.mastery-practice{color:var(--muted);font-style:italic}.transfer{border:1px solid var(--border);background:var(--surface);border-radius:8px;margin:2.5rem 0 0;padding:1rem 1.25rem}.transfer h2{margin-top:0}.transfer-group{margin:1.25rem 0}.transfer-group h3{margin:0 0 .5rem;font-size:1.05rem}.transfer-option,.transfer-file{flex-wrap:wrap;align-items:center;gap:.5rem;margin:.5rem 0;display:flex}.transfer-option input{width:1.25rem;height:1.25rem}.transfer-file label{font-weight:600}.transfer-file input{max-width:100%;font:inherit}.transfer-help{color:var(--muted);margin:.25rem 0 .75rem;font-size:.95rem}.transfer-option input:focus-visible,.transfer-file input:focus-visible{outline:3px solid var(--focus);outline-offset:2px}.transfer-status{min-height:1.6em;margin:.5rem 0 0;font-weight:600}.transfer-status[data-state=error]{border-left:4px solid var(--focus);padding-left:.75rem}.pwa-bar{z-index:20;padding:0 var(--gutter) var(--gutter);pointer-events:none;flex-direction:column;align-items:center;gap:.5rem;display:flex;position:fixed;bottom:0;left:0;right:0}.pwa-notice{width:100%;max-width:var(--measure);border:1px solid var(--border);background:var(--surface);color:var(--text);pointer-events:auto;border-radius:6px;flex-wrap:wrap;align-items:center;gap:.5rem 1rem;margin:0;padding:.5rem .75rem;display:flex;box-shadow:0 2px 8px #0003}.pwa-notice[hidden],.offline-book [hidden]{display:none}.pwa-notice p{margin:0}.offline-book{border:1px solid var(--border);background:var(--surface);border-radius:6px;margin:2rem 0;padding:1rem}.offline-book h2{margin-top:0}.offline-book progress{width:100%;height:1rem;margin:.5rem 0;display:block}.offline-book .offline-status{font-weight:600}
