:root{font-family:Inter,ui-sans-serif,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;color-scheme:light;--bg:#f3f6fc;--surface:#fff;--ink:#1b2843;--sub:#64738d;--muted:#8b96aa;--line:#e5eaf3;--primary:#315bd3;--primary-dark:#2446ae;--pale:#eef3ff;--shadow:0 18px 60px rgba(37,58,104,.075);--blue:#3f79d8;--amber:#dc9640;--green:#259e74;--disp-bg:#eaf1ff;--dip-bg:#fff1dc;--hb-bg:#dff7ed;--stage:#f8faff;--btn:#f4f7fc;--danger:#c74242}
[data-theme="dark"]{color-scheme:dark;--bg:#121a2b;--surface:#1a263a;--ink:#eef3fb;--sub:#b8c5da;--muted:#92a2bb;--line:#334057;--primary:#7997ff;--primary-dark:#aec2ff;--pale:#263a5b;--shadow:0 18px 60px rgba(0,0,0,.16);--blue:#76a9fa;--amber:#e6ac66;--green:#69caa3;--disp-bg:#273b59;--dip-bg:#423628;--hb-bg:#23463f;--stage:#182237;--btn:#263550;--danger:#fa8484}
*{box-sizing:border-box}html,body{margin:0;min-height:100%;}body{background:radial-gradient(ellipse at 25% -20%,#e8f0ff 0%,transparent 38%),var(--bg);color:var(--ink);transition:background .2s,color .2s}[data-theme="dark"] body{background:radial-gradient(ellipse at 25% -20%,#1e304e 0%,transparent 42%),var(--bg)}button,input,select{font:inherit}button{cursor:pointer}button:focus-visible,input:focus-visible,select:focus-visible{outline:3px solid #84a7ff;outline-offset:3px}.hidden{display:none!important}.visually-hidden{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap}
.app-shell{max-width:1320px;margin:0 auto;padding:26px 34px 36px}.site-header{display:flex;align-items:center;gap:24px;min-height:64px;margin-bottom:26px}.brand{display:flex;gap:12px;align-items:center;flex-shrink:0}.brand-icon{position:relative;width:44px;height:44px;border-radius:12px;background:linear-gradient(135deg,#547bea,#2755c9);box-shadow:0 6px 12px #2d59c235;display:block}.brand-icon span{position:absolute;background:#c8d9ff;border-radius:50%;width:8px;height:8px}.brand-icon span:nth-child(1){left:9px;top:10px}.brand-icon span:nth-child(2){right:9px;top:10px}.brand-icon span:nth-child(3){left:18px;bottom:6px}.brand-icon i{position:absolute;left:15px;top:14px;background:white;width:14px;height:14px;border-radius:50%}.brand-icon:after{content:"";position:absolute;border:2px solid #c8d9ff;width:26px;height:26px;top:7px;left:7px;border-radius:50%;opacity:.4}.brand-name{font-size:23px;font-weight:850;letter-spacing:-.9px;line-height:1.05}.brand-name>span{color:var(--primary)}.brand-name small{display:block;letter-spacing:2.3px;font-size:9px;font-weight:800;color:var(--muted);margin-top:5px}.header-divider{height:37px;width:1px;background:var(--line)}.app-heading h1{font-size:21px;line-height:1.2;letter-spacing:-.6px;margin:0;font-weight:800}.app-heading p{margin:4px 0 0;color:var(--sub);font-size:12px}.header-actions{margin-left:auto;display:flex;align-items:center;gap:10px}.icon-button{width:43px;height:43px;display:inline-grid;place-items:center;background:var(--surface);color:var(--ink);border:1px solid var(--line);border-radius:13px;box-shadow:0 3px 12px #1d2c4910;font-size:23px}.icon-button:hover{background:var(--pale)}.icon-button svg{width:21px;height:21px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.main-grid{display:grid;grid-template-columns:minmax(0,1fr) 280px;gap:22px;align-items:start}.game-panel,.side-card{background:var(--surface);border:1px solid var(--line);border-radius:24px;box-shadow:var(--shadow)}.game-panel{min-height:660px;overflow:hidden}.screen{min-height:658px;position:relative}.eyebrow{font-size:11px;letter-spacing:2px;font-weight:800;color:var(--primary);text-transform:uppercase}.live-dot{display:inline-block;width:7px;height:7px;background:var(--green);border-radius:50%;margin-right:6px;vertical-align:1px}
.start-screen{display:flex;align-items:center;flex-direction:column;padding:34px 52px 36px;text-align:center}.hero-art{max-width:550px;width:100%;height:165px;margin:2px 0 0}.hero-svg{width:100%;height:100%}.start-screen h2{font-size:clamp(27px,3vw,37px);letter-spacing:-1.5px;margin:0 0 6px}.hero-description{max-width:520px;color:var(--sub);font-size:14.5px;line-height:1.6;margin:0 0 19px}.force-guide{width:100%;max-width:500px;border:1px solid var(--line);border-radius:16px;overflow:hidden;text-align:left}.force-row{display:flex;gap:12px;align-items:center;min-height:61px;padding:9px 16px}.force-row+.force-row{border-top:1px solid var(--line)}.force-row>div{flex:1}.force-row b{font-size:14px;display:block}.force-row small{font-size:12px;color:var(--sub);display:block;margin-top:3px}.force-num{display:inline-grid;place-items:center;width:35px;height:35px;font-weight:800;border-radius:9px;color:var(--ink);font-size:13px}.disp-bg{background:var(--disp-bg)}.dip-bg{background:var(--dip-bg)}.hb-bg{background:var(--hb-bg)}.force-dot{width:8px;height:8px;border-radius:50%}.force-disp{--force:var(--blue)}.force-dip{--force:var(--amber)}.force-hb{--force:var(--green)}.force-dot.force-disp{background:var(--blue)}.force-dot.force-dip{background:var(--amber)}.force-dot.force-hb{background:var(--green)}.start-actions{display:flex;align-items:center;flex-direction:column;gap:12px;margin-top:25px}.primary-button{min-height:50px;border:0;border-radius:13px;background:var(--primary);color:white;padding:12px 30px;font-weight:800;font-size:15px;box-shadow:0 4px 0 rgba(13,44,117,.18);transition:transform .12s,filter .12s}.primary-button:hover{filter:brightness(1.08)}.primary-button:active{transform:translateY(2px);box-shadow:none}.primary-button>span{margin-left:13px;font-size:19px}.keyboard-hint{font-size:12px;color:var(--muted)}kbd{font:700 11px/1.2 inherit;font-family:inherit;background:var(--btn);border:1px solid var(--line);border-radius:5px;padding:3px 7px;color:var(--sub)}
.play-screen{padding:26px 34px 24px;display:flex;flex-direction:column}.play-top{display:flex;justify-content:space-between;align-items:start}.score-metric{display:flex;flex-direction:column;gap:2px;min-width:82px}.score-metric>span{font-size:11px;font-weight:800;letter-spacing:1.5px;color:var(--muted)}.score-metric strong{font-size:30px;letter-spacing:-1px;font-variant-numeric:tabular-nums;line-height:1.2}.score-metric .unit{font-size:16px;color:var(--sub);padding-left:2px}.align-right{text-align:right}.mode-chip{align-self:center;background:var(--pale);border:1px solid var(--line);color:var(--primary);font-size:11px;font-weight:800;letter-spacing:1px;border-radius:99px;padding:8px 14px}.timer-track{margin-top:16px;background:var(--stage);height:10px;border-radius:99px;overflow:hidden}.timer-fill{height:100%;width:100%;border-radius:99px;background:#35b584;transition:width .035s linear,background .15s}.prompt-top{display:flex;justify-content:space-between;align-items:center;margin-top:21px}.prompt-helper{font-size:11px;color:var(--muted);letter-spacing:1.1px;font-weight:700}.molecule-stage{min-height:324px;flex:1;display:flex;align-items:center;justify-content:center;flex-direction:column;gap:5px;padding:18px 12px;margin:15px 0 8px;border:1px solid var(--line);background:var(--stage);border-radius:16px}.molecule-art{height:255px;width:100%;display:flex;align-items:center;justify-content:center;overflow:hidden}.molecule-art svg{display:block;max-width:100%;max-height:100%;width:100%;height:100%;color:var(--ink)}.molecule-name{color:var(--sub);font-size:15px;min-height:24px;font-weight:700;letter-spacing:.15px}.answer-heading{font-size:13px;font-weight:750;color:var(--sub);margin:5px 0 11px}.answer-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:11px}.answer-button{--fill:var(--blue);height:100px;text-align:left;border:1.5px solid var(--line);border-radius:14px;background:var(--surface);position:relative;padding:14px 15px;transition:border-color .15s,transform .1s,background .15s;display:flex;flex-direction:column;justify-content:space-between;color:var(--ink)}.answer-button:hover{border-color:var(--force);background:var(--stage);transform:translateY(-2px)}.answer-button:active{transform:translateY(0)}.answer-button.force-disp{--force:var(--blue)}.answer-button.force-dip{--force:var(--amber)}.answer-button.force-hb{--force:var(--green)}.answer-button:before{content:"";height:4px;background:var(--force);position:absolute;left:16px;right:16px;top:0;border-radius:0 0 4px 4px}.answer-key{font-size:11px;font-weight:850;color:var(--force);letter-spacing:.4px}.answer-label{font-size:15.5px;font-weight:800;letter-spacing:-.35px}.answer-secondary{font-size:12.5px;font-weight:500;color:var(--sub);display:block;margin-top:4px;letter-spacing:0}.play-foot{display:flex;justify-content:space-between;align-items:center;gap:10px;margin-top:20px;color:var(--muted);font-size:12px}.text-button{background:none;border:none;padding:6px;color:var(--sub);font-weight:750;font-size:12px}.text-button:hover{text-decoration:underline;color:var(--primary)}
.feedback{min-height:161px;padding:16px 18px;background:var(--pale);border:1px solid var(--line);border-radius:14px;margin-top:9px}.feedback-flag{font-size:11px;letter-spacing:1.4px;color:var(--primary);font-weight:800;margin-bottom:4px}.feedback strong{display:block;font-size:16px;margin-bottom:4px}.feedback-explainer{color:var(--sub);font-size:13px;line-height:1.5;margin-bottom:14px}.primary-button.compact{min-height:41px;font-size:13px;padding:9px 18px;box-shadow:none}.primary-button kbd{color:white;background:#ffffff22;border-color:#ffffff66;margin-left:5px}.feedback.is-wrong{background:color-mix(in srgb,var(--danger) 6%,var(--surface))}
.over-screen{text-align:center;padding:38px 42px 30px;display:flex;flex-direction:column;align-items:center}.result-burst{font-size:34px;color:var(--primary);margin:16px 0 -6px}.over-screen h2{font-size:31px;letter-spacing:-1px;margin:5px 0 6px}.result-score{display:flex;align-items:baseline;gap:10px;margin-bottom:16px}.result-score strong{font-size:57px;letter-spacing:-2px}.result-score span{font-size:15px;color:var(--sub)}.missed-card{width:100%;max-width:510px;text-align:center;border:1px solid var(--line);border-radius:16px;padding:13px 20px 15px;background:var(--stage);margin-bottom:16px}.missed-label{font-size:10px;letter-spacing:1.8px;color:var(--muted);font-weight:850}.missed-molecule{width:100%;height:112px;display:flex;align-items:center;justify-content:center;overflow:hidden}.missed-molecule svg{height:100%;width:100%;color:var(--ink)}.missed-card b{display:block;font-size:14px}.missed-card p{font-size:14px;color:var(--primary);font-weight:800;margin:5px 0}.missed-card small{display:block;max-width:470px;color:var(--sub);font-size:12px;line-height:1.45}.save-score{width:100%;max-width:510px}.save-heading{font-weight:800;font-size:13px;margin-bottom:8px}.save-score form{display:flex;gap:8px}.save-score input{height:42px;border:1px solid var(--line);background:var(--surface);color:var(--ink);flex:1;min-width:0;border-radius:10px;padding:0 12px}.secondary-button{background:var(--pale);border:1px solid var(--line);color:var(--primary);padding:0 20px;border-radius:10px;font-weight:800}.secondary-button:hover{filter:brightness(.95)}.save-note{display:block;font-size:11px;color:var(--muted);margin-top:6px}.end-buttons{display:flex;align-items:center;gap:10px;margin-top:20px}.subtle-button{border:1px solid var(--line);color:var(--sub);background:var(--surface);height:50px;padding:0 24px;border-radius:12px;font-weight:700}.subtle-button:hover{background:var(--pale)}
.sidebar{display:flex;flex-direction:column;gap:16px}.side-card{border-radius:19px;padding:21px 19px}.side-title{display:flex;gap:9px;align-items:center}.side-icon{display:grid;place-items:center;width:30px;height:30px;background:var(--pale);border-radius:9px;color:var(--primary);font-size:19px}.side-title h2{font-size:14px;letter-spacing:-.2px;margin:0}.side-sub{color:var(--sub);font-size:12px;margin:9px 0 15px}.board-list{list-style:none;margin:0;padding:0;min-height:120px}.board-list li{display:flex;align-items:center;gap:10px;border-bottom:1px solid var(--line);padding:10px 3px;font-size:13px}.board-list li:last-child{border-bottom:0}.board-rank{width:24px;color:var(--muted);font-size:13px;font-weight:800}.board-name{min-width:0;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:700}.board-score{color:var(--primary);font-weight:850;font-variant-numeric:tabular-nums}.board-list li.board-empty{border:0;justify-content:center;color:var(--muted);font-size:12px;padding:30px 4px}.board-list li.highlight{background:var(--pale);padding-left:6px;padding-right:6px;border-radius:8px}.privacy-line{border-top:1px solid var(--line);padding-top:13px;color:var(--muted);display:flex;align-items:center;gap:7px;font-size:11px}.privacy-line svg{width:16px;height:16px;fill:none;stroke:var(--green);stroke-width:1.8}.quick-tip p{color:var(--sub);font-size:12.5px;line-height:1.7;margin:13px 0 0}.quick-tip b{color:var(--ink)}.side-footer{font-size:11px;color:var(--muted);text-align:center;line-height:1.5;padding:0 9px}
#settingsDialog{border:1px solid var(--line);border-radius:20px;padding:0;width:min(94vw,475px);max-height:min(90vh,670px);background:var(--surface);color:var(--ink);box-shadow:0 25px 80px rgba(10,20,50,.3)}#settingsDialog::backdrop{background:rgba(14,25,45,.57);backdrop-filter:blur(3px)}.settings-modal{padding:27px}.modal-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:22px}.modal-header h2{font-size:25px;margin:5px 0 0;letter-spacing:-.8px}.field-label{display:block;font-weight:800;font-size:13px;margin-bottom:9px}#modeSelect{width:100%;height:48px;background:var(--stage);color:var(--ink);border:1px solid var(--line);border-radius:10px;padding:0 12px;font-size:13px}.setting-row{display:flex;justify-content:space-between;gap:15px;align-items:center;padding:17px 0;border-bottom:1px solid var(--line)}.setting-row strong{display:block;font-size:13px}.setting-row small{display:block;color:var(--sub);font-size:12px;margin-top:4px}.switch{position:relative;display:block;flex-shrink:0;width:42px;height:25px}.switch input{position:absolute;opacity:0}.switch span{display:block;width:100%;height:100%;background:var(--line);border-radius:99px;transition:.2s}.switch span:before{content:"";position:absolute;top:4px;left:4px;width:17px;height:17px;background:white;border-radius:50%;box-shadow:0 1px 3px #0002;transition:.2s}.switch input:checked+span{background:var(--primary)}.switch input:checked+span:before{transform:translateX(17px)}.switch input:focus-visible+span{outline:3px solid #84a7ff;outline-offset:3px}.modal-note{font-size:12px;line-height:1.55;color:var(--sub);margin:17px 0}.modal-actions{display:flex;align-items:center;justify-content:space-between;gap:12px}.danger{color:var(--danger)}
@media(max-width:1050px){.main-grid{grid-template-columns:minmax(0,1fr) 240px;gap:14px}.app-shell{padding:18px}.game-panel{min-height:620px}.screen{min-height:618px}.sidebar .side-card{padding:16px}.start-screen{padding:26px 25px}.play-screen{padding:22px 23px}.molecule-art{height:225px}.molecule-stage{min-height:280px}}
@media(max-width:760px){.site-header{margin-bottom:18px;gap:12px}.app-shell{padding:13px}.header-divider,.app-heading p{display:none}.app-heading h1{font-size:15px}.brand-name{font-size:18px}.brand-icon{width:35px;height:35px}.brand-icon i{left:12px;top:12px;width:11px;height:11px}.brand-icon span:nth-child(1){left:6px;top:7px}.brand-icon span:nth-child(2){right:6px;top:7px}.brand-icon span:nth-child(3){left:14px;bottom:3px}.brand-icon:after{left:4px;top:4px}.header-actions{gap:6px}.icon-button{width:38px;height:38px}.main-grid{grid-template-columns:1fr}.sidebar{display:grid;grid-template-columns:1fr 1fr;gap:12px}.side-footer{grid-column:1/-1}.game-panel,.screen{min-height:0}.game-panel{border-radius:17px}.start-screen{padding:26px 22px 30px}.hero-art{height:140px}.sidebar .side-card{border-radius:16px}.play-screen{min-height:610px}.over-screen{min-height:630px}}
@media(max-width:540px){.app-shell{padding:10px}.site-header{gap:8px;margin:3px 3px 12px}.brand-name{display:none}.app-heading{min-width:0}.app-heading h1{font-size:17px}.site-header .brand{gap:0}.start-screen{padding:24px 17px 25px}.start-screen h2{font-size:28px}.hero-art{height:122px}.hero-description{font-size:13px}.force-row{min-height:62px}.force-row b{font-size:13px}.force-row small{font-size:11px}.start-actions{margin-top:21px}.play-screen{padding:20px 14px 18px;min-height:605px}.prompt-helper{font-size:9px;letter-spacing:.45px}.molecule-stage{margin:12px 0 8px;min-height:265px;padding:13px 7px}.molecule-art{height:220px}.answer-grid{gap:7px}.answer-button{height:93px;padding:13px 9px}.answer-button:before{left:9px;right:9px}.answer-label{font-size:12.3px;letter-spacing:-.25px}.answer-secondary{font-size:11px}.answer-key{font-size:10px}.play-foot{font-size:10px}.over-screen{padding:28px 15px}.result-score strong{font-size:52px}.end-buttons{flex-wrap:wrap;justify-content:center}.sidebar{grid-template-columns:1fr}.side-footer{grid-column:1}.sidebar .quick-tip{display:none}.side-card{padding:15px!important}.board-list{min-height:55px}.board-list li.board-empty{padding:14px 4px}.side-sub{margin:5px 0 8px}}
@media(prefers-reduced-motion:reduce){*,*:before,*:after{transition:none!important;animation:none!important}}

/* v1.1.0 viewport-locked, no page scrolling layout. Each screen gets the SAME bounded height. */
html,body{width:100%;height:100%;height:100dvh;overflow:hidden;overscroll-behavior:none}
body{height:100dvh;min-height:0}
.app-shell{height:100%;max-height:100dvh;min-height:0;display:flex;flex-direction:column;padding:clamp(7px,1.4vh,18px) clamp(9px,2.1vw,30px);overflow:hidden}
.site-header{flex:0 0 auto;min-height:0;height:clamp(44px,8vh,62px);margin-bottom:clamp(6px,1.35vh,14px);gap:clamp(10px,1.5vw,24px)}
.main-grid{flex:1;min-height:0;height:100%;align-items:stretch;gap:clamp(9px,1.5vw,20px)}
.game-panel{height:100%;min-height:0;min-width:0;overflow:hidden}
.screen{height:100%;min-height:0;min-width:0;overflow:hidden}
.sidebar{height:100%;min-height:0;overflow:hidden;gap:clamp(8px,1.5vh,16px)}
.side-card{min-height:0;padding:clamp(10px,1.5vw,18px)}
.side-footer{font-size:10px}
.board-list{min-height:0}
.board-list li{padding:clamp(5px,1vh,9px) 3px}
/* START: shrink nonessential decoration before compromising the three force choices. */
.start-screen{justify-content:center;gap:clamp(3px,.8vh,9px);padding:clamp(10px,2.4vh,28px) clamp(14px,3vw,40px)}
.start-screen .eyebrow{flex:0 0 auto}
.hero-art{flex:0 1 clamp(46px,16vh,150px);min-height:24px;height:auto;max-height:150px;margin:0}
.start-screen h2{font-size:clamp(22px,3.1vh,35px);line-height:1.06;margin:0;flex:0 0 auto}
.hero-description{font-size:clamp(11px,1.5vh,14px);line-height:1.35;margin:0;max-width:520px;flex:0 0 auto}
.force-guide{flex:0 0 auto;max-width:540px}
.force-row{min-height:0;padding:clamp(5px,.9vh,9px) 12px;gap:11px}
.force-row b{font-size:clamp(11px,1.65vh,14px)}
.force-row small{font-size:clamp(10px,1.3vh,12px);margin-top:2px}
.force-num{width:clamp(25px,4.2vh,34px);height:clamp(25px,4.2vh,34px)}
.start-actions{flex:0 0 auto;gap:clamp(4px,.8vh,10px);margin-top:clamp(2px,1.3vh,13px)}
.primary-button{min-height:clamp(36px,5.8vh,50px);padding:7px clamp(16px,2.2vw,30px)}
/* PLAY: the molecule viewer claims all spare height and never pushes answers off screen. */
.play-screen{padding:clamp(8px,2.3vh,22px) clamp(11px,2.5vw,30px) clamp(7px,1.7vh,16px);display:flex;flex-direction:column;gap:0}
.play-top{flex:0 0 auto;align-items:center}
.score-metric strong{font-size:clamp(20px,3.3vh,29px)}
.score-metric>span{font-size:clamp(9px,1.2vh,11px)}
.timer-track{flex:0 0 auto;height:clamp(5px,.95vh,9px);margin-top:clamp(5px,1vh,12px)}
.prompt-top{flex:0 0 auto;margin-top:clamp(6px,1.2vh,14px)}
.molecule-stage{min-height:0;flex:1 1 0;display:flex;gap:clamp(2px,.5vh,5px);padding:clamp(4px,1.2vh,13px) 9px;margin:clamp(5px,1vh,12px) 0 clamp(4px,.7vh,8px);overflow:hidden}
.molecule-art{height:auto;flex:1 1 0;min-height:0;max-height:none;overflow:hidden}
.molecule-art svg{width:100%;height:100%;min-height:0;max-height:100%}
.molecule-name{flex:0 0 auto;min-height:0;font-size:clamp(11px,1.7vh,15px);line-height:1.3}
#answerArea{flex:0 0 auto;min-height:0}
.answer-heading{font-size:clamp(10px,1.5vh,13px);margin:0 0 clamp(4px,.9vh,9px)}
.answer-grid{gap:clamp(5px,.8vw,11px)}
.answer-button{height:clamp(58px,11vh,92px);min-height:0;padding:clamp(6px,1.2vh,12px) clamp(7px,1vw,13px)}
.answer-label{font-size:clamp(11px,1.8vh,15px)}
.answer-secondary{font-size:clamp(10px,1.4vh,12px);margin-top:1px}
.play-foot{flex:0 0 auto;margin-top:clamp(4px,1vh,10px);min-height:20px}
.feedback{flex:0 0 auto;min-height:0;padding:clamp(7px,1.2vh,14px);margin-top:0}
.feedback-flag{font-size:10px;margin-bottom:2px}
.feedback strong{font-size:clamp(12px,1.8vh,16px);margin:0 0 2px}
.feedback-explainer{font-size:clamp(11px,1.55vh,13px);line-height:1.25;margin-bottom:clamp(4px,.9vh,10px)}
.primary-button.compact{min-height:clamp(30px,4.5vh,40px)}
/* END: all info belongs in viewport at normal laptop heights. */
.over-screen{justify-content:center;gap:clamp(3px,.7vh,8px);padding:clamp(10px,1.8vh,22px) clamp(12px,3vw,33px)}
.result-burst{font-size:clamp(15px,3vh,26px);line-height:1;margin:0}
.over-screen h2{font-size:clamp(20px,3.4vh,30px);margin:0;line-height:1.1}
.result-score{margin:0;gap:8px}
.result-score strong{font-size:clamp(31px,5.7vh,54px);line-height:1.05}
.result-score span{font-size:clamp(11px,1.7vh,14px)}
.missed-card{flex:0 1 auto;min-height:0;max-width:550px;overflow:hidden;margin:0;padding:clamp(7px,1.2vh,13px) clamp(10px,2vw,18px)}
.missed-molecule{height:clamp(50px,13vh,110px)}
.missed-card b{font-size:clamp(11px,1.7vh,14px)}
.missed-card p{font-size:clamp(11px,1.7vh,14px);margin:3px 0}
.missed-card small{font-size:clamp(10px,1.45vh,12px);line-height:1.25}
.save-score{flex:0 0 auto}
.save-heading{font-size:clamp(11px,1.5vh,13px);margin:0 0 4px}
.save-score input{height:clamp(33px,4.9vh,42px)}
.save-note{font-size:10px;margin-top:3px}
.end-buttons{margin-top:clamp(2px,.8vh,9px)}
.subtle-button{height:clamp(36px,5.8vh,50px)}
.mobile-scores{display:none}
/* Settings and scores panels also stay inside the screen. */
#settingsDialog,#scoresDialog{max-height:calc(100dvh - 18px);overflow:hidden}
#scoresDialog{border:1px solid var(--line);border-radius:19px;background:var(--surface);color:var(--ink);width:min(94vw,410px);padding:0;box-shadow:0 25px 80px #0004}
#scoresDialog::backdrop{background:rgba(14,25,45,.57);backdrop-filter:blur(3px)}
.scores-modal{padding:clamp(12px,2.2vh,24px)}
.scores-modal .modal-header{margin-bottom:8px}
.scores-modal .board-list li{padding:clamp(4px,1.2vh,9px) 4px}
.scores-disclaimer{font-size:11px;color:var(--muted);margin:10px 0 0}
@media (max-height:820px){
 .side-card.quick-tip{display:none}
 .sidebar .side-card{flex:0 1 auto}
 .sidebar .board-list li:nth-child(n+7){display:none}
}
@media(max-height:650px){
 .site-header{height:43px;margin-bottom:6px}
 .brand-icon{width:36px;height:36px}
 .brand-icon i{left:12px;top:11px}
 .brand-icon:after{top:4px;left:4px}
 .brand-name{font-size:19px}
 .brand-name small{margin-top:1px}
 .app-heading p{display:none}
 .icon-button{width:36px;height:36px;border-radius:10px}
 .hero-art{max-height:80px}
 .hero-description{line-height:1.2}
 .force-row{padding:4px 10px}
 .start-actions .keyboard-hint{display:none}
 .side-footer{display:none}
 .sidebar .board-list li:nth-child(n+5){display:none}
 .play-foot #playFootText{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}
 .over-screen{gap:3px}
 .result-burst{display:none}
 .missed-molecule{height:clamp(34px,10vh,65px)}
 .missed-card small{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
 .settings-modal{padding:clamp(11px,2vh,18px)}
 .modal-header{margin-bottom:clamp(8px,1.5vh,14px)}
 .modal-header h2{font-size:21px;margin:2px 0 0}
 #modeSelect{height:38px}
 .field-label{margin-bottom:5px}
 .setting-row{padding:clamp(6px,1.2vh,10px) 0}
 .setting-row small{font-size:11px;margin-top:1px}
 .modal-note{margin:7px 0;font-size:11px;line-height:1.3}
 .scores-modal .board-list li:nth-child(n+7){display:none}
}
@media(max-height:500px){
 .start-screen .eyebrow{display:none}
 .hero-art{display:none}
 .hero-description{font-size:11px}
 .force-row{padding:3px 8px}
 .force-row small{display:none}
 .start-actions{margin-top:1px}
 .start-screen{gap:5px}
 .play-foot #playFootText{display:none}
 .prompt-helper{display:none}
 .answer-heading{display:none}
 .answer-secondary{display:none}
 .answer-button{height:clamp(44px,10vh,60px)}
 .molecule-name{font-size:11px}
 .over-screen{gap:2px}
 .missed-card small{display:none}
 .missed-molecule{height:clamp(30px,8vh,48px)}
 .save-note{display:none}
 .modal-note{display:none}
 .setting-row{padding:5px 0}
 #scoresDialog .board-list li:nth-child(n+6){display:none}
}
@media(max-width:760px){
 .app-shell{padding:clamp(6px,1.3vh,10px) clamp(6px,1.6vw,12px)}
 .site-header{margin-bottom:clamp(5px,1.2vh,10px)}
 .main-grid{display:block;min-height:0;height:100%}
 .game-panel{height:100%;border-radius:17px}
 .sidebar{display:none}
 .mobile-scores{display:inline-grid}
 .screen{height:100%;min-height:0}
 .start-screen{padding:clamp(9px,2vh,21px) clamp(12px,3vw,23px)}
 .play-screen{padding:clamp(8px,2vh,17px) clamp(9px,3vw,20px)}
 .molecule-stage{min-height:0}
 .molecule-art{height:auto;min-height:0}
 .over-screen{min-height:0;padding:clamp(9px,1.5vh,23px) clamp(9px,3vw,20px)}
}
@media(max-width:540px){
 .site-header{margin:0 0 clamp(5px,.9vh,8px);height:clamp(40px,6.5vh,50px)}
 .app-heading h1{font-size:clamp(15px,4.5vw,18px)}
 .start-screen{padding:clamp(8px,1.5vh,17px)}
 .start-screen h2{font-size:clamp(21px,5.3vw,29px)}
 .hero-art{height:auto;max-height:clamp(45px,13vh,105px)}
 .force-row{min-height:0}
 .play-screen{min-height:0}
 .answer-button{min-height:0;height:clamp(54px,10vh,84px)}
 .answer-key{font-size:clamp(9px,1.4vh,11px)}
 .answer-label{font-size:clamp(10px,2.7vw,13px)}
 .answer-secondary{font-size:clamp(9px,2.4vw,11px)}
 .molecule-art{height:auto}
 .result-score strong{font-size:clamp(31px,5.8vh,48px)}
 .sidebar{display:none}
}
@media(max-width:360px){
 .app-heading h1{font-size:15px}
 .header-actions{gap:4px}
 .mode-chip{font-size:9px;padding:5px 8px}
 .score-metric{min-width:60px}
 .answer-grid{gap:4px}
 .answer-button{padding:6px 4px}
 .answer-button:before{left:6px;right:6px}
 .answer-label{font-size:10px}
 .answer-secondary{font-size:9px}
}

/* v1.2.0 — USE THE DISPLAY, NOT JUST PREVENT SCROLLING.
   On desktop, the introduction and end-of-round screen occupy the available
   panel height rather than centring a fixed-size content island. The existing
   compact tablet/phone layout is retained for shorter and narrower screens. */
@media (min-width:761px) and (min-height:640px) {
  .start-screen {
    justify-content:space-between;
    gap:clamp(6px,.9vh,14px);
    padding:clamp(17px,2.6vh,36px) clamp(24px,4.5vw,64px);
  }
  .start-screen .eyebrow {
    font-size:clamp(12px,1.7vh,16px);
    letter-spacing:2.2px;
  }
  .start-screen .hero-art {
    flex:1 1 0;
    min-height:72px;
    max-height:none;
    height:auto;
    max-width:760px;
    width:100%;
  }
  .start-screen h2 {
    font-size:clamp(29px,4.1vh,44px);
    line-height:1.1;
  }
  .start-screen .hero-description {
    max-width:750px;
    font-size:clamp(13px,1.95vh,18px);
    line-height:1.5;
  }
  .start-screen .force-guide {
    width:100%;
    max-width:780px;
    border-radius:18px;
  }
  .start-screen .force-row {
    min-height:clamp(56px,7.7vh,83px);
    padding:clamp(8px,1.15vh,15px) clamp(14px,2.4vw,27px);
    gap:18px;
  }
  .start-screen .force-row b {font-size:clamp(13px,1.95vh,17px)}
  .start-screen .force-row small {font-size:clamp(11px,1.6vh,14px);margin-top:4px}
  .start-screen .force-num {
    width:clamp(36px,5.1vh,46px);
    height:clamp(36px,5.1vh,46px);
    font-size:15px;
    border-radius:11px;
  }
  .start-screen .force-dot {width:10px;height:10px}
  .start-screen .start-actions {gap:clamp(6px,1vh,13px);margin:0 0 clamp(0px,.7vh,8px)}
  .start-screen .primary-button {
    min-width:clamp(220px,22vw,300px);
    min-height:clamp(45px,6.3vh,63px);
    font-size:clamp(16px,2.1vh,19px);
  }
  .start-screen .keyboard-hint {font-size:13px}

  .over-screen {
    justify-content:space-between;
    gap:clamp(3px,.75vh,11px);
    padding:clamp(14px,2.4vh,30px) clamp(20px,4vw,54px);
  }
  .over-screen>.eyebrow {font-size:clamp(12px,1.6vh,15px)}
  .over-screen .result-burst {font-size:clamp(20px,2.8vh,32px);line-height:1;margin:0}
  .over-screen h2 {font-size:clamp(27px,4vh,42px);line-height:1.1;margin:0}
  .over-screen .result-score {gap:12px;margin:0}
  .over-screen .result-score strong {font-size:clamp(44px,7vh,76px);line-height:1}
  .over-screen .result-score span {font-size:clamp(14px,1.9vh,18px)}
  .over-screen .missed-card {
    flex:1 1 0;
    display:grid;
    grid-template-columns:minmax(0,1.05fr) minmax(0,1fr);
    grid-template-rows:auto auto auto minmax(0,1fr);
    align-items:center;
    column-gap:clamp(18px,3vw,42px);
    row-gap:clamp(3px,.6vh,9px);
    width:100%;
    max-width:940px;
    min-height:0;
    margin:0;
    padding:clamp(11px,1.7vh,22px) clamp(15px,2.5vw,32px);
    border-radius:20px;
  }
  .over-screen .missed-label {grid-column:1/-1;font-size:clamp(11px,1.4vh,14px)}
  .over-screen .missed-molecule {
    grid-column:1;
    grid-row:2/5;
    width:100%;
    height:100%;
    min-height:0;
    max-height:none;
  }
  .over-screen .missed-molecule svg {max-width:100%;max-height:100%;width:100%;height:100%}
  .over-screen .missed-card b {
    grid-column:2;grid-row:2;
    font-size:clamp(16px,2.35vh,23px);
    overflow-wrap:anywhere;
  }
  .over-screen .missed-card p {
    grid-column:2;grid-row:3;
    font-size:clamp(15px,2.15vh,21px);
    margin:0;
  }
  .over-screen .missed-card small {
    grid-column:2;grid-row:4;
    display:block;
    align-self:start;
    max-width:none;
    font-size:clamp(12px,1.85vh,17px);
    line-height:1.42;
    overflow-wrap:anywhere;
  }
  .over-screen .save-score {width:100%;max-width:820px;flex:0 0 auto}
  .over-screen .save-heading {font-size:clamp(12px,1.75vh,16px);margin-bottom:6px}
  .over-screen .save-score form {max-width:700px;margin:0 auto}
  .over-screen .save-score input {height:clamp(38px,5.7vh,52px);font-size:clamp(13px,1.9vh,17px)}
  .over-screen .save-note {font-size:clamp(10px,1.45vh,12px);margin-top:4px}
  .over-screen .end-buttons {flex:0 0 auto;gap:12px;margin:0}
  .over-screen .end-buttons .primary-button {min-width:180px;font-size:clamp(15px,2vh,18px)}
}

/* Mid-width screens have a narrower game column alongside the scoreboard.
   Use an enlarged vertically stacked review rather than cramped two-column text. */
@media (min-width:761px) and (max-width:1099px) and (min-height:640px) {
  .over-screen .missed-card {
    grid-template-columns:1fr;
    grid-template-rows:auto minmax(60px,1fr) auto auto auto;
    row-gap:2px;
    padding:9px 13px;
  }
  .over-screen .missed-label,
  .over-screen .missed-molecule,
  .over-screen .missed-card b,
  .over-screen .missed-card p,
  .over-screen .missed-card small {grid-column:1;grid-row:auto}
  .over-screen .missed-card b {font-size:clamp(13px,1.7vh,17px)}
  .over-screen .missed-card p {font-size:clamp(12px,1.7vh,16px)}
  .over-screen .missed-card small {font-size:clamp(11px,1.45vh,13px)}
}

/* Responsive landscape/portrait safeguards: unused height goes to the art,
   but never permit important buttons or the explanatory text to be clipped. */
@media (max-width:760px) and (min-height:680px) {
  .start-screen {justify-content:space-between;gap:clamp(5px,.9vh,12px)}
  .start-screen .hero-art {flex:1 1 auto;min-height:50px;max-height:clamp(95px,21vh,210px)}
  .start-screen .force-guide {max-width:640px}
  .start-screen .force-row {min-height:clamp(57px,7.5vh,73px)}
  .start-screen .start-actions {margin-top:0;margin-bottom:clamp(5px,1.2vh,16px)}
  .over-screen {justify-content:space-between;gap:clamp(3px,.8vh,9px)}
  .over-screen .missed-card {flex:1 1 0;display:flex;flex-direction:column;justify-content:center;width:100%;max-width:650px;min-height:0;margin:0}
  .over-screen .missed-molecule {flex:1 1 0;height:auto;min-height:45px;max-height:none}
  .over-screen .save-score {flex:0 0 auto}
  .over-screen .end-buttons {flex:0 0 auto}
}
@media (max-width:760px) and (max-height:679px) {
  .over-screen .missed-card {flex:0 1 auto}
}

/* Review details stay vertically centred alongside the diagram, not stranded at the top. */
.missed-info {display:flex;flex-direction:column;align-items:center;justify-content:center;min-width:0;gap:clamp(2px,.6vh,9px)}
.missed-info b {display:block}
.missed-info p {margin:0}
@media (min-width:1100px) and (min-height:640px) {
  .over-screen .missed-info {
    grid-column:2;
    grid-row:2/5;
    height:100%;
    align-items:flex-start;
    text-align:left;
    justify-content:center;
    gap:clamp(8px,1.3vh,18px);
  }
  .over-screen .missed-info b,
  .over-screen .missed-info p,
  .over-screen .missed-info small {grid-column:auto;grid-row:auto;align-self:auto}
}
@media (min-width:761px) and (max-width:1099px) and (min-height:640px) {
  .over-screen .missed-info {grid-row:3/6;grid-column:1;gap:clamp(2px,.5vh,7px)}
}
@media (min-width:761px) and (max-height:639px) {
  .start-screen {justify-content:space-between;gap:clamp(3px,.7vh,7px);padding:clamp(9px,1.5vh,14px) clamp(18px,4vw,45px)}
  .start-screen .hero-art {flex:1 1 0;max-height:none;min-height:30px;width:100%;max-width:740px}
  .start-screen .force-guide {width:100%;max-width:760px}
  .start-screen .force-row {min-height:clamp(35px,6vh,46px);padding:clamp(3px,.5vh,7px) 16px}
  .start-screen .force-row b {font-size:clamp(11px,2.2vh,14px)}
  .start-screen .force-row small {font-size:clamp(10px,1.8vh,12px)}
  .start-screen .start-actions {margin:0}
  .over-screen {justify-content:space-between;padding:clamp(8px,1.4vh,15px) clamp(12px,3.3vw,30px)}
  .over-screen .missed-card {flex:1 1 0;width:100%;max-width:820px;display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);grid-template-rows:auto minmax(0,1fr);min-height:0;margin:0;gap:5px 20px}
  .over-screen .missed-label {grid-column:1/-1}
  .over-screen .missed-molecule {grid-column:1;grid-row:2;height:100%;min-height:0;max-height:none}
  .over-screen .missed-info {grid-column:2;grid-row:2;align-items:flex-start;text-align:left;gap:4px}
  .over-screen .missed-card small {display:block;font-size:clamp(10px,1.8vh,13px);line-height:1.25}
  .over-screen .missed-card b {font-size:clamp(12px,2.2vh,17px)}
  .over-screen .missed-card p {font-size:clamp(11px,2vh,16px)}
  .over-screen .save-score {max-width:720px;flex:0 0 auto}
  .over-screen .end-buttons {flex:0 0 auto;margin:0}
}
@media (max-width:760px) and (min-height:580px) and (max-height:679px) {
  .start-screen {justify-content:space-between}
  .start-screen .hero-art {flex:1 1 0;min-height:70px;max-height:none}
  .start-screen .start-actions {margin-top:0}
  .over-screen {justify-content:space-between}
  .over-screen .missed-card {flex:1 1 0;min-height:0;display:flex;flex-direction:column;justify-content:center;width:100%;margin:0}
  .over-screen .missed-molecule {height:auto;min-height:45px;flex:1 1 0}
  .over-screen .save-score,.over-screen .end-buttons {flex:0 0 auto}
}

/* Chemisode Games portal integration, v2026.10.27.1 — linked brand uses no extra header space. */
.site-header .brand{text-decoration:none;color:var(--ink)}
.site-header .brand:focus-visible{outline:3px solid #84a7ff;outline-offset:4px;border-radius:12px}
.site-header .brand:hover .brand-name{text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:4px}
