:root{--brand:#060633;--accent:#0084ff;--paper:#f4f6fb;--surface:#ffffff;--ink:#14163d;--muted:#555a7a;--line:#dde1ee;--board:#060633;--board-deep:#03031f;--silk:#eef4ff;--flow:#5ec2ff;--led:#ff4b3a;--pcb:#0d5c3a;--pcb-deep:#08402a;--code-bg:#0b0d33;--code-ink:#e8ecff;--band:var(--accent);--button:#ffb300;--button-hover:#f59f00;--button-ink:#fff;--font-body:"Google Sans",system-ui,sans-serif;--font-display:var(--font-body);--font-mono:var(--font-jbmono),ui-monospace,monospace;--step--1:0.875rem;--step-0:1.125rem;--step-1:1.375rem;--step-2:1.75rem;--step-3:2.375rem;--step-4:clamp(2.75rem,7vw,5.25rem);--measure:68ch;--gutter:clamp(16px,4vw,40px);color-scheme:light}@media (prefers-color-scheme:dark){:root:not([data-theme=light]){--accent:#3d9fff;--paper:#141517;--surface:#202124;--ink:#ececee;--muted:#a9abb2;--line:#34363b;--board:#26282c;--board-deep:#1a1b1e;--code-bg:#0f1012;color-scheme:dark}}:root[data-theme=dark]{--accent:#3d9fff;--paper:#141517;--surface:#202124;--ink:#ececee;--muted:#a9abb2;--line:#34363b;--board:#26282c;--board-deep:#1a1b1e;--code-bg:#0f1012;color-scheme:dark}*,:after,:before{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{margin:0;background:var(--paper);color:var(--ink);font-family:var(--font-body);font-size:var(--step-0);line-height:1.6;overflow-x:hidden}iframe,img,svg{max-width:100%}a{color:inherit;-webkit-text-decoration-color:var(--accent);text-decoration-color:var(--accent);text-underline-offset:.18em;text-decoration-thickness:2px}:focus-visible{outline:3px solid var(--accent);outline-offset:3px;border-radius:4px}b,strong{font-weight:600}h1,h2,h3{font-family:var(--font-display);line-height:1.1;letter-spacing:-.02em;text-wrap:balance}h1{font-size:var(--step-3);margin:0 0 .4em}h1,h2{font-weight:600}h2{font-size:var(--step-2);margin:2.2em 0 .5em}h3{font-size:var(--step-1);font-weight:600;margin:1.8em 0 .4em}.skip{position:absolute;left:-999px}.skip:focus{left:16px;top:16px;padding:8px 12px;z-index:10}.site-header,.skip:focus{background:var(--surface)}.site-header{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:12px 24px;padding:14px var(--gutter);border-bottom:1px solid var(--line)}.wordmark{display:inline-flex;align-items:center;text-decoration:none}.wordmark img{display:block;width:auto;height:52px}.wordmark .logo-dark{display:none;height:44px}@media (prefers-color-scheme:dark){:root:not([data-theme=light]) .wordmark .logo-light{display:none}:root:not([data-theme=light]) .wordmark .logo-dark{display:block}}:root[data-theme=dark] .wordmark .logo-light{display:none}:root[data-theme=dark] .wordmark .logo-dark{display:block}@media (prefers-color-scheme:dark){:root:not([data-theme=light]) .site-header{--surface:#0084ff;--ink:#fff;--line:transparent;--paper:rgba(255,255,255,0.15);--accent:#fff}}:root[data-theme=dark] .site-header{--surface:#0084ff;--ink:#fff;--line:transparent;--paper:rgba(255,255,255,0.15);--accent:#fff}.site-header nav{align-items:center}.theme-toggle{display:inline-grid;place-items:center;width:36px;height:36px;padding:0;border:1px solid var(--line);border-radius:50%;background:var(--paper);color:var(--ink);cursor:pointer}.theme-toggle:hover{border-color:var(--accent);color:var(--accent)}.site-header nav{display:flex;flex-wrap:wrap;gap:4px 20px;font-size:var(--step--1);font-weight:500}.site-header nav a{text-decoration:none;padding:4px 0;border-bottom:2px solid transparent}.site-header nav a:hover{border-bottom-color:var(--accent)}.site-footer{margin-top:96px;padding:32px var(--gutter) 48px;border-top:1px solid var(--line);color:var(--muted);font-size:var(--step--1);display:flex;flex-wrap:wrap;justify-content:space-between;gap:12px 32px}.site-footer p{margin:0;display:flex;gap:20px;flex-wrap:wrap}main{padding:0 var(--gutter)}.btn{display:inline-block;font-family:var(--font-display);font-weight:500;font-size:1.05rem;padding:.7em 1.2em;border-radius:999px;background:var(--button);text-decoration:none;border:2px solid var(--button)}.btn,.btn:hover{color:var(--button-ink)}.btn:hover{background:var(--button-hover);border-color:var(--button-hover)}.btn-quiet{border-color:var(--ink)}.btn-quiet,.btn-quiet:hover{background:transparent;color:var(--ink)}.btn-quiet:hover{border-color:var(--accent)}.link-button{background:none;border:0;padding:0;font:inherit;color:inherit;text-decoration:underline;-webkit-text-decoration-color:var(--accent);text-decoration-color:var(--accent);cursor:pointer}.hero-banner{position:relative;overflow:hidden;margin:0 calc(-1 * var(--gutter));background:#fff;border-bottom:1px solid var(--line)}.banner-circuit{position:absolute;inset:0;width:100%;height:100%;pointer-events:none}.hero-inner{position:relative;z-index:1;display:grid;grid-template-columns:minmax(0,1fr) minmax(0,420px);align-items:center;grid-gap:clamp(16px,4vw,48px);gap:clamp(16px,4vw,48px);max-width:1240px;margin:0 auto;padding:clamp(16px,3vw,28px) var(--gutter)}.hero-art{display:block;width:100%;height:auto;max-height:330px;object-fit:contain}.hero-lede{font-size:var(--step-1);line-height:1.45;max-width:40ch;color:#2b2f55;margin:0 0 1.4em}.hero-actions{display:flex;flex-wrap:wrap;gap:12px;margin:0}.hero-banner .btn-quiet,.hero-banner .btn-quiet:hover{color:#14163d;border-color:#14163d}@media (max-width:759px){.hero-inner{grid-template-columns:1fr}.hero-art-wrap{order:-1}.hero-art{max-height:200px;margin:0 auto}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.tryit-bubble{position:fixed;right:16px;bottom:16px;z-index:20;display:flex;align-items:flex-start;animation:tryit-in .3s ease-out}.tryit-open{display:flex;align-items:center;gap:10px;max-width:240px;padding:12px 16px;border:0;border-radius:16px 16px 4px 16px;background:var(--button);color:var(--button-ink);font:inherit;font-size:var(--step--1);line-height:1.3;text-align:left;cursor:pointer;box-shadow:0 8px 24px color-mix(in srgb,var(--brand) 30%,transparent)}.tryit-open:hover{background:var(--button-hover)}.tryit-spark{font-size:1.5rem}.tryit-x{flex:none;width:28px;height:28px;margin-left:-10px;margin-top:-10px;border:0;border-radius:50%;background:#fff;color:var(--brand);box-shadow:0 2px 8px rgba(0,0,0,.25);font-size:1.1rem;line-height:1;cursor:pointer}.tryit-panel{--ink:var(--silk);--paper:var(--board-deep);position:fixed;right:16px;bottom:16px;z-index:20;width:min(360px,calc(100vw - 32px));max-height:calc(100vh - 32px);overflow-y:auto;padding:18px 18px 16px;border-radius:18px;background:var(--board);color:var(--silk);box-shadow:0 0 0 3px var(--accent),0 16px 40px rgba(0,0,0,.35);animation:tryit-in .22s ease-out}.tryit-panel .tryit-x{position:absolute;top:10px;right:10px;margin:0}.tryit-panel h2{margin:0 36px 6px 0;font-size:var(--step-1);outline:none}.tryit-note{margin:0 0 8px;font-size:var(--step--1);line-height:1.45;opacity:.9}.tryit-next{width:100%;margin-top:12px}.tryit-picks{list-style:none;margin:8px 0 12px;padding:0;display:grid;grid-gap:8px;gap:8px}.tryit-picks a{display:flex;align-items:center;gap:12px;padding:10px 12px;border-radius:12px;background:rgba(255,255,255,.08);text-decoration:none}.tryit-picks a:hover{background:rgba(255,255,255,.16)}.tryit-picks .card-icon{--band:#fff;--surface:transparent;width:40px;height:40px}.tryit-hint{display:block;opacity:.8}.tryit-hint,.tryit-panel .link-button{font-size:var(--step--1)}@keyframes tryit-in{0%{opacity:0;transform:translateY(12px)}}@media (prefers-reduced-motion:reduce){.tryit-bubble,.tryit-panel{animation:none}}.ohms-lab{margin:0}.lesson .ohms-lab,.prose .ohms-lab{--ink:var(--silk);--paper:var(--board-deep);background:var(--board);color:var(--silk);border-radius:16px;padding:clamp(16px,3vw,28px);margin:2em 0}.ohms-lab svg{display:block;width:100%;height:auto}.svg-label{font-family:var(--font-display);font-weight:600;font-size:15px;fill:var(--ink)}.flow{animation:flow linear infinite}@keyframes flow{to{stroke-dashoffset:-32}}@media (prefers-reduced-motion:reduce){.flow{animation:none}}.ohms-controls{display:grid;grid-gap:6px;gap:6px;margin-top:12px}.ohms-controls label{display:flex;justify-content:space-between;gap:12px;font-size:var(--step--1);font-weight:500;margin-top:6px}.ohms-controls output{font-family:var(--font-mono);font-weight:600;color:#ffd59a}.ohms-controls input[type=range]{width:100%;accent-color:var(--accent);height:28px}.ohms-readout{margin:10px 0 0;font-size:var(--step-0);line-height:1.45}.ohms-readout strong{font-family:var(--font-display);font-size:var(--step-1);color:#ffd59a;margin-right:4px}.acdc-switch{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:8px}.acdc-switch button{font:inherit;font-weight:500;font-size:var(--step--1);padding:.45em 1em;border-radius:999px;border:2px solid rgba(255,255,255,.45);background:transparent;color:var(--silk);cursor:pointer}.acdc-switch button[aria-pressed=true]{background:var(--button);border-color:var(--button);color:var(--button-ink)}.svg-small{font-family:var(--font-display);font-size:12px;fill:var(--ink)}.acdc-tilde{font-size:30px}.acdc-way{font-size:13px;font-weight:500}.anim-panel svg{max-width:560px;margin:0 auto}.graph-axis{stroke:var(--ink);stroke-width:1.5;opacity:.7}.graph-guide{stroke:var(--ink);stroke-width:1;stroke-dasharray:4 4;opacity:.4}.graph-title{font-size:13px;font-weight:500}.tank-label{font-size:14px;font-weight:500}.tank-label.is-high{fill:#ffd59a}.ground-label{fill:#fff;opacity:.85}.shock-person{fill:none;stroke:color-mix(in srgb,#ff4b3a calc(var(--hurt, 0) * 100%),var(--silk));stroke-width:6;stroke-linecap:round;stroke-linejoin:round}.shock-person circle{fill:var(--paper)}.anim-panel .ohms-readout strong{font-size:inherit;margin-right:0}.bb-strip{fill:#7fd36b;opacity:.75}.bb-label{font-family:var(--font-display);font-size:11px;fill:#55524a}.cc-val{fill:#ffd59a}.led-batt{font-family:var(--font-display);font-weight:600;font-size:14px;fill:#111}.buzz-text{fill:#ffd23f}.lcd-text{font-family:var(--font-mono);font-size:9.5px;fill:#10260a;white-space:pre}.drop-in{animation:drop-in .35s ease-out}@keyframes drop-in{0%{transform:translateY(-24px);opacity:0}}@media (prefers-reduced-motion:reduce){.drop-in{animation:none}}.brain-rule{fill:#ffd59a;font-weight:500}.ac-digits{font-family:var(--font-mono);font-size:14px;fill:#9bd36b}.dep-neg{fill:#ffb4c8}.dep-pos{fill:#9ec3ff}.uno-explorer{position:relative;max-width:560px;margin:0 auto}.uno-explorer-stage{position:absolute;top:0;left:50%;width:400px;height:300px;translate:-50% 0;transform-origin:top center}.esp-overlay,.uno-explorer-overlay{position:absolute;inset:0}.uno-explorer-overlay{pointer-events:none}.stepper{display:grid;grid-template-columns:minmax(0,1.5fr) minmax(0,1fr);grid-gap:12px;gap:12px;align-items:start}@media (max-width:560px){.stepper{grid-template-columns:1fr}}.prose .stepper-code{margin:0;padding:10px 0;font-size:.82rem;line-height:1.55;overflow-x:auto}.stepper-code>div{padding:0 12px 0 4px;white-space:pre}.stepper-code>.is-now{background:rgba(255,179,0,.22)}.stepper-arrow{display:inline-block;width:1.4em;color:#ffb300}.stepper-side{display:grid;grid-gap:10px;gap:10px}.stepper-box{background:var(--board-deep);border-radius:10px;padding:8px 12px;font-size:var(--step--1)}.stepper-title{font-weight:500;opacity:.8;margin-bottom:4px}.stepper-var{display:flex;justify-content:space-between;font-family:var(--font-mono)}.stepper-var output{color:#ffd59a}.stepper-led{display:flex;align-items:center;gap:8px}.ohms-lab .stepper-led svg{width:40px;height:40px;flex:none}.prose .stepper-serial{margin:0;padding:0;background:none;color:#b8ffcf;font-size:.8rem}.upload-code{font-family:var(--font-mono);font-size:7.5px;fill:#9bd36b}.upload-btn,.upload-small{font-family:var(--font-display);font-size:8px;fill:#fff}.upload-bit{font-size:11px;font-weight:600;fill:#ffd23f}.type-value,.upload-bit{font-family:var(--font-mono)}.type-value{font-size:16px;fill:#9bd36b}.type-value.is-wrapped{fill:#ffd23f}.dht-bit{font-family:var(--font-mono);font-size:12px;fill:var(--ink);opacity:.4}.dht-bit.is-sent{fill:#ffd59a;opacity:1}.rfid-serial{font-family:var(--font-mono);font-size:13px;fill:#b8ffcf}.txrx-msg{font-size:10px;fill:#111}.txrx-msg,.ws-page{font-family:var(--font-display);font-weight:600}.ws-page{font-size:11px;fill:#14163d}.ws-board{font-family:var(--font-display);font-size:10px;font-weight:600;fill:#fff}.is-now-text{fill:#ffd59a;font-weight:600}.oled-text{font-size:10px;fill:#c8ebff}.ble-uuid,.oled-text{font-family:var(--font-mono)}.ble-uuid{font-size:8px;fill:#e8ecff}.playground{display:grid;grid-template-columns:1fr 1fr;grid-gap:10px;gap:10px}@media (max-width:560px){.playground{grid-template-columns:1fr}}.playground-code,.playground-page{display:grid;grid-gap:4px;gap:4px;font-size:var(--step--1);font-weight:500}.playground textarea{font-family:var(--font-mono);font-size:.82rem;line-height:1.5;background:var(--code-bg);color:var(--code-ink);padding:10px;resize:vertical}.playground iframe,.playground textarea{min-height:220px;border:0;border-radius:10px}.playground iframe{width:100%;height:100%;background:#fff}.track-part h2{margin:1.6em 0 .7em;font-weight:600}.track-links{display:flex;flex-wrap:wrap;gap:8px 18px;margin:-.6em 0 1.4em;font-weight:500}.lesson-tip{max-width:var(--measure);margin:0 auto 1.2em;padding:12px 16px;border-left:4px solid var(--accent);border-radius:8px;background:color-mix(in srgb,var(--accent) 8%,var(--surface))}.lesson-tip strong{font-weight:600}.gadget textarea{min-height:360px}.gadget-phone{justify-self:center;width:290px;padding:26px 10px;border-radius:30px;background:#1b1d22;box-shadow:inset 0 0 0 2px #3a3d45}.gadget-screen{width:270px;height:420px;overflow:hidden;border-radius:8px;background:#fff}.playground .gadget-screen iframe{width:100%;height:100%;min-height:0;border-radius:0}.playground .gadget-desktop iframe{width:980px;height:1524px;transform:scale(.2755);transform-origin:0 0}.gadget-bench{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);grid-gap:12px;gap:12px;align-items:start;margin-top:10px}@media (max-width:560px){.gadget-bench{grid-template-columns:1fr}}.gadget-hw{width:100%;height:auto}.gadget-spin{animation:gadget-spin .6s linear infinite}@keyframes gadget-spin{to{transform:rotate(1turn)}}@media (prefers-reduced-motion:reduce){.gadget-spin{animation-duration:3s}}.gadget-side{display:grid;grid-gap:8px;gap:8px}.gadget-log{display:grid;grid-gap:3px;gap:3px;font-size:var(--step--1);font-weight:500}.gadget-log code{font-family:var(--font-mono);font-size:.78rem;font-weight:400;background:var(--code-bg);color:var(--code-ink);border-radius:6px;padding:3px 8px;overflow-wrap:anywhere}.gadget-log .gadget-bad{color:#ff9a8f}.gadget-arduino{margin-top:10px}.gadget-arduino summary{cursor:pointer;font-weight:500}.gadget-arduino pre{max-height:260px;overflow:auto;background:var(--code-bg);color:var(--code-ink);border-radius:10px;padding:10px;font-size:.78rem}.html-page{background:#fff;color:#222;border-radius:10px;padding:12px;min-height:150px;font-family:system-ui,sans-serif;font-size:15px}.type-cursor{animation:blink 1s steps(2) infinite}@keyframes blink{50%{opacity:0}}.pixel-num{font-family:var(--font-mono);font-size:7px}.det-label{font-family:var(--font-display);font-size:10px;font-weight:600;fill:#fff}.ocr-letter{font-family:var(--font-mono);font-size:30px}.ocr-letter,.ocr-say{font-weight:600;fill:#14163d}.ocr-say{font-family:var(--font-display);font-size:15px}.emoji{font-size:18px}.cap-plus{fill:#ffd59a}.svg-small.is-warning{fill:#ffb4a8;font-weight:500}.meter-digits{font-family:var(--font-mono);font-size:30px;fill:#1b2a14}.meter-label,.meter-unit{font-family:var(--font-display);font-size:11px;font-weight:500;fill:#1b2a14}.meter-label{fill:#2b2d33}.draft-changes,.draft-track{font-size:var(--step--1);color:var(--muted)}.draft-list li{margin-bottom:.6em}.prose .arduino-sim{--ink:var(--silk);background:var(--pcb);background-image:radial-gradient(rgba(255,255,255,.07) 1px,transparent 1.4px);background-size:14px 14px;color:var(--silk);border-radius:16px;padding:clamp(14px,3vw,24px);margin:2em 0}.sim-head{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-bottom:8px}.sim-title{font-family:var(--font-display);font-weight:600;font-size:var(--step-1)}.sim-chip{font-size:var(--step--1);font-weight:500;padding:.2em .8em;border-radius:999px;background:var(--pcb-deep);white-space:nowrap}.sim-stage-wrap{position:relative;max-width:600px;margin:0 auto}.sim-stage{position:absolute;top:0;left:50%;translate:-50% 0;transform-origin:top center}.sim-stage>*{position:absolute;display:block;line-height:0;transform-origin:0 0}.sim-stage>.sim-logo{left:6px;top:8px;width:96px;height:auto;margin:0;padding:0;border:0;background:none;border-radius:0;opacity:.9;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.sim-stage>.sim-url{left:16px;font-size:8px;line-height:1;font-weight:500;letter-spacing:.02em;opacity:.75;pointer-events:none}.sim-rails{pointer-events:none}.sim-rail-sign{font:600 9px/1 var(--font-display,sans-serif);stroke:none}.sim-wires{pointer-events:none;fill:none;stroke-width:2.4;stroke-linecap:round;stroke-linejoin:round}.sim-controls{display:flex;flex-wrap:wrap;align-items:center;gap:10px 12px;margin-top:14px}.sim-controls .btn{cursor:pointer;min-width:6.5em}.sim-controls .btn-quiet{color:var(--silk);border-color:rgba(255,255,255,.5)}.sim-controls .btn:disabled{opacity:.5;cursor:default}.sim-status{font-size:var(--step--1);opacity:.85}.prose .sim-serial{background:var(--pcb-deep);color:#b8ffcf;font-family:var(--font-mono);font-size:var(--step--1);max-height:10em;overflow:auto;margin:12px 0 0}.sim-code{margin-top:12px}.sim-code summary{cursor:pointer;font-weight:500}.prose .sim-code pre{margin:8px 0 0}.sim-stage>.sim-module{border-radius:4px;background:#1f4f8f;color:#fff;font-size:8px;line-height:1.1;display:flex;align-items:center;justify-content:center;text-align:center;padding:2px}.sim-look .sl-spin{transform-box:fill-box;transform-origin:center;animation:sl-spin calc(.6s / var(--level, 1)) linear infinite paused}.sim-look .sl-flow{stroke-dasharray:4 5;animation:sl-flow .45s linear infinite paused;opacity:0}.sim-look .sl-on{opacity:0;transition:opacity .15s}.sim-look .sl-waves{opacity:0;animation:sl-rise 1.2s ease-in infinite paused}.sim-look .sl-waves:nth-of-type(2){animation-delay:-.4s}.sim-look .sl-waves:nth-of-type(3){animation-delay:-.8s}.sim-look .sl-click{transform-box:fill-box;transform-origin:0 100%;transition:transform .08s}.sim-look .sl-lift{transition:transform .1s}.sim-look[data-on="1"] .sl-flow,.sim-look[data-on="1"] .sl-spin,.sim-look[data-on="1"] .sl-waves{animation-play-state:running}.sim-look[data-on="1"] .sl-flow{opacity:1}.sim-look[data-on="1"] .sl-on{opacity:var(--level,1)}.sim-look[data-on="1"] .sl-click{transform:rotate(22deg)}.sim-look[data-on="1"] .sl-lift{transform:translateY(-5px)}@keyframes sl-spin{to{transform:rotate(1turn)}}@keyframes sl-flow{to{stroke-dashoffset:-9}}@keyframes sl-rise{0%{opacity:0;transform:translateY(4px)}40%{opacity:.9}to{opacity:0;transform:translateY(-6px)}}@media (prefers-reduced-motion:reduce){.sim-look[data-on="1"] .sl-flow,.sim-look[data-on="1"] .sl-spin,.sim-look[data-on="1"] .sl-waves{animation-play-state:paused}.sim-look[data-on="1"] .sl-waves{opacity:.7}}.sim-module i{position:absolute;width:5px;height:5px;border-radius:50%;background:#d6d9de}.sim-controls-sensors{display:grid;grid-gap:6px;gap:6px;margin-top:12px}.sim-controls-sensors label{display:grid;grid-gap:2px;gap:2px;font-size:var(--step--1);font-weight:500}.sim-controls-sensors output{font-family:var(--font-mono);color:#ffd59a}.sim-controls-sensors input{width:100%;accent-color:var(--accent)}.sim-rail{fill:#ffb4a8}.sim-rail,.sim-tag{font-family:var(--font-display);font-size:7px;font-weight:600;stroke:none}.sim-tag{fill:#111}.sim-control-label{font-size:var(--step--1);font-weight:500;align-self:center}.sim-type,.sim-variants{margin-top:12px}.sim-type{display:flex;flex-wrap:wrap;align-items:center;gap:8px;font-size:var(--step--1)}.sim-type .btn{font-size:var(--step--1);padding:.4em .9em;cursor:pointer}.sim-type .btn-quiet{color:var(--silk);border-color:rgba(255,255,255,.5)}.sim-type input{font:inherit;width:7em;padding:.4em .6em;border-radius:8px;border:0}.sim-missing{font-style:italic}.ohms-formula{margin:8px 0 0;font-family:var(--font-mono);font-size:var(--step--1);opacity:.85;overflow-wrap:anywhere}.latest,.paths{max-width:1240px;margin:0 auto}.section-note{color:var(--muted);margin:0 0 1.4em;max-width:var(--measure)}.card-grid{list-style:none;padding:0;margin:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,260px),1fr));grid-gap:16px;gap:16px}.card-grid>li>a{display:flex;flex-direction:column;gap:8px;height:100%;padding:20px;background:var(--surface);border:1px solid var(--line);border-radius:16px;text-decoration:none;transition:border-color .16s ease,box-shadow .16s ease,transform .16s ease}.card-grid>li>a:hover{border-color:var(--accent);box-shadow:0 8px 24px color-mix(in srgb,var(--brand) 14%,transparent);transform:translateY(-2px)}@media (prefers-reduced-motion:reduce){.card-grid>li>a{transition:none}.card-grid>li>a:hover{transform:none}}.card-icon{display:inline-grid;place-items:center;flex:none;width:48px;height:48px;border-radius:12px;color:var(--band);background:color-mix(in srgb,var(--band) 14%,var(--surface))}.card-icon.is-large{width:64px;height:64px;border-radius:16px}.card-thumb{display:block;width:calc(100% + 40px);max-width:none;height:auto;aspect-ratio:1200/630;margin:-20px -20px 6px;border-radius:15px 15px 0 0;border-bottom:1px solid var(--line);background:#fff}.card-thumb.is-lesson{aspect-ratio:1200/814;object-fit:cover}.card-thumb.is-cover{object-fit:contain;padding:10px}.card-top:empty{display:none}.card-top{display:flex;align-items:center;justify-content:space-between;gap:12px}.card-step{font-size:var(--step--1);font-weight:500;color:var(--muted)}.card-title{font-weight:600;font-size:var(--step-0);line-height:1.3;color:var(--ink)}.path-card .card-title{font-size:var(--step-1);margin-top:6px}.path-blurb{line-height:1.5}.card-meta,.path-blurb{color:var(--muted);font-size:var(--step--1)}.card-meta{display:flex;flex-wrap:wrap;gap:4px 14px;margin-top:auto;padding-top:6px}.card-go{display:block;margin-top:10px;padding:12px 16px;border-radius:12px;background:var(--button);color:var(--button-ink);font-weight:500;font-size:var(--step-0);text-align:center;transition:background .16s ease}.card-grid>li>a:focus-visible .card-go,.card-grid>li>a:hover .card-go{background:var(--button-hover)}.card-grid>.card-ad{grid-column:1/-1}.ad-slot{display:block;margin:32px auto;max-width:1240px}.card-grid .ad-slot{margin:0}.ad-label{display:block;margin-bottom:4px;font-size:.7rem;letter-spacing:.08em;text-transform:uppercase;color:var(--muted)}.rail{display:none}.rail .ad-slot{position:-webkit-sticky;position:sticky;top:96px;margin:24px 0}.ad-rail-slot .ad-placeholder,.ad-rail-slot .adsbygoogle{min-height:600px}@media (min-width:1600px){.rails{display:grid;grid-template-columns:160px minmax(0,1fr) 160px;grid-gap:24px;gap:24px;padding-inline:16px}.rail{display:block}.rails-main .ad-slot,.rails-main .card-ad{display:none}}@media (min-width:1200px){.rails:has(article.lesson){display:grid;grid-template-columns:160px minmax(0,1fr) 160px;grid-gap:24px;gap:24px;padding-inline:16px}.rails:has(article.lesson) .rail{display:block}.rails:has(article.lesson) .rails-main .ad-slot{display:none}}.ad-display .adsbygoogle,.ad-placeholder{min-height:250px}.ad-infeed .adsbygoogle{min-height:120px}.ad-placeholder{display:grid;place-items:center;border:2px dashed var(--line);border-radius:12px;color:var(--muted);font-size:var(--step--1)}.ad-infeed .ad-placeholder{min-height:120px}.level{text-transform:capitalize}.level-advanced:before,.level-beginner:before,.level-intermediate:before{content:"";display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:6px;vertical-align:1px;border:1.5px solid}.level-intermediate:before{background:linear-gradient(90deg,currentColor 50%,transparent 0)}.level-advanced:before{background:currentColor}.interactive{color:var(--accent);font-weight:500}.page{max-width:1100px;margin:0 auto;padding-top:clamp(32px,5vw,64px)}.page h1{font-size:var(--step-4);letter-spacing:-.025em;line-height:1}.lede{font-size:var(--step-1);color:var(--muted);max-width:40ch;margin:0 0 .6em}.lesson-section+.lesson-section{margin-top:64px}.section-title{margin:1em 0 .2em}.track-fold{margin:0 0 12px;border:1px solid var(--line);border-left:4px solid var(--band);border-radius:12px;background:var(--surface)}.track-fold>summary{display:flex;align-items:center;gap:14px;padding:12px 16px;cursor:pointer;list-style:none;font-size:var(--step-1);font-weight:600}.track-fold>summary::-webkit-details-marker{display:none}.track-fold>summary:after{content:"";margin-left:8px;width:10px;height:10px;flex:none;border-right:2px solid var(--muted);border-bottom:2px solid var(--muted);transform:rotate(45deg) translateY(-3px);transition:transform .2s}.track-fold[open]>summary:after{transform:rotate(-135deg) translateY(-3px)}.track-fold .fold-name{flex:1 1}.track-fold .fold-count{font-size:var(--step--1);font-weight:500;color:var(--muted);white-space:nowrap}.track-fold .fold-link{margin:0 16px 12px;font-size:var(--step--1)}.track-fold>.card-grid{padding:0 16px 16px}@media (max-width:560px){.track-fold>summary{gap:10px;padding:10px 12px;font-size:1.05rem}.track-fold .card-icon{width:40px;height:40px}}.track-block h3 a{display:inline-flex;align-items:center;gap:14px;text-decoration:none}.track-progress{font-weight:500;margin:0 0 20px}.track-progress .bar{display:block;height:8px;border-radius:4px;margin-top:6px;max-width:360px;background:linear-gradient(90deg,var(--band) var(--pct),var(--line) var(--pct))}.lesson{max-width:var(--measure);margin:0 auto;padding-top:clamp(28px,5vw,56px)}.lesson-head{border-top:10px solid var(--band);padding-top:18px;margin-bottom:28px}.lesson-head h1{font-size:clamp(2rem,5vw,3rem)}.crumb{margin:0 0 10px;font-weight:500}.crumb,.lesson-meta{color:var(--muted);font-size:var(--step--1)}.lesson-meta{display:flex;flex-wrap:wrap;gap:4px 16px;margin:0}.draft{color:var(--led);font-weight:500}.prose{font-size:var(--step-0);line-height:1.7}.prose>:first-child{margin-top:0}.prose ol,.prose p,.prose ul{margin:0 0 1.1em}.prose li{margin-bottom:.35em}.prose img{display:block;box-sizing:border-box;width:100%;max-width:640px;height:auto;margin:1.6em auto;padding:10px;background:#fff;border:1px solid var(--line);border-radius:12px}.prose img.is-small{width:auto;max-width:min(100%,640px)}.prose pre{background:var(--code-bg);color:var(--code-ink);padding:18px 20px;border-radius:12px;overflow-x:auto;font-size:.86rem;line-height:1.6;margin:1.4em 0;border-left:6px solid var(--accent)}.prose code{font-family:var(--font-mono);font-size:.88em}.prose :not(pre)>code{background:color-mix(in srgb,var(--accent) 16%,transparent);padding:.1em .35em;border-radius:5px}.prose table{width:100%;border-collapse:collapse;margin:1.4em 0;font-size:var(--step--1);display:block;overflow-x:auto}.prose td,.prose th{border-bottom:1px solid var(--line);padding:8px 10px;text-align:left}.prose th{border-bottom:2px solid var(--ink)}.prose blockquote{margin:1.4em 0;padding-left:18px;border-left:4px solid var(--line);color:var(--muted)}.prose h2{font-size:var(--step-2)}.analogy{margin:1.8em 0;padding:20px 22px;border-radius:14px;background:color-mix(in srgb,var(--flow) 14%,var(--surface));border:2px solid color-mix(in srgb,var(--flow) 55%,transparent)}.analogy-like{font-family:var(--font-display);font-weight:500;font-size:var(--step-1);margin:0 0 .5em;line-height:1.2}.analogy>div>:last-child{margin-bottom:0}.quiz{margin:2.2em 0;padding:clamp(18px,3vw,28px);border:2px solid var(--ink);border-radius:16px;background:var(--surface)}.quiz h3{margin-top:0}.quiz ol{padding-left:1.2em;margin:0}.quiz li{margin-bottom:1.4em}.quiz-q{font-weight:500;margin:0 0 .6em!important}.quiz-options{display:flex;flex-wrap:wrap;gap:8px}.quiz-option{font:inherit;font-size:var(--step--1);padding:8px 14px;border-radius:999px;border:2px solid var(--line);background:var(--paper);color:var(--ink);cursor:pointer;text-align:left}.quiz-option:hover:not(:disabled){border-color:var(--accent)}.quiz-option:disabled{cursor:default}.quiz-option.is-right{border-color:#2e7d32;background:color-mix(in srgb,#2e7d32 16%,var(--surface))}.quiz-option.is-wrong{border-color:var(--led);background:color-mix(in srgb,var(--led) 14%,var(--surface))}.quiz-why{margin:.6em 0 0!important;color:var(--muted);font-size:var(--step--1)}.quiz-score{margin:0!important;font-weight:500}.yt{aspect-ratio:16/9;border-radius:14px;overflow:hidden;margin:0 0 32px;background:#000}.yt iframe,.yt-poster{width:100%;height:100%;border:0}.yt-poster{position:relative;padding:0;cursor:pointer;background:#000;display:block}.yt-poster img{width:100%;height:100%;object-fit:cover;opacity:.8}.yt-play{position:absolute;inset:50% auto auto 50%;translate:-50% -50%;width:72px;height:72px;border-radius:50%;background:var(--led);color:#fff;display:grid;place-items:center;font-size:1.6rem;padding-left:4px}.yt-title{position:absolute;left:16px;bottom:14px;right:16px;color:#fff;font-family:var(--font-display);font-weight:500;text-align:left;text-shadow:0 1px 8px rgba(0,0,0,.7)}.lesson-foot{margin-top:48px;padding-top:24px;border-top:2px solid var(--ink)}.progress-btn{font-family:var(--font-display);font-weight:500;font-size:var(--step-0);padding:.7em 1.3em;border-radius:999px;border:2px solid var(--ink);background:var(--surface);color:var(--ink);cursor:pointer}.progress-btn.is-done{background:var(--board);border-color:var(--board);color:#fff}.lesson-nav{display:grid;grid-template-columns:1fr 1fr;grid-gap:16px;gap:16px;margin-top:28px}.lesson-nav a{text-decoration:none;font-weight:500;line-height:1.35;padding:14px 16px;border:1px solid var(--line);border-radius:12px;background:var(--surface)}.lesson-nav a:hover{border-color:var(--band)}.lesson-nav a span{display:block;font-weight:400;color:var(--muted);font-size:var(--step--1)}.lesson-nav .is-next{text-align:right;grid-column:2}@media (max-width:820px){.lesson-nav{grid-template-columns:1fr}.lesson-nav .is-next{grid-column:1}}.contact-kids{padding:12px 16px;border-radius:12px;background:color-mix(in srgb,var(--accent) 10%,var(--surface));border:1px solid color-mix(in srgb,var(--accent) 35%,transparent)}.contact-form{display:grid;grid-gap:16px;gap:16px;margin-top:24px}.contact-form label{display:grid;grid-gap:6px;gap:6px;font-weight:500;font-size:var(--step--1)}.contact-form input,.contact-form select,.contact-form textarea{font:inherit;font-weight:400;font-size:var(--step-0);padding:10px 12px;border:1px solid var(--line);border-radius:10px;background:var(--surface);color:var(--ink)}.contact-form input:focus-visible,.contact-form select:focus-visible,.contact-form textarea:focus-visible{outline:3px solid var(--accent);outline-offset:1px}.contact-form .btn{justify-self:start;cursor:pointer}.contact-form .btn:disabled{opacity:.7;cursor:progress}.contact-trap{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}.contact-done,.contact-fallback{font-size:var(--step-1);margin-top:24px}.contact-error{color:var(--led);margin:0}.ad-slot:has(ins.adsbygoogle[data-ad-status=unfilled]){display:none}.account-link{font-weight:500}.site-header nav a.account-link.is-in{padding:4px 12px;border:0;border-radius:999px;background:var(--button);color:var(--button-ink)}.points-toasts{position:fixed;top:84px;left:50%;z-index:40;display:grid;grid-gap:8px;gap:8px;transform:translateX(-50%);width:min(360px,calc(100vw - 32px));pointer-events:none}.points-toast{display:grid;grid-gap:2px;gap:2px;padding:12px 16px;border-radius:14px;background:var(--button);color:var(--button-ink);text-align:center;box-shadow:0 8px 24px rgba(0,0,0,.18);animation:tryit-in .3s ease-out}.points-toast strong{font-size:var(--step-1)}.points-badge{font-weight:500}.progress-box{display:grid;grid-gap:8px;gap:8px;justify-items:start}.progress-hint{margin:0;color:var(--muted);font-size:var(--step--1)}.login-tabs{display:inline-flex;gap:4px;margin-top:24px;padding:4px;border:1px solid var(--line);border-radius:999px;background:var(--surface)}.login-tabs button{padding:8px 16px;border:0;border-radius:999px;background:none;color:var(--ink);font:inherit;font-weight:500;cursor:pointer}.login-tabs button[aria-selected=true]{background:var(--accent);color:#fff}.login-note{color:var(--muted);font-weight:400}.contact-form .login-consent{display:flex;align-items:flex-start;gap:10px;font-weight:400;line-height:1.5}.contact-form .login-consent input{flex:none;width:20px;height:20px;margin-top:2px;padding:0}.login-sent{margin-top:24px;padding:24px;border:1px solid var(--line);border-radius:16px;background:var(--surface)}.login-big{margin:0 0 8px;font-size:var(--step-2);font-weight:600}.badge-grid,.course-progress,.earn-list,.stat-row{padding:0;list-style:none}.stat-row{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));grid-gap:12px;gap:12px;margin:24px 0 8px}.stat-row li{display:grid;grid-gap:2px;gap:2px;padding:16px;border:1px solid var(--line);border-radius:16px;background:var(--surface)}.stat-row strong{font-size:var(--step-2);font-weight:600}.stat-row span{color:var(--muted);font-size:var(--step--1)}.badge-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));grid-gap:12px;gap:12px}.badge-grid li{display:grid;justify-items:center;grid-gap:4px;gap:4px;padding:16px 12px;border:1px dashed var(--line);border-radius:16px;text-align:center;color:var(--muted);font-size:var(--step--1)}.badge-grid li .badge-icon{font-size:2.25rem;filter:grayscale(1);opacity:.45}.badge-grid li strong{color:var(--ink);font-weight:500}.badge-grid li.is-earned{border:1px solid var(--button);background:color-mix(in srgb,var(--button) 14%,var(--surface))}.badge-grid li.is-earned .badge-icon{filter:none;opacity:1}.course-progress{display:grid;grid-gap:16px;gap:16px}.course-progress-head{display:flex;justify-content:space-between;gap:12px;font-weight:500}.course-progress-head span{color:var(--muted);font-weight:400}.meter{height:10px;margin-top:6px;border-radius:999px;background:var(--line);overflow:hidden}.meter span{display:block;height:100%;border-radius:inherit;background:var(--button)}.course-next{margin:6px 0 0;font-size:var(--step--1);color:var(--muted)}.earn-list li{padding:6px 0;border-bottom:1px solid var(--line)}.account-inline{display:flex;gap:8px}.account-inline input{flex:1 1;min-width:0}.account-settings .btn{justify-self:auto}.account-saved{margin:0;color:var(--accent)}.account-actions{display:flex;flex-wrap:wrap;align-items:center;gap:16px 24px;margin:8px 0 0}.account-delete{color:var(--muted);font-size:var(--step--1)}.login-who{display:grid;grid-template-columns:1fr 1fr;grid-gap:10px;gap:10px;margin:0;padding:0;border:0}.login-who legend{margin-bottom:6px;font-weight:500;font-size:var(--step--1)}.contact-form .login-who label{display:flex;align-items:flex-start;gap:10px;padding:14px;border:2px solid var(--line);border-radius:14px;background:var(--surface);cursor:pointer}.contact-form .login-who label.is-on{border-color:var(--accent)}.login-who input{margin-top:3px;accent-color:var(--accent)}.login-who label>span{display:grid;grid-gap:2px;gap:2px}.login-who label>span span{color:var(--muted);font-weight:400}.account-name{max-width:10ch;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;margin-right:4px;padding-right:8px;border-right:1px solid color-mix(in srgb,var(--button-ink) 45%,transparent)}.site-header nav a.account-link.is-in{display:inline-flex;align-items:center;gap:4px}.prose figure[data-rehype-pretty-code-figure]{margin:1.4em 0}.prose figure[data-rehype-pretty-code-figure] pre{margin:0}.prose pre[data-language]{position:relative;padding-top:38px}.prose pre[data-language]:before{position:absolute;top:10px;right:14px;color:#9da5c8;font-family:var(--font-body);font-size:.75rem;font-weight:500;letter-spacing:.04em;text-transform:uppercase}.prose pre[data-language=cpp]:before{content:"Arduino C++"}.prose pre[data-language=html]:before{content:"HTML"}.prose pre[data-language=css]:before{content:"CSS"}.prose pre[data-language=javascript]:before{content:"JavaScript"}.prose pre[data-language=python]:before{content:"Python"}.prose pre[data-language=plaintext],.prose pre[data-language=text]{padding-top:18px}.prose pre code[data-language]{display:grid}.prose code,.prose pre{font-variant-ligatures:none;font-feature-settings:"liga" 0,"calt" 0,none}.access-free,.access-paid{display:inline-flex;align-items:center;gap:4px;padding:1px 8px;border-radius:999px;font-size:.8em;font-weight:500}.access-free{background:color-mix(in srgb,#1fb36b 16%,transparent);color:#12804b}.access-paid{background:color-mix(in srgb,var(--button) 22%,transparent);color:var(--ink)}@media (prefers-color-scheme:dark){:root:not([data-theme=light]) .access-free{color:#5fd99a}}:root[data-theme=dark] .access-free{color:#5fd99a}.paywall,.price-box{margin:24px 0;padding:20px 22px;border:1px solid color-mix(in srgb,var(--button) 60%,var(--line));border-radius:18px;background:color-mix(in srgb,var(--button) 9%,var(--surface))}.price-line{margin:0 0 14px}.price-free{color:var(--muted)}.paywall{position:relative;margin-top:8px;text-align:left}.prose:has(+.paywall:not(.is-soft)){-webkit-mask-image:linear-gradient(180deg,#000 calc(100% - 140px),transparent);mask-image:linear-gradient(180deg,#000 calc(100% - 140px),transparent)}.paywall h2{margin:0 0 8px}.paywall-lock{margin:0;font-size:1.8rem}.paywall-still{margin:12px 0 4px;font-weight:500}.paywall-sections{margin:0 0 16px;padding-left:1.2em;color:var(--muted)}.paywall-opening{margin:24px 0;color:var(--muted)}.unlock{display:grid;justify-items:start;grid-gap:6px;gap:6px}.unlock-btn{cursor:pointer}.unlock-small{margin:0;color:var(--muted);font-size:var(--step--1)}.unlock-owned{margin:0;color:#12804b;font-weight:500}.course-progress-head .course-tag{margin-left:auto;padding:0 8px;border-radius:999px;background:color-mix(in srgb,var(--button) 22%,transparent);color:var(--ink);font-size:var(--step--1)}.course-progress-head .course-tag.is-free{background:color-mix(in srgb,#1fb36b 16%,transparent)}.course-progress-head .course-tag.is-owned{background:color-mix(in srgb,var(--accent) 18%,transparent)}.protected{position:relative;-webkit-user-select:none;-moz-user-select:none;user-select:none}.protected code,.protected pre{-webkit-user-select:text;-moz-user-select:text;user-select:text}.protected:after{content:"";position:absolute;inset:0;z-index:1;background-image:var(--wm,none);background-repeat:repeat;pointer-events:none}@media print{.protected{display:none}}.prose .parts-card{max-width:var(--measure);margin:1.2em auto 1.6em;padding:14px 16px 12px;border:1px solid var(--line);border-top:4px solid var(--button);border-radius:12px;background:var(--surface)}.prose .parts-card-head{margin:0 0 10px;font-family:var(--font-display);font-weight:600;font-size:1.05rem}.prose .parts-card ul{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));grid-gap:8px;gap:8px;margin:0;padding:0;list-style:none}.prose .parts-card li{margin:0;padding:0}.prose .parts-card li:before{content:none}.prose .parts-card a{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:8px 10px;border:1px solid var(--line);border-radius:8px;color:var(--ink);text-decoration:none;background:var(--paper)}.prose .parts-card a:focus-visible,.prose .parts-card a:hover{border-color:var(--button);background:color-mix(in srgb,var(--button) 10%,var(--surface))}.prose .parts-card-go{flex:none;font-size:.78rem;font-weight:500;padding:2px 8px;border-radius:999px;background:var(--button);color:var(--button-ink)}.prose .parts-card-note{margin:10px 0 0}.prose .parts-card-note,.site-footer .footer-note{font-size:.8rem;color:var(--muted)}.hero-art-wrap{position:relative}.hero-banner .btn.is-charged{box-shadow:0 0 0 4px rgba(255,179,0,.35),0 0 24px 6px rgba(0,132,255,.45);transform:scale(1.04);transition:box-shadow .2s,transform .2s}.build-today{display:grid;grid-gap:4px;gap:4px;margin:0 0 .8em}.build-today-ask{font-size:.95rem;color:#555a7a}.build-today-item{display:inline-flex;align-items:center;gap:10px;width:-moz-fit-content;width:fit-content;font-size:var(--step-2);font-weight:600;color:#14163d;text-decoration:none;animation:build-in .45s ease-out}.build-today-item:hover{color:#0084ff}@keyframes build-in{0%{opacity:0;transform:translateY(10px)}}.build-icon{flex:none;fill:none;stroke:#0084ff;stroke-width:2;stroke-linecap:round}.build-icon .bi-glow,.build-icon .bi-led{fill:#ffb300;stroke:none}.build-icon .bi-glow{opacity:0;animation:bi-blink .9s steps(1) infinite}.build-icon .bi-body{fill:#0084ff;stroke:none}.build-icon .bi-wheel{fill:#14163d;stroke:#fff;animation:bi-spin .8s linear infinite}.build-icon .bi-type{stroke-dasharray:16;animation:bi-type 1.6s steps(8) infinite}.build-icon .bi-wave{opacity:.2;animation:bi-wave 1.2s infinite}.build-icon .w2{animation-delay:.2s}.build-icon .w3{animation-delay:.4s}.build-icon .bi-scan{stroke:#ffb300;animation:bi-scan 1.4s ease-in-out infinite alternate}@keyframes bi-blink{50%{opacity:.45}}@keyframes bi-spin{to{transform:rotate(1turn)}}@keyframes bi-type{0%{stroke-dashoffset:16}to{stroke-dashoffset:0}}@keyframes bi-wave{30%{opacity:1}}@keyframes bi-scan{to{transform:translateY(14px)}}.ohm-play{display:grid;grid-template-columns:auto minmax(0,1fr);align-items:center;grid-gap:4px 14px;gap:4px 14px;max-width:460px;margin-top:18px;padding:10px 14px;border:1px solid #dde1ee;border-radius:12px;background:rgba(255,255,255,.85)}.ohm-led{grid-row:span 2;overflow:visible}.ohm-slider{display:grid;grid-gap:2px;gap:2px;font-size:.95rem;color:#14163d}.ohm-slider input{width:100%;accent-color:#ffb300}.ohm-note{margin:0;font-size:.85rem;color:#555a7a}.ohm-note a{color:#0084ff}.ohm-note button{padding:0;font:inherit;color:#0084ff;text-decoration:underline;background:none;border:0;cursor:pointer}.is-popped .ohm-led{animation:ohm-pop .35s ease-out}.ohm-smoke circle{fill:#9aa0b4;opacity:.6;animation:ohm-smoke 1.4s ease-out infinite}@keyframes ohm-pop{30%{transform:scale(1.3) rotate(-6deg)}}@keyframes ohm-smoke{to{transform:translateY(-14px);opacity:0}}.hero-game{min-height:1.5em;margin:16px 0 0;color:#14163d}.hero-game a{color:#0084ff}.formula-board{position:absolute;inset:0}.formula{position:absolute;left:4%;top:2%;width:62%;overflow:visible}.formula text{font-family:var(--font-body);font-size:38px;font-style:italic;font-weight:500;fill:transparent;stroke:#0084ff;stroke-width:1.2;stroke-dasharray:600;stroke-dashoffset:600;paint-order:stroke}.formula.is-writing text{animation:formula-write 1.6s ease-out forwards}@keyframes formula-write{70%{stroke-dashoffset:0;fill:transparent}to{stroke-dashoffset:0;fill:#0084ff}}.festival{position:absolute;inset:0 0 auto;z-index:2;height:50px;pointer-events:none}.festival-wire{position:absolute;inset:0;width:100%;height:40px}.festival-wire path{fill:none;stroke:#3c3f55;stroke-width:1.5}.festival-bulb{position:absolute;width:10px;height:14px;margin-left:-5px;border-radius:50% 50% 50% 50%/40% 40% 60% 60%;background:var(--bulb);opacity:.35;animation:festival-chase 1.1s infinite}@keyframes festival-chase{0%,30%{opacity:1;box-shadow:0 0 12px 3px var(--bulb)}60%,to{opacity:.35;box-shadow:none}}.hero-chip{display:inline-block;margin:18px 0 10px;padding:4px 12px;font-size:.95rem;color:#14163d;border-radius:999px;background:#fff4d6}.hero-chip a{color:#0084ff}.hero-switch{position:absolute;top:12px;right:16px;z-index:2;display:flex;align-items:center;gap:8px;padding:0;font:inherit;font-size:.8rem;color:#555a7a;background:none;border:0;cursor:pointer}.hero-switch-plate{display:grid;place-items:center;width:30px;height:42px;border:1px solid #c9cedf;border-radius:6px;background:#f1f3f9;box-shadow:0 2px 4px rgba(6,6,51,.15)}.hero-switch-toggle{width:12px;height:22px;border:1px solid #b9bfd3;border-radius:3px;background:linear-gradient(#fff 50%,#d9dde9 0)}.hero-switch.is-on .hero-switch-toggle{background:linear-gradient(#d9dde9 50%,#fff 0)}.hero-banner.is-dark{background:#060633;transition:background .3s}.hero-banner.is-dark .hero-lede,.hero-banner.is-dark .hero-switch{color:#dfe5ff}.hero-banner.is-dark .btn-quiet,.hero-banner.is-dark .btn-quiet:hover{color:#fff;border-color:#fff}.hero-banner.is-dark .hero-art{filter:invert(1) hue-rotate(180deg) brightness(.95)}@media (prefers-reduced-motion:reduce){.build-icon *,.build-today-item,.festival-bulb,.formula.is-writing text,.ohm-smoke circle{animation:none!important}.formula text{stroke-dashoffset:0;fill:#0084ff}.festival-bulb{opacity:1}}.banner-lab-item{margin:40px 0 56px}.banner-lab-item h2{margin:0 0 4px}.banner-lab-item>p{margin:0 0 14px;color:var(--muted)}.festival.is-christmas{height:100%}.snowflake{position:absolute;top:-20px;color:#8db8ee;opacity:.95;animation:snow-fall linear infinite}@keyframes snow-fall{to{transform:translate(30px,420px) rotate(180deg);opacity:0}}@media (prefers-reduced-motion:reduce){.snowflake{display:none}}.teacher{position:relative;display:grid;min-height:300px}.teacher-svg{justify-self:end;width:min(100%,290px);height:auto;overflow:visible}.teacher-bubble{position:absolute;top:0;left:0;z-index:1;width:min(62%,250px);min-height:92px;padding:12px 14px;border:2px solid #14163d;border-radius:16px;background:#fff;color:#14163d;font-size:.98rem;line-height:1.4;box-shadow:0 6px 18px rgba(6,6,51,.1)}.teacher-bubble:after{content:"";position:absolute;right:22px;bottom:-12px;width:20px;height:20px;border-right:2px solid #14163d;border-bottom:2px solid #14163d;background:#fff;transform:rotate(45deg) skew(10deg,10deg)}.teacher-bubble p{margin:0}.teacher-icon{font-size:1.15em}.teacher-caret{display:inline-block;width:2px;height:1em;margin-left:2px;vertical-align:-.12em;background:#0084ff;animation:caret .7s steps(1) infinite}@keyframes caret{50%{opacity:0}}.teacher-more{display:inline-block;margin-top:6px;font-size:.85rem;font-weight:500;color:#0084ff}.t-skin{fill:#f5c6a0}.t-hair{fill:#1b1b2f}.t-fringe{fill:none;stroke:#34345a;stroke-width:5;stroke-linecap:round}.t-cheek{fill:#f19a8a;opacity:.45}.t-sweater{fill:#1c2152}.t-sleeve{fill:none;stroke:#1c2152;stroke-width:24;stroke-linecap:round}.t-collar,.t-shirt{fill:#fff;stroke:#d5d9e6;stroke-width:1}.t-tie{fill:#e53935}.t-tie-knot{fill:#c62828}.t-eye-white{fill:#fff}.t-pupil{fill:#14163d}.t-glasses{fill:none;stroke:#14163d;stroke-width:2.6;stroke-linecap:round}.t-glasses circle{fill:rgba(255,255,255,.18)}.t-brows path,.t-nose,.t-smile{fill:none;stroke:#14163d;stroke-width:2.6;stroke-linecap:round}.t-nose{stroke:#c98f6b;stroke-width:2}.t-mouth{fill:#7a2430;opacity:0;transform-box:fill-box;transform-origin:center}.t-marker{stroke:#0084ff;stroke-width:6;stroke-linecap:round}.t-marker-tip{stroke:#14163d;stroke-width:4;stroke-linecap:round}.teacher-body{animation:t-breathe 3.6s ease-in-out infinite}.t-eyes{transform-box:fill-box;transform-origin:center;animation:t-blink 4.8s infinite}.t-brows{transition:transform .3s}.t-arm{transform-origin:100px 262px;transition:transform .5s}.is-talking .t-smile{opacity:0}.is-talking .t-mouth{opacity:1;animation:t-talk .24s ease-in-out infinite alternate}.is-talking .t-brows{transform:translateY(-3px)}.is-talking .t-arm{animation:t-point 1.2s ease-in-out infinite alternate}@keyframes t-breathe{50%{transform:translateY(-3px)}}@keyframes t-blink{0%,94%,to{transform:scaleY(1)}97%{transform:scaleY(.1)}}@keyframes t-talk{0%{transform:scaleY(.25)}to{transform:scaleY(1)}}@keyframes t-point{0%{transform:rotate(-4deg)}to{transform:rotate(5deg)}}@media (max-width:759px){.teacher{min-height:0}.teacher-svg{width:min(55%,210px)}.teacher-bubble{width:58%;font-size:.88rem}}@media (prefers-reduced-motion:reduce){.is-talking .t-arm,.is-talking .t-mouth,.t-eyes,.teacher-body,.teacher-caret{animation:none}}.teacher-langs{display:flex;flex-wrap:wrap;gap:4px;margin-top:8px;padding-top:6px;border-top:1px solid #e6e9f2}.teacher-langs button{padding:1px 8px;font:inherit;font-size:.75rem;color:#555a7a;background:#f4f6fb;border:1px solid #dde1ee;border-radius:999px;cursor:pointer}.teacher-langs button[aria-pressed=true]{color:#fff;background:#0084ff;border-color:#0084ff}.wander{position:relative;min-height:320px;overflow:hidden}.wander-person{position:absolute;right:6%;bottom:0;width:150px;text-align:center}.wander.is-enter .wander-person{animation:walk-in 1.7s ease-out both}.wander.is-leave .wander-person{animation:walk-out 1.7s ease-in both}@keyframes walk-in{0%{transform:translateX(260px)}}@keyframes walk-out{to{transform:translateX(-520px)}}.student{display:block;width:100%;height:auto;overflow:visible}.student.is-walking{animation:st-bob .4s ease-in-out infinite alternate}.student.is-walking .st-leg-a{animation:st-swing .4s ease-in-out infinite alternate}.student.is-walking .st-leg-b{animation:st-swing .4s ease-in-out infinite alternate-reverse}.st-eyes{animation:t-blink 4.2s infinite}.st-bulb circle{fill:#e9edf5;stroke:#b9c0d2;stroke-width:2}.st-bulb rect{fill:#9aa3b5}.student.is-aha .st-bulb circle{fill:#ffd54a;stroke:#ffb300;filter:drop-shadow(0 0 8px #ffb300);animation:st-pop .4s ease-out}.st-bulb{opacity:0;transition:opacity .3s}.student.is-aha .st-bulb,.wander.is-step3 .st-bulb{opacity:1}@keyframes st-bob{to{transform:translateY(-4px)}}@keyframes st-swing{0%{transform:rotate(-16deg)}to{transform:rotate(16deg)}}@keyframes st-pop{50%{transform:scale(1.25)}}.wander-name{margin:2px 0 0;font-size:.8rem;font-weight:500;color:#14163d}.wander-name span{font-weight:400;color:#555a7a}.wander-card{position:relative;z-index:1;width:min(68%,280px);padding:12px 14px;border:2px solid #14163d;border-radius:16px;background:#fff;color:#14163d;font-size:.92rem;line-height:1.4;box-shadow:0 6px 18px rgba(6,6,51,.1);animation:build-in .35s ease-out}.wander-q{margin:0;font-weight:500}.wander-steps{display:grid;grid-gap:6px;gap:6px;margin:10px 0 0;padding:0;list-style:none}.wander-steps li{padding:6px 8px;border-radius:8px;background:#f4f6fb;animation:build-in .4s ease-out}.wander-aha{margin:10px 0 0;font-size:.88rem}.wander-aha strong{color:#e08a00}.wander-aha a{color:#0084ff}@media (max-width:759px){.wander{min-height:300px}.wander-person{width:110px;right:0}.wander-card{width:70%;font-size:.85rem}}@media (prefers-reduced-motion:reduce){.st-eyes,.student,.student .st-leg,.wander-card,.wander-person,.wander-steps li{animation:none!important}}.prose .student-asks{display:grid;grid-template-columns:120px minmax(0,1fr);align-items:end;grid-gap:4px 18px;gap:4px 18px;max-width:var(--measure);margin:1.4em auto 1.8em;padding:16px 18px 14px;border:1px solid var(--line);border-left:5px solid #ffb300;border-radius:14px;background:var(--surface)}.prose .student-asks .student{width:100%}.prose .sa-person .wander-name{margin:0;text-align:center;color:var(--ink)}.prose .sa-person .wander-name span{color:var(--muted)}.prose .sa-talk{align-self:center}.prose .sa-q{margin:0 0 8px;font-weight:500;font-size:1.05rem}.prose .student-asks .wander-steps{margin:0 0 10px;padding:0}.prose .student-asks .wander-steps li{margin:0;background:var(--paper);color:var(--ink)}.prose .student-asks .wander-steps li:before{content:none}.prose .sa-next{font-size:.95rem;padding:.45em 1.1em}.prose .student-asks .wander-aha{margin:0;color:var(--ink)}.prose .sa-again{padding:0;font:inherit;color:var(--accent);text-decoration:underline;background:none;border:0;cursor:pointer}@media (max-width:559px){.prose .student-asks{grid-template-columns:84px minmax(0,1fr);gap:4px 12px;padding:12px}.prose .sa-q{font-size:.98rem}}.header-search-btn{display:inline-grid;place-items:center;width:36px;height:36px;padding:0;border:1px solid var(--line);border-radius:50%;background:var(--paper);color:var(--ink);cursor:pointer}.header-search-btn:hover,.header-search-btn[aria-expanded=true]{border-color:var(--accent);color:var(--accent)}.header-search{position:fixed;inset:0;z-index:50}.header-search-backdrop{position:absolute;inset:0;background:rgba(6,6,51,.35)}.header-search-panel{position:relative;width:min(640px,calc(100% - 24px));max-height:calc(100vh - 100px);overflow:auto;margin:72px auto 0;padding:14px;border-radius:16px;background:var(--surface);color:var(--ink);box-shadow:0 20px 50px rgba(6,6,51,.3)}.search-field{display:flex;align-items:center;gap:10px;padding:0 14px;border:2px solid var(--line);border-radius:999px;background:var(--surface);color:var(--muted)}.search-field:focus-within{border-color:var(--accent);color:var(--accent)}.search-field input{flex:1 1;min-width:0;padding:11px 0;font:inherit;font-size:1.05rem;color:var(--ink);background:none;border:0;outline:none}.search-box.is-page .search-field{border-width:2px;box-shadow:0 6px 18px rgba(6,6,51,.07)}.search-box.is-page .search-field input{padding:15px 0;font-size:1.15rem}.search-try{margin:8px 4px 0;font-size:.9rem;color:var(--muted)}.search-clear,.search-try button{padding:0;font:inherit;color:var(--accent);background:none;border:0;cursor:pointer;text-decoration:underline}.search-filters{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:10px 16px;margin-top:12px}.search-chips{display:flex;flex-wrap:wrap;gap:6px}.search-chips button{padding:5px 12px;font:inherit;font-size:.88rem;font-weight:500;color:var(--ink);background:var(--surface);border:1px solid var(--line);border-radius:999px;cursor:pointer}.search-chips button[aria-pressed=true]{color:#fff;background:var(--accent);border-color:var(--accent)}.search-more{display:flex;align-items:center;gap:14px;font-size:.9rem}.search-more select{padding:5px 8px;font:inherit;color:var(--ink);background:var(--surface);border:1px solid var(--line);border-radius:8px}.search-free{display:inline-flex;align-items:center;gap:6px;cursor:pointer}.search-sticky{position:-webkit-sticky;position:sticky;top:0;z-index:5;margin:0 calc(-1 * var(--gutter)) 8px;padding:12px var(--gutter);background:var(--paper)}.search-note{margin:14px 0 10px;color:var(--muted)}.search-more-results{margin:20px 0 0;text-align:center}.search-list{display:grid;grid-gap:2px;gap:2px;margin:0;padding:0;list-style:none}.search-list a{display:flex;align-items:center;gap:12px;padding:8px;border-radius:10px;color:var(--ink);text-decoration:none}.search-list a:focus-visible,.search-list a:hover{background:var(--paper)}.search-list img,.search-row-blank{flex:none;width:64px;height:44px;object-fit:cover;border-radius:6px;background:var(--paper)}.search-row-title{display:block;font-weight:500;line-height:1.3}.search-row-meta{display:block;font-size:.82rem;color:var(--muted);text-transform:capitalize}.search-all{margin:8px 8px 2px;font-weight:500}.all-head{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 16px;margin:28px 0 4px}.all-head h1{margin:0;font-size:var(--step-3)}.all-head p{margin:0;color:var(--muted)}.all-tutorials .section-title{margin:28px 0 4px}.all-tutorials .section-note{margin:0 0 12px}.course-strip{display:grid;grid-template-columns:repeat(auto-fill,minmax(190px,1fr));grid-gap:12px;gap:12px;margin:12px 0 0;padding:0;list-style:none}.course-strip a{display:grid;height:100%;overflow:hidden;border:1px solid var(--line);border-top:4px solid var(--band);border-radius:12px;background:var(--surface);color:var(--ink);text-decoration:none;transition:transform .15s,box-shadow .15s}.course-strip a:focus-visible,.course-strip a:hover{transform:translateY(-2px);box-shadow:0 8px 20px rgba(6,6,51,.12)}.course-strip img{display:block;width:100%;height:auto;aspect-ratio:1200/630;object-fit:cover}.course-strip .card-icon{margin:12px 12px 0}.course-strip-name{padding:10px 12px 0;font-weight:600}.course-strip-meta{padding:2px 12px 12px;font-size:.82rem;color:var(--muted)}.start-row .card-grid{grid-template-columns:repeat(auto-fill,minmax(220px,1fr))}.all-browse{margin-top:36px}.tab-bar{display:inline-flex;gap:4px;margin:0 0 14px;padding:4px;border-radius:999px;background:var(--surface);border:1px solid var(--line)}.tab-bar button{padding:8px 18px;font:inherit;font-weight:500;color:var(--ink);background:none;border:0;border-radius:999px;cursor:pointer}.tab-bar button span{margin-left:4px;font-size:.82rem;color:var(--muted)}.tab-bar button[aria-selected=true]{color:#fff;background:var(--accent)}.tab-bar button[aria-selected=true] span{color:rgba(255,255,255,.85)}.track-fold .fold-audience{display:block;font-size:.82rem;font-weight:400;color:var(--muted)}.track-fold .fold-peek{display:flex;gap:4px}.track-fold .fold-peek img{width:54px;height:37px;object-fit:cover;border-radius:5px;border:1px solid var(--line)}.track-fold[open] .fold-peek{display:none}.track-fold .fold-link .btn{margin-right:10px;padding:.45em 1.1em;font-size:.92rem}@media (max-width:700px){.track-fold .fold-peek{display:none}.search-filters{display:grid}.search-chips{flex-wrap:nowrap;overflow-x:auto;padding-bottom:4px;scrollbar-width:none}.search-chips button{flex:none}.course-strip{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:400;font-display:swap;src:url(/_next/static/media/edc640959b0c7826-s.woff2) format("woff2");unicode-range:u+0460-052f,u+1c80-1c8a,u+20b4,u+2de0-2dff,u+a640-a69f,u+fe2e-fe2f}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:400;font-display:swap;src:url(/_next/static/media/ac0e76ddaeeb7981-s.woff2) format("woff2");unicode-range:u+0301,u+0400-045f,u+0490-0491,u+04b0-04b1,u+2116}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:400;font-display:swap;src:url(/_next/static/media/64d784ea54a4acde-s.woff2) format("woff2");unicode-range:u+0370-0377,u+037a-037f,u+0384-038a,u+038c,u+038e-03a1,u+03a3-03ff}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:400;font-display:swap;src:url(/_next/static/media/ff71da380fbe67dd-s.woff2) format("woff2");unicode-range:u+0102-0103,u+0110-0111,u+0128-0129,u+0168-0169,u+01a0-01a1,u+01af-01b0,u+0300-0301,u+0303-0304,u+0308-0309,u+0323,u+0329,u+1ea0-1ef9,u+20ab}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:400;font-display:swap;src:url(/_next/static/media/6d831b18ae5b01dc-s.woff2) format("woff2");unicode-range:u+0100-02ba,u+02bd-02c5,u+02c7-02cc,u+02ce-02d7,u+02dd-02ff,u+0304,u+0308,u+0329,u+1d00-1dbf,u+1e00-1e9f,u+1ef2-1eff,u+2020,u+20a0-20ab,u+20ad-20c4,u+2113,u+2c60-2c7f,u+a720-a7ff}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:400;font-display:swap;src:url(/_next/static/media/558ca1a6aa3cb55e-s.p.woff2) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:600;font-display:swap;src:url(/_next/static/media/edc640959b0c7826-s.woff2) format("woff2");unicode-range:u+0460-052f,u+1c80-1c8a,u+20b4,u+2de0-2dff,u+a640-a69f,u+fe2e-fe2f}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:600;font-display:swap;src:url(/_next/static/media/ac0e76ddaeeb7981-s.woff2) format("woff2");unicode-range:u+0301,u+0400-045f,u+0490-0491,u+04b0-04b1,u+2116}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:600;font-display:swap;src:url(/_next/static/media/64d784ea54a4acde-s.woff2) format("woff2");unicode-range:u+0370-0377,u+037a-037f,u+0384-038a,u+038c,u+038e-03a1,u+03a3-03ff}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:600;font-display:swap;src:url(/_next/static/media/ff71da380fbe67dd-s.woff2) format("woff2");unicode-range:u+0102-0103,u+0110-0111,u+0128-0129,u+0168-0169,u+01a0-01a1,u+01af-01b0,u+0300-0301,u+0303-0304,u+0308-0309,u+0323,u+0329,u+1ea0-1ef9,u+20ab}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:600;font-display:swap;src:url(/_next/static/media/6d831b18ae5b01dc-s.woff2) format("woff2");unicode-range:u+0100-02ba,u+02bd-02c5,u+02c7-02cc,u+02ce-02d7,u+02dd-02ff,u+0304,u+0308,u+0329,u+1d00-1dbf,u+1e00-1e9f,u+1ef2-1eff,u+2020,u+20a0-20ab,u+20ad-20c4,u+2113,u+2c60-2c7f,u+a720-a7ff}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:600;font-display:swap;src:url(/_next/static/media/558ca1a6aa3cb55e-s.p.woff2) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-family:JetBrains Mono Fallback;src:local("Arial");ascent-override:75.79%;descent-override:22.29%;line-gap-override:0.00%;size-adjust:134.59%}.__className_571da3{font-family:JetBrains Mono,JetBrains Mono Fallback;font-style:normal}.__variable_571da3{--font-jbmono:"JetBrains Mono","JetBrains Mono Fallback"}