:root{--bg:#f3f5f6;--paper:#fff;--ink:#1d3343;--muted:#536c7c;--line:#d7e0e5;--accent:#216954;--soft:#e6f2ec;--gold:#9b5425;--warm:#fff1e4;--nav:#172f41;--code:#142b3b;--radius:12px;color-scheme:light}
*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:100px}body{margin:0;background:var(--bg);color:var(--ink);font:17px/1.8 'Segoe UI',Arial,sans-serif}button,input,select,textarea{font:inherit;color:inherit}button,a,summary,input,select{touch-action:manipulation}button,summary{cursor:pointer}button{border:1px solid var(--line);border-radius:7px;background:var(--paper);padding:9px 14px;line-height:1.5;transition:background .18s cubic-bezier(.16,1,.3,1),border-color .18s}button:hover{border-color:var(--accent);background:var(--soft)}button:disabled{opacity:.45;cursor:default}a{color:var(--accent);text-underline-offset:4px}button:focus-visible,a:focus-visible,input:focus-visible,textarea:focus-visible,select:focus-visible,summary:focus-visible{outline:3px solid #cb8b36;outline-offset:3px}input,select,textarea{background:var(--paper);border:1px solid var(--line);border-radius:7px;padding:10px 12px;max-width:100%}textarea{display:block;width:100%;min-height:115px;resize:vertical;font-size:16px;line-height:1.7}h1,h2,h3{line-height:1.3;letter-spacing:-.035em}h1{font-size:clamp(30px,3.7vw,47px);font-weight:650;margin:9px 0 20px;max-width:900px}h2{font-size:26px;margin:38px 0 16px}h3{font-size:20px;margin:23px 0 12px}p{margin:12px 0 20px}small,.small{font-size:13px;line-height:1.65}.muted{color:var(--muted)}.eyebrow{font:600 11px/1.6 'Segoe UI',sans-serif;letter-spacing:1.7px;text-transform:uppercase;color:var(--accent)}.lead{font-size:20px;color:var(--muted);max-width:800px;line-height:1.75}.primary{background:var(--accent);color:#fff;border-color:var(--accent)}.primary:hover{background:var(--nav);color:#fff}.subtle{background:transparent}.toolbar{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.skip{position:fixed;top:-90px;left:16px;z-index:100;background:var(--paper);padding:14px}.skip:focus{top:10px}#header{position:sticky;top:0;z-index:30;display:flex;align-items:center;gap:16px;flex-wrap:wrap;min-height:77px;padding:12px 25px;background:var(--paper);border-bottom:1px solid var(--line)}.brand{display:flex;align-items:center;gap:12px;flex-shrink:0;font-weight:650;line-height:1.25}.brand small{display:block;font-size:9px;letter-spacing:1.2px;color:var(--muted);font-weight:500;margin-top:4px}.mark{display:grid;place-items:center;width:38px;height:38px;border-radius:11px;color:#d6eee5;background:var(--nav);font:600 21px Consolas,monospace}.tabs{display:flex;gap:3px;flex:1;justify-content:center}.tabs button{border:0;font-size:13px;padding:9px 11px;white-space:nowrap}.tabs button.active{background:var(--soft);color:var(--accent);font-weight:650}.header-tools{display:flex;gap:6px}.header-tools button{font-size:12px;white-space:nowrap}.menu{display:none}.layout{display:grid;grid-template-columns:265px minmax(0,1fr)}#sidebar{height:calc(100dvh - 78px);position:sticky;top:78px;overflow-y:auto;padding:24px 20px 30px;border-right:1px solid var(--line)}.sidebar-label{font-size:10px;letter-spacing:1.4px;color:var(--muted);text-transform:uppercase;margin:24px 8px 10px}.lesson-link{display:flex;align-items:start;gap:9px;width:100%;text-align:left;font-size:12px;border:0;background:transparent;margin:3px 0;padding:10px 9px;line-height:1.5}.lesson-link.active{background:var(--nav);color:#fff}.lesson-link:hover:not(.active){background:var(--soft)}.lesson-link .num{font:11px Consolas,monospace;opacity:.8;width:23px;flex-shrink:0;margin-top:3px}.lesson-link .check{margin-left:auto;color:var(--accent)}.sidebar-progress{font-size:12px;padding:14px 9px;border-bottom:1px solid var(--line)}progress{width:100%;height:6px;accent-color:var(--accent)}#main{padding:38px 48px 80px;max-width:1370px;min-width:0;width:100%}.article{max-width:850px}.lesson-layout{display:grid;grid-template-columns:minmax(0,850px) 170px;gap:40px}.contents{position:sticky;top:115px;align-self:start;font-size:12px;border-left:1px solid var(--line);padding-left:17px}.contents a{display:block;text-decoration:none;color:var(--muted);padding:6px 0}.source-label{font-size:12px;color:var(--muted);padding-bottom:20px;border-bottom:1px solid var(--line)}.panel{background:var(--paper);border:1px solid var(--line);border-radius:var(--radius);padding:23px;margin:22px 0}.panel h2,.panel h3{margin-top:0}.callout{background:var(--soft);border-left:3px solid var(--accent);border-radius:0 10px 10px 0;padding:18px 22px;margin:22px 0}.callout p:last-child{margin-bottom:0}.warning{background:var(--warm);border-color:var(--gold)}.steps{counter-reset:steps}.step{position:relative;border-left:1px solid var(--line);padding:0 0 1px 28px;margin:26px 0}.step:before{counter-increment:steps;content:counter(steps);position:absolute;left:-13px;top:0;border:1px solid var(--line);border-radius:50%;width:26px;height:26px;background:var(--paper);display:grid;place-items:center;color:var(--accent);font:600 12px/1 Consolas}.step p{margin-top:0}pre{background:var(--code);color:#e1edf1;border-radius:10px;padding:21px;overflow:auto;max-width:100%;font:13px/1.9 Consolas,'Courier New',monospace;margin:22px 0;tab-size:2}code{font-family:Consolas,'Courier New',monospace}p code,li code{background:var(--soft);padding:2px 5px;border-radius:4px}details{margin:15px 0}summary{color:var(--accent);padding:9px 0;font-weight:600;font-size:15px}.hint{background:var(--soft);padding:15px 18px;border-radius:8px}.exercise{border:1px dashed var(--muted);background:var(--paper);border-radius:12px;padding:24px;margin:28px 0}.exercise h2{margin-top:0}.recall{border-top:3px solid var(--accent)}.lesson-bottom{display:flex;justify-content:space-between;gap:10px;flex-wrap:wrap;margin-top:35px;padding-top:25px;border-top:1px solid var(--line)}.grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:17px}.week-card{padding:22px;background:var(--paper);border:1px solid var(--line);border-radius:12px;text-align:left;display:block;width:100%}.week-card h2{font-size:21px;margin:9px 0 12px}.week-card p{font-size:14px;color:var(--muted);margin:8px 0 15px}.week-card .week-index{font:12px Consolas,monospace;color:var(--accent)}.meta{display:flex;gap:15px;flex-wrap:wrap;font-size:12px;color:var(--muted)}.stats{display:flex;flex-wrap:wrap;gap:12px;margin:25px 0}.stat{background:var(--paper);border:1px solid var(--line);border-radius:10px;padding:16px 20px;min-width:140px;flex:1}.stat strong{display:block;font-size:28px;line-height:1.4}.stat span{font-size:12px;color:var(--muted)}.question-meta{display:flex;gap:10px;align-items:center;justify-content:space-between;flex-wrap:wrap;font-size:12px;color:var(--muted)}.options{display:grid;gap:10px;margin:23px 0}.option{display:flex;gap:12px;text-align:left;width:100%;padding:15px 17px;font-size:16px}.option span:first-child{font:12px/1.6 Consolas;border:1px solid var(--line);padding:2px 7px;border-radius:4px;align-self:start}.option.selected{border:2px solid var(--accent);background:var(--soft);padding:14px 16px}.option.correct{border-color:var(--accent);background:var(--soft)}.option.incorrect{border-color:var(--gold);background:var(--warm)}.feedback{background:var(--soft);border-left:3px solid var(--accent);padding:20px 24px;border-radius:0 10px 10px 0;margin:25px 0}.feedback.wrong{background:var(--warm);border-color:var(--gold)}.analysis-item{padding:18px 0;border-top:1px solid var(--line);font-size:15px}.analysis-item strong{display:block}.search{width:100%;margin:15px 0 25px}.term{border:0;border-bottom:1px dotted var(--accent);border-radius:0;padding:0 2px;background:transparent;color:var(--accent);font-size:inherit;line-height:inherit;text-align:left}.gloss-card{background:var(--paper);border:1px solid var(--line);border-radius:10px;padding:20px}.gloss-card h2{font-size:20px;margin:0 0 12px}.gloss-card p{font-size:15px}.diagram{background:var(--paper);border:1px solid var(--line);border-radius:12px;padding:18px;margin:25px 0}.diagram svg{display:block;width:100%;height:auto;max-height:380px}.diagram svg text{font:600 14px 'Segoe UI',sans-serif;fill:var(--ink)}.diagram svg .sub{font-size:11px;fill:var(--muted);font-weight:400}.diagram .node rect,.diagram .box{fill:var(--bg);stroke:var(--line);stroke-width:1.4}.diagram .accent rect,.diagram .highlight{fill:var(--soft);stroke:var(--accent)}.diagram .edge{stroke:var(--muted);stroke-width:1.6;fill:none}.diagram .inherit,.diagram .realize{stroke:var(--muted)}.diagram .realize{stroke-dasharray:5 4}.diagram .triangle{fill:var(--paper);stroke:var(--muted);stroke-width:1.3}.diagram .edge-label{font-size:10px;fill:var(--muted);font-weight:400}.diagram .outer{fill:var(--soft)}.diagram .middle{fill:var(--paper)}.diagram .inner{fill:var(--bg)}.diagram .layer{stroke:var(--line);stroke-width:1.5}figcaption{font-size:13px;color:var(--muted);line-height:1.7;margin-top:14px}.zoom{font-size:12px;display:block;margin:0 0 22px auto}.flow{display:grid;gap:7px}.flow-node{border:1px solid var(--line);border-radius:8px;padding:12px 17px;background:var(--paper);font-size:15px}.flow-node.active{border-color:var(--accent);background:var(--soft)}.flow-arrow{font:18px/1 Consolas;text-align:center;color:var(--accent)}.lab-controls{display:flex;gap:12px;flex-wrap:wrap;align-items:end;margin:20px 0}.lab-controls label{display:grid;gap:5px;font-size:13px;min-width:110px;flex:1}.lab-controls input{width:100%}.lab-controls button{min-height:44px}.lab-output{background:var(--soft);padding:18px 22px;border-radius:8px;margin:17px 0;overflow-wrap:anywhere}.big-number{font:600 33px/1.5 Consolas,monospace}.trace-controls{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin:18px 0}.trace-controls output{font:13px Consolas;margin-left:auto}.trace-message{font-size:15px;min-height:80px;background:var(--soft);padding:17px;border-radius:8px}.table-wrap{overflow-x:auto}table{border-collapse:collapse;font-size:14px;width:100%;margin:20px 0}th,td{padding:12px 14px;text-align:left;border-bottom:1px solid var(--line);vertical-align:top}th{background:var(--soft)}.badge{display:inline-block;border:1px solid var(--line);border-radius:5px;padding:2px 7px;font-size:11px}.source-card{border-bottom:1px solid var(--line);padding:18px 0}.source-card h3{font-size:17px}.source-card p{font-size:13px}.hash{font:11px/1.6 Consolas;overflow-wrap:anywhere;color:var(--muted)}.empty{padding:30px;border:1px dashed var(--muted);border-radius:12px;color:var(--muted)}#modal{width:min(950px,calc(100vw - 24px));max-height:90dvh;overflow:auto;border:1px solid var(--line);border-radius:15px;background:var(--paper);color:var(--ink);padding:28px}#modal::backdrop{background:#102b3e88}#modal .diagram svg{max-height:none}#modal .close{float:right;position:sticky;top:0;font-size:24px;width:40px;height:40px;padding:0;z-index:1}#modal-content{clear:both}#toast{position:fixed;bottom:20px;left:50%;transform:translateX(-50%);background:var(--nav);color:#fff;padding:14px 22px;border-radius:9px;max-width:calc(100vw - 24px);z-index:100;font-size:14px}.fade{animation:enter .25s cubic-bezier(.16,1,.3,1)}@keyframes enter{from{opacity:.3;transform:translateY(5px)}to{opacity:1;transform:translateY(0)}}[hidden]{display:none!important}footer{color:var(--muted);font-size:12px;border-top:1px solid var(--line);margin-top:45px;padding-top:18px}.dark{--bg:#142430;--paper:#1c303f;--ink:#e3edf2;--muted:#b0c3ce;--line:#3b5362;--accent:#8ed5bf;--soft:#25463f;--gold:#edb987;--warm:#48382d;--nav:#0e1d28;--code:#0e202d;color-scheme:dark}.dark .primary{color:#102a24}.dark .primary:hover{background:#a4e1d0}.dark .tabs button.active{color:var(--accent)}.dark .lesson-link.active{background:#284c5b}.dark .mark{color:#d6eee5}.dark .diagram .triangle{fill:var(--paper)}
.article,.lesson-layout,.lab-controls label,.grid>*{min-width:0}.lab-controls select{width:100%;min-width:0}.article{overflow-wrap:break-word}.lab-controls input[type=checkbox]{width:22px;height:22px;justify-self:start}#modal-content .diagram{overflow:auto}#modal .diagram svg{min-width:720px}.supplement{margin:32px 0;padding-top:6px;border-top:1px solid var(--line)}
@media(min-width:1500px){#main{padding-left:65px}}@media(max-width:1250px){.contents{display:none}.lesson-layout{grid-template-columns:minmax(0,1fr)}#main{padding:32px}.tabs button{padding:9px 7px}#header{gap:10px;padding:12px 18px}.brand{font-size:15px}.brand small{font-size:8px}}
@media(max-width:950px){#header{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:7px 10px}.tabs{grid-column:1/-1;grid-row:2;justify-content:flex-start;overflow-x:auto}.tabs button{font-size:12px;flex-shrink:0}.menu{display:inline-block;padding:5px 9px}.brand small{display:none}.mark{width:30px;height:30px;font-size:17px}.brand{gap:8px}.header-tools button{font-size:11px;padding:7px}.layout{grid-template-columns:1fr}#sidebar{display:none;position:fixed;top:var(--header-height,105px);left:0;width:290px;bottom:0;height:calc(100dvh - var(--header-height,105px));background:var(--bg);z-index:25;box-shadow:12px 0 35px #0003}#sidebar.open{display:block}#main{padding:27px 22px 65px}body{font-size:16px}.lead{font-size:18px}.article{max-width:850px}}
@media(max-width:600px){.grid{grid-template-columns:1fr}#main{padding:23px 16px 60px}.panel,.exercise{padding:19px}.callout{padding:16px 18px}.diagram{padding:10px}.diagram svg{min-width:0}h2{font-size:23px}.stats{gap:8px}.stat{padding:13px;min-width:125px}.option{font-size:15px;padding:13px}.option.selected{padding:12px}.feedback{padding:18px}.lab-controls label{min-width:100px}.lesson-bottom button{font-size:13px}.header-tools{gap:4px}.brand{font-size:14px}.header-tools button{padding:6px}.table-wrap th,.table-wrap td{min-width:140px}pre{font-size:12px;padding:16px}.source-label{font-size:11px}}
@media(prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important;scroll-behavior:auto!important}}@media print{#header,#sidebar,.contents,.toolbar,.zoom,.lesson-bottom{display:none!important}.layout,.lesson-layout{display:block}#main{padding:0;max-width:none}body{background:#fff;color:#000}.panel,.diagram,.exercise,pre{break-inside:avoid}}
section[id^="assignment"],details[id^="assignment"]{scroll-margin-top:calc(var(--header-height,90px) + 20px)}
[data-extra-variant]{width:20px;height:20px;vertical-align:middle;accent-color:var(--accent)}
