@import url('https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;500;600;700&family=Space+Grotesk:wght@400;500;600;700&display=swap');
:root{--ink:#132d45;--blue:#1165db;--yellow:#ffd343;--muted:#596c7b;--line:#d8e1e5}*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:30px}body{margin:0;background:#fafbf8;color:var(--ink);font:16px/1.6 'DM Sans',Arial,sans-serif}h1,h2,h3,.brand{font-family:'Space Grotesk',Arial,sans-serif}a{color:inherit}button,input,select{font:inherit}a:focus-visible,button:focus-visible,input:focus-visible,select:focus-visible,summary:focus-visible{outline:3px solid #bd8200;outline-offset:4px}header{max-width:1440px;margin:auto;padding:28px 5%;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--line)}.brand{text-decoration:none;font-size:17px;font-weight:700;letter-spacing:.03em}nav{display:flex;gap:30px;font-size:14px}nav a{text-decoration:none}nav a:hover,.text-link:hover{text-decoration:underline}.hero{max-width:1440px;min-height:680px;margin:auto;padding:75px 3% 60px 5%;display:grid;grid-template-columns:.95fr 1.2fr;align-items:center;gap:10px}.eyebrow{font-size:11px;letter-spacing:.15em;font-weight:700;color:var(--blue)}h1{font-size:clamp(44px,4.7vw,70px);line-height:1.06;letter-spacing:-.055em;font-weight:500;margin:23px 0}h1 em{font-style:normal;color:var(--blue)}.lead{max-width:465px;font-size:18px;line-height:1.7;color:var(--muted)}.actions{display:flex;gap:20px;align-items:center;flex-wrap:wrap;margin-top:28px}.button{display:inline-flex;align-items:center;background:var(--blue);color:white;border:0;border-radius:4px;padding:14px 20px;text-decoration:none;font-size:14px;font-weight:600;cursor:pointer}.button:hover{background:#084aab}.text-link{font-size:14px;text-decoration:none}.byline{font-size:12px;margin-top:36px;color:var(--muted)}.hero-art img{width:100%;display:block}.art-caption{display:flex;justify-content:space-around;font-size:9px;font-weight:700;letter-spacing:.13em;color:var(--muted);margin-top:24px}.approach{background:var(--ink);color:white;padding:65px max(5%,calc((100vw - 1296px)/2));display:grid;grid-template-columns:1fr 1.2fr;gap:90px}.approach .eyebrow{color:var(--yellow)}h2{font-size:clamp(30px,3vw,44px);line-height:1.15;letter-spacing:-.04em;font-weight:500;margin:16px 0 25px}.intro{font-size:19px}.steps{display:flex;justify-content:space-between;gap:12px;margin:28px 0}.steps span{font-size:13px}.steps b{display:block;color:var(--yellow);font-size:12px}.approach>div>p:last-child{color:#becbd5}.lab-section,.books-section{max-width:1440px;margin:auto;padding:85px 5%}.section-top{display:flex;justify-content:space-between;align-items:end;gap:30px;margin-bottom:30px}.section-top>p{max-width:360px;color:var(--muted);font-size:14px}.lab{display:grid;grid-template-columns:1.1fr 1fr .9fr;border:1px solid var(--line);border-radius:8px;background:white;overflow:hidden}.controls,.experiment,.pixel-view{padding:26px;min-width:0}.controls{background:#f0f5fa;border-right:1px solid var(--line)}label,legend{display:block;font-size:13px;font-weight:600;margin:20px 0 9px}select{width:100%;font:12px/1.5 Consolas,monospace;padding:12px 6px;border:1px solid #b6c9d7;background:white;border-radius:3px}#hint{min-height:48px;font-size:12px;color:var(--muted)}fieldset{border:0;margin:0;padding:0}legend{padding-top:15px}.swatch{display:inline-flex;gap:5px;margin:0 8px 0 0;font-size:12px}.swatch input{accent-color:var(--blue)}input[type=number]{padding:9px;width:100%;border:1px solid #b6c9d7;border-radius:3px}#feedback{font-size:13px;min-height:62px}.simulation{font-size:11px;color:var(--muted);border-top:1px solid var(--line);padding-top:15px}.reset{border:0;background:none;color:var(--ink);text-decoration:underline;cursor:pointer;font-size:13px}.grid-heading{display:flex;justify-content:space-between;font-size:9px;letter-spacing:.07em;margin:12px 0 30px;font-weight:700}.matrix{display:grid;grid-template-columns:repeat(8,1fr);gap:3px}.cell{aspect-ratio:1;border:1px solid #d1dfeb;border-radius:2px;font:12px Consolas,monospace;cursor:pointer;padding:0}.cell[data-value="0"]{background:#f1f5f8;color:#61788b}.cell[data-value="1"]{background:var(--blue);color:white}.cell[data-value="2"]{background:var(--yellow);color:#18334d}.palette-key{display:flex;gap:12px;font-size:10px;margin-top:20px}.muted{color:var(--muted);font-size:13px}.pixel-view{border-left:1px solid var(--line)}canvas{width:100%;height:auto;display:block;image-rendering:pixelated;margin-top:30px;border:1px solid var(--line)}#result-summary{font-size:12px;color:var(--muted)}details{font-size:12px;border-top:1px solid var(--line);padding-top:15px}summary{cursor:pointer;font-weight:600}.books-section{padding-top:20px}.books{display:grid;grid-template-columns:repeat(3,1fr);gap:45px}.books article{border-top:1px solid var(--line);padding-top:30px}.books img{height:300px;max-width:100%;object-fit:contain;display:block;margin:0 auto 30px;filter:drop-shadow(5px 9px 8px #18334d1a)}h3{font-size:23px;line-height:1.25;font-weight:500;letter-spacing:-.03em}.books article>p:last-child{font-size:14px;color:var(--muted)}.resources{background:#eaf2fc;padding:65px max(5%,calc((100vw - 1296px)/2));display:grid;grid-template-columns:1.2fr 1fr;align-items:center;gap:60px}.resources p:not(.eyebrow){font-size:14px;color:var(--muted)}.resource-link{display:flex;justify-content:space-between;text-decoration:none;border-bottom:1px solid #8baac6;padding:25px 0;font-size:20px}.resource-link small{display:block;font-size:12px;color:var(--muted);margin-top:8px}.author{max-width:1440px;margin:auto;padding:70px 5%}.author h2{font-size:30px}.author>p:not(.eyebrow){max-width:650px;color:var(--muted)}footer{border-top:1px solid var(--line);padding:28px 5%;display:flex;justify-content:space-between;gap:20px;font-size:11px;color:var(--muted)}footer .brand{font-size:12px}.skip{position:absolute;top:-100px;background:white;padding:10px}.skip:focus{top:0}@media(max-width:1000px){.lab{grid-template-columns:1fr 1fr}.pixel-view{grid-column:1/-1;display:grid;grid-template-columns:1fr 1fr;gap:15px 30px;border-top:1px solid var(--line);border-left:0}.pixel-view canvas{grid-row:1/4;grid-column:2;margin:0;max-width:240px}.hero{min-height:0;padding-top:60px}.books img{height:240px}.approach{gap:30px}}@media(max-width:650px){header{padding:18px 5%;align-items:start;gap:20px}header .brand{font-size:12px;white-space:nowrap}nav{gap:12px;flex-wrap:wrap;justify-content:end;font-size:11px}nav a:first-child{display:none}.hero{grid-template-columns:1fr;padding:40px 5%}.hero-art{margin-top:15px}h1{font-size:48px}.lead{font-size:16px}.byline{margin-top:20px}.approach{grid-template-columns:1fr;padding:40px 5%;gap:0}.lab-section,.books-section{padding:50px 5%}.section-top{display:block}.lab{grid-template-columns:1fr}.controls{border-right:0;border-bottom:1px solid var(--line)}.pixel-view{display:block}.pixel-view canvas{max-width:none;margin-top:20px}.books{grid-template-columns:1fr;gap:25px}.books img{height:340px}.resources{grid-template-columns:1fr;gap:15px;padding:40px 5%}footer{flex-wrap:wrap}.author{padding:40px 5%}}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}}

/* Synchronized snake lab */
.snake-section{max-width:1440px;margin:auto;padding:20px 5% 85px}.snake-toolbar{display:flex;justify-content:space-between;gap:20px;align-items:center;padding:20px 0;border-top:1px solid var(--line)}.snake-toolbar .actions{margin:0}.secondary{background:#e5effb;color:var(--blue)}.secondary:hover{background:#ccdef7}.snake-toolbar>span{font:12px Consolas,monospace}.snake-views{display:grid;grid-template-columns:1fr 1fr;gap:25px}.snake-panel{border:1px solid var(--line);background:white;border-radius:7px;padding:24px}.snake-panel .grid-heading{margin:0 0 20px;align-items:center;min-height:30px}.snake-toggle{display:flex;align-items:center;gap:6px;margin:0;font-size:11px;letter-spacing:0}.snake-toggle input{accent-color:var(--blue)}.live-dot{color:#477058;font-size:9px}.indexed-grid{display:grid;grid-template-columns:18px 1fr;grid-template-rows:18px 1fr;gap:8px}.col-indices{grid-column:2;display:flex;justify-content:space-around;white-space:pre;font:11px Consolas,monospace;word-spacing:0;text-align:center;letter-spacing:0}.row-indices{grid-row:2;display:grid;grid-template-rows:repeat(10,1fr);font:11px Consolas,monospace;text-align:center;line-height:1}.row-indices br{display:none}.snake-grid{display:grid;grid-template-columns:repeat(10,1fr);gap:3px;aspect-ratio:1;background:#f6f8fa}.snake-cell{min-width:0;aspect-ratio:1;border:1px solid #d9e3eb;background:#f1f5f8;color:#698091;font:14px Consolas,monospace;border-radius:2px;padding:0;cursor:crosshair}.snake-cell.inspected{outline:3px solid #a84712;outline-offset:-3px;z-index:1}.snake-cell.changed{border:2px solid #526b81}.with-colors [data-value="1"],.game-grid [data-value="1"]{background:#1165db;color:white}.with-colors [data-value="2"],.game-grid [data-value="2"]{background:#ffd343;color:#18334d}.with-colors [data-value="3"],.game-grid [data-value="3"]{background:#132d45;color:white}.game-grid [data-value="1"]{border-radius:6px}.game-grid [data-value="2"]{border-radius:50%;font-size:22px}.game-grid [data-value="3"]{border-radius:8px;font-size:16px;letter-spacing:2px}.snake-bottom{display:grid;grid-template-columns:1.5fr 1fr;gap:40px;margin-top:25px}.snake-legend{display:flex;gap:18px;flex-wrap:wrap;font-size:12px}.snake-legend span{display:flex;align-items:center;gap:6px}.snake-legend i{width:12px;height:12px;border-radius:2px;background:#f1f5f8;border:1px solid #b7cad8}.snake-legend .body{background:#1165db}.snake-legend .apple{background:#ffd343}.snake-legend .head{background:#132d45}#snake-coordinate{font:12px Consolas,monospace;color:var(--muted)}#snake-explain{font-size:14px;min-height:70px}#snake-status{font-size:13px;font-weight:600}.steering{text-align:center}.dpad{display:grid;grid-template-columns:repeat(3,42px);gap:5px;justify-content:center;margin-top:15px}.dpad button{height:40px;border:1px solid #b8cde0;background:white;color:var(--ink);border-radius:4px;cursor:pointer}.dpad button[aria-pressed="true"]{background:var(--blue);color:white}.dpad button:first-child{grid-column:2}.dpad button:nth-child(2){grid-row:2;grid-column:1}.dpad button:nth-child(3){grid-row:2;grid-column:2}.dpad button:nth-child(4){grid-row:2;grid-column:3}.steering p{font-size:11px;color:var(--muted)}button:disabled{opacity:.5;cursor:default}@media(max-width:650px){.snake-section{padding:15px 5% 50px}.snake-toolbar{flex-wrap:wrap}.snake-views{grid-template-columns:1fr}.snake-panel{padding:15px}.snake-bottom{grid-template-columns:1fr;gap:10px}.snake-cell{font-size:12px}.snake-legend{gap:12px}}

/* Glyph metrics must not stretch grid rows. */
.snake-grid{grid-template-columns:repeat(10,minmax(0,1fr));grid-template-rows:repeat(10,minmax(0,1fr))}
.snake-cell{min-height:0;min-width:0;width:100%;height:100%;aspect-ratio:auto;overflow:hidden;display:flex;align-items:center;justify-content:center;line-height:1}
.game-grid [data-value="2"]{font-size:0;border-radius:50%;position:relative}
.game-grid [data-value="2"]::after{content:"";display:block;width:28%;height:28%;border-radius:50%;background:var(--ink);flex:none}
.game-labs,.tetris-section{max-width:1440px;margin:auto;padding:50px 5% 85px}.lab-cards{display:grid;grid-template-columns:1fr 1fr;gap:30px}.lab-card{border:1px solid var(--line);border-radius:8px;padding:30px;text-decoration:none;background:white}.lab-card:hover{border-color:var(--blue)}.lab-card h3{display:flex;justify-content:space-between;font-size:30px}.lab-card p:not(.eyebrow){font-size:15px;color:var(--muted)}.lab-card strong{font-size:13px;color:var(--blue)}.lab-visual{font:24px/1.6 Consolas,monospace;letter-spacing:10px;background:#edf4fb;text-align:center;padding:25px;border-radius:5px;color:#7890a4}.lab-visual b{color:var(--blue)}.lab-visual em{color:#8e6200;font-style:normal}.tetris-layout{display:grid;grid-template-columns:1fr 1fr .8fr;gap:20px}.tetris-panel,.piece-panel{border:1px solid var(--line);background:white;padding:20px;border-radius:6px;min-width:0}.tetris-grid{display:grid;grid-template-columns:repeat(10,minmax(0,1fr));grid-template-rows:repeat(16,minmax(0,1fr));aspect-ratio:10/16;gap:2px;background:#f6f8fa}.tetris-cell{width:100%;height:100%;min-width:0;min-height:0;padding:0;border:1px solid #d1dfeb;background:#f1f5f8;font:12px/1 Consolas,monospace;color:#6b8092;cursor:crosshair;overflow:hidden}.tetris-cell[data-value="1"]{background:#1165db;color:white}.tetris-cell[data-value="2"]{background:#ffd343;color:#132d45}.tetris-cell.inspected{outline:3px solid #a84712;outline-offset:-3px}.game-tetris .tetris-cell{border-radius:3px}.piece-matrix{display:grid;gap:3px;min-height:70px;font-size:12px}.piece-matrix span{display:grid;place-items:center;background:#eff4f8;width:28px;height:28px;font:13px Consolas,monospace}.piece-matrix span[data-value="1"]{background:#ffd343;color:#132d45}.control{padding:10px;border:1px solid #b8cde0;border-radius:4px;background:#eef4fc;cursor:pointer;color:var(--ink)}.move-message{min-height:52px;font-size:15px}#tetris-state{font-size:13px;font-weight:600}.piece-panel .actions{gap:8px}.snake-section{padding-top:60px}@media(max-width:1000px){.tetris-layout{grid-template-columns:1fr 1fr}.piece-panel{grid-column:1/-1;display:grid;grid-template-columns:1fr 1fr;gap:15px}.piece-panel .actions{margin:0}}@media(max-width:650px){.game-labs,.tetris-section{padding:40px 5%}.lab-cards{grid-template-columns:1fr}.tetris-layout{gap:10px}.tetris-panel{padding:9px}.tetris-panel .eyebrow{font-size:9px;letter-spacing:.04em}.tetris-panel .muted{font-size:10px;min-height:35px}.tetris-cell{font-size:10px}.piece-panel{display:block}.lab-visual{letter-spacing:6px}}
/* Module 17: IDs index the book's exact RGB palette. */
.tetris-grid{grid-template-rows:repeat(20,minmax(0,1fr));aspect-ratio:10/20}
.game-tetris{margin-top:90px}
#tetris-data{margin-top:12px}
.book-palette{display:flex;gap:18px;flex-wrap:wrap;margin-top:24px;font:12px Consolas,monospace}
.book-palette span{display:flex;align-items:center;gap:6px}.book-palette i{width:16px;height:16px;border:1px solid #9aaab7;display:inline-block}

.tetris-cell[data-value="0"],.piece-matrix span[data-value="0"],.book-palette i[data-id="0"]{background:rgb(255,255,255);color:#132d45}
.tetris-cell[data-value="1"],.piece-matrix span[data-value="1"],.book-palette i[data-id="1"]{background:rgb(0,240,240);color:#132d45}
.tetris-cell[data-value="2"],.piece-matrix span[data-value="2"],.book-palette i[data-id="2"]{background:rgb(240,240,0);color:#132d45}
.tetris-cell[data-value="3"],.piece-matrix span[data-value="3"],.book-palette i[data-id="3"]{background:rgb(170,70,220);color:white}
.tetris-cell[data-value="4"],.piece-matrix span[data-value="4"],.book-palette i[data-id="4"]{background:rgb(255,150,0);color:#132d45}
.tetris-cell[data-value="5"],.piece-matrix span[data-value="5"],.book-palette i[data-id="5"]{background:rgb(0,90,230);color:white}
.tetris-cell[data-value="6"],.piece-matrix span[data-value="6"],.book-palette i[data-id="6"]{background:rgb(0,200,80);color:#132d45}
.tetris-cell[data-value="7"],.piece-matrix span[data-value="7"],.book-palette i[data-id="7"]{background:rgb(230,50,50);color:white}
@media(max-width:650px){.game-tetris{margin-top:102px}}

.game-tetris{margin-top:12px}@media(max-width:650px){.game-tetris{margin-top:12px}}

.guide{max-width:1100px;margin:auto;padding:60px 5% 80px}.guide h1{font-size:clamp(42px,5vw,64px)}.guide section{padding:30px 0;border-bottom:1px solid var(--line)}.guide p,.guide li,.guide dd{max-width:800px}.guide pre{background:#edf3f8;border:1px solid var(--line);padding:20px;overflow-x:auto;font:14px/1.65 Consolas,monospace}.guide code{overflow-wrap:anywhere}.guide pre code{overflow-wrap:normal}.notice{margin:30px 0;padding:22px;background:#edf4fc;border-left:4px solid var(--blue);font-size:14px}.guide details{margin:20px 0;padding:20px;background:white}.guide summary{font-size:15px}.guide dt{font-weight:700;margin-top:20px}.guide dd{margin:7px 0 15px}.module-row{display:grid;grid-template-columns:50px 1fr;gap:20px;padding:22px 0;border-bottom:1px solid var(--line)}.module-number{font:24px 'Space Grotesk',Arial;color:var(--blue)}.module-row h3{margin:0 0 12px;font-size:21px}.module-row h3 a{text-decoration:none}.module-links{display:flex;flex-wrap:wrap;gap:15px;font-size:12px;color:var(--muted)}.reader-resources{max-width:1440px;margin:auto;padding:60px 5%}.reader-links{display:grid;grid-template-columns:repeat(3,1fr);gap:25px}.reader-links a{display:block;text-decoration:none;padding:24px;border-top:2px solid var(--blue);background:#edf3f8}.reader-links span{display:block;font-size:13px;margin-top:12px;color:var(--muted)}nav{flex-wrap:wrap;justify-content:flex-end;gap:18px}header{gap:25px}.brand{white-space:nowrap}@media(max-width:650px){.reader-links{grid-template-columns:1fr}.guide{padding-top:35px}.module-row{gap:10px;grid-template-columns:35px 1fr}header{flex-wrap:wrap}nav{justify-content:flex-start}nav a:first-child{display:inline}}


.sample article{max-width:780px}.sample article h2{margin-top:48px}.sample article p{line-height:1.8}.sample article pre{margin:28px 0;white-space:pre;tab-size:4;hyphens:none}.sample-teaser{border-top:1px solid var(--line)}

.matrix-preview{margin:35px 0;padding:28px;border:1px solid var(--line);background:white;border-radius:6px;display:grid;gap:20px}.matrix-preview figcaption{font-size:13px;color:var(--muted)}.binary-picture{display:grid;grid-template-columns:repeat(5,42px);gap:4px}.binary-picture span{display:grid;place-items:center;aspect-ratio:1;font:14px Consolas,monospace}.binary-0{background:#edf3f8;color:#596c7b}.binary-1{background:#132d45;color:white}.sample table{border-collapse:collapse;width:100%;font-size:14px;margin:25px 0}.sample th,.sample td{padding:9px 6px;border:1px solid var(--line);text-align:left}.sample th{background:#edf3f8}.sample-switch{padding:20px 0;border-bottom:1px solid var(--line)}
