/* ===================== A企业能碳综合管理平台 样式 ===================== */
*{margin:0;padding:0;box-sizing:border-box}
:root{
  --bg-1:#071526; --bg-2:#0d2137; --bg-3:#102a4a;
  --panel-bg:rgba(12,30,55,0.68);
  --panel-bg-2:rgba(15,35,65,0.82);
  --primary:#00e676; --primary-2:#00ffa3; --primary-dim:#0a8a4a;
  --cyan:#00d4ff; --cyan-dim:#0a6a8a;
  --warn:#ff7043; --warn-2:#ff3d54; --warn-3:#ffb74d;
  --text:#e8f6ff; --text-sub:#8fb0c9; --text-dim:#5a7a95;
  --border:rgba(0,212,255,0.45);
  --border-soft:rgba(0,212,255,0.22);
  --glow:0 0 14px rgba(0,212,255,0.6),0 0 28px rgba(0,212,255,0.35);
  --glow-green:0 0 14px rgba(0,230,118,0.65),0 0 30px rgba(0,230,118,0.35);
  --hex: polygon(25% 0,75% 0,100% 50%,75% 100%,25% 100%,0 50%);
}
html,body{height:100%;width:100%;font-family:"Microsoft YaHei","PingFang SC","Noto Sans SC",sans-serif;color:var(--text);background:#000;overflow:hidden}
body{
  background:radial-gradient(ellipse at 50% 0,#0d2137 0%,#071526 60%,#040a14 100%);
  font-size:16px;
}
button{font-family:inherit;cursor:pointer;border:none;background:none;color:inherit}
::-webkit-scrollbar{width:6px;height:6px}
::-webkit-scrollbar-track{background:rgba(10,25,45,0.4)}
::-webkit-scrollbar-thumb{background:linear-gradient(180deg,#00d4ff,#00e676);border-radius:3px}

/* 启动屏 */
.boot-screen{position:fixed;inset:0;z-index:9999;background:#040a14;display:flex;align-items:center;justify-content:center;flex-direction:column;transition:opacity .6s}
.boot-inner{display:flex;flex-direction:column;align-items:center;gap:18px}
.boot-hex{width:80px;height:80px;background:linear-gradient(135deg,#00e676,#00d4ff);clip-path:var(--hex);animation:spin 3s linear infinite;box-shadow:var(--glow-green)}
.boot-title{font-size:32px;font-weight:bold;background:linear-gradient(90deg,#00e676,#00d4ff);-webkit-background-clip:text;background-clip:text;color:transparent;letter-spacing:2px}
.boot-sub{font-size:15px;color:var(--text-sub);letter-spacing:6px}
.boot-bar{width:300px;height:3px;background:rgba(0,212,255,0.15);border-radius:2px;overflow:hidden}
.boot-bar span{display:block;width:0;height:100%;background:linear-gradient(90deg,#00e676,#00d4ff);animation:bootfill 2.2s ease forwards;box-shadow:var(--glow)}
.boot-tip{font-size:13px;color:var(--text-dim)}
@keyframes bootfill{to{width:100%}}
@keyframes spin{to{transform:rotate(360deg)}}
.boot-screen.fade-out{opacity:0;pointer-events:none}

.hidden{display:none !important}

/* 顶部导航 */
.top-nav{position:fixed;top:0;left:0;right:0;height:68px;z-index:200;display:flex;align-items:center;justify-content:space-between;padding:0 22px;
  background:linear-gradient(180deg,rgba(7,21,38,0.92),rgba(13,33,55,0.82));
  border-bottom:1px solid var(--border);box-shadow:0 2px 22px rgba(0,212,255,0.22),inset 0 0 18px rgba(0,212,255,0.08);
  backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px)}
.nav-brand{display:flex;align-items:center;gap:12px}
.brand-hex{width:34px;height:34px;background:linear-gradient(135deg,#00e676,#00d4ff);clip-path:var(--hex);box-shadow:var(--glow-green);position:relative}
.brand-hex::after{content:"";position:absolute;inset:5px;background:#071526;clip-path:var(--hex)}
.brand-text .brand-title{font-size:18px;font-weight:bold;background:linear-gradient(90deg,#00e676,#00d4ff);-webkit-background-clip:text;background-clip:text;color:transparent;letter-spacing:1px}
.brand-text .brand-sub{font-size:10px;color:var(--text-dim);letter-spacing:1px}
.nav-tabs{display:flex;gap:2px;flex:1;justify-content:center;flex-wrap:wrap}
.tab{padding:8px 14px;font-size:13px;color:var(--text-sub);border:1px solid transparent;border-radius:4px;transition:all .2s;position:relative;letter-spacing:1px}
.tab:hover{color:var(--cyan);background:rgba(0,212,255,0.1);box-shadow:0 0 10px rgba(0,212,255,0.15)}
.tab.active{color:#000;background:linear-gradient(135deg,#00e676,#00d4ff);box-shadow:var(--glow);font-weight:bold}
.nav-right{display:flex;align-items:center;gap:14px}
.nav-time{text-align:right;font-size:11px;color:var(--text-sub);line-height:1.4}
.nav-clock{font-size:18px;font-weight:bold;color:var(--cyan);font-family:"Share Tech Mono",monospace;letter-spacing:1px;text-shadow:var(--glow)}
.nav-date{color:var(--text-sub);font-size:11px}
.nav-weather{color:var(--primary);font-size:10px}
.nav-actions{display:flex;align-items:center;gap:6px}
.warn-pill{padding:3px 9px;border-radius:10px;font-size:10px;font-weight:bold}
.pill-green{background:rgba(0,230,118,0.15);color:var(--primary);border:1px solid var(--primary)}
.pill-orange{background:rgba(255,183,77,0.15);color:var(--warn-3);border:1px solid var(--warn-3)}
.pill-red{background:rgba(255,61,84,0.15);color:var(--warn-2);border:1px solid var(--warn-2)}
.icon-btn{width:28px;height:28px;border:1px solid var(--border);border-radius:4px;color:var(--cyan);font-size:14px}
.icon-btn:hover{background:rgba(0,212,255,0.15)}
.admin-tag{padding:3px 10px;background:rgba(0,212,255,0.12);border:1px solid var(--border);border-radius:4px;font-size:11px;color:var(--cyan)}

/* 仿真控制条 */
.sim-bar{position:fixed;top:68px;left:0;right:0;height:42px;z-index:199;display:flex;align-items:center;justify-content:space-between;padding:0 22px;
  background:linear-gradient(180deg,rgba(13,33,55,0.92),rgba(10,25,45,0.92));border-bottom:1px solid var(--border-soft);
  box-shadow:inset 0 0 14px rgba(0,212,255,0.08);backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px)}
.sim-left,.sim-right{display:flex;align-items:center;gap:10px}
.sim-label{font-size:11px;color:var(--text-dim)}
.sim-clock{font-size:13px;color:var(--primary);font-family:"Share Tech Mono",monospace;letter-spacing:1px;text-shadow:var(--glow-green)}
.sim-speed{font-size:13px;color:var(--warn-3);font-weight:bold}
.sim-scene{font-size:12px;color:var(--cyan)}
.sim-divider{width:1px;height:18px;background:var(--border-soft)}
.sim-select{background:rgba(0,0,0,0.4);border:1px solid var(--border);color:var(--text);font-size:11px;padding:3px 6px;border-radius:3px}
.sim-btn{padding:4px 10px;font-size:11px;border:1px solid var(--border-soft);border-radius:3px;color:var(--text-sub);background:rgba(0,0,0,0.3)}
.sim-btn:hover{color:var(--cyan);border-color:var(--border);background:rgba(0,212,255,0.12);box-shadow:0 0 8px rgba(0,212,255,0.15)}
.sim-btn.active{color:#000;background:linear-gradient(135deg,#00e676,#00d4ff);border-color:transparent}
.sim-btn.warn{color:var(--warn-2);border-color:rgba(255,61,84,0.4)}
.sim-btn.warn:hover{background:rgba(255,61,84,0.15)}

/* 主舞台 */
.main-stage{position:fixed;top:110px;bottom:30px;left:0;right:0;overflow:hidden}
.page{position:absolute;inset:0;overflow:auto;opacity:0;pointer-events:none;transition:opacity .35s}
.page.active{opacity:1;pointer-events:auto}

/* 数字孪生车间布局 */
.workshop-grid{display:grid;grid-template-columns:340px minmax(0,1fr) 340px;height:100%;gap:8px;padding:8px}
.panel{background:linear-gradient(135deg,rgba(12,30,55,0.72),rgba(8,22,40,0.85));border:1px solid var(--border);border-radius:8px;overflow-y:auto;padding:8px 10px;position:relative;min-width:0;
  box-shadow:inset 0 0 24px rgba(0,212,255,0.08),0 4px 20px rgba(0,0,0,0.35);
  backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px)}
.panel::before,.panel::after{content:"";position:absolute;width:18px;height:18px;border:2px solid var(--primary);pointer-events:none}
.panel::before{top:-1px;left:-1px;border-right:none;border-bottom:none}
.panel::after{bottom:-1px;right:-1px;border-left:none;border-top:none}
.panel-title{font-size:19px;font-weight:bold;color:var(--primary);padding:4px 8px;margin-bottom:6px;border-bottom:1px solid var(--border-soft);display:flex;align-items:center;gap:8px;text-shadow:var(--glow-green);letter-spacing:1px}
.hex-icon{width:14px;height:14px;background:var(--primary);clip-path:var(--hex)}
.kpi-grid{display:grid;grid-template-columns:1fr 1fr;gap:6px;margin-bottom:8px}
.kpi-card{background:linear-gradient(135deg,rgba(0,212,255,0.10),rgba(0,230,118,0.06));border:1px solid var(--border-soft);border-radius:6px;padding:8px;position:relative;overflow:hidden;
  box-shadow:inset 0 0 12px rgba(0,212,255,0.06)}
.kpi-card::before{content:"";position:absolute;top:0;left:0;width:30%;height:2px;background:linear-gradient(90deg,var(--primary),transparent)}
.kpi-label{font-size:12px;color:var(--text-sub);letter-spacing:1px}
.kpi-value{font-size:26px;font-weight:bold;color:var(--primary);font-family:"Share Tech Mono",monospace;text-shadow:var(--glow-green);margin:2px 0}
.kpi-unit{font-size:10px;color:var(--text-dim)}
.kpi-yoy{font-size:10px;color:var(--cyan);margin-top:2px}
.kpi-yoy.down{color:var(--warn-2)}
.chart-block{margin-bottom:8px;background:rgba(0,0,0,0.22);border:1px solid var(--border-soft);border-radius:6px;padding:6px;
  box-shadow:inset 0 0 12px rgba(0,212,255,0.05)}
.block-title{font-size:14px;color:var(--cyan);font-weight:bold;display:flex;justify-content:space-between;align-items:center;margin-bottom:4px}
.block-sub{font-size:10px;color:var(--text-dim);font-weight:normal}
.chart{width:100%;height:140px}

.quota-bar{height:22px;background:rgba(0,0,0,0.4);border:1px solid var(--border-soft);border-radius:11px;overflow:hidden;position:relative}
.quota-fill{height:100%;width:0;background:linear-gradient(90deg,#00e676,#00d4ff);transition:width .5s;box-shadow:var(--glow-green)}
.quota-bar.over .quota-fill{background:linear-gradient(90deg,#ff7043,#ff3d54);box-shadow:0 0 12px rgba(255,61,84,0.6)}
.quota-text{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-size:11px;color:var(--text);font-weight:bold;text-shadow:0 0 4px #000}

.calendar-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:2px}
.cal-cell{aspect-ratio:1;border-radius:2px;font-size:9px;display:flex;align-items:center;justify-content:center;color:var(--text-dim)}
.cal-cell.head{color:var(--text-sub);background:transparent;font-weight:bold}
.cal-cell.day{background:rgba(0,212,255,0.06);border:1px solid var(--border-soft)}
.cal-cell.l1{background:rgba(0,230,118,0.15)}
.cal-cell.l2{background:rgba(0,230,118,0.35)}
.cal-cell.l3{background:rgba(255,183,77,0.4)}
.cal-cell.l4{background:rgba(255,61,84,0.55);color:var(--text)}

/* 3D canvas */
.workshop-canvas-wrap{position:relative;background:radial-gradient(ellipse at center,#0d2137,#040a14);border:1px solid var(--border);border-radius:6px;overflow:hidden}
.workshop-canvas-wrap::before,.workshop-canvas-wrap::after{content:"";position:absolute;width:20px;height:20px;border:2px solid var(--cyan);pointer-events:none;z-index:5}
.workshop-canvas-wrap::before{top:6px;left:6px;border-right:none;border-bottom:none}
.workshop-canvas-wrap::after{bottom:6px;right:6px;border-left:none;border-top:none}
.three-canvas{width:100%;height:100%;cursor:grab}
.three-canvas:active{cursor:grabbing}
.view-controls,.shift-toggle{position:absolute;z-index:10;display:flex;gap:4px;background:rgba(7,21,38,0.7);padding:4px;border:1px solid var(--border-soft);border-radius:4px;
  backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px)}
.view-controls{top:10px;right:10px}
.shift-toggle{top:10px;left:10px}
.view-btn,.shift-btn{padding:5px 10px;font-size:11px;color:var(--text-sub);border:1px solid transparent;border-radius:3px;background:transparent}
.view-btn:hover,.shift-btn:hover{color:var(--cyan);background:rgba(0,212,255,0.1)}
.view-btn.active,.shift-btn.active{color:#000;background:linear-gradient(135deg,#00e676,#00d4ff)}

.legend-box{position:absolute;bottom:10px;left:10px;z-index:10;display:flex;gap:10px;background:rgba(7,21,38,0.72);padding:6px 10px;border:1px solid var(--border-soft);border-radius:4px;font-size:10px;
  backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px)}
.legend-item{display:flex;align-items:center;gap:4px;color:var(--text-sub)}
.dot{width:8px;height:8px;border-radius:50%}
.dot-run{background:#00e676;box-shadow:0 0 6px #00e676}
.dot-idle{background:#ffb74d}
.dot-fault{background:#ff3d54;box-shadow:0 0 6px #ff3d54;animation:pulse 1s infinite}
.dot-233{background:#00d4ff}
.dot-215{background:#00ffa3}
@keyframes pulse{50%{opacity:0.4}}

.device-tooltip{position:absolute;z-index:50;background:rgba(7,21,38,0.95);border:1px solid var(--cyan);border-radius:6px;padding:10px 12px;min-width:220px;font-size:12px;box-shadow:var(--glow);pointer-events:auto}
.device-tooltip h4{color:var(--primary);font-size:14px;margin-bottom:6px;border-bottom:1px solid var(--border-soft);padding-bottom:4px}
.device-tooltip .row{display:flex;justify-content:space-between;margin:3px 0;color:var(--text-sub)}
.device-tooltip .row b{color:var(--cyan);font-family:"Share Tech Mono",monospace}

.alarm-popup{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);z-index:60;width:360px;background:linear-gradient(135deg,rgba(40,10,15,0.96),rgba(20,8,12,0.96));border:2px solid var(--warn-2);border-radius:8px;padding:14px 16px;box-shadow:0 0 20px rgba(255,61,84,0.6);animation:alarmPulse 1.5s infinite}
@keyframes alarmPulse{50%{box-shadow:0 0 30px rgba(255,61,84,0.9)}}
.alarm-popup h4{color:var(--warn-2);font-size:16px;margin-bottom:8px;display:flex;align-items:center;gap:6px}
.alarm-popup .row{font-size:12px;margin:4px 0;color:var(--text)}
.alarm-popup .row b{color:var(--warn-3)}
.alarm-popup .actions{margin-top:10px;text-align:right}
.alarm-popup .btn-ok{padding:5px 16px;background:linear-gradient(135deg,#00e676,#00d4ff);color:#000;border-radius:4px;font-size:12px;font-weight:bold}

.oee-wrap{text-align:center;padding:6px}
.oee-big{font-size:48px;font-weight:bold;background:linear-gradient(135deg,#00e676,#00d4ff);-webkit-background-clip:text;background-clip:text;color:transparent;font-family:"Share Tech Mono",monospace;text-shadow:0 0 30px rgba(0,230,118,0.4)}
.oee-sub{font-size:11px;color:var(--text-sub);margin-top:4px}
.oee-sub span{color:var(--cyan);font-weight:bold}

.order-table{font-size:13px}
.order-row{display:grid;grid-template-columns:1.2fr 1fr 1fr 1fr 0.8fr;gap:4px;padding:4px;border-bottom:1px solid var(--border-soft);color:var(--text-sub)}
.order-row.head{color:var(--cyan);font-weight:bold;background:rgba(0,212,255,0.05)}
.order-row b{color:var(--primary);font-family:"Share Tech Mono",monospace}

.data-stream{font-size:13px;font-family:"Share Tech Mono",monospace;color:var(--text-sub);max-height:160px;overflow-y:auto}
.data-stream .ds-row{padding:2px 0;border-bottom:1px dashed var(--border-soft)}
.data-stream .ds-time{color:var(--cyan)}
.data-stream .ds-msg{color:var(--text)}
.data-stream .ds-warn{color:var(--warn-2)}

/* 通用 ERP 页面 */
.erp-page{padding:14px;height:100%;overflow-y:auto}
.erp-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:12px;padding-bottom:10px;border-bottom:1px solid var(--border)}
.erp-title{font-size:28px;font-weight:bold;background:linear-gradient(90deg,#00e676,#00d4ff);-webkit-background-clip:text;background-clip:text;color:transparent;letter-spacing:2px}
.erp-sub{font-size:11px;color:var(--text-dim)}
.erp-filters{display:flex;gap:8px;align-items:center;font-size:12px;color:var(--text-sub)}
.erp-filters select,.erp-filters input{background:rgba(0,0,0,0.4);border:1px solid var(--border);color:var(--text);padding:4px 8px;border-radius:3px;font-size:11px}
.erp-grid{display:grid;gap:10px}
.erp-card{background:linear-gradient(135deg,rgba(12,30,55,0.72),rgba(8,22,40,0.85));border:1px solid var(--border-soft);border-radius:6px;padding:10px;position:relative;
  box-shadow:inset 0 0 18px rgba(0,212,255,0.07),0 4px 16px rgba(0,0,0,0.3)}
.erp-card::before{content:"";position:absolute;top:0;left:0;width:24px;height:2px;background:linear-gradient(90deg,var(--primary),transparent)}
.erp-card-title{font-size:15px;color:var(--cyan);font-weight:bold;margin-bottom:6px;display:flex;justify-content:space-between;align-items:center}
.kpi-big-grid{display:grid;grid-template-columns:repeat(6,1fr);gap:8px;margin-bottom:10px}
.kpi-big{background:linear-gradient(135deg,rgba(0,212,255,0.10),rgba(0,230,118,0.06));border:1px solid var(--border-soft);border-radius:6px;padding:10px;position:relative;overflow:hidden;
  box-shadow:inset 0 0 14px rgba(0,212,255,0.06)}
.kpi-big::before{content:"";position:absolute;top:0;left:0;width:40%;height:2px;background:var(--primary)}
.kpi-big .lbl{font-size:11px;color:var(--text-sub)}
.kpi-big .val{font-size:35px;font-weight:bold;color:var(--primary);font-family:"Share Tech Mono",monospace;text-shadow:var(--glow-green);margin:4px 0;line-height:1}
.kpi-big .yoy{font-size:10px;color:var(--cyan)}
.kpi-big .yoy.up{color:var(--warn-2)}
.kpi-big .yoy.down{color:var(--primary)}
.kpi-big .unit{font-size:11px;color:var(--text-dim)}

.erp-table{width:100%;border-collapse:collapse;font-size:11px}
.erp-table th{background:rgba(0,212,255,0.08);color:var(--cyan);padding:6px;text-align:left;border:1px solid var(--border-soft);font-weight:bold}
.erp-table td{padding:6px;border:1px solid var(--border-soft);color:var(--text)}
.erp-table td b{color:var(--primary);font-family:"Share Tech Mono",monospace}
.erp-table tr:hover td{background:rgba(0,212,255,0.04)}

.sidebar-layout{display:grid;grid-template-columns:180px 1fr;gap:10px;height:100%}
.sidebar{background:linear-gradient(135deg,rgba(12,30,55,0.72),rgba(8,22,40,0.85));border:1px solid var(--border-soft);border-radius:6px;padding:6px;overflow-y:auto}
.sidebar-group{margin-bottom:6px}
.sidebar-group-title{font-size:11px;color:var(--cyan);font-weight:bold;padding:4px 6px;border-bottom:1px solid var(--border-soft);margin-bottom:4px}
.sidebar-item{padding:6px 8px;font-size:12px;color:var(--text-sub);border-radius:3px;cursor:pointer;display:flex;align-items:center;gap:6px}
.sidebar-item:hover{background:rgba(0,212,255,0.08);color:var(--cyan)}
.sidebar-item.active{background:linear-gradient(135deg,rgba(0,230,118,0.18),rgba(0,212,255,0.1));color:var(--primary);border-left:2px solid var(--primary)}
.sidebar-item::before{content:"";width:4px;height:4px;background:var(--text-dim);border-radius:50%}
.sidebar-item.active::before{background:var(--primary)}

/* 算法页面 */
.algo-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px;padding:14px;height:100%;overflow-y:auto}
.algo-grid.full{grid-template-columns:1fr}
.algo-card{background:linear-gradient(135deg,rgba(12,30,55,0.72),rgba(8,22,40,0.85));border:1px solid var(--border-soft);border-radius:6px;padding:10px;position:relative;
  box-shadow:inset 0 0 18px rgba(0,212,255,0.07),0 4px 16px rgba(0,0,0,0.3)}
.algo-card::before{content:"";position:absolute;top:0;left:0;width:30px;height:2px;background:linear-gradient(90deg,var(--primary),transparent)}
.algo-card-title{font-size:16px;color:var(--primary);font-weight:bold;margin-bottom:8px;text-shadow:var(--glow-green)}
.algo-card .chart{height:280px}
.algo-meta{font-size:11px;color:var(--text-sub);margin:6px 0;line-height:1.7}
.algo-meta b{color:var(--cyan)}

.state-bits{display:grid;grid-template-columns:repeat(8,1fr);gap:4px;margin:8px 0}
.state-bit{padding:8px 4px;text-align:center;font-size:11px;border-radius:3px;background:rgba(0,0,0,0.4);border:1px solid var(--border-soft);color:var(--text-dim)}
.state-bit.active{background:linear-gradient(135deg,#00e676,#00d4ff);color:#000;font-weight:bold;box-shadow:var(--glow-green);border-color:transparent}
.state-bit .code{display:block;font-size:14px;font-weight:bold;color:var(--cyan)}
.state-bit.active .code{color:#000}

.action-list{display:grid;grid-template-columns:repeat(3,1fr);gap:4px;font-size:10px}
.action-list .act{padding:4px;background:rgba(0,0,0,0.3);border:1px solid var(--border-soft);border-radius:3px;color:var(--text-sub)}
.action-list .act.selected{background:linear-gradient(135deg,rgba(0,230,118,0.2),rgba(0,212,255,0.1));color:var(--primary);border-color:var(--primary)}

.scene-tabs{display:flex;gap:4px;margin-bottom:8px}
.scene-tab{padding:6px 12px;font-size:12px;border:1px solid var(--border-soft);border-radius:4px;color:var(--text-sub);background:rgba(0,0,0,0.3)}
.scene-tab.active{color:#000;background:linear-gradient(135deg,#00e676,#00d4ff);border-color:transparent}

.compare-table{width:100%;font-size:11px;border-collapse:collapse}
.compare-table th,.compare-table td{padding:6px;border:1px solid var(--border-soft);text-align:center}
.compare-table th{background:rgba(0,212,255,0.08);color:var(--cyan)}
.compare-table .exp{color:var(--primary);font-weight:bold;font-family:"Share Tech Mono",monospace}
.compare-table .ctrl{color:var(--warn-3);font-family:"Share Tech Mono",monospace}

.log-list{max-height:200px;overflow-y:auto;font-size:11px;font-family:"Share Tech Mono",monospace}
.log-row{padding:3px 4px;border-bottom:1px dashed var(--border-soft);color:var(--text-sub)}
.log-row .lt{color:var(--cyan)}
.log-row.warn{color:var(--warn-3)}
.log-row.fault{color:var(--warn-2)}

/* 底部状态 */
.foot-bar{position:fixed;bottom:0;left:0;right:0;height:28px;z-index:200;display:flex;justify-content:space-between;align-items:center;padding:0 22px;font-size:11px;color:var(--text-dim);
  background:linear-gradient(180deg,rgba(13,33,55,0.85),rgba(7,21,38,0.95));border-top:1px solid var(--border-soft)}
.foot-left .online{color:var(--primary)}
.foot-mid{color:var(--text-sub)}
.foot-right{color:var(--text-dim)}

/* 响应式 */
@media (max-width:1920px){
  .workshop-grid{grid-template-columns:320px minmax(0,1fr) 320px;gap:6px;padding:6px}
}
@media (max-width:1600px){
  .workshop-grid{grid-template-columns:300px minmax(0,1fr) 300px}
  .kpi-big .val{font-size:28px}
  .kpi-grid{grid-template-columns:1fr 1fr}
}
@media (max-width:1280px){
  .nav-tabs .tab{padding:6px 8px;font-size:11px}
  .workshop-grid{grid-template-columns:260px minmax(0,1fr) 260px}
  .kpi-big-grid{grid-template-columns:repeat(3,1fr)}
  .algo-grid{grid-template-columns:1fr}
}
