:root{color-scheme:dark;--vh:1vh;--vw:1vw;--bg:#090f17;--panel:#101923;--line:#24313d;--text:#e7edf0;--muted:#93a4b3;--accent:#e7b86a;--cyan:#64cadb;--rail:192px}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--text);font-family:"Microsoft YaHei","PingFang SC",system-ui,sans-serif;font-size:14px;line-height:1.65}button,input,select{font:inherit}button,a,input,select{touch-action:manipulation}button{cursor:pointer;color:inherit}button:disabled{cursor:wait;opacity:.45}a{color:var(--accent);text-decoration:none}a:hover{text-decoration:underline}button{border:0;background:none}button:focus-visible,a:focus-visible,input:focus-visible,select:focus-visible,summary:focus-visible{outline:2px solid var(--accent);outline-offset:4px}.rail{position:fixed;left:0;top:0;bottom:0;width:var(--rail);padding:34px 19px 24px;background:#0c131c;border-right:1px solid var(--line);display:flex;flex-direction:column;z-index:5}.brand{display:flex;gap:12px;align-items:center;color:var(--text);font-size:26px;font-weight:700;letter-spacing:3px;padding:0 12px;margin-bottom:52px}.brand:hover{text-decoration:none}.brandmark{color:var(--accent);font-size:38px;font-weight:400;line-height:1}.brand small{display:block;font-size:9px;letter-spacing:3px;color:var(--muted);font-weight:400}.rail nav{display:grid;gap:8px}.nav{padding:13px 12px;display:flex;gap:12px;align-items:center;text-align:left;color:#94a2b1;border:1px solid transparent;border-radius:4px}.nav span{font-size:20px}.nav:hover{color:var(--text);background:#15202b}.nav.active{background:#1e2228;border-color:#5d4f35;color:var(--accent)}.rail-bottom{margin-top:auto;padding:10px 12px;color:#a3b1bd;font-size:11px}.rail-bottom>span{float:right;letter-spacing:2px}.rail-bottom p{color:#5e7284;line-height:1.8;margin-top:18px}.status-dot{display:inline-block;background:var(--cyan);width:5px;height:5px;border-radius:50%;box-shadow:0 0 8px #64cadb66;margin-right:8px;vertical-align:middle}main{margin-left:var(--rail);padding:0 36px;max-width:2200px}.topbar{height:72px;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--line);color:var(--muted);font-size:12px}.topbar b{margin:0 16px;color:#40515f;font-weight:400}.topbar>div{display:flex;align-items:center;gap:16px}.pill{border:1px solid var(--line);padding:5px 12px;border-radius:20px;font-size:10px;letter-spacing:1px}.iconbtn{width:28px;height:28px;border:1px solid #374858;border-radius:50%;color:var(--muted)}.page{display:none}.page.active{display:block}.titlebar{display:flex;justify-content:space-between;align-items:center;padding:34px 0 26px}.eyebrow{font-size:9px;font-weight:600;letter-spacing:2.4px;color:var(--accent);margin-bottom:7px}h1,h2,p{margin-top:0}h1{font-family:"Bahnschrift",system-ui,sans-serif;font-size:46px;letter-spacing:1px;margin-bottom:7px;line-height:1.2;font-weight:600}h1 span{font-family:"Microsoft YaHei",sans-serif;font-size:18px;color:var(--muted);font-weight:400;margin-left:18px;letter-spacing:1px}.titlebar p{color:var(--muted);font-size:12px;margin:0}h2{font-size:20px;font-weight:500;letter-spacing:.5px;line-height:1.5;margin-bottom:10px}.outline-tag{font-size:10px;border-left:2px solid var(--accent);padding:3px 0 3px 10px;letter-spacing:1px;color:var(--muted)}.hangar-layout{display:grid;grid-template-columns:minmax(0,1fr) 294px;min-height:480px;border:1px solid var(--line);border-radius:6px;overflow:hidden}.viewer-shell{position:relative;min-width:0;min-height:500px;background:radial-gradient(ellipse at 50% 56%,#253d52 0%,#111d2b 46%,#090f19 100%);overflow:hidden}#viewer{position:absolute;inset:0}#viewer canvas{display:block;width:100%;height:100%;outline:0}.viewer-top{position:absolute;top:20px;left:24px;right:24px;display:flex;align-items:center;justify-content:space-between;font-size:10px;color:#a3b4c0;letter-spacing:1px;pointer-events:none}.viewer-top button{pointer-events:auto}.viewer-scale{position:absolute;left:26px;bottom:100px;pointer-events:none}.viewer-scale>span{font-family:Bahnschrift,monospace;color:#91a6b6;font-size:26px;letter-spacing:5px;font-weight:300}.viewer-scale>div{font-size:9px;letter-spacing:2px;color:#8196a9}.viewer-scale small{font-size:9px;color:#627d92}.scale-line{width:115px;height:6px;border-bottom:1px solid #55768d;margin:10px 0;border-left:1px solid #55768d;border-right:1px solid #55768d}.view-presets{position:absolute;bottom:45px;left:24px;display:flex;gap:4px;padding:4px;border:1px solid #304556;background:#0b1521cb;border-radius:4px}.view-presets button{font-size:11px;padding:6px 13px;color:#98adbd;border-radius:2px}.view-presets button:hover,.view-presets .selected{background:#2b3843;color:var(--accent)}.viewer-hint{position:absolute;bottom:18px;left:28px;color:#607b90;font-size:9px;letter-spacing:1px}.viewer-hint b{margin:0 7px}.loadstate{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:14px;background:#101c28d9;color:#a8bece;z-index:3}.loadstate p{font-size:11px;color:var(--muted);margin:0}.loader{width:40px;height:40px;border:1px solid #31424e;border-top-color:var(--accent);border-radius:50%;animation:spin 1s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.ship-controls{padding:24px;background:#101922;border-left:1px solid var(--line)}.section-label{display:flex;justify-content:space-between;font-size:9px;letter-spacing:1px;color:#627a8d;margin-bottom:25px}.live-label{color:var(--cyan)}.ship-controls h2{font-size:25px}.muted{color:var(--muted);font-size:12px}.primary{background:var(--accent);color:#1e2021;width:100%;padding:12px 17px;text-align:left;border-radius:3px;font-size:13px;font-weight:600;display:flex;justify-content:space-between;align-items:center;transition:background .15s}.primary:hover{background:#f0cc91}.primary span{font-size:19px}.sliderlabel{margin-top:21px;display:flex;justify-content:space-between;font-size:11px;color:var(--muted)}output{font-family:Bahnschrift,monospace;color:var(--text)}input[type=range]{width:100%;height:22px;accent-color:var(--accent);cursor:pointer;margin:8px 0 10px}.switchrow{display:flex;align-items:center;justify-content:space-between;font-size:11px;color:#b1bfc9;margin:13px 0}.switch{width:30px;height:16px;background:#253542;border:1px solid #3a4a56;border-radius:16px;padding:2px}.switch i{display:block;width:10px;height:10px;border-radius:50%;background:#8396a4;transition:transform .2s}.switch[aria-checked=true]{background:#806134;border-color:var(--accent)}.switch[aria-checked=true] i{transform:translateX(13px);background:#f6dbb1}hr{border:0;border-top:1px solid var(--line);margin:20px 0}.detail-row{display:flex;justify-content:space-between;font-size:10px;margin:9px 0;gap:10px}.detail-row span{color:#6f8597}.detail-row b{font-weight:400;color:#acbbc7;text-align:right}.fineprint{font-size:10px;color:#7b909f;line-height:1.8;margin:14px 0}.textbutton{padding:0;font-size:11px;color:var(--accent)}.textbutton:hover{text-decoration:underline}.research{margin-top:24px;border:1px solid var(--line);border-radius:6px;background:linear-gradient(120deg,#121b25,#0e1720);padding:26px}.research-heading{display:flex;justify-content:space-between;align-items:center;gap:20px}.research-heading h2{font-size:23px;margin:0 0 6px}.research-heading p{color:var(--muted);font-size:11px;margin:0}.warning-tag{font-size:9px;color:#c8a56c;border:1px solid #51412d;padding:6px 9px;border-radius:2px}.research-grid{display:grid;grid-template-columns:310px minmax(0,1fr);gap:34px;margin-top:28px}.point-input>label:first-child{display:flex;justify-content:space-between;font-size:11px;color:var(--muted)}#points-value{font-size:20px;color:var(--accent)}.range-labels{display:flex;justify-content:space-between;color:#607787;font-size:9px}.checkbox{display:flex;gap:8px;align-items:center;font-size:11px;margin-top:20px}.checkbox input{accent-color:var(--accent)}.research-result{border-left:1px solid var(--line);padding-left:30px;display:flex;flex-direction:column;justify-content:center}.metrics{display:grid;grid-template-columns:repeat(3,1fr);gap:18px}.metric strong{font-family:Bahnschrift,system-ui,sans-serif;font-size:34px;font-weight:400;color:#dce8ef;line-height:1.3;display:block}.metric:first-child strong{color:var(--accent)}.metric small{color:#7f96a7;font-size:10px}.research-result>p{font-size:11px;color:#89a1b2;margin:20px 0 0}.research-details{font-size:10px;color:#7b909f;border-top:1px solid var(--line);margin-top:18px;padding-top:12px}.research-details summary{cursor:pointer}.research-details p{margin:12px 0}.research-details a{margin-right:15px}.ghost{border:1px solid #3a4a57;border-radius:3px;padding:8px 13px;color:#b8c5ce;background:#17233060}.ghost:hover{border-color:#a17f48;color:var(--accent)}.small{font-size:10px;padding:6px 12px}.notice{padding:18px 22px;background:#1e1d18;border:1px solid #5e4b2e;border-radius:4px;margin-bottom:24px}.notice strong{color:var(--accent);font-size:13px;font-weight:500}.notice p{color:#abaca1;font-size:11px;margin:7px 0 0}.fleet-layout{display:grid;grid-template-columns:minmax(0,1fr) 300px;gap:20px;align-items:start}.panel{border:1px solid var(--line);border-radius:5px;background:var(--panel);padding:24px}.panel-heading{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-bottom:14px}.panel-heading h2{margin:0;font-size:18px}.panel-heading>div{display:flex;gap:6px}.blueprint{background:#0d151e;border:1px solid #263745;border-radius:4px;padding:16px;margin:18px 0}.blueprint-head{display:flex;align-items:center;gap:12px;margin-bottom:12px}.blueprint-head input{flex:1;min-width:0}.remove{color:#748896;font-size:17px;padding:0 3px}.remove:hover{color:#ee9d96}.fields{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}.field{display:flex;flex-direction:column;gap:7px;font-size:10px;color:#8c9faf;margin-bottom:15px}input[type=text],input[type=number],select{border:1px solid #2c3e4c;background:#111f2a;color:var(--text);padding:8px 9px;width:100%;border-radius:3px;font-size:12px;min-width:0}input::placeholder{color:#4e687b;font-size:11px}.build{border-top:1px solid var(--line);padding-top:13px;margin-top:4px}.build-head{display:flex;gap:10px;align-items:center;margin-bottom:12px}.build-head input{flex:1}.build .field{margin-bottom:9px}.build .fields{grid-template-columns:repeat(3,1fr)}.build-label{font-size:10px;color:var(--accent);white-space:nowrap}.dashed{border:1px dashed #405465;width:100%;padding:12px;color:#a0b3c1;border-radius:3px;font-size:12px}.dashed:hover{border-color:var(--accent);color:var(--accent)}.add-build{font-size:10px;color:var(--cyan);padding:8px 0 0}.savehint{color:#637d90;font-size:10px;margin:15px 0 8px}.danger{color:#a87d79}.calculation{position:sticky;top:20px}.calculation h2{font-size:18px;margin-bottom:20px}.calculation .primary{margin:20px 0}.empty-state{text-align:center;padding:30px 8px;color:#6d8596;font-size:12px;border-top:1px solid var(--line)}.empty-state small{font-size:10px}.result-card{border-top:1px solid var(--line);padding-top:17px}.result-card>strong{color:var(--accent);font-size:24px;font-family:Bahnschrift,sans-serif}.result-card p{color:#92a7b6;font-size:10px}.result-item{border-top:1px solid #263441;padding:11px 0}.result-item h3{font-size:12px;font-weight:500;margin:0 0 5px}.result-item p{margin:0}.result-error{border:1px solid #724641;background:#2c1c1c;border-radius:3px;color:#e3a9a1;padding:13px;font-size:11px;max-height:300px;overflow:auto}.source-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:20px}.source-grid .panel{padding:28px}.source-number{display:block;color:#4e677b;font-family:Bahnschrift,monospace;font-size:30px;margin-bottom:12px}.source-grid p,.source-grid li{color:#99aebb;font-size:12px;line-height:1.9}.source-grid a{font-size:11px}.source-alert{padding:12px;border-left:2px solid #af884e;background:#211e18;margin-top:18px}.source-grid ul{padding-left:18px}.source-grid li{margin-bottom:7px}footer{display:flex;justify-content:space-between;gap:20px;color:#415b6e;border-top:1px solid var(--line);padding:22px 0;margin-top:34px;font-size:9px;letter-spacing:1px}footer b{margin:0 8px}dialog{max-width:450px;border:1px solid #425666;border-radius:6px;background:#13202c;color:var(--text);padding:30px;line-height:1.9}dialog::backdrop{background:#0009;backdrop-filter:blur(3px)}dialog p{font-size:13px;color:var(--muted)}.close{position:absolute;right:12px;top:8px;color:#9db0bd;font-size:25px}.toast{position:fixed;bottom:24px;left:50%;transform:translateX(-50%);background:#293947;border:1px solid #486272;color:var(--text);padding:12px 20px;border-radius:4px;font-size:12px;display:none;z-index:20}.toast.show{display:block}@media(min-width:1700px){main{padding:0 50px}.viewer-shell{min-height:600px}.hangar-layout{grid-template-columns:minmax(0,1fr) 320px}.ship-controls{padding:30px}.titlebar{padding:40px 0 30px}}@media(max-width:1200px){html:not(.land):root{--rail:162px}html:not(.land) .rail{padding-left:13px;padding-right:13px}html:not(.land) .brand{font-size:23px;padding-left:6px}html:not(.land) .nav{font-size:12px;gap:9px}html:not(.land) .hangar-layout{grid-template-columns:minmax(0,1fr) 255px}html:not(.land) .ship-controls{padding:20px}html:not(.land) main{padding:0 24px}html:not(.land) .viewer-shell{min-height:480px}html:not(.land) .research-grid{grid-template-columns:240px 1fr;gap:22px}html:not(.land) .research-result{padding-left:22px}html:not(.land) .metric strong{font-size:27px}html:not(.land) .fleet-layout{grid-template-columns:minmax(0,1fr) 260px}html:not(.land) .panel{padding:18px}html:not(.land) .fields{gap:8px}}@media(max-width:900px){html:not(.land):root{--rail:72px}html:not(.land) .rail{padding:24px 9px}html:not(.land) .brand{padding:0;justify-content:center;margin-bottom:35px}html:not(.land) .brand>span:last-child{display:none}html:not(.land) .nav{font-size:0;padding:10px;justify-content:center}html:not(.land) .nav span{font-size:23px}html:not(.land) .rail-bottom{padding:0;font-size:0}html:not(.land) .rail-bottom span, html:not(.land) .rail-bottom p{display:none}html:not(.land) .rail-bottom .status-dot{margin:0 22px}html:not(.land) .hangar-layout{grid-template-columns:1fr}html:not(.land) .ship-controls{display:grid;grid-template-columns:1fr 1fr;column-gap:25px;border-left:0;border-top:1px solid var(--line)}html:not(.land) .ship-controls .section-label, html:not(.land) .ship-controls h2, html:not(.land) .ship-controls>.muted{grid-column:1}html:not(.land) .ship-controls .section-label{margin-bottom:12px}html:not(.land) .ship-controls h2{font-size:22px}html:not(.land) .ship-controls>.primary{grid-column:2;grid-row:2}html:not(.land) .ship-controls .sliderlabel{grid-column:2;grid-row:3;margin:0}html:not(.land) .ship-controls>input{grid-column:2;grid-row:4}html:not(.land) .ship-controls>.switchrow{margin:7px 0}html:not(.land) .ship-controls hr{grid-column:1/-1;margin:10px 0}html:not(.land) .ship-controls .fineprint{grid-column:1/-1;margin:10px 0}html:not(.land) .ship-controls .textbutton{grid-column:1/-1;text-align:left}html:not(.land) .research-heading{display:block}html:not(.land) .warning-tag{display:inline-block;margin-top:12px}html:not(.land) .research-grid{grid-template-columns:1fr 1fr}html:not(.land) .fleet-layout{grid-template-columns:1fr}html:not(.land) .calculation{position:static}html:not(.land) .source-grid{grid-template-columns:1fr}html:not(.land) h1{font-size:38px}html:not(.land) h1 span{font-size:14px;margin-left:10px}}@media(max-width:600px){html:not(.land):root{--rail:0px}html:not(.land) .rail{position:sticky;top:0;left:0;right:0;width:auto;height:54px;flex-direction:row;padding:7px 12px;align-items:center;border-right:0;border-bottom:1px solid var(--line);background:#0c131cf0;backdrop-filter:blur(10px)}html:not(.land) .brand{margin:0 14px 0 0;gap:0}html:not(.land) .brandmark{font-size:26px}html:not(.land) .rail nav{display:flex;gap:5px;flex:1}html:not(.land) .nav{font-size:10px;padding:5px 10px;gap:5px;flex:1}html:not(.land) .nav span{font-size:15px}html:not(.land) .rail-bottom{display:none}html:not(.land) main{margin:0;padding:0 16px}html:not(.land) .topbar{height:49px;font-size:10px}html:not(.land) .topbar .pill{display:none}html:not(.land) .topbar b{margin:0 7px}html:not(.land) .titlebar{padding:24px 0 20px}html:not(.land) .titlebar .outline-tag{display:none}html:not(.land) h1{font-size:34px}html:not(.land) h1 span{display:block;font-size:14px;margin:8px 0}html:not(.land) .viewer-shell{min-height:360px}html:not(.land) .viewer-top{left:15px;right:15px;top:15px}html:not(.land) .viewer-scale{left:18px;bottom:96px}html:not(.land) .viewer-scale>span{font-size:18px}html:not(.land) .view-presets{left:13px;bottom:42px}html:not(.land) .view-presets button{font-size:10px;padding:6px 10px}html:not(.land) .viewer-hint{left:16px;font-size:8px}html:not(.land) .ship-controls{padding:18px;column-gap:14px}html:not(.land) .ship-controls .section-label{font-size:8px}html:not(.land) .ship-controls>.muted{font-size:10px}html:not(.land) .ship-controls .primary{font-size:11px;padding:10px}html:not(.land) .detail-row{font-size:9px;flex-direction:column;gap:2px}html:not(.land) .detail-row b{text-align:left}html:not(.land) .research{padding:20px 17px}html:not(.land) .research-heading h2{font-size:20px}html:not(.land) .research-grid{grid-template-columns:1fr;gap:20px;margin-top:20px}html:not(.land) .research-result{border-left:0;border-top:1px solid var(--line);padding:20px 0 0}html:not(.land) .metrics{gap:10px}html:not(.land) .metric strong{font-size:27px}html:not(.land) .field{font-size:9px}html:not(.land) .panel-heading{align-items:flex-start}html:not(.land) .panel-heading h2{font-size:16px}html:not(.land) .panel-heading>div{flex-wrap:wrap}html:not(.land) .blueprint{padding:12px}html:not(.land) .build .fields, html:not(.land) .fields{grid-template-columns:1fr}html:not(.land) .build .fields{grid-template-columns:repeat(3,1fr)}html:not(.land) input[type=number]{padding:8px 6px;font-size:11px}html:not(.land) .source-grid .panel{padding:21px}html:not(.land) footer{font-size:8px;letter-spacing:0}html:not(.land) footer span:last-child{display:none}}@media(prefers-reduced-motion:reduce){*{animation-duration:.01ms!important;transition-duration:.01ms!important}}
.view-presets{max-width:calc(100% - 48px);flex-wrap:wrap}.view-presets button{padding:6px 9px}

/* 舰船预览入口 */
[hidden]{display:none!important}.ship-picker{display:flex;gap:10px;flex-wrap:wrap;margin:0 0 18px}.ship-choice.selected{border-color:#81cfd7;background:#162f37;color:#b9eff3}.view-presets{flex-wrap:wrap}

/* 土星「游戏攻略」大板块：顶部两个子板块 tab（机库介绍 / 游戏总结） */
.ships-tabs{display:flex;gap:6px;padding:26px 0 18px;border-bottom:1px solid var(--line);margin-bottom:20px}
.ships-tab{font-size:14px;padding:9px 20px;color:#94a2b1;border:1px solid transparent;border-radius:4px 4px 0 0;letter-spacing:.5px;border-bottom:2px solid transparent}
.ships-tab:hover{color:var(--text);background:#15202b}
.ships-tab.active{color:var(--accent);border-bottom-color:var(--accent);font-weight:600}
.ships-panel[hidden]{display:none}
/* 游戏总结：左侧分类+条目列表，右侧正文 */
.guides-layout{display:grid;grid-template-columns:minmax(260px,.8fr) minmax(0,1.2fr);gap:24px;align-items:start}
.guides-list{display:flex;flex-direction:column;gap:20px;max-height:calc(108 * var(--vh));overflow:auto}
.guide-cat-head{display:flex;align-items:center;gap:8px;font-size:12px;letter-spacing:1px;color:var(--accent);margin:0 0 8px;text-transform:uppercase}
.guide-cat-ico{font-size:13px}
.guide-cat-desc{font-size:11px;color:#7f95a5;margin:0 0 10px}
.guide-cat-items{display:grid;gap:8px}
.guide-item{background:#14222e;color:#d1dce5;border:1px solid #344755;padding:13px 15px;text-align:left;cursor:pointer;display:flex;flex-direction:column;gap:6px;border-radius:4px;min-width:0}
.guide-item:hover,.guide-item:focus-visible{border-color:#81cfd7}
.guide-item.active{border-color:#81cfd7;background:#162f37}
.guide-item strong{font-size:14px;font-weight:500;color:#dbe7ee}
.guide-item small{font-size:11px;color:#8ba3b4;line-height:1.6}
.guides-detail h2{margin:6px 0 8px;font-size:24px}
.guide-summary{font-size:13px;color:#a4d5d8;line-height:1.8}
.guide-section{margin-top:26px;padding-top:18px;border-top:1px solid #2c3d4b}
.guide-section h4{margin:0 0 12px;font-size:14px;color:#cfe0e8}
.guide-p{margin:0 0 12px;color:#b6c7d3;line-height:1.85}
.guide-bullets{list-style:none;padding:0;margin:0 0 12px}
.guide-bullets li{position:relative;padding-left:18px;color:#a9c0cd;line-height:1.85;margin-bottom:8px}
.guide-bullets li::before{content:'·';position:absolute;left:4px;color:var(--accent)}
.guides-detail .archive-tag{margin-right:6px}
/* 内容图鉴的独立骨架，手机上先选舰船再阅读正文。 */
.archive-layout{display:grid;grid-template-columns:minmax(230px,.7fr) minmax(0,1.3fr);gap:24px;align-items:start}.archive-list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;max-height:calc(105 * var(--vh));overflow:auto}.archive-card{background:#14222e;color:#d1dce5;border:1px solid #344755;padding:16px;text-align:left;cursor:pointer;display:flex;flex-direction:column;gap:10px;min-width:0}.archive-card:hover,.archive-card:focus-visible{border-color:#81cfd7}.archive-card img{width:100%;height:auto;object-fit:contain}.archive-card span,.archive-card small{font-size:12px;color:#a7b7c4}.archive-model-tag{color:#9bdcdd!important}.archive-detail h3{margin-top:30px}.archive-detail li,.archive-detail p{line-height:1.8}.archive-detail li{margin-bottom:8px}.archive-poster{width:100%;height:auto}.archive-verdict{font-size:20px;color:#a4d5d8}.archive-grades{display:flex;flex-wrap:wrap;gap:20px}.archive-grades dd{margin:8px 0;color:#b7e5e6}.archive-tag{font-size:11px;padding:5px 8px;background:#213842;border-radius:4px}.archive-module{border-top:1px solid #344755;padding:14px 0}.archive-module p{margin:6px 0}/* 系列页（2026-10-24）：一个系列一条，型号解说分块 */
.variant-chips{display:flex;gap:4px}
.variant-chips i{font-style:normal;font-size:10px;padding:2px 5px;border:1px solid #344755;border-radius:3px;color:#8ba3b4}
.variant-chips i.on{border-color:#81cfd7;color:#a9e6ec;background:rgba(129,207,215,.12)}
.variant-nav{display:flex;flex-wrap:wrap;gap:8px;margin:14px 0 4px}
.variant-jump{display:flex;align-items:center;gap:7px;background:#14222e;border:1px solid #344755;color:#c9d8e2;font-size:12px;padding:7px 11px;border-radius:4px;cursor:pointer;text-align:left}
.variant-jump:hover{border-color:#81cfd7}
.variant-jump b{font-size:11px;font-weight:500;color:#a9e6ec}
.archive-variant{margin-top:34px;padding-top:22px;border-top:1px solid #2c3d4b}
.variant-head{display:flex;align-items:center;flex-wrap:wrap;gap:10px;margin-bottom:6px}
.variant-head h3{margin:0;font-size:16px;color:#dbe7ee}
.variant-letter{font-size:11px;letter-spacing:1px;padding:4px 8px;border:1px solid #81cfd7;border-radius:3px;color:#a9e6ec;background:rgba(129,207,215,.12)}
.variant-id{font-size:10px;color:#6e8698;margin-left:auto}
.archive-variant h4{margin-top:22px;font-size:13px;color:#cfe0e8}
.series-sub{font-size:12px;color:#7f95a5}
.archive-view-model{margin-top:10px}
.archive-variant .archive-poster{max-width:440px;border-radius:4px}
/* 多型号系列的「系列总述」：基型记录里通常是 a/b/c 一起讲，单独提到最上面一次 */
.series-intro{margin:16px 0 6px;padding:16px 18px;background:#0f1a24;border-left:3px solid #3f5a6b;border-radius:0 4px 4px 0}
.series-intro h4{margin:0 0 10px;font-size:13px;color:#cfe0e8}
.series-intro .variant-raw-p:last-child{margin-bottom:0}
/* traits_raw 回退段落：原文换行保留，读起来不挤成一团 */
.variant-raw-p{margin:0 0 12px;color:#b6c7d3;line-height:1.85}
/* 基型原文上移后留的指路句，避免型号块看起来是空的 */
.variant-moved{margin:10px 0 0;padding:9px 12px;background:#131f29;border-left:2px solid #33495a;border-radius:0 3px 3px 0;font-size:12px;color:#8ea6b7}
.archive-card .warning-tag{align-self:flex-start}/* 精编档案：来自《僭兵诸论》的机制要点 */
.jb-src{font-size:10px;font-weight:400;letter-spacing:1px;color:var(--accent);border:1px solid #51412d;border-radius:2px;padding:2px 7px;margin-left:8px;vertical-align:2px;white-space:nowrap}
.jb-list{padding-left:18px}
.jb-list li{color:#a9c0cd;line-height:1.85;margin-bottom:9px}
.jb-list li::marker{color:var(--accent)}
@media(max-width:900px){html:not(.land) .archive-layout{grid-template-columns:1fr}html:not(.land) .archive-list{max-height:calc(50 * var(--vh))}html:not(.land) .guides-layout{grid-template-columns:1fr}html:not(.land) .guides-list{max-height:calc(50 * var(--vh))}}
/* 首屏缩略图；只有用户点击后才创建 WebGL 场景。 */
/* ⚠️ 海报图 object-fit:contain，比例和容器不一致时两侧会露出底色。
   容器现在比原来宽（侧栏去掉了），露得更多 —— 用透明背景露出 viewer-shell 的渐变，别露一块硬边。 */
.loadstate.model-preview{gap:0;background:transparent;overflow:hidden}.model-poster{width:100%;height:100%;max-height:100%;object-fit:contain}.preview-caption{position:absolute;bottom:9%;display:flex;flex-direction:column;align-items:center;gap:12px;padding:20px;background:#101c28e8;border:1px solid #405665;border-radius:8px}.preview-caption .primary{width:auto;min-width:190px}.preview-caption strong{color:#dce7ef}.model-preview~.viewer-scale{display:none}.model-preview~.view-presets{visibility:hidden}

/* 配队实验室：嵌入《僭兵诸论》撰写团队维护的外部工具 */
.lab-sponsor{display:flex;align-items:center;gap:12px;padding:13px 18px;margin-bottom:20px;background:linear-gradient(90deg,#1d1a12,#131a22);border:1px solid #5d4f35;border-radius:5px;color:#e8cd9a;font-size:13.5px;letter-spacing:.5px}
.lab-sponsor-tag{font-size:10px;letter-spacing:2px;padding:3px 8px;border-radius:2px;background:var(--accent);color:#241d10;font-weight:600;flex:none}
.lab-sponsor-text{flex:1;min-width:0}
.lab-card{display:flex;align-items:center;justify-content:space-between;gap:28px;flex-wrap:wrap;border:1px solid #2f4457;border-radius:6px;background:linear-gradient(120deg,#121b25,#0e1720);padding:30px 32px;transition:border-color .15s,background .15s}
.lab-card:hover{border-color:var(--accent);background:linear-gradient(120deg,#1a2530,#111b26);text-decoration:none}
.lab-card-main{flex:1;min-width:280px}
.lab-card h2{font-size:28px;margin:2px 0 12px;color:#f0f5f8;letter-spacing:1px}
.lab-card p{color:#99aebb;font-size:12.5px;line-height:1.95;margin:0 0 12px;max-width:760px}
.lab-url{font-family:Bahnschrift,monospace;font-size:11px;color:#5f7c92;letter-spacing:1px;border:1px dashed #2f4457;border-radius:3px;padding:4px 9px;display:inline-block}
.lab-card-go{flex:none;display:inline-flex;align-items:center;gap:10px;background:var(--accent);color:#1e2021;padding:15px 26px;border-radius:3px;font-size:14px;font-weight:600;white-space:nowrap}
.lab-card-go b{font-size:17px;font-weight:400}
.lab-card:hover .lab-card-go{background:#f0cc91}
.lab-fallback{text-align:center;color:#6d8596}
@media(max-width:600px){html:not(.land) .lab-card{padding:22px 20px}html:not(.land) .lab-card h2{font-size:23px}html:not(.land) .lab-card-go{width:100%;justify-content:center}}

/* 数据档案：全文文档入口 */
.doc-entry{display:flex;gap:26px;align-items:center;justify-content:space-between;flex-wrap:wrap;border:1px solid #5d4f35;border-radius:6px;background:linear-gradient(120deg,#141c25,#101822);padding:26px 28px;margin-bottom:24px}
.doc-entry-body{flex:1;min-width:280px}
.doc-entry h2{font-size:28px;margin:2px 0 12px;color:#f0f5f8;letter-spacing:1px}
.doc-entry p{color:#99aebb;font-size:12.5px;line-height:1.95;margin:0 0 10px;max-width:820px}
.doc-entry .fineprint{margin:0}
.doc-entry-btn{flex:none;display:inline-flex;align-items:center;gap:10px;background:var(--accent);color:#1e2021;padding:14px 24px;border-radius:3px;font-size:14px;font-weight:600;white-space:nowrap}
.doc-entry-btn:hover{background:#f0cc91;text-decoration:none}
.doc-entry-btn span{font-size:17px}
@media(max-width:600px){html:not(.land) .doc-entry{padding:20px}html:not(.land) .doc-entry-btn{width:100%;justify-content:center}}

/* 意见反馈：匿名提交、无需登录；内容存后端，仅维护者可见。 */
.fb-layout{display:grid;grid-template-columns:minmax(0,1.6fr) minmax(250px,.9fr);gap:22px;align-items:start}
.fb-form{display:flex;flex-direction:column;gap:16px}
.fb-form .section-label{margin-bottom:12px}
.fb-kinds{display:flex;flex-wrap:wrap;gap:9px}
.fb-kind{padding:9px 15px;border:1px solid var(--line);border-radius:3px;background:#0f1a24;color:#9fb0be;font-size:12.5px;transition:border-color .15s,color .15s,background .15s}
.fb-kind:hover{border-color:#3d5265;color:var(--text)}
.fb-kind.selected{border-color:var(--accent);background:#1c1a12;color:var(--accent)}
.fb-form .fb-field{display:block;font-size:11px;letter-spacing:.5px;color:#8fa3b2}
.fb-form textarea,.fb-form input[type=text]{display:block;width:100%;margin-top:7px;padding:11px 13px;background:#0d151e;border:1px solid var(--line);border-radius:3px;color:var(--text);font:inherit;font-size:13px;line-height:1.8;resize:vertical}
.fb-form textarea:focus,.fb-form input[type=text]:focus{outline:none;border-color:#81cfd7}
.fb-req{color:var(--accent);font-size:9px;letter-spacing:1px;margin-left:6px}
.fb-opt{color:#6d8596;font-size:9px;letter-spacing:1px;margin-left:6px}
.fb-counter{text-align:right;font-size:10px;color:#6d8596;margin-top:-8px;font-family:Bahnschrift,monospace}
.fb-hp{position:absolute!important;left:-9999px;width:1px;height:1px;opacity:0;pointer-events:none}
.fb-status{margin:0;font-size:12px;min-height:19px}
.fb-status.fb-ok{color:#7fd8a5}
.fb-status.fb-warn{color:#e2a35f}
.fb-aside{display:grid;gap:22px}
.fb-aside h2{font-size:19px;margin:2px 0 14px;color:#eef4f7;letter-spacing:.5px}
.fb-notes{margin:0;padding-left:17px}
.fb-notes li{color:#a9c0cd;font-size:12.5px;line-height:1.9;margin-bottom:10px}
.fb-notes li::marker{color:var(--accent)}
.fb-notes b{color:#dbe7ee}
.fb-thanks p{margin:0;color:#99aebb;font-size:12.5px;line-height:1.95}
@media(max-width:960px){html:not(.land) .fb-layout{grid-template-columns:1fr}}

/* 移动端顶栏现在是 5 个板块等分：收起图标，否则文字会被挤到换行、末项跑出屏幕。 */
@media(max-width:600px){html:not(.land) .rail nav{gap:4px}html:not(.land) .nav{padding:7px 4px;letter-spacing:0;white-space:nowrap;justify-content:center;text-align:center}html:not(.land) .nav span{display:none}}

/* ===== 机库舰种目录：分类 → 舰船 → 模型 三级导航（2026-10-17 新增） ===== */
.browse-head{display:flex;justify-content:space-between;align-items:center;gap:20px;padding:34px 0 26px}
.browse-head p{color:var(--muted);font-size:12px;margin:0}
.class-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:15px}
.class-card{position:relative;display:flex;flex-direction:column;padding:20px 19px 17px;min-height:172px;text-align:left;border:1px solid var(--line);border-radius:6px;background:linear-gradient(150deg,#121b25,#0e1720);transition:border-color .16s,transform .16s}
.class-card:hover{border-color:#81cfd7;transform:translateY(-2px)}
.class-card.is-empty{opacity:.58}
.class-card.is-empty:hover{opacity:.8}
.class-idx{font-family:Bahnschrift,monospace;font-size:11px;letter-spacing:1.5px;color:#4e677b}
.class-card em{position:absolute;top:21px;right:19px;font-style:normal;font-family:Bahnschrift,system-ui,sans-serif;font-size:9.5px;letter-spacing:2.4px;color:var(--accent)}
.class-card strong{margin:4px 0 3px;font-size:22px;font-weight:600;letter-spacing:1.5px}
.class-tagline{margin:auto 0 13px;font-size:11px;line-height:1.75;color:#7b909f}
.class-progress{display:flex;align-items:center;gap:10px;font-size:10px;color:#7b909f;font-family:Bahnschrift,monospace}
.class-bar{flex:1;height:3px;background:#1c2937;border-radius:2px;overflow:hidden}
.class-bar i{display:block;height:100%;background:#2f4a5a;border-radius:2px}
.class-card[data-ready]:not([data-ready="0"]) .class-bar i{background:linear-gradient(90deg,#6d552c,var(--accent))}
.class-progress b{color:#a8bcc9;font-weight:400}
.class-panel{margin-top:4px}
.class-panel-head{display:flex;align-items:center;gap:18px;margin-bottom:18px;padding-bottom:14px;border-bottom:1px solid var(--line)}
.class-panel-title{display:flex;align-items:baseline;gap:12px;flex-wrap:wrap}
.class-panel-title strong{font-size:20px;letter-spacing:1.5px}
.class-panel-title span{font-size:11px;color:#7b909f}
.ship-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(196px,1fr));gap:13px}
.ship-card{display:flex;flex-direction:column;padding:0;border:1px solid #2c3d4b;border-radius:5px;background:#101c27;overflow:hidden;text-align:left;transition:border-color .15s,transform .15s,opacity .15s}
.ship-thumb{display:flex;align-items:center;justify-content:center;aspect-ratio:16/10;background:radial-gradient(ellipse at 50% 62%,#1b2c3b,#0c151e 72%);overflow:hidden}
.ship-thumb img{width:100%;height:100%;object-fit:contain}
.ship-lock{font-size:10px;letter-spacing:2px;color:#466075}
.ship-meta{display:flex;flex-direction:column;gap:4px;padding:12px 13px 13px}
.ship-meta strong{font-size:14px;font-weight:500;color:#dbe7ee;line-height:1.4}
.ship-meta span{font-size:10px;color:#7f95a5}
.ship-tag{font-size:9.5px;letter-spacing:.5px}
.ship-card.ready:hover{border-color:#81cfd7;transform:translateY(-2px)}
.ship-card.ready .ship-tag{color:var(--cyan)}
.ship-card.locked{border-style:dashed;border-color:#283846;opacity:.62}
.ship-card.locked:hover{border-color:#3f5566;opacity:.82}
.ship-card.locked .ship-tag{color:#61798c}
/* 多型号系列的型号徽标（2026-10-24）：A/B/C 摊开，已建模的点亮 */
.ship-variants{display:flex;align-items:center;gap:4px;margin:2px 0 1px;flex-wrap:wrap}
.ship-variants i{font-style:normal;font-size:9px;line-height:1;padding:3px 5px;border:1px solid #2c3d4b;border-radius:3px;color:#6e8698}
.ship-variants i.on{border-color:#81cfd7;color:#a9e6ec;background:rgba(129,207,215,.12)}
.ship-variants em{font-style:normal;font-size:9px;color:#5d7386;margin-left:2px}
#model-series-link{margin-left:auto;white-space:nowrap}
.model-bar{display:flex;align-items:center;justify-content:space-between;gap:16px;margin:-8px 0 16px}
.model-bar-tag{font-size:10px;letter-spacing:1.5px;color:#5f7a8e}
@media(max-width:1200px){html:not(.land) .class-grid{grid-template-columns:repeat(3,minmax(0,1fr))}}
@media(max-width:900px){html:not(.land) .class-grid{grid-template-columns:repeat(2,minmax(0,1fr))}html:not(.land) .class-card{min-height:156px;padding:17px 16px 14px}html:not(.land) .ship-grid{grid-template-columns:repeat(auto-fill,minmax(170px,1fr))}}
@media(max-width:600px){html:not(.land) .browse-head{padding:24px 0 20px;display:block}html:not(.land) .browse-head .outline-tag{display:none}html:not(.land) .class-grid{gap:10px}html:not(.land) .class-card{min-height:126px;padding:14px 12px 12px}html:not(.land) .class-card strong{font-size:17px;letter-spacing:1px}html:not(.land) .class-card em{position:static;display:block;font-size:8.5px}html:not(.land) .class-tagline{display:none}html:not(.land) .class-panel-head{gap:12px}html:not(.land) .class-panel-title strong{font-size:17px}html:not(.land) .ship-grid{grid-template-columns:repeat(auto-fill,minmax(148px,1fr));gap:10px}html:not(.land) .ship-meta{padding:10px 11px 11px}html:not(.land) .ship-meta strong{font-size:12.5px}html:not(.land) .model-bar{margin:-4px 0 12px}}


/* ───────── 星域导航首页（#home）─────────
   ⚠️ 首页是完全独立的沉浸层：进 #home 时 app.mjs 给 body 加 .solar-on，
   把 rail / topbar / footer 全部隐藏，画布 position:fixed 铺满视口。
   否则侧栏会一直压住星图左侧（做不成「纯粹的太阳系画面」）。
   美学基准：纯黑底 + 等宽字体 + 极细线 + 极小字号 + 大留白，不要卡片不要边框。 */
body.solar-on{overflow:hidden;background:#000}
body.solar-on .rail,body.solar-on .topbar,body.solar-on footer{display:none}
body.solar-on main{margin:0;padding:0;max-width:none}
#page-home{display:none}
#page-home.active{display:block;position:fixed;inset:0;z-index:40;background:#000;margin:0;padding:0}
#solar-stage{position:absolute;inset:0;overflow:hidden;background:#000;color:#dfe6ec;
  font-family:"IBM Plex Mono","Cascadia Mono",Consolas,"SFMono-Regular",monospace}
#solar-canvas{display:block;width:100%;height:100%;cursor:grab;touch-action:none}

/* 镜头暗角：一圈几乎察觉不到的黑边，但画面会立刻从「渲染图」变成「电影画面」。
   它同时把竖窗口里上下那两大块留白变「有意为之」，而不是「没铺满」。
   ⚠️ 必须是 radial-gradient 而不是 inset box-shadow：后者在超宽屏上会糊住整条边。 */
#solar-stage::after{content:"";position:absolute;inset:0;pointer-events:none;z-index:1;
  background:radial-gradient(ellipse 74% 68% at 44% 48%,transparent 34%,rgba(0,0,0,.34) 74%,rgba(0,0,0,.66) 100%)}
#solar-canvas:active{cursor:grabbing}

/* 天体标注：纯文字浮在空间里，没有底色和边框（图谱感的关键） */
#solar-labels{position:absolute;inset:0;pointer-events:none;z-index:2}
.solar-label{position:absolute;left:0;top:0;display:block;text-align:center;white-space:nowrap;pointer-events:auto;
  will-change:transform;transition:opacity .25s}
.solar-label b{display:block;margin-top:3px;font-size:8px;font-weight:500;letter-spacing:2.4px;color:#566471;text-transform:uppercase}
.solar-label em{display:block;font-style:normal;font-size:13px;letter-spacing:1.6px;color:#e6edf3;text-shadow:0 0 12px #7fa8c820}
.solar-label i{display:block;margin-top:3px;font-style:normal;font-size:10px;letter-spacing:1.4px;color:#8fb0c4}
.solar-label:hover em,.solar-label:focus-visible em{color:#fff;text-shadow:0 0 14px #e7b86a80}
.solar-label:hover i{color:#d8b26a}
.solar-label:hover b{color:#7f909e}
.solar-label:hover{text-decoration:none}
.solar-label.off em{color:#5c6a77}
.solar-label.off i,.solar-label.off b{color:#3d4954}
.solar-label.dim{opacity:.18}

/* 检视星门时：#solar-labels / #solar-probes 统一压到 6%。
   ⚠️ 不能逐条写 opacity —— frame() 每帧都会给每个标签写 inline opacity，
      逐条加类会被 inline 覆盖；压在容器上才有效。 */
#solar-stage.inspecting #solar-labels,
#solar-stage.inspecting #solar-probes{opacity:.06}
/* 左下角舱段索引 / 右下角统计在检视时也被档案面板压住，一起退场 */
#solar-stage.inspecting .solar-index,
#solar-stage.inspecting .solar-stat{opacity:.07;pointer-events:none}
#solar-labels,#solar-probes{transition:opacity .35s ease}
.solar-index,.solar-stat{transition:opacity .35s ease}

/* 星门 L001A：标注比行星更「仪器」—— 编号走等宽字，第三行不是栏目名而是动作。
   :before 那根 5px 的竖线是给悬浮物指的「引线」，行星标签都不需要它。 */
.solar-label.gate b{font-family:"IBM Plex Mono","Cascadia Mono",Consolas,monospace;
  font-size:8.5px;letter-spacing:3.4px;color:#e2c894;margin-top:0}
.solar-label.gate em{font-size:11px;color:#9c8f79;letter-spacing:2px;text-shadow:none}
.solar-label.gate i{font-size:8.5px;color:#6a6047;letter-spacing:1.6px}
.solar-label.gate::before{content:"";position:absolute;left:50%;top:-8px;width:1px;height:5px;
  background:linear-gradient(#e7b86a00,#e7b86a99)}
.solar-label.gate:hover b,.solar-label.gate:hover em{color:#ffd9a0}

/* 星门的结构档案：点它不跳页，弹出这一块。
   位置让开左下角那 8 行舱段索引，宽度按「四行数据 + 一段话」定 306px。 */
#gate-info{display:block;position:absolute;left:32px;bottom:172px;width:306px;z-index:7;
  padding:15px 18px 17px;border:1px solid #22303d;border-left:2px solid #e7b86a;border-radius:3px;
  background:rgba(8,13,19,.93);backdrop-filter:blur(7px);
  animation:giIn .42s cubic-bezier(.2,.75,.2,1) both}
#gate-info[hidden]{display:none}
@keyframes giIn{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}
#gate-info header{display:flex;align-items:center;gap:9px;margin-bottom:11px}
#gate-info header b{font-family:"IBM Plex Mono","Cascadia Mono",Consolas,monospace;
  font-size:10px;letter-spacing:3px;color:#e7b86a}
#gate-info header span{font-family:"IBM Plex Mono","Cascadia Mono",Consolas,monospace;
  font-size:8px;letter-spacing:2.2px;color:#4f6172}
#gate-info header button{margin-left:auto;width:20px;height:20px;line-height:1;font-size:14px;
  color:#5d7284;border:1px solid #24333f;border-radius:2px;background:none}
#gate-info header button:hover{color:#e7b86a;border-color:#3c4f60}
#gate-info h3{margin:0 0 8px;font-size:15px;font-weight:600;letter-spacing:.5px;color:#eaf2f8}
#gate-info p{margin:0 0 13px;font-size:11.5px;line-height:1.95;color:#8ea3b4}
#gate-info dl{margin:0;display:grid;grid-template-columns:1fr 1fr;gap:9px 14px;
  border-top:1px solid #17232f;padding-top:12px}
#gate-info dt{font-size:8.5px;letter-spacing:2px;color:#53697b}
#gate-info dd{margin:3px 0 0;font-family:"IBM Plex Mono","Cascadia Mono",Consolas,monospace;
  font-size:11px;letter-spacing:.6px;color:#c3d4e0}
#gate-info .gi-link{display:inline-flex;align-items:center;gap:8px;margin-top:15px;
  font-size:11px;letter-spacing:1.6px;color:#e7b86a;text-decoration:none}
#gate-info .gi-link span{transition:transform .2s}
#gate-info .gi-link:hover span{transform:translateX(3px)}
/* 主入口：穿过星门 → 鸣谢名单与作者有话说（板块在 #credits） */
#gate-info .gi-go{margin-top:16px;padding:9px 14px;border:1px solid #6f5730;border-radius:3px;
  background:linear-gradient(140deg,#2a2113,#1a1710);font-size:11.5px;letter-spacing:1.2px;
  transition:border-color .15s,background .15s}
#gate-info .gi-go:hover{border-color:var(--accent);background:linear-gradient(140deg,#332713,#1e1a12);
  text-decoration:none}
/* 次级：地球档案里讲这道门的来历 */
#gate-info .gi-alt{display:flex;margin-top:11px;font-size:10.5px;letter-spacing:1.2px;color:#7f95a6}
#gate-info .gi-alt:hover{color:#c3d1db;text-decoration:none}

/* 探测器标注：10 艘已建模舰船挂在轨迹末端。比行星标注更小更淡——
   它们是背景层信息，不能抢天体的视觉重量。 */
#solar-probes{position:absolute;inset:0;pointer-events:none;z-index:2}
.solar-probe{position:absolute;left:0;top:0;display:block;white-space:nowrap;pointer-events:auto;
  text-decoration:none;will-change:transform;transition:opacity .25s}
.solar-probe u{text-decoration:none;font-size:7.5px;letter-spacing:1.8px;color:#6d8090;margin-right:7px}
.solar-probe b{font-weight:400;font-size:10px;letter-spacing:1.6px;color:#a3b8c7}
.solar-probe::before{content:"";position:absolute;left:-9px;top:50%;width:5px;height:1px;background:#3c4e5c}
.solar-probe:hover u{color:#e7b86a}
.solar-probe:hover b{color:#fff;text-shadow:0 0 12px #e7b86a70}
.solar-probe:hover::before{background:#e7b86a;width:9px}

/* HUD：只有角标，绝不加面板 */
#solar-hud{position:absolute;inset:0;pointer-events:none;z-index:3}
#solar-hud>*{pointer-events:auto}
.solar-brand{position:absolute;left:32px;top:26px;display:flex;align-items:baseline;gap:12px;letter-spacing:3px}
.solar-brand b{font-family:"Bahnschrift",system-ui,sans-serif;font-size:15px;font-weight:600;letter-spacing:6px;color:#eef3f7}
.solar-brand span{font-size:9px;letter-spacing:4px;color:#5e7180}

/* 左下：板块索引，照抄参考站的 01/02/03 加载清单样式 */
.solar-index{position:absolute;left:32px;bottom:28px;display:grid;gap:6px}
.solar-index a{display:flex;gap:14px;align-items:baseline;font-size:11px;letter-spacing:1.6px;color:#dde6ee}
.solar-index a u{text-decoration:none;color:#5b6b77;letter-spacing:1px;font-size:9px}
.solar-index a em{font-style:normal;color:#dde6ee}
.solar-index a:hover{text-decoration:none}
.solar-index a:hover em,.solar-index a:hover{color:#e7b86a}

.solar-stat{position:absolute;right:32px;bottom:28px;text-align:right;font-size:9px;letter-spacing:1.8px;line-height:2;color:#56666f}
.solar-stat b{color:#9db0bd;font-weight:400}
.solar-stat i{font-style:normal;color:#39474f}


/* 首页右上角的登录/注册入口（挂在 #solar-hud，help 按钮左侧） */
#solar-hud-auth{position:absolute;right:68px;top:24px;display:inline-flex;align-items:center;gap:8px;z-index:4}
#solar-hud-auth:empty{display:none}

#solar-hint{position:absolute;left:50%;bottom:28px;transform:translateX(-50%);margin:0;font-size:8.5px;letter-spacing:3px;color:#3f4c56;white-space:nowrap;transition:color .25s ease}
#solar-hint.say{color:#e7b86a}

/* 悬停信息：一块极窄的浮签，不遮挡画面 */
#solar-card{position:absolute;left:0;top:0;pointer-events:none;padding-left:9px;border-left:1px solid #e7b86a80;min-width:0}
#solar-card b{display:block;font-size:9px;font-weight:500;letter-spacing:2.4px;color:#e7b86a;text-transform:uppercase}
#solar-card span{display:block;margin-top:3px;font-size:10px;letter-spacing:1.2px;color:#93a5b3;white-space:nowrap}
.solar-bar{height:1px;margin-top:7px;width:96px;background:#26343f}
.solar-bar i{display:block;height:100%;background:#e7b86a}

/* 载入：螺旋星系跃迁。
   ⚠️ z-index 必须高于 #solar-hud(3) 和 #solar-hud-auth(4)：两者与 #solar-load 原同为 3、
   但 HUD 在 DOM 里更靠后，同 z-index 下会盖到加载层之上，开场阶段就把导航/标题/统计
   透了出来（用户反馈「开场界面不要有这个」）。提到 5，让开场完整遮住主星图 UI。 */
#solar-load{position:absolute;inset:0;z-index:5;overflow:hidden;
  background:radial-gradient(140% 110% at 50% 46%, #0a1220 0%, #04070d 55%, #01030a 100%);
  transition:opacity 1s ease,visibility 1s ease}
#solar-load.done{opacity:0;pointer-events:none;visibility:hidden}

/* 三维星系画布：全屏铺满，星系在其上缓缓旋转推进 */
#solar-intro-canvas{position:absolute;inset:0;width:100%;height:100%;display:block}

@media (prefers-reduced-motion:reduce){
  #solar-intro-canvas{filter:none}
}

#solar-wipe{position:fixed;inset:0;z-index:9999;background:#eaf2f8;opacity:0;pointer-events:none;transition:opacity .18s linear}
#solar-wipe.on{opacity:1}

/* 兜底（无 WebGL / 省流量）：直接给可点的舱段清单 */
#solar-fallback{position:absolute;inset:0;z-index:4;display:grid;align-content:center;justify-items:center;gap:20px;padding:40px 26px;background:#000;overflow:auto}
.fb-reason{margin:0;font-size:10px;letter-spacing:2px;color:#5d707e;text-align:center}
.fb-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:1px;background:#1b252d;border:1px solid #1b252d;max-width:760px;width:100%}
.fb-card{display:grid;gap:4px;padding:16px;background:#000;color:#dfe6ec}
.fb-card b{font-size:11px;font-weight:500;letter-spacing:2.4px;color:#c8d3dc;text-transform:uppercase}
.fb-card span{font-size:10px;letter-spacing:1.2px;color:#5d707e}
.fb-card:hover{background:#0a1017;text-decoration:none}
.fb-card:hover b{color:#e7b86a}
.fb-classes{display:flex;flex-wrap:wrap;gap:6px;justify-content:center;max-width:760px}
.fb-classes a{padding:5px 11px;font-size:9px;letter-spacing:1.6px;color:#6d8294;border:1px solid #1f2b34}
.fb-classes a:hover{border-color:#e7b86a;color:#e7b86a;text-decoration:none}
.fb-classes em{font-style:normal;color:#39474f}
.solar-dead{margin:0;padding:80px 26px;font-size:11px;letter-spacing:2px;color:#5d707e;text-align:center}

@media (max-width:900px){html:not(.land) .solar-brand{left:18px;top:18px}html:not(.land) .solar-brand b{font-size:12px;letter-spacing:4px}html:not(.land) .solar-brand span{display:none}html:not(.land) .solar-index{left:18px;bottom:18px;gap:4px}html:not(.land) .solar-index a{font-size:8.5px;gap:11px}html:not(.land) .solar-stat{right:18px;bottom:18px;font-size:8px;letter-spacing:1.4px;line-height:1.9}html:not(.land) #solar-hint{display:none}html:not(.land) .solar-label em{font-size:10.5px;letter-spacing:1.2px}html:not(.land) .solar-label i{font-size:8.5px;letter-spacing:1px;margin-top:2px}html:not(.land) .solar-label b{font-size:7px;letter-spacing:1.8px;margin-top:2px}
}
@media (max-width:600px){html:not(.land) .solar-index{display:none}html:not(.land) /* bottom 要给右下角「声场」按钮（fixed z-index 60，压不到它下面）让位，
     136px 是实测刚好错开的上限；再低就会被按钮压住右下角 */
  #gate-info{left:16px;right:16px;width:auto;bottom:136px;padding:13px 15px 15px}html:not(.land) #gate-info dl{grid-template-columns:1fr 1fr;gap:8px 10px}html:not(.land) .solar-label.gate::before{display:none}html:not(.land) .solar-load-num{font-size:20px}html:not(.land) /* 390px 宽下行星间距只有 ~45px，标签必须收到这个量级才不叠字 */
  .solar-label em{font-size:9px;letter-spacing:.6px}html:not(.land) .solar-label i{font-size:6.5px;letter-spacing:.3px;margin-top:1px;color:#7d97a8}html:not(.land) .solar-label b{font-size:6px;letter-spacing:.6px;margin-top:1px;color:#4a5661}html:not(.land) .solar-label.off i{display:none}
}

/* ───────── 全站去掉左侧栏：导航只走星图 ─────────
   用户明确要求：进入任何栏目都不许再出现侧边栏，画面要「纯洁」；
   栏目之间的切换只能通过「返回星域导航」回到星图，再从星图点别的行星。
   ⚠️ 于是 .rail 与 .topbar 全局隐藏（用 !important 压掉手机端的 sticky 横条形态），
      导航职责整体迁移到下面这条浮动返回条上。 */
body .rail,body .topbar{display:none!important}

/* ⚠️ main 的盒模型必须重设：原规则是 margin-left:var(--rail) 给侧栏让位的，
   侧栏没了还留着 192px 空白，内容会整体偏右。改成居中容器，左右留白对称。 */
body:not(.solar-on) main{margin:0 auto;max-width:1760px;padding:64px clamp(18px,calc(4 * var(--vw)),54px) 0}

/* 返回条：一条 58px 高的极细浮层，只在非星图页出现。
   背景用自上而下的渐变而非实色 —— 滚动时内容从底部淡出，不留生硬的横切线。 */
.solar-nav{position:fixed;inset:0 0 auto 0;height:58px;display:flex;align-items:center;gap:14px;
  padding:0 clamp(18px,calc(4 * var(--vw)),54px);z-index:30;pointer-events:none;
  background:linear-gradient(180deg,rgba(9,15,23,.96) 0%,rgba(9,15,23,.82) 62%,rgba(9,15,23,0) 100%)}
body.solar-on .solar-nav{display:none}
.solar-nav>*{pointer-events:auto}
.solar-nav-back{display:inline-flex;align-items:center;gap:9px;flex:none;
  font-family:"IBM Plex Mono","Cascadia Mono",Consolas,"SFMono-Regular",monospace;
  font-size:11px;letter-spacing:2.2px;color:#c3d0da;text-decoration:none;
  padding:7px 14px 7px 11px;border:1px solid rgba(120,144,164,.32);border-radius:2px;
  background:rgba(13,20,28,.66);
  transition:color .16s,border-color .16s,background .16s}
.solar-nav-back span{color:var(--accent);font-size:12px;line-height:1}
.solar-nav-back b{font-weight:400}
.solar-nav-back:hover{color:var(--accent);border-color:rgba(231,184,106,.6);
  background:rgba(30,26,17,.86);text-decoration:none}
.solar-nav-crumb{font-family:"IBM Plex Mono","Cascadia Mono",Consolas,"SFMono-Regular",monospace;
  font-size:10px;letter-spacing:2px;color:#5b6f81;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.solar-nav-crumb::before{content:"/";margin-right:14px;color:#2f414d}
.solar-nav-crumb:empty{display:none}

@media(max-width:600px){html:not(.land) body:not(.solar-on) main{padding:58px 16px 0}html:not(.land) .solar-nav{height:50px;gap:9px;padding:0 14px}html:not(.land) .solar-nav-crumb{display:none}html:not(.land) .solar-nav-back{font-size:10px;letter-spacing:1.3px;padding:6px 10px;gap:7px}
}

/* ⚠️ 图鉴页的两栏比例是按「有侧栏的宽屏」调的（0.7 / 1.3）。
   侧栏去掉后容器宽了 192px，左栏反而被压到 155px 一张卡、缩略图看不清，右侧却空一大片。
   改成立体感更均衡的 1 / 1.05，卡片能撑到 300px 以上。 */
.archive-layout{grid-template-columns:minmax(280px,1fr) minmax(0,1.05fr)}
@media(max-width:900px){html:not(.land) .archive-layout{grid-template-columns:1fr}}

/* ── 星港声场（全站背景音乐） ─────────────────────────────────
   入口固定在右下偏上：星图右下被 .solar-stat 占、正中下方被 #solar-hint 占。
   面板仿「歌单 + 播放器」两层结构，宽度压在 376px 以内，手机上退化为全宽。 */
#sound-btn{position:fixed;right:26px;bottom:92px;z-index:60;display:flex;align-items:center;gap:9px;
  height:32px;padding:0 13px;border:1px solid #223039;border-radius:999px;background:rgba(6,10,14,.6);
  -webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);color:#7e909e;font:inherit;font-size:9px;
  letter-spacing:2.4px;cursor:pointer;transition:border-color .2s,color .2s,background .2s}
#sound-btn:hover{border-color:rgba(231,184,106,.55);color:#e7b86a;background:rgba(10,16,21,.78)}
#sound-btn b{font-weight:400}
.snd-wave{display:flex;align-items:flex-end;gap:2px;height:9px}
.snd-wave i{display:block;width:2px;height:3px;background:currentColor;border-radius:1px}
#sound-btn.playing{border-color:rgba(231,184,106,.42);color:#e7b86a}
#sound-btn.playing .snd-wave i{animation:sndbar 1.05s ease-in-out infinite}
#sound-btn.playing .snd-wave i:nth-child(2){animation-delay:.18s}
#sound-btn.playing .snd-wave i:nth-child(3){animation-delay:.36s}
@keyframes sndbar{0%,100%{height:3px}50%{height:9px}}

.sound-panel{position:fixed;right:24px;bottom:136px;z-index:61;width:min(376px,calc(calc(100 * var(--vw)) - 32px));
  max-height:min(calc(74 * var(--vh)),634px);display:flex;flex-direction:column;border:1px solid #1d2831;
  background:linear-gradient(180deg,rgba(11,16,21,.965),rgba(5,8,11,.975));
  -webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);
  box-shadow:0 28px 70px -24px #000,0 0 0 1px rgba(255,255,255,.02) inset}
.sound-panel[hidden]{display:none}
.sp-head{display:flex;align-items:baseline;gap:10px;padding:15px 16px 13px;border-bottom:1px solid #16202a}
.sp-head b{font-size:11px;font-weight:500;letter-spacing:5px;color:#e8eef3}
.sp-head span{font-size:8px;letter-spacing:2.6px;color:#4d5c68}
.sp-close{margin-left:auto;width:22px;height:22px;border:1px solid #26333d;border-radius:50%;background:none;
  color:#7d8f9c;font-size:9px;line-height:1;cursor:pointer;transition:.2s}
.sp-close:hover{border-color:#a2503f;color:#e88a72}

.sp-now{padding:16px 16px 12px;border-bottom:1px solid #16202a}
.sp-now em{display:block;font-style:normal;font-size:8px;letter-spacing:3.2px;color:#586674}
.sp-title{margin:7px 0 4px;font-size:17px;font-weight:400;letter-spacing:.4px;color:#eef3f7;line-height:1.3}
.sp-cn{font-size:9.5px;letter-spacing:1.8px;color:#7d8d9a}
.sp-bar{position:relative;height:16px;margin:13px 0 2px;cursor:pointer}
.sp-bar::before{content:"";position:absolute;left:0;right:0;top:7px;height:2px;background:#1d2a34}
.sp-bar i{position:absolute;left:0;top:7px;height:2px;width:0;background:#e7b86a;transition:width .18s linear}
.sp-bar::after{content:"";position:absolute;top:5px;width:6px;height:6px;border-radius:50%;background:#e7b86a;
  left:calc(var(--p,0) * 100%);display:none}
.sp-time{display:flex;justify-content:space-between;font-size:8.5px;letter-spacing:1.6px;color:#5d6c79;
  font-family:"IBM Plex Mono","Cascadia Mono",Consolas,monospace}

.sp-ctrl{display:flex;align-items:center;gap:12px;padding:13px 16px;border-bottom:1px solid #16202a}
.sp-prev,.sp-next{width:30px;height:30px;border:1px solid #24313b;background:none;color:#93a5b3;font-size:9px;
  letter-spacing:-.5px;cursor:pointer;transition:.18s}
.sp-prev:hover,.sp-next:hover{border-color:rgba(231,184,106,.55);color:#e7b86a}
.sp-play{position:relative;width:38px;height:38px;flex:none;border:1px solid #3a4a57;border-radius:50%;
  background:#0b1319;cursor:pointer;transition:.2s}
.sp-play:hover{border-color:#e7b86a}
.sp-play::before{content:"";position:absolute;inset:0;margin:auto;transform:translateX(1.5px)}
.sp-play[data-state="paused"]::before{width:0;height:0;border-left:9px solid #e7b86a;
  border-top:6px solid transparent;border-bottom:6px solid transparent;transform:translateX(2px)}
.sp-play[data-state="playing"]::before{width:3px;height:12px;background:#e7b86a;border:none;transform:translateX(-4px)}
.sp-play[data-state="playing"]::after{content:"";position:absolute;inset:0;margin:auto;width:3px;height:12px;
  background:#e7b86a;transform:translateX(6px)}
.sp-vol{margin-left:auto;display:flex;align-items:center}
.sp-vol input{width:78px;height:2px;-webkit-appearance:none;appearance:none;background:#24313b;outline:none}
.sp-vol input::-webkit-slider-thumb{-webkit-appearance:none;width:8px;height:8px;border-radius:50%;background:#e7b86a;cursor:pointer}

.sp-list{margin:0;padding:0;list-style:none;overflow:auto;flex:1;min-height:0;scrollbar-width:thin}
.sp-list::-webkit-scrollbar{width:5px}
.sp-list::-webkit-scrollbar-thumb{background:#1f2b35}
.sp-row{display:grid;grid-template-columns:22px 1fr auto 34px;align-items:center;gap:10px;width:100%;
  padding:9px 16px;border:0;border-bottom:1px solid #111a22;background:none;color:#8497a5;font:inherit;
  text-align:left;cursor:pointer;transition:background .18s,color .18s}
.sp-row:hover{background:#0c141a;color:#dfe8ef}
.sp-row u{text-decoration:none;font-size:8.5px;letter-spacing:1px;color:#3f4d59}
.sp-row b{font-weight:400;font-size:11px;letter-spacing:.5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.sp-row em{font-style:normal;font-size:8.5px;letter-spacing:1.4px;color:#56646f}
.sp-row span{font-size:8.5px;letter-spacing:1px;color:#4d5b66;text-align:right;
  font-family:"IBM Plex Mono","Cascadia Mono",Consolas,monospace}
.sp-row.on{background:#101a22;color:#e7b86a}
.sp-row.on u{color:#e7b86a}
.sp-row.on em{color:#9a7b45}

.sp-foot{padding:11px 16px 13px;border-top:1px solid #16202a;font-size:8px;line-height:1.9;
  letter-spacing:1.1px;color:#465560}

@media (max-width:640px){html:not(.land) #sound-btn{right:16px;bottom:78px;height:29px;padding:0 10px;font-size:8.5px;gap:7px}html:not(.land) .sound-panel{right:10px;left:10px;width:auto;bottom:120px;max-height:calc(72 * var(--vh))}html:not(.land) .sp-row{grid-template-columns:20px 1fr 30px;gap:8px}html:not(.land) .sp-row em{display:none}
}

/* ── 星系俯瞰层（把画面缩小到一定程度后自动进入） ──────────────
   行星散到各自轨道上，标签会互相压 —— 只保留名字，副标题在俯瞰层没有信息量。
   探测器带是线性排布，俯瞰时不成立，连元素一起淡出。 */
#solar-probes{transition:opacity .55s ease}
#solar-stage.orbit .solar-label i,
#solar-stage.orbit .solar-label b{display:none}
#solar-stage.orbit .solar-label em{font-size:10px;letter-spacing:1.8px}
#solar-stage.orbit .solar-label::after{content:"";position:absolute;left:0;top:100%;width:9px;height:1px;background:#2c3b46}
/* 手机俯瞰层：8 颗行星在 390px 宽里挤成一团，标签全部隐掉 ——
   球本身仍可点（raycast 不看标签），名字在 hover/点按时由浮签给出。 */
@media (max-width:640px){html:not(.land) #solar-stage.orbit .solar-label{display:none}
}

/* ── 银河系（第三层视野） ─────────────────────────────────────
   这一层不是「同一张图的缩放」：太阳系缩成中心一小团，四周是几万颗星。
   于是所有「图谱语言」（舱段索引、模型统计、探测器带）都必须退场 ——
   它们的信息属于太阳系，放在银河尺度上会像贴在星图上的便签。 */
#solar-galaxy{position:absolute;inset:0;pointer-events:none;z-index:3}
.gx-tag{position:absolute;left:0;top:0;margin:0;padding:0;border:0;background:none;
  font:inherit;text-align:left;white-space:nowrap;pointer-events:none;
  opacity:0;transition:opacity .55s ease;will-change:transform}
.gx-tag b{display:block;font-size:9px;font-weight:400;letter-spacing:3.4px;color:#c3d1de}
.gx-tag span{display:block;margin-top:3px;font-size:8.5px;letter-spacing:1.5px;color:#5f7391}
/* 名字左侧的一小段引线：让它看起来是「标注在星点上」，而不是飘着的文字 */
.gx-tag::before{content:"";position:absolute;left:-14px;top:5px;width:7px;height:1px;background:#3b4e62}

.gx-sol{pointer-events:auto;cursor:pointer;padding:2px 0}
.gx-sol b{color:#ffe4b4;text-shadow:0 0 18px rgba(231,184,106,.55)}
.gx-sol span{color:#a48d68}
.gx-sol::before{background:#8d6c3d}
.gx-sol:hover b{color:#fff;text-shadow:0 0 22px rgba(255,230,180,.9)}
.gx-core b{color:#cdd9e5}

#solar-stage.galaxy .solar-index,
#solar-stage.galaxy .solar-stat{opacity:0;pointer-events:none;transition:opacity .5s ease}
#solar-stage.galaxy #solar-probes{opacity:0!important}

@media (max-width:640px){html:not(.land) .gx-tag b{font-size:7.5px;letter-spacing:2.2px}html:not(.land) .gx-tag span{font-size:7px;letter-spacing:.7px;margin-top:2px}html:not(.land) .gx-sol b{font-size:8.5px}html:not(.land) .gx-sol span{font-size:7.5px}
}

/* 银河层注记压在几万颗星点上，必须给一层极淡的暗底才能读（只加阴影不够，
   密集区里的亮点会把笔画吃掉）。 */
.gx-tag b{text-shadow:0 1px 10px #04070a,0 0 22px #04070a}
.gx-tag span{text-shadow:0 1px 9px #04070a,0 0 18px #04070a}

/* ═══════════════════════════════════════════════════════════════════════
   地球档案 / EARTH ARCHIVE（2026-10-18）
   点星图里的「地球」进入。整页不是文章，是一部可以滚动的短片：
   每个场景 = 一个 sticky 满屏舞台 + 一条由滚动驱动的进度 p。
   ⚠️ 这一页要独占视口，所以进 world 页时 body 会打 .world-on，
      把 main 的居中容器与 64px 上内边距一起撤掉（否则满屏舞台会矮一截）。
   ⚠️ 全部绘图走 Canvas 2D / SVG：首页那套 three.js 上下文还在内存里，
      再开一个 WebGL 会拖慢低端机，而这一页根本不需要透视。
   ═══════════════════════════════════════════════════════════════════════ */
body.world-on{background:#070b11}
body.world-on main{margin:0;padding:0;max-width:none}
body.world-on footer{display:none}

.wd-bar{position:fixed;left:0;right:0;top:58px;height:2px;z-index:29;pointer-events:none;background:rgba(9,15,23,.5)}
.wd-bar i{display:block;height:100%;width:100%;transform:scaleX(0);transform-origin:0 50%;
  background:linear-gradient(90deg,#e7b86a,#e7b86a88 88%,transparent)}
@media(max-width:600px){html:not(.land) .wd-bar{top:50px}}

/* 右侧场景目录 */
.wd-dots{position:fixed;right:clamp(8px,calc(1.4 * var(--vw)),22px);top:50%;transform:translateY(-50%);
  display:grid;gap:13px;z-index:25}
.wd-dots a{position:relative;display:flex;justify-content:flex-end;align-items:center;
  text-decoration:none;padding:2px 0}
.wd-dots a i{display:block;width:15px;height:1px;background:#32465a;transition:width .3s,background .3s,box-shadow .3s}
.wd-dots a.past i{background:#6a5a3d}
.wd-dots a.active i{width:27px;background:var(--accent);box-shadow:0 0 9px rgba(231,184,106,.55)}
.wd-dots a span{position:absolute;right:30px;white-space:nowrap;font-size:9.5px;letter-spacing:1.4px;
  color:#93a9bb;background:rgba(8,13,19,.94);border:1px solid #22303d;border-radius:2px;padding:3px 9px;
  opacity:0;transform:translateX(6px);transition:opacity .2s,transform .2s;pointer-events:none}
.wd-dots a:hover span{opacity:1;transform:none}
@media(max-width:760px){html:not(.land) .wd-dots{display:none}}

/* ── 封面 ── */
.wd-hero{position:relative;height:calc(100 * var(--vh));min-height:600px;display:flex;align-items:center;
  overflow:hidden;padding:0 clamp(20px,calc(6 * var(--vw)),88px);
  background:radial-gradient(1200px 760px at 76% 46%,#0e1b27 0%,#080e15 56%,#05080c 100%)}
.wd-earth{position:absolute;right:-15%;top:50%;transform:translateY(-50%);
  width:min(900px,calc(90 * var(--vw)));aspect-ratio:1;border-radius:50%;overflow:hidden;
  will-change:transform}
.wd-tex{position:absolute;inset:0;background:url(textures/planets/earth.webp) repeat-x 0 50%/200% 100%;
  animation:wdSpin 460s linear infinite}
.wd-cloud{position:absolute;inset:0;background:url(textures/planets/earth-clouds.webp) repeat-x 0 50%/200% 100%;
  mix-blend-mode:screen;opacity:.40;animation:wdSpin 680s linear infinite}
.wd-shade{position:absolute;inset:0;border-radius:50%;
  /* 晨昏线：光从右边来，所以左缘压暗 —— 一颗「有体积」的球，而不是一张贴图 */
  box-shadow:inset 108px 34px 190px 8px rgba(3,7,12,.88),
             inset -70px -54px 150px 0 rgba(3,7,12,.45)}
.wd-atmo{position:absolute;inset:-1.4%;border-radius:50%;
  box-shadow:0 0 100px 14px rgba(96,164,220,.20),inset 0 0 42px 2px rgba(140,200,255,.40)}
@keyframes wdSpin{from{background-position-x:0}to{background-position-x:-200%}}

.wd-hero::before{content:"";position:absolute;inset:0;z-index:1;pointer-events:none;opacity:.55;
  background-image:
    radial-gradient(circle at 26px 34px,rgba(255,255,255,.55) 0 1px,transparent 1.3px),
    radial-gradient(circle at 118px 142px,rgba(255,255,255,.38) 0 1px,transparent 1.3px),
    radial-gradient(circle at 196px 72px,rgba(255,255,255,.45) 0 1.2px,transparent 1.5px),
    radial-gradient(circle at 258px 196px,rgba(255,255,255,.26) 0 1px,transparent 1.3px),
    radial-gradient(circle at 74px 244px,rgba(200,225,245,.30) 0 1px,transparent 1.3px);
  background-size:280px 240px,340px 300px,400px 360px,460px 320px,520px 420px;
  background-repeat:repeat}
/* 压暗幕：地球是大面积亮面，标题直接压上去会糊。自左向右淡出，右侧留出球体 */
.wd-hero::after{content:"";position:absolute;inset:0;z-index:1;pointer-events:none;
  background:linear-gradient(90deg,#070b11 0%,rgba(7,11,17,.94) 24%,rgba(7,11,17,.62) 44%,
    rgba(7,11,17,.10) 66%,rgba(7,11,17,0) 100%)}
.wd-hero-in{position:relative;z-index:2;max-width:740px}
.wd-hero-kick{font-family:"IBM Plex Mono","Cascadia Mono",Consolas,monospace;font-size:10px;
  letter-spacing:3.4px;color:#7c93a6;display:flex;align-items:center;gap:11px}
.wd-hero-kick span{width:5px;height:5px;border-radius:50%;background:var(--accent);box-shadow:0 0 10px rgba(231,184,106,.8)}
.wd-hero h1{font-size:clamp(62px,calc(10.5 * var(--vw)),146px);line-height:.94;letter-spacing:.06em;font-weight:600;
  color:#f4f9fc;margin:22px 0 0;text-shadow:0 20px 70px rgba(0,0,0,.6)}
.wd-hero h1 em{display:block;font-style:normal;font-family:"IBM Plex Mono","Cascadia Mono",Consolas,monospace;
  font-size:clamp(10px,calc(1.2 * var(--vw)),13px);letter-spacing:1.05em;color:#617b90;margin-top:20px}
.wd-hero-sub{font-size:clamp(17px,calc(2.1 * var(--vw)),25px);letter-spacing:.16em;color:#cfe2ef;margin:26px 0 0;font-weight:400}
.wd-hero-lede{font-size:13.5px;line-height:2.05;color:#8ba1b3;max-width:520px;margin:20px 0 0}
.wd-hero-stats{display:flex;gap:clamp(18px,calc(3 * var(--vw)),42px);margin:38px 0 0;flex-wrap:wrap}
.wd-hero-stats>div{position:relative;padding-right:clamp(18px,calc(3 * var(--vw)),42px)}
.wd-hero-stats>div:last-child{padding-right:0}
.wd-hero-stats>div+div::before{content:"";position:absolute;left:calc(-1 * clamp(9px,calc(1.5 * var(--vw)),21px));top:6px;bottom:6px;width:1px;background:#1e2c39}
.wd-hero-stats b{display:block;font-family:"IBM Plex Mono","Cascadia Mono",Consolas,monospace;
  font-size:clamp(21px,calc(2.5 * var(--vw)),29px);font-weight:300;color:#f0dcb8;letter-spacing:1px;line-height:1.2}
.wd-hero-stats span{display:block;font-size:10px;letter-spacing:1.4px;color:#69808f;margin-top:7px}
.wd-cue{display:flex;align-items:center;gap:12px;margin-top:clamp(30px,calc(6 * var(--vh)),64px);
  font-size:10px;letter-spacing:2.6px;color:#5f7686}
.wd-cue i{width:1px;height:34px;background:linear-gradient(#e7b86a,rgba(231,184,106,0));
  display:block;position:relative;overflow:hidden}
.wd-cue i::after{content:"";position:absolute;left:0;top:-34px;width:1px;height:14px;background:#e7b86a;
  animation:wdCue 2.4s ease-in-out infinite}
@keyframes wdCue{0%{transform:translateY(0)}70%{transform:translateY(48px)}100%{transform:translateY(48px)}}
.wd-hero-coord{position:absolute;right:clamp(20px,calc(6 * var(--vw)),88px);bottom:clamp(26px,calc(5 * var(--vh)),52px);
  font-family:"IBM Plex Mono","Cascadia Mono",Consolas,monospace;font-size:9.5px;letter-spacing:2.2px;
  color:#6d8598;z-index:2;text-shadow:0 1px 8px #04070a,0 0 16px #04070a}

/* 入场：只做一次，按 --d 错开 */
.wd-r{opacity:0;transform:translateY(16px);animation:wdRise .95s cubic-bezier(.2,.75,.2,1) forwards;animation-delay:var(--d,0s)}
@keyframes wdRise{to{opacity:1;transform:none}}

/* ── 场景骨架 ── */
.wd-ch{position:relative}
.wd-pin{height:calc(240 * var(--vh));position:relative}
.wd-pin-track{height:calc(420 * var(--vh))}
.wd-pin-short{height:calc(190 * var(--vh))}
.wd-stage{position:sticky;top:0;height:calc(100 * var(--vh));min-height:560px;overflow:hidden;
  background:radial-gradient(900px 620px at 50% 44%,#0b1621 0%,#070c12 58%,#05080d 100%)}
.wd-cv{position:absolute;inset:0;width:100%;height:100%;display:block;pointer-events:none}

.wd-kick{position:absolute;top:clamp(74px,calc(10 * var(--vh)),116px);left:clamp(20px,calc(5 * var(--vw)),80px);
  display:flex;align-items:baseline;gap:13px;z-index:4}
.wd-kick span{font-family:"IBM Plex Mono","Cascadia Mono",Consolas,monospace;font-size:11px;
  color:var(--accent);letter-spacing:2px}
.wd-kick i{font-style:normal;font-size:9.5px;letter-spacing:3.2px;color:#5b7183}

.wd-hud{position:absolute;right:clamp(20px,calc(5 * var(--vw)),80px);top:clamp(74px,calc(10 * var(--vh)),116px);text-align:right;z-index:4}
.wd-hud-big b{font-family:"IBM Plex Mono","Cascadia Mono",Consolas,monospace;
  font-size:clamp(40px,calc(6.6 * var(--vw)),82px);font-weight:300;color:#f5e8cf;letter-spacing:2px;line-height:1}
.wd-hud-big span{font-size:11px;color:#7b8fa0;margin-left:7px;letter-spacing:2px}
.wd-hud-row{display:flex;align-items:center;gap:11px;justify-content:flex-end;margin-top:16px;
  font-size:9.5px;color:#6f8497;letter-spacing:1.6px}
.wd-hud-row i{width:120px;height:1px;background:#1d2b37;display:block;position:relative}
.wd-hud-row s{position:absolute;left:0;top:-1px;height:3px;width:0;background:var(--accent);
  text-decoration:none;display:block;box-shadow:0 0 9px rgba(231,184,106,.5)}
.wd-hud-row b{font-family:"IBM Plex Mono","Cascadia Mono",Consolas,monospace;font-weight:400;color:#a9bccb;letter-spacing:.5px}

/* 字幕：绝对叠放，靠 .on 交叉淡入。给定高，否则容器高度为 0 会顶到屏幕外 */
.wd-subs{position:absolute;left:clamp(20px,calc(5 * var(--vw)),80px);bottom:clamp(64px,calc(13 * var(--vh)),132px);
  width:min(640px,calc(74 * var(--vw)));height:190px;z-index:4;pointer-events:none}
.wd-subs p{position:absolute;left:0;bottom:0;margin:0;font-size:clamp(18px,calc(2.45 * var(--vw)),29px);line-height:1.72;
  color:#eaf2f8;font-weight:500;letter-spacing:.02em;opacity:0;transform:translateY(15px);
  transition:opacity .55s ease,transform .55s ease;text-shadow:0 2px 26px rgba(0,0,0,.85)}
.wd-subs p.on{opacity:1;transform:none}
.wd-subs b{color:#ffd9a0;font-weight:600}

.wd-scrollhint{position:absolute;left:50%;bottom:24px;transform:translateX(-50%);
  width:1px;height:38px;background:linear-gradient(#2a3b4a,rgba(42,59,74,0));z-index:4}
.wd-scrollhint i{position:absolute;left:-2px;top:0;width:5px;height:5px;border-radius:50%;background:var(--accent);
  animation:wdDot 2.4s ease-in-out infinite}
@keyframes wdDot{0%{transform:translateY(0);opacity:0}25%{opacity:1}100%{transform:translateY(33px);opacity:0}}

/* ── 「读这一段原文」 ── */
.wd-read{max-width:768px;margin:0 auto;padding:0 clamp(18px,calc(4 * var(--vw)),40px)}
.wd-read summary{display:flex;align-items:center;gap:14px;cursor:pointer;list-style:none;
  padding:20px 0;border-top:1px solid #16222e;color:#8ea3b4;font-size:12px;letter-spacing:1.6px;
  transition:color .18s}
.wd-read summary:hover{color:var(--accent)}
.wd-read summary::-webkit-details-marker{display:none}
.wd-read summary em{font-style:normal;color:#546c7e;font-size:10px;letter-spacing:1px}
.wd-read summary i{margin-left:auto;font-style:normal;color:var(--accent);font-size:15px;
  transition:transform .3s;display:block;line-height:1}
.wd-read[open] summary i{transform:rotate(45deg)}
.wd-prose{padding:10px 0 54px;font-size:15.5px;line-height:2.06;color:#a7bac9}
.wd-prose p{margin:0 0 18px}
.wd-prose b{color:#e9f2f8;font-weight:600}
.wd-prose h3{font-size:13.5px;letter-spacing:1px;color:#dbe7f0;margin:32px 0 12px;
  padding-left:12px;border-left:2px solid var(--accent);line-height:1.6}
.wd-prose h3 em{font-style:normal;font-family:"IBM Plex Mono","Cascadia Mono",Consolas,monospace;
  color:#5f778a;font-size:10px;letter-spacing:1px;margin-left:10px}
.wd-stone{display:grid;gap:9px;margin:24px 0;padding:18px 20px;border-left:2px solid #2b3d4d;background:#0a1118}
.wd-stone span{font-family:"IBM Plex Mono","Cascadia Mono",Consolas,monospace;font-size:12px;
  color:#8fa6b8;letter-spacing:.4px;line-height:1.9}

/* ── 03 横向年表 ── */
.wd-stage-track{display:flex;flex-direction:column;padding-top:clamp(84px,calc(12 * var(--vh)),142px)}
.wd-track-top{display:flex;justify-content:space-between;align-items:flex-end;gap:26px;
  padding:0 clamp(20px,calc(5 * var(--vw)),80px)}
.wd-track-title{font-size:clamp(23px,calc(3.1 * var(--vw)),38px);line-height:1.34;margin:12px 0 0;
  color:#f0f6fb;font-weight:600;letter-spacing:.01em}
.wd-track-now{text-align:right;flex:none;padding-bottom:4px}
.wd-track-now span{display:block;font-family:"IBM Plex Mono","Cascadia Mono",Consolas,monospace;
  font-size:10px;letter-spacing:2.4px;color:var(--accent)}
.wd-track-now b{display:block;font-size:15px;color:#dce8f1;margin-top:6px;font-weight:500}
.wd-track-now i{display:block;font-style:normal;font-family:"IBM Plex Mono","Cascadia Mono",Consolas,monospace;
  font-size:10px;color:#667f92;margin-top:5px;letter-spacing:1px}
.wd-track-clip{overflow:hidden;margin-top:auto;padding:24px 0 0}
.wd-track{display:flex;gap:clamp(14px,calc(1.8 * var(--vw)),26px);padding:0 clamp(20px,calc(5 * var(--vw)),80px);
  will-change:transform;transition:transform .08s linear}
.wd-era-col{flex:0 0 clamp(286px,calc(31 * var(--vw)),404px);height:calc(48 * var(--vh));overflow:auto;
  border:1px solid #16222e;border-radius:5px;background:linear-gradient(180deg,#0c151e,#0a1118);
  padding:18px 18px 8px;opacity:.40;transition:opacity .5s,border-color .5s,box-shadow .5s;
  scrollbar-width:thin;scrollbar-color:#20303d transparent;
  -webkit-mask-image:linear-gradient(#000 88%,rgba(0,0,0,.15) 100%);
  mask-image:linear-gradient(#000 88%,rgba(0,0,0,.15) 100%)}
.wd-era-col::-webkit-scrollbar{width:4px}
.wd-era-col::-webkit-scrollbar-thumb{background:#20303d;border-radius:4px}
.wd-era-col.on{opacity:1;border-color:#3a4d5f;
  box-shadow:0 0 0 1px rgba(231,184,106,.10),0 24px 60px -26px #000}
.wd-era-col header{border-bottom:1px solid #17232f;padding-bottom:12px;margin-bottom:6px}
.wd-era-col header b{display:block;font-size:15.5px;color:#e8f1f8;font-weight:600;line-height:1.5}
.wd-era-idx{display:block;font-family:"IBM Plex Mono","Cascadia Mono",Consolas,monospace;
  font-size:9.5px;letter-spacing:2.4px;color:var(--accent);margin-bottom:7px}
.wd-era-col header i{display:block;font-style:normal;font-family:"IBM Plex Mono","Cascadia Mono",Consolas,monospace;
  font-size:10px;color:#5f7789;margin-top:6px;letter-spacing:1.2px}
.wd-row{display:grid;grid-template-columns:58px minmax(0,1fr);gap:11px;padding:8px 0;
  border-top:1px solid #131e28}
.wd-row:first-child{border-top:0}
.wd-row time{font-family:"IBM Plex Mono","Cascadia Mono",Consolas,monospace;font-size:10.5px;
  color:var(--accent);letter-spacing:.5px;padding-top:3px}
.wd-row p{margin:0;font-size:11.5px;line-height:1.72;color:#9bb0bf}
.wd-row.is-note time{color:#3d5364}
.wd-row.is-note p{color:#889caa}
.wd-track-rail{padding:16px clamp(20px,calc(5 * var(--vw)),80px) clamp(26px,calc(5 * var(--vh)),48px);margin-top:auto}
.wd-track-line{height:1px;background:#1a2734;position:relative}
.wd-track-line i{position:absolute;left:0;top:-1px;height:3px;width:100%;transform:scaleX(0);
  transform-origin:0 50%;background:linear-gradient(90deg,#e7b86a,#e7b86a55)}
.wd-track-ticks{display:flex;margin-top:14px}
.wd-track-ticks button{flex:1;text-align:left;padding:0;color:#546c7e;transition:color .25s}
.wd-track-ticks button:last-child{text-align:right}
.wd-track-ticks button:hover{color:var(--accent)}
.wd-track-ticks b{display:block;font-size:10px;font-weight:400;letter-spacing:1.6px}
.wd-track-ticks span{display:block;font-family:"IBM Plex Mono","Cascadia Mono",Consolas,monospace;
  font-size:9px;margin-top:4px;letter-spacing:.6px;color:#3f5566}

/* ── 通用内容块（非固定舞台的章节） ── */
.wd-flow{max-width:1180px;margin:0 auto;padding:clamp(76px,calc(11 * var(--vh)),132px) clamp(20px,calc(5 * var(--vw)),58px) 0}
.wd-flow-head{max-width:720px;margin-bottom:clamp(28px,calc(5 * var(--vh)),46px)}
.wd-flow-head h2{font-size:clamp(25px,calc(3.5 * var(--vw)),42px);line-height:1.36;color:#f0f6fb;
  font-weight:600;margin:14px 0 16px;letter-spacing:.01em}
.wd-flow-lede{font-size:13px;line-height:2.05;color:#879cad;max-width:560px;margin:0}

/* ── 04 门 ── */
.wd-gate-wrap{display:grid;grid-template-columns:minmax(0,1.1fr) minmax(300px,.9fr);
  gap:clamp(20px,calc(3.4 * var(--vw)),50px);align-items:center;border-top:1px solid #16222e;padding-top:34px}
/* 第四章的图：首页那座星门的实拍渲染（透明底 WebP），四角压着四条标注。
   ⚠️ 标注层必须和图片**同一个盒子**（inset:0 + 同 viewBox），否则缩放时引线会偏。 */
.wd-gate-fig{position:relative;margin-bottom:26px}
.wd-gate-fig::before{content:"";position:absolute;inset:12% 2% 0;pointer-events:none;
  background:radial-gradient(closest-side,rgba(231,184,106,.13),rgba(231,184,106,.03) 62%,transparent 76%);
  filter:blur(26px)}
.wd-gate-img{position:relative;width:100%;height:auto;display:block;
  filter:drop-shadow(0 30px 66px rgba(0,0,0,.62))}
.wd-gate-mark{position:absolute;inset:0;width:100%;height:100%;overflow:visible;pointer-events:none}
.gc-i{font-family:"IBM Plex Mono","Cascadia Mono",Consolas,monospace;font-size:24px;
  stroke:none;letter-spacing:.5px;opacity:.9}
.gatecall g[data-c="0"]{color:#e7b86a}.gatecall g[data-c="0"] .gc-i{fill:#e7b86a}
.gatecall g[data-c="1"]{color:#64cadb}.gatecall g[data-c="1"] .gc-i{fill:#64cadb}
.gatecall g[data-c="2"]{color:#e58f88}.gatecall g[data-c="2"] .gc-i{fill:#e58f88}
.gatecall g[data-c="3"]{color:#9fd8a5}.gatecall g[data-c="3"] .gc-i{fill:#9fd8a5}
.wd-gate-cap{position:absolute;right:2px;bottom:-20px;text-align:right;text-shadow:0 1px 10px #04070a,0 0 3px #04070a;font-family:"IBM Plex Mono","Cascadia Mono",Consolas,monospace;
  font-size:9px;letter-spacing:2px;color:#40586a}
.gatecall g{opacity:.26;transition:opacity .35s}
.gatecall g.on{opacity:1}
.gatecall g.on circle{filter:drop-shadow(0 0 6px currentColor)}
.wd-gate-tabs{display:grid;gap:6px}
.wd-gate-tab{display:grid;grid-template-columns:26px minmax(0,1fr);gap:4px 12px;align-items:center;
  text-align:left;padding:13px 14px;border:1px solid #172430;border-radius:4px;background:#0b131b;
  transition:border-color .2s,background .2s}
.wd-gate-tab:hover{border-color:#31465a}
.wd-gate-tab span{grid-row:1/3;font-family:"IBM Plex Mono","Cascadia Mono",Consolas,monospace;
  font-size:10px;color:#4c6376;letter-spacing:1px}
.wd-gate-tab b{font-size:13.5px;color:#a9bdcb;font-weight:500}
.wd-gate-tab i{font-style:normal;font-size:8.5px;letter-spacing:2px;color:#466073}
.wd-gate-tab.active{border-color:rgba(231,184,106,.55);background:linear-gradient(90deg,rgba(231,184,106,.10),rgba(231,184,106,.02))}
.wd-gate-tab.active span,.wd-gate-tab.active b{color:var(--accent)}
.wd-gate-panel{display:none}
.wd-gate-panel.active{display:block;animation:wdFade .4s ease both}
@keyframes wdFade{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}
.wd-gate-call{display:inline-block;font-family:"IBM Plex Mono","Cascadia Mono",Consolas,monospace;
  font-size:9.5px;letter-spacing:2px;color:#7f96a8;border:1px solid #253544;border-radius:2px;
  padding:3px 8px;margin:18px 0 12px}
.wd-gate-panel p{font-size:13px;line-height:2.05;color:#93a8b7;margin:0}
.wd-gate-panel b{color:#e2edf5}

/* ── 05 网络 ── */
.wd-net{position:relative;border:1px solid #172534;border-radius:6px;
  background:radial-gradient(760px 400px at 50% 44%,#0b1824,#070d14);overflow:hidden}
.wd-net svg{display:block;width:100%;height:auto;max-height:calc(66 * var(--vh))}
.wd-edge{stroke:#2b4256;stroke-width:.9;opacity:.55}
.wd-edge.dim{stroke:#1a2833;opacity:.30}
.wd-node{fill:#e7b86a;cursor:pointer;transition:fill .2s}
.wd-node.off{fill:#2a3d4b}
.wd-node:hover{stroke:#fff;stroke-width:1.2}
.wd-node.on{filter:drop-shadow(0 0 5px rgba(231,184,106,.85))}
.wd-net-legend{display:flex;align-items:center;gap:22px;padding:12px 18px;border-top:1px solid #14202a;
  font-size:10px;letter-spacing:1.4px;color:#6b8093;flex-wrap:wrap}
.wd-net-legend i{display:inline-block;width:6px;height:6px;border-radius:50%;margin-right:7px;vertical-align:1px}
.wd-net-legend i.on{background:#e7b86a;box-shadow:0 0 7px rgba(231,184,106,.8)}
.wd-net-legend i.off{background:#33475a}
.wd-net-legend em{margin-left:auto;font-style:normal;color:#546c7e;font-size:9.5px}
.wd-nets{margin-top:clamp(24px,calc(4 * var(--vh)),40px);display:grid;gap:0}
.wd-net-item{display:grid;grid-template-columns:44px minmax(0,1fr);gap:16px;padding:22px 0;
  border-top:1px solid #14202b}
.wd-net-item>span{font-family:"IBM Plex Mono","Cascadia Mono",Consolas,monospace;font-size:10px;
  color:#3f5869;letter-spacing:1px;padding-top:4px}
.wd-net-item h3{margin:0 0 8px;font-size:15.5px;color:#e3eef6;font-weight:600}
.wd-net-item p{margin:0;font-size:13px;line-height:2.05;color:#8fa4b3}
.wd-net-item b{color:#dfeaf3}
.wd-net-item:last-child p{color:#a5bac8}

/* ── 06 人 ── */
.wd-people{display:grid;grid-template-columns:repeat(auto-fill,minmax(268px,1fr));gap:13px}
.wd-person{border:1px solid #16222e;border-radius:5px;padding:18px 17px 16px;background:#0b131b;
  transition:border-color .22s,background .22s,transform .22s}
.wd-person:hover{border-color:#33495c;background:#0e1822;transform:translateY(-2px)}
.wd-person>div{display:flex;flex-direction:column;gap:5px;border-bottom:1px solid #14202b;padding-bottom:10px}
.wd-person h3{margin:0;font-size:15px;color:#e6eff6;font-weight:600;line-height:1.4}
.wd-person span{font-size:8.5px;letter-spacing:1.6px;color:#5e7587}
.wd-person p{margin:11px 0 0;font-size:11.5px;line-height:1.9;color:#8ba0af}
.wd-person b{color:#dbe7f0}
.wd-egg{margin-top:22px;padding:20px 22px;border:1px solid #2c2418;border-radius:5px;
  background:linear-gradient(100deg,rgba(231,184,106,.06),rgba(231,184,106,.01))}
.wd-egg p{margin:9px 0 0;font-size:12.5px;line-height:2;color:#9cae bb}
.wd-egg p{color:#9caebb}
.wd-egg b{color:#e8d3ab}

/* ── 07 星灯 ── */
.wd-beacon{position:absolute;right:clamp(20px,calc(6 * var(--vw)),90px);top:46%;transform:translateY(-50%);
  width:min(430px,calc(42 * var(--vw)));z-index:4}
.wd-count{display:flex;align-items:baseline;gap:9px;margin:14px 0 16px}
.wd-count b{font-family:"IBM Plex Mono","Cascadia Mono",Consolas,monospace;font-size:clamp(28px,calc(3.6 * var(--vw)),46px);
  font-weight:300;color:#f6e3bf;letter-spacing:1px;line-height:1}
.wd-count span{font-size:10px;letter-spacing:2px;color:#7b8fa0}
.wd-beacon p{font-size:12.5px;line-height:2;color:#93a8b7;margin:0 0 12px}
.wd-beacon p.dim{color:#76899a}
.wd-beacon b{color:#e9d3ab}
.wd-subs-7{width:min(600px,calc(64 * var(--vw)))}

/* ── 07 节日卡 ── */
.wd-fests{max-width:1180px;margin:0 auto;padding:0 clamp(20px,calc(5 * var(--vw)),58px);
  display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px}
.wd-fest{border:1px solid #16222e;border-radius:5px;padding:20px 20px 18px;background:#0b131b}
.wd-fest h3{margin:0 0 10px;font-size:15px;color:#e6eff6;font-weight:600}
.wd-fest p{margin:0;font-size:12px;line-height:2;color:#8ba0af}
.wd-fest b{color:#dbe7f0}

/* ── 08 2026 ── */
.wd-dates{position:absolute;left:clamp(20px,calc(5 * var(--vw)),80px);bottom:clamp(74px,calc(14 * var(--vh)),140px);
  display:grid;gap:14px;z-index:4}
.wd-dates>div{display:grid;grid-template-columns:56px minmax(0,1fr);gap:14px;align-items:baseline}
.wd-dates time{font-family:"IBM Plex Mono","Cascadia Mono",Consolas,monospace;font-size:12px;
  color:var(--accent);letter-spacing:1px}
.wd-dates p{margin:0;font-size:13px;color:#b6c8d6;line-height:1.7;max-width:420px}
.wd-2026{position:absolute;right:clamp(20px,calc(5 * var(--vw)),80px);bottom:clamp(74px,calc(14 * var(--vh)),140px);
  margin:0;max-width:340px;text-align:right;font-size:clamp(15px,calc(1.7 * var(--vw)),20px);
  line-height:1.8;color:#dfeaf3;z-index:4;font-weight:500}

/* ── 09 尾 ── */
.wd-flow-last{padding-bottom:0}
.wd-coda-h{font-size:clamp(28px,calc(4 * var(--vw)),52px);line-height:1.32;color:#f3f9fd;font-weight:600;
  margin:16px 0 34px;letter-spacing:.01em}
.wd-coda{max-width:720px;font-size:14.5px;line-height:2.1;color:#9fb3c2}
.wd-coda p{margin:0 0 18px}
.wd-coda b{color:#e7f0f7}
.wd-final{margin:clamp(44px,calc(8 * var(--vh)),86px) 0 0;padding-top:clamp(30px,calc(5 * var(--vh)),48px);border-top:1px solid #182430;
  max-width:780px}
.wd-final p{font-size:clamp(17px,calc(2.1 * var(--vw)),24px);line-height:1.85;color:#dfeaf3;margin:0 0 18px;
  letter-spacing:.01em}
.wd-final-you{font-size:clamp(24px,calc(3.6 * var(--vw)),42px)!important;color:#ffd9a0!important;font-weight:600;
  letter-spacing:.06em;margin-top:26px!important}
.wd-return{display:flex;align-items:center;gap:clamp(22px,calc(4 * var(--vw)),46px);margin:clamp(54px,calc(9 * var(--vh)),96px) 0 0;
  padding:clamp(26px,calc(4 * var(--vh)),40px);border:1px solid #172634;border-radius:6px;
  background:linear-gradient(100deg,#0c1620,#080e14)}
.wd-return-earth{flex:none;width:clamp(76px,calc(10 * var(--vw)),124px);aspect-ratio:1;border-radius:50%;
  background:url(textures/planets/earth.webp) 30% 50%/cover;
  box-shadow:inset -26px -18px 44px 6px rgba(3,7,12,.95),0 0 54px 6px rgba(96,164,220,.18)}
.wd-return p{margin:8px 0 16px;font-size:13px;line-height:1.95;color:#93a8b7;max-width:520px}
.wd-back{display:inline-flex;align-items:center;gap:10px;background:var(--accent);color:#1c1f22;
  padding:12px 22px;border-radius:3px;font-size:13px;font-weight:600;transition:background .18s}
.wd-back:hover{background:#f0cc91}
.wd-src{margin:40px 0 0;padding-bottom:40px;font-size:10px;line-height:1.95;color:#4f6577;max-width:780px}

/* ── 手机 ── */
@media(max-width:900px){html:not(.land) .wd-earth{right:-46%;top:58%;opacity:.56;width:min(720px,calc(126 * var(--vw)))}html:not(.land) .wd-hero::after{background:linear-gradient(180deg,rgba(7,11,17,.94) 0%,rgba(7,11,17,.70) 26%,
    rgba(7,11,17,.44) 52%,rgba(7,11,17,.86) 100%)}html:not(.land) .wd-hero{padding-top:64px}html:not(.land) .wd-gate-wrap{grid-template-columns:1fr;gap:24px}html:not(.land) .wd-gate-fig{order:-1}html:not(.land) .wd-gate-tabs{grid-template-columns:1fr 1fr}html:not(.land) .wd-track-title{font-size:22px}html:not(.land) .wd-people{grid-template-columns:repeat(auto-fill,minmax(238px,1fr))}html:not(.land) .wd-fests{grid-template-columns:1fr}html:not(.land) .wd-beacon{width:min(340px,calc(52 * var(--vw)))}
}
@media(max-width:760px){html:not(.land) .wd-hero{min-height:560px}html:not(.land) .wd-hero-stats{gap:16px}html:not(.land) .wd-hero-stats>div{padding-right:16px}html:not(.land) .wd-stats span{font-size:9px}html:not(.land) .wd-2026{position:static;text-align:left;max-width:none;margin:0 clamp(20px,calc(5 * var(--vw)),80px) 90px;font-size:15px}html:not(.land) .wd-subs{height:210px;width:min(560px,calc(86 * var(--vw)))}html:not(.land) .wd-subs p{font-size:17px}html:not(.land) .wd-beacon{top:30%;transform:none;right:auto;left:clamp(20px,calc(5 * var(--vw)),80px);width:min(420px,calc(84 * var(--vw)));
    padding:16px 18px;border-radius:6px;
    background:linear-gradient(180deg,rgba(6,10,15,.93),rgba(6,10,15,.72));
    border:1px solid #14202b}html:not(.land) .wd-beacon p{font-size:11.5px}html:not(.land) .wd-subs-7{bottom:52px}html:not(.land) .wd-era-col{flex:0 0 calc(78 * var(--vw));height:calc(42 * var(--vh))}html:not(.land) .gc-i{display:none}html:not(.land) .wd-track-ticks{display:none}html:not(.land) .wd-track-now{display:none}html:not(.land) .wd-track-clip{margin-top:18px}html:not(.land) .wd-track-rail{margin-top:18px;padding-bottom:0}html:not(.land) .wd-track-top{flex-direction:column;align-items:flex-start;gap:14px}html:not(.land) .wd-track-now{text-align:left}html:not(.land) .wd-track-title{font-size:20px}html:not(.land) .wd-pin{height:calc(200 * var(--vh))}html:not(.land) .wd-pin-track{height:calc(340 * var(--vh))}html:not(.land) .wd-dates{bottom:96px;gap:12px}html:not(.land) .wd-dates p{font-size:12px}html:not(.land) .wd-return{flex-direction:column;align-items:flex-start}html:not(.land) .wd-read{max-width:none}html:not(.land) .wd-prose{font-size:14.5px}
}
@media(max-width:520px){html:not(.land) .wd-hero-coord{display:none}html:not(.land) .wd-hud{top:72px;right:16px}html:not(.land) .wd-hud-big b{font-size:34px}html:not(.land) .wd-hud-row i{width:64px}html:not(.land) .wd-kick{top:70px;left:16px}html:not(.land) .wd-subs{left:16px;bottom:104px;width:calc(100% - 32px);height:230px}html:not(.land) .wd-subs p{font-size:16px;line-height:1.7}html:not(.land) .wd-beacon{left:16px;width:calc(100% - 32px)}html:not(.land) .wd-count b{font-size:26px}html:not(.land) .wd-dates{left:16px;right:16px;bottom:84px}html:not(.land) .wd-dates>div{grid-template-columns:48px minmax(0,1fr)}html:not(.land) .wd-2026{margin-left:16px;margin-right:16px}html:not(.land) .wd-gate-tabs{grid-template-columns:1fr}html:not(.land) .wd-flow{padding-top:64px}html:not(.land) .wd-coda-h{font-size:26px}
}

/* ═══════════════════════════════════════════════════════════════════════
   手机横屏模式 / LANDSCAPE-FORCED（2026-10-18）
   竖屏打开时，整页顺时针转 90° 铺满屏幕 —— 这个站的两个主场景（星图、地球档案）
   本来就是按宽画幅设计的，竖着塞进去只能靠缩，不如直接横过来。

   实现要点，缺一条就会错位：
   ① body 变成 100vh × 100vw 的**固定滚动容器**再旋转；html 不能滚。
      ⚠️ 旋转后 body 成了滚动容器，window 的 scroll 事件就不再触发 ——
         world.mjs 里统一走 scrollTop()/viewH() 两个 helper，别直接读 scrollY。
   ② 旋转后「内容里的 1vh」= 真实视口的 1vw，所以根变量 --vh / --vw 必须对调。
      全站的 vh/vw 都已改写成 calc(N * var(--vh)) 形式，只有这样才能跟着换。
   ③ 只在竖屏 + 粗指针 + 窄屏时生效；用户把手机横过来，媒体查询失效，
      自然回到正常的横向布局（同一份 CSS，不需要 JS 干预）。
   ④ 顶栏的「竖屏」按钮把 html.land 去掉并记住选择 —— 长文页横着读并不舒服。
   ═══════════════════════════════════════════════════════════════════════ */
#land-toggle{display:none}
@media (orientation:portrait) and (pointer:coarse) and (max-width:960px){html.land{--vh:1vw;--vw:1vh;height:100%;overflow:hidden;background:#070b11}html.land body{
    position:absolute;left:0;top:0;
    /* 旋转前 body 的**物理尺寸**是「宽 = 视口高、高 = 视口宽」，尺寸一律由 JS 量成 px 写进变量
       （app.mjs 的 syncLandSize / index.html 头部脚本）。
       ⚠️⚠️ 绝不能用 vh/vw：微信内置浏览器（X5）把 100vh 算成**视口宽**，body 变成一个 420×420 的
       方块 —— 用户看到的就是「只有上半屏有内容，下面全黑」（2026-10-19 实测）。变量缺失时才退回 vh/vw。 */
    width:var(--land-w,100vh);height:var(--land-h,100vw);
    margin:0;overflow-y:auto;overflow-x:hidden;
    /* 转 90° 后整块落到画面左侧，再沿「旋转后的 y 轴」往上推回原位。
       ⚠️⚠️ 用 translateY(-100%)（依赖元素**实际**高度）而不是 translate(var(--land-h),0)：
       后者一旦变量缺失/滞后（X5 里 --land-w 来自 innerHeight，工具栏收起时会变），
       平移量就和真实高度对不上 —— 用户看到的就是「只显示左边一半」（2026-10-27 报）。
       用百分比平移，左边缘永远贴屏幕左边，变量只影响内容够不够长。 */
    transform:rotate(90deg) translateY(-100%);transform-origin:0 0;
    /* ⚠️ 旋转后的原生滑动在多个手机内核里直接失效（系统浏览器「拖不动」）——
       所以关掉原生手势，滚动手势由 app.mjs 的 setupLandScroll 直接写 scrollTop。 */
    touch-action:none;-webkit-overflow-scrolling:auto;overscroll-behavior:none;
  }/* 旋转以后滚动条会竖在画面上，藏掉更干净 */
  html.land body::-webkit-scrollbar{width:0;height:0}
  /* 竖屏时代的「矮屏兜底」横过来以后反而成了累赘：.wd-hero 的 min-height:600 /
     .wd-stage 的 560 都高于 390 的内容视口，会让每一屏都露出下一屏的一角。 */
  html.land .wd-hero,html.land .wd-stage{min-height:0}
  /* ⚠️ 地球档案首屏：横屏下 hero 正好一屏高、内容垂直居中，但顶栏是 position:fixed 的 58px
     —— 于是首屏第一行（ORIGIN LOG 小标）跑到 top=-19 被顶栏吃掉，大标题上半截被裁，
     底部「向下滚动 · 开始纪年」又落到 395（可视 375）出面屏外。竖屏靠 `html:not(.land) .wd-hero
     {padding-top:64px}` 躲开了顶栏，横屏这一档没有对应规则，2026-10-27 巡检发现。
     改法：① 给顶栏让出 58px；② 高度改成 auto + min-height 一屏，内容再多也只是把这一屏撑高一点，
     不会被裁；③ 把纵向节奏压紧，让它真的塞得进 390/375 高的画幅。 */
  html.land .wd-hero{height:auto;min-height:calc(100 * var(--vh));
    padding:58px clamp(20px,calc(6 * var(--vw)),88px) 12px}
  html.land .wd-hero h1{font-size:clamp(44px,calc(7 * var(--vw)),88px)}
  html.land .wd-hero-sub{margin-top:14px}
  html.land .wd-hero-lede{margin-top:12px;max-width:560px;font-size:12.5px;line-height:1.7}
  html.land .wd-hero-stats{margin-top:12px}
  html.land .wd-cue{margin-top:10px}
  html.land .wd-cue i{height:20px}
  html.land .wd-cue i::after{top:-20px}
  html.land .wd-hero-coord{bottom:12px}
  /* 压暗幕是**百分比**渐变，横屏画幅宽了一倍 → 同一段文字落在更透明的区段，
     12.5px 的正文直接压在南美洲的亮面上，小屏横屏尤其糊（2026-10-27 巡检看截图发现）。
     横屏单独把暗场拉长到 82%，右侧 18% 留给球体高光。 */
  html.land .wd-hero::after{background:linear-gradient(90deg,#070b11 0%,rgba(7,11,17,.97) 30%,
    rgba(7,11,17,.88) 52%,rgba(7,11,17,.55) 68%,rgba(7,11,17,.12) 84%,rgba(7,11,17,0) 100%)}
  /* 左下角的舱段索引在 844 宽的横画幅里正好压在太阳上（竖屏时代它是隐藏的，不用管） */
  html.land .solar-index{display:none}
  /* 标签第三行（星球用途）。竖屏 390 宽的年代它被压得只能砍掉；
     横屏画幅有 844 宽、行星间距翻倍，第三行完全放得下 —— 必须显示，
     否则「每颗星球旁边写它通向哪个板块」这条信息就没了（2026-10-27 用户报）。 */
  html.land .solar-label i{display:block;margin-top:3px;font-size:9px;letter-spacing:1px;color:#8fb0c4}
  html.land .solar-label.off i{display:none}
  html.land .solar-label.gate::before{display:none}
  /* ⚠️ 固定定位 + 毛玻璃 在横屏档是性能杀手：body 被旋转、还在滚，
     顶栏下面的内容每帧都变 → 每帧重算一次背景模糊。X5 里直接掉成个位数帧率。
     横屏档换成近乎不透明的实底，视觉几乎看不出差别。 */
  html.land .solar-nav,html.land #sound-btn,html.land .sound-panel,html.land #land-toggle{
    -webkit-backdrop-filter:none;backdrop-filter:none}
  html.land .solar-nav{background:rgba(8,13,19,.97)}
  /* ⚠️ 横屏画幅只有 390 高，右下角那颗「声场」正好压在加点的筛选 chip、星图海王星标签上
     （2026-10-27 巡检发现）。横屏档直接收起来 —— 星图音效不是必须，退回竖屏就回来了。 */
  html.land #sound-btn{display:none}
  /* 「竖屏」开关原来钉在左下角，正好压住卡片第一列；挪进顶栏的空档（登录/注册 与 ? 之间）
     ⚠️ 星图首页例外：那页顶栏右侧是「登录/注册/?」三件紧挨着，没有空档，硬塞会互相压住 ——
     星图左下角本来就是空的，还是钉回左下角。 */
  html.land #land-toggle{left:auto;right:66px;bottom:auto;top:11px}
  html.land body.solar-on #land-toggle{left:14px;right:auto;top:auto;bottom:12px}
  #land-toggle{display:flex;align-items:center;gap:6px;position:fixed;
    left:14px;bottom:12px;z-index:80;padding:5px 10px;border:1px solid #33465a;
    border-radius:3px;background:rgba(9,15,23,.96);
    color:#8fa5b6;font-size:10px;letter-spacing:1.2px}#land-toggle:hover{color:var(--accent);border-color:#4a5f74}
  /* ⚠️ 竖屏内容页（星图以外）也把「横屏」挪进顶栏空档。
     上一轮只改了横屏那一档，竖屏档还钉在左下角 —— 于是它压住正文：
     图鉴压住详情 h2、加点压住型号标题、world 页正好压住 .wd-gate-call 这个可点按钮，
     sources 压住卡片正文（2026-10-27 巡检发现）。
     竖屏顶栏 50 高，「注册」到「?」之间是空档：390 宽落在 [291,346]、360 宽 [261,316]、
     320 宽 [227,276]（「注册」到 220，「?」从 282 起），都不压任何按钮。 */
  html:not(.land) body:not(.solar-on) #land-toggle{
    left:auto;right:44px;top:10px;bottom:auto;padding:5px 8px;letter-spacing:.8px}
}

/* ── 护航对战模拟器（海王星） ─────────────────────────────────────────────
   独立 Python 服务，nginx 反代在 /sim/，这里只用 iframe 装一层壳。
   ⚠️ 高度用站点自定义的 --vh，别写 100vh —— 横屏模式下 100vh 是错的，
      微信 X5 更会把它当成视口宽度（踩过，页面变正方形）。 */
body.sim-on{background:#eef1f7}
/* ⚠️ !important 是必要的：窄屏媒体查询里有 `html:not(.land) main{padding:58px 16px 0}`
   给固定导航让位，特异性与这里相同、且在文件更后面，不加就压不住 ——
   表现为 iframe 左右各缩 16px、整体下移 58px。 */
body.sim-on main{margin:0 !important;padding:0 !important;max-width:none}
body.sim-on .topbar{display:none}
body.sim-on footer{display:none}
#page-sim{height:calc(100*var(--vh))}
#sim-shell{position:relative;height:100%;background:#eef1f7;display:flex;flex-direction:column;
  padding-top:var(--sim-top,58px)}
/* 顶部让开固定的星域导航条。高度由 mountSim() 用 offsetHeight 量出来写进
   --sim-top —— 桌面 58px、手机档 50px，写死任一个都会错。
   （不能用 getBoundingClientRect：land 模式下取到的是旋转后的外接矩形。）
   ⚠️ 用 flex 撑高，别用 absolute+inset：iframe 是 replaced element，
      实测 inset 拉伸拿不到高度，会退回浏览器默认的 150px。 */
#sim-frame{flex:1 1 auto;width:100%;min-height:0;height:auto;
  border:0;display:block;background:#eef1f7}
#sim-loading{position:absolute;inset:var(--sim-top,58px) 0 0 0;display:flex;flex-direction:column;
  align-items:center;justify-content:center;gap:14px;color:#5a6478;font-size:12px;z-index:2}
#sim-loading.done{display:none}
#sim-open{position:absolute;right:14px;bottom:12px;z-index:3;font-size:11px;letter-spacing:.5px;
  color:#5a6478;background:rgba(255,255,255,.9);border:1px solid #d9dfeb;border-radius:3px;
  padding:5px 10px;text-decoration:none}
#sim-open:hover{color:#1e2433;border-color:#b9c3d4;text-decoration:none}
html.land #sim-open{display:none}   /* 横屏画幅只有 390 高，别挡操作 */

/* ═══ 加点推荐 · 天王星 ═══════════════════════════════════════
   独立满屏层：进来时要撤掉 main 的居中容器与内边距，
   顶部让位高度由 mountPoints() 量 #solar-nav 写进 --pts-top。 */
body.points-on{background:#080d14}
body.points-on main{margin:0!important;padding:0!important;max-width:none}
body.points-on .topbar,body.points-on footer{display:none}

/* 礼装评价：点木星进来，撤掉 main 居中容器，让版块铺满 */
body.lizhuang-on{background:#080d14}
body.lizhuang-on main{margin:0!important;padding:0!important;max-width:none}
body.lizhuang-on .topbar,body.lizhuang-on footer{display:none}

.pts-wrap{max-width:1480px;margin:0 auto;padding:calc(var(--pts-top,58px) + 26px) 30px 60px}
.pts-head{display:flex;align-items:flex-end;justify-content:space-between;gap:24px;padding:14px 0 26px;border-bottom:1px solid #1d2833}
.pts-head h1{font-size:40px;letter-spacing:1px;margin:6px 0 8px}
.pts-head h1 span{font-family:"Microsoft YaHei",sans-serif;font-size:15px;color:#7f93a4;font-weight:400;margin-left:14px;letter-spacing:1px}
.pts-lede{color:#8ba0b1;font-size:12.5px;line-height:1.9;margin:0;max-width:640px}
.pts-back{flex:none;align-self:flex-start;margin-top:6px}

/* 型号标签切换 */
.pts-variant-nav{display:flex;flex-wrap:wrap;gap:8px;padding:16px 0 0}
.pts-vtab{border:1px solid #223140;border-radius:5px;background:linear-gradient(160deg,#0f1822,#0b1219);padding:9px 14px;text-align:left;transition:border-color .15s,background .15s}
.pts-vtab b{display:block;font-size:13px;font-weight:500;color:#cfdae3;letter-spacing:.5px}
.pts-vtab i{display:block;font-size:10px;color:#5d7483;font-family:Bahnschrift,monospace;margin-top:3px;font-style:normal}
.pts-vtab:hover{border-color:#3b4f61}
.pts-vtab[aria-pressed=true]{border-color:#5a4527;background:linear-gradient(160deg,#1a1610,#12100a)}
.pts-vtab[aria-pressed=true] b{color:var(--accent)}
.pts-vtab[aria-pressed=true] i{color:#9d7f45}
.pts-variant-nav:only-child{display:none}

.pts-grid{display:grid;grid-template-columns:296px minmax(0,1fr);gap:26px;margin-top:26px;align-items:start}

/* 左栏 */
.pts-panel{display:grid;gap:18px;position:sticky;top:calc(var(--pts-top,58px) + 18px)}
.pts-block{border:1px solid #1e2b37;border-radius:6px;background:linear-gradient(160deg,#0e1620,#0b1219);padding:18px}
.pts-label{display:flex;align-items:baseline;justify-content:space-between;font-size:10px;letter-spacing:2px;color:#6f8697;margin:0 0 12px}
.pts-label output{font-family:Bahnschrift,monospace;font-size:26px;color:var(--accent);letter-spacing:0}
.pts-row{display:flex;gap:8px;align-items:center;margin-top:10px}
.pts-row input[type=number]{flex:1;font-family:Bahnschrift,monospace;font-size:16px;padding:9px 10px;text-align:center}
.pts-row .ghost{flex:none}
.pts-hint{font-size:10.5px;color:#5d7483;line-height:1.75;margin:10px 0 0}
#pts-range{accent-color:var(--accent);width:100%;height:20px;margin:2px 0 0;cursor:pointer}

.pts-profiles{display:grid;gap:7px}
.pts-profile{display:block;width:100%;text-align:left;padding:9px 11px;border:1px solid #223140;border-radius:4px;background:#0c141c;transition:border-color .15s,background .15s}
.pts-profile b{display:block;font-size:13px;font-weight:500;color:#cfdae3;letter-spacing:.5px}
.pts-profile i{display:block;font-style:normal;font-size:10px;color:#63798a;line-height:1.6;margin-top:3px}
.pts-profile:hover{border-color:#3b4f61}
.pts-profile[aria-pressed=true]{border-color:var(--accent);background:#1a1710}
.pts-profile[aria-pressed=true] b{color:var(--accent)}
.pts-profile[aria-pressed=true] i{color:#a08b62}

.pts-modrow{display:flex;flex-direction:column;align-items:stretch;gap:6px;margin-bottom:12px}
.pts-modrow>span{font-size:10px;letter-spacing:1px;color:#6f8697;display:flex;align-items:center;gap:6px}
.pts-modrow>span .pts-nd-flag{font-style:normal;font-size:9px;color:#c9a468;border:1px solid #4a3d26;border-radius:2px;padding:0 4px;flex:none}
.pts-modrow>span .pts-core-flag{font-style:normal;font-size:9px;font-weight:600;color:#ff6b6b;border:1px solid #5a2a2a;background:#2a1216;border-radius:2px;padding:0 4px;flex:none}
.pts-corelock{border-left:2px solid #7a2a2a;padding-left:9px}
.pts-ndtoggle.is-locked{cursor:default;border-color:#5a2a2a;background:#1a1014}
.pts-ndtoggle.is-locked[aria-pressed=true]{border-color:#5a2a2a;background:#1a1014}
.pts-ndtoggle.is-locked b{color:#d98a8a}
.pts-ndtoggle.is-locked i{color:#a05a5a}
.pts-mods{display:flex;flex-direction:column;gap:4px}
.pts-mods button{font-size:11px;padding:7px 10px;border:1px solid #223140;border-radius:4px;color:#8ea2b2;background:#0c141c;text-align:left;line-height:1.4;cursor:pointer;transition:border-color .12s,color .12s,background .12s}
.pts-mods button b{font-weight:500}
.pts-mods button:hover{border-color:#3a5565;color:#b7c9d4}
.pts-mods button[aria-pressed=true]{border-color:var(--accent);color:#ffe9c4;background:#231c10}
.pts-mods button[aria-pressed=true] b::before{content:"✓ ";color:var(--accent);font-weight:700}

.pts-ndrow{border-top:1px solid #18242e;padding-top:10px;margin-top:2px}
.pts-nd{display:flex;align-items:center;gap:8px}
.pts-ndtoggle{flex:1;display:flex;align-items:center;justify-content:space-between;gap:8px;padding:8px 10px;border:1px solid #223140;border-radius:4px;background:#0c141c;color:#8ea2b2;cursor:pointer;text-align:left;transition:border-color .12s,color .12s,background .12s}
.pts-ndtoggle b{font-size:11px;font-weight:500}
.pts-ndtoggle i{font-style:normal;font-size:10px;color:#5e7688}
.pts-ndtoggle[aria-pressed=true]{border-color:var(--accent);color:#ffe9c4;background:#231c10}
.pts-ndtoggle[aria-pressed=true] b{color:#ffe9c4}
.pts-ndtoggle[aria-pressed=true] i{color:#e7b86a}
.pts-nd em{font-style:normal;font-size:10px;color:#c9a468;flex:none;white-space:nowrap}

.pts-defaultrow .pts-default{display:flex;align-items:center;justify-content:space-between;gap:8px;font-size:11px;padding:7px 10px;border:1px solid #223140;border-radius:4px;color:#8ea2b2;background:#0c141c}
.pts-defaultrow .pts-default i{font-style:normal;font-size:10px;color:#5e7688;flex:none}

.pts-ph{display:flex;align-items:center;justify-content:space-between;gap:8px;font-size:11px;padding:7px 10px;border:1px dashed #2a3a45;border-radius:4px;color:#5e7688;background:#0a1118;cursor:not-allowed;opacity:.7}
.pts-ph i{font-style:normal;font-size:9px;color:#7d8a92;border:1px solid #3a454d;border-radius:2px;padding:0 5px;flex:none}

.pts-list{margin:0;padding-left:15px}
.pts-list li{font-size:10.5px;line-height:1.85;color:#7d919f;margin-bottom:5px}
.pts-list b{color:#a9bfcc;font-weight:500}

.pts-syslist{display:flex;flex-direction:column;gap:4px}
.pts-sysrow{display:flex;align-items:center;gap:8px;font-size:11px;padding:6px 8px;border:1px solid #1c2934;border-radius:4px;background:#0c141c}
.pts-sysrow b{font-family:Bahnschrift,monospace;font-size:10px;letter-spacing:1px;color:var(--accent);border:1px solid #4a3d26;border-radius:2px;padding:1px 5px;flex:none}
.pts-sysrow span{color:#a9bdca;flex:1;line-height:1.3}
.pts-sysrow em{font-style:normal;font-size:10px;color:#5e7688;flex:none}
.pts-sysrow i.pts-sys-act{font-style:normal;font-size:10px;color:#c9a468;border:1px solid #4a3d26;border-radius:2px;padding:1px 5px;flex:none}
.pts-sysrow i.pts-sys-core{font-style:normal;font-size:10px;font-weight:600;color:#ff6b6b;border:1px solid #5a2a2a;background:#2a1216;border-radius:2px;padding:1px 6px;flex:none}
.pts-sysrow.is-nondefault{border-color:#3a3226}

/* 右栏 */
.pts-main{display:grid;gap:18px;min-width:0}
.pts-summary{display:grid;grid-template-columns:repeat(4,1fr);gap:1px;background:#1b2733;border:1px solid #1b2733;border-radius:6px;overflow:hidden}
.pts-summary>div{background:#0d151d;padding:15px 18px}
.pts-summary span{display:block;font-size:10px;letter-spacing:2px;color:#647c8d;margin-bottom:3px}
.pts-summary b{font-family:Bahnschrift,monospace;font-size:31px;font-weight:400;color:#dce8ef;line-height:1.2}
.pts-summary b.hot{color:var(--accent)}
.pts-summary i{font-style:normal;font-size:10px;color:#4f6879;margin-left:4px}
.pts-summary-note{font-size:11.5px;color:#7f95a5;margin:-6px 0 0;line-height:1.8}

.pts-cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(268px,1fr));gap:14px}
.pts-card{border:1px solid #1e2b37;border-radius:6px;background:#0d151d;padding:16px 17px}
.pts-card header{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;padding-bottom:11px;margin-bottom:12px;border-bottom:1px solid #1a2531}
.pts-card header b{font-family:Bahnschrift,monospace;font-size:11px;letter-spacing:1px;color:var(--accent);border:1px solid #4a3d26;border-radius:2px;padding:2px 6px;margin-right:8px}
.pts-card header span{font-size:11.5px;color:#9db1c0;line-height:1.40}
.pts-card-cost{font-family:Bahnschrift,monospace;font-size:22px;color:#dbe7ee;line-height:1;flex:none}
.pts-card-cost i{font-style:normal;font-size:9px;color:#6d8596;margin-left:5px;letter-spacing:.5px}
.pts-tag{color:#c9a468}
.pts-tag.pts-core{color:#ff6b6b;border:1px solid #5a2a2a;background:#2a1216;border-radius:2px;padding:1px 5px}

.pts-nodes{display:grid;gap:9px}
.pts-node-head{display:flex;align-items:baseline;justify-content:space-between;gap:10px}
.pts-node-head span{font-size:11.5px;color:#a5b8c6}
.pts-node-head b{font-family:Bahnschrift,monospace;font-size:13px;font-weight:400;color:#d7e3eb}
.pts-node-head b i{font-style:normal;font-size:9px;color:#5e7688}
.pts-bar{height:3px;background:#16212c;border-radius:2px;margin-top:5px;overflow:hidden}
.pts-bar i{display:block;height:100%;background:linear-gradient(90deg,#6f5527,var(--accent));border-radius:2px}

.pts-table-card{border:1px solid #1e2b37;border-radius:6px;background:#0d151d;padding:20px 22px}
.pts-table-head{display:flex;align-items:baseline;justify-content:space-between;gap:14px;margin-bottom:12px}
.pts-table-head h2{font-size:17px;margin:0}
.pts-table-head span{font-size:10px;color:#5d7483}
.pts-table{width:100%;border-collapse:collapse}
.pts-table th{text-align:left;font-weight:400;font-size:11.5px;color:#8ea2b2;padding:7px 0;border-bottom:1px solid #16212c}
.pts-table td{padding:7px 0;border-bottom:1px solid #131d26}
.pts-num{text-align:right;font-family:Bahnschrift,monospace;font-size:14px;color:#d5e2ea;white-space:nowrap}
.pts-num small{font-size:9px;color:#5e7688;margin-left:3px}
.pts-dim{color:#6c8496;font-size:12px}
.pts-foot{font-size:10.5px;color:#697f8f;line-height:1.9;border-top:1px solid #16212c;padding-top:14px;margin-top:2px}
.pts-foot p{margin:0 0 5px}
.pts-empty{color:#6d8596;font-size:12px;padding:20px 0}

@media(max-width:1000px){
  html:not(.land) .pts-grid{grid-template-columns:1fr}
  html:not(.land) .pts-panel{position:static}
}
@media(max-width:600px){
  html:not(.land) .pts-wrap{padding:calc(var(--pts-top,58px) + 14px) 14px 40px}
  html:not(.land) .pts-head{display:block;padding:6px 0 18px}
  html:not(.land) .pts-head h1{font-size:29px}
  html:not(.land) .pts-head h1 span{display:block;margin:7px 0 0;font-size:12px}
  html:not(.land) .pts-back{margin-top:14px}
  html:not(.land) .pts-summary{grid-template-columns:repeat(2,1fr)}
  html:not(.land) .pts-summary b{font-size:25px}
  html:not(.land) .pts-cards{grid-template-columns:1fr}
  html:not(.land) .pts-table-head{display:block}
  html:not(.land) .pts-table-head span{display:block;margin-top:4px}
}
html.land .pts-panel{position:static}
html.land .pts-wrap{padding:calc(var(--pts-top,58px) + 16px) 22px 44px;max-width:none}
html.land .pts-head h1{font-size:30px}

/* 署名：算法与数据来源 */
.pts-credit{display:inline-block;margin:14px 0 0;padding:6px 12px;border:1px solid #3d3323;border-radius:3px;
  background:#16130d;color:#a3906c;font-size:11px;letter-spacing:.5px}
.pts-credit b{color:var(--accent);font-weight:600;letter-spacing:1px}
.pts-sign{margin-top:10px!important;padding-top:9px;border-top:1px dashed #1e2b37;color:#8a795a;
  font-size:10.5px;letter-spacing:1.5px}

/* ── 舰船加点图鉴（非超主力舰） ─────────────────────────────────────
   满屏层，和 points 同一套：撤掉 main 的容器与内边距，顶部让位量 --flt-top。
   ⚠️ 不用内部 overflow 容器：横屏档滚动被接管为 body.scrollTop，容器滚不动。 */
body.fleetpts-on{background:#080d14}
body.fleetpts-on main{margin:0!important;padding:0!important;max-width:none}
body.fleetpts-on .topbar,body.fleetpts-on footer{display:none}

.flt-wrap{max-width:1480px;margin:0 auto;padding:calc(var(--flt-top,58px) + 26px) 30px 60px}
.flt-head{display:flex;align-items:flex-end;justify-content:space-between;gap:24px;padding:14px 0 22px;border-bottom:1px solid #1d2833}
.flt-head h1{font-size:40px;letter-spacing:1px;margin:6px 0 8px}
.flt-head h1 span{font-family:"Microsoft YaHei",sans-serif;font-size:15px;color:#7f93a4;font-weight:400;margin-left:14px;letter-spacing:1px}
.flt-lede{color:#8ba0b1;font-size:12.5px;line-height:1.9;margin:0;max-width:660px}
.flt-headbtns{flex:none;align-self:flex-start;margin-top:6px}

.flt-l1{display:grid;grid-template-columns:repeat(auto-fill,minmax(134px,1fr));gap:8px;margin:22px 0 0}
.flt-l1b{border:1px solid #223140;border-radius:5px;background:linear-gradient(160deg,#0f1822,#0b1219);padding:11px 13px;text-align:left;transition:border-color .15s,background .15s}
.flt-l1b b{display:block;font-size:13.5px;font-weight:500;color:#cfdae3;letter-spacing:.5px}
.flt-l1b span{display:block;font-size:10px;color:#5d7483;font-family:Bahnschrift,monospace;margin-top:3px}
.flt-l1b:hover{border-color:#3b4f61}
.flt-l1b[aria-pressed=true]{border-color:#5a4527;background:linear-gradient(160deg,#1a1610,#12100a)}
.flt-l1b[aria-pressed=true] b{color:var(--accent)}
.flt-l1b[aria-pressed=true] span{color:#9d7f45}
.flt-bar{display:flex;align-items:center;justify-content:space-between;gap:18px;margin:16px 0 0;flex-wrap:wrap}
.flt-hint{font-size:11px;color:#6a8294;margin:0}
.flt-search{flex:none;width:230px}
.flt-search input{border:1px solid #223140;background:#0c141c;color:var(--text);border-radius:4px;padding:8px 11px;font-size:12px;width:100%}
.flt-search input::placeholder{color:#4e687b}

.flt-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(214px,1fr));gap:12px;margin-top:20px}
.flt-card{text-align:left;border:1px solid #1e2b37;border-radius:6px;background:linear-gradient(160deg,#0e1620,#0b1219);padding:15px 16px 13px;transition:border-color .15s,transform .15s,background .15s}
.flt-card:hover{border-color:#4a3d26;background:linear-gradient(160deg,#131b24,#0d141c);transform:translateY(-1px)}
.flt-cat{display:inline-block;font-size:9.5px;letter-spacing:1.5px;color:#7f93a4;border:1px solid #232f3b;border-radius:2px;padding:2px 6px}
.flt-card h3{font-size:16px;font-weight:500;margin:9px 0 3px;letter-spacing:.5px;color:#dbe6ee}
.flt-var{font-size:10.5px;color:#63798a;margin:0 0 12px;min-height:16px;line-height:1.5}
.flt-cardfoot{display:flex;justify-content:space-between;border-top:1px solid #16212c;padding-top:9px;font-size:10px;color:#6a8294}
.flt-cardfoot b{font-family:Bahnschrift,monospace;font-size:13px;color:#c6d4de;margin-left:4px;font-weight:400}
.flt-cardfoot b.hot{color:var(--accent)}
.flt-note{font-size:10.5px;color:#697f8f;margin:18px 0 0;line-height:1.85}
.flt-empty{color:#6d8596;font-size:12.5px;padding:28px 0}

.flt-crumb{border:1px solid #2a3946;border-radius:3px;background:#111a23;color:#a9bcca;font-size:11.5px;padding:7px 13px;margin:22px 0 0}
.flt-crumb:hover{border-color:#a17f48;color:var(--accent)}
.flt-crumbs{display:flex;align-items:center;gap:7px;flex-wrap:wrap;margin:22px 0 0;font-size:11.5px;color:#7f93a4}
.flt-crumbs button{border:0;background:none;color:#a9bcca;padding:2px 0;font-size:11.5px}
.flt-crumbs button:hover{color:var(--accent);text-decoration:underline}
.flt-crumbs b{color:#3d4e5c;font-weight:400}
.flt-crumbs span{color:#dbe6ee}
.flt-vwrap{margin:16px 0 18px}
.flt-vlab{font-size:10px;letter-spacing:2px;color:#6f8697;margin:0 0 9px}
.flt-vlab span{color:#4f6879;margin-left:8px;letter-spacing:1px}
.flt-vbar{display:flex;flex-wrap:wrap;gap:7px}
.flt-vb{border:1px solid #223140;border-radius:4px;background:#0b131a;padding:8px 12px;text-align:left;transition:border-color .15s,background .15s}
.flt-vb b{display:block;font-size:12.5px;font-weight:500;color:#b9c9d5;letter-spacing:.5px}
.flt-vb span{display:block;font-size:9.5px;color:#5d7483;font-family:Bahnschrift,monospace;margin-top:2px}
.flt-vb:hover{border-color:#3b4f61}
.flt-vb[aria-pressed=true]{border-color:#5a4527;background:#181309}
.flt-vb[aria-pressed=true] b{color:var(--accent)}
.flt-vb[aria-pressed=true] span{color:#9d7f45}
.flt-vsingle{font-size:11.5px;color:#9db1c0;margin:14px 0 18px;padding:9px 12px;border:1px solid #1e2b37;border-radius:4px;background:#0b131a;display:inline-block}
.flt-vsingle span{color:#5d7483;margin-left:9px;font-size:10.5px}
.flt-super{font-style:normal;font-size:8.5px;color:#c48f4a;border:1px solid #4a3a24;border-radius:2px;padding:1px 4px;margin-left:6px;letter-spacing:.5px}
.flt-shiphead{display:flex;justify-content:space-between;align-items:flex-end;gap:26px;padding:16px 0 18px;border-bottom:1px solid #1d2833;margin-bottom:16px;flex-wrap:wrap}
.flt-shiphead h2{font-size:30px;font-weight:600;margin:0 0 7px;letter-spacing:.5px}
.flt-shiphead h2 span{font-family:"Microsoft YaHei",sans-serif;font-size:14px;color:#7f93a4;font-weight:400;margin-left:12px}
.flt-meta{font-size:11.5px;color:#8299a9;margin:0}
.flt-meta b{color:#3d4e5c;font-weight:400;margin:0 6px}
.flt-kpis{display:flex;gap:1px;background:#1b2733;border:1px solid #1b2733;border-radius:5px;overflow:hidden;flex:none}
.flt-kpis>div{background:#0d151d;padding:10px 16px;min-width:74px}
.flt-kpis span{display:block;font-size:9.5px;letter-spacing:1.5px;color:#647c8d;margin-bottom:2px}
.flt-kpis b{font-family:Bahnschrift,monospace;font-size:22px;font-weight:400;color:#dce8ef}
.flt-kpis b.hot{color:var(--accent)}

.flt-legend{display:flex;align-items:center;gap:18px;flex-wrap:wrap;font-size:10.5px;color:#7d919f;margin-bottom:20px}
.flt-legend>span{display:inline-flex;align-items:center;gap:6px}
.flt-sw{width:13px;height:13px;border-radius:2px;border:1px solid #2f4354;background:#101a24;display:inline-block}
.flt-sw.sp{border-color:#3c5b6b;background:#0f2028}
.flt-sw.on{border-color:var(--accent);background:var(--accent)}
.flt-sw.eff{box-shadow:inset 0 -2px 0 #8a6a33}
.flt-legend-note{color:#5d7483;font-size:10px}

.flt-syslist{display:grid;gap:14px}
.flt-sys{border:1px solid #1e2b37;border-radius:6px;background:#0c141b;padding:16px 18px}
.flt-sys header{display:flex;align-items:baseline;gap:11px;padding-bottom:11px;border-bottom:1px solid #16212c}
.flt-sys header>b{font-family:Bahnschrift,monospace;font-size:11px;color:var(--accent);border:1px solid #4a3d26;border-radius:2px;padding:2px 7px;letter-spacing:1px}
.flt-sys header h3{font-size:14px;font-weight:500;margin:0;color:#cfdae3;letter-spacing:.5px}
.flt-slotcount{margin-left:auto;font-size:10.5px;color:#6a8294;font-family:Bahnschrift,monospace;letter-spacing:.5px}
.flt-slotcount em{font-style:normal;color:var(--accent)}
.flt-sys.active{border-color:#3d3323;box-shadow:inset 3px 0 0 #8a6a33}
.flt-vlab em{font-style:normal;font-size:10px;color:#6a8294;margin-left:10px}

.flt-chips{display:flex;flex-wrap:wrap;gap:5px;margin-top:12px;align-items:center}
.flt-chiplab{font-size:9.5px;letter-spacing:1px;color:#5d7483;margin-right:3px}
.flt-chip{border:1px solid #223140;border-radius:3px;background:#0b131a;color:#93a6b5;font-size:11px;padding:6px 9px;text-align:left;line-height:1.35}
.flt-chip em{font-style:normal;color:#5d7483;margin-left:5px;font-size:10px}
.flt-chip:hover{border-color:#3b4f61;color:#cfdae3}
.flt-chip[aria-pressed=true]{border-color:#4c6b7a;background:#122530;color:#bfe4e8}
.flt-chip[aria-pressed=true] em{color:#7fa8b4}
.flt-chip.gen{color:#6c8496;border-style:dashed}
.flt-chip.gen[aria-pressed=true]{border-style:solid}
.flt-def{font-style:normal;font-size:9px;color:#9d7f45;border:1px solid #3d3323;border-radius:2px;padding:1px 4px;margin-left:6px;letter-spacing:.5px;font-weight:400}
.flt-modname{font-size:11.5px;color:#9db1c0;margin:11px 0 0}
.flt-modname em{font-style:normal;color:#5d7483;margin-left:6px;font-size:10px}

.flt-tracks{display:grid;gap:7px;margin-top:12px}
.flt-track{display:flex;align-items:center;gap:4px;flex-wrap:wrap}
.flt-tracklab{font-size:9px;letter-spacing:1.5px;color:#4f6879;width:26px;flex:none}
.flt-slot{width:24px;height:24px;padding:0;border:1px solid #2c3f4e;border-radius:2px;background:#101a24;color:#7d93a5;font-family:Bahnschrift,monospace;font-size:11px;font-style:normal;display:inline-flex;align-items:center;justify-content:center;cursor:pointer;transition:background .12s,border-color .12s,color .12s,transform .1s}
.flt-slot.sp{border-color:#3c5b6b;background:#0f2129;color:#7fb6c4;border-style:dashed}
.flt-slot.eff{box-shadow:inset 0 -2px 0 #8a6a33}
.flt-slot:hover{border-color:#5f7b8e;color:#cfdae3}
.flt-slot:active{transform:scale(.92)}
.flt-slot.on{border-color:var(--accent);background:var(--accent);color:#14100a;border-style:solid;font-weight:600;box-shadow:none}
.flt-slot.sp.on{border-color:var(--accent)}
.flt-effs{list-style:none;margin:13px 0 0;padding:11px 0 0;border-top:1px dashed #1b2733;display:grid;gap:7px}
.flt-effs li{display:flex;gap:9px;font-size:11px;color:#9db1c0;line-height:1.7;align-items:baseline}
.flt-effs b{font-family:Bahnschrift,monospace;font-size:10px;color:var(--accent);border:1px solid #3d3323;border-radius:2px;padding:1px 5px;flex:none}
.flt-effs span{color:#cfdae3;flex:none}
.flt-effs em{font-style:normal;color:#6f8697;font-size:10.5px}

@media(max-width:1180px){
  html:not(.land) .flt-wrap{padding-left:22px;padding-right:22px}
  html:not(.land) .flt-head h1{font-size:33px}
}
@media(max-width:860px){
  html:not(.land) .flt-kpis{width:100%;margin-top:14px}
  html:not(.land) .flt-kpis>div{flex:1;padding:9px 10px;min-width:0}
}
@media(max-width:620px){
  html:not(.land) .flt-wrap{padding:calc(var(--flt-top,58px) + 10px) 14px 96px}
  html:not(.land) .flt-head{display:block;padding:6px 0 14px}
  html:not(.land) .flt-head h1{font-size:26px;margin:4px 0 6px}
  html:not(.land) .flt-head h1 span{display:block;font-size:12px;margin:6px 0 0}
  html:not(.land) .flt-headbtns{margin-top:12px}
  html:not(.land) .flt-lede{display:none}
  html:not(.land) .flt-legend{padding-right:52px}
  html:not(.land) .flt-bar{display:block}
  html:not(.land) .flt-search{width:100%;margin-top:10px}
  html:not(.land) .flt-grid{grid-template-columns:repeat(auto-fill,minmax(148px,1fr));gap:9px}
  html:not(.land) .flt-card{padding:12px 12px 10px}
  html:not(.land) .flt-card h3{font-size:14px}
  html:not(.land) .flt-shiphead h2{font-size:22px}
  html:not(.land) .flt-shiphead h2 span{display:block;margin:6px 0 0}
  html:not(.land) .flt-sys{padding:13px 13px}
  html:not(.land) .flt-slot{width:21px;height:21px;font-size:10px}
  html:not(.land) .flt-effs li{flex-wrap:wrap}
  html:not(.land) .flt-effs em{flex-basis:100%;margin-top:1px}
  html:not(.land) .flt-legend{font-size:10px;gap:11px}
}
html.land .flt-wrap{padding:calc(var(--flt-top,50px) + 16px) 22px 44px;max-width:none}
html.land .flt-head h1{font-size:28px}
html.land .flt-grid{grid-template-columns:repeat(auto-fill,minmax(186px,1fr));gap:10px}
html.land .flt-kpis>div{padding:8px 13px}

/* 加点页头部两个按钮（去图鉴 / 回星图） */
.pts-headbtns{display:flex;gap:7px;align-items:center;flex:none;align-self:flex-start;margin-top:6px}
.pts-headbtns .ghost{margin:0}
@media(max-width:620px){
  html:not(.land) .pts-headbtns{margin-top:14px;width:100%}
  html:not(.land) .pts-headbtns .ghost{flex:1;text-align:center;font-size:11px;padding:8px 6px}
}

/* ── 加点台底部操作条 + 确定页清单 ───────────────────────────── */
.flt-act{display:flex;align-items:center;justify-content:space-between;gap:16px;margin:24px 0 8px;padding:14px 18px;border:1px solid #2a3946;border-radius:6px;background:linear-gradient(120deg,#121b25,#0d151d)}
.flt-actinfo{display:flex;align-items:baseline;gap:8px;font-size:11.5px;color:#7d919f;flex-wrap:wrap}
.flt-actinfo b{font-family:Bahnschrift,monospace;font-size:26px;color:var(--accent);font-weight:400;line-height:1}
.flt-actinfo span{color:#5d7483}
.flt-actinfo em{font-style:normal;color:#6f8697;font-size:10.5px;margin-left:6px}
.flt-go{flex:none;border:1px solid #8a6a33;border-radius:4px;background:#241a0b;color:var(--accent);font-size:13px;letter-spacing:1px;padding:11px 26px;transition:background .15s,border-color .15s}
.flt-go:hover{background:#33220d;border-color:var(--accent)}
.flt-back2{flex:none;border:1px solid #2a3946;border-radius:4px;background:#111a23;color:#a9bcca;font-size:12px;padding:11px 20px}
.flt-back2:hover{border-color:#a17f48;color:var(--accent)}
.flt-resultbtns{display:flex;gap:7px;flex:none;align-self:flex-start;margin-top:6px}
.flt-resultbtns .ghost{margin:0}
.flt-meta .flt-x{color:#3d4e5c;margin:0 6px}

.flt-sum{display:grid;gap:1px;background:#1b2733;border:1px solid #1b2733;border-radius:6px;overflow:hidden;margin-top:4px}
.flt-sumrow{display:flex;gap:14px;align-items:flex-start;background:#0c141b;padding:14px 18px}
.flt-sumrow>b{flex:none;margin-top:1px;font-family:Bahnschrift,monospace;font-size:11px;color:var(--accent);border:1px solid #4a3d26;border-radius:2px;padding:2px 7px;letter-spacing:1px}
.flt-sumrow h4{font-size:13px;font-weight:500;margin:0 0 7px;color:#cfdae3;letter-spacing:.3px}
.flt-sumrow h4 em{font-style:normal;font-size:10.5px;color:#6f8697;margin-left:9px}
.flt-sumnums{margin:0;display:flex;flex-wrap:wrap;align-items:baseline;gap:7px 9px;font-family:Bahnschrift,monospace;font-size:12.5px}
.flt-sumnums .k{font-family:"Microsoft YaHei",sans-serif;font-size:9.5px;letter-spacing:1.5px;color:#5d7483}
.flt-sumnums .v{color:#dbe6ee;letter-spacing:1.5px}
.flt-sumnums .v.sp{color:#7fb6c4}

@media(max-width:620px){
  html:not(.land) .flt-act{flex-wrap:wrap;gap:12px;padding:13px 14px}
  html:not(.land) .flt-actinfo{flex:1;min-width:0}
  html:not(.land) .flt-actinfo b{font-size:22px}
  html:not(.land) .flt-go{flex:1;text-align:center;padding:11px 12px;font-size:12px}
  html:not(.land) .flt-back2{flex:1;text-align:center;padding:11px 12px}
  html:not(.land) .flt-resultbtns{width:100%;margin-top:14px}
  html:not(.land) .flt-resultbtns .ghost{flex:1;text-align:center;font-size:11px;padding:9px 6px}
  html:not(.land) .flt-sumrow{padding:12px 13px;gap:10px}
  html:not(.land) .flt-sumrow h4{font-size:12px}
  html:not(.land) .flt-sumnums{font-size:11.5px;gap:5px 7px}
}

/* ══════════════ 鸣谢名单 / 作者有话说（星门 L001A） ══════════════
   入口：点星图里的「拉格朗日之门」→ 相机飞近 → 门户面板里点「穿过星门」。
   纯静态（index.html 内联 + details 原生折叠），不加载任何脚本。 */
.cr-wrap{max-width:900px;margin:0 auto;padding:0 0 70px}
.cr-head{margin:34px 0 26px}
.cr-lead{font-size:12.5px;line-height:2;color:#879dae;margin:8px 0 0;max-width:620px}
/* 「排列顺序无优劣之分」——现在跟着名单一起进卡片，不再占页面顶栏 */
.cr-top{font-size:11px;letter-spacing:2px;color:#7f95a6;margin:0 0 20px;padding-bottom:12px;
  border-bottom:1px solid var(--line)}
.cr-top::before{content:"※ ";color:#4e677b}

/* ── 两道门：两个一级标题不直接外露，做成卡片入口，默认收起 ──
   视觉对齐「礼装评价」的路线卡：深色渐变 + 1px 边 + 图标 + 标题 + 说明。 */
.cr-gates{display:flex;flex-direction:column;gap:14px}
.cr-gate{border:1px solid #2f4457;border-radius:8px;overflow:hidden;
  background:linear-gradient(140deg,#121b25,#0e1720);transition:border-color .16s,background .16s;
  display:block;width:100%;text-align:left;padding:0;margin:0;font:inherit;color:inherit;cursor:pointer;
  position:relative;padding:24px 24px 22px}
.cr-gate:hover{border-color:var(--accent)}
.cr-gate-ico{display:block;font-size:19px;line-height:1;color:var(--accent);margin-bottom:15px;
  transition:transform .18s}
.cr-gate:hover .cr-gate-ico{transform:translateY(-2px)}
.cr-gate-tt{margin:0;font-size:19px;font-weight:600;letter-spacing:2px;color:#eaf2f6;line-height:1.35}
.cr-gate-desc{display:block;margin-top:9px;font-size:12.5px;letter-spacing:.4px;color:#8ba0b0;
  line-height:1.7;max-width:560px}
.cr-gate-hint{position:absolute;top:22px;right:22px;display:flex;align-items:center;gap:8px;
  font-size:11px;letter-spacing:1.5px;color:#7f95a6;transition:color .16s}
.cr-gate:hover .cr-gate-hint{color:var(--accent)}
.cr-gate-hint .cr-chev{transform:rotate(-135deg) translate(-2px,-2px)}
.cr-gate:hover .cr-gate-hint .cr-chev{border-color:var(--accent)}
.cr-gate-body{padding:20px 22px 26px;border-top:1px solid #1b2833;animation:crIn .2s ease}
.cr-gate-body .cr-group{margin-top:24px}

/* ── 弹窗（鸣谢名单 / 作者有话说）：点卡片弹出，替代原「原地展开」 ── */
.cr-modal{border:none;padding:0;background:transparent;max-width:none;max-height:none;
  color:inherit;width:min(680px,92vw);max-height:86vh;position:relative}
.cr-modal::backdrop{background:rgba(3,7,11,.74);backdrop-filter:blur(3px)}
.cr-modal-x{position:absolute;top:14px;right:14px;width:32px;height:32px;border:1px solid #344755;
  border-radius:50%;background:#0f1a24;color:#8ba0b0;font-size:16px;line-height:1;cursor:pointer;
  z-index:2;transition:color .16s,border-color .16s}
.cr-modal-x:hover{color:var(--accent);border-color:var(--accent)}
.cr-modal-body{background:#0f1a24;border:1px solid #344755;border-radius:12px;padding:26px 28px 30px;
  max-height:86vh;overflow-y:auto;box-shadow:0 18px 60px rgba(0,0,0,.55)}
.cr-modal-body .cr-group{margin-top:0}
.cr-modal-body .cr-top{margin-top:0}
.cr-modal-body .cr-letter{max-width:none}
/* ⚠️ 全局有条 dialog p{font-size:13px;color:var(--muted)} 会吃掉弹窗里所有 <p> 的字号与颜色，
   导致书信正文从 15px 缩成 13px、正文色变灰。这里显式盖回去。 */
.cr-modal-body .cr-letter p{font-size:15px;color:#c3d1db}
.cr-modal-body .cr-letter .cr-salute{font-size:15.5px;color:#dfe9f0}
.cr-modal-body .cr-letter .cr-sign{font-size:13.5px;color:#8ea3b2}
.cr-modal-body .cr-sponsor p{font-size:13.5px;color:#b6c4ce}
/* 一级分组标题：比卡片标题小一档，但用左侧金色竖条压住视觉重心 */
.cr-group{position:relative;font-size:22px;font-weight:500;letter-spacing:1px;color:#eef3f6;
  margin:0 0 16px;padding:2px 0 12px 14px;border-bottom:1px solid var(--line)}
.cr-group::before{content:"";position:absolute;left:0;top:4px;bottom:16px;width:3px;
  background:linear-gradient(180deg,var(--accent),#7a5c2c);border-radius:2px}

/* ── 可折叠的二级标题（默认展开） ── */
.cr-fold{border:1px solid #22313d;border-radius:4px;background:linear-gradient(160deg,#111c26,#0d151e);
  margin-bottom:10px;overflow:hidden;transition:border-color .16s}
.cr-fold:hover{border-color:#2f4658}
.cr-fold[open]{border-color:#2c4051}
.cr-fold summary{display:flex;align-items:center;gap:12px;padding:14px 18px;cursor:pointer;
  list-style:none;user-select:none;-webkit-user-select:none}
.cr-fold summary::-webkit-details-marker{display:none}
.cr-fold summary::marker{content:""}
.cr-fold-t{font-size:14px;letter-spacing:1px;color:#cfdde7;font-weight:500;
  display:flex;align-items:baseline;gap:10px;flex-wrap:wrap;min-width:0}
.cr-fold-t em{font-style:normal;font-size:10.5px;letter-spacing:.5px;color:#6d8496;font-weight:400}
/* 箭头：纯 CSS，展开时翻 180° */
.cr-chev{margin-left:auto;flex:none;width:8px;height:8px;border-right:1.5px solid #7f95a6;
  border-bottom:1.5px solid #7f95a6;transform:rotate(45deg) translate(-2px,-2px);transition:transform .22s}
.cr-fold[open] .cr-chev{transform:rotate(-135deg) translate(-2px,-2px);border-color:var(--accent)}
/* ⚠️ 展开时标题只微微提亮，不改金色 —— 六个默认全展开，全金会糊成一片 */
.cr-fold[open] summary .cr-fold-t{color:#e6eef4}
.cr-body{padding:2px 18px 18px;border-top:1px solid #1b2833;animation:crIn .2s ease}
@keyframes crIn{from{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:none}}

/* ── 名单：等宽胶囊，自动换行 ── */
.cr-names{display:flex;flex-wrap:wrap;gap:9px;margin:14px 0 0;padding:0;list-style:none}
.cr-names li{border:1px solid #2b3f4e;background:#0c1720;border-radius:3px;padding:7px 15px;
  font-size:13.5px;letter-spacing:1px;color:#d5e2eb}
.cr-names li.wide{flex:1 0 100%;font-size:13px;letter-spacing:.5px;color:#9fb2c0;line-height:1.9}

/* ── 作者有话说：书信排版 ── */
.cr-letter{max-width:730px;font-size:15px;line-height:2.15;color:#c3d1db;letter-spacing:.3px}
.cr-letter p{margin:0 0 1.05em;text-indent:2em}
.cr-letter .cr-salute{text-indent:0;font-size:15.5px;color:#dfe9f0;letter-spacing:1px;margin-bottom:1.35em}
.cr-letter .cr-wish{text-indent:0;margin-top:1.6em;color:#e7d3ae;letter-spacing:1px}
.cr-letter .cr-sign{text-indent:0;text-align:right;margin:2.4em 0 0;font-size:13.5px;
  color:#8ea3b2;letter-spacing:1.5px}

/* 空五行的呼吸位（用户指定）。⚠️ em 取的是自己这一层的 font-size，
   所以必须显式跟正文一样写 15px，否则会按 body 的 14px 算，只剩 4.5 行。 */
.cr-gap{font-size:15px;height:calc(5 * 2.22em)}

/* ── 赞助 ── */
.cr-sponsor{border:1px solid #4a3d28;border-radius:5px;padding:22px 24px;
  background:linear-gradient(145deg,#1c1811,#11161d)}
.cr-sponsor p{margin:0;font-size:14px;line-height:2.1;color:#d9cbaf}

/* ── 赞赏码：板块最底部 ── */
.cr-qr{margin:38px 0 0;display:flex;flex-direction:column;align-items:center;gap:12px}
.cr-qr img{display:block;width:224px;max-width:62%;height:auto;border-radius:10px;
  background:#fff;padding:7px;box-shadow:0 0 0 1px #2b3f4e,0 10px 30px #0006}
.cr-qr figcaption{font-size:11.5px;letter-spacing:1px;color:#7b909f}

/* 横屏（html.land）专属：横屏舞台可视高只有 390 / 375，而二维码高 215 + 它下方的尾部留白
   （说明 31 + gate-body 26 + wrap 70 + 页脚 94 ≈ 221）已经超过「可视高 − 二维码高」（175 / 160），
   结果是**滚到底时二维码顶部被切掉 47~61px**，页面底部却空着一大块 —— 手机横屏下最该看清的就是这张码。
   只压 credits 自己的底部内边距（不动全站页脚间距），尾部降到 ~145，整张码就能完整落进一屏。 */
html.land .cr-wrap{padding-bottom:4px}
html.land .cr-gate-body{padding-bottom:12px}

@media(max-width:900px){
  html:not(.land) .cr-wrap{padding-bottom:56px}
  html:not(.land) .cr-gate-tt{font-size:18px}
  html:not(.land) .cr-group{font-size:19px}
  html:not(.land) .cr-letter{font-size:14px;line-height:2.05}
}
@media(max-width:600px){
  html:not(.land) .cr-head{margin:22px 0 20px}
  html:not(.land) .cr-lead{font-size:12px;line-height:1.95}
  html:not(.land) .cr-gate{padding:18px 18px 17px}
  html:not(.land) .cr-gate-ico{font-size:17px;margin-bottom:12px}
  html:not(.land) .cr-gate-tt{font-size:17px;letter-spacing:1.5px}
  html:not(.land) .cr-gate-desc{margin-top:7px;font-size:11.5px;line-height:1.65}
  html:not(.land) .cr-gate-hint{top:17px;right:16px;gap:6px;font-size:10px;letter-spacing:1px}
  html:not(.land) .cr-gate-body{padding:16px 16px 20px}
  html:not(.land) .cr-gate-body .cr-group{margin-top:20px}
  html:not(.land) .cr-top{margin-top:0;font-size:10px}
  html:not(.land) .cr-group{font-size:17px;padding-left:11px}
  html:not(.land) .cr-fold summary{padding:12px 14px;gap:9px}
  html:not(.land) .cr-fold-t{font-size:13px}
  html:not(.land) .cr-fold-t em{font-size:9.5px}
  html:not(.land) .cr-body{padding:2px 14px 15px}
  html:not(.land) .cr-names{gap:7px}
  html:not(.land) .cr-names li{padding:6px 12px;font-size:12.5px}
  html:not(.land) .cr-letter{font-size:13.5px;line-height:2}
  html:not(.land) .cr-gap{font-size:13.5px;height:calc(5 * 2em)}
  html:not(.land) .cr-sponsor{padding:17px 16px}
  html:not(.land) .cr-sponsor p{font-size:13px;line-height:1.95}
  html:not(.land) .cr-qr img{width:190px;max-width:70%}
}
