:root{
  --bg:#020b18;--panel:#071526e8;--line:#0a7896;--cyan:#00e8ff;--cyan2:#0aa5c5;--text:#d7f8ff;--muted:#7399a8;--green:#4dff8a;--yellow:#ffd34d;--red:#ff5c76;
}
*{box-sizing:border-box}html,body{margin:0;width:100%;height:100%;overflow:hidden;background:#010712;color:var(--text);font-family:"Microsoft YaHei","PingFang SC",Arial,sans-serif}body{background:radial-gradient(circle at 50% 30%,#073056 0,#041b32 25%,#010916 62%,#00050b 100%)}button,input{font:inherit}.app-shell{height:100vh;min-height:720px;position:relative;background:linear-gradient(180deg,rgba(0,230,255,.03),transparent 18%),repeating-linear-gradient(90deg,rgba(0,220,255,.017) 0 1px,transparent 1px 85px)}.app-shell:before{content:"";position:absolute;inset:0;pointer-events:none;background:linear-gradient(rgba(0,220,255,.015) 1px,transparent 1px);background-size:100% 50px;mix-blend-mode:screen}
button{cursor:pointer}.topbar{height:74px;padding:0 26px;display:grid;grid-template-columns:1.2fr 1.6fr 1fr;align-items:center;border-bottom:1px solid #0a6077;background:linear-gradient(180deg,#071a2aee,#04101cdd);box-shadow:0 3px 22px #00131f;position:relative;z-index:20}.top-left,.top-right{display:flex;align-items:center;gap:12px;font-size:13px;color:#8fc6d1}.top-right{justify-content:flex-end}.time{color:var(--cyan);font-weight:700;letter-spacing:1px}.top-link,.status-button,.operator{background:none;border:0;color:#78adba;padding:12px 8px}.top-link:hover,.status-button:hover,.operator:hover{color:#d8fbff;background:#0a2c3c66}.top-link.active{color:var(--cyan);border-bottom:2px solid var(--cyan)}.title-wrap{position:relative;text-align:center}.title-wrap h1{font-size:20px;letter-spacing:2px;margin:0;color:#c9fbff;text-shadow:0 0 12px #00dfff}.title-wing{position:absolute;top:50%;width:100px;height:2px;background:linear-gradient(90deg,transparent,var(--cyan),transparent)}.title-wing.left{left:-4px}.title-wing.right{right:-4px}.status-dot{display:inline-block;width:8px;height:8px;border-radius:50%;background:var(--green);box-shadow:0 0 10px var(--green);margin-right:7px}.operator{border-left:1px solid #235064;padding-left:14px}
.dashboard{height:calc(100vh - 74px);min-height:646px;display:grid;grid-template-columns:285px 1fr 315px;grid-template-rows:1fr 150px;gap:12px;padding:12px 16px 14px;position:relative}.glass-border{border:1px solid #0c6077;background:linear-gradient(180deg,rgba(5,26,43,.94),rgba(3,15,29,.9));box-shadow:inset 0 0 28px rgba(0,199,236,.04),0 0 20px rgba(0,100,150,.08);position:relative}.glass-border:before,.glass-border:after{content:"";position:absolute;width:18px;height:18px;border-color:var(--cyan);pointer-events:none}.glass-border:before{left:-1px;top:-1px;border-left:2px solid;border-top:2px solid}.glass-border:after{right:-1px;bottom:-1px;border-right:2px solid;border-bottom:2px solid}.glass-mini{border:1px solid #0a5870;background:#061725db;box-shadow:inset 0 0 18px #00dfff0a}.panel{padding:14px}.section-head{display:flex;align-items:center;gap:10px;margin:2px 0 11px;color:#bfeff7;font-size:13px}.section-head.second{margin-top:14px}.section-head i{height:1px;flex:1;background:linear-gradient(90deg,#0fc6e1,transparent)}
.info-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px}.info-item,.mini-kpis button,.top-kpis button,.clickable-panel,.bottom-card,.status-tile,.analysis-card.metric-card{border:0;color:inherit;text-align:left;background:#071421}.info-item{border:1px solid #123c50;padding:8px 9px;min-height:54px}.info-item:hover,.mini-kpis button:hover,.status-tile:hover,.analysis-card.metric-card:hover{border-color:#00c6e7;background:#082233}.info-grid small,.mini-kpis small,.top-kpis small,.bottom-card small{display:block;color:#6e9aa8;font-size:11px;margin-bottom:5px}.info-grid strong{font-size:12px;color:#c8edf5}.ok-text{color:var(--green)!important}.warn-text{color:var(--yellow)!important}.button-row{display:grid;grid-template-columns:repeat(3,1fr);gap:6px;margin-top:10px}.button-row button,.primary-action,.device-toolbar button,.dialog-foot button{background:linear-gradient(180deg,#0c6682,#07415a);color:#bdf9ff;border:1px solid #0b8dad;padding:7px 6px;font-size:11px;box-shadow:inset 0 0 8px #05b4d822}.button-row button:hover,.primary-action:hover,.device-toolbar button:hover,.dialog-foot button:hover{filter:brightness(1.25)}.mini-kpis{display:grid;grid-template-columns:1fr 1fr;gap:8px}.mini-kpis button{padding:9px 8px;border-bottom:1px solid #0a445a}.mini-kpis b{font-size:19px;color:var(--cyan);margin-right:3px}.mini-kpis em{font-style:normal;color:#5e91a0;font-size:10px}
.center-stage{grid-column:2;grid-row:1;position:relative;overflow:hidden;border-top:1px solid #0a5b75;border-bottom:1px solid #0a3148;background:radial-gradient(circle at 55% 45%,rgba(0,160,200,.07),transparent 34%),linear-gradient(180deg,rgba(3,25,45,.28),rgba(2,10,20,.45))}.center-view{display:none;position:absolute;inset:0;padding:58px 18px 18px}.center-view.active{display:block}.center-view.page-view{padding:18px}.view-tabs{position:absolute;left:50%;top:14px;transform:translateX(-50%);display:flex;gap:6px;z-index:12}.view-tabs button{border:1px solid #0a5166;background:#041522cc;color:#6ca3b1;padding:8px 18px}.view-tabs button:hover{color:#d9fbff;border-color:#0bbbd7}.view-tabs button.active{color:#dffcff;border-color:#00c7e7;box-shadow:inset 0 -2px #00eaff,0 0 10px #00c7e722}
.map-canvas{position:absolute;inset:0;overflow:hidden}.map-zoom-layer{position:absolute;inset:0;transform-origin:center center;transition:transform .22s ease;will-change:transform}.map-grid{position:absolute;inset:0;background-image:linear-gradient(#0a587522 1px,transparent 1px),linear-gradient(90deg,#0a587522 1px,transparent 1px);background-size:95px 75px}.map-glow{position:absolute;inset:0;background:radial-gradient(circle at 68% 48%,#00dffc12,transparent 21%),radial-gradient(circle at 45% 64%,#00dffc0c,transparent 18%)}.sea-map{position:absolute;inset:0;width:100%;height:100%}.coast-shape path{fill:#06324a88;stroke:#0a7691;stroke-width:1.8}.island-shape path{fill:#06324a88;stroke:#0a7691;stroke-width:1.5}.coast-lines path{fill:none;stroke:#0d627b;stroke-width:1.35;opacity:.58}.province-lines path{fill:none;stroke:#0a5066;stroke-width:1;opacity:.42}.region-labels text{fill:#4d90a0;font-size:13px;letter-spacing:3px;opacity:.72}.sea-names text{fill:#0c7790;font-size:22px;letter-spacing:8px;font-weight:700;opacity:.55}.route-main{fill:none;stroke:#00dffc;stroke-width:2.2;stroke-dasharray:9 7;filter:drop-shadow(0 0 4px #00eaff)}.route-shadow{fill:none;stroke:#00dffc;stroke-width:11;opacity:.035}.map-point circle{fill:#00dffc;filter:drop-shadow(0 0 6px #00eaff)}.map-point text{fill:#84d6e3;font-size:12px}.ship-marker .pulse-ring{fill:none;stroke:#00eaff;stroke-width:2;animation:pulse 1.9s infinite;transform-box:fill-box;transform-origin:center}.ship-marker .second{animation-delay:.7s}.ship-icon{fill:#00dffc;stroke:#ccfbff;stroke-width:1.5;filter:drop-shadow(0 0 8px #00eaff)}@keyframes pulse{0%{transform:scale(.5);opacity:.9}100%{transform:scale(1.5);opacity:0}}.map-label{position:absolute;pointer-events:none;color:#0b7189;letter-spacing:6px;font-size:20px;font-weight:700;opacity:.55}.sea1{right:20%;top:54%}.sea2{right:17%;top:26%}.coordinate{position:absolute;right:16px;bottom:12px;color:#5f98a7;font-size:11px}.map-scale{position:absolute;left:18px;bottom:12px;color:#5f98a7;font-size:10px}.map-scale span{display:inline-block;width:60px;border-top:2px solid #7fc4d3;vertical-align:middle;margin-right:6px}.map-tools{position:absolute;right:15px;top:70px;display:flex;flex-direction:column;gap:6px}.map-tools button{width:34px;height:34px;border:1px solid #0a6077;background:#061a29dc;color:#a8eefa;font-size:18px}.map-tools button:hover{border-color:#00eaff;color:#fff;box-shadow:0 0 12px #00dfff33}.map-layers{position:absolute;left:14px;top:70px;width:130px;padding:10px 12px}.mini-title{font-size:12px;color:#c8f7ff;border-bottom:1px solid #17485d;padding-bottom:8px;margin-bottom:8px}.map-layers label{display:block;font-size:11px;color:#7fadb8;margin:7px 0;cursor:pointer}.map-layers input{accent-color:#00dffc}.ship-card{position:absolute;left:67%;top:49%;width:235px;transform:translate(-50%,-50%);filter:drop-shadow(0 0 12px #00c9f5);z-index:6}.ship-card:before,.ship-card:after{content:"";position:absolute;inset:-3px;border:1px solid #0cc9e5;clip-path:polygon(0 15%,8% 0,100% 0,100% 75%,92% 100%,0 100%)}.ship-card:after{inset:3px;opacity:.35}.ship-card-inner{position:relative;z-index:2;padding:13px 18px;background:linear-gradient(90deg,#073650f0,#08243bf0);clip-path:polygon(0 15%,8% 0,100% 0,100% 75%,92% 100%,0 100%)}.eyebrow{display:block;font-size:10px;color:#76d7e8}.ship-card strong{font-size:16px}.ship-metrics{display:flex;gap:12px;margin-top:8px;font-size:10px;color:#6da0ad}.ship-metrics b{color:#c5f9ff}.locator-line{position:absolute;width:80px;height:2px;background:#00def8;left:-65px;bottom:-28px;transform:rotate(-52deg);transform-origin:right}.locator-line:before{content:"";position:absolute;left:-4px;top:-4px;width:10px;height:10px;border-radius:50%;background:#00eaff;box-shadow:0 0 16px 4px #00eaff}.tiny-action{margin-top:8px;border:1px solid #0bb4d0;background:#06273a;color:#9ceffc;font-size:10px;padding:4px 10px}
.view-title{height:42px;display:flex;align-items:flex-end;gap:10px;margin-bottom:14px;border-bottom:1px solid #0a4055;padding-bottom:8px}.view-title span{font-size:16px;color:#d6faff}.view-title small{font-size:9px;color:#527f8d;letter-spacing:1.3px}.battery-layout.full{height:58%;display:grid;grid-template-columns:1fr 1.05fr 1fr;gap:14px}.pack-card,.core-card{border:1px solid #2c6679;background:linear-gradient(180deg,#12273b,#081522);border-radius:6px;padding:14px;box-shadow:inset 0 0 22px #8bdfff08;color:inherit}.pack-card.interactive{text-align:left}.pack-card.interactive:hover{border-color:#00d8f5;box-shadow:inset 0 0 24px #00c8ef10,0 0 18px #00d9ff18}.pack-title{font-size:12px;color:#cbe9ef;margin-bottom:18px}.battery-icon{height:50px;width:85px;border:2px solid #7d9aa3;border-radius:5px;margin:0 auto 8px;padding:5px;position:relative}.battery-icon:after{content:"";position:absolute;right:-8px;top:14px;width:6px;height:17px;border:2px solid #7d9aa3;border-left:0}.battery-icon span{display:block;height:100%;background:linear-gradient(180deg,#7dff4d,#27e34c);box-shadow:0 0 15px #57ff58}.pack-value{text-align:center;color:#68ff67;font-size:18px;font-weight:700;margin-bottom:14px}.cell-row{display:flex;justify-content:space-between;border-top:1px solid #2f4753;padding:9px 2px;font-size:11px;color:#7e9ca7}.cell-row b{color:#dbeef4}.warning-row b{color:#ffd34d}.core-card{text-align:center}.propeller{font-size:54px;color:#e5eef0;margin:4px 0 0;animation:spin 6s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.core-card>span{display:block;color:#8da3ab;font-size:11px}.core-card>b{display:block;font-size:25px;margin:16px 0;color:#fff}.core-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:4px}.core-grid span{border:1px solid #334955;padding:9px 2px;color:#7e929c;font-size:9px}.core-grid b{font-size:12px;color:#e4f8ff}.primary-action{margin-top:16px}.battery-bottom-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin-top:14px}.status-tile{padding:12px;border:1px solid #123d50}.status-tile small{display:block;color:#648f9b;font-size:10px}.status-tile strong{display:block;color:#bff9ff;font-size:20px;margin:7px 0 4px}.status-tile span{font-size:10px;color:#5f8794}
.analysis-grid{display:grid;grid-template-columns:2fr 1fr;grid-template-rows:1fr auto;gap:12px;height:calc(100% - 60px)}.analysis-card{border:1px solid #104b61;background:#061622;padding:12px}.analysis-card.wide{grid-row:1;min-height:0}.card-head{display:flex;justify-content:space-between;align-items:center;color:#addce6;font-size:12px}.card-head button{border:1px solid #0a667e;background:#082233;color:#7fc7d4;font-size:10px;padding:4px 9px}.trend-chart{width:100%;height:calc(100% - 45px);margin-top:8px}.chart-grid path{stroke:#164151;stroke-width:1;opacity:.65}.soc-line,.current-line{fill:none;stroke-width:3;filter:drop-shadow(0 0 3px currentColor)}.soc-line{stroke:#4dff8a}.current-line{stroke:#00e8ff}.chart-legend{display:flex;gap:18px;font-size:10px;color:#789eaa}.chart-legend span:before{content:"";display:inline-block;width:16px;border-top:2px solid;margin-right:5px;vertical-align:middle}.soc-dot:before{border-color:#4dff8a!important}.current-dot:before{border-color:#00e8ff!important}.energy-donut{width:125px;height:125px;margin:20px auto;border-radius:50%;background:conic-gradient(#00e8ff 0 71%,#36d8e7 71% 90%,#ffd34d 90% 100%);display:grid;place-items:center;position:relative}.energy-donut:before{content:"";position:absolute;width:78px;height:78px;border-radius:50%;background:#061622}.energy-donut div{z-index:2;text-align:center}.energy-donut b{font-size:20px}.energy-donut small{display:block;color:#648b97}.energy-list{font-size:10px;color:#7399a8;display:grid;gap:7px}.energy-list span{display:flex;justify-content:space-between}.energy-list b{color:#c9f8ff}.analysis-grid>.metric-card{display:inline-block;margin-right:8px;padding:14px;border:1px solid #123f52}.metric-card small{display:block;color:#698f9b}.metric-card strong{font-size:22px;color:#c8faff;margin-right:5px}.metric-card span{font-size:10px;color:#5f8490}
.top-kpis{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-bottom:14px}.top-kpis button{border-bottom:1px solid #0a455c;padding:4px 2px 10px}.top-kpis button:hover{background:#082031}.top-kpis b{color:var(--green);font-size:25px}.donut-wrap{display:flex;align-items:center;gap:18px;padding:0 4px 14px;width:100%}.clickable-panel:hover{background:#071e2d}.donut{width:112px;height:112px;border-radius:50%;background:conic-gradient(#34e796 0 72%,#36d8e7 72% 88%,#ffd45b 88% 100%);display:grid;place-items:center;box-shadow:0 0 16px #00efb122;position:relative}.donut:before{content:"";position:absolute;width:68px;height:68px;border-radius:50%;background:#061321}.donut>div{z-index:1;text-align:center}.donut b{display:block;color:#dffcff;font-size:17px}.donut small{color:#65919e}.legend{display:flex;flex-direction:column;gap:9px;font-size:11px;color:#7fa3ad}.legend i{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:6px}.legend .g{background:#34e796}.legend .c{background:#36d8e7}.legend .y{background:#ffd45b}.bar-chart{height:112px;width:100%;display:flex;align-items:end;gap:6px;padding:10px 7px 7px;border-bottom:1px solid #10374a;margin-bottom:12px}.bar-chart span{flex:1;min-width:5px;background:linear-gradient(180deg,#21ecff,#0b85b4);box-shadow:0 0 6px #00ddff66;opacity:.85}.alarm-list{font-size:10px}.alarm-list>button{width:100%;border:0;background:transparent;color:inherit;display:grid;grid-template-columns:36px 1fr 54px;gap:6px;align-items:center;padding:8px 0;border-bottom:1px solid #0b2d3b;text-align:left}.alarm-list>button:hover{background:#082031}.alarm-list p{margin:0;color:#8fb0b9;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.alarm-list time{color:#547b86}.alarm-level{font-size:9px;text-align:center;padding:2px;border:1px solid}.alarm-level.low{color:#ffd04a;border-color:#826a28}.alarm-level.ok{color:#49ff93;border-color:#26724a}
.bottom-strip{grid-column:1/4;grid-row:2;display:grid;grid-template-columns:1fr 1.1fr 1fr;gap:12px;padding:13px 16px}.bottom-card{min-width:0;padding:8px 18px;position:relative;border-right:1px solid #0d3649}.bottom-card:hover{background:#082031}.bottom-card:last-child{border:0}.bottom-card strong{font-size:25px;color:#d6faff}.cyan-line{position:absolute;left:18px;right:18px;bottom:14px;height:2px;background:linear-gradient(90deg,#00eaff,#0f7198,transparent)}.line-card svg{width:100%;height:62px;margin-top:0}.line-card polyline{fill:none;stroke:#00eaff;stroke-width:3;filter:drop-shadow(0 0 4px #00eaff)}.progress{height:9px;background:#0a2736;margin-top:20px}.progress span{display:block;height:100%;background:linear-gradient(90deg,#0ba5d2,#5aff9a);box-shadow:0 0 10px #18ffd455}
.device-toolbar{display:flex;gap:8px;margin-bottom:12px}.device-toolbar input{flex:1;max-width:320px;background:#041421;border:1px solid #174b5d;color:#c9f6ff;padding:8px 10px;outline:none}.device-table{border:1px solid #123f51}.device-row{display:grid;grid-template-columns:1.4fr 1fr .8fr .7fr .7fr .6fr;align-items:center;min-height:48px;border-bottom:1px solid #0b3343;color:#84aab4;font-size:11px;padding:0 12px}.device-row.head{background:#082234;color:#b8e5ee;font-size:10px}.device-row:not(.head):hover{background:#082031}.device-row button{border:1px solid #0b7189;background:#072536;color:#8adce9;padding:5px 8px}
.map-page-head{height:55px;display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid #0d465c;margin-bottom:10px}.map-page-head b{font-size:16px}.map-page-head small{display:block;color:#557f8b;font-size:9px;margin-top:3px}.map-stats{display:flex;gap:20px;font-size:10px;color:#6d98a3}.map-stats b{font-size:15px;color:#4dff8a;margin-left:5px}.map-page-content{display:grid;grid-template-columns:190px 1fr;gap:10px;height:calc(100% - 65px)}.ship-list{padding:10px}.ship-list-item{width:100%;text-align:left;border:1px solid #123c4f;background:#061522;color:#8bb4be;padding:9px;margin-bottom:7px}.ship-list-item.active,.ship-list-item:hover{border-color:#00cae6;background:#082536}.ship-list-item b{display:block;color:#c9f8ff;font-size:11px}.ship-list-item span{display:block;font-size:9px;margin:5px 0}.ship-list-item em{font-size:9px;color:#4dff8a;font-style:normal}.second-title{margin-top:16px}.voyage-info{display:grid;gap:10px;font-size:9px;color:#6d97a2}.voyage-info span{display:flex;justify-content:space-between}.voyage-info b{color:#c8f5ff}.map-big{position:relative;overflow:hidden;border:1px solid #0a536a;background:#031321}.map-big-zoom{position:absolute;inset:0;transform-origin:center center;transition:transform .22s ease;will-change:transform}.map-big-zoom>svg{position:absolute;inset:0;width:100%;height:100%}.big-grid{background-size:85px 65px}.map-tools-big{top:14px;right:14px;z-index:20}.map-popup{position:absolute;left:64%;top:44%;display:grid;gap:4px;background:#061d2bdf;border:1px solid #00c8e4;padding:10px 12px;min-width:145px;font-size:9px;color:#7ea8b2;box-shadow:0 0 18px #00d9ff22}.map-popup b{color:#d4fbff;font-size:11px;margin-bottom:2px}.map-fixed-badge{position:absolute;right:14px;bottom:12px;z-index:20;padding:6px 9px;border:1px solid #0a6077;background:#041522d9;color:#5c9aaa;font-size:9px;letter-spacing:1px}
.dialog-mask{position:fixed;inset:0;background:#0009;display:none;align-items:center;justify-content:center;z-index:100}.dialog-mask.show{display:flex}.dialog{width:min(620px,88vw);max-height:76vh;padding:0;background:#061522f8}.dialog-head{display:flex;justify-content:space-between;align-items:center;padding:12px 14px;border-bottom:1px solid #155069;color:#d6fbff}.dialog-head button{border:0;background:#9e2c44;color:#fff;width:28px;height:24px}.dialog-body{padding:16px;overflow:auto;max-height:55vh;color:#8fb1bb;font-size:12px;line-height:1.8}.dialog-foot{padding:10px 14px;border-top:1px solid #103b4d;text-align:right}.detail-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:8px}.detail-grid div{background:#082031;border:1px solid #123f51;padding:10px}.detail-grid small{display:block;color:#628c98}.detail-grid b{color:#c8f8ff}.history-table{width:100%;border-collapse:collapse}.history-table th,.history-table td{border-bottom:1px solid #173c4b;padding:7px;text-align:left}.history-table th{color:#b8e8ef}.setting-row{display:flex;justify-content:space-between;align-items:center;padding:8px 0;border-bottom:1px solid #173542}.setting-row input{width:100px;background:#041421;color:#c8f8ff;border:1px solid #17495b;padding:5px}.toast{position:fixed;left:50%;bottom:40px;transform:translateX(-50%) translateY(20px);background:#06364a;border:1px solid #00c8e8;color:#d9fbff;padding:8px 18px;opacity:0;pointer-events:none;transition:.25s;z-index:120}.toast.show{opacity:1;transform:translateX(-50%) translateY(0)}
.dashboard.page-mode{grid-template-columns:1fr;grid-template-rows:1fr;padding:12px 16px 14px}.dashboard.page-mode .left-panel,.dashboard.page-mode .right-panel,.dashboard.page-mode .bottom-strip{display:none}.dashboard.page-mode .center-stage{grid-column:1;grid-row:1}.dashboard.page-mode .view-tabs{display:none}.map-fullscreen{position:fixed!important;inset:74px 0 0 0!important;z-index:80!important;background:#031321!important}.hidden{display:none!important}
@media(max-width:1200px){.dashboard{grid-template-columns:240px 1fr 270px}.title-wrap h1{font-size:16px}.title-wing{display:none}.info-grid{grid-template-columns:1fr}.top-left{gap:5px}.top-link{font-size:11px;padding:12px 5px}.battery-bottom-grid{grid-template-columns:1fr 1fr}.map-layers{display:none}}

/* v4: 地图始终铺满容器，缩小时不露出空白；工具按钮保持固定尺寸 */
.map-zoom-layer,
.map-big-zoom{
  inset:-10%;
}
.map-zoom-layer{transform-origin:center center;}
.map-big-zoom{transform-origin:center center;}
.map-tools,.map-layers,.coordinate,.map-scale,.map-fixed-badge{z-index:30;}
.map-tools button.info-toggle{font-size:14px;font-weight:700;font-family:Arial,sans-serif;}
.map-tools button.info-toggle.active{border-color:#00eaff;color:#e8fdff;box-shadow:0 0 12px #00dfff55,inset 0 0 10px #00dfff22;}
.ship-marker{cursor:pointer;}
.ship-card{transition:opacity .2s ease,transform .2s ease,visibility .2s ease;}
.ship-card.ship-card-hidden{opacity:0;visibility:hidden;pointer-events:none;transform:translate(-50%,-46%) scale(.96);}
.ship-card-close,.map-popup-close{
  position:absolute;right:8px;top:7px;z-index:5;width:22px;height:22px;padding:0;
  border:1px solid #0a8da6;background:#061c2bd9;color:#86dce9;line-height:18px;font-size:16px;cursor:pointer;
}
.ship-card-close:hover,.map-popup-close:hover{border-color:#00eaff;color:#fff;box-shadow:0 0 10px #00eaff44;}
.map-popup{transition:opacity .2s ease,transform .2s ease,visibility .2s ease;}
.map-popup.map-popup-hidden{opacity:0;visibility:hidden;pointer-events:none;transform:translateY(-6px) scale(.97);}
.map-popup-close{right:6px;top:6px;width:20px;height:20px;font-size:14px;}


/* v5: 单船、更大范围的中国近海地图 + 动态指引线 */
.map-zoom-layer,.map-big-zoom{inset:-7%;}
.detailed-map{background:radial-gradient(circle at 70% 48%,rgba(0,126,168,.035),transparent 38%)}
.neighbor-land path{fill:#05273b73;stroke:#0a6a82;stroke-width:1.2;opacity:.76}
.neighbor-labels text{fill:#357989;font-size:12px;letter-spacing:2px;opacity:.55}
.city-point circle{fill:#4a8794;opacity:.75}.city-point text{fill:#4e8b98;font-size:10px;opacity:.78}
.ocean-grid-labels text{fill:#2f6d7b;font-size:10px;opacity:.55;letter-spacing:1px}
.map-point.port text{font-size:11px}.sea-names text{font-size:20px;opacity:.48}.region-labels text{font-size:12px}
.ship-marker.active{cursor:pointer}
.ship-link-layer{position:absolute;inset:0;width:100%;height:100%;z-index:7;pointer-events:none;overflow:visible}
.ship-link-layer line{stroke:#00eaff;stroke-width:2;filter:drop-shadow(0 0 5px #00eaff);opacity:.95}
.ship-link-layer circle{fill:#00eaff;filter:drop-shadow(0 0 7px #00eaff)}
.ship-card{z-index:8;left:70%;top:45%;width:252px}
.ship-card:before,.ship-card:after{clip-path:polygon(0 14%,8% 0,100% 0,100% 76%,92% 100%,0 100%)}
.ship-card-inner{clip-path:polygon(0 14%,8% 0,100% 0,100% 76%,92% 100%,0 100%)}
.map-popup{z-index:22;min-width:164px}
.big-link-layer{z-index:21}
.map-big .ship-link-layer{inset:0}
@media(max-width:1200px){.ship-card{width:220px}}


/* v6: 全国行政区与城市细节地图 */
.national-map{background:linear-gradient(180deg,#041c2d 0%,#031522 100%)}
.national-map .geo-graticule line{stroke:#0a5268;stroke-width:.65;opacity:.24}
.national-map .geo-graticule text{fill:#376d7b;font-size:10px;opacity:.58}
.national-map .neighbor-country-layer path{fill:#08283a;stroke:#0a566d;stroke-width:1;opacity:.62}
.national-map .china-base,.national-map .taiwan-base{fill:#073750;stroke:none;opacity:.93}
.national-map .province-cell{stroke:#1c7891;stroke-width:1.15;vector-effect:non-scaling-stroke;transition:fill .2s,opacity .2s}
.national-map .province-cell.p0{fill:#0a4058}.national-map .province-cell.p1{fill:#083a52}.national-map .province-cell.p2{fill:#0b455d}.national-map .province-cell.p3{fill:#09394f}
.national-map .province-cell:hover{fill:#0b536d}
.national-map .china-outline{fill:none;stroke:#14a2be;stroke-width:2.1;opacity:.95;vector-effect:non-scaling-stroke;filter:drop-shadow(0 0 3px #00b9d855)}
.national-map .island-outline{stroke-width:1.6}
.national-map .province-label-layer text{fill:#67aab8;font-size:11px;font-weight:700;letter-spacing:1px;opacity:.76;text-anchor:middle;paint-order:stroke;stroke:#042235;stroke-width:2px;stroke-linejoin:round}
.national-map .city-point circle{fill:#9bd6df;stroke:#04283a;stroke-width:.6;opacity:.92}
.national-map .city-point text{fill:#83bdc8;opacity:.78;paint-order:stroke;stroke:#031b2a;stroke-width:1.8px;stroke-linejoin:round}
.national-map .major-city circle{fill:#d3faff;filter:drop-shadow(0 0 3px #00dffc)}
.national-map .major-city text{font-size:9.5px;fill:#b7ecf4;opacity:.92}
.national-map .minor-city text{font-size:7.5px}.national-map .minor-city circle{opacity:.7}
.national-map .national-sea-names text{font-size:18px;letter-spacing:5px;fill:#0c8099;opacity:.52;font-weight:700}
.national-map .national-neighbor-labels text{font-size:10px;fill:#3c7887;opacity:.58;letter-spacing:1px}
.national-map .route-main{stroke-width:2.1}.national-map .route-shadow{stroke-width:9}
.national-map .map-point.port circle{r:4.5}.national-map .map-point.port text{font-size:9px;paint-order:stroke;stroke:#032033;stroke-width:1.5px}
.national-map .ship-marker{filter:drop-shadow(0 0 4px #00eaff)}
.map-fullscreen .national-map .major-city text,.map-big .national-map .major-city text{font-size:10px}
.map-fullscreen .national-map .minor-city text,.map-big .national-map .minor-city text{font-size:8px;opacity:.85}
.province-cell-layer.hidden,.province-label-layer.hidden,.city-layer.hidden{display:none}
/* Full-country view should always fill the map container with sea background, even when zoomed out. */
.map-canvas,.map-big{background:radial-gradient(circle at 72% 48%,#07334a 0%,#041826 44%,#03111d 100%)}
.map-zoom-layer,.map-big-zoom{inset:-2%;}

/* v7 - official standard-map background. Geography is no longer hand drawn. */
.map-zoom-layer,.map-big-zoom{inset:-4%;display:flex;align-items:center;justify-content:center;overflow:hidden;background:#061826}
.official-map-stage{position:absolute;inset:0;overflow:hidden;background:#071c2b;transform:translateZ(0)}
.official-map-image{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:center;display:block;user-select:none;pointer-events:none;filter:brightness(.46) saturate(.72) contrast(1.14) hue-rotate(165deg);opacity:.98}
.official-map-stage:after{content:"";position:absolute;inset:0;pointer-events:none;background:linear-gradient(180deg,rgba(2,18,31,.16),rgba(1,18,31,.28)),radial-gradient(circle at 76% 58%,rgba(0,238,255,.08),transparent 26%);box-shadow:inset 0 0 80px rgba(0,7,14,.72)}
.official-map-overlay{position:absolute;inset:0;width:100%;height:100%;z-index:3;overflow:visible;pointer-events:none}
.official-map-overlay .route-main{fill:none;stroke:#00eaff;stroke-width:3;stroke-dasharray:12 9;filter:drop-shadow(0 0 6px #00eaff);vector-effect:non-scaling-stroke}
.official-map-overlay .route-shadow{fill:none;stroke:#00b7d2;stroke-width:12;opacity:.12;filter:blur(2px);vector-effect:non-scaling-stroke}
.official-map-overlay .map-point.port circle{fill:#05dff4;stroke:#9affff;stroke-width:1.1;filter:drop-shadow(0 0 6px #00eaff)}
.official-map-overlay .map-point.port text{fill:#9feaf2;font-size:11px;paint-order:stroke;stroke:#052034;stroke-width:2px;stroke-linejoin:round}
.official-map-overlay .ship-marker{pointer-events:auto;cursor:pointer;filter:drop-shadow(0 0 7px #00ecff)}
.official-map-overlay .ship-icon{fill:#0a91ad;stroke:#86fbff;stroke-width:2.1;vector-effect:non-scaling-stroke}
.official-map-overlay .pulse-ring{fill:none;stroke:#00ecff;stroke-width:2;opacity:.65;transform-box:fill-box;transform-origin:center;animation:pulse 1.8s ease-out infinite;vector-effect:non-scaling-stroke}
.official-map-overlay .pulse-ring.second{animation-delay:.65s}
.map-source-note{position:absolute;left:18px;bottom:12px;z-index:18;padding:5px 9px;border:1px solid rgba(0,218,238,.25);background:rgba(2,20,31,.72);font-size:10px;color:#7fb3c0;backdrop-filter:blur(5px);pointer-events:auto}
.map-source-note a{color:#84dce7;text-decoration:none}.map-source-note a:hover{color:#d6fbff;text-decoration:underline}
.map-layers strong{display:block;margin-bottom:8px;color:#c9f5fb;font-size:13px}.map-layers label{display:block;margin:8px 0;color:#8fc8d1}
.map-layers input{accent-color:#00ddef}
/* Keep map controls and ship data outside the zoom transform. */
.map-tools,.ship-card,.ship-link-layer,.coordinate,.map-scale,.map-layers,.map-source-note{transform:none!important}
/* Public map image is wider than the previous custom SVG: allow a little extra canvas so zoom-out never reveals blank white areas. */
.map-canvas,.map-big{background:#041724!important;overflow:hidden}
/* v7b - route and raster share one SVG viewBox, so zoom/crop never de-aligns the vessel or route. */
.official-map-stage,.official-map-image,.official-map-overlay{display:none!important}
.official-map-scene{position:absolute;inset:0;width:100%;height:100%;display:block;overflow:visible}
.official-map-raster{filter:brightness(.48) saturate(.68) contrast(1.12) hue-rotate(165deg)}
.official-map-tint{fill:#031827;opacity:.22;pointer-events:none}
.official-map-scene .route-main{fill:none;stroke:#00eaff;stroke-width:3;stroke-dasharray:12 9;filter:drop-shadow(0 0 6px #00eaff);vector-effect:non-scaling-stroke}
.official-map-scene .route-shadow{fill:none;stroke:#00b7d2;stroke-width:12;opacity:.12;filter:blur(2px);vector-effect:non-scaling-stroke}
.official-map-scene .map-point.port circle{fill:#05dff4;stroke:#9affff;stroke-width:1.1;filter:drop-shadow(0 0 6px #00eaff)}
.official-map-scene .map-point.port text{fill:#9feaf2;font-size:11px;paint-order:stroke;stroke:#052034;stroke-width:2px;stroke-linejoin:round}
.official-map-scene .ship-marker{pointer-events:auto;cursor:pointer;filter:drop-shadow(0 0 7px #00ecff)}
.official-map-scene .ship-icon{fill:#0a91ad;stroke:#86fbff;stroke-width:2.1;vector-effect:non-scaling-stroke}
.official-map-scene .pulse-ring{fill:none;stroke:#00ecff;stroke-width:2;opacity:.65;transform-box:fill-box;transform-origin:center;animation:pulse 1.8s ease-out infinite;vector-effect:non-scaling-stroke}
.official-map-scene .pulse-ring.second{animation-delay:.65s}

/* V8 offline map: local raster, no network dependency */
.official-map-raster{filter:brightness(.50) saturate(.72) contrast(1.10) hue-rotate(165deg)}


/* V9 - user-supplied China map, exact aspect ratio; route is calibrated to remain at sea. */
.map-zoom-layer,.map-big-zoom{inset:0;background:#061826}
.official-map-scene{inset:0;width:100%;height:100%;background:#061826}
.official-map-raster{filter:brightness(.66) saturate(.62) contrast(1.08) hue-rotate(168deg);opacity:.98}
.official-map-tint{fill:#031827;opacity:.18}
.official-map-scene .route-main{stroke-width:3.2;stroke-dasharray:13 9}
.official-map-scene .route-shadow{stroke-width:14;opacity:.13}
.official-map-scene .map-point.port text{font-size:10px}
.map-fixed-badge{background:rgba(2,20,31,.80)}


/* V10 - fixed-frame map zoom: only SVG viewBox changes; controls never scale and zoom-out never exposes empty space. */
.map-zoom-layer,.map-big-zoom{transform:none!important;overflow:hidden!important;inset:0!important}
.official-map-scene{overflow:hidden!important}
.map-layers{min-width:150px}
.map-layers label{white-space:nowrap}


/* V14 - three-vessel monitoring */
.ship-marker{cursor:pointer;transition:opacity .18s ease,filter .18s ease}
.ship-marker:not(.active){opacity:.76;filter:drop-shadow(0 0 3px #00ecff)}
.ship-marker:not(.active) .pulse-ring{display:none}
.ship-marker.active{opacity:1;filter:drop-shadow(0 0 8px #00ecff)}
.ship-label{fill:#bffaff;font-size:10px;font-weight:700;paint-order:stroke;stroke:#062235;stroke-width:2.2px;stroke-linejoin:round;pointer-events:none}
.ship-metrics{display:grid;grid-template-columns:repeat(3,max-content);gap:6px 12px;align-items:center}
.ship-card{width:282px}
.map-popup{min-width:178px}
/* removed the old standard-map layer control panel */
.map-layers{display:none!important}

/* V15 - ship-number naming, battery ship selector, and fault markers */
.battery-title-row{display:flex;align-items:center;justify-content:space-between;gap:18px}
.battery-title-row>div:first-child{display:flex;flex-direction:column;gap:2px}
.battery-ship-selector{display:flex;gap:8px;align-items:center}
.battery-ship-selector button{min-width:52px;height:30px;border:1px solid rgba(0,220,255,.38);background:rgba(2,25,39,.78);color:#83cbd5;cursor:pointer;font-size:13px}
.battery-ship-selector button:hover,.battery-ship-selector button.active{color:#e8ffff;border-color:#00eaff;background:rgba(0,196,226,.15);box-shadow:0 0 10px rgba(0,234,255,.2)}
.fault-text{color:#ff5c66!important;text-shadow:0 0 8px rgba(255,70,80,.35)}
.official-map-scene .ship-marker.fault{opacity:1!important;filter:drop-shadow(0 0 9px #ff3447)!important}
.official-map-scene .ship-marker.fault .ship-icon{fill:#b71f34!important;stroke:#ff9ca6!important}
.official-map-scene .ship-marker.fault .pulse-ring{stroke:#ff3347!important;display:block!important;filter:drop-shadow(0 0 5px #ff3347)}
.official-map-scene .ship-marker.fault .ship-label{fill:#ffd7db!important;stroke:#4c0910!important}
.ship-list-item.fault{border-color:rgba(255,72,88,.65)!important;background:rgba(117,13,27,.28)!important}
.ship-list-item.fault em{color:#ff6776!important}
.ship-card.fault-card,.map-popup.fault-popup{border-color:#ff4153!important;box-shadow:0 0 18px rgba(255,47,68,.25)!important}
.ship-card.fault-card:before,.map-popup.fault-popup:before{background:#ff4153!important}

/* =========================================================
   V17 - UI / readability / data-consistency optimization
   ========================================================= */
:root{
  --panel-soft:rgba(6,24,39,.92);
  --line-soft:rgba(15,183,215,.26);
  --orange:#ff9f43;
}

button{transition:border-color .18s ease,background .18s ease,color .18s ease,box-shadow .18s ease,filter .18s ease,transform .18s ease}
button:focus-visible,input:focus-visible{outline:2px solid var(--cyan);outline-offset:2px}

.demo-badge{
  display:inline-flex;align-items:center;height:24px;padding:0 8px;border:1px solid rgba(255,211,77,.34);
  border-radius:4px;background:rgba(255,211,77,.08);color:#ffd86a;font-size:9px;letter-spacing:1.2px;
}
.status-button{display:inline-flex;align-items:center;gap:0}
.status-button.fault-state{color:#ff8492;background:rgba(255,76,95,.08)}
.status-button.fault-state .status-dot{background:var(--red);box-shadow:0 0 10px var(--red)}

.metric-state{
  display:inline-block!important;margin:0 0 0 5px!important;padding:1px 5px;border-radius:8px;
  font-size:8px!important;line-height:15px;color:#7feaff!important;background:rgba(0,232,255,.08);
}
.metric-state.discharge{color:#67e7ff!important;background:rgba(0,198,231,.09)}
.metric-state.charge{color:#73ffad!important;background:rgba(77,255,138,.09)}
.metric-state.idle{color:#9aafba!important;background:rgba(150,170,180,.08)}

/* Keep the supplied standard map recognizable instead of over-tinting it. */
.official-map-raster{
  filter:brightness(.62) saturate(.72) contrast(1.05)!important;
  opacity:.96!important;
}
.official-map-tint{fill:#021727!important;opacity:.38!important}
.map-canvas,.map-big{background:#041724!important}
.map-canvas:after,.map-big:after{
  content:"";position:absolute;inset:0;pointer-events:none;z-index:2;
  background:radial-gradient(circle at 70% 48%,rgba(0,226,255,.055),transparent 31%),linear-gradient(180deg,rgba(0,17,30,.06),rgba(0,12,22,.19));
}
.official-map-scene{z-index:1}
.ship-link-layer,.ship-card,.map-popup,.map-tools,.coordinate,.map-scale,.map-source-note,.map-fixed-badge{z-index:8}

/* The old source note and scale shared the same bottom-left coordinates. */
.map-canvas .map-source-note{left:104px!important;bottom:11px!important}
.map-big .map-source-note{left:14px!important;bottom:11px!important}
.map-scale{z-index:9}

.ship-card,.map-popup{backdrop-filter:blur(7px)}
.ship-card-inner{background:linear-gradient(100deg,rgba(5,52,76,.96),rgba(5,31,50,.94))}
.ship-metrics b{font-variant-numeric:tabular-nums}

.alarm-level.high{color:#ff7f8c;border-color:#a43d4a;background:rgba(255,67,88,.08)}
.alarm-empty{
  min-height:76px;display:flex;align-items:center;gap:10px;padding:10px;border:1px solid rgba(77,255,138,.12);
  background:rgba(77,255,138,.025);color:#8db4bd;
}
.alarm-empty>span{
  width:28px;height:28px;border-radius:50%;display:grid;place-items:center;color:var(--green);
  background:rgba(77,255,138,.08);border:1px solid rgba(77,255,138,.18)
}
.alarm-empty b{display:block;color:#bdebd0;font-size:11px;font-weight:500}
.alarm-empty small{display:block;color:#5f8b92;margin-top:3px;font-size:9px}

/* More balanced card hierarchy */
.info-item,.mini-kpis button,.top-kpis button,.bottom-card,.status-tile,.analysis-card{
  border-radius:3px;
}
.mini-kpis button{position:relative;border:1px solid rgba(18,60,80,.76);background:linear-gradient(180deg,#081a29,#06131f)}
.mini-kpis b{font-variant-numeric:tabular-nums}
.bottom-card strong,.pack-value,.core-card>b,.top-kpis b{font-variant-numeric:tabular-nums}

/* Map list and device rows become easier to scan. */
.ship-list-item{border-radius:3px;position:relative;overflow:hidden}
.ship-list-item.active:before{content:"";position:absolute;left:0;top:0;bottom:0;width:2px;background:var(--cyan);box-shadow:0 0 8px var(--cyan)}
.device-row:not(.head):hover{background:rgba(0,210,240,.045)}
.device-toolbar input:focus{border-color:#00cfe9;box-shadow:0 0 0 2px rgba(0,207,233,.08)}

/* Compact height mode for common 1366x768 / laptop screens. */
@media(max-height:820px){
  .topbar{height:66px}
  .dashboard{height:calc(100vh - 66px);grid-template-rows:1fr 132px;min-height:0;padding-top:9px;padding-bottom:9px}
  .map-fullscreen{inset:66px 0 0 0!important}
  .panel{padding:11px}
  .info-item{min-height:48px;padding:6px 8px}
  .section-head{margin:1px 0 8px}.section-head.second{margin-top:10px}
  .mini-kpis button{padding:7px 7px}.mini-kpis b{font-size:17px}
  .top-kpis{margin-bottom:10px}.top-kpis b{font-size:21px}
  .donut{width:94px;height:94px}.donut:before{width:58px;height:58px}
  .bar-chart{height:88px;margin-bottom:9px}
  .alarm-list>button{padding:6px 0}
  .bottom-strip{padding:9px 14px}.bottom-card{padding:6px 15px}.bottom-card strong{font-size:21px}
  .view-tabs{top:10px}.center-view{padding-top:50px}
  .battery-layout.full{height:56%}.pack-card,.core-card{padding:11px}.pack-title{margin-bottom:10px}
  .battery-icon{height:42px}.cell-row{padding:6px 2px}.propeller{font-size:44px}.core-card>b{margin:9px 0;font-size:22px}
}

@media(max-width:1380px){
  .dashboard{grid-template-columns:245px 1fr 278px;gap:9px;padding-left:10px;padding-right:10px}
  .topbar{padding-left:16px;padding-right:16px}.title-wrap h1{font-size:17px}
  .ship-card{width:240px}.ship-metrics{grid-template-columns:repeat(2,max-content)}
  .map-page-content{grid-template-columns:172px 1fr}
}
.metric-dialog-value{font-size:28px;color:#c9fbff;font-weight:700;margin:6px 0 14px;font-variant-numeric:tabular-nums;text-shadow:0 0 12px rgba(0,232,255,.2)}
.dialog-ok{color:#81eeb0}

/* V18 - P195 参数化界面 */
#batterySystem{font-size:11px;line-height:1.35}
.metric-state.fault{color:#ff7e8d!important;background:rgba(255,92,118,.10)}
.spec-summary{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin-bottom:14px}
.spec-summary>div{background:#082031;border:1px solid #123f51;padding:10px;min-height:58px}
.spec-summary small{display:block;color:#628c98;margin-bottom:4px}
.spec-summary b{color:#c8f8ff;font-size:12px}
.parameter-scroll{overflow:auto;max-height:43vh;border:1px solid #153d4c}
.parameter-table{width:100%;min-width:980px;border-collapse:collapse;background:#051624;font-size:10px;line-height:1.45}
.parameter-table th{position:sticky;top:0;z-index:2;background:#0a2a3b;color:#c9f7ff;border:1px solid #18495a;padding:8px 7px;text-align:left;white-space:nowrap}
.parameter-table td{border:1px solid #123746;padding:7px;vertical-align:top;color:#89adb7}
.parameter-table td:first-child{color:#c6f0f5;font-weight:700;white-space:nowrap}
.parameter-table tr:hover td{background:#082232}
.parameter-table .fault-row td{background:rgba(255,92,118,.055)}
.parameter-table .fault-row td:first-child{color:#ff8391}
.cell-detail-grid .cell-fault{border-color:#a83d52!important;background:rgba(255,92,118,.08)!important;box-shadow:inset 0 0 18px rgba(255,92,118,.08)}
.cell-detail-grid .cell-fault small,.cell-detail-grid .cell-fault b{color:#ff8e9a!important}
.alarm-level.high{color:#ff7081;border-color:#9f4050;background:rgba(255,92,118,.08)}

@media(max-width:900px){
  .spec-summary{grid-template-columns:repeat(2,1fr)}
}
.dialog.wide{width:min(1120px,94vw)}
.dialog.wide .dialog-body{max-height:62vh}
.parameter-notes{margin-top:12px;padding:11px 12px;border:1px solid #153d4c;background:#071b2a;color:#789eaa;font-size:10px;line-height:1.75}
.parameter-notes b{color:#bfeef6}

/* ===== V19 数据分析大屏：汽车电子 / BMS 风格 ===== */
#analysisView{overflow-y:auto!important;overflow-x:hidden;padding-bottom:28px!important;scrollbar-width:thin;scrollbar-color:#0b7790 #04131f}
#analysisView::-webkit-scrollbar{width:7px}
#analysisView::-webkit-scrollbar-track{background:#04131f}
#analysisView::-webkit-scrollbar-thumb{background:#0b6d83;border-radius:6px}
.analysis-title-row{display:flex;align-items:center;justify-content:space-between;gap:14px}
.analysis-title-row>div:first-child small{display:block;margin-top:4px;color:#4f8391;font-size:9px;letter-spacing:.7px}
.analysis-live-tools{display:flex;align-items:center;gap:10px}
.analysis-ship-selector{display:flex;border:1px solid #0c5368;background:#03131f;padding:2px}
.analysis-ship-selector button{min-width:38px;border:0;border-right:1px solid #0c4254;background:transparent;color:#6e99a5;padding:5px 9px;font-size:10px}
.analysis-ship-selector button:last-child{border-right:0}
.analysis-ship-selector button.active{background:linear-gradient(180deg,#0a617c,#07364b);color:#d7fbff;box-shadow:inset 0 -2px #00e4ff}
.realtime-badge{display:inline-flex;align-items:center;gap:6px;border:1px solid #0a6c73;background:#042126;color:#63f2c0;padding:6px 9px;font-size:9px;letter-spacing:.5px}
.realtime-badge i{width:6px;height:6px;border-radius:50%;background:#43f7a7;box-shadow:0 0 9px #43f7a7;animation:livePulse 1s infinite alternate}
@keyframes livePulse{to{opacity:.35;box-shadow:0 0 2px #43f7a7}}
.analysis-kpi-grid{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:8px;margin:10px 0 12px}
.analysis-kpi{position:relative;min-height:72px;padding:10px 11px;background:linear-gradient(180deg,#071c2b,#05131f);border:1px solid #10465a;box-shadow:inset 0 0 14px #00dfff05}
.analysis-kpi:before{content:"";position:absolute;left:-1px;top:10px;width:2px;height:28px;background:#00dffc;box-shadow:0 0 7px #00dffc}
.analysis-kpi small{display:block;color:#6c95a0;font-size:9px;margin-bottom:6px}
.analysis-kpi b{font-size:20px;color:#d9fbff;font-weight:600;margin-right:4px}
.analysis-kpi em{font-style:normal;font-size:9px;color:#64a0ae}
.analysis-kpi span{display:block;margin-top:5px;font-size:8px;color:#496d79}
.analysis-section-head{display:flex;align-items:flex-end;justify-content:space-between;gap:12px;margin:16px 0 8px;padding-left:9px;border-left:3px solid #00dffc}
.analysis-section-head span{color:#c7f6ff;font-size:12px;font-weight:600}
.analysis-section-head small{color:#4e7884;font-size:8px;text-align:right}
.realtime-chart-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px}
.rt-chart-card{min-height:164px;padding:10px;background:linear-gradient(180deg,rgba(7,29,45,.98),rgba(4,17,28,.98));border:1px solid #103e50;position:relative;overflow:hidden}
.rt-chart-card:after{content:"";position:absolute;right:-30px;top:-30px;width:80px;height:80px;border:1px solid #00dfff0d;transform:rotate(45deg)}
.rt-chart-card.fault{border-color:#a63a4b;box-shadow:inset 0 0 16px #ff304414}
.rt-chart-head{display:flex;align-items:flex-start;justify-content:space-between;gap:6px;margin-bottom:5px}
.rt-chart-head small{display:block;color:#668b97;font-size:8px}
.rt-chart-head strong{display:inline-block;margin-top:3px;color:#d4faff;font-size:15px;font-weight:600}
.rt-chart-head em{font-style:normal;color:#6994a0;font-size:8px;margin-left:3px}
.rt-chart-head .rt-state{font-size:8px;color:#3ee6a1;border:1px solid #216949;padding:2px 5px;background:#05291d}
.rt-chart-card.fault .rt-state{color:#ff7385;border-color:#73313b;background:#2c0c12}
.rt-chart-sub{display:flex;justify-content:space-between;color:#456b77;font-size:7px;margin:1px 0 3px}
.rt-trend-canvas{width:100%;height:90px;display:block}
.analysis-bottom-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:8px}
.cell-live-card{min-height:220px!important;padding:11px!important}
.cell-live-card .card-head small{color:#5d8995;font-size:8px}
.distribution-canvas{width:100%;height:165px;display:block;margin-top:6px}
@media(max-width:1400px){.analysis-kpi-grid{grid-template-columns:repeat(3,1fr)}.realtime-chart-grid{grid-template-columns:repeat(3,1fr)}}
@media(max-width:1100px){.realtime-chart-grid{grid-template-columns:repeat(2,1fr)}.analysis-bottom-grid{grid-template-columns:1fr}}


/* ================= V20 电芯一致性计算 ================= */
.calc-title-row{display:flex;align-items:center;justify-content:space-between;gap:18px}
.calc-toolbar{display:flex;gap:8px;flex-wrap:wrap;justify-content:flex-end}
.calc-toolbar button{border:1px solid rgba(77,193,255,.22);background:rgba(6,35,55,.72);color:#9fdff6;border-radius:7px;padding:7px 12px;font-size:12px;transition:.2s}
.calc-toolbar button:hover{border-color:#39d9ff;color:#fff;box-shadow:0 0 16px rgba(0,214,255,.12)}
.calc-toolbar .primary-calc-btn{background:linear-gradient(135deg,#0e87b6,#11bbd7);color:#fff;border-color:rgba(61,226,255,.55)}
.calc-result-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin:12px 0}
.calc-result-card{position:relative;overflow:hidden;min-height:96px;padding:14px 16px;border:1px solid rgba(58,161,192,.18);border-radius:10px;background:linear-gradient(145deg,rgba(7,35,54,.88),rgba(5,24,39,.9))}
.calc-result-card:before{content:"";position:absolute;left:0;top:0;bottom:0;width:3px;background:#4e8097}
.calc-result-card small{display:block;color:#6f9cae;font-size:11px;margin-bottom:8px}
.calc-result-card strong{font-size:28px;color:#e9fbff;letter-spacing:.5px}
.calc-result-card em{font-style:normal;color:#7ba5b6;font-size:12px;margin-left:4px}
.calc-result-card span{display:block;color:#638694;font-size:10px;margin-top:7px}
.calc-result-card.pass:before{background:#34dda2}.calc-result-card.pass strong{color:#7ff4c8}
.calc-result-card.fail:before{background:#ff5f73}.calc-result-card.fail strong{color:#ff8e9d}
.calc-result-card.partial:before{background:#dba74d}
.calc-result-card.overall strong{font-size:22px}
.calc-layout{display:grid;grid-template-columns:minmax(0,1.45fr) minmax(360px,.85fr);gap:12px;align-items:start}
.calc-input-card,.calc-stats-card{min-height:0}
.calc-card-head{display:flex;justify-content:space-between;align-items:center;gap:12px}
.calc-card-head>div span{display:block;color:#d8f7ff;font-size:13px}.calc-card-head>div small{display:block;color:#5e8798;font-size:10px;margin-top:3px}
.calc-auto-badge{font-size:10px;color:#65e9c0;border:1px solid rgba(71,225,179,.24);padding:4px 8px;border-radius:12px;background:rgba(31,130,104,.09)}
.calc-table-wrap{overflow:auto;max-height:500px;border:1px solid rgba(52,126,151,.13);border-radius:8px}
.calc-input-table,.calc-stats-table{width:100%;border-collapse:collapse;font-size:11px}
.calc-input-table thead,.calc-stats-table thead{position:sticky;top:0;z-index:2;background:#0a2638}
.calc-input-table th,.calc-input-table td,.calc-stats-table th,.calc-stats-table td{padding:7px 8px;border-bottom:1px solid rgba(71,137,158,.10);text-align:center;white-space:nowrap}
.calc-input-table thead th,.calc-stats-table thead th{color:#78aabd;font-weight:500}
.calc-input-table tbody th{color:#9dc9d8;font-weight:500;background:rgba(10,45,63,.32)}
.calc-input{width:90px;padding:6px 7px;border:1px solid rgba(66,153,180,.20);border-radius:5px;background:#061c2a;color:#e6fbff;text-align:center;outline:none}
.calc-input:focus{border-color:#2acbe9;box-shadow:0 0 0 2px rgba(42,203,233,.08)}
.calc-derived{color:#85b5c6;font-variant-numeric:tabular-nums}
.calc-row-max td:first-of-type,.calc-row-max .calc-vdev{color:#ffd36b}
.calc-row-min td:first-of-type,.calc-row-min .calc-vdev{color:#ff8797}
.stats-wrap{max-height:none}
.calc-stats-table tbody th{text-align:left;color:#95c0cf;font-weight:500;background:rgba(9,39,56,.35)}
.calc-stats-table td{color:#d6edf4;font-variant-numeric:tabular-nums}
.calc-formula-box{margin-top:12px;padding:12px 14px;border-radius:8px;background:rgba(5,29,43,.7);border:1px solid rgba(53,141,168,.14)}
.calc-formula-box b{color:#8edaf0;font-size:12px}.calc-formula-box p{color:#658b9a;font-size:10px;line-height:1.65;margin-top:4px}
@media(max-width:1280px){.calc-result-grid{grid-template-columns:repeat(2,1fr)}.calc-layout{grid-template-columns:1fr}}
@media(max-width:760px){.calc-title-row{align-items:flex-start;flex-direction:column}.calc-toolbar{justify-content:flex-start}.calc-result-grid{grid-template-columns:1fr}.calc-input{width:78px}}

/* ================= V21 一致性计算：独立入口 / 宽屏工作台 ================= */
.topbar{grid-template-columns:minmax(430px,1.45fr) minmax(320px,1.35fr) minmax(240px,1fr)}
.calc-page-view{overflow-y:auto!important;overflow-x:hidden!important;padding:20px 24px 38px!important;scrollbar-width:thin;scrollbar-color:#0b7790 #04131f}
.calc-page-view::-webkit-scrollbar{width:7px}.calc-page-view::-webkit-scrollbar-track{background:#04131f}.calc-page-view::-webkit-scrollbar-thumb{background:#0b6d83;border-radius:6px}
.calc-page-shell{width:min(1680px,100%);margin:0 auto}
.calc-page-head{margin-bottom:10px;padding-bottom:14px;border-bottom:1px solid rgba(47,150,182,.16)}
.calc-page-head>div:first-child span{font-size:18px;color:#d9f9ff}.calc-page-head>div:first-child small{display:block;margin-top:5px;color:#527f91;font-size:9px;letter-spacing:1px}
.calc-context-strip{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:8px;margin:10px 0 12px}
.calc-context-strip>div{padding:10px 12px;border:1px solid rgba(43,130,158,.14);border-radius:8px;background:rgba(5,28,42,.58)}
.calc-context-strip small{display:block;color:#597f90;font-size:9px}.calc-context-strip strong{display:block;margin-top:4px;color:#bfeaf4;font-size:11px;font-weight:500}.calc-context-note{border-color:rgba(53,214,168,.16)!important}.calc-context-note strong{color:#69e9bd!important}
.calc-result-grid-wide{gap:10px;margin:0 0 12px}.calc-result-grid-wide .calc-result-card{min-height:108px;padding:15px 17px}.calc-value-line{display:flex;align-items:baseline;gap:4px}.calc-value-line strong{font-size:30px}
.calc-workspace{display:grid;grid-template-columns:minmax(0,1.7fr) minmax(360px,.62fr);gap:12px;align-items:start}
.calc-entry-panel{padding:14px!important}
.calc-cell-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;margin-top:10px}
.calc-cell-card{position:relative;min-width:0;padding:12px;border:1px solid rgba(45,125,151,.16);border-radius:9px;background:linear-gradient(160deg,rgba(7,34,50,.92),rgba(5,23,36,.94));transition:.18s;box-shadow:inset 0 0 18px rgba(0,220,255,.015)}
.calc-cell-card:hover{border-color:rgba(39,201,231,.35);transform:translateY(-1px)}
.calc-cell-card.calc-row-complete{border-color:rgba(62,218,169,.20)}
.calc-cell-card.calc-row-max{box-shadow:inset 3px 0 #e4b74f,inset 0 0 18px rgba(228,183,79,.04)}
.calc-cell-card.calc-row-min{box-shadow:inset 3px 0 #ff6075,inset 0 0 18px rgba(255,96,117,.045)}
.calc-cell-card.calc-row-max.calc-row-min{box-shadow:inset 3px 0 #8bb8c8}
.calc-cell-head{display:flex;align-items:flex-start;justify-content:space-between;margin-bottom:10px;padding-bottom:8px;border-bottom:1px solid rgba(63,135,157,.10)}
.calc-cell-head strong{display:block;color:#d3f5fb;font-size:12px}.calc-cell-head small{display:block;margin-top:2px;color:#4f7788;font-size:8px;letter-spacing:.8px}
.calc-cell-state{font-size:8px;color:#688d9b;border:1px solid rgba(79,126,143,.18);padding:3px 6px;border-radius:10px;background:rgba(8,31,43,.75)}
.calc-row-complete .calc-cell-state{color:#67e9bb;border-color:rgba(74,210,168,.25);background:rgba(29,113,89,.10)}
.calc-field{display:grid;grid-template-columns:42px 1fr;align-items:center;gap:7px;margin-top:7px;color:#688d9c;font-size:9px}
.calc-field>div{position:relative;display:flex;align-items:center}
.calc-field .calc-input{width:100%;height:34px;padding:6px 38px 6px 9px;text-align:left;font-size:12px;background:#061a28;border-color:rgba(74,144,166,.18)}
.calc-field i{position:absolute;right:9px;font-style:normal;color:#54798a;font-size:9px;pointer-events:none}
.calc-deviation-row{display:grid;grid-template-columns:1fr 1fr;gap:5px;margin-top:10px;padding-top:8px;border-top:1px dashed rgba(67,127,146,.14)}
.calc-deviation-row span{min-width:0;color:#52798a;font-size:8px;white-space:nowrap}.calc-deviation-row b{color:#9bcedc;font-weight:500;font-variant-numeric:tabular-nums}
.calc-row-max .calc-vdev{color:#ffd46c}.calc-row-min .calc-vdev{color:#ff8595}
.calc-side-column{display:grid;gap:12px;position:sticky;top:0}
.calc-stats-card{padding:14px!important}.calc-stats-card .calc-table-wrap{border-radius:7px;overflow:hidden}
.calc-stats-card .calc-stats-table{font-size:10px}.calc-stats-card .calc-stats-table th,.calc-stats-card .calc-stats-table td{padding:9px 7px}.calc-stats-card .calc-stats-table tbody th{width:78px}
.calc-rule-card{margin-top:0!important;padding:14px!important;background:linear-gradient(160deg,rgba(7,33,48,.9),rgba(5,22,34,.92))!important}
.calc-rule-title{color:#bfeef6;font-size:12px;font-weight:600;margin-bottom:10px}.calc-rule-list{display:grid;gap:8px}.calc-rule-list>div{display:grid;grid-template-columns:78px 1fr auto;gap:8px;align-items:center;padding:8px 0;border-bottom:1px solid rgba(75,131,149,.09)}.calc-rule-list>div:last-child{border-bottom:0}.calc-rule-list b{font-size:9px!important;color:#8edaf0!important}.calc-rule-list span{font-size:8px;color:#668b9a}.calc-rule-list em{font-size:9px;color:#67e9bb;font-style:normal;white-space:nowrap}.calc-rule-card p{margin-top:10px!important;color:#587d8c!important;font-size:8px!important;line-height:1.7!important}
@media(max-width:1480px){.calc-cell-grid{grid-template-columns:repeat(4,minmax(175px,1fr))}.calc-workspace{grid-template-columns:minmax(0,1.55fr) minmax(330px,.65fr)}}
@media(max-width:1200px){.topbar{grid-template-columns:1.45fr 1.1fr .9fr}.calc-workspace{grid-template-columns:1fr}.calc-side-column{position:static;grid-template-columns:1fr 1fr}.calc-cell-grid{grid-template-columns:repeat(3,minmax(0,1fr))}.calc-context-strip{grid-template-columns:repeat(3,1fr)}}
@media(max-width:850px){.calc-page-view{padding:14px!important}.calc-cell-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.calc-side-column{grid-template-columns:1fr}.calc-context-strip{grid-template-columns:repeat(2,1fr)}}
@media(max-width:580px){.calc-cell-grid,.calc-context-strip{grid-template-columns:1fr}.calc-field{grid-template-columns:38px 1fr}.calc-deviation-row{grid-template-columns:1fr}.calc-toolbar{width:100%}.calc-toolbar button{flex:1 1 45%}}

/* V22 - 8 节电芯一致性计算 + 结果图表 */
.calc-charts-section{
  margin-top:14px;
  padding:14px;
  border:1px solid rgba(48,143,170,.14);
  border-radius:12px;
  background:linear-gradient(160deg,rgba(6,29,43,.72),rgba(4,20,32,.80));
}
.calc-charts-head{
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:16px;
  padding:2px 2px 12px;
  border-bottom:1px solid rgba(64,137,158,.10);
}
.calc-charts-head>div>span{
  display:block;
  color:#d7f7ff;
  font-size:14px;
  font-weight:600;
}
.calc-charts-head>div>small{
  display:block;
  margin-top:4px;
  color:#5d8393;
  font-size:9px;
  letter-spacing:.3px;
}
.calc-chart-ready{
  flex:0 0 auto;
  color:#d7b45f;
  border:1px solid rgba(219,167,77,.22);
  background:rgba(160,111,37,.08);
  border-radius:14px;
  padding:5px 10px;
  font-size:9px;
}
.calc-chart-ready.is-ready{
  color:#69e9bd;
  border-color:rgba(69,214,169,.24);
  background:rgba(29,113,89,.10);
}
.calc-charts-placeholder{
  min-height:172px;
  display:flex;
  flex-direction:column;
  align-items:center;
  justify-content:center;
  gap:7px;
  color:#648696;
  text-align:center;
}
.calc-charts-placeholder:before{
  content:"▥";
  width:46px;
  height:46px;
  display:grid;
  place-items:center;
  border-radius:12px;
  color:#4fc8e7;
  font-size:21px;
  border:1px solid rgba(55,180,210,.18);
  background:rgba(20,117,146,.08);
}
.calc-charts-placeholder strong{font-size:12px;color:#99c6d3;font-weight:500}
.calc-charts-placeholder span{font-size:9px;color:#587887}
.calc-chart-grid{
  display:none;
  grid-template-columns:repeat(2,minmax(0,1fr));
  gap:12px;
  margin-top:12px;
}
.calc-chart-card{
  min-width:0;
  min-height:292px;
  padding:14px!important;
  border-color:rgba(54,145,172,.13)!important;
  background:linear-gradient(160deg,rgba(7,34,49,.92),rgba(4,21,33,.95))!important;
}
.calc-chart-card .card-head{
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:10px;
  margin-bottom:4px;
}
.calc-chart-card .card-head>span{
  color:#cbeef5;
  font-size:11px;
}
.calc-chart-card .card-head>small{
  color:#628595;
  font-size:8px;
  text-align:right;
}
.calc-chart-canvas{
  width:100%;
  display:block;
  margin-top:4px;
}
.calc-chart-legend{
  display:flex;
  align-items:center;
  flex-wrap:wrap;
  gap:12px;
  margin-top:5px;
  padding-top:8px;
  border-top:1px solid rgba(65,130,149,.09);
  color:#5f8392;
  font-size:8px;
}
.calc-chart-legend span{display:flex;align-items:center;gap:5px}
.calc-chart-legend i{display:inline-block;width:13px;height:2px;border-radius:2px;background:#6be8c2}
.calc-chart-legend .legend-min{background:#ff6578}
.calc-chart-legend .legend-max{background:#ffd066}
.calc-chart-legend .legend-limit{background:#ffbe5c}

/* 8 节计算时在大屏幕上两排 4 张，减少纵向滚动 */
.calc-cell-grid{grid-template-columns:repeat(4,minmax(0,1fr))}

@media(max-width:1100px){
  .calc-chart-grid{grid-template-columns:1fr}
}
@media(max-width:700px){
  .calc-charts-head{align-items:flex-start;flex-direction:column}
  .calc-chart-ready{align-self:flex-start}
  .calc-chart-card{min-height:275px}
}
@media(max-width:1200px){.calc-cell-grid{grid-template-columns:repeat(3,minmax(0,1fr))}}
@media(max-width:850px){.calc-cell-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:580px){.calc-cell-grid{grid-template-columns:1fr}}

/* ================= V23 录入区：按温度 / 电压 / 内阻三列分组 ================= */
.calc-cell-grid{
  display:block!important;
  margin-top:10px;
}
.calc-metric-columns{
  display:grid;
  grid-template-columns:repeat(3,minmax(0,1fr));
  gap:12px;
}
.calc-metric-column{
  min-width:0;
  border:1px solid rgba(69,145,169,.16);
  border-radius:11px;
  overflow:hidden;
  background:linear-gradient(160deg,rgba(7,31,46,.94),rgba(4,21,33,.96));
}
.calc-metric-column-head{
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:10px;
  padding:12px 13px;
  border-bottom:1px solid rgba(255,255,255,.055);
}
.calc-metric-column-head>div{
  display:flex;
  align-items:baseline;
  gap:7px;
}
.calc-metric-column-head strong{font-size:13px;letter-spacing:.5px}
.calc-metric-column-head small{font-size:9px;color:#688a99}
.calc-metric-column-head em{
  font-style:normal;
  font-size:8px;
  padding:3px 7px;
  border-radius:10px;
  color:#7297a6;
  background:rgba(255,255,255,.035);
}
.calc-metric-icon{
  display:inline-block;
  width:8px;
  height:8px;
  border-radius:50%;
  box-shadow:0 0 10px currentColor;
}
.calc-metric-list{padding:7px}
.calc-metric-row{
  display:grid;
  grid-template-columns:46px minmax(100px,1fr) minmax(78px,.8fr);
  align-items:center;
  gap:8px;
  min-height:48px;
  padding:6px 7px;
  margin:3px 0;
  border:1px solid transparent;
  border-radius:8px;
  transition:.16s;
}
.calc-metric-row:hover{background:rgba(255,255,255,.026)}
.calc-row-cell b{display:block;font-size:11px;color:#ccecf4}
.calc-row-cell small{display:block;margin-top:2px;font-size:7px;color:#4d7484;letter-spacing:.6px}
.calc-metric-input-wrap{position:relative;display:flex;align-items:center}
.calc-metric-input-wrap .calc-input{
  width:100%;
  height:34px;
  padding:6px 36px 6px 9px;
  border-radius:6px;
  font-size:12px;
  font-variant-numeric:tabular-nums;
  background:#061a28;
  outline:none;
}
.calc-metric-input-wrap i{
  position:absolute;
  right:9px;
  font-size:8px;
  font-style:normal;
  pointer-events:none;
  opacity:.82;
}
.calc-metric-derived{
  text-align:right;
  white-space:nowrap;
  font-size:7.5px;
  color:#557b8a;
  font-variant-numeric:tabular-nums;
}
.calc-metric-row.calc-row-complete{background:rgba(61,211,170,.018)}
.calc-metric-row.metric-max{box-shadow:inset 3px 0 #ffd066}
.calc-metric-row.metric-min{box-shadow:inset 3px 0 #ff6578}

/* 温度：橙色 */
.metric-temp{border-color:rgba(255,166,72,.20)}
.metric-temp .calc-metric-column-head{background:linear-gradient(90deg,rgba(255,151,52,.10),rgba(255,151,52,.015))}
.metric-temp .calc-metric-icon{color:#ff9f43;background:#ff9f43}
.metric-temp .calc-metric-column-head strong{color:#ffc17c}
.metric-temp .calc-metric-input-wrap .calc-input{border:1px solid rgba(255,159,67,.24);color:#ffd0a0;background:rgba(50,29,13,.48)}
.metric-temp .calc-metric-input-wrap i{color:#ffb66a}
.metric-temp .calc-metric-derived{color:#9b744d}

/* 电压：青蓝色 */
.metric-voltage{border-color:rgba(25,199,255,.22)}
.metric-voltage .calc-metric-column-head{background:linear-gradient(90deg,rgba(25,199,255,.10),rgba(25,199,255,.015))}
.metric-voltage .calc-metric-icon{color:#19c7ff;background:#19c7ff}
.metric-voltage .calc-metric-column-head strong{color:#7ee5ff}
.metric-voltage .calc-metric-input-wrap .calc-input{border:1px solid rgba(25,199,255,.25);color:#b9efff;background:rgba(5,37,50,.58)}
.metric-voltage .calc-metric-input-wrap i{color:#57d8ff}
.metric-voltage .calc-metric-derived{color:#5a92a4}

/* 内阻：紫色 */
.metric-resistance{border-color:rgba(167,124,255,.22)}
.metric-resistance .calc-metric-column-head{background:linear-gradient(90deg,rgba(167,124,255,.10),rgba(167,124,255,.015))}
.metric-resistance .calc-metric-icon{color:#a77cff;background:#a77cff}
.metric-resistance .calc-metric-column-head strong{color:#cbb5ff}
.metric-resistance .calc-metric-input-wrap .calc-input{border:1px solid rgba(167,124,255,.25);color:#dccfff;background:rgba(29,21,50,.54)}
.metric-resistance .calc-metric-input-wrap i{color:#b99cff}
.metric-resistance .calc-metric-derived{color:#8172a5}

/* 删除“载入当前船舶模组数据 / 填入演示数据”后，保留两个操作按钮的紧凑排布 */
.calc-toolbar{gap:8px}
.calc-toolbar #calcClear,.calc-toolbar #calcRun{min-width:92px}

@media(max-width:1100px){
  .calc-metric-columns{grid-template-columns:1fr}
  .calc-metric-column{max-width:none}
  .calc-metric-row{grid-template-columns:52px minmax(120px,1fr) minmax(90px,.6fr)}
}
@media(max-width:620px){
  .calc-metric-row{grid-template-columns:44px minmax(0,1fr)}
  .calc-metric-derived{grid-column:2;text-align:left;padding-left:2px}
}

/* V25 - 标题透明故障触发区：不改变标题视觉，只作为演示入口 */
.title-fault-trigger{
  position:absolute;
  inset:-10px -14px;
  z-index:8;
  border:0;
  padding:0;
  margin:0;
  background:transparent;
  color:transparent;
  opacity:0;
  cursor:pointer;
}
.title-fault-trigger:focus{outline:none;}
\n\n/* V27 - draggable vessel info panels and safer popup placement */\n.ship-card,.map-popup{touch-action:none;}\n.ship-card-inner{cursor:move;user-select:none;}\n.map-popup{cursor:move;user-select:none;}\n.ship-card button,.map-popup button{cursor:pointer;}\n.ship-card.is-dragging,.map-popup.is-dragging{transition:none!important;filter:drop-shadow(0 0 18px rgba(0,234,255,.55));}\n.ship-card.is-dragging .ship-card-inner,.map-popup.is-dragging{box-shadow:0 0 0 1px rgba(0,234,255,.55),0 0 22px rgba(0,234,255,.2);}\n
/* ================= V28 数据分析图表点击放大 ================= */
#analysisView .rt-chart-card,#analysisView .cell-live-card{cursor:zoom-in;transition:border-color .18s,transform .18s,box-shadow .18s}
#analysisView .rt-chart-card:hover,#analysisView .cell-live-card:hover{border-color:#12b8da;box-shadow:0 0 0 1px rgba(0,222,255,.08),0 8px 24px rgba(0,0,0,.16);transform:translateY(-1px)}
#analysisView .rt-chart-card:before{content:"点击放大";position:absolute;right:8px;bottom:5px;font-size:7px;color:#3e6b78;opacity:0;transition:opacity .18s}
#analysisView .rt-chart-card:hover:before{opacity:1}
.analysis-chart-mask{position:fixed;inset:0;z-index:9990;background:rgba(0,7,13,.78);backdrop-filter:blur(7px);display:none;align-items:center;justify-content:center;padding:28px}
.analysis-chart-mask.show{display:flex}
.analysis-chart-modal{width:min(1180px,94vw);max-height:92vh;overflow:hidden;background:linear-gradient(155deg,rgba(5,25,40,.98),rgba(3,14,25,.99));border:1px solid rgba(22,190,224,.45);box-shadow:0 24px 90px rgba(0,0,0,.55),inset 0 0 38px rgba(0,215,255,.025);padding:18px 20px 16px}
.analysis-chart-modal-head{display:flex;align-items:flex-start;justify-content:space-between;gap:18px;padding-bottom:12px;border-bottom:1px solid rgba(64,151,174,.16)}
.analysis-chart-modal-head b{display:block;color:#d6fbff;font-size:18px;font-weight:600;letter-spacing:.2px}
.analysis-chart-modal-head small{display:block;margin-top:5px;color:#56808d;font-size:10px}
.analysis-chart-modal-head button{width:34px;height:34px;border:1px solid #126078;background:#061a28;color:#8cddea;font-size:22px;line-height:28px}
.analysis-chart-modal-head button:hover{color:#fff;border-color:#20dfff;background:#0b3547}
.analysis-chart-stats{display:flex;gap:8px;flex-wrap:wrap;padding:11px 0}
.analysis-chart-stats span{min-width:150px;padding:7px 10px;border:1px solid rgba(53,135,158,.16);background:rgba(4,25,39,.72);color:#638d99;font-size:9px}
.analysis-chart-stats b{color:#caeff6;font-size:10px;font-weight:500}
.analysis-chart-canvas-wrap{border:1px solid rgba(47,132,154,.16);background:linear-gradient(180deg,rgba(4,22,35,.82),rgba(2,14,23,.88));padding:4px 8px 0;min-height:410px}
#analysisChartCanvas{display:block;width:100%;height:500px}
.analysis-chart-axis-note{display:flex;justify-content:space-between;gap:12px;padding-top:9px;color:#456e7a;font-size:9px}
@media(max-width:900px){.analysis-chart-mask{padding:10px}.analysis-chart-modal{width:98vw;padding:12px}.analysis-chart-stats span{min-width:120px}.analysis-chart-canvas-wrap{min-height:360px}}

/* ================= V29 双 8S1P 模组计算工作台 ================= */
.calc-groups-stack{display:grid;gap:22px;margin-top:12px}
.calc-module-block{
  position:relative;
  padding:16px;
  border:1px solid rgba(31,190,220,.22);
  background:linear-gradient(160deg,rgba(5,27,41,.78),rgba(3,18,30,.88));
  box-shadow:inset 0 0 34px rgba(0,207,255,.025),0 10px 30px rgba(0,0,0,.12);
}
.calc-module-block[data-calc-group="2"]{border-color:rgba(163,123,255,.23);box-shadow:inset 0 0 34px rgba(166,123,255,.025),0 10px 30px rgba(0,0,0,.12)}
.calc-module-titlebar{
  display:flex;align-items:center;justify-content:space-between;gap:16px;
  margin:-3px 0 13px;padding:0 2px 12px;border-bottom:1px solid rgba(64,144,167,.14)
}
.calc-module-titlebar>div:first-child{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap}
.calc-module-index{
  padding:4px 8px;border:1px solid rgba(31,199,255,.28);background:rgba(20,142,180,.09);
  color:#6fe4ff;font-size:10px;letter-spacing:.8px
}
.calc-module-block[data-calc-group="2"] .calc-module-index{border-color:rgba(167,124,255,.30);background:rgba(112,76,191,.10);color:#c7b0ff}
.calc-module-titlebar strong{font-size:15px;color:#d7f6fb;font-weight:600}
.calc-module-titlebar small{font-size:9px;color:#587d8c}
.calc-module-state{
  min-width:72px;text-align:center;padding:6px 10px;border:1px solid rgba(92,134,148,.18);
  background:rgba(12,38,50,.72);color:#708f9c;font-size:10px
}
.calc-module-state.pass{color:#69e9bd;border-color:rgba(67,221,171,.25);background:rgba(29,112,87,.10)}
.calc-module-state.fail{color:#ff7588;border-color:rgba(255,95,116,.28);background:rgba(130,37,51,.10)}
.calc-module-state.partial{color:#7f9da8}
.calc-module-block .calc-result-grid-wide{margin-top:0}
.calc-module-block .calc-side-column{position:static}
.calc-module-block .calc-charts-section{margin-top:14px;padding-top:13px;border-top:1px solid rgba(61,139,160,.12)}
.calc-module-block[data-calc-group="2"] .calc-charts-section{border-top-color:rgba(148,113,220,.13)}
@media(max-width:850px){.calc-module-block{padding:11px}.calc-module-titlebar{align-items:flex-start;flex-direction:column}.calc-module-state{align-self:flex-start}}


/* V30: 一致性计算改为单窗口模组切换 */
.calc-groups-stack{display:block!important;margin-top:12px}
.calc-module-block{display:none!important;margin:0!important}
.calc-module-block.is-active{display:block!important}
.calc-module-actions{display:flex;align-items:center;justify-content:flex-end;gap:10px;flex-wrap:wrap}
.calc-module-select-wrap{display:flex;align-items:center;gap:8px;padding:6px 8px 6px 10px;border:1px solid rgba(33,195,232,.18);border-radius:7px;background:rgba(5,29,43,.72)}
.calc-module-select-wrap>span{font-size:9px;color:#628b9b;white-space:nowrap}
.calc-module-selector{min-width:190px;height:32px;padding:0 30px 0 11px;border:1px solid rgba(31,198,236,.28);border-radius:5px;outline:none;color:#bfeef8;background:#061b2a;font-size:10px;cursor:pointer;appearance:auto}
.calc-module-selector:hover,.calc-module-selector:focus{border-color:rgba(47,218,248,.62);box-shadow:0 0 0 2px rgba(22,185,222,.08)}
.calc-module-selector option{background:#071c2b;color:#d6f5fb}
.calc-module-titlebar{min-height:64px}
@media(max-width:760px){.calc-module-titlebar{align-items:flex-start;flex-direction:column}.calc-module-actions{width:100%;justify-content:space-between}.calc-module-select-wrap{flex:1}.calc-module-selector{min-width:0;width:100%}}
