@font-face{font-family:Martel Sans;font-style:normal;font-weight:300;font-display:swap;src:url(../media/0845f6a09ef2ac78-s.2-lt3wbv06fez.woff2)format("woff2");unicode-range:U+900-97F,U+1CD0-1CF4,U+1CF7-1CF9,U+200C-200D,U+20A8,U+20B9,U+20F0,U+25CC,U+A830-A839,U+A8E0-A8FF,U+11B00-11B0A}@font-face{font-family:Martel Sans;font-style:normal;font-weight:300;font-display:swap;src:url(../media/493080ed793dc5d2-s.2vtbjcwm4p7cf.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,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:Martel Sans;font-style:normal;font-weight:300;font-display:swap;src:url(../media/bb09c915d866f87f-s.p.2b5o-jw450hud.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Martel Sans;font-style:normal;font-weight:400;font-display:swap;src:url(../media/cde8f46b6f851892-s.0l39ozi4a3o_p.woff2)format("woff2");unicode-range:U+900-97F,U+1CD0-1CF4,U+1CF7-1CF9,U+200C-200D,U+20A8,U+20B9,U+20F0,U+25CC,U+A830-A839,U+A8E0-A8FF,U+11B00-11B0A}@font-face{font-family:Martel Sans;font-style:normal;font-weight:400;font-display:swap;src:url(../media/10ed666ef3255254-s.322oa1p3ynnuz.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,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:Martel Sans;font-style:normal;font-weight:400;font-display:swap;src:url(../media/d2e16022e41e58be-s.p.1dk4p90tfen45.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Martel Sans;font-style:normal;font-weight:600;font-display:swap;src:url(../media/199792abf1d03942-s.222lfj_777gqh.woff2)format("woff2");unicode-range:U+900-97F,U+1CD0-1CF4,U+1CF7-1CF9,U+200C-200D,U+20A8,U+20B9,U+20F0,U+25CC,U+A830-A839,U+A8E0-A8FF,U+11B00-11B0A}@font-face{font-family:Martel Sans;font-style:normal;font-weight:600;font-display:swap;src:url(../media/5246574b50f9c4f7-s.26xb5jdi3k9kv.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,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:Martel Sans;font-style:normal;font-weight:600;font-display:swap;src:url(../media/e640f586e5baa0c4-s.p.2wnap8y3h3w0m.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Martel Sans;font-style:normal;font-weight:700;font-display:swap;src:url(../media/96baaa9a2f6a15d4-s.43velmy2txyxg.woff2)format("woff2");unicode-range:U+900-97F,U+1CD0-1CF4,U+1CF7-1CF9,U+200C-200D,U+20A8,U+20B9,U+20F0,U+25CC,U+A830-A839,U+A8E0-A8FF,U+11B00-11B0A}@font-face{font-family:Martel Sans;font-style:normal;font-weight:700;font-display:swap;src:url(../media/821e2c6a3cba243d-s.30-g_2ut6ymuk.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,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:Martel Sans;font-style:normal;font-weight:700;font-display:swap;src:url(../media/79af918827fc3516-s.p.2qf_5ynkpt-jc.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Martel Sans Fallback;src:local(Arial);ascent-override:107.25%;descent-override:62.86%;line-gap-override:0.0%;size-adjust:107.22%}.hkbMqa_className{font-family:Martel Sans,Martel Sans Fallback;font-style:normal}.hkbMqa_variable{--font-sans:"Martel Sans", "Martel Sans Fallback"}
@font-face{font-family:Libre Caslon Text;font-style:italic;font-weight:400;font-display:swap;src:url(../media/1da7971befa2e0ab-s.0gcpnt4m-5s5j.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,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:Libre Caslon Text;font-style:italic;font-weight:400;font-display:swap;src:url(../media/00ee5b4487506171-s.p.24ir78z669k58.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Libre Caslon Text;font-style:normal;font-weight:400;font-display:swap;src:url(../media/a3e5777798c5e4b9-s.411aav-9w-aoh.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,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:Libre Caslon Text;font-style:normal;font-weight:400;font-display:swap;src:url(../media/d3ca09bdef9637ff-s.p.34pxs3l5kt36m.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Libre Caslon Text;font-style:normal;font-weight:700;font-display:swap;src:url(../media/fc305d0af336f700-s.15b7ujq1icu3o.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,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:Libre Caslon Text;font-style:normal;font-weight:700;font-display:swap;src:url(../media/adac34f79c5dec90-s.p.17bkc83it2-u9.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Libre Caslon Text Fallback;src:local(Times New Roman);ascent-override:82.44%;descent-override:22.1%;line-gap-override:0.0%;size-adjust:117.66%}.qMU9ca_className{font-family:Libre Caslon Text,Libre Caslon Text Fallback}.qMU9ca_variable{--font-serif:"Libre Caslon Text", "Libre Caslon Text Fallback"}
@font-face{font-family:Courier Prime;font-style:normal;font-weight:400;font-display:swap;src:url(../media/58001a14c3511596-s.18kjkh28iesz_.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,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:Courier Prime;font-style:normal;font-weight:400;font-display:swap;src:url(../media/7d2dd58e31d7c0b6-s.p.3a10o7es2neby.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Courier Prime;font-style:normal;font-weight:700;font-display:swap;src:url(../media/cc5a462c378235ed-s.1_9u50gws63pa.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,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:Courier Prime;font-style:normal;font-weight:700;font-display:swap;src:url(../media/7172132ea3483a1a-s.p.1xmps1tcyqv34.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Courier Prime Fallback;src:local(Arial);ascent-override:58.08%;descent-override:25.41%;line-gap-override:0.0%;size-adjust:134.5%}.VdGtwq_className{font-family:Courier Prime,Courier Prime Fallback;font-style:normal}.VdGtwq_variable{--font-code:"Courier Prime", "Courier Prime Fallback"}
:root{--paper:#f5f0e4;--paper-2:#ece5d3;--ink:#1d2621;--ink-2:#4b5650;--rule:#d6ccb4;--green:#1f5a43;--green-ink:#f5f0e4;--pass-bg:#e3efe5;--fail-bg:#f6e3dc;--fail:#9a3412;--font-ui:var(--font-sans), "Segoe UI", sans-serif;--font-head:var(--font-serif), Georgia, serif;--font-formula:var(--font-code), "Courier New", monospace}@media (prefers-color-scheme:dark){:root{--paper:#151b17;--paper-2:#1e2721;--ink:#ece6d6;--ink-2:#aab3ac;--rule:#34403a;--green:#7cc29f;--green-ink:#101713;--pass-bg:#1d3328;--fail-bg:#3a231b;--fail:#f0a07a}}*{box-sizing:border-box}html{background:var(--paper)}body{background:var(--paper);color:var(--ink);font-family:var(--font-ui);flex-direction:column;min-height:100dvh;margin:0;font-size:16px;line-height:1.6;display:flex}main{flex:1}a{color:var(--green)}h1,h2,h3{font-family:var(--font-head);font-weight:700;line-height:1.2}h1{margin:.2em 0 .4em;font-size:clamp(1.8rem,4vw,2.6rem)}h2{font-size:1.35rem}.site-header{border-bottom:1px solid var(--rule);justify-content:space-between;align-items:center;gap:16px;padding:14px 24px;display:flex}.brand{font-family:var(--font-head);color:var(--ink);font-size:1.4rem;font-weight:700;text-decoration:none}nav{align-items:center;gap:20px;display:flex}nav a{color:var(--ink);text-decoration:none}nav a:hover{text-decoration:underline}.nav-slot{align-items:center;gap:10px;min-width:4rem;display:inline-flex}.nav-email{color:var(--ink-2);text-overflow:ellipsis;white-space:nowrap;max-width:14rem;font-size:.9rem;overflow:hidden}.linklike{font:inherit;color:var(--green);cursor:pointer;background:0 0;border:0;padding:0;text-decoration:underline}.page{max-width:880px;margin:0 auto;padding:32px 24px 64px}.page-wide{max-width:1280px}.narrow{max-width:480px}.eyebrow{letter-spacing:.08em;text-transform:uppercase;color:var(--ink-2);margin:0;font-size:.8rem}.lede{color:var(--ink-2);max-width:60ch;font-size:1.12rem}.muted{color:var(--ink-2);font-size:.95rem}.hero{padding:24px 0 36px}.hero-actions{flex-wrap:wrap;align-items:center;gap:18px;margin-top:20px;display:flex}.btn{font:inherit;border:1px solid var(--green);cursor:pointer;border-radius:4px;padding:10px 20px;font-weight:600;text-decoration:none;display:inline-block}.btn-primary{background:var(--green);color:var(--green-ink)}.btn:disabled{opacity:.5;cursor:not-allowed}.topic-list{grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:12px;padding:0;list-style:none;display:grid}.topic-list a{border:1px solid var(--rule);background:var(--paper-2);color:var(--ink);border-radius:4px;flex-direction:column;gap:2px;padding:14px 16px;text-decoration:none;display:flex}.topic-list a span{color:var(--ink-2);font-size:.92rem}.how ol{padding-left:1.3em}.how li{margin:6px 0}.topic-block{margin:28px 0}.topic-block h2{margin:0}.topic-block h2 a{color:var(--ink);text-decoration:none}.exercise-list{border-top:1px solid var(--rule);margin:10px 0 0;padding:0;list-style:none}.exercise-list li a{border-bottom:1px solid var(--rule);color:var(--ink);grid-template-columns:1.5rem 1fr auto;gap:10px;padding:10px 4px;text-decoration:none;display:grid}.exercise-list li a:hover{background:var(--paper-2)}.exercise-list .solved .ex-title{color:var(--ink-2)}.tick{color:var(--green);font-weight:700}.ex-meta{color:var(--ink-2);font-size:.88rem}.crumbs{color:var(--ink-2);margin:0 0 8px;font-size:.9rem}.player{grid-template-columns:minmax(300px,5fr) minmax(320px,6fr);align-items:start;gap:32px;display:grid}@media (max-width:900px){.player{grid-template-columns:1fr}}.player-task h1{font-size:1.9rem}.prose p{margin:.6em 0}.prose code{font-family:var(--font-formula);background:var(--paper-2);border-radius:3px;padding:0 4px}.formula-label{margin-top:20px;font-size:.92rem;display:block}.formula-row{gap:10px;margin-top:6px;display:flex}#formula-input,input[type=email]{min-width:0;font-family:var(--font-formula);border:1px solid var(--ink-2);background:var(--paper);color:var(--ink);border-radius:4px;flex:1;padding:10px 12px;font-size:1.05rem}input[type=email]{font-family:var(--font-ui)}.result{border:1px solid var(--rule);border-radius:4px;margin-top:16px;padding:12px 16px}.result p{margin:0}.result-pass{background:var(--pass-bg)}.result-fail{background:var(--fail-bg)}.diff{border-collapse:collapse;width:100%;margin-top:10px;font-size:.92rem}.diff th,.diff td{text-align:left;border-bottom:1px solid var(--rule);padding:4px 10px 4px 0}.diff tr.bad td{color:var(--fail);font-weight:600}.explain{border-top:1px solid var(--rule);margin-top:28px;padding-top:8px}.explain h3{font-size:1.05rem}.grid-host{border:1px solid var(--rule);background:#fff;width:100%;height:440px;position:relative;overflow:hidden}.grid-loading{color:var(--ink-2);place-items:center;display:grid}.player-grid{position:sticky;top:16px}.stack{flex-direction:column;gap:8px;display:flex}.notice{background:var(--paper-2);border-left:3px solid var(--green);margin-top:16px;padding:10px 14px}.notice-error{border-left-color:var(--fail)}.bars{flex-direction:column;gap:10px;margin:20px 0;display:flex}.bar-row{grid-template-columns:11rem 1fr 3rem;align-items:center;gap:12px;display:grid}.bar{background:var(--paper-2);border:1px solid var(--rule);height:10px}.bar-fill{background:var(--green);height:100%}.bar-n{color:var(--ink-2);font-size:.9rem}.site-footer{border-top:1px solid var(--rule);color:var(--ink-2);padding:16px 24px;font-size:.85rem}.site-footer p{max-width:880px;margin:0 auto}:focus-visible{outline:2px solid var(--green);outline-offset:2px}.fd-demo{border:1px solid var(--rule);background:var(--paper-2);border-radius:4px;max-width:560px;margin:24px 0;padding:16px 20px}.fd-demo p{margin:0}.fd-demo-formula{margin:10px 0!important}.fd-demo-formula code{font-family:var(--font-formula);background:var(--paper);border:1px solid var(--rule);overflow-wrap:anywhere;border-radius:3px;padding:4px 8px;font-size:1.05rem;display:inline-block}.fd-demo-result{color:var(--green);font-weight:600}.fd-cards{grid-template-columns:repeat(auto-fit,minmax(190px,1fr));align-items:stretch;gap:14px;margin:24px 0 12px;padding:0;list-style:none;display:grid}.fd-card{border:1px solid var(--rule);background:var(--paper-2);border-radius:4px;flex-direction:column;gap:4px;padding:16px;display:flex}.fd-card h2{margin:0;font-size:1.1rem}.fd-card .muted{flex:1;margin:0 0 8px}.fd-card-hi{border:2px solid var(--green)}.fd-card-picked{background:var(--pass-bg)}.fd-price{margin:0}.fd-price strong{font-family:var(--font-head);font-size:1.9rem}.fd-state,.fd-info{border-top:1px solid var(--rule);margin-top:32px;padding-top:8px}.fd-form label{font-size:.92rem;display:block}.fd-prepay{border:1px solid var(--rule);border-left:3px solid var(--green);background:var(--paper-2);margin-top:20px;padding:14px 16px}.fd-trap{width:1px;height:1px;position:absolute;left:-10000px;overflow:hidden}
