@import url('https://fonts.googleapis.com/css2?family=IBM+Plex+Sans:wght@400;450;500;600;700&display=swap');
:root{--ink:#252330;--muted:#666271;--purple:#554087;--lavender:#efedf6;--paper:#f6f5fa;--yellow:#f2cf59;--line:#dedbe6;font-family:'IBM Plex Sans','Segoe UI',sans-serif;color:var(--ink);background:white;font-synthesis:none;line-height:1.65}
*{box-sizing:border-box}body{margin:0}a{color:var(--purple);text-underline-offset:4px}a:hover{text-decoration-thickness:2px}button,input{font:inherit}button,summary{cursor:pointer}button{line-height:1.3}a:focus-visible,button:focus-visible,input:focus-visible,summary:focus-visible{outline:3px solid var(--purple);outline-offset:5px}.wrap{width:min(1120px,calc(100% - 64px));margin-inline:auto}.skip{position:absolute;left:16px;top:-100px;background:white;padding:12px;z-index:9}.skip:focus{top:10px}.header{border-bottom:1px solid var(--line);background:white}.brand-row{display:flex;justify-content:space-between;align-items:center;padding-block:25px 21px;gap:20px}.brand{font-size:24px;font-weight:600;line-height:1.25;text-decoration:none;color:var(--ink)}.brand span{color:var(--purple);padding:0 3px}.brand small{display:block;font-size:13px;color:var(--muted);font-weight:400;margin-top:5px}.brand-row>p{font-size:13px;text-align:right;line-height:1.5;margin:0}.main-nav{display:grid;grid-template-columns:repeat(4,1fr);gap:5px;padding-bottom:13px}.main-nav a{display:flex;align-items:center;gap:11px;text-decoration:none;font-size:15px;font-weight:500;color:var(--muted);padding:12px;border-radius:4px}.main-nav a:hover{background:var(--paper)}.main-nav a[aria-current]{background:var(--purple);color:white}.nav-number{font-size:12px;border:1px solid currentColor;width:22px;height:22px;border-radius:50%;display:grid;place-items:center;flex:none;line-height:1}h1,h2,h3,p,figure{margin:0}h1,h2,h3{line-height:1.2;letter-spacing:-.025em}h1{font-size:clamp(32px,4.1vw,48px);font-weight:600;max-width:20ch}h2{font-size:27px;font-weight:600}h3{font-size:19px;font-weight:600}p{margin-top:16px;max-width:68ch}strong{font-weight:600}.lead{font-size:20px;line-height:1.6;color:#4d485a}.button{display:inline-flex;align-items:center;justify-content:center;min-height:46px;padding:12px 21px;border:1px solid var(--purple);border-radius:4px;background:var(--purple);color:white;text-decoration:none;font-weight:500;font-size:15px}.button:hover{background:#423169}.button.secondary{background:white;color:var(--purple)}.button.secondary:hover{background:var(--lavender)}.intro{padding-block:64px 54px}.home-intro{display:grid;grid-template-columns:1.15fr 1fr;gap:48px;align-items:center}.home-intro .button{margin-top:27px}.project-figure{background:var(--paper);padding:20px;border-radius:10px}.project-figure svg{width:100%;height:auto;display:block}.project-figure figcaption{font-size:14px;line-height:1.6;margin:14px 9px 0;color:var(--muted)}.home-details{display:grid;grid-template-columns:1.15fr 1fr;gap:70px;border-top:1px solid var(--line);padding-top:40px}.home-details h2{font-size:25px}.home-details>div>h2:not(:first-child){margin-top:36px}.project-status{border-left:4px solid var(--yellow);padding-left:25px;align-self:start}.project-status p{font-size:15px}.project-status strong{display:block}.next-page{margin-top:55px;border-top:1px solid var(--line);padding-block:26px 12px;display:flex;justify-content:space-between;align-items:center;gap:20px}.next-page>span{font-size:14px;color:var(--muted)}.footer{margin-top:60px;padding-block:23px 30px;border-top:1px solid var(--line);display:flex;justify-content:space-between;gap:20px;font-size:13px;align-items:center}.footer p{margin:0}.footer span{color:var(--muted)}.page-heading{padding-block:47px 37px;max-width:850px}.page-heading h1{max-width:25ch}.page-position{font-size:14px;color:var(--purple);margin:0 0 12px}.page-heading>a{display:inline-block;font-size:14px;margin-bottom:18px}.reading-layout{display:grid;grid-template-columns:215px minmax(0,1fr);gap:65px;align-items:start}.on-this-page{display:flex;flex-direction:column;gap:11px;position:sticky;top:25px;border-left:3px solid var(--yellow);padding-left:17px;font-size:14px}.on-this-page strong{margin-bottom:5px}.on-this-page a{color:var(--muted)}.article-body{max-width:720px}.article-body section{margin-bottom:42px}.article-body h2{font-size:27px}.article-body h3{margin-top:25px}.article-body li{padding-left:4px;margin-block:10px}.article-body ul{padding-left:20px}.note,.callout,.plain-example{background:var(--paper);padding:20px 24px;margin-block:25px;border-left:3px solid var(--purple)}.note p,.callout p,.plain-example p{margin-top:7px}.definitions{margin-block:24px}.definitions>div{display:grid;grid-template-columns:175px 1fr;gap:25px;padding-block:22px;border-top:1px solid var(--line)}.definitions dt{font-size:20px;font-weight:600}.definitions dt span{display:block;font-size:13px;color:var(--muted);font-weight:400;margin-top:6px}.definitions dd{margin:0}.sources{padding:18px 0;border-top:1px solid var(--line);font-size:14px}.sources summary{color:var(--purple);font-weight:500}.stack-steps{display:flex;flex-wrap:wrap;gap:10px;margin-block:22px;font-size:14px}code{font-family:Consolas,monospace;font-size:.9em;background:var(--paper);padding:2px 5px;overflow-wrap:anywhere}.guide-list{display:grid;grid-template-columns:1fr 1fr;column-gap:65px}.guide-list article{padding-block:27px 32px;border-top:1px solid var(--line)}.guide-list h2{font-size:24px;margin-top:10px}.guide-list p{color:var(--muted);margin-bottom:21px}.guide-meta{font-size:13px;font-weight:600;color:var(--purple)}.guide-meta.pending{color:var(--muted)}.reference-section{max-width:780px;margin-top:35px}.reference-section li{margin-block:10px}.simulation-notice{font-size:14px;border-left:3px solid var(--yellow);padding-left:13px;color:var(--muted)}.experiment-layout{display:grid;grid-template-columns:270px minmax(0,1fr);gap:36px;align-items:start}.activity h2{font-size:23px}.tasks{list-style:none;counter-reset:task;padding:0;margin:20px 0}.tasks li{counter-increment:task;position:relative;padding:0 0 23px 35px;border-left:1px solid var(--line);margin-left:11px}.tasks li::before{content:counter(task);position:absolute;left:-12px;top:0;display:grid;place-items:center;width:23px;height:23px;border-radius:50%;background:white;border:1px solid #9992ab;font-size:12px}.tasks li:last-child{border:0;padding-bottom:0}.tasks li.done::before{content:'✓';color:white;background:var(--purple);border-color:var(--purple)}.tasks strong{font-size:15px}.tasks p{font-size:14px;line-height:1.55;margin-top:7px;color:var(--muted)}.task-status{font-size:12px;color:var(--muted);display:inline-block;margin-top:6px}.done .task-status{color:var(--purple);font-weight:600}#exercise-progress{font-size:14px;font-weight:500}.text-button{background:none;border:0;padding:10px 0;color:var(--purple);text-decoration:underline;text-underline-offset:4px;font-size:14px}.bench{border:1px solid #c8c2d7;border-radius:8px;overflow:hidden;background:var(--paper)}.bench-title{display:flex;align-items:center;justify-content:space-between;background:var(--lavender);padding:17px 24px;border-bottom:1px solid #c8c2d7;gap:12px}.bench-title h2{font-size:20px}.bench-title>span{font-size:12px;color:var(--muted)}.instruments{padding:26px 24px;display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);column-gap:34px}.instruments h3{font-size:19px}.instruments p{font-size:13px;color:var(--muted);margin-top:7px}.sensor-panel{grid-column:1;grid-row:1;background:white;padding:18px;border:1px solid var(--line);border-radius:5px}.receiver-panel{grid-column:2;grid-row:1;background:white;padding:18px;border:1px solid var(--line);border-radius:5px}.temperature{display:flex;align-items:baseline;gap:6px;margin-block:17px;font-variant-numeric:tabular-nums;font-size:57px;line-height:1.1;font-weight:500;letter-spacing:-2px}.temperature>span:last-child{font-size:23px;letter-spacing:0;font-weight:400;color:var(--muted)}.sensor-panel label{display:block;font-size:13px}.sensor-panel input{width:100%;accent-color:var(--purple);margin:12px 0 0;min-height:25px;cursor:pointer}.range-labels{display:flex;justify-content:space-between;font-size:11px;color:var(--muted);margin-bottom:18px}.sensor-panel .button{width:100%;padding-inline:9px}.connection{grid-column:1/-1;grid-row:2;text-align:center;margin-top:23px}.connection label{display:inline-flex;align-items:center;gap:7px;font-size:14px;font-weight:500;cursor:pointer}.connection input{accent-color:var(--purple);width:18px;height:18px}.connection p{margin:3px auto 0}.connection-line{display:block;width:55%;height:14px;border:2px solid var(--purple);border-top:0;margin:0 auto 12px;position:relative}.connection-line:before{content:'';position:absolute;bottom:-6px;left:calc(50% - 4px);width:8px;height:8px;background:var(--purple);border-radius:50%}.offline .connection-line{border-style:dashed;border-color:#9992ab}.offline .connection-line:before{background:#9992ab}.rule-state{padding:14px;background:var(--paper);margin-top:18px;font-size:13px;border-left:3px solid #aaa4b6}.rule-state.alert{background:#fff3c5;border-left-color:#947000}.rule-state p{font-size:12px}.delivery-status{margin:0!important;padding:17px 24px;border-block:1px solid var(--line);background:white;max-width:none;font-size:14px;min-height:80px}.history{padding:22px 24px}.history h3{font-size:17px}.history p{font-size:12px;color:var(--muted);margin-top:6px}#history-empty{font-size:13px;color:var(--muted);padding-block:22px}#history-list{list-style:none;padding:0;margin:18px 0 0;display:grid;grid-template-columns:repeat(3,1fr);gap:8px}#history-list:empty{display:none}#history-list li{padding:10px 12px;background:white;border-bottom:3px solid var(--purple)}#history-list li.hot{border-color:#b58800}#history-list li span{display:block;font-size:11px;color:var(--muted)}#history-list li strong{font-size:18px}.lesson-summary{margin-top:55px;padding-top:36px;border-top:1px solid var(--line)}.lesson-summary>div:not(.note){display:grid;grid-template-columns:repeat(3,1fr);gap:32px;margin-top:27px}.lesson-summary p{font-size:15px}.lesson-summary .note{margin-top:32px}.lesson-summary .note p{max-width:90ch}section[id]{scroll-margin-top:20px}[hidden]{display:none!important}
@media(min-width:1400px){.wrap{width:min(1190px,calc(100% - 100px))}.home-intro{gap:65px}}
@media(max-width:1000px){.home-intro{gap:30px}.main-nav a{font-size:13px;gap:7px;padding-inline:8px}.experiment-layout{grid-template-columns:230px minmax(0,1fr);gap:24px}.instruments{column-gap:16px;padding:20px 16px}.sensor-panel,.receiver-panel{padding:14px}.temperature{font-size:46px}.reading-layout{gap:35px;grid-template-columns:180px minmax(0,1fr)}}
@media(max-width:780px){.wrap{width:calc(100% - 40px)}.brand-row{padding-block:20px}.main-nav{grid-template-columns:1fr 1fr;gap:6px}.main-nav a{font-size:14px;padding:10px}.home-intro{grid-template-columns:1fr;padding-block:38px}.home-intro h1{max-width:24ch}.project-figure{max-width:540px}.home-details{grid-template-columns:1fr;gap:30px}.project-status{padding-left:20px}.page-heading{padding-top:35px}.reading-layout{grid-template-columns:1fr;gap:28px}.on-this-page{position:static;display:flex;flex-wrap:wrap;flex-direction:row;gap:8px 18px}.on-this-page strong{width:100%}.experiment-layout{grid-template-columns:1fr}.activity{padding:20px;background:var(--paper)}.tasks{display:grid;grid-template-columns:1fr 1fr;gap:20px;margin-bottom:0}.tasks li{border:0;padding-bottom:5px}.bench{max-width:680px;width:100%}.lesson-summary>div:not(.note){grid-template-columns:1fr;gap:27px}.guide-list{column-gap:30px}.footer{margin-top:40px}.lead{font-size:18px}}
@media(max-width:480px){.brand{font-size:21px}.brand small{font-size:11px}.brand-row>p{font-size:11px}.main-nav a{font-size:12px;gap:7px}.nav-number{width:20px;height:20px;font-size:11px}.wrap{width:calc(100% - 32px)}h1{font-size:32px}h2{font-size:24px}.project-figure{padding:10px}.project-figure figcaption{font-size:13px}.home-details{padding-top:30px}.page-heading{padding-bottom:28px}.next-page{align-items:flex-start;flex-direction:column;gap:12px}.footer{flex-direction:column;align-items:flex-start}.definitions>div{grid-template-columns:1fr;gap:12px}.definitions dt span{margin:0}.guide-list{grid-template-columns:1fr}.tasks{grid-template-columns:1fr;gap:15px}.instruments{column-gap:10px;padding:18px 10px}.sensor-panel,.receiver-panel{padding:12px 10px}.instruments h3{font-size:17px}.instruments p{font-size:12px}.temperature{font-size:39px}.temperature>span:last-child{font-size:18px}.sensor-panel .button{font-size:12px}.rule-state{padding:10px 8px;font-size:12px}.bench-title{padding:16px}.bench-title>span{font-size:11px}.history,.delivery-status{padding:18px 16px}.note,.callout,.plain-example{padding:18px}.article-body h2{font-size:24px}.lesson-summary{margin-top:36px}#history-list li{padding:8px}.reference-section ul{padding-left:20px}}
@media(prefers-reduced-motion:reduce){*,*::before,*::after{scroll-behavior:auto!important;animation:none!important;transition:none!important}}
@media(max-width:480px){.instruments{grid-template-columns:minmax(0,1fr);padding:16px}.sensor-panel{grid-column:1;grid-row:1;padding:18px}.connection{grid-column:1;grid-row:2;margin-block:18px}.receiver-panel{grid-column:1;grid-row:3;padding:18px}.instruments p{font-size:14px}.instruments h3{font-size:20px}.temperature{font-size:48px;margin-block:14px}.sensor-panel .button{font-size:15px}.sensor-panel label{font-size:14px}.rule-state{font-size:14px;padding:14px}.rule-state p{font-size:13px}.connection-line{width:2px;height:22px;border:none;border-left:2px solid var(--purple);margin-bottom:12px}.offline .connection-line{border-left:2px dashed #9992ab}}
