/* Palette hooks: final research selection can override these roles without editing components. */
.trick-lab,.physics-lab{--lab-paper:var(--surface-paper);--lab-green:var(--action);--lab-foil:var(--accent-gold);--lab-red:var(--accent-red);background:linear-gradient(140deg,#e8e1d2,var(--surface-page) 65%)}
.lab-intro{max-width:740px}.lab-grid{display:grid;grid-template-columns:minmax(0,1.1fr) minmax(0,1fr);gap:40px;align-items:start;margin-top:35px}.lab-grid>*{min-width:0}.foil-panel{position:relative;isolation:isolate;padding:10px;border:1px solid var(--control-edge);border-radius:16px;background:linear-gradient(125deg,var(--lab-foil),#dce5d7 45%,var(--lab-red));overflow:hidden}.foil-panel::before{content:"";position:absolute;inset:0;z-index:-1;pointer-events:none;background:linear-gradient(110deg,transparent 25%,#ffffff80 45%,#b4cfb980 50%,transparent 65%);transform:translateX(-110%);opacity:0;transition:transform .65s ease,opacity .25s ease}.foil-panel:is(:hover,:focus-within)::before,.foil-panel.is-lit::before{transform:translateX(35%);opacity:1}.lab-stage{background:var(--lab-paper);border-radius:9px;overflow:hidden}.lab-stage svg{display:block;width:100%;height:auto}.lab-caption{color:var(--text-main);background:var(--lab-paper);font-size:13px;line-height:1.5;padding:14px;border-radius:7px;margin:8px 0 0}.lab-controls>label,.lab-row label{display:block;font-weight:650;font-size:15px}.lab-controls select{display:block;width:100%;min-height:46px;background:var(--lab-paper);color:var(--text-main);border:1px solid var(--control-edge);border-radius:7px;padding:10px;font:inherit;margin:8px 0 20px}.lab-controls h3{margin-block:16px}.lab-controls input[type=range]{width:100%;min-height:44px;accent-color:var(--lab-green)}.lab-row{display:flex;flex-wrap:wrap;gap:12px;align-items:center;margin:12px 0 20px}.lab-row select{margin:5px 0}.lab-row .btn{min-height:46px}.lab-controls summary{min-height:44px;padding-block:12px;cursor:pointer}.lab-controls button:disabled{opacity:1;background:#e8e1d2;color:#51584e;border-color:#687261;cursor:default}.lab-controls :is(select,input,button,summary):focus-visible{outline:3px solid var(--lab-red);outline-offset:4px}
@media(max-width:800px){.lab-grid{grid-template-columns:1fr;gap:26px}.lab-row{align-items:stretch}.lab-row .btn{flex:1 1 180px}}
@media(prefers-reduced-motion:reduce){.foil-panel::before{transition:none;transform:none!important;opacity:0!important}}
.physics-lab{background:var(--surface-paper);border-top:1px solid var(--control-edge)}.physics-view{background:var(--surface-page);border:1px solid var(--control-edge);border-radius:12px;overflow:hidden}.physics-view svg{display:block;width:100%;height:auto}.physics-view>p{padding:16px 20px;border-top:1px solid var(--control-edge);font-size:14px;line-height:1.6;min-height:84px;margin:0}.physics-params{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px;margin:18px 0}.physics-params label{font-size:14px;font-weight:650}.physics-params input{display:block;width:100%;box-sizing:border-box;min-height:46px;padding:9px;background:var(--surface-paper);color:var(--text-main);border:1px solid var(--control-edge);border-radius:6px;font:inherit;margin-top:6px}.physics-limits{margin-top:36px;max-width:900px}.physics-limits summary{min-height:44px;padding-block:12px;font-weight:650;cursor:pointer}.physics-lab .lab-controls .fine{font-size:13px}@media(max-width:480px){.physics-params{grid-template-columns:1fr}}

/* ---- canvas stage (both labs) ------------------------------------------------------------------ */
.lab-left{min-width:0}
.lab-canvas{display:block;width:100%;aspect-ratio:7/5;background:var(--lab-paper);border-radius:9px;touch-action:pan-y;cursor:grab}
.lab-canvas:focus-visible{outline:3px solid var(--lab-red);outline-offset:3px}
.physics-view .lab-canvas{border-radius:0}
.view-bar{display:flex;flex-wrap:wrap;gap:10px 18px;align-items:center;margin:12px 0 4px}
.physics-view .view-bar{padding:10px 14px 0}
.chip-row{display:flex;flex-wrap:wrap;gap:6px;align-items:center}
.chip-btn{min-height:44px;min-width:44px;padding:8px 14px;background:var(--lab-paper);color:var(--text-main);border:1px solid var(--control-edge);border-radius:999px;font:inherit;font-size:14px;font-weight:650;cursor:pointer}
.chip-btn[aria-pressed="true"]{background:var(--lab-green);color:#fffdf5;border-color:var(--lab-green)}
.chip-btn:focus-visible{outline:3px solid var(--lab-red);outline-offset:3px}
.zoom-text{min-width:48px;text-align:center;font-size:14px;font-weight:650}
.inline-check input{flex:none;width:22px;height:22px;margin:0}.inline-check{display:inline-flex;flex-direction:row;gap:8px;align-items:center;min-height:44px;font-size:14px}
.small-h{font-size:16px;margin:18px 0 4px}
.arrows-key{padding:0 14px}

/* ---- phase timeline ------------------------------------------------------------------------------- */
.timeline{position:relative;display:flex;height:48px;margin:8px 0 0;border:1px solid var(--control-edge);border-radius:8px;background:var(--lab-paper);overflow:visible}
.timeline .seg{flex:none;min-width:0;padding:0;margin:0;background:#e8e1d2;color:var(--text-main);font:inherit;font-weight:750;font-size:14px;cursor:pointer;border:0;border-right:2px solid var(--control-edge);border-radius:0}
.timeline .seg:first-child{border-radius:7px 0 0 7px}.timeline .seg:last-of-type{border-right:0}
.timeline .seg.status-described{background:#d3e3d6}
.timeline .seg.status-varies{background:#f1e2b8;background-image:repeating-linear-gradient(135deg,transparent 0 6px,#00e5ff55 6px 8px)}
.timeline .seg.status-authored{background:#e8e1d2}
.timeline .seg[aria-current="step"]{box-shadow:inset 0 0 0 3px var(--lab-green)}
.timeline .seg:focus-visible{outline:3px solid var(--lab-red);outline-offset:-3px}
.timeline .playhead{position:absolute;top:-5px;bottom:-5px;width:3px;margin-left:-1px;background:var(--lab-red);border-radius:2px;pointer-events:none}
.timeline .mark{position:absolute;bottom:-9px;width:0;height:9px;border-left:2px solid var(--text-main);pointer-events:none}
.timeline .mark-label{position:absolute;top:10px;left:0;white-space:nowrap;font-size:12.5px;font-weight:700;color:var(--text-main);background:var(--lab-paper);padding:0 3px;border-radius:3px}
.phase-names{display:flex;flex-wrap:wrap;gap:2px 14px;list-style:none;counter-reset:ph;margin:44px 0 8px;padding:0;font-size:13px;color:var(--text-main)}
.phase-names li{counter-increment:ph}.phase-names li::before{content:counter(ph) " ";font-weight:800}
.phase-card{margin:10px 0 12px;padding:14px 16px;background:var(--lab-paper);border:1px solid var(--control-edge);border-left:6px solid var(--lab-green);border-radius:8px}
.phase-card p{margin:6px 0}.phase-card .card-head{display:flex;flex-wrap:wrap;gap:8px 12px;align-items:center;font-size:17px}
.badge{display:inline-block;padding:3px 10px;border-radius:999px;font-size:12.5px;font-weight:700;border:1px solid var(--control-edge);background:#e8e1d2;color:var(--text-main)}
.badge.status-described{background:#d3e3d6}.badge.status-varies{background:#f1e2b8}.badge.status-authored{background:#e8e1d2}
.review{color:var(--text-main)}

/* ---- legend, options ------------------------------------------------------------------------------------ */
.legend{list-style:none;margin:6px 0 0;padding:0;display:grid;gap:6px;font-size:13px;color:var(--text-main)}
.legend li{display:flex;gap:10px;align-items:center}.key{flex:none;width:30px;height:0;border-top:3px solid}
.key-motion{border-color:#12465a}.key-axis{border-top-style:dashed;border-color:#ff2b9d}.key-contact{height:12px;width:12px;border:2px solid #6b4f10;border-radius:50%;background:#00e5ff73}.key-trail{border-color:#a04e33;opacity:.7}
.opts{margin:0 0 16px;padding:10px 14px 12px;border:1px solid var(--control-edge);border-radius:8px}
.opts legend{padding:0 6px;font-weight:700;font-size:14px}.opts label{display:flex;flex-direction:row;gap:10px;align-items:center;min-height:44px;font-size:15px;font-weight:550}
.opts label:has(select){display:block;min-height:0;font-weight:650;font-size:14px}.opts input[type=checkbox]{flex:none;margin:0}.opts select{margin:6px 0 14px}
.opts input[type=checkbox]{width:22px;height:22px;accent-color:var(--lab-green)}
.pulse-dot{display:inline-block;width:16px;height:16px;border-radius:50%;background:#e8e1d2;border:2px solid var(--control-edge);vertical-align:middle}
.pulse-dot.on{animation:pulse .5s ease-out}
@keyframes pulse{0%{background:var(--lab-red);transform:scale(1.5)}100%{background:#e8e1d2;transform:scale(1)}}
.src-list{padding-left:20px;font-size:14px;line-height:1.55}.src-list li{margin:0 0 10px}.src-list ol{margin:4px 0 0;padding-left:20px}
.lab-controls .fine{font-size:13px;line-height:1.5}
@media(max-width:800px){.lab-canvas{aspect-ratio:7/6}}
@media(prefers-reduced-motion:reduce){.pulse-dot.on{animation:none}}

/* ---- v3: hand and arm controls ---------------------------------------------------------------------- */
.opts label.sel{display:block;min-height:0;font-weight:650;font-size:14px}
.opts label.sel select{margin:6px 0 14px}
.angles{padding:8px 12px;margin:0 0 12px;border-left:4px solid #3b4a8f;background:var(--lab-paper);border-radius:4px}

/* Review fix: optional phase cue is static, never a blink or pulse. */
.pulse-dot.on{animation:none!important;transform:none!important;background:#fffdf5;color:#242820;display:inline-flex;align-items:center;justify-content:center;min-width:26px;height:26px;border-radius:5px;font-weight:700;font-size:14px;vertical-align:middle}

/* ---- v4: welcoming main controls (trick cards, big Play, plain steps) ------------------------------- */
/* Large, plain-language cards are the main way to pick a trick. aria-pressed shows the chosen one. */
.trick-cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:12px;margin:24px 0 0}
.trick-card{display:flex;flex-direction:column;gap:6px;text-align:left;min-height:88px;padding:16px 18px;border:2px solid var(--control-edge);border-radius:14px;background:var(--lab-paper);color:var(--text-main);font:inherit;cursor:pointer}
.trick-card .card-title{font-size:22px;font-weight:750;line-height:1.1}
.trick-card .card-line{font-size:15px;line-height:1.4}
.trick-card:hover{border-color:var(--lab-green)}
.trick-card[aria-pressed="true"]{border-color:var(--lab-green);box-shadow:inset 0 0 0 2px var(--lab-green);background:#eef3ea}
.trick-card:focus-visible{outline:3px solid var(--lab-red);outline-offset:4px}
.big-controls .btn.big{font-size:19px;min-height:54px;min-width:140px}
.lab-controls label[for=labLift],.lab-controls label[for=labScrub],.lab-controls label[for=labSpeed]{display:block;font-weight:650;font-size:15px;margin-top:6px}
/* "Explore the physics": everything technical, closed by default, still reachable by keyboard and screen readers. */
.explore{margin-top:22px;border:1px solid var(--control-edge);border-radius:12px;background:var(--lab-paper);padding:0 16px}
.explore>summary{font-weight:700;font-size:16px}
.explore-body{padding-bottom:16px}
.explore h4{margin:18px 0 6px;font-size:15px}
@media(max-width:420px){.trick-card .card-title{font-size:20px}.big-controls .btn{flex:1 1 130px}}

/* v5: text for screen readers only (the key moments under the timeline). */
.visually-hidden{position:absolute!important;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;border:0}
/* v5: five trick cards; on wide screens they share one or two rows. */
.trick-cards{grid-template-columns:repeat(auto-fit,minmax(180px,1fr))}
