:root{
 --panel-w:clamp(320px,24vw,440px);--bar-h:clamp(84px,9.2vh,104px);--gap:clamp(14px,1.6vw,28px);
 --ink:#eaf3ff;--muted:#9fb6d6;--line:rgba(150,200,255,.22);--glass:rgba(10,24,52,.62);
 --gold:#ffbf4d;--blue:#46b6ff;--red:#ff5a4e;--fs:clamp(15px,1.02vw,19px);
 color-scheme:dark;
}
*{box-sizing:border-box}
html,body{margin:0;height:100%;overflow:hidden;background:#030914;color:var(--ink);font:var(--fs)/1.55 "PingFang SC","Microsoft YaHei","Noto Sans CJK SC",system-ui,sans-serif}
#course{position:fixed;inset:0}
#stage{position:absolute;inset:0;width:100%;height:100%;display:block;outline:none;touch-action:none;cursor:grab}
#stage:active{cursor:grabbing}
#labels{position:absolute;inset:0;pointer-events:none;overflow:hidden}
button{font:inherit;color:inherit;cursor:pointer}
header{position:absolute;left:var(--gap);top:calc(var(--gap)*.8);pointer-events:none;max-width:calc(100vw - var(--panel-w) - 360px)}
.eyebrow{margin:0;color:var(--muted);font-size:.86em;letter-spacing:.08em}
h1{margin:.1em 0 0;font-size:clamp(26px,2.15vw,42px);line-height:1.2;font-weight:700;letter-spacing:.02em;text-shadow:0 2px 18px rgba(0,30,90,.8)}
.subtitle{margin:.25em 0 0;color:#c4d6f0;font-size:1.02em}
.tabs{position:absolute;left:var(--gap);top:calc(var(--gap)*.8 + clamp(98px,10.5vh,132px));display:flex;gap:8px}
.tabs button{display:flex;align-items:center;gap:.45em;min-height:44px;padding:.35em .95em;border-radius:999px;border:1px solid var(--line);background:rgba(8,22,48,.55);backdrop-filter:blur(10px);font-size:.95em;color:#cfe0f7}
.tabs button b{display:inline-grid;place-items:center;width:1.6em;height:1.6em;border-radius:50%;background:rgba(120,170,255,.18);font-size:.9em}
.tabs button[aria-selected=true]{background:linear-gradient(180deg,rgba(60,140,255,.42),rgba(24,80,190,.42));border-color:rgba(130,200,255,.7);color:#fff}
.tabs button[aria-selected=true] b{background:var(--gold);color:#2a1700}
.top-tools{position:absolute;right:var(--gap);top:calc(var(--gap)*.8);display:flex;gap:10px}
.top-tools button{min-height:46px;padding:0 1em;border-radius:12px;border:1px solid var(--line);background:rgba(8,22,48,.6);backdrop-filter:blur(10px);display:flex;align-items:center;gap:.5em}
.top-tools svg{width:1.2em;height:1.2em;fill:none;stroke:currentColor;stroke-width:1.8}
#fullscreen{width:46px;justify-content:center;padding:0;font-size:1.2em}
#panel{position:absolute;right:var(--gap);top:calc(var(--gap)*.8 + 62px);bottom:calc(var(--bar-h) + var(--gap)*1.4);width:var(--panel-w);overflow:auto;padding:clamp(16px,1.3vw,24px);border-radius:18px;border:1px solid var(--line);background:var(--glass);backdrop-filter:blur(16px) saturate(1.2);box-shadow:0 18px 50px rgba(0,0,0,.35);scrollbar-width:thin}
#panel h2{margin:0 0 .4em;font-size:1.22em;line-height:1.3}
#panel h3{margin:1em 0 .35em;font-size:1.05em;color:#d9e8ff}
#panel p{margin:.35em 0;color:#d0def2}
#panel .note{font-size:.84em;color:var(--muted)}
.chip{display:inline-flex;align-items:center;gap:.35em;padding:.1em .6em;border-radius:999px;font-size:.85em;border:1px solid var(--line);background:rgba(255,255,255,.05)}
.dot{display:inline-block;width:.75em;height:.75em;border-radius:50%}
.dot.gold{background:radial-gradient(circle,#ffe2a0,#ff9a1a);box-shadow:0 0 8px #ffb340}
.dot.blue{background:radial-gradient(circle,#bff0ff,#1aa0ff);box-shadow:0 0 8px #3ab0ff}
.dot.green{background:radial-gradient(circle,#c8ffd8,#22c06a);box-shadow:0 0 8px #3ad07a}
.stage-list{display:grid;gap:6px;margin:.6em 0}
.stage-list button{display:grid;grid-template-columns:2em 1fr;align-items:center;text-align:left;min-height:44px;padding:.3em .6em;border-radius:10px;border:1px solid transparent;background:rgba(255,255,255,.04);color:#c7d7ee}
.stage-list button i{font-style:normal;display:grid;place-items:center;width:1.6em;height:1.6em;border-radius:50%;background:rgba(120,170,255,.16);font-size:.85em}
.stage-list button.active{border-color:rgba(255,191,77,.6);background:rgba(255,180,60,.12);color:#fff}
.stage-list button.active i{background:var(--gold);color:#2a1700}
.stage-list button.done i{background:rgba(255,191,77,.35)}
.callout{margin-top:.7em;padding:.75em .9em;border-radius:12px;background:rgba(255,255,255,.05);border-left:3px solid var(--gold)}
.callout.blue{border-left-color:var(--blue)}
.callout.red{border-left-color:var(--red)}
.pair-bars{display:grid;gap:.5em;margin:.6em 0}
.pair-bars div{display:grid;grid-template-columns:7.2em 1fr;align-items:center;gap:.6em;font-size:.88em;color:#c7d7ee}
.pair-bars span{height:.62em;border-radius:99px;background:rgba(255,255,255,.08);overflow:hidden}
.pair-bars span i{display:block;height:100%;border-radius:99px;width:0}
.pick-list{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin:.5em 0}
.pick-list button{min-height:52px;border-radius:12px;border:1px solid var(--line);background:rgba(255,255,255,.05);padding:.3em .5em;text-align:left;line-height:1.3}
.pick-list button small{display:block;color:var(--muted);font-size:.78em}
.pick-list button.active{border-color:var(--gold);background:rgba(255,180,60,.13)}
.pick-list.three{grid-template-columns:1fr 1fr 1fr}
table.vals{width:100%;border-collapse:collapse;font-size:.86em;margin:.4em 0}
table.vals td,table.vals th{padding:.3em .4em;border-bottom:1px solid rgba(150,200,255,.14);text-align:left}
table.vals th{color:var(--muted);font-weight:500}
#controls{position:absolute;left:var(--gap);right:calc(var(--panel-w) + var(--gap)*2);bottom:calc(var(--gap)*.8);min-height:var(--bar-h);display:flex;align-items:center;gap:clamp(8px,.8vw,14px);padding:.6em 1em;border-radius:18px;border:1px solid var(--line);background:var(--glass);backdrop-filter:blur(16px);flex-wrap:wrap}
#controls .group{display:flex;align-items:center;gap:6px}
#controls .sep{width:1px;align-self:stretch;margin:.4em .2em;background:var(--line)}
#controls button{min-height:46px;padding:0 .95em;border-radius:12px;border:1px solid var(--line);background:rgba(255,255,255,.06);white-space:nowrap}
#controls button[aria-pressed=true]{background:rgba(70,160,255,.3);border-color:rgba(130,200,255,.7)}
#controls button.primary{background:linear-gradient(180deg,#ffcf6a,#f59a1e);color:#2a1700;border-color:transparent;font-weight:700;min-width:5.4em}
#controls label{display:flex;align-items:center;gap:.5em;white-space:nowrap;color:#c7d7ee}
#controls input[type=range]{accent-color:var(--gold);width:clamp(120px,14vw,300px);height:30px}
#controls .grow{flex:1;min-width:180px}
#controls .grow input{width:100%}
#controls output{min-width:3.2em;font-variant-numeric:tabular-nums;color:#fff}
.hint{position:absolute;left:var(--gap);bottom:calc(var(--bar-h) + var(--gap)*1.4);margin:0;font-size:.8em;color:rgba(190,210,240,.65);pointer-events:none}
.atom-label{position:absolute;left:0;top:0;padding:.08em .5em;border-radius:8px;font-size:clamp(14px,1vw,19px);font-weight:700;white-space:nowrap;color:#fff;text-shadow:0 1px 6px #000,0 0 2px #000;will-change:transform}
.atom-label.tag{font-weight:600;font-size:clamp(13px,.92vw,17px);background:rgba(6,18,40,.72);border:1px solid var(--line)}
.atom-label.gold{color:#ffd88a;border-color:rgba(255,191,77,.6)}
.atom-label.blue{color:#9fdcff;border-color:rgba(100,190,255,.6)}
.atom-label.green{color:#9ff0bd;border-color:rgba(80,210,130,.6)}
.atom-label.num{display:grid;place-items:center;width:1.9em;height:1.9em;padding:0;border-radius:50%;background:rgba(255,191,77,.94);color:#2a1700;text-shadow:none;font-size:clamp(16px,1.15vw,22px);box-shadow:0 0 0 3px rgba(0,0,0,.35),0 0 18px rgba(255,180,60,.6);pointer-events:auto;cursor:pointer}
.atom-label.num.weak{background:rgba(150,200,255,.94)}
.atom-label.num.active{outline:3px solid #fff}
.atom-label.charge{font-size:clamp(16px,1.15vw,22px)}
.colorbar{margin:.5em 0 .2em}
.colorbar .bar{height:16px;border-radius:6px;background:linear-gradient(90deg,#d7261e,#f08a5d 25%,#fbf6f2 50%,#6fa6e6 75%,#1f4fd1);border:1px solid rgba(255,255,255,.25)}
.colorbar .ticks{display:flex;justify-content:space-between;font-size:.8em;color:#c7d7ee;font-variant-numeric:tabular-nums;margin-top:.15em}
.colorbar .means{display:flex;justify-content:space-between;font-size:.84em;margin-top:.1em}
.colorbar .means span:first-child{color:#ff8a7a}.colorbar .means span:last-child{color:#8fbaff}
dialog{max-width:min(860px,88vw);max-height:84vh;padding:0;border-radius:18px;border:1px solid var(--line);background:rgba(8,20,44,.96);color:var(--ink);box-shadow:0 30px 80px rgba(0,0,0,.6)}
dialog::backdrop{background:rgba(0,6,18,.6);backdrop-filter:blur(3px)}
.dialog-head{display:flex;justify-content:space-between;align-items:center;padding:1em 1.4em .4em}
.dialog-head h2{margin:0;font-size:1.3em}
.dialog-head button{width:44px;height:44px;border-radius:50%;border:1px solid var(--line);background:transparent;font-size:1.4em}
#knowledge-body{padding:0 1.4em 1.4em;overflow:auto;max-height:calc(84vh - 80px)}
#knowledge-body h3{margin:1em 0 .3em;color:var(--gold)}
#knowledge-body p,#knowledge-body li{color:#d0def2}
#failure{position:absolute;inset:40% 20% auto;padding:1em;border-radius:12px;background:#401010;text-align:center}
[hidden]{display:none!important}
/* 模块四/六新增：关键数字卡片、选项列表副标题、拖动提示 */
.kcards{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin:.6em 0}
.kcards.two{grid-template-columns:1fr 1fr}
.kcards div{padding:.45em .55em;border-radius:12px;border:1px solid var(--line);background:rgba(255,255,255,.06);line-height:1.2}
.kcards small{display:block;color:var(--muted);font-size:.74em}
.kcards b{display:block;font-size:1.45em;font-variant-numeric:tabular-nums;color:#fff;margin-top:.15em}
.kcards i{font-style:normal;font-size:.72em;color:var(--muted)}
.stage-list.opts button{min-height:50px;line-height:1.25}
.stage-list.opts button small{display:block;color:var(--muted);font-size:.78em}
.stage-list.opts button.active small{color:#ffe1a6}
p.lead{margin:.2em 0 .5em;font-size:.92em}
.atom-label.tag.drag{border-style:dashed;color:#ffe1a6;font-weight:500}
.atom-label.tag.drag.on{border-color:rgba(255,195,90,.9);background:rgba(90,52,0,.72)}
@media (max-aspect-ratio:3/2){
 :root{--panel-w:clamp(300px,30vw,400px);--fs:clamp(14px,1.25vw,18px)}
 header{max-width:calc(100vw - var(--panel-w) - 120px)}
 .tabs{top:auto;bottom:calc(var(--bar-h) + var(--gap)*1.4 + 2em);flex-direction:column;align-items:flex-start}
 .tabs{display:grid;grid-template-columns:repeat(2,auto);gap:4px 6px;min-height:148px;align-content:end;pointer-events:none}
 .tabs button{pointer-events:auto}
 .tabs button{min-height:36px;padding:.2em .8em .2em .45em;font-size:.86em}
 #controls{right:var(--gap)}
}
@media (prefers-reduced-motion:reduce){*{transition:none!important}}
