: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}.banner{margin:0 calc(-1 * var(--gutter));background:#fff;border-bottom:1px solid var(--line)}.banner img{display:block;width:100%;height:auto}.banner img,.hero{max-width:1240px;margin:0 auto}.hero{padding:clamp(28px,5vw,56px) 0 clamp(16px,3vw,32px)}.hero h1{font-size:var(--step-4);line-height:1;font-weight:600;letter-spacing:-.025em;margin:0 0 .35em}.hero-lede{font-size:var(--step-1);line-height:1.45;max-width:46ch;color:var(--muted);margin:0 0 1.6em}.hero-actions{display:flex;flex-wrap:wrap;gap:12px;margin: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}@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"}