.lab-new{width:100%;display:grid;gap:14px;color:#211b36}.lab-toolbar{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:10px}.lab-tools{display:flex;flex-wrap:wrap;gap:8px}.lab-tools button,.lab-button{border:2px solid #211b36;border-radius:10px;background:#fff;color:#211b36;padding:9px 13px;font-weight:800;box-shadow:2px 3px 0 #211b36}.lab-tools button:hover,.lab-tools button.selected{background:#c8f762}.lab-tools .primary{background:#c8f762}.lab-toolbar>.primary{font-size:.95rem;padding:11px 16px}.lab-canvas{width:100%;background:#192442;border:3px solid #211b36;border-radius:16px;overflow:hidden;box-shadow:5px 6px 0 #211b36}.lab-canvas canvas{display:block;width:100%;height:auto;touch-action:none}.lab-message{margin:2px 0 0;font-weight:800;font-size:1rem;line-height:1.45}.lab-hint{margin:0;color:#665c75;font-size:.9rem}.lab-badge{background:#211b36;color:#fff;border-radius:9px;padding:8px 12px;font-weight:800;font-variant-numeric:tabular-nums}.eco-stats{display:flex;flex-wrap:wrap;gap:9px}.eco-stats span{background:#e2f6e3;border:2px solid #397350;border-radius:9px;padding:8px 11px;font-weight:800;font-variant-numeric:tabular-nums}.million-head{display:flex;justify-content:space-between;flex-wrap:wrap;gap:8px}.million-canvas{position:relative;width:min(100%,580px);aspect-ratio:1;overflow:hidden;border:3px solid #211b36;border-radius:12px;align-self:center;background:#f4f0e8}.million-canvas canvas{display:block;width:100%;height:100%;image-rendering:pixelated}.million-lens{position:absolute;width:140px;height:140px;border:4px solid #211b36;border-radius:50%;background-size:1000px 1000px;background-repeat:no-repeat;box-shadow:0 5px 18px #211b3670;pointer-events:none;transform:translate(-50%,-50%);image-rendering:pixelated}.million-label{display:flex;justify-content:space-between;font-weight:800}.million input[type=range]{width:100%;accent-color:#f26c61}.million-steps{display:flex;justify-content:space-between;font-size:.78rem;font-weight:700;color:#675d77}.escape-room{border:3px solid #211b36;border-radius:17px;overflow:hidden;background:#29364b;box-shadow:5px 6px 0 #211b36}.escape-wall{min-height:340px;position:relative;background:linear-gradient(#566688,#687995);border-bottom:10px solid #273b51}.escape-title{position:absolute;left:20px;top:18px;font-size:.85rem;letter-spacing:.13em;color:#fff;font-weight:900}.escape-object{position:absolute;border:3px solid #211b36;border-radius:10px;color:#211b36;font-weight:900;background:#f8eac0;box-shadow:4px 5px 0 #1c253b;transition:transform .15s}.escape-object:hover{transform:translateY(-3px)}.escape-object.picture{left:17%;top:21%;width:27%;height:90px;background:linear-gradient(90deg,#79c774 0 33%,#70b7e4 33% 66%,#ed7671 66%)}.escape-object.clock{left:51%;top:12%;width:89px;height:89px;border-radius:50%;background:#fff}.escape-object.door{right:7%;bottom:0;width:25%;height:215px;background:#bd8c73}.escape-object.door.unlocked{background:#c8f762}.escape-object.drawer{left:15%;bottom:0;width:32%;height:72px;background:#bc8b6b}.escape-floor{height:90px;position:relative;background:repeating-linear-gradient(120deg,#866d62 0 20px,#9d7d70 20px 40px)}.escape-object.rug{left:31%;top:8px;width:34%;height:50px;background:#e9bba5}.escape-info{display:grid;grid-template-columns:1fr 2fr;gap:12px}.escape-info>div{background:#f1eaf5;border:2px solid #211b36;border-radius:12px;padding:13px}.escape-info p{margin:5px 0 0;line-height:1.4}.escape-keypad{display:flex;align-items:center;flex-wrap:wrap;gap:10px;background:#fff;border:2px solid #211b36;border-radius:12px;padding:14px;font-weight:800}.escape-keypad[hidden]{display:none}.escape-keypad input{width:85px;border:2px solid #211b36;border-radius:8px;padding:9px;font:inherit;letter-spacing:.15em}.escape-keypad .primary{padding:9px 14px}@media(max-width:600px){.lab-tools button,.lab-button{padding:7px 9px;font-size:.8rem}.lab-toolbar>.primary{padding:8px 10px}.escape-wall{min-height:280px}.escape-object.picture{font-size:.76rem}.escape-object.door{height:175px;font-size:.8rem}.escape-object.drawer{font-size:.75rem}.escape-info{grid-template-columns:1fr}.million-lens{width:100px;height:100px}}

.million-scale{width:min(100%,580px);justify-self:center;background:#e6e0f1;border:2px solid #211b36;border-radius:10px;padding:10px 13px;font-size:.9rem;font-weight:800;line-height:1.4}.escape-object.lamp{left:57%;top:44%;width:74px;height:58px;background:#e5d9ab}.escape-object.lamp.lit{background:#fff4a1;box-shadow:0 0 35px #fff7ae,4px 5px 0 #1c253b}.escape-object.cabinet{left:49%;bottom:0;width:19%;height:70px;background:#93a8ba}.escape-hint{justify-self:start;border:0;background:transparent;color:#55428c;text-decoration:underline;font:800 .9rem system-ui;cursor:pointer;padding:3px}.escape-object.picture{width:24%;left:13%}.escape-object.drawer{left:11%;width:28%}.escape-object.clock{left:40%}.escape-object.cabinet{left:43%}.escape-object.door{right:5%;width:24%}@media(max-width:600px){.escape-object.lamp{left:61%;top:39%;width:58px;height:48px;font-size:.75rem}.escape-object.cabinet{font-size:.65rem}.escape-object.clock{left:37%;width:72px;height:72px}}
.million .million-steps{position:relative;height:22px;display:block}.million .million-steps span{position:absolute;top:0;white-space:nowrap}.million .million-steps span:nth-child(1){left:0}.million .million-steps span:nth-child(2){left:50%;transform:translateX(-50%)}.million .million-steps span:nth-child(3){left:75%;transform:translateX(-50%)}.million .million-steps span:nth-child(4){right:0}.million-progress{height:9px;border:1px solid #211b36;background:#ece6f3;border-radius:99px;overflow:hidden}.million-progress span{display:block;height:100%;width:0;background:linear-gradient(90deg,#f26c61,#b794e6,#73d6be);transition:width .16s}
/* Trillion dots: responsive canvas and a lens with separate source coordinates. */
.pixel-explorer{max-width:720px;margin:auto}.dots-heading{display:flex;gap:12px;align-items:baseline;justify-content:space-between;flex-wrap:wrap}.dots-heading strong{font-size:clamp(1.3rem,4vw,2rem);font-variant-numeric:tabular-nums}.dots-heading>span{font-size:.9rem;color:#6a6178}.dots-board{position:relative;width:100%;aspect-ratio:1;border:2px solid #211b36;border-radius:12px;background:#f4f1e9}.dots-board>canvas{display:block;width:100%;height:100%;border-radius:10px;touch-action:none;cursor:crosshair}.dots-board>canvas:focus-visible{outline:3px solid #8263be;outline-offset:3px}.dots-lens{position:absolute;z-index:3;border:3px solid #211b36;border-radius:12px;background:#f4f1e9;box-shadow:0 5px 18px #211b3650;pointer-events:none;overflow:hidden}.dots-lens canvas{display:block;width:100%;aspect-ratio:1}.dots-lens span{display:flex;align-items:center;justify-content:center;min-height:34px;padding:3px 5px;background:#211b36;color:white;font-size:12px;font-weight:700;line-height:1.2;text-align:center}.dots-focus{position:absolute;border:2px solid #211b36;box-shadow:0 0 0 1px white;pointer-events:none}.dots-lens[hidden],.dots-focus[hidden]{display:none}.dots-scale{display:grid;gap:5px;background:#eae4f3;border-radius:10px;padding:12px 15px;font-size:.95rem}.dots-scale span{color:#645872}.pixel-explorer input[type=range]{width:100%;accent-color:#8263be;min-height:30px}.pixel-explorer .million-label{gap:12px;flex-wrap:wrap}.dots-stops{display:flex;gap:8px;flex-wrap:wrap;justify-content:space-between}.dots-stops button{background:#fff;border:1px solid #211b36;border-radius:8px;padding:8px 12px;font-size:.88rem;font-weight:700;min-height:42px}.dots-stops button.selected{background:#c8f762}.pixel-explorer .lab-message{font-weight:500;font-size:.95rem}
/* Escape the Room artwork uses aligned, accessible hotspots. */
.escape-room{position:relative;width:100%;aspect-ratio:3/2;background:#142b2c url('assets/escape-study.png') center/100% 100% no-repeat;border:3px solid #211b36;border-radius:16px;overflow:hidden;box-shadow:5px 6px 0 #211b36}.escape-room .escape-object{position:absolute;z-index:1;display:block;min-width:0;min-height:0;border:1px solid transparent;border-radius:8px;background:transparent;color:transparent;font-size:0;box-shadow:none;padding:0;transition:box-shadow .2s,background .2s,transform .2s;touch-action:manipulation}.escape-room .escape-object:hover,.escape-room .escape-object:focus-visible{background:#f8e3a11a;box-shadow:inset 0 0 0 2px #f7dd94,0 0 0 2px #1b2522;outline:none;transform:none}.escape-room .escape-object::after{content:attr(data-label);position:absolute;left:50%;bottom:4px;transform:translateX(-50%);white-space:nowrap;background:#132f30ed;color:white;border:1px solid #f4dc9e;border-radius:7px;padding:5px 8px;font:700 clamp(11px,1.8vw,14px)/1.2 system-ui;box-shadow:0 2px 8px #0008;opacity:0;transition:opacity .15s}.escape-room .escape-object:hover::after,.escape-room .escape-object:focus-visible::after{opacity:1}.escape-room .escape-object.picture{left:12.4%;top:14.3%;width:21.1%;height:24.7%}.escape-room .escape-object.clock{left:43.8%;top:15.2%;width:10%;height:15.1%;border-radius:50%}.escape-room .escape-object.lamp{left:60.1%;top:26.3%;width:8.6%;height:46.6%}.escape-room .escape-object.door{left:71.8%;top:8.9%;width:22.7%;height:61.4%}.escape-room .escape-object.drawer{left:14.5%;top:46.3%;width:20.6%;height:26.7%}.escape-room .escape-object.cabinet{left:40.7%;top:46.3%;width:18.1%;height:26.7%}.escape-room .escape-object.rug{left:5.2%;top:75.6%;width:88.7%;height:22.1%}.escape-room .escape-object.lit{background:radial-gradient(circle at 50% 22%,#ffef9b40,transparent 70%);box-shadow:0 0 40px #ffe17d7a}.escape-room .escape-object.opened{background:#d4a65b29}.escape-room .escape-object.unlocked{background:linear-gradient(90deg,transparent,#e9d68170)}.escape-room .escape-object.clock.fixed::after{content:'9:45';opacity:1;bottom:-30px}.escape-info{grid-template-columns:minmax(170px,1fr) minmax(0,2fr)}@media(max-width:600px){.escape-room .escape-object::after{font-size:11px}.escape-info{grid-template-columns:1fr}}

/* Chain Reaction workbench */
.chain-lab{gap:16px}.chain-head{display:flex;justify-content:space-between;align-items:end;gap:14px}.chain-head span:first-child{font-size:.68rem;letter-spacing:.13em;font-weight:900;color:#67758a}.chain-head h2{font:700 clamp(1.4rem,3vw,2rem)/1.08 'Space Grotesk',sans-serif;letter-spacing:-.045em;margin:5px 0 0}.chain-count{white-space:nowrap;border:1px solid #ced6e2;border-radius:99px;background:#f5f8fb;padding:8px 12px;font-size:.75rem;font-weight:800;color:#3b4b68;font-variant-numeric:tabular-nums}
.chain-tools{padding:13px;border:1px solid #d5dae4;border-radius:17px;background:#f8f9fc;gap:7px}.chain-tools button{border:1px solid #bfc9d9;box-shadow:none;border-radius:9px;min-height:40px;padding:8px 11px;color:#33425c;font-size:.78rem}.chain-tools button:hover{background:#e7f0fa}.chain-tools button.selected{background:#2c456c;color:#fff;border-color:#2c456c}.chain-tools button:focus-visible,.chain-actions button:focus-visible{outline:3px solid #8064d1;outline-offset:3px}
.chain-canvas{border-color:#283751;box-shadow:0 12px 25px #2530482b;border-radius:19px}.chain-bottom{display:flex;justify-content:space-between;align-items:start;gap:20px}.chain-bottom .lab-hint{margin-top:7px;font-size:.79rem;line-height:1.5}.chain-actions{display:flex;gap:9px;flex:none}.chain-actions button{min-height:45px;padding:9px 15px}.chain-actions .lab-button{margin:0}
@media(max-width:700px){.chain-bottom{flex-direction:column}.chain-actions{width:100%}.chain-actions button{flex:1}.chain-head{align-items:start}.chain-count{font-size:.65rem}.chain-tools button{flex:1 1 auto;font-size:.72rem;padding:7px 9px}}

/* Build a Bridge workbench */
.bridge-lab{gap:15px}.bridge-head{display:flex;justify-content:space-between;gap:16px;align-items:center}.bridge-head>div>span{font-size:.68rem;letter-spacing:.13em;font-weight:900;color:#547385}.bridge-head h2{font:700 clamp(1.5rem,4vw,2.3rem)/1.06 'Space Grotesk',sans-serif;letter-spacing:-.045em;margin:6px 0}.bridge-head p{margin:0;color:#626d79;font-size:.88rem;line-height:1.45}.bridge-head .lab-badge{flex:none;background:#365979;font-size:.78rem}
.bridge-toolbar{display:flex;justify-content:space-between;align-items:center;gap:12px;flex-wrap:wrap}.bridge-load{display:flex;align-items:center;gap:7px}.bridge-load>span{font-size:.65rem;font-weight:900;letter-spacing:.1em;color:#657283;margin-right:5px}.bridge-load button,.bridge-actions button{border:1px solid #bfcad5;background:#fff;color:#2d3e53;border-radius:10px;min-height:42px;padding:8px 14px;font-weight:800;cursor:pointer}.bridge-load button.selected{background:#365979;color:#fff;border-color:#365979}.bridge-strength{border-radius:99px;background:#fff0ed;color:#aa514a;padding:8px 12px;font-size:.78rem;font-weight:900}.bridge-strength.good{background:#e5f3e8;color:#32785b}
.bridge-canvas{border-color:#2c455a;border-radius:18px;box-shadow:0 12px 26px #203b5029}.bridge-canvas canvas{cursor:crosshair}.bridge-canvas canvas:focus-visible{outline:3px solid #6254c4;outline-offset:-4px}.bridge-footer{display:grid;gap:13px}.bridge-footer .lab-message{color:#29425b}.bridge-actions{display:flex;flex-wrap:wrap;gap:8px}.bridge-actions button:hover:not(:disabled),.bridge-load button:hover{filter:brightness(.94);transform:translateY(-1px)}.bridge-actions button:disabled{opacity:.45;cursor:default}.bridge-actions button.primary{background:#365979;border-color:#365979;color:#fff;margin-left:auto}.bridge-actions button:focus-visible,.bridge-load button:focus-visible{outline:3px solid #6254c4;outline-offset:2px}.bridge-lab .lab-hint{font-size:.78rem;line-height:1.5}
@media(max-width:700px){.bridge-head{align-items:start}.bridge-head .lab-badge{font-size:.66rem;padding:7px 9px}.bridge-actions button{flex:1 1 auto;font-size:.76rem;padding:7px 9px}.bridge-actions button.primary{margin-left:0}.bridge-load>span{width:100%}.bridge-load{flex-wrap:wrap}.bridge-head p{font-size:.78rem}}

/* Pocket Golf replaces Tiny Ecosystem. */
.golf-lab{gap:15px}.golf-head{display:flex;justify-content:space-between;gap:15px;align-items:center}.golf-head>div>span{font-size:.68rem;letter-spacing:.13em;font-weight:900;color:#4b765e}.golf-head h2{font:700 clamp(1.7rem,4vw,2.6rem)/1.05 'Space Grotesk',sans-serif;letter-spacing:-.05em;margin:6px 0}.golf-head p{margin:0;color:#616b70;font-size:.88rem;line-height:1.5}.golf-course{flex:none;background:#dcefdc;border:1px solid #90be9b;border-radius:99px;color:#315c42;padding:9px 13px;font-weight:900;font-size:.78rem;font-variant-numeric:tabular-nums}
.golf-score{display:flex;gap:8px;flex-wrap:wrap}.golf-score span{padding:9px 13px;border:1px solid #cddbd1;border-radius:10px;background:#f6faf7;color:#365342;font-size:.8rem;font-weight:850;font-variant-numeric:tabular-nums}.golf-score span:first-child{background:#335d48;border-color:#335d48;color:#fff}
.golf-canvas{border:3px solid #315746;border-radius:20px;box-shadow:0 13px 27px #244c3430}.golf-canvas canvas{cursor:crosshair}.golf-bottom{display:flex;justify-content:space-between;gap:20px;align-items:center}.golf-bottom .lab-message{color:#2c5840}.golf-power{display:flex;align-items:center;gap:9px;margin-top:8px;color:#687e6d;font-size:.65rem;font-weight:900;letter-spacing:.11em}.golf-power div{width:145px;height:9px;border-radius:99px;background:#e3e9db;overflow:hidden}.golf-power i{display:block;width:0;height:100%;background:linear-gradient(90deg,#83c783,#f0b56d,#dc7666);border-radius:99px}.golf-actions{display:flex;gap:8px;flex:none}.golf-actions button{min-height:44px;padding:9px 14px;border:1px solid #a9c2ad;border-radius:10px;background:#fff;color:#315a42;font-weight:800;cursor:pointer}.golf-actions button.primary{background:#315d46;color:#fff;border-color:#315d46}.golf-actions button:hover{transform:translateY(-1px);filter:brightness(.95)}.golf-actions [hidden]{display:none}.golf-actions button:focus-visible{outline:3px solid #7556b4;outline-offset:2px}.golf-lab .lab-hint{font-size:.8rem;line-height:1.5}
@media(max-width:700px){.golf-head{align-items:start}.golf-head p{font-size:.78rem}.golf-bottom{align-items:stretch;flex-direction:column}.golf-actions button{flex:1}.golf-course{font-size:.68rem;padding:7px 9px}}

/* One Million Pixels: a 1000 by 1000 pixel picture. */
.pixel-explorer{max-width:1000px}.pixel-explorer .dots-board>canvas{image-rendering:pixelated}.dots-resolution{margin:-5px 0 1px;color:#675b77;font-size:.78rem;font-weight:800;letter-spacing:.04em}.game-panel:has(.pixel-explorer){padding:22px}
@media(max-width:720px){.game-panel:has(.pixel-explorer){padding:14px}.dots-resolution{font-size:.68rem}}

/* Keep interactive color states solid instead of glowing. */
.escape-object.lamp.lit{box-shadow:4px 5px 0 #1c253b}
.escape-room .escape-object.lit{box-shadow:none;background:#ffef9b40}
