 .lab-head{padding:60px 0 40px}.lab-head h1{font-size:clamp(40px,5vw,65px)}.lab-head .lead{max-width:none}.lab-workspace{background:#e4eadd;color:#243e33;padding:38px 0}.control-row{display:grid;grid-template-columns:1fr 1fr;gap:60px}.control-row label{display:flex;justify-content:space-between;font:13px/1.5 Arial,sans-serif}.control-row strong{font:16px monospace;color:#80501f}.control-row input{width:100%;margin:18px 0 8px;accent-color:#98622d}.control-row small{display:block;font:11px/1.6 Arial,sans-serif;color:#4d6052}.stage-label{display:flex;justify-content:space-between;gap:15px;margin:34px 0 18px;font:10px/1.5 monospace;letter-spacing:.04em;color:#4d6052}.presets{display:flex;gap:8px;flex-wrap:wrap}.presets button{padding:9px 13px;color:#243e33;background:transparent;border:1px solid #7c8a78;font:12px Arial,sans-serif;cursor:pointer}.presets button:hover,.presets button:focus-visible{background:#cedbc7}.prime-map svg{display:block;width:100%;height:auto;min-height:100px;margin:18px 0 4px}.map-legend{display:flex;flex-wrap:wrap;gap:25px;font:11px/1.5 Arial,sans-serif;color:#4d6052;margin:12px 0 25px}.map-legend i{display:inline-block;width:7px;height:7px;border-radius:50%;margin-right:7px}.key-small{background:#52715b}.key-near{background:#98622d}.key-large{background:#3e6d7f}.prime-controls{display:grid;grid-template-columns:repeat(16,1fr);gap:6px}.prime-controls button{background:#d3dfcc;color:#243e33;border:1px solid #697e69;min-height:56px;cursor:pointer;position:relative;font:17px Georgia,serif}.prime-controls button.absent{background:transparent;color:#536454;border-style:dashed}.prime-controls button.changed{box-shadow:inset 0 -3px #98622d}.prime-controls button span{display:block;font:9px/1.6 monospace;color:#4d6052}.prime-controls button sup{font:10px monospace;color:#80501f}.prime-controls button:hover{background:#cedbc7}.number-readout{margin-top:24px;border-top:1px solid #59705e;padding-top:18px}.number-readout>span{font:10px monospace;color:#4d6052}.number-readout p{margin:4px 0;overflow-wrap:anywhere}.number-readout #integer{font-size:26px}.number-readout #factorization{font:12px/1.6 monospace;color:#4d6052}.lab-section{padding:48px 0;border-bottom:1px solid var(--line)}.lab-section-title{display:grid;grid-template-columns:1.2fr 1fr;gap:50px;margin-bottom:30px}.lab-section-title p:not(.eyebrow){color:var(--soft);font-size:16px;margin-top:30px}.lab-section-title h2{font-size:32px}.cost-layout{display:grid;grid-template-columns:1fr 1fr;gap:50px}.cost-line{display:flex;justify-content:space-between;gap:20px;padding:12px 0;border-bottom:1px solid var(--line);font:14px/1.5 Arial,sans-serif}.cost-line strong{font:16px monospace}.cost-line.total{font-weight:bold;border-bottom:none}.budget-panel{background:#eeebdf;padding:24px}.budget-panel h3{margin:12px 0;font-size:30px}.budget-panel p{font-size:14px;margin-bottom:0}.meter{height:7px;background:#d9d6c8;overflow:hidden}.meter>div{height:100%;width:0;background:#4d7258;transition:width .2s}.meter>div.over{background:#a65038}.micro{font:11px/1.7 Arial,sans-serif;color:var(--soft)}.lab-section details{margin-top:24px}.lab-section details p{font-size:15px;max-width:850px}.count-cards{display:grid;grid-template-columns:repeat(3,1fr);gap:20px}.count-cards>div{border-top:2px solid #697c65;padding:15px 0}.count-cards span{display:block;font:12px/1.5 Arial,sans-serif}.count-cards strong{display:block;font:48px/1.3 Georgia,serif}.count-cards small{font:11px/1.5 Arial,sans-serif;color:var(--soft)}.family-map{background:#eae7da;padding:14px;margin-top:24px}.family-map svg{display:block;width:100%;max-height:280px}.gallery-heading{display:flex;justify-content:space-between;align-items:center;gap:18px;margin-top:32px}.gallery-heading h3{font-size:23px}.pattern-gallery{display:grid;grid-template-columns:repeat(6,1fr);gap:8px}.pattern-gallery button{cursor:pointer;border:1px solid #d0cabc;background:transparent;text-align:left;padding:12px;color:#6f6c63}.pattern-gallery button.in{background:#e0e8d9;border-color:#a4b69a;color:#284631}.pattern-gallery button:hover{border-color:#3a5840}.pattern-gallery b{display:block;font:13px monospace;letter-spacing:.08em}.pattern-gallery span{display:block;font:10px/1.6 Arial,sans-serif;margin-top:6px}.encoding-grid{display:grid;grid-template-columns:1fr 1fr;gap:24px}.encoding-panel{background:#edeadf;padding:25px}.encoding-row{display:flex;gap:7px;flex-wrap:wrap;margin:20px 0}.encoded{padding:9px 12px;border:1px solid #b6b4a4;font:14px monospace;text-align:center;opacity:.55}.encoded.on{background:#2e4b3c;color:#fff;opacity:1;border-color:#2e4b3c}.encoded small{display:block;font:9px/1.6 Arial,sans-serif}.partition{font:14px/1.7 monospace}.proof-path{padding:48px 0}.proof-path>div{display:flex;align-items:center;gap:15px;flex-wrap:wrap;margin:30px 0;font:12px Arial,sans-serif}.proof-path>div span{padding:12px;border:1px solid var(--line)}.proof-path .here{background:var(--green);color:white}.proof-path p:not(.eyebrow){color:var(--soft)}button:focus-visible,input:focus-visible{outline:3px solid #9b6029;outline-offset:3px}@media(max-width:800px){.control-row,.lab-section-title,.cost-layout,.encoding-grid{grid-template-columns:1fr;gap:22px}.prime-controls{grid-template-columns:repeat(8,1fr)}.stage-label{flex-direction:column}.lab-section-title p:not(.eyebrow){margin:0}.count-cards{gap:12px}.count-cards strong{font-size:35px}.pattern-gallery{grid-template-columns:repeat(3,1fr)}.gallery-heading{display:block}.lab-head{padding-top:36px}}@media(max-width:420px){.prime-controls{grid-template-columns:repeat(4,1fr)}.count-cards{grid-template-columns:1fr}.count-cards strong{font-size:38px}.count-cards>div{display:grid;grid-template-columns:1fr auto;align-items:center}.count-cards small{grid-column:1/-1}.pattern-gallery{grid-template-columns:repeat(2,1fr)}}@media(prefers-reduced-motion:reduce){.meter>div{transition:none}}
@media(max-width:600px){.prime-map{overflow-x:auto}.prime-map svg{min-width:640px}.map-legend::after{content:'Swipe the number line to inspect all primes.';display:block;width:100%;font-size:10px;color:#4d6052}}

.lab-start{max-width:850px;margin-bottom:30px}.lab-start h2{font-size:30px}.lab-start>p:not(.eyebrow){font-size:17px;line-height:1.65}.lab-workspace .lab-hint{font:13px/1.7 Arial,sans-serif;color:#4d6052}.lab-workspace .eyebrow{color:#80501f}.distance-explainer{max-width:900px;color:var(--soft);font-size:16px}.encoded{opacity:1}.encoded:not(.on){color:#50564b}.lab-workspace button:focus-visible,.lab-workspace input:focus-visible{outline-color:#80501f}

.budget-live{margin:16px 0 10px;padding:16px 18px;background:#f3f5ee;border:1px solid #b5c3ad}.budget-live p{margin:0;line-height:1.5}.budget-live p:first-child{display:flex;align-items:baseline;gap:12px;flex-wrap:wrap}.budget-live p:first-child strong{font:27px Georgia,serif;color:#243e33}.budget-live span,.budget-live #budget-live-integer{font:12px/1.65 Arial,sans-serif;color:#4d6052}.budget-live-track{height:6px;background:#d8e1d0;margin:12px 0}.budget-live-track>div{height:100%;background:#52715b}#family-count{scroll-margin-top:24px}

/* Sixteen prime buttons need the wider desktop row; tablets use two rows. */
@media(min-width:801px) and (max-width:1000px){.prime-controls{grid-template-columns:repeat(8,1fr)}}

/* Small amber labels need stronger contrast on the shaded panels. */
.budget-panel .eyebrow,.encoding-panel .eyebrow{color:#80501f}
