.ml-lab{margin-block:var(--space-4);padding:var(--space-3);border:1px solid var(--color-border);background:var(--color-surface);box-shadow:var(--shadow-soft);border-radius:16px}.ml-lab .ml-eyebrow{margin-bottom:var(--space-1);color:var(--color-accent);font-size:var(--text-xs);letter-spacing:.08em;text-transform:uppercase;font-weight:700;display:block}.ml-lab h3{margin:0 0 var(--space-2);color:var(--color-text);font-size:var(--text-lg)}.ml-lab>p{max-width:68ch;margin:0 0 var(--space-2);color:var(--color-muted);line-height:1.7}.ml-lab .ml-lab-check{margin-top:var(--space-3);padding-top:var(--space-2);border-top:1px dashed var(--color-border)}.ml-lab .ml-lab-check summary{color:var(--color-text);cursor:pointer;font-size:var(--text-sm);font-weight:600}.ml-lab .ml-lab-check p{margin:var(--space-1) 0 0;color:var(--color-muted)}.ml-lab .ml-slider{margin-bottom:var(--space-2);color:var(--color-text);font-size:var(--text-sm);flex-direction:column;gap:4px;font-weight:600;display:flex}.ml-lab .ml-slider>span{justify-content:space-between;display:flex}.ml-lab .ml-slider output{color:var(--color-accent);font-variant-numeric:tabular-nums}.ml-lab .ml-slider input[type=range]{width:100%;accent-color:var(--color-accent)}.ml-lab .ml-lab-choices{gap:var(--space-1);margin-bottom:var(--space-2);flex-wrap:wrap;display:flex}.ml-lab .ml-lab-choices button{border:1px solid var(--color-border);background:var(--color-surface);min-height:40px;color:var(--color-muted);font-size:var(--text-sm);cursor:pointer;border-radius:999px;padding:6px 14px;transition:border-color .15s,color .15s}.ml-lab .ml-lab-choices button:hover{border-color:var(--color-accent)}.ml-lab .ml-lab-choices button[aria-pressed=true]{border-color:var(--color-accent);background:var(--color-surface-soft);color:var(--color-accent);font-weight:600}.ml-lab .ml-lab-metrics{gap:var(--space-2);margin-block:var(--space-2);grid-template-columns:repeat(auto-fit,minmax(120px,1fr));display:grid}.ml-lab .ml-lab-metrics>div{padding:var(--space-2);border:1px solid var(--color-border);background:var(--color-surface-soft);border-radius:10px}.ml-lab .ml-lab-metrics span{color:var(--color-muted);font-size:var(--text-xs);margin-bottom:2px;display:block}.ml-lab .ml-lab-metrics strong{color:var(--color-text);font-size:var(--text-base);font-variant-numeric:tabular-nums}.ml-lab .ml-lab-grid{align-items:start;gap:var(--space-3);margin-block:var(--space-2);grid-template-columns:minmax(0,1fr) minmax(0,1fr);display:grid}.ml-lab .ml-lab-table{margin-block:var(--space-2);overflow-x:auto}.ml-lab .ml-lab-table .is-best{outline:1px solid var(--color-accent);outline-offset:-1px;color:var(--color-text);font-weight:600}.ml-lab .ml-lab-note{margin-top:var(--space-2);padding-top:var(--space-2);border-top:1px solid var(--color-border);color:var(--color-muted);font-size:var(--text-sm)}.ml-lab .ml-lab-formula{margin-block:var(--space-2);padding:var(--space-2);border:1px solid var(--color-border);background:var(--color-surface-soft);color:var(--color-text);font-family:SF Mono,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:var(--text-sm);border-radius:10px}.ml-lab figure{margin:0}.ml-lab figcaption{color:var(--color-muted);font-size:var(--text-xs);text-align:center;margin-top:4px}.ml-lab svg{width:100%;height:auto}.ml-lab svg text{fill:var(--color-muted);font-size:11px}.ml-lab .ml-split-rows{margin-block:var(--space-2);grid-template-columns:repeat(4,minmax(0,1fr));gap:6px;display:grid}.ml-lab .ml-data-cell{padding:var(--space-1);border:1px solid var(--color-border);background:var(--color-surface-soft);text-align:center;font-size:var(--text-xs);border-radius:8px}.ml-lab .ml-data-cell strong{color:var(--color-text);font-size:var(--text-sm);display:block}.ml-lab .ml-data-cell span{color:var(--color-muted)}.ml-lab .ml-data-cell.is-validation{border-color:var(--color-accent);box-shadow:inset 0 0 0 1px var(--color-accent)}.ml-lab .ml-encoding-vector{margin-block:var(--space-2);gap:6px;display:flex}.ml-lab .ml-encoding-vector>div{padding:var(--space-2);border:1px solid var(--color-border);background:var(--color-surface-soft);text-align:center;border-radius:8px;flex:1}.ml-lab .ml-encoding-vector span{color:var(--color-muted);font-size:var(--text-xs);display:block}.ml-lab .ml-encoding-vector strong{color:var(--color-text);font-size:var(--text-lg)}.ml-lab .ml-encoding-vector>div.is-active{border-color:var(--color-accent);background:var(--color-surface)}.ml-lab .ml-encoding-vector>div.is-active strong{color:var(--color-accent)}.ml-lab .ml-fold-blocks{margin-block:var(--space-2);grid-template-columns:repeat(3,minmax(0,1fr));gap:6px;display:grid}.ml-lab .ml-fold-block{padding:var(--space-2);border:1px solid var(--color-border);background:var(--color-surface-soft);text-align:center;font-size:var(--text-xs);border-radius:8px}.ml-lab .ml-fold-block strong{color:var(--color-text);font-size:var(--text-sm);display:block}.ml-lab .ml-fold-block span{color:var(--color-muted);display:block}.ml-lab .ml-fold-block small{color:var(--color-muted);font-size:10px}.ml-lab .ml-fold-block.is-validation{border-color:var(--color-accent)}.ml-lab .ml-fold-block.is-reserved{opacity:.75;border-style:dashed}.ml-lab .ml-axis{fill:none;stroke:var(--color-border);stroke-width:1.5px}.ml-lab .ml-gridline{stroke:var(--color-border);stroke-width:1px;stroke-dasharray:2 4}.ml-lab .ml-curve{fill:none;stroke:var(--color-accent);stroke-width:2.5px;stroke-linecap:round;stroke-linejoin:round}.ml-lab .ml-curve-secondary{fill:none;stroke:var(--color-muted);stroke-width:2px;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:5 4}.ml-lab .ml-threshold-line{stroke:var(--color-accent);stroke-width:1.5px;stroke-dasharray:4 3}.ml-lab .ml-dot{fill:var(--color-accent);stroke:var(--color-surface);stroke-width:1.5px}.ml-lab .ml-hollow-dot{fill:var(--color-surface);stroke:var(--color-accent);stroke-width:2px}.ml-lab .ml-marker{fill:var(--color-accent);stroke:var(--color-surface);stroke-width:2px}.ml-lab .ml-shape-flow{align-items:center;gap:var(--space-1);flex-wrap:wrap;display:flex}.ml-lab .ml-shape-node{min-width:84px;padding:var(--space-2);border:1px solid var(--color-border);background:var(--color-surface-soft);color:var(--color-muted);text-align:center;font-size:var(--text-xs);border-radius:10px}.ml-lab .ml-shape-node strong{color:var(--color-text);font-size:var(--text-sm);margin-top:2px;display:block}.ml-lab .ml-shape-step{align-items:center;gap:var(--space-1);display:flex}.ml-lab .ml-shape-arrow{color:var(--color-muted);text-align:center;white-space:nowrap;padding-inline:4px;font-size:10px}.ml-lab .ml-shape-arrow:before{color:var(--color-accent);content:"→";font-size:16px;display:block}.ml-lab :is(button,input,summary):focus-visible{outline:2px solid var(--color-accent);outline-offset:3px}@media (max-width:640px){.ml-lab{padding:var(--space-2)}.ml-lab .ml-lab-grid{grid-template-columns:minmax(0,1fr)}.ml-lab .ml-split-rows,.ml-lab .ml-fold-blocks{grid-template-columns:repeat(2,minmax(0,1fr))}.ml-lab .ml-encoding-vector{flex-wrap:wrap}.ml-lab .ml-encoding-vector>div{flex-basis:45%}}
.ml-lesson{padding-block:var(--space-4) var(--space-5)}.ml-lesson h1{max-width:920px;margin:0 0 var(--space-3);letter-spacing:-.04em;text-wrap:balance;font-size:clamp(30px,4vw,44px);line-height:1.2}.ml-lesson p,.ml-lesson li{color:var(--color-muted);line-height:1.8}.ml-lesson strong,.ml-lesson h2,.ml-lesson h3{color:var(--color-text)}.ml-lesson .ml-lesson-summary,.ml-lesson .ml-prerequisites,.ml-lesson .ml-lesson-section>p{max-width:76ch}.ml-lesson .ml-prerequisites{font-size:var(--text-sm)}.ml-lesson .ml-lesson-goals,.ml-lesson .ml-lesson-pitfalls{margin-block:var(--space-4);padding:var(--space-3);border:1px solid var(--color-border);border-left:3px solid var(--color-accent);background:var(--color-surface-soft);border-radius:12px}.ml-lesson .ml-lesson-goals h2,.ml-lesson .ml-lesson-pitfalls h2{margin:0 0 var(--space-2);font-size:var(--text-lg)}.ml-lesson ul,.ml-lesson ol{padding-left:var(--space-3)}.ml-lesson li+li{margin-top:var(--space-1)}.ml-lesson .ml-lesson-workflow{gap:var(--space-3);padding-left:var(--space-3);margin-block:var(--space-4);grid-template-columns:repeat(4,minmax(0,1fr));display:grid}.ml-lesson .ml-lesson-workflow li{padding:var(--space-2) var(--space-1);border-bottom:2px solid var(--color-border);font-size:var(--text-sm);margin:0;font-weight:600}.ml-lesson .ml-lesson-workflow li::marker{color:var(--color-accent)}.ml-lesson .ml-lesson-contents{gap:10px var(--space-3);padding-block:var(--space-3);border-block:1px solid var(--color-border);flex-wrap:wrap;display:flex}.ml-lesson a{color:var(--color-accent);text-underline-offset:4px}.ml-lesson .ml-lesson-contents a{font-size:var(--text-sm)}.ml-lesson .ml-lesson-section{width:100%;max-width:none;min-height:auto;margin:var(--space-5) 0 0;scroll-margin-top:var(--space-3);display:block}.ml-lesson .ml-lesson-section h2{margin:0 0 var(--space-2);font-size:clamp(21px,2.4vw,27px);line-height:1.35}.ml-lesson pre{max-width:100%;padding:var(--space-3);border:1px solid var(--color-border);background:var(--color-surface-soft);color:var(--color-text);font-size:var(--text-sm);tab-size:4;border-radius:12px;line-height:1.8;overflow:auto}.ml-lesson .ml-lesson-example{max-height:680px}.ml-lesson .ml-lesson-table{margin-block:var(--space-3);overflow-x:auto}.ml-lesson table{border-collapse:collapse;text-align:left;width:100%;font-size:14px}.ml-lesson caption{padding-bottom:var(--space-2);color:var(--color-muted);text-align:left}.ml-lesson th,.ml-lesson td{min-width:140px;padding:var(--space-2);border:1px solid var(--color-border);vertical-align:top}.ml-lesson th{color:var(--color-text);background:var(--color-surface-soft)}.ml-lesson td{color:var(--color-muted)}.ml-lesson .ml-lesson-reference{font-size:var(--text-sm)}.ml-lesson .ml-download-example{min-height:44px;margin-block:var(--space-2);font-size:var(--text-sm);align-items:center;font-weight:600;display:inline-flex}.ml-lesson .ml-exercises>li{padding-left:var(--space-1);margin-top:var(--space-3)}.ml-lesson .ml-exercises p{margin:0 0 var(--space-1)}.ml-lesson details{padding:var(--space-2) var(--space-3);border-bottom:1px solid var(--color-border)}.ml-lesson summary{padding-block:var(--space-1);color:var(--color-text);cursor:pointer;font-weight:600}.ml-lesson :is(a,pre,summary,.ml-lesson-table):focus-visible{outline:2px solid var(--color-accent);outline-offset:4px}@media (max-width:640px){.ml-lesson .ml-lesson-workflow{grid-template-columns:repeat(2,minmax(0,1fr))}.ml-lesson pre,.ml-lesson .ml-lesson-goals,.ml-lesson .ml-lesson-pitfalls,.ml-lesson details{padding:var(--space-2)}}
.ml-week-page .ml-upcoming-lesson{padding-block:var(--space-5)}.ml-week-page .ml-upcoming-lesson h1{max-width:900px;margin:0 0 var(--space-3);color:var(--color-text);letter-spacing:-.04em;text-wrap:balance;font-size:clamp(30px,4vw,44px);line-height:1.2}.ml-week-page .ml-week-label{margin:0 0 var(--space-2);color:var(--color-accent);font-size:var(--text-sm);font-weight:600}.ml-week-page .ml-upcoming-note{max-width:var(--content-width);margin-top:var(--space-4);padding:var(--space-4);border:1px solid var(--color-border);background:var(--color-surface);border-radius:16px}.ml-week-page .ml-upcoming-status{border:1px solid var(--color-border);color:var(--color-muted);font-size:var(--text-xs);border-radius:999px;padding:4px 12px;display:inline-block}.ml-week-page .ml-upcoming-note h2{margin:var(--space-3) 0 var(--space-1);font-size:var(--text-lg)}.ml-week-page .ml-upcoming-note p{margin:0 0 var(--space-3);color:var(--color-muted);line-height:1.8}.ml-week-page .ml-upcoming-note a{min-height:44px;color:var(--color-accent);text-underline-offset:4px;align-items:center;display:inline-flex}.ml-week-page .ml-week-pagination{gap:var(--space-3);padding-top:var(--space-4);border-top:1px solid var(--color-border);grid-template-columns:repeat(2,minmax(0,1fr));display:grid}.ml-week-page .ml-week-pagination a{gap:var(--space-1);padding:var(--space-3);border:1px solid var(--color-border);background:var(--color-surface);border-radius:12px;flex-direction:column;text-decoration:none;display:flex}.ml-week-page .ml-week-pagination a:hover{border-color:var(--color-accent)}.ml-week-page .ml-week-pagination span{color:var(--color-accent);font-size:var(--text-sm)}.ml-week-page .ml-week-pagination strong{color:var(--color-text);font-size:15px}.ml-week-page .ml-next-week{text-align:right;grid-column:2}@media (max-width:640px){.ml-week-page .ml-week-pagination{gap:var(--space-2);grid-template-columns:minmax(0,1fr)}.ml-week-page .ml-next-week{text-align:left;grid-column:auto}.ml-week-page .ml-upcoming-note{padding:var(--space-3)}}
