:root{--bg:#fff;--ink:#111318;--ink70:#111318b8;--ink65:#111318ad;--ink60:#111318a3;--ink55:#1113189e;--ink45:#11131899;--ink40:#11131894;--line:#11131821;--panel:#111318;--panelInk:#fff;--px-cobalt:#3b5bf6;--px-amber:#f6a61c;--px-red:#e8401c;--px-lime:#c8f218;--px-cobalt-ink:#3b5bf6;--px-amber-ink:#a16806;--px-red-ink:#d53716;--px-lime-ink:#677e07;--font-display:"Cabinet Grotesk", system-ui, sans-serif;--font-body:"General Sans", system-ui, sans-serif;--font-mono:"JetBrains Mono", ui-monospace, SFMono-Regular, monospace;--wrap-max:1560px;--wrap-pad:clamp(20px, 4vw, 56px);--prose-max:75ch}[data-mode=dark]{--bg:#0f1218;--ink:#eff1f6;--ink70:#eff1f6c7;--ink65:#eff1f6b8;--ink60:#eff1f6a8;--ink55:#eff1f699;--ink45:#eff1f68c;--ink40:#eff1f680;--line:#eff1f629;--panel:#eff1f6;--panelInk:#0f1218;--px-cobalt-ink:#5873f7;--px-amber-ink:#f6a61c;--px-red-ink:#e8401c;--px-lime-ink:#c8f218}
@font-face{font-family:Cabinet Grotesk;src:url(/fonts/cabinet-grotesk-500.woff2)format("woff2");font-weight:500;font-style:normal;font-display:swap}@font-face{font-family:Cabinet Grotesk;src:url(/fonts/cabinet-grotesk-700.woff2)format("woff2");font-weight:700;font-style:normal;font-display:swap}@font-face{font-family:Cabinet Grotesk;src:url(/fonts/cabinet-grotesk-800.woff2)format("woff2");font-weight:800;font-style:normal;font-display:swap}@font-face{font-family:General Sans;src:url(/fonts/general-sans-400.woff2)format("woff2");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:General Sans;src:url(/fonts/general-sans-500.woff2)format("woff2");font-weight:500;font-style:normal;font-display:swap}@font-face{font-family:General Sans;src:url(/fonts/general-sans-600.woff2)format("woff2");font-weight:600;font-style:normal;font-display:swap}@font-face{font-family:JetBrains Mono;src:url(/fonts/jetbrains-mono-nerd-400.woff2)format("woff2");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:JetBrains Mono;src:url(/fonts/jetbrains-mono-nerd-500.woff2)format("woff2");font-weight:500;font-style:normal;font-display:swap}
.px-section{max-width:var(--wrap-max);padding:clamp(48px, 8vh, 96px) var(--wrap-pad) 0;margin:0 auto}.px-head--column{flex:300px;min-width:min(100%,280px)}.px-head-title{font-family:var(--font-display);letter-spacing:-.02em;color:var(--ink);margin:0;font-size:clamp(30px,3.4vw,52px);font-weight:500;line-height:1.1}.px-head-label{font-family:var(--font-mono);letter-spacing:.22em;text-transform:uppercase;color:var(--ink40);margin-bottom:12px;font-size:11px;font-weight:400}.px-split{flex-wrap:wrap;align-items:flex-start;gap:30px clamp(32px,5vw,90px);display:flex}.px-split-body{flex:2 460px;min-width:0}.px-split-intro{color:var(--ink70);margin:14px 0 22px;font-size:14.5px;line-height:1.75}.px-split-intro a{color:inherit;text-underline-offset:3px;text-decoration:underline;text-decoration-thickness:1px;-webkit-text-decoration-color:var(--px-cobalt);text-decoration-color:var(--px-cobalt)}.px-row{border-top:1px solid var(--line);align-items:baseline;gap:20px;padding:15px 0;display:flex}.px-row.is-last{border-bottom:1px solid var(--line)}.px-row-tag{font-family:var(--font-mono);letter-spacing:.1em;color:var(--ink40);text-transform:uppercase;flex:0 0 56px;font-size:11px}.px-row-body{color:var(--ink70);font-size:14.5px;line-height:1.65}.px-row-body strong{color:var(--ink);font-weight:600}.px-matter{border-bottom:1px solid var(--line);color:var(--ink);flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:8px 32px;padding:18px 0;text-decoration:none;transition:padding-left .18s,color .18s;display:flex}.px-matter:hover{padding-left:10px}.px-matter:hover .px-matter-title{color:var(--px-cobalt-ink)}.px-matter-title{letter-spacing:-.015em;font-size:clamp(17px,2vw,22px);font-weight:500;transition:color .18s}.px-matter-tag{font-family:var(--font-mono);letter-spacing:.14em;text-transform:uppercase;color:var(--ink40);font-size:11px}.is-cobalt{color:var(--px-cobalt-ink)}.is-amber{color:var(--px-amber-ink)}.is-red{color:var(--px-red-ink)}.is-lime{color:var(--px-lime-ink)}.is-ink{color:var(--ink)}.px-project-field{width:100%;height:clamp(240px,32vh,320px);max-width:var(--wrap-max);border-block:1px solid var(--line);margin:0 auto;position:relative}.px-project-field canvas{width:100%;height:100%;display:block}
.px-article{max-width:900px;padding:clamp(32px, 5vh, 64px) var(--wrap-pad) clamp(48px, 8vh, 96px);margin:0 auto}.px-article-crumb{font-family:var(--font-mono);letter-spacing:.18em;text-transform:uppercase;color:var(--ink60);margin-bottom:clamp(16px,2.5vh,24px);font-size:11px}.px-article-crumb a{color:var(--ink60);text-decoration:none;transition:color .18s}.px-article-crumb a:hover{color:var(--px-cobalt-ink)}.px-article-title{font-family:var(--font-display);letter-spacing:-.02em;color:var(--ink);margin:0 0 12px;font-size:clamp(30px,4vw,52px);font-weight:500;line-height:1.12}.px-article-dek{color:var(--ink70);margin-bottom:20px;font-size:clamp(16px,1.5vw,19px);line-height:1.65}.px-article-byline{border-bottom:1px solid var(--line);font-family:var(--font-mono);letter-spacing:.14em;text-transform:uppercase;color:var(--ink60);flex-wrap:wrap;align-items:center;gap:6px 14px;padding-bottom:18px;font-size:11px;display:flex}.px-route-field{width:100%;height:clamp(84px,12vh,136px);margin:24px 0;display:block}.px-route-field.is-hero{border:1px solid var(--line);height:clamp(220px,36vh,380px);margin:28px 0 clamp(24px,4vh,40px)}.px-route-field canvas{width:100%;height:100%;display:block}.px-article-short{margin:28px 0}.px-article-kicker{font-family:var(--font-mono);letter-spacing:.22em;text-transform:uppercase;color:var(--ink60);margin-bottom:12px;font-size:11px}.px-article-body{max-width:75ch;color:var(--ink70);margin-top:32px;font-size:16px;line-height:1.8}.px-article-body h2{font-family:var(--font-display);letter-spacing:-.015em;color:var(--ink);margin:40px 0 16px;font-size:clamp(22px,2.4vw,28px);font-weight:500;line-height:1.25}.px-article-body p{margin:0 0 20px}
.px-article-body h3{font-family:var(--font-display);letter-spacing:-.01em;color:var(--ink);margin:30px 0 12px;font-size:clamp(17px,1.8vw,20px);font-weight:500}.px-article-body ul,.px-article-body ol{margin:0 0 20px;padding-left:22px}.px-article-body li{margin-bottom:8px}.px-article-body strong{color:var(--ink);font-weight:600}.px-article-body a{color:var(--px-cobalt-ink);text-underline-offset:3px;text-decoration:underline;text-decoration-thickness:1px}.px-article-body a:hover{text-decoration-thickness:2px}.px-article-body a[data-external=true]{-webkit-text-decoration-color:color-mix(in srgb, var(--px-cobalt-ink) 45%, transparent);text-decoration-color:color-mix(in srgb, var(--px-cobalt-ink) 45%, transparent)}.px-article-body blockquote{border-left:2px solid var(--line);color:var(--ink60);margin:0 0 20px;padding-left:18px}.px-article-body code{font-family:var(--font-mono);border:1px solid var(--line);background:color-mix(in srgb, var(--ink) 4%, transparent);color:var(--ink);border-radius:3px;padding:1px 5px;font-size:.88em}.px-article-body pre{border:1px solid var(--line);background:color-mix(in srgb, var(--ink) 3%, transparent);margin:0 0 22px;padding:16px 18px;line-height:1.65;overflow-x:auto}.px-article-body pre code{color:var(--ink70);background:0 0;border:0;border-radius:0;padding:0;font-size:12.5px}.px-table-scroll{margin:0 0 24px;overflow-x:auto}.px-article-body table{border-collapse:collapse;width:100%;font-size:14px;line-height:1.6}.px-article-body th,.px-article-body td{text-align:left;vertical-align:top;border-bottom:1px solid var(--line);padding:10px 14px 10px 0}.px-article-body th{font-family:var(--font-mono);letter-spacing:.14em;text-transform:uppercase;color:var(--ink40);border-bottom-color:var(--ink40);font-size:10.5px;font-weight:500}.px-article-body hr{border:0;border-top:1px solid var(--line);margin:36px 0}.px-page{max-width:var(--wrap-max);padding:clamp(24px, 4vh, 48px) var(--wrap-pad) clamp(56px, 9vh, 104px);margin:0 auto}.px-page-head{border-bottom:1px solid var(--line);flex-wrap:wrap;justify-content:space-between;align-items:flex-end;gap:16px clamp(24px,5vw,72px);padding-bottom:clamp(20px,3vh,32px);display:flex}.px-page-title{font-family:var(--font-display);letter-spacing:-.025em;color:var(--ink);margin:0;font-size:clamp(30px,4.4vw,56px);font-weight:500;line-height:1.05}.px-page-lede{max-width:62ch;color:var(--ink70);margin:14px 0 0;font-size:15px;line-height:1.75}.px-eyebrow{font-family:var(--font-mono);letter-spacing:.22em;text-transform:uppercase;color:var(--ink40);margin-bottom:12px;font-size:11px}.px-meter{text-align:right;flex:none;min-width:220px}.px-meter-count{font-family:var(--font-display);letter-spacing:-.02em;color:var(--ink);font-size:clamp(28px,3.2vw,40px);font-weight:500;line-height:1}.px-meter-count span{color:var(--ink40);letter-spacing:0;font-size:.55em}.px-meter-label{font-family:var(--font-mono);letter-spacing:.16em;text-transform:uppercase;color:var(--ink40);margin-top:8px;font-size:10.5px}.px-meter-ticks{justify-content:flex-end;gap:3px;margin-top:10px;display:flex}.px-tick{background:color-mix(in srgb, var(--ink) 12%, transparent);width:7px;height:18px}.px-tick.is-done{background:var(--px-cobalt)}.px-tick.is-reading{background:var(--px-amber)}.px-module{border-bottom:1px solid var(--line);padding:clamp(22px,3.5vh,34px) 0}.px-module-head{flex-wrap:wrap;align-items:baseline;gap:6px 20px;display:flex}.px-module-index{font-family:var(--font-mono);letter-spacing:.16em;color:var(--ink40);flex:none;font-size:11px}.px-module-title{font-family:var(--font-display);letter-spacing:-.015em;color:var(--ink);margin:0;font-size:clamp(19px,2.2vw,26px);font-weight:500}.px-module-title a{color:inherit}.px-module-title a:hover{color:var(--px-cobalt-ink)}.px-module-meta{font-family:var(--font-mono);letter-spacing:.14em;text-transform:uppercase;color:var(--ink40);margin-left:auto;font-size:10.5px}.px-module-artifact{max-width:66ch;color:var(--ink60);margin:10px 0 0;font-size:14px;line-height:1.7}.px-lesson-rows{margin-top:16px}.px-lesson-row{border-top:1px solid var(--line);color:var(--ink);align-items:baseline;gap:16px;padding:11px 0;transition:padding-left .18s;display:flex}.px-lesson-row:hover{padding-left:8px}.px-lesson-row:hover .px-lesson-name{color:var(--px-cobalt-ink)}.px-lesson-num{font-family:var(--font-mono);color:var(--ink40);flex:0 0 28px;font-size:11px}.px-lesson-name{letter-spacing:-.01em;flex:auto;font-size:15px;font-weight:500;transition:color .18s}.px-lesson-time{font-family:var(--font-mono);letter-spacing:.12em;text-transform:uppercase;color:var(--ink40);flex:none;font-size:10.5px}.px-state{font-family:var(--font-mono);letter-spacing:.14em;text-transform:uppercase;border:1px solid var(--line);color:var(--ink40);flex:none;padding:2px 7px;font-size:10px}.px-state.is-done{border-color:var(--px-cobalt);color:var(--px-cobalt-ink)}.px-state.is-reading{border-color:var(--px-amber);color:var(--px-amber-ink)}.px-panel{border:1px solid var(--line);margin:clamp(24px,4vh,40px) 0;padding:clamp(18px,3vw,28px)}.px-panel-title{font-family:var(--font-display);letter-spacing:-.015em;color:var(--ink);margin:0 0 6px;font-size:clamp(18px,2vw,22px);font-weight:500}.px-panel-note{color:var(--ink60);margin:0 0 18px;font-size:13.5px;line-height:1.7}.px-cards{background:var(--line);border:1px solid var(--line);grid-template-columns:repeat(auto-fit,minmax(min(100%,260px),1fr));gap:1px;margin:clamp(24px,4vh,36px) 0;display:grid}.px-card{background:var(--bg);color:var(--ink);flex-direction:column;gap:8px;padding:clamp(18px,2.6vw,26px);transition:background .18s;display:flex}a.px-card:hover{background:color-mix(in srgb, var(--px-cobalt) 7%, var(--bg))}.px-card-kicker{font-family:var(--font-mono);letter-spacing:.16em;text-transform:uppercase;color:var(--ink40);font-size:10.5px}.px-card-title{font-family:var(--font-display);letter-spacing:-.015em;font-size:18px;font-weight:500}.px-card-body{color:var(--ink60);font-size:13.5px;line-height:1.7}.px-quiz-prompt{color:var(--ink);margin:0 0 20px;font-size:15.5px;line-height:1.75}.px-field{flex-direction:column;gap:6px;display:flex}.px-label{font-family:var(--font-mono);letter-spacing:.14em;text-transform:uppercase;color:var(--ink40);font-size:10.5px}.px-textarea{border:1px solid var(--line);width:100%;min-height:150px;font-family:var(--font-body);color:var(--ink);resize:vertical;background:0 0;padding:12px 14px;font-size:14.5px;line-height:1.7}.px-textarea:focus{outline:2px solid var(--px-cobalt);outline-offset:1px}.px-quiz-actions{flex-wrap:wrap;align-items:center;gap:10px 14px;margin-top:14px;display:flex}.px-button{border:1px solid var(--line);background:var(--panel);color:var(--panelInk);font-family:var(--font-mono);letter-spacing:.14em;text-transform:uppercase;cursor:pointer;align-items:center;gap:8px;padding:9px 16px;font-size:11px;font-weight:500;transition:opacity .18s;display:inline-flex}.px-button:disabled{opacity:.5;cursor:not-allowed}.px-button--ghost{color:var(--ink);background:0 0}.px-button--ghost:hover{border-color:var(--px-cobalt);color:var(--px-cobalt-ink)}.px-grades{gap:8px;margin-left:auto;display:flex}.px-grade{border:1px solid var(--line);font-family:var(--font-mono);letter-spacing:.12em;text-transform:uppercase;color:var(--ink40);cursor:pointer;background:0 0;padding:6px 11px;font-size:10px}.px-grade.is-on{color:var(--ink);border-color:var(--ink)}.px-grade.is-on[data-grade=confident]{border-color:var(--px-cobalt);color:var(--px-cobalt-ink)}.px-grade.is-on[data-grade=partial]{border-color:var(--px-amber);color:var(--px-amber-ink)}.px-grade.is-on[data-grade=missed]{border-color:var(--px-red);color:var(--px-red-ink)}.px-answer{border:1px solid var(--px-cobalt);background:color-mix(in srgb, var(--px-cobalt) 6%, transparent);margin-top:20px;padding:18px 20px}.px-answer-label{font-family:var(--font-mono);letter-spacing:.16em;text-transform:uppercase;color:var(--px-cobalt-ink);margin-bottom:8px;font-size:10.5px}.px-answer-text{color:var(--ink70);margin:0;font-size:14.5px;line-height:1.75}.px-saved-note{font-family:var(--font-mono);letter-spacing:.1em;color:var(--ink40);font-size:10.5px}.px-lesson-layout{max-width:var(--wrap-max);padding:clamp(24px, 4vh, 40px) var(--wrap-pad) clamp(56px, 9vh, 104px);grid-template-columns:minmax(0,78ch) 230px;justify-content:center;align-items:start;gap:clamp(28px,5vw,72px);margin:0 auto;display:grid}.px-toc{font-size:13px;line-height:1.6;position:sticky;top:24px}.px-toc-title{font-family:var(--font-mono);letter-spacing:.16em;text-transform:uppercase;color:var(--ink40);border-bottom:1px solid var(--line);margin-bottom:12px;padding-bottom:10px;font-size:10.5px}.px-toc ol{counter-reset:toc;margin:0;padding:0;list-style:none}.px-toc li{margin-bottom:9px}.px-toc a{color:var(--ink60);transition:color .18s}.px-toc a:hover{color:var(--px-cobalt-ink)}.px-pager{border-top:1px solid var(--line);flex-wrap:wrap;justify-content:space-between;gap:16px;margin-top:clamp(36px,6vh,56px);padding-top:20px;display:flex}.px-pager-link{max-width:46%;color:var(--ink)}.px-pager-link.is-next{text-align:right;margin-left:auto}.px-pager-dir{font-family:var(--font-mono);letter-spacing:.16em;text-transform:uppercase;color:var(--ink40);margin-bottom:5px;font-size:10.5px;display:block}.px-pager-name{letter-spacing:-.01em;font-size:15px;font-weight:500}.px-pager-link:hover .px-pager-name{color:var(--px-cobalt-ink)}.px-files{margin-top:8px}.px-file{border-top:1px solid var(--line);color:var(--ink);align-items:baseline;gap:14px;padding:10px 0;display:flex}.px-file:hover .px-file-name{color:var(--px-cobalt-ink)}.px-file-name{font-family:var(--font-mono);word-break:break-all;flex:auto;font-size:12.5px;transition:color .18s}.px-file-size{font-family:var(--font-mono);letter-spacing:.1em;color:var(--ink40);flex:none;font-size:10.5px}.px-atlas-frame{border:1px solid var(--line);background:var(--bg);width:100%;height:min(82vh,900px)}@media (max-width:900px){.px-lesson-layout{grid-template-columns:minmax(0,1fr);justify-content:stretch}.px-toc{display:none}}@media (max-width:640px){.px-meter{text-align:left;min-width:0}.px-meter-ticks{justify-content:flex-start}.px-module-meta{margin-left:0}.px-lesson-row{flex-wrap:wrap}.px-grades{margin-left:0}.px-pager-link,.px-pager-link.is-next{text-align:left;max-width:100%}.px-pager-link.is-next{margin-left:0}}
*,:before,:after{box-sizing:border-box}html{scroll-behavior:smooth}body{background:var(--bg);color:var(--ink);font-family:var(--font-body);-webkit-font-smoothing:antialiased;margin:0;transition:background .25s,color .25s}a{color:var(--ink);text-decoration:none}a:hover{color:var(--px-cobalt)}:focus-visible{outline:2px solid var(--px-cobalt);outline-offset:3px}[hidden]{display:none!important}.px-wrap{max-width:var(--wrap-max);padding-inline:var(--wrap-pad);margin:0 auto}.px-sr-only{clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.px-header{max-width:var(--wrap-max);padding:16px var(--wrap-pad);color:var(--ink60);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px 16px;margin:0 auto;font-size:13px;font-weight:500;display:flex}.px-header-end{align-items:center;gap:clamp(14px,2.4vw,26px);display:flex}.px-nav{flex-wrap:wrap;gap:clamp(12px,2vw,24px);display:flex}.px-nav-list{flex-wrap:wrap;gap:clamp(12px,2vw,24px);margin:0;padding:0;list-style:none;display:flex}.px-nav-action{font-family:var(--font-body);color:var(--ink60);cursor:pointer;background:0 0;border:0;padding:4px 0;font-size:13px;font-weight:500;transition:color .18s}.px-nav-action:hover{color:var(--px-cobalt)}.px-nav-action.is-active{color:var(--ink);text-underline-offset:4px;text-decoration:underline;text-decoration-thickness:1px;-webkit-text-decoration-color:var(--px-cobalt);text-decoration-color:var(--px-cobalt)}.px-wordmark-link{font-family:var(--font-body);color:var(--ink60);font-size:14px;font-weight:500}.px-wordmark-subdomain{color:var(--px-cobalt-ink);font-weight:600}.px-wordmark-domain{color:var(--ink)}.px-header-auth-status{align-items:center;gap:12px;display:flex}@media (pointer:coarse){.px-nav a,.px-nav button,.px-nav-action,.px-theme-switch{align-items:center;min-height:44px;display:inline-flex}}@media (max-width:640px){.px-header{grid-template-columns:1fr auto;grid-template-areas:"wordmark switch""nav nav";align-items:center;gap:8px 16px;padding-block:12px;display:grid}.px-header-end{display:contents}.px-wordmark{grid-area:wordmark}.px-header-auth-status{grid-area:switch;justify-self:end}.px-nav{overscroll-behavior-x:contain;scrollbar-width:none;-ms-overflow-style:none;flex-wrap:nowrap;grid-area:nav;overflow-x:auto}.px-nav::-webkit-scrollbar{display:none}.px-nav-list{flex-wrap:nowrap;gap:14px;width:max-content}.px-nav-list>li{flex:none}}.px-hero-block{max-width:var(--wrap-max);margin:0 auto}.px-hero{padding:clamp(24px, 4vh, 56px) var(--wrap-pad) clamp(20px, 3vh, 40px);flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:24px clamp(32px,6vw,120px);display:flex}.px-hero-title{font-family:var(--font-display);letter-spacing:-.03em;text-transform:uppercase;color:var(--ink);margin:0;font-size:clamp(54px,7.8vw,122px);font-weight:800;line-height:.92}.px-hero-aside{flex:0 400px;min-width:min(100%,280px);padding-top:8px}.px-hero-sub{letter-spacing:.08em;text-transform:uppercase;text-align:justify;text-align-last:justify;color:var(--ink);font-size:clamp(15px,1.6vw,21px);font-weight:400;line-height:1.55}.px-hero-note{justify-content:flex-end;gap:18px;margin-top:20px;display:flex}.px-hero-swatch{background:conic-gradient(var(--ink) 0 25%, transparent 0 50%, var(--ink) 0 75%, transparent 0);flex-shrink:0;width:22px;height:14px;margin-top:4px;display:inline-block}.px-hero-note p{text-align:right;max-width:34ch;color:var(--ink70);margin:0;font-size:13px;line-height:1.6}@media (prefers-reduced-motion:reduce){*,:before,:after{transition:none!important;animation:none!important}.px-heatfield canvas,.px-project-field canvas,.px-route-field canvas{pointer-events:none}}html[data-motion=off] *,html[data-motion=off] :before,html[data-motion=off] :after{transition:none!important;animation:none!important}html[data-motion=off] .px-heatfield canvas,html[data-motion=off] .px-project-field canvas,html[data-motion=off] .px-route-field canvas{pointer-events:none}
