/* One visual language for all knowledge lessons. Editor light colors follow Keil. */
:root{color-scheme:light;--bg:#f6f8fb;--paper:#ffffff;--soft:#eef2f7;--ink:#202d3d;--muted:#596b80;--line:#dce3eb;--accent:#245aa7;--accent-soft:#eaf1fc;--warm:#9a4b13;--code:#fff;--code-ink:#171717;--code-comment:#087626;--code-keyword:#0000b0;--code-string:#a31515;--code-pre:#805000;--code-current:#f2f6fc;--panel:var(--paper);--text:var(--ink);--dim:var(--muted);--border:var(--line)}
:root[data-theme=dark]{color-scheme:dark;--bg:#101c22;--paper:#172830;--soft:#20363d;--ink:#e6efed;--muted:#a4bbb8;--line:#345057;--accent:#7cdbb7;--accent-soft:#234239;--warm:#ffc08c;--code:#111d26;--code-ink:#e3e9ee;--code-comment:#88b884;--code-keyword:#8ab7ff;--code-string:#e5b393;--code-pre:#dcc182;--code-current:#22313b}
*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--ink);font:15px/1.65 system-ui,-apple-system,'Segoe UI','Microsoft YaHei',sans-serif}a{color:var(--accent);text-underline-offset:4px}button,input,select,textarea{font:inherit}button,a.button{cursor:pointer;border:1px solid var(--line);border-radius:9px;padding:9px 15px;background:var(--paper);color:var(--ink);text-decoration:none;display:inline-flex;align-items:center;justify-content:center;gap:7px}button:hover,a.button:hover{border-color:var(--accent);background:var(--accent-soft)}button:disabled{opacity:.5;cursor:not-allowed}button.primary,a.primary{background:var(--accent);color:var(--paper);border-color:var(--accent);font-weight:650}:root[data-theme=dark] .primary{color:#0c2820}:focus-visible{outline:3px solid var(--accent);outline-offset:3px}[hidden]{display:none!important}h1,h2,h3,p{margin-top:0}h1{font-size:clamp(27px,3.6vw,43px);line-height:1.3;letter-spacing:-.8px}h2{font-size:21px;line-height:1.4}h3{font-size:17px}p{margin-bottom:12px}small,.muted{color:var(--muted)}code,pre{font-family:Consolas,'Cascadia Code',monospace}code{overflow-wrap:anywhere}pre{white-space:pre;overflow:auto;tab-size:4;font-size:14px;line-height:1.65}input[type=search],select{max-width:100%;background:var(--paper);color:var(--ink);border:1px solid var(--line);border-radius:9px;padding:9px 11px}summary{cursor:pointer;line-height:1.6}details{border-top:1px solid var(--line);padding:13px 0}details>summary{font-weight:600}details[open]>summary{margin-bottom:12px}ol,ul{padding-left:23px}li{margin-bottom:8px}.skip-link{position:absolute;top:-60px}.skip-link:focus{top:8px;z-index:20;background:var(--paper);padding:10px}.learn-header{max-width:1480px;margin:auto;padding:22px 32px;display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid var(--line);gap:16px}.learn-brand{display:flex;align-items:center;gap:11px;text-decoration:none;color:var(--ink);font-weight:750;font-size:17px}.learn-brand span{background:var(--accent);color:var(--paper);border-radius:11px;padding:6px 10px;font-family:Consolas,monospace}:root[data-theme=dark] .learn-brand span{color:#10271f}.learn-header nav{display:flex;align-items:center;gap:25px;font-size:13px}.learn-header nav a{text-decoration:none}.learn-header button{padding:7px 12px}#learnApp{max-width:1480px;margin:auto;padding:32px;min-height:72vh}.learn-footer{max-width:1480px;margin:20px auto;padding:20px 32px;border-top:1px solid var(--line);font-size:12px;color:var(--muted);display:flex;justify-content:space-between;gap:16px}.loading{padding:45px;text-align:center}.eyebrow{font-size:11px;letter-spacing:2px;text-transform:uppercase;font-weight:700;color:var(--accent);margin-bottom:12px}.catalog-hero{display:grid;grid-template-columns:1.3fr 1fr;gap:60px;padding:20px 0 40px;align-items:center}.catalog-hero h1{max-width:600px}.catalog-hero .lead{font-size:17px;max-width:520px;color:var(--muted)}.actions{display:flex;gap:9px;flex-wrap:wrap;align-items:center}.learning-map{background:var(--paper);border:1px solid var(--line);border-radius:20px;padding:25px}.map-row{display:flex;gap:14px;align-items:center;margin:0 0 17px}.map-row:last-child{margin-bottom:0}.map-row b{height:37px;width:37px;flex:none;display:grid;place-items:center;border-radius:50%;background:var(--accent-soft);color:var(--accent);font-size:14px}.map-row p{margin:0;font-size:13px;color:var(--muted)}.catalog-tools{display:flex;gap:16px;align-items:center;justify-content:space-between;margin-bottom:24px;flex-wrap:wrap}.catalog-tools input{width:320px}.path-group{margin-bottom:32px}.group-head{display:flex;gap:15px;align-items:baseline;margin:10px 0 16px;flex-wrap:wrap}.group-head h2{margin:0}.group-head p{font-size:13px;color:var(--muted);margin:0}.lesson-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:13px}.lesson-card{display:flex;flex-direction:column;gap:9px;min-height:158px;background:var(--paper);border:1px solid var(--line);border-radius:14px;padding:19px 21px;color:var(--ink);text-decoration:none;transition:transform .16s,border-color .16s}.lesson-card:hover{transform:translateY(-3px);border-color:var(--accent)}.lesson-card strong{font-size:17px}.lesson-card p{font-size:13px;color:var(--muted);margin:0;flex:1}.lesson-card small{font-size:11px}.card-top{display:flex;justify-content:space-between;color:var(--accent);font:12px Consolas,monospace}.status-pill{font:11px system-ui,sans-serif;padding:1px 6px;border-radius:4px;background:var(--soft);color:var(--muted)}.status-pill.passed{color:var(--accent);background:var(--accent-soft)}.orientation{margin-bottom:28px;padding:17px 22px;background:var(--paper);border:1px solid var(--line);border-radius:12px}.orientation-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:20px}.orientation-grid p{font-size:14px}.lesson-heading{display:flex;justify-content:space-between;gap:20px;align-items:flex-start;margin-bottom:18px}.lesson-heading h1{font-size:30px;margin:5px 0 8px}.lesson-heading p{color:var(--muted);margin:0;font-size:14px}.lesson-heading .back{font-size:12px;text-decoration:none}.lesson-meta{font-size:12px;white-space:nowrap;color:var(--muted);padding-top:12px}.stage-tabs{display:flex;gap:7px;margin:24px 0;flex-wrap:wrap}.stage-tabs button{background:transparent;min-width:146px;justify-content:flex-start;border-color:transparent}.stage-tabs [aria-current=step]{background:var(--accent-soft);border-color:var(--line);color:var(--accent);font-weight:700}.stage-tabs span{border:1px solid var(--line);border-radius:50%;width:24px;height:24px;font-size:12px;display:grid;place-items:center}.intro-grid{display:grid;grid-template-columns:minmax(260px,.9fr) minmax(350px,1.3fr);gap:24px}.paper{background:var(--paper);padding:26px;border:1px solid var(--line);border-radius:15px;min-width:0}.paper h2{margin-bottom:15px}.concept-analogy{background:var(--accent-soft);border-left:3px solid var(--accent);border-radius:4px;padding:15px 17px;font-size:14px}.prerequisites{font-size:12px;color:var(--muted);margin-top:18px}.prerequisites a{margin-right:10px;display:inline-block}.recipe-list li{padding:6px 0;font-size:14px}.walkthrough{padding:17px 0;border-bottom:1px solid var(--line)}.walkthrough:last-child{border:0}.walkthrough pre{margin:0 0 8px;padding:12px 15px;border:1px solid var(--line);border-radius:8px;background:var(--code);color:var(--code-ink);font-size:13px}.walkthrough p{margin:0;font-size:14px;color:var(--muted)}.prediction{margin-top:20px}.prediction .choices{display:grid;gap:8px}.prediction button{justify-content:flex-start;font-size:14px;text-align:left}.prediction-feedback{margin-top:12px;color:var(--accent);font-size:14px}.lesson-bottom{display:flex;justify-content:space-between;gap:15px;align-items:center;margin-top:24px;flex-wrap:wrap}.work-grid{display:grid;grid-template-columns:290px minmax(0,1fr);gap:22px;align-items:start}.lesson-sidebar{position:sticky;top:15px;max-height:calc(100vh - 30px);overflow:auto;scrollbar-width:thin;padding:21px}.lesson-sidebar h2{font-size:17px}.lesson-sidebar p,.lesson-sidebar li{font-size:13px}.lesson-sidebar .recipe-list{padding-left:20px}.lesson-sidebar .recipe-list li{padding:3px 0}.lesson-sidebar details p{margin-top:10px}.lesson-sidebar details pre{font-size:12px;max-height:320px}.workspace-main{min-width:0}.exercise-goal{font-size:15px;margin:0 0 16px}.editor-card{border:1px solid var(--line);border-radius:14px;overflow:hidden;background:var(--paper)}.editor-toolbar,.editor-header,.editor-footer{display:flex;gap:10px;align-items:center;justify-content:space-between;flex-wrap:wrap;padding:12px 18px;border-bottom:1px solid var(--line)}.editor-toolbar{font-size:12px;background:var(--soft)}.editor-toolbar button{padding:5px 10px;font-size:12px}.editor-toolbar select{font-size:12px;padding:5px}.editor-header{font:12px Consolas,monospace;color:var(--muted);padding:9px 17px}.editor-header button{padding:2px 8px;font:12px system-ui,sans-serif}.editor-wrap{position:relative;display:grid;grid-template-columns:49px minmax(0,1fr);height:440px;background:var(--code);overflow:hidden}.line-gutter{grid-column:1;margin:0;overflow:hidden;text-align:right;padding:16px 10px 16px 0;background:var(--soft);color:var(--muted);border-right:1px solid var(--line);user-select:none;font:14px/1.65 Consolas,monospace}.editor-wrap textarea{grid-column:2;position:relative;z-index:2;width:100%;height:100%;min-width:0;margin:0;border:0;border-radius:0;resize:none;padding:16px;font:14px/1.65 Consolas,'Cascadia Code',monospace;tab-size:4;white-space:pre;overflow:auto;outline-offset:-3px;color:var(--code-ink);background:var(--code)}.keil-syntax-layer{position:absolute;z-index:1;margin:0;overflow:hidden;pointer-events:none;white-space:pre;color:var(--code-ink);background:var(--code)}.keil-syntax-input[data-syntax-ready=true]{color:transparent;caret-color:var(--code-ink);background:transparent}.keil-syntax-input::selection{background:#729dd755;color:transparent}.keil-code-line{min-width:100%;display:inline-block}.keil-current-line{background:var(--code-current)}.kw{color:var(--code-keyword)}.co{color:var(--code-comment)}.st{color:var(--code-string)}.pp{color:var(--code-pre)}.num{color:var(--code-ink)}.editor-footer{border:0;border-top:1px solid var(--line);font-size:11px;color:var(--muted)}.run-bar{display:flex;gap:10px;align-items:center;padding:17px 18px;flex-wrap:wrap}.run-note{font-size:12px;color:var(--muted);flex:1;min-width:130px}.result-panel{margin-top:18px}.result-panel h2{font-size:18px}.result-panel[data-status=pass]{border-left:4px solid var(--accent)}.result-panel[data-status=fail],.result-panel[data-status=error]{border-left:4px solid var(--warm)}.result-lead{font-weight:650}.result-boundary{font-size:12px;color:var(--muted)}.check-list{list-style:none;padding:0}.check-list li{display:flex;gap:10px;align-items:flex-start;padding:9px 12px;border-radius:8px;background:var(--soft);font-size:13px;margin-bottom:7px}.pass-mark{color:var(--accent);font-weight:700}.fail-mark{color:var(--warm);font-weight:700}.diagnostic{display:block!important;text-align:left;white-space:pre-wrap;overflow-wrap:anywhere;width:100%;font-size:13px;margin:8px 0}.observation-values{display:grid;grid-template-columns:minmax(120px,.7fr) 1fr;gap:6px 15px;font-size:13px}.observation-values dt{color:var(--muted)}.observation-values dd{margin:0}.observation-title{font-size:17px!important}.observation-target,.observation-note,.observation-empty,.pwm-wave-caption,.timer-ticks figcaption{font-size:12px;color:var(--muted)}.pwm-wave svg,.timer-ticks svg{max-width:350px}.pwm-wave-axis{fill:none;stroke:var(--line);stroke-width:1}.pwm-wave-line{fill:none;stroke:var(--accent);stroke-width:2.3}.observation-lamps,.observation-samples{display:flex;gap:13px;flex-wrap:wrap;margin-bottom:16px}.observation-lamp,.observation-sample{border:1px solid var(--line);padding:15px;border-radius:10px;display:grid;gap:7px;font-size:12px}.lamp-dot{width:24px;height:24px;border-radius:50%;background:#8d9c91}.is-on .lamp-dot{background:#78d533;box-shadow:0 0 15px #8cda67}.file-tabs{display:flex;gap:6px;overflow:auto;padding:10px 14px;border-bottom:1px solid var(--line)}.file-tabs button{font-size:12px;padding:7px 11px;white-space:nowrap}.file-tabs [aria-selected=true]{background:var(--accent-soft);border-color:var(--accent);color:var(--accent)}.bridge-note{margin-bottom:15px;background:var(--accent-soft);border:1px solid var(--line);padding:15px 18px;border-radius:10px;font-size:13px}.file-role{font-size:12px;color:var(--muted)}.warning{background:#fff1d6;color:#71501b;padding:12px 15px;border-radius:9px;font-size:13px;margin-bottom:16px}.spl-dictionary input,.spl-dictionary select{width:100%;font-size:12px}.spl-dictionary-search{display:flex;gap:5px;margin:8px 0}.spl-dictionary-search input{min-width:0}.spl-dictionary-search button{white-space:nowrap;padding:5px 7px;font-size:12px}.spl-dictionary-results button{width:100%;display:block;text-align:left;font-size:12px;margin:6px 0}.spl-dictionary-results span{display:block}.spl-dictionary-friendly{background:var(--accent-soft);padding:10px;border-radius:7px}.spl-dictionary dd{margin:4px 0 10px;font-size:12px}.spl-dictionary dt{font-size:12px;font-weight:600}.spl-dictionary-related{display:flex;gap:5px;flex-wrap:wrap}.spl-dictionary-related button{font-size:11px;padding:4px 7px;overflow-wrap:anywhere;max-width:100%}.spl-explanation{overflow-wrap:anywhere}.learn-dialog{width:min(860px,calc(100vw - 28px));max-height:85vh;background:var(--paper);color:var(--ink);border:1px solid var(--line);border-radius:16px;padding:25px;overflow:auto}.learn-dialog::backdrop{background:#06151499;backdrop-filter:blur(3px)}.learn-dialog pre{background:var(--code);color:var(--code-ink);padding:17px;border:1px solid var(--line);border-radius:9px;max-height:50vh}.learn-dialog textarea{width:100%;height:43vh;padding:14px;font:13px/1.6 Consolas,monospace;background:var(--code);color:var(--code-ink);border:1px solid var(--line);border-radius:8px}.dialog-heading{display:flex;justify-content:space-between;align-items:center;gap:12px}.dialog-heading h2{margin:0}.dialog-body{margin:18px 0}.toast{position:fixed;bottom:24px;left:50%;transform:translateX(-50%);max-width:90vw;border:1px solid var(--line);background:var(--ink);color:var(--bg);border-radius:9px;padding:12px 19px;z-index:200}.reference-label{font-size:12px;color:var(--warm)}.learning-status{font-size:12px;color:var(--muted)}.backup-tools{margin-top:18px}.backup-tools .actions{font-size:12px}.reference-result{border-top:1px solid var(--line);padding-top:15px}.ca-bar{font-size:11px!important}.ca-bar .ca-note{display:none}
.tutor-dialog{width:min(880px,calc(100vw - 28px))}.tutor-notice{background:var(--accent-soft);border-radius:9px;padding:12px 15px;font-size:13px}.tutor-form{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin:18px 0}.tutor-field{display:flex;flex-direction:column;gap:7px;font-size:13px;font-weight:600;min-width:0}.tutor-field select{width:100%;font-size:13px}.tutor-form .tutor-field:has(textarea){grid-column:1/-1}.tutor-form textarea{height:78px;min-height:70px;resize:vertical;font:14px/1.6 system-ui,sans-serif}.tutor-check{grid-column:1/-1;display:flex;align-items:flex-start;gap:5px;font-size:13px;line-height:1.65}.tutor-check input{margin-top:5px;flex:none}.tutor-dialog #tutorPreview{height:280px;resize:vertical;min-height:160px;font-weight:400;white-space:pre-wrap;overflow-wrap:anywhere}.tutor-dialog .actions{margin:14px 0}.tutor-dialog .actions button{font-size:13px}.tutor-advice,.tutor-hint{border:1px solid var(--line);border-radius:11px;padding:18px;margin:16px 0}.tutor-advice{border-left:3px solid var(--accent)}.tutor-advice h3,.tutor-hint h3{margin-bottom:10px}.tutor-advice p,.tutor-advice li,.tutor-hint p{font-size:14px}.tutor-answer{padding:12px 15px;background:var(--accent-soft);border-radius:8px;margin-top:12px}.tutor-symbols button{font:12px/1.5 Consolas,monospace;max-width:100%;overflow-wrap:anywhere}.tutor-dialog .spl-dictionary{padding:14px 0}.tutor-dialog .warning{margin:8px 0;overflow-wrap:anywhere}.tutor-dialog #tutorWarnings:empty{display:none}
@media(max-width:720px){.tutor-form{grid-template-columns:1fr}.tutor-dialog #tutorPreview{height:240px}.tutor-dialog .dialog-heading{align-items:flex-start}.tutor-dialog .dialog-heading h2{line-height:1.5}.tutor-advice,.tutor-hint{padding:14px}.tutor-dialog .actions button{width:100%}}
.tutor-dialog[open]{display:flex;flex-direction:column;padding:0;overflow:hidden}.tutor-dialog .dialog-heading{flex:none;padding:18px 24px;border-bottom:1px solid var(--line)}.tutor-dialog .dialog-body{margin:0;padding:18px 24px;overflow:auto;min-height:0}.tutor-dialog .dialog-heading>button{flex-shrink:0;white-space:nowrap}.tutor-footer{flex:none;padding:12px 24px;background:var(--paper);border-top:1px solid var(--line)}.tutor-footer .actions{margin:0;justify-content:flex-end}.tutor-footer .actions button{width:auto}.tutor-dialog #tutorWarnings+button{margin-bottom:16px}
@media(max-width:720px){.tutor-dialog .dialog-heading{padding:14px 18px}.tutor-dialog .dialog-body{padding:14px 18px}.tutor-footer{padding:10px 18px}.tutor-footer .actions{justify-content:stretch}.tutor-footer .actions button{flex:1;min-width:100px;font-size:12px}}
.mobile-help-toggle{display:none}
.catalog-hero h1{white-space:pre-line;text-wrap:balance}
/* The global navigation is shared with projects/library; only the learning
   workspace has its own spacing. Light surfaces are neutral, never beige. */
body[data-ui-page=practice]{--bg:var(--ui-bg);--accent:var(--ui-accent)}
.lesson-sidebar{top:calc(var(--ui-nav-height,72px) + 15px);max-height:calc(100dvh - var(--ui-nav-height,72px) - 30px)}
.ui-nav li{margin:0}
.foundation-files{margin:0;padding:8px 16px;border-top:0;border-bottom:1px solid var(--line);font-size:12px;background:var(--paper)}
.foundation-files>summary{color:var(--muted);font-weight:500}
.foundation-files p{margin:8px 0;color:var(--muted)}
.foundation-files .file-tabs{border:0;padding:0;flex-wrap:wrap}
.project-revision-note{padding:10px 16px;background:var(--soft);border-bottom:1px solid var(--line);color:var(--ink);font-size:12px;display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.project-revision-note p{margin:0;flex:1;min-width:200px}
.project-revision-note button{padding:5px 10px;font-size:12px}
.cleanup-changes{font:13px/1.7 Consolas,monospace;overflow-wrap:anywhere}
html[data-theme=light] :is(.lesson-sidebar,.editor-wrap textarea,.file-tabs,.dialog-body,pre){scrollbar-color:#8b9cb1 #edf1f6}
@media(max-width:720px){.lesson-sidebar{top:auto;max-height:none}.project-revision-note p{min-width:0;flex-basis:100%}}
.module-intro{padding:15px 17px;margin-top:18px;border:1px solid var(--line);border-radius:10px;background:var(--soft)}.module-intro p{font-size:13px;margin:8px 0 12px}.module-intro button{font-size:13px}.module-tools{margin:0 0 14px}.module-tools button{font-size:12px;padding:7px 12px}.module-parameters{font-size:14px}.module-parameters dt{font-family:Consolas,monospace;font-weight:700;overflow-wrap:anywhere}.module-parameters dd{margin:3px 0 12px;color:var(--muted)}#moduleFunctionSearch,#moduleFunctionSelect,#projectFileSelect{width:100%;margin-bottom:12px}#moduleFunctionInfo h3{margin-top:10px}.export-scope{font-size:12px;color:var(--muted);margin:10px 2px 16px}.mistake-link{font-size:12px}.file-tabs button{flex-shrink:0}.editor-header #filename{overflow-wrap:anywhere;min-width:0}.tutor-dialog #projectFilePreview pre{max-height:48vh}.tutor-dialog #moduleFunctionInfo pre{white-space:pre-wrap;overflow-wrap:anywhere}
@media(max-width:720px){.work-grid>.lesson-sidebar{display:none}.work-grid.help-open>.lesson-sidebar{display:block}.mobile-help-toggle{display:flex;width:100%;justify-content:space-between;font-size:13px}}
@media(prefers-reduced-motion:reduce){*{scroll-behavior:auto!important;transition:none!important}}
@media(min-width:1600px){.editor-wrap{height:510px}}
@media(max-width:1000px){.work-grid{grid-template-columns:240px minmax(0,1fr);gap:16px}.lesson-sidebar{padding:17px}.lesson-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.catalog-hero{gap:30px}.paper{padding:21px}#learnApp{padding:24px}.learn-header{padding:18px 24px}.intro-grid{grid-template-columns:1fr 1.2fr;gap:17px}}
@media(max-width:720px){#learnApp{padding:20px 14px}.learn-header{padding:14px;align-items:flex-start}.learn-header nav{gap:12px;flex-wrap:wrap;justify-content:flex-end}.learn-brand{font-size:13px;white-space:nowrap}.learn-brand span{padding:5px 7px}.learn-header nav a[href="index.html#projects"]{display:none}.learn-header button{font-size:11px;padding:5px 8px}.catalog-hero,.intro-grid,.work-grid{grid-template-columns:1fr;gap:18px}.catalog-hero{padding:12px 0 24px}.catalog-hero h1{font-size:31px}.catalog-hero .lead{font-size:15px}.orientation-grid{grid-template-columns:1fr;gap:7px}.lesson-grid{grid-template-columns:1fr}.catalog-tools input{width:100%}.lesson-heading h1{font-size:24px}.lesson-meta{display:none}.stage-tabs{margin:17px 0;gap:4px}.stage-tabs button{min-width:0;flex:1;padding:9px 5px;font-size:12px;gap:6px}.stage-tabs span{width:21px;height:21px}.paper{padding:19px}.lesson-sidebar{position:static;max-height:none}.lesson-sidebar .recipe-list{margin-bottom:8px}.lesson-sidebar>details{padding:10px 0}.editor-toolbar{padding:10px}.editor-wrap{height:390px;grid-template-columns:39px minmax(0,1fr)}.editor-wrap textarea{font-size:13px;padding:14px 10px}.line-gutter{font-size:13px;padding:14px 8px 14px 0}.run-bar{padding:12px}.editor-header{padding:8px 12px}.learn-footer{padding:18px 14px;display:block}.learn-footer a{display:block;margin-top:7px}.lesson-bottom .button{max-width:100%;text-align:left}.learning-map{display:none}.observation-values{grid-template-columns:1fr 1fr}.learn-dialog{padding:18px}.learn-dialog h2{font-size:18px}}
