/* ============================================================
   视觉规范统一增强层 · 2026-08-13 改造
   基于现有 styles.css，集中承载「配色统一 / 卡片发光边框+四角装饰 /
   标题青色竖条 / 呼吸光效 / 首页三栏重构 / 收益看板 / 背书栏 /
   模块标题统一升级」等新增与覆盖样式。
   所有新增部分标注 [NEW]，覆盖部分标注 [OVERRIDE]，便于后续维护。
   ============================================================ */

/* —— [OVERRIDE] 背景氛围统一为冷蓝，去除紫/绿杂色光晕 —— */
body::before{
  background:
    radial-gradient(circle at 18% 12%, rgba(34,211,238,.10), transparent 46%),
    radial-gradient(circle at 82% 22%, rgba(56,189,248,.07), transparent 46%),
    radial-gradient(circle at 50% 100%, rgba(34,211,238,.06), transparent 52%) !important;
}
.bg-mesh .b2{background:radial-gradient(circle,#22d3ee,transparent 70%) !important;animation-delay:5s}
.bg-mesh .b3{background:radial-gradient(circle,#38bdf8,transparent 70%) !important;animation-delay:10s}

/* —— [NEW] 统一卡片：发光边框 + 四角装饰短线 + hover 上浮 —— */
.panel,.home-panel,.kpi-card,.compliance-card,.ov-card,.stat-card,
.rule-item,.rul-item,.comp-item,.tpl-card,.kb-item,.spare-item,
.factor-item,.risk-item,.cert-item,.m-metric,.ag,.wo-cell,.diag-ov-card,
.perf-card,.arch-layer-tag,.edge-ov-item,.pp-range,.energy-kpi{
  position:relative !important;
  border:1px solid rgba(34,211,238,.22) !important;
  box-shadow:0 0 0 1px rgba(34,211,238,.04), 0 8px 30px rgba(2,11,26,.45) !important;
}
/* 四角装饰短线（左上 + 右下 L 形，2px 青色） */
.panel::after,.home-panel::after,.kpi-card::after,.compliance-card::after,
.ov-card::after,.stat-card::after,.rule-item::after,.rul-item::after,
.comp-item::after,.tpl-card::after,.risk-item::after,.cert-item::after{
  content:'';position:absolute;inset:6px;pointer-events:none;border-radius:inherit;z-index:1;
  background:
    linear-gradient(var(--cd,#22d3ee),var(--cd,#22d3ee)) 0 0/14px 2px no-repeat,
    linear-gradient(var(--cd,#22d3ee),var(--cd,#22d3ee)) 0 0/2px 14px no-repeat,
    linear-gradient(var(--cd,#22d3ee),var(--cd,#22d3ee)) 100% 100%/14px 2px no-repeat,
    linear-gradient(var(--cd,#22d3ee),var(--cd,#22d3ee)) 100% 100%/2px 14px no-repeat;
  opacity:.5;
}
/* hover：轻微上浮 2px + 边框亮度提升 + 阴影增强 */
.panel:hover,.home-panel:hover,.kpi-card:hover,.compliance-card:hover,.ov-card:hover,.stat-card:hover,
.rule-item:hover,.rul-item:hover,.comp-item:hover,.tpl-card:hover,.risk-item:hover,.cert-item:hover,
.m-metric:hover,.diag-ov-card:hover,.perf-card:hover,.arch-layer-tag:hover,.edge-ov-item:hover,.energy-kpi:hover{
  transform:translateY(-2px) !important;
  border-color:rgba(34,211,238,.5) !important;
  box-shadow:0 0 0 1px rgba(34,211,238,.08), 0 12px 38px rgba(2,11,26,.6), 0 0 18px rgba(34,211,238,.12) !important;
}

/* —— [NEW] 卡片标题左侧 2px 青蓝色竖条标识 —— */
.home-panel-title::before,.panel-title::before,.module-title::before,.mh-title::before{
  content:'';display:inline-block;width:3px;height:1em;background:var(--n-cyan);
  border-radius:2px;margin-right:8px;vertical-align:-2px;box-shadow:0 0 8px rgba(34,211,238,.6);
}
.esg-col .panel-title::before,.mh-title::before{content:''}

/* —— [NEW] 首页 KPI 核心数值放大 30% —— */
.home-kpi-row .kpi-value{font-size:34px}
.home-kpi-row .kpi-card{padding:16px 16px 14px}
.kpi-valnote{font-size:10.5px;color:var(--n-cyan);margin-top:7px;opacity:.9;line-height:1.4;
  border-top:1px dashed rgba(34,211,238,.2);padding-top:6px}

/* —— [NEW] 红线预警项呼吸光效 —— */
@keyframes redBreath{0%,100%{box-shadow:0 0 0 1px rgba(239,68,68,.25),0 8px 24px rgba(239,68,68,.12)}50%{box-shadow:0 0 0 2px rgba(239,68,68,.5),0 8px 30px rgba(239,68,68,.30)}}
.kpi-card.kpi-alarm{animation:redBreath 1.8s ease-in-out infinite}

/* —— [NEW] 数据馈接状态：呼吸光效 —— */
@keyframes statusBreath{0%,100%{box-shadow:0 0 0 0 rgba(16,185,129,.55)}50%{box-shadow:0 0 0 5px rgba(16,185,129,0)}}
.db-status .status-dot{animation:statusBreath 1.8s ease-in-out infinite}
@keyframes pillBreath{0%,100%{box-shadow:0 0 0 0 rgba(16,185,129,.22)}50%{box-shadow:0 0 10px 1px rgba(16,185,129,.35)}}
.db-status{animation:pillBreath 2.4s ease-in-out infinite}

/* —— [NEW] 侧边栏选中态强化 + 分组标题弱化 —— */
.nav-group-title{color:var(--t3);opacity:.7;font-size:10px;letter-spacing:1.5px;padding:16px 20px 6px}
.nav-item{font-size:12.5px;color:var(--t2);padding:10px 18px}
.nav-item.active{background:linear-gradient(90deg,rgba(34,211,238,.16),transparent);
  color:var(--n-cyan);border-left:3px solid var(--n-cyan);font-weight:600}
.nav-item.active .nav-no{color:var(--n-cyan);background:rgba(34,211,238,.16)}
.nav-item:hover{background:rgba(34,211,238,.06);color:var(--t1)}

/* ====================== 首页三栏主视觉 ====================== */
/* [OVERRIDE] 三栏比例 25/50/25 → 28/44/28，缓解左侧图表压缩 */
/* [FIX] 用 fr 替代 %，百分比列 + gap 会超出容器约 28px，导致右栏右边框被挤出可视区；fr 会先扣除 gap，三列恰好填满 */
.home-main3{display:grid;grid-template-columns:30fr 40fr 30fr;gap:14px;margin-bottom:14px;align-items:stretch}
/* [OVERRIDE 2026-08-13] 左栏上下两模块 60/40 高度分配 + 图表填充容器 */
.home-col-left{display:flex;flex-direction:column;gap:14px;min-width:0}
.home-col-left > .home-panel:first-child{flex:6 1 0;min-height:0}
.home-col-left > .home-panel:last-child{flex:4 1 0;min-height:0}
.home-col-left .home-panel-body{flex:1;min-height:0;display:flex;flex-direction:column}
.home-col-left .chart-load{flex:1;width:100%;min-height:230px;height:auto;aspect-ratio:auto}
/* [FIX 2026-08-17] 取消强制 min-height，让环形图按卡片 body 实际高度 flex 填充，
   否则 240px 会撑破下方卡片导致环形+图例被卡片下边框裁切（用户反馈问题根因）。
   同时下方卡片 body 减少上内边距(图表上移)、增加下内边距(图例留白)，环形半径同步缩小。 */
.home-col-left .chart-doughnut{flex:1;width:100%;min-height:0;height:auto}
.home-col-left > .home-panel:last-child .home-panel-body{padding:8px 12px 16px}
.home-col-mid{position:relative;border-radius:var(--r);overflow:hidden;min-height:460px;min-width:0;
  border:1px solid rgba(34,211,238,.28);box-shadow:0 0 0 1px rgba(34,211,238,.05),0 8px 30px rgba(2,11,26,.5);background:#020b1a}
.home-aerial{position:absolute;inset:0;background:url('zero-carbon-park-night.webp') center/cover no-repeat;transform:scale(1.04);transition:transform 10s ease,background-position .6s ease}
.home-col-mid:hover .home-aerial{transform:scale(1.09)}
/* [NEW 2026-08-13] 深夜蓝调：径向渐变蒙层，中心透明 → 四周 #020b1a 过渡，消除边缘割裂 */
.home-aerial-mask{position:absolute;inset:0;z-index:3;pointer-events:none;
  background:radial-gradient(ellipse 90% 88% at 50% 48%,rgba(2,11,26,0) 0%,rgba(2,11,26,0) 28%,rgba(2,11,26,.55) 65%,rgba(2,11,26,.92) 100%),
             linear-gradient(180deg,rgba(2,11,26,.25),rgba(2,11,26,.45))}
.aerial-title{position:absolute;left:14px;top:12px;z-index:3;font-size:13px;font-weight:700;color:#EAF2FF;
  text-shadow:0 2px 10px rgba(0,0,0,.6);display:flex;align-items:center;gap:6px}
.aerial-title::before{content:'';width:3px;height:14px;background:var(--n-cyan);border-radius:2px;box-shadow:0 0 8px rgba(34,211,238,.6)}
/* [NEW] 顶部 3 个数据胶囊（总实时功率 / 当日碳排放 / 绿电直供比例）—— 毛玻璃半透明发光 */
.aerial-caps{position:absolute;top:46px;left:50%;transform:translateX(-50%);z-index:7;display:flex;gap:10px}
.cap{display:flex;flex-direction:column;align-items:center;min-width:92px;padding:7px 15px;border-radius:12px;
  background:rgba(6,18,38,.42);border:1px solid rgba(34,211,238,.55);box-shadow:0 0 18px rgba(34,211,238,.28),inset 0 0 12px rgba(34,211,238,.08);
  backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px)}
.cap-l{font-size:10px;color:var(--t2);white-space:nowrap;text-shadow:0 1px 2px rgba(0,0,0,.5)}
.cap-v{font-size:20px;font-weight:800;color:var(--n-cyan);font-family:'Times New Roman',monospace;line-height:1.15;text-shadow:0 0 10px rgba(34,211,238,.5)}
.cap-u{font-size:10px;color:var(--t2);text-shadow:0 1px 2px rgba(0,0,0,.5)}
/* [OVERRIDE] 设备点位按类型颜色（--ptc）+ 呼吸光；z-index 高于科技网格 */
.aerial-pt{position:absolute;z-index:6;width:15px;height:15px;border-radius:50%;background:var(--ptc,var(--n-cyan));cursor:pointer;
  box-shadow:0 0 0 4px color-mix(in srgb,var(--ptc,#22d3ee) 20%,transparent),0 0 14px 3px var(--ptc,#22d3ee);animation:ptBreath 2.4s ease-in-out infinite}
.aerial-pt::after{content:'';position:absolute;top:50%;left:50%;width:6px;height:6px;border-radius:50%;background:#fff;transform:translate(-50%,-50%)}
.aerial-pt:hover{transform:scale(1.35);z-index:6}
@keyframes ptBreath{0%,100%{box-shadow:0 0 0 4px color-mix(in srgb,var(--ptc,#22d3ee) 20%,transparent),0 0 14px 3px var(--ptc,#22d3ee)}50%{box-shadow:0 0 0 10px color-mix(in srgb,var(--ptc,#22d3ee) 6%,transparent),0 0 22px 7px var(--ptc,#22d3ee)}}
.aerial-pt .pt-tip{position:absolute;bottom:160%;left:50%;transform:translateX(-50%);white-space:nowrap;
  background:rgba(6,18,38,.92);border:1px solid rgba(34,211,238,.55);border-radius:8px;padding:7px 11px;font-size:11px;color:var(--t1);
  opacity:0;visibility:hidden;transition:.18s;z-index:10;pointer-events:none;box-shadow:0 8px 30px rgba(0,0,0,.5);
  backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px)}
.aerial-pt .pt-tip b{color:var(--n-cyan)}
.aerial-pt .pt-tip .pt-tip-status{display:inline-block;margin-left:7px;padding:1px 6px;border-radius:8px;font-size:10px;background:rgba(16,185,129,.18);color:#6ee7b7;border:1px solid rgba(16,185,129,.4)}
.aerial-pt.pt-critical .pt-tip .pt-tip-status{background:rgba(239,68,68,.18);color:#fca5a5;border-color:rgba(239,68,68,.4)}
.aerial-pt:hover .pt-tip{opacity:1;visibility:visible}
/* [NEW 2026-08-13] 常驻小型数据标签（点位旁实时数值，右侧点位左置防溢出） */
.aerial-pt .pt-label{position:absolute;left:20px;top:50%;transform:translateY(-50%);white-space:nowrap;z-index:6;
  font-size:10px;font-weight:700;color:var(--ptc);background:rgba(2,11,26,.55);
  border:1px solid color-mix(in srgb,var(--ptc) 55%,transparent);border-radius:6px;padding:1px 6px;
  pointer-events:none;text-shadow:0 0 6px rgba(0,0,0,.6);box-shadow:0 0 8px color-mix(in srgb,var(--ptc) 30%,transparent)}
.aerial-pt .pt-label.pt-label-left{left:auto;right:20px}
/* [NEW 2026-08-13] 区域动态光效底座（光伏亮度波动 / 储能充放电呼吸 绿↔蓝） */
.aerial-pt .pt-region{position:absolute;top:50%;left:50%;width:44px;height:44px;transform:translate(-50%,-50%);border-radius:50%;
  background:radial-gradient(circle,color-mix(in srgb,var(--ptc) 70%,transparent),transparent 70%);filter:blur(6px);opacity:.5;pointer-events:none;z-index:1}
.aerial-pt .pt-region-pv{animation:pvFlicker 3.4s ease-in-out infinite}
.aerial-pt .pt-region-ess{animation:essBreathe 4s ease-in-out infinite}
@keyframes pvFlicker{0%,100%{opacity:.32}25%{opacity:.62}45%{opacity:.4}65%{opacity:.78}82%{opacity:.5}}
@keyframes essBreathe{0%,100%{opacity:.4;background:radial-gradient(circle,rgba(16,185,129,.7),transparent 70%)}50%{opacity:.85;background:radial-gradient(circle,rgba(56,189,248,.85),transparent 70%)}}
.home-col-right{display:flex;flex-direction:column;gap:14px;min-width:0}
/* [OPT 2026-08-14] 限制右侧面板体高度，避免合规/告警内容把整行顶高，使中栏更紧凑（自带 .scroll 内部滚动） */
.home-col-right .home-panel-body{max-height:240px}

/* ====================== 综合收益看板 ====================== */
.rev-board{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin-bottom:14px}
/* [OPT 2026-08-14-C] 首页补位条：园区能源平衡与碳足迹 入口（呼应下线的 Sankey，统一视觉） */
.home-balance-strip{display:flex;align-items:center;gap:18px;margin-bottom:14px;padding:14px 18px;border-radius:var(--r);
  background:linear-gradient(90deg,rgba(34,211,238,.10),rgba(8,20,40,.72));border:1px solid rgba(34,211,238,.28);
  box-shadow:0 0 0 1px rgba(34,211,238,.05),0 8px 26px rgba(2,11,26,.45);position:relative;overflow:hidden}
.home-balance-strip::before{content:'';position:absolute;left:0;top:0;bottom:0;width:4px;background:linear-gradient(180deg,#22d3ee,#0ea5b7)}
.hbs-head{flex:0 0 auto;min-width:190px}
.hbs-title{font-size:16px;font-weight:600;color:#e6f6fb}
.hbs-sub{font-size:12px;color:var(--t2);margin-top:3px}
.hbs-metrics{flex:1;display:grid;grid-template-columns:repeat(4,1fr);gap:10px}
.hbs-m{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:8px 6px;border-radius:10px;
  background:rgba(10,22,42,.5);border:1px solid rgba(120,160,200,.16)}
.hbs-v{font-size:22px;font-weight:800;color:#fff;font-family:'Times New Roman',serif;line-height:1.1}
.hbs-u{font-size:12px;font-weight:600;color:var(--t2);margin-left:2px}
.hbs-k{font-size:11px;color:var(--t2);margin-top:4px}
.hbs-btn{flex:0 0 auto;white-space:nowrap}
.rev-card{position:relative;background:linear-gradient(135deg,rgba(10,36,66,.55),rgba(34,211,238,.07));
  border:1px solid rgba(34,211,238,.35);border-radius:var(--r);padding:18px 16px;overflow:hidden;
  box-shadow:0 0 0 1px rgba(34,211,238,.06),0 10px 32px rgba(2,11,26,.5);
  transition:transform .3s var(--tr),box-shadow .3s var(--tr),border-color .3s var(--tr)}
.rev-card::after{content:'';position:absolute;inset:6px;pointer-events:none;border-radius:inherit;opacity:.5;background:
  linear-gradient(var(--cd,#22d3ee),var(--cd,#22d3ee)) 0 0/14px 2px no-repeat,
  linear-gradient(var(--cd,#22d3ee),var(--cd,#22d3ee)) 0 0/2px 14px no-repeat,
  linear-gradient(var(--cd,#22d3ee),var(--cd,#22d3ee)) 100% 100%/14px 2px no-repeat,
  linear-gradient(var(--cd,#22d3ee),var(--cd,#22d3ee)) 100% 100%/2px 14px no-repeat}
.rev-card:hover{transform:translateY(-3px);border-color:rgba(34,211,238,.6);
  box-shadow:0 14px 40px rgba(2,11,26,.6),0 0 22px rgba(34,211,238,.2)}
.rev-card .rev-ic{font-size:22px;opacity:.92}
.rev-card .rev-name{font-size:13px;color:var(--t2);margin-top:7px}
.rev-card .rev-val{font-size:28px;font-weight:800;color:var(--n-cyan);line-height:1.1;margin-top:4px;font-family:'Times New Roman',monospace}
.rev-card .rev-val .u{font-size:14px;color:var(--t2);font-weight:600;margin-left:3px}
.rev-card .rev-yoy{font-size:11px;color:var(--n-green);margin-top:5px}
.rev-card .rev-desc{font-size:10.5px;color:var(--t3);margin-top:7px;line-height:1.45}

/* ====================== 成果与资质背书栏 ====================== */
.endorse{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin-top:14px}
.endorse-col{background:rgba(10,36,66,.4);border:1px solid rgba(34,211,238,.22);border-radius:var(--r);padding:16px 18px}
.endorse-h{font-size:13px;font-weight:700;color:var(--t1);margin-bottom:12px;display:flex;align-items:center;gap:8px}
.endorse-h::before{content:'';width:3px;height:14px;background:var(--n-cyan);border-radius:2px;box-shadow:0 0 8px rgba(34,211,238,.6)}
.endorse-left{display:flex;flex-direction:column;gap:11px}
.endorse-stat{display:flex;align-items:baseline;gap:10px}
.endorse-stat b{font-size:20px;color:var(--n-cyan);font-weight:800;font-family:'Times New Roman',monospace}
.endorse-stat span{font-size:12px;color:var(--t2)}
.endorse-right{display:flex;flex-direction:column;gap:12px}
.endorse-badges{display:flex;flex-wrap:wrap;gap:10px}
.endorse-badge{display:flex;align-items:center;gap:8px;padding:9px 14px;border-radius:10px;
  background:rgba(34,211,238,.08);border:1px solid rgba(34,211,238,.3);font-size:12px;color:var(--t1)}
.endorse-badge .eb-ic{font-size:16px;color:var(--n-cyan)}

/* —— [OVERRIDE] 按钮统一：青蓝主按钮 + 灰色次按钮，警告钮统一为新橙色 —— */
.btn.primary{background:linear-gradient(135deg,var(--n-cyan),var(--n-blue)) !important;color:#fff !important;font-weight:600}
.btn.primary:hover{box-shadow:0 4px 18px rgba(34,211,238,.35)}
.btn{background:var(--bg-glass) !important;color:var(--t1) !important}
.btn:hover{border-color:var(--border-h) !important;background:var(--bg-glass-hover) !important;color:var(--n-cyan) !important}
.btn-warn{background:linear-gradient(135deg,var(--n-orange),#fb923c) !important;border:none !important;color:#fff !important}


/* ====================== 紧急告警呼吸闪烁 ====================== */
@keyframes alarmBreath{0%,100%{background:linear-gradient(90deg,rgba(239,68,68,.10),rgba(255,255,255,.04))}50%{background:linear-gradient(90deg,rgba(239,68,68,.24),rgba(255,255,255,.04))}}
.alarm-stream-item.critical{animation:alarmBreath 1.6s ease-in-out infinite}

/* ====================== 表格统一样式增强 ====================== */
.table-wrap table th{background:rgba(34,211,238,.10);color:var(--t1);font-size:11px;letter-spacing:.5px}
.table-wrap table td{color:var(--t1)}
.table-wrap table tbody tr:nth-child(even) td{background:rgba(255,255,255,.025)}
.table-wrap table tbody tr:hover td{background:rgba(34,211,238,.08) !important;color:#fff}
.gri-table th{background:rgba(34,211,238,.10) !important;color:var(--t1) !important}
.gri-table tbody tr:nth-child(even) td{background:rgba(255,255,255,.025)}
.gri-table tbody tr:hover td{background:rgba(34,211,238,.08) !important}

/* ====================== 浅色主题适配（同步新规范） ====================== */
[data-theme="light"]{
  --bg-deep:#eef2f7;--bg-base:#e3e9f1;--bg-surface:#f3f6fb;
  --bg-card:rgba(255,255,255,.92);--bg-glass:rgba(255,255,255,.72);--bg-glass-hover:rgba(255,255,255,.96);
  --t1:#0f172a;--t2:#475569;--t3:#94a3b8;
  --border:rgba(8,145,178,.18);--border-h:rgba(8,145,178,.45);
  --n-cyan:#0891b2;--n-blue:#0ea5e9;--n-green:#059669;--n-amber:#ea580c;--n-orange:#ea580c;--n-red:#dc2626;--n-purple:#0891b2;--n-yellow:#ea580c;
}

/* ============================================================
   [NEW Request C · 2026-08-13] 五个核心问题集中修复样式
   一、顶栏严格三列 · 二、左侧图表
   三、中心主视觉增强 · 四、全站视觉统一
   ============================================================ */

/* —— 一、顶栏严格三列：左 320px / 中自适应居中 / 右 280px —— */
.header{display:flex;align-items:center;justify-content:space-between;gap:0;padding:0 20px}
.header-left{flex:0 0 320px;justify-content:flex-start;min-width:0}
.header-center{position:static;transform:none;flex:1 1 auto;justify-content:center;gap:18px}
.header-right{flex:0 0 280px;justify-content:flex-end;gap:6px}
.brand-title{font-size:13px;white-space:nowrap}
.brand-text{min-width:0;overflow:hidden}
.version-tag{font-size:9px;padding:2px 6px}
.header-btn{padding:7px 6px}
.user-avatar{width:28px;height:28px}

/* —— 一、搜索：图标点击展开下拉（不占横向空间） —— */
.search-ic{display:flex;align-items:center;justify-content:center;width:34px;height:34px;border-radius:8px;cursor:pointer;font-size:15px;color:var(--t2);border:1px solid var(--border);background:var(--bg-glass);transition:.2s}
.search-ic:hover{color:var(--n-cyan);border-color:var(--border-h);background:var(--bg-glass-hover)}
.search-dropdown{position:absolute;top:calc(100% + 10px);right:0;width:300px;background:rgba(8,16,34,.98);border:1px solid var(--border-h);border-radius:12px;padding:12px;box-shadow:0 18px 50px rgba(0,0,0,.55);opacity:0;visibility:hidden;transform:translateY(-8px);transition:.22s var(--tr);z-index:300}
.search-dropdown.open{opacity:1;visibility:visible;transform:translateY(0)}
.search-box .search-dropdown input{width:100%;background:var(--bg-glass);border:1px solid var(--border);border-radius:8px;padding:9px 12px;color:var(--t1);outline:none;font-size:12px}
.search-box .search-dropdown input:focus,.search-box .search-dropdown input:hover{width:100%;border-color:var(--border-h)}
.search-quick{display:flex;flex-wrap:wrap;gap:6px;margin-top:10px}
.search-quick span{font-size:11px;color:var(--t2);background:rgba(34,211,238,.08);border:1px solid rgba(34,211,238,.25);border-radius:14px;padding:3px 10px;cursor:pointer;transition:.2s}
.search-quick span:hover{color:var(--n-cyan);border-color:var(--border-h);background:rgba(34,211,238,.16)}

/* —— 三、左侧图表容器：显式高度，避免 ECharts 0 高 / 压缩 —— */
.chart-load{width:100%;aspect-ratio:4/3;min-height:320px;height:auto}
.chart-doughnut{width:100%;height:230px}
/* 右栏告警/合规随宽度自适应，不换行 */
.home-col-right .alarm-stream-title{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}

/* —— 四、中心主视觉增强 —— */
/* [NEW 2026-08-13] 科技网格层：40px 青色网格，8% 透明度，最上层（pointer-events:none 不遮挡交互） */
.home-aerial-grid{position:absolute;inset:0;z-index:5;pointer-events:none;opacity:.08;
  background-image:linear-gradient(rgba(34,211,238,1) 1px,transparent 1px),linear-gradient(90deg,rgba(34,211,238,1) 1px,transparent 1px);
  background-size:40px 40px;
  -webkit-mask-image:radial-gradient(120% 100% at 50% 45%,#000 35%,transparent 90%);
  mask-image:radial-gradient(120% 100% at 50% 45%,#000 35%,transparent 90%)}
.home-aerial-particles{position:absolute;inset:0;z-index:1;pointer-events:none;overflow:hidden;opacity:.6}
.home-aerial-particles::before,.home-aerial-particles::after{content:'';position:absolute;inset:-20%;
  background-image:
    radial-gradient(2px 2px at 20% 30%,rgba(34,211,238,.9),transparent),
    radial-gradient(2px 2px at 70% 60%,rgba(56,189,248,.8),transparent),
    radial-gradient(1.5px 1.5px at 40% 80%,rgba(34,211,238,.7),transparent),
    radial-gradient(1.5px 1.5px at 85% 25%,rgba(56,189,248,.7),transparent),
    radial-gradient(2px 2px at 55% 15%,rgba(34,211,238,.8),transparent),
    radial-gradient(1.5px 1.5px at 30% 55%,rgba(56,189,248,.6),transparent);
  background-size:100% 100%;animation:particlesDrift 18s linear infinite}
.home-aerial-particles::after{animation-duration:26s;animation-direction:reverse;opacity:.6}
@keyframes particlesDrift{0%{transform:translate(0,0)}50%{transform:translate(-12px,-16px)}100%{transform:translate(0,0)}}
.aerial-flow{position:absolute;inset:0;width:100%;height:100%;z-index:2;pointer-events:none}
/* [NEW 2026-08-13] 能源流向：带箭头青色虚线 + 慢单向流光（pv→sub→ess→office→charge） */
.flow-line{fill:none;stroke:rgba(34,211,238,.6);stroke-width:.8;stroke-linecap:round;stroke-dasharray:2.5 3.5;animation:flowMove 3s linear infinite;filter:drop-shadow(0 0 2px rgba(34,211,238,.85));marker-end:url(#flowArrow)}
@keyframes flowMove{to{stroke-dashoffset:-14}}
/* [NEW 2026-08-13] 科技氛围：上升蓝色粒子 / 横向扫描线 / 角落全息装饰 */
.home-aerial-rise{position:absolute;inset:0;z-index:4;pointer-events:none;overflow:hidden;opacity:.5}
.home-aerial-rise::before{content:'';position:absolute;inset:0;background-image:
  radial-gradient(1.6px 1.6px at 18% 100%,rgba(34,211,238,.9),transparent),
  radial-gradient(1.6px 1.6px at 38% 100%,rgba(56,189,248,.8),transparent),
  radial-gradient(1.4px 1.4px at 58% 100%,rgba(34,211,238,.8),transparent),
  radial-gradient(1.4px 1.4px at 78% 100%,rgba(56,189,248,.7),transparent),
  radial-gradient(1.6px 1.6px at 92% 100%,rgba(34,211,238,.7),transparent);
  background-size:100% 100%;animation:riseUp 9s linear infinite}
@keyframes riseUp{0%{transform:translateY(30px);opacity:0}12%{opacity:.9}88%{opacity:.9}100%{transform:translateY(-120%);opacity:0}}
.home-aerial-scan{position:absolute;left:0;right:0;top:0;height:140px;z-index:4;pointer-events:none;
  background:linear-gradient(180deg,transparent,rgba(34,211,238,.10) 45%,rgba(34,211,238,.18) 50%,rgba(34,211,238,.10) 55%,transparent);
  filter:blur(1px);mix-blend-mode:screen;animation:scanMove 7s linear infinite}
@keyframes scanMove{0%{transform:translateY(-160px)}100%{transform:translateY(620px)}}
.aerial-corner{position:absolute;z-index:8;width:46px;height:46px;pointer-events:none;opacity:.6}
.aerial-corner::before{content:'';position:absolute;width:46px;height:1.5px;left:0;top:0;background:linear-gradient(90deg,rgba(34,211,238,.8),transparent)}
.aerial-corner::after{content:'';position:absolute;width:1.5px;height:46px;left:0;top:0;background:linear-gradient(180deg,rgba(34,211,238,.8),transparent)}
.aerial-corner.ac-tl{left:8px;top:8px}.aerial-corner.ac-tr{right:8px;top:8px;transform:scaleX(-1)}
.aerial-corner.ac-bl{left:8px;bottom:8px;transform:scaleY(-1)}.aerial-corner.ac-br{right:8px;bottom:8px;transform:scale(-1,-1)}
/* [NEW 2026-08-13] 细节质感：窗户指示灯随机闪烁 / 道路车流光轨 */
.win-light{position:absolute;z-index:4;width:3px;height:3px;border-radius:50%;background:#bfe9ff;box-shadow:0 0 6px rgba(120,200,255,.9);pointer-events:none;opacity:.7;animation:winFlicker 2.6s steps(1) infinite}
.win-light.wl-1{left:70%;top:30%}.win-light.wl-2{left:73%;top:35%;animation-delay:.7s}
.win-light.wl-3{left:24%;top:46%;animation-delay:1.3s}.win-light.wl-4{left:28%;top:50%;animation-delay:1.9s}
@keyframes winFlicker{0%,100%{opacity:.15}20%{opacity:.85}40%{opacity:.2}60%{opacity:.7}80%{opacity:.25}}
.road-trail{position:absolute;z-index:4;height:2px;pointer-events:none;opacity:.35;mix-blend-mode:screen;
  background:linear-gradient(90deg,transparent,rgba(120,200,255,.9),transparent);background-size:40% 100%;background-repeat:no-repeat;animation:roadMove 6s linear infinite}
.road-trail.rt-1{left:8%;top:58%;width:42%}
.road-trail.rt-2{left:50%;top:40%;width:38%;transform:rotate(-18deg);animation-delay:2.4s;background-image:linear-gradient(90deg,transparent,rgba(34,211,238,.9),transparent)}
@keyframes roadMove{0%{background-position:-50% 0}100%{background-position:160% 0}}
.aerial-title{z-index:7}
.aerial-views{position:absolute;top:12px;right:12px;z-index:7;display:flex;gap:6px}
.av-btn{font-size:11px;color:var(--t2);background:rgba(6,18,38,.6);border:1px solid rgba(34,211,238,.3);border-radius:18px;padding:4px 12px;cursor:pointer;transition:.2s;backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px)}
.av-btn:hover{color:var(--n-cyan);border-color:var(--border-h)}
.av-btn.on{color:#04101f;background:linear-gradient(135deg,var(--n-cyan),#38bdf8);border-color:transparent;box-shadow:0 0 14px rgba(34,211,238,.5);font-weight:600}
.aerial-legend{position:absolute;left:12px;bottom:12px;z-index:7;display:flex;flex-wrap:wrap;gap:6px 12px;background:rgba(6,18,38,.5);border:1px solid rgba(34,211,238,.22);border-radius:10px;padding:7px 12px;backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px)}
.al-item{display:flex;align-items:center;gap:5px;font-size:11px;color:var(--t1);cursor:pointer;transition:.18s;padding:2px 4px;border-radius:6px}
.al-item:hover{background:rgba(34,211,238,.12)}
.al-item i{width:9px;height:9px;border-radius:50%;display:inline-block;box-shadow:0 0 6px rgba(34,211,238,.6)}
.al-item.off{opacity:.35;text-decoration:line-through}
/* 视角切换：背景聚焦缩放 */
.home-col-mid.view-pv .home-aerial{transform:scale(1.18);background-position:center 22%}
.home-col-mid.view-ess .home-aerial{transform:scale(1.18);background-position:center 70%}
/* [NEW 2026-08-13] 点位筛选隐藏 */
.aerial-pt.pt-hidden{display:none}
/* [NEW 2026-08-13] 紧急告警对应点位红色外圈呼吸提示 */
.aerial-pt.pt-critical{
  box-shadow:0 0 0 4px color-mix(in srgb,var(--ptc,#22d3ee) 20%,transparent),0 0 14px 3px var(--ptc,#22d3ee),0 0 0 0 rgba(239,68,68,.7);
  animation:ptBreath 2.4s ease-in-out infinite, ptCriticalRing 1.6s ease-in-out infinite}
@keyframes ptCriticalRing{0%,100%{box-shadow:0 0 0 4px color-mix(in srgb,var(--ptc,#22d3ee) 20%,transparent),0 0 14px 3px var(--ptc,#22d3ee),0 0 0 0 rgba(239,68,68,.6)}50%{box-shadow:0 0 0 4px color-mix(in srgb,var(--ptc,#22d3ee) 20%,transparent),0 0 14px 3px var(--ptc,#22d3ee),0 0 0 10px rgba(239,68,68,0)}}
/* [NEW 2026-08-13] 告警联动：点位快速闪烁 3 次 */
@keyframes ptFlash{0%,100%{box-shadow:0 0 0 0 rgba(255,255,255,.95),0 0 0 4px color-mix(in srgb,var(--ptc,#22d3ee) 30%,transparent),0 0 26px 10px var(--ptc,#22d3ee)}50%{box-shadow:0 0 0 18px rgba(255,255,255,0),0 0 0 4px color-mix(in srgb,var(--ptc,#22d3ee) 20%,transparent),0 0 14px 3px var(--ptc,#22d3ee)}}
.aerial-pt.pt-flash{animation:ptFlash .8s ease-out}

/* —— 五、KPI 同比箭头红绿（涨红跌绿） —— */
.kpi-trend.trend-up{color:var(--n-red)}
.kpi-trend.trend-down{color:var(--n-green)}

/* —— 设备详情弹窗小部件 —— */
.pt-dot{width:10px;height:10px;border-radius:50%;display:inline-block;margin-right:8px;vertical-align:middle;box-shadow:0 0 10px rgba(34,211,238,.6)}
.modal-foot{display:flex;gap:10px;justify-content:flex-end;margin-top:16px;padding-top:14px;border-top:1px solid var(--border)}

/* —— [NEW] 三级下钻页主标题（青色竖条，与模块标题风格统一） —— */
.detail-h1{font-size:22px;font-weight:700;color:var(--t1);margin:0 0 18px;padding-left:14px;position:relative;line-height:1.25;display:flex;align-items:center}
.detail-h1::before{content:'';position:absolute;left:0;top:1px;width:4px;height:1.05em;background:var(--n-cyan);border-radius:2px;box-shadow:0 0 10px rgba(34,211,238,.6)}

/* ===== 数字孪生可视化重构样式 ===== */
/* 让节点弹窗更高，避免 chart 被 max-height 挤出可视区 */
.twin-panel{width:340px;max-width:88%}
.ttp-body{max-height:430px}
/* 布局：左主区 + 右实时栏 */
.twin-grid{display:grid;grid-template-columns:1fr 340px;gap:14px;align-items:start}
.twin-main{display:flex;flex-direction:column;gap:14px;min-width:0}
.twin-side{display:flex;flex-direction:column;gap:14px;min-width:0}
@media(max-width:1180px){.twin-grid{grid-template-columns:1fr}.twin-side{flex-direction:row;flex-wrap:wrap}.twin-side>.panel{flex:1;min-width:280px}}

/* 园区级 KPI 一览条 */
.twin-kpi-strip{display:grid;grid-template-columns:repeat(4,1fr);gap:12px}
@media(max-width:680px){.twin-kpi-strip{grid-template-columns:repeat(2,1fr)}}
.twin-kpi{display:flex;align-items:center;gap:12px;background:var(--bg-glass);border:1px solid var(--border);border-radius:12px;padding:12px 14px;position:relative;overflow:hidden;transition:.2s}
.twin-kpi:hover{border-color:var(--border-h);transform:translateY(-2px)}
.tk-ic{width:42px;height:42px;border-radius:10px;display:flex;align-items:center;justify-content:center;font-size:19px;flex:0 0 auto}
.tk-b{flex:1;min-width:0}
.tk-v{font-size:22px;font-weight:700;color:var(--t1);line-height:1.1;font-variant-numeric:tabular-nums}
.tk-v i{font-size:12px;font-weight:400;color:var(--t3);margin-left:3px;font-style:normal}
.tk-l{font-size:11px;color:var(--t3);margin-top:3px}
.tk-bar{height:5px;background:rgba(255,255,255,.12);border-radius:4px;margin:5px 0 2px;overflow:hidden}
.tk-bar i{display:block;height:100%;background:linear-gradient(90deg,#32C832,#26C6DA);border-radius:4px;transition:width .6s}

/* 拓扑一张图：鸟瞰底图 + 雷达扫描 + 图例 */
.twin-map{background:linear-gradient(rgba(2,11,26,.74),rgba(2,11,26,.84)),url('zero-carbon-park-night.webp') center/cover no-repeat;background-blend-mode:luminosity}
.twin-sweep{position:absolute;inset:-20%;z-index:1;pointer-events:none;border-radius:50%;opacity:0;background:conic-gradient(from 0deg,transparent 0deg,rgba(34,211,238,.12) 38deg,transparent 80deg,transparent 360deg);animation:twinSweep 7s linear infinite}
@keyframes twinSweep{to{transform:rotate(360deg)}}
.twin-map.twin-scan{animation:twScan .9s ease}
@keyframes twScan{0%{box-shadow:inset 0 0 0 0 rgba(34,211,238,0)}40%{box-shadow:inset 0 0 0 2px rgba(34,211,238,.7)}100%{box-shadow:inset 0 0 0 0 rgba(34,211,238,0)}}
.twin-legend{position:absolute;left:12px;bottom:12px;z-index:4;display:flex;gap:14px;background:rgba(11,22,44,.62);border:1px solid var(--border);border-radius:8px;padding:6px 11px;backdrop-filter:blur(4px)}
.tl-i{display:flex;align-items:center;gap:5px;font-size:10px;color:var(--t2);white-space:nowrap}
.tl-i i{width:9px;height:9px;border-radius:50%;display:inline-block}
@media(max-width:680px){.twin-legend{flex-wrap:wrap;max-width:60%}}

/* 节点健康环（通过 inline box-shadow 实现，这里仅补 transition） */
.twin-node .tn-dot{transition:transform .25s,box-shadow .25s}

/* 推演影响对比 chips */
.tw-impact-h{font-size:13px;font-weight:700;color:var(--n-cyan);margin-bottom:10px}
.tw-impact-sub{font-size:11px;color:var(--t3);font-weight:400;margin-left:6px}
.tw-chips{display:flex;flex-wrap:wrap;gap:10px}
.tw-chip{flex:1;min-width:150px;background:var(--bg-glass);border:1px solid var(--border);border-radius:10px;padding:10px 12px}
.tw-chip-l{font-size:11px;color:var(--t3);margin-bottom:5px}
.tw-chip-v{display:flex;align-items:baseline;gap:6px}
.tw-chip-b{font-size:12px;color:var(--t3);text-decoration:line-through;opacity:.7}
.tw-chip-ar{font-size:12px}
.tw-chip-c{font-size:15px;font-weight:700;font-variant-numeric:tabular-nums}

/* 实时数据栏：行内 sparkline */
.tw-metric-spark{display:flex;align-items:center;gap:10px}
.twms-l{flex:1;min-width:0}
.twms-l span{display:block;font-size:12px;color:var(--t2)}
.twms-l b{font-size:14px;color:var(--t1);font-weight:700}
.twms-l b i{font-size:10px;color:var(--t3);font-style:normal;font-weight:400}
.twms-chart{width:72px;height:34px;flex:0 0 auto}

/* 推演计算态 */
.tw-computing{opacity:.55;filter:blur(.4px);transition:.2s}

/* 按钮补充 */
.btn-sm{font-size:12px;padding:5px 12px;border-radius:8px}
.btn-accent{background:linear-gradient(135deg,var(--n-cyan),#3296FF);color:#04121f;border:none;font-weight:600}
.btn-accent:hover{filter:brightness(1.08)}

/* 数字孪生 · 设备级详情页 */
.dh1-tag{font-size:12px;font-weight:500;color:var(--n-cyan);background:rgba(34,211,238,.12);border-radius:6px;padding:2px 9px;margin-left:8px}
.dt-health{display:flex;align-items:center;gap:16px;margin-bottom:14px}
.dt-health-ring{width:78px;height:78px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:18px;font-weight:700;color:var(--t1);flex:0 0 auto}
.dt-health-ring span{width:60px;height:60px;border-radius:50%;display:flex;align-items:center;justify-content:center;background:rgba(11,22,44,.82)}
.dt-health-meta{display:flex;flex-direction:column;gap:2px}
.dt-status{font-size:15px;font-weight:700}
.dt-sub{font-size:11px;color:var(--t3)}
.dt-core{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.dt-core-i{background:var(--bg-glass);border:1px solid var(--border);border-radius:8px;padding:8px 10px}
.dt-core-i span{display:block;font-size:10px;color:var(--t3)}
.dt-core-i b{font-size:14px;color:var(--t1)}
.dt-devs{display:flex;flex-wrap:wrap;gap:8px}
.chart-md{width:100%;height:240px}

/* 浅色主题适配 */
[data-theme="light"] .twin-map{background:linear-gradient(rgba(255,255,255,.55),rgba(240,246,253,.7)),url('zero-carbon-park-night.webp') center/cover no-repeat;background-blend-mode:luminosity}
[data-theme="light"] .twin-legend{background:rgba(255,255,255,.72)}
[data-theme="light"] .tw-chip-b{color:#5a6678}

/* ===== 响应式骨架（P0-② 移动端/平板适配，桌面 1920 不受影响） ===== */
.nav-toggle{display:none;align-items:center;justify-content:center;width:36px;height:36px;border-radius:8px;cursor:pointer;font-size:17px;line-height:1;color:var(--t1);background:var(--bg-glass);border:1px solid var(--border);flex:0 0 auto}
.nav-toggle:hover{color:var(--n-cyan);border-color:var(--n-cyan)}
.nav-backdrop{position:fixed;inset:0;background:rgba(4,8,16,.55);z-index:140;display:none}
body.nav-open .nav-backdrop{display:block}

/* 平板：侧边栏收窄，主区联动收缩 */
@media (max-width:1280px){
  :root{--sidebar-w:208px}
}

/* 小平板/笔记本：侧边栏变抽屉，汉堡按钮出现 */
@media (max-width:1024px){
  .nav-toggle{display:flex}
  .sidebar{transform:translateX(-100%);transition:transform .3s var(--tr);z-index:160;box-shadow:none}
  body.nav-open .sidebar{transform:translateX(0);box-shadow:0 0 40px rgba(0,0,0,.55)}
  .main{margin-left:0 !important}
  .header-center{position:static;transform:none;margin-left:auto}
}

/* 手机：单列堆叠，顶栏精简 */
@media (max-width:768px){
  .header{padding:0 12px;gap:8px}
  .brand-text .brand-sub{display:none}
  .version-tag{display:none}
  .header-center .clock,.header-center .db-status{display:none}
  .home-kpi-row{grid-template-columns:repeat(3,1fr)}
  .grid-3,.grid-4,.grid-5,.grid-7{grid-template-columns:repeat(2,1fr)}
  .home-grid,.home-grid-bottom,.grid-left-320,.grid-left-420{grid-template-columns:1fr}
  .twin-grid{grid-template-columns:1fr !important}
  .kpi-strip,.twin-kpi-strip,.portal-hero{flex-wrap:wrap}
  .portal-hero{flex-direction:column;align-items:flex-start;gap:10px}
  .filter-bar{flex-wrap:wrap}
}

/* 超小屏：进一步压缩 */
@media (max-width:480px){
  .home-kpi-row{grid-template-columns:repeat(2,1fr)}
  .grid-3,.grid-4,.grid-5,.grid-7{grid-template-columns:1fr}
  .header-right .search-box{display:none}
  .brand-text .brand-title{font-size:13px;max-width:120px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
}

/* ===== [P0-③] 统一导出/汇报中心 ===== */
.header-actions{position:relative}
.export-menu{position:absolute;top:44px;right:0;min-width:208px;background:rgba(10,17,36,.97);border:1px solid rgba(50,150,255,.4);border-radius:10px;padding:6px;display:none;flex-direction:column;z-index:300;box-shadow:0 12px 40px rgba(0,0,0,.5)}
.export-menu.open{display:flex}
.em-item{padding:9px 12px;border-radius:7px;font-size:13px;color:var(--t1);cursor:pointer;transition:.15s;white-space:nowrap}
.em-item:hover{background:var(--bg-glass);color:var(--n-cyan)}
.rc-sub{font-size:12px;color:var(--t2);margin:4px 0 10px}
.rc-list{display:flex;flex-direction:column;gap:8px;max-height:58vh;overflow:auto}
.rc-row{display:flex;align-items:center;gap:12px;padding:9px 12px;border:1px solid var(--border);border-radius:8px}
.rc-name{font-weight:600;color:var(--t1);min-width:170px}
.rc-desc{color:var(--t2);font-size:12px;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.print-head{display:none}
.print-head .ph-brand{font-size:13px;font-weight:700;color:#0a2540}
.print-head .ph-title{font-size:18px;font-weight:800;color:#0a2540;margin-top:2px}
.print-head .ph-date{font-size:11px;color:#555;margin-top:3px}

/* 打印样式：隐藏界面外壳，主区干净输出，保留图表与配色，自动加平台抬头 */
@media print {
  html, body { background: #fff !important; overflow: visible !important; }
  body::before, .bg-mesh, #particle-canvas { display: none !important; }
  .sidebar, .header, .nav-backdrop, .nav-toggle, .header-btn, .search-box,
  .export-menu, .search-overlay, .ai-widget, .modal-backdrop, .modal-box, .modalRoot,
  #modalRoot, .user-avatar { display: none !important; }
  .main { margin: 0 !important; padding: 0 !important; height: auto !important; max-height: none !important; overflow: visible !important; background: #fff !important; }
  * { -webkit-print-color-adjust: exact !important; print-color-adjust: exact !important; }
  .print-head { display: block !important; margin-bottom: 10px; padding-bottom: 8px; border-bottom: 2px solid #0a2540; }
  .panel, .card, .kpi-card, .chart-box, .grid { break-inside: avoid; }
  @page { margin: 12mm; }
}

/* ===== [P1-④] 数据接入链路可视化（实时数据来源） ===== */
.di-flow{display:flex;align-items:stretch;gap:0;flex-wrap:wrap}
.di-card{position:relative;flex:1 1 0;min-width:200px;margin:6px 2px;padding:14px;border-radius:12px;
  border:1px solid color-mix(in srgb,var(--di-c) 45%,transparent);
  background:linear-gradient(180deg,color-mix(in srgb,var(--di-c) 12%,transparent),rgba(255,255,255,.02));
  box-shadow:0 0 0 1px rgba(255,255,255,.03) inset}
.di-card:hover{transform:translateY(-3px);transition:.2s}
.di-head{display:flex;align-items:center;gap:8px;margin-bottom:10px}
.di-ic{font-size:18px}
.di-name{font-weight:700;color:var(--t1);flex:1}
.di-rate{display:inline-flex;align-items:center;gap:5px;font-size:11px;color:var(--di-c);
  border:1px solid color-mix(in srgb,var(--di-c) 50%,transparent);padding:2px 8px;border-radius:20px;white-space:nowrap}
.di-pulse{width:7px;height:7px;border-radius:50%;background:var(--di-c);animation:diPulse 1.6s infinite}
@keyframes diPulse{0%{box-shadow:0 0 0 0 color-mix(in srgb,var(--di-c) 70%,transparent)}70%{box-shadow:0 0 0 8px transparent}100%{box-shadow:0 0 0 0 transparent}}
.di-items{display:flex;flex-wrap:wrap;gap:5px;margin-bottom:8px}
.di-tag{font-size:11px;padding:2px 7px;border-radius:5px;background:color-mix(in srgb,var(--di-c) 14%,transparent);
  color:var(--di-c);border:1px solid color-mix(in srgb,var(--di-c) 30%,transparent)}
.di-proto{font-size:11px;color:var(--t2);margin-bottom:4px}
.di-proto b{color:var(--t1)}
.di-note{font-size:11px;color:var(--t2);line-height:1.5}
.di-arrow{position:absolute;right:-9px;top:50%;transform:translateY(-50%);color:var(--di-c);font-size:12px;z-index:2}
.di-foot{margin-top:12px;padding:10px 12px;border-radius:8px;background:var(--bg-glass);border:1px solid var(--border);
  font-size:12px;color:var(--t2);line-height:1.6}
@media (max-width:900px){.di-card{min-width:46%}.di-arrow{display:none}}
@media (max-width:560px){.di-card{min-width:100%}}
[data-theme="light"] .di-card{background:linear-gradient(180deg,color-mix(in srgb,var(--di-c) 10%,#fff),#fff)}

/* ===== [P1-⑤] 减碳项目管理（CCER） ===== */
.ccer-bar{height:8px;border-radius:6px;background:rgba(255,255,255,.08);overflow:hidden;display:inline-block;width:110px;vertical-align:middle;margin-right:6px}
.ccer-bar-fill{height:100%;border-radius:6px;background:linear-gradient(90deg,#4FC3F7,#66BB6A)}
.ccer-pct{font-size:11px;color:var(--t2)}
.ccer-gantt{display:flex;flex-direction:column;gap:8px}
.ccer-ghead{display:grid;grid-template-columns:160px repeat(5,1fr);gap:6px;margin-bottom:2px}
.ccer-gh{font-size:11px;color:var(--t2);text-align:center;font-weight:600}
.ccer-grow{display:grid;grid-template-columns:160px repeat(5,1fr);gap:6px;align-items:center}
.ccer-gname{font-size:12px;color:var(--t1);font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ccer-gcells{display:contents}
.ccer-stage{height:22px;border-radius:5px;display:flex;align-items:center;justify-content:center;font-size:10px;color:#fff}
.ccer-stage.done{background:linear-gradient(135deg,#43a047,#66BB6A)}
.ccer-stage.doing{background:linear-gradient(135deg,#1e88e5,#4FC3F7);animation:ccerBlink 1.4s infinite}
.ccer-stage.todo{background:rgba(255,255,255,.07);color:var(--t2)}
@keyframes ccerBlink{0%,100%{opacity:1}50%{opacity:.55}}
.ccer-legend{display:flex;gap:14px;margin-top:10px;font-size:11px;color:var(--t2)}
.ccer-lg{padding-left:16px;position:relative}
.ccer-lg::before{content:'';position:absolute;left:0;top:50%;transform:translateY(-50%);width:11px;height:11px;border-radius:3px}
.ccer-lg.done::before{background:#66BB6A}
.ccer-lg.doing::before{background:#4FC3F7}
.ccer-lg.todo::before{background:rgba(255,255,255,.2)}
@media (max-width:900px){.ccer-ghead,.ccer-grow{grid-template-columns:110px repeat(5,1fr)}.ccer-gh{font-size:10px}.ccer-stage{font-size:9px}.ccer-gname{font-size:11px}}

/* ===== [P1-⑥] 政策标准库 + 更新追踪 ===== */
.policy-remind{display:inline-flex;align-items:center;gap:4px;font-size:11px;color:#ff6b6b;background:rgba(255,82,82,.12);border:1px solid rgba(255,82,82,.4);padding:2px 8px;border-radius:20px;animation:policyPulse 1.6s infinite;white-space:nowrap}
@keyframes policyPulse{0%,100%{opacity:1}50%{opacity:.6}}
.policy-track-item{display:flex;align-items:center;gap:10px;padding:9px 0;border-bottom:1px dashed rgba(255,255,255,.07);font-size:13px}
.policy-track-item:last-child{border-bottom:none}
.policy-track-dot{width:8px;height:8px;border-radius:50%;background:#ff6b6b;box-shadow:0 0 8px #ff6b6b;flex:none}
.policy-track-item .policy-remind{margin-left:auto}
.policy-track-item > span[style]{color:var(--t2);font-size:11px}
[data-theme="light"] .policy-remind{color:#d32f2f;background:rgba(211,47,47,.1);border-color:rgba(211,47,47,.4)}

/* ===== [P2-⑦] 碳市场实时行情 ===== */
.mkt-card{position:relative;padding:14px 16px;border:1px solid var(--border);border-radius:12px;background:linear-gradient(180deg,rgba(102,187,106,.08),rgba(255,255,255,.02))}
.mkt-card:hover{transform:translateY(-2px);transition:.2s}
.mkt-ch{display:flex;align-items:center;gap:8px;margin-bottom:6px}
.mkt-name{font-weight:700;color:var(--t1);font-size:14px}
.mkt-pulse{width:8px;height:8px;border-radius:50%;background:#66BB6A;box-shadow:0 0 0 0 rgba(102,187,106,.7);animation:mktPulse 1.6s infinite}
@keyframes mktPulse{0%{box-shadow:0 0 0 0 rgba(102,187,106,.7)}70%{box-shadow:0 0 0 8px transparent}100%{box-shadow:0 0 0 0 transparent}}
.mkt-sub{font-size:11px;color:var(--t2);margin-bottom:8px}
.mkt-price{font-size:30px;font-weight:800;color:var(--t1);line-height:1.1;font-variant-numeric:tabular-nums}
.mkt-chg{font-size:13px;font-weight:600;margin-top:4px;font-variant-numeric:tabular-nums}
.mkt-up{color:#ff4d4f}
.mkt-down{color:#3fb950}
.mkt-vol{font-size:11px;color:var(--t2);margin-top:4px}
.mkt-calc{border:1px solid var(--border);border-radius:10px;padding:12px 14px;background:var(--bg-glass)}
.mkt-calc-h{font-size:13px;font-weight:700;color:var(--t1);margin-bottom:10px}
.mkt-calc-row{display:flex;justify-content:space-between;align-items:center;font-size:12px;color:var(--t2);padding:5px 0}
.mkt-calc-row b{color:var(--t1);font-variant-numeric:tabular-nums}
.mkt-calc-row.big b{color:#66BB6A;font-size:15px}
.mkt-calc-line{border-top:1px dashed rgba(255,255,255,.12);margin:6px 0}
.mkt-calc-note{font-size:11px;color:var(--t2);line-height:1.5;margin-top:8px}
[data-theme="light"] .mkt-card{background:linear-gradient(180deg,rgba(102,187,106,.1),#fff)}
[data-theme="light"] .mkt-calc{background:#fff}

/* ===== [P2-⑧] 对外招商展示页（零碳园区一张图） ===== */
.sc-hero{position:relative;border-radius:14px;overflow:hidden;padding:34px 28px;background:url('zero-carbon-park-night.webp') center/cover no-repeat;background-color:#061021;min-height:200px;display:flex;align-items:center}
.sc-hero-mask{position:absolute;inset:0;background:linear-gradient(120deg,rgba(4,16,33,.82),rgba(4,16,33,.45) 60%,rgba(4,16,33,.7));backdrop-filter:blur(1px)}
.sc-hero-inner{position:relative;z-index:2;width:100%}
.sc-hero-name{font-size:26px;font-weight:800;color:#eaf6ff;text-shadow:0 2px 12px rgba(0,0,0,.5)}
.sc-hero-slogan{font-size:15px;font-weight:600;color:#7fe3c8;margin-top:6px;letter-spacing:1px}
.sc-hero-sub{font-size:12px;color:#b9d4e8;margin-top:6px}
.sc-hero-kpi{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin-top:20px;max-width:760px}
.sc-hero-kpi .kpi-card{background:rgba(10,20,38,.55);border:1px solid rgba(80,170,255,.35);backdrop-filter:blur(4px);margin:0}
.sc-timeline{display:flex;flex-direction:column;gap:0;padding-left:8px}
.sc-ms{position:relative;padding:0 0 18px 26px;border-left:2px solid rgba(80,170,255,.3)}
.sc-ms:last-child{border-left-color:transparent;padding-bottom:0}
.sc-ms-dot{position:absolute;left:-7px;top:2px;width:12px;height:12px;border-radius:50%;background:linear-gradient(135deg,#4FC3F7,#66BB6A);box-shadow:0 0 10px rgba(79,195,247,.6)}
.sc-ms-year{font-size:13px;font-weight:800;color:#4FC3F7}
.sc-ms-t{font-size:13px;font-weight:600;color:var(--t1);margin-top:2px}
.sc-ms-d{font-size:12px;color:var(--t2);margin-top:3px;line-height:1.5}
.sc-adv{padding:16px;border:1px solid var(--border);border-radius:12px;background:var(--bg-glass);transition:.2s}
.sc-adv:hover{transform:translateY(-3px);border-color:rgba(80,170,255,.4)}
.sc-adv-ic{font-size:24px;margin-bottom:8px}
.sc-adv-t{font-size:14px;font-weight:700;color:var(--t1);margin-bottom:6px}
.sc-adv-d{font-size:12px;color:var(--t2);line-height:1.6}
.sc-contact{display:flex;flex-wrap:wrap;gap:24px;align-items:center;font-size:13px;color:var(--t1)}
.sc-contact b{color:var(--t2);font-weight:600;font-size:11px;display:block;margin-bottom:3px}
.sc-contact .btn{margin-left:auto}
@media (max-width:768px){.sc-hero-kpi{grid-template-columns:repeat(2,1fr)}.sc-contact .btn{margin-left:0}}
[data-theme="light"] .sc-hero-mask{background:linear-gradient(120deg,rgba(255,255,255,.8),rgba(255,255,255,.45) 60%,rgba(255,255,255,.7))}
[data-theme="light"] .sc-hero-name{color:#0a2540}
[data-theme="light"] .sc-hero-sub{color:#456}
[data-theme="light"] .sc-hero-kpi .kpi-card{background:rgba(255,255,255,.7)}

/* ===== 深色科技风登录：全屏粒子动态背景 + 深色玻璃拟态卡片 ===== */
body.login-mode .sidebar, body.login-mode .header { display: none !important; }
body.login-mode .main { margin-left: 0 !important; padding: 0 !important; height: 100vh; overflow: hidden; background: transparent; }
.login-screen{position:fixed;inset:0;z-index:2000;display:flex;align-items:center;justify-content:center;overflow:hidden;
  background:
    radial-gradient(ellipse 120% 90% at 50% 28%, #103056 0%, #0a1c3a 38%, #060f1f 78%, #04090f 100%)}

.login-leaving{opacity:0;transform:scale(.965);transition:opacity .3s ease,transform .3s ease;pointer-events:none}

/* 全屏动态科技背景层（深蓝近黑 + 浅蓝方块粒子 + 装饰方块） */
.login-fx{position:absolute;inset:0;z-index:0;overflow:hidden;pointer-events:none}
.login-fx-grid{position:absolute;inset:0;z-index:0;opacity:.55;
  background-image:
    linear-gradient(rgba(74,156,224,.10) 1px, transparent 1px),
    linear-gradient(90deg, rgba(74,156,224,.10) 1px, transparent 1px);
  background-size:56px 56px;
  -webkit-mask-image:radial-gradient(ellipse 82% 72% at 50% 44%, #000 28%, transparent 100%);
  mask-image:radial-gradient(ellipse 82% 72% at 50% 44%, #000 28%, transparent 100%)}
.login-fx-glow{position:absolute;inset:0;z-index:1;pointer-events:none;mix-blend-mode:screen;
  background:
    radial-gradient(60% 50% at 22% 26%, rgba(40,130,230,.22), transparent 60%),
    radial-gradient(55% 46% at 80% 74%, rgba(22,200,210,.18), transparent 60%),
    linear-gradient(118deg, transparent 38%, rgba(96,182,255,.12) 50%, transparent 62%);
  background-size:230% 230%;animation:loginGlowFlow 18s ease-in-out infinite}
@keyframes loginGlowFlow{0%{background-position:0% 60%}50%{background-position:100% 40%}100%{background-position:0% 60%}}
.login-fx .login-particles{position:absolute;inset:0;z-index:2;width:100%;height:100%}
.login-fx-mask{position:absolute;inset:0;z-index:3;pointer-events:none;
  background:radial-gradient(ellipse 76% 68% at 50% 46%, rgba(6,15,31,0) 38%, rgba(6,15,31,.58) 100%)}
.login-fx-deco{position:absolute;inset:0;z-index:4;pointer-events:none}
.login-fx-deco i{position:absolute;display:block;border:1px solid rgba(22,200,210,.35);border-radius:10px;
  background:linear-gradient(135deg, rgba(22,200,210,.07), rgba(40,130,230,.02));
  box-shadow:0 0 22px rgba(22,200,210,.12) inset;opacity:.5;animation:fxDecoFloat 14s ease-in-out infinite}
.login-fx-deco i:nth-child(1){top:12%;left:8%;width:54px;height:54px;animation-delay:0s}
.login-fx-deco i:nth-child(2){top:22%;right:10%;width:80px;height:80px;animation-delay:-2s}
.login-fx-deco i:nth-child(3){bottom:18%;left:14%;width:46px;height:46px;animation-delay:-4s}
.login-fx-deco i:nth-child(4){bottom:12%;right:16%;width:70px;height:70px;animation-delay:-6s}
.login-fx-deco i:nth-child(5){top:48%;left:5%;width:38px;height:38px;animation-delay:-3s}
.login-fx-deco i:nth-child(6){top:54%;right:6%;width:58px;height:58px;animation-delay:-5s}
@keyframes fxDecoFloat{0%,100%{transform:translateY(0) rotate(0)}50%{transform:translateY(-18px) rotate(6deg)}}

/* 表单承载层：整体居中 */
.login-panel{position:relative;z-index:5;flex:1 1 100%;width:100%;height:100%;display:flex;align-items:center;justify-content:center;padding:34px;overflow:auto}

/* 主卡片：深色半透明玻璃拟态 */
.login-card{position:relative;z-index:5;max-width:460px;width:100%;
  background:linear-gradient(180deg, rgba(16,36,66,.74), rgba(10,24,46,.66));
  border:1px solid rgba(22,200,210,.42);
  border-radius:24px;padding:38px 42px 30px;
  box-shadow:0 30px 80px rgba(0,8,20,.55), 0 0 0 1px rgba(120,220,255,.10) inset, 0 0 50px rgba(22,200,210,.16);
  backdrop-filter:blur(18px) saturate(140%);-webkit-backdrop-filter:blur(18px) saturate(140%);
  color:#E0E6ED}
.login-in{animation:loginCardIn .6s cubic-bezier(.2,.7,.2,1) both}
@keyframes loginCardIn{from{opacity:0;transform:translateY(26px)}to{opacity:1;transform:translateY(0)}}

.login-logo{display:flex;align-items:center;gap:14px;margin-bottom:18px}
.login-logo-img{width:52px;height:52px;border-radius:14px;object-fit:cover;background:rgba(255,255,255,.10);box-shadow:0 6px 18px rgba(0,20,40,.4)}
.login-logo-txt{font-size:18px;font-weight:800;color:#dfe9f2;letter-spacing:.5px}
.login-title{font-size:25px;font-weight:800;color:#eef4fb;text-align:center;margin-bottom:5px;letter-spacing:1px;text-shadow:0 2px 14px rgba(22,200,210,.18)}
.login-sub{font-size:12.5px;color:#9fb6cc;text-align:center;margin-bottom:22px;letter-spacing:.3px}
.login-form{display:flex;flex-direction:column;gap:16px}
.login-field{display:flex;flex-direction:column;gap:8px}
.login-label{font-size:13px;color:#aebfd2;font-weight:600;letter-spacing:.4px;padding-left:2px}
.login-input-wrap{position:relative;display:flex;align-items:center}
.login-ic{position:absolute;left:15px;font-size:15px;opacity:.7;pointer-events:none}
.login-input{width:100%;height:50px;padding:0 46px 0 44px;border:1px solid rgba(110,160,210,.32);border-radius:12px;background:rgba(8,20,40,.55);color:#e8f0f8;font-size:14.5px;outline:none;transition:border-color .2s,box-shadow .2s,background .2s}
.login-input::placeholder{color:#6f88a3}
.login-input:focus{border-color:rgba(22,200,210,.85);box-shadow:0 0 0 3px rgba(22,200,210,.18),0 0 16px rgba(22,200,210,.22);background:rgba(10,26,50,.7)}
.login-eye{position:absolute;right:13px;background:none;border:none;cursor:pointer;font-size:18px;opacity:.6;padding:4px;line-height:1;transition:opacity .2s}
.login-eye:hover{opacity:1}
.login-eye.on{opacity:1}
.login-err{min-height:18px;font-size:12.5px;color:#ff8a87;text-align:center;opacity:0;transform:translateY(-4px);transition:opacity .2s,transform .2s}
.login-err.show{opacity:1;transform:translateY(0)}

.login-enter{display:flex;align-items:center;justify-content:center;height:52px;margin-top:8px;padding:0;box-sizing:border-box;font-size:17px;font-weight:800;letter-spacing:3px;text-indent:1px;line-height:1;color:#fff;border:none;border-radius:12px;cursor:pointer;
  background:linear-gradient(135deg,#2f80ed,#1c64d6 55%,#155ed6);
  box-shadow:0 10px 26px rgba(30,110,220,.34), inset 0 1px 0 rgba(255,255,255,.25);
  transition:filter .2s,box-shadow .2s,transform .12s}
.login-enter:hover{filter:brightness(1.08);box-shadow:0 14px 38px rgba(40,130,240,.55), 0 0 26px rgba(80,180,255,.60), inset 0 1px 0 rgba(255,255,255,.3)}
.login-enter:active{transform:translateY(1px)}
.login-enter:disabled{opacity:.5;cursor:not-allowed;filter:none}

.login-tip{margin-top:18px}
.login-tip-hd{font-size:12px;color:#9fb6cc;text-align:center;margin-bottom:9px;letter-spacing:.4px;font-weight:600}
.login-tip-list{display:grid;grid-template-columns:repeat(5,1fr);gap:8px}
.login-tip-item{display:flex;flex-direction:column;align-items:center;gap:3px;padding:8px 4px;border:1px solid rgba(22,200,210,.28);border-radius:10px;background:rgba(16,36,66,.5);cursor:pointer;transition:border-color .2s,background .2s,transform .15s}
.login-tip-item:hover{border-color:rgba(22,200,210,.72);background:rgba(22,200,210,.12);transform:translateY(-2px)}
.lt-ac{font-size:13px;font-weight:700;color:#7fd6e6;letter-spacing:.5px}
.lt-role{font-size:10px;color:#9fb6cc;line-height:1.3;text-align:center}
.login-tip-pw{font-size:10.5px;color:#7d93a8;text-align:center;margin-top:9px;line-height:1.5}
.login-copy{font-size:12px;color:#8aa0b8;text-align:center;margin-top:18px;line-height:1.7;border-top:1px solid rgba(110,160,210,.25);padding-top:15px;letter-spacing:.3px}

/* 响应式适配 */
@media (max-width:1080px){.login-panel{padding:30px}.login-card{max-width:440px}}
@media (max-width:900px){.login-card{max-width:420px}}
@media (max-width:520px){.login-card{padding:28px 22px;border-radius:18px}.login-title{font-size:21px}.login-tip-list{gap:5px}.login-logo-txt{font-size:16px}}

/* ===== 门户升级：评分表摘要 / 评分条 / 权限矩阵（2026-08-14） ===== */
.ent-summary{display:flex;flex-wrap:wrap;gap:10px;padding:10px 12px;background:rgba(13,31,54,.55);border:1px solid rgba(26,51,85,.55);border-radius:8px;margin-bottom:10px}
.ent-sum-item{display:flex;flex-direction:column;min-width:62px}
.ent-sum-item .es-k{font-size:11px;color:#9fb3c8}
.ent-sum-item b{font-size:18px;color:#E0E6ED;line-height:1.4}
.es-g{color:#66BB6A !important}.es-o{color:#FFA726 !important}.es-r{color:#F44336 !important}
.pp-score-bar{height:5px;border-radius:3px;background:rgba(255,255,255,.12);margin-top:5px;overflow:hidden;max-width:120px}
.pp-score-bar i{display:block;height:100%;background:linear-gradient(90deg,#4FC3F7,#66BB6A);border-radius:3px}
.role-matrix-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch}
.role-matrix{width:100%;border-collapse:collapse;font-size:12px}
.role-matrix th,.role-matrix td{padding:6px 8px;border-bottom:1px solid rgba(26,51,85,.5);text-align:center;white-space:nowrap}
.role-matrix th{color:#9fb3c8;font-weight:600}
.role-matrix th:first-child,.role-matrix td.rm-mod{text-align:left;position:sticky;left:0;background:#0d1f36;color:#E0E6ED;font-weight:600;z-index:1}
.rm-cell{font-weight:700}
.rm-yes{color:#66BB6A}.rm-no{color:#5b7186}
.rm-legend{display:flex;flex-wrap:wrap;gap:8px;margin-top:10px}
.rm-leg{font-size:11px;color:#9fb3c8}
.rm-leg b{color:#E0E6ED;margin-right:2px}
.rm-actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:10px}
[data-theme="light"] .role-matrix th:first-child,[data-theme="light"] .role-matrix td.rm-mod{background:#eef4fb}
[data-theme="light"] .ent-summary{background:rgba(80,170,255,.08);border-color:rgba(80,170,255,.3)}

/* ===== 全站通用优化：入场动效（2026-08-14） ===== */
@keyframes panelIn{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}
.main .panel,.main .kpi-card,.main .grid-3>.ov-card,.main .grid-3>.portal-kpi,.role-matrix-scroll{animation:panelIn .38s cubic-bezier(.22,.61,.36,1) both}
.modal-box{animation:panelIn .28s ease both}
@media (prefers-reduced-motion: reduce){
  .main .panel,.main .kpi-card,.main .grid-3>.ov-card,.main .grid-3>.portal-kpi,.role-matrix-scroll,.modal-box{animation:none}
}

/* ===== 三级数据钻取：右侧滑入抽屉 + 可点击元素 hover（2026-08-17） ===== */
.drawer-backdrop{position:fixed;inset:0;background:rgba(3,10,22,.55);backdrop-filter:blur(2px);z-index:1200;display:flex;justify-content:flex-end;animation:drFade .2s ease both}
@keyframes drFade{from{opacity:0}to{opacity:1}}
.drawer{width:min(560px,92vw);height:100%;background:linear-gradient(180deg,#0a1c34,#07152a);border-left:1px solid rgba(34,211,238,.35);box-shadow:-20px 0 60px rgba(0,0,0,.5);display:flex;flex-direction:column;animation:drawerIn .3s cubic-bezier(.22,.61,.36,1) both}
@keyframes drawerIn{from{transform:translateX(36px);opacity:.35}to{transform:none;opacity:1}}
.drawer--full{width:100vw;max-width:100vw}
.drawer-header{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:14px 18px;border-bottom:1px solid rgba(26,51,85,.6);background:rgba(10,28,52,.7);flex:0 0 auto}
.drawer-title{font-size:15px;font-weight:700;color:#E0E6ED;letter-spacing:.5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.drawer-acts{display:flex;align-items:center;gap:8px;flex:0 0 auto}
.drawer-ico{background:rgba(26,51,85,.45);border:1px solid rgba(80,170,255,.3);color:#9fb3c8;width:30px;height:30px;border-radius:8px;cursor:pointer;font-size:14px;display:inline-flex;align-items:center;justify-content:center;transition:all .18s}
.drawer-ico:hover{color:#fff;border-color:#22D3EE;background:rgba(34,211,238,.15);box-shadow:0 0 10px rgba(34,211,238,.4)}
.drawer-body{flex:1;overflow-y:auto;padding:18px}
.drawer-body::-webkit-scrollbar{width:8px}
.drawer-body::-webkit-scrollbar-thumb{background:rgba(80,170,255,.3);border-radius:4px}

.dr-head{display:flex;gap:8px;margin-bottom:14px}
.dr-sec{margin-bottom:18px}
.dr-sec-t{font-size:13px;font-weight:700;color:#22D3EE;padding-left:10px;position:relative;margin-bottom:10px}
.dr-sec-t:before{content:'';position:absolute;left:0;top:2px;bottom:2px;width:3px;border-radius:2px;background:linear-gradient(180deg,#22D3EE,#4FC3F7)}
.dr-sec-b{font-size:12.5px;line-height:1.7;color:#c9d6e3}
.dr-sub{font-size:12px;color:#9fb3c8;margin:10px 0 4px}

.kv-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.kv{background:rgba(13,31,54,.6);border:1px solid rgba(26,51,85,.55);border-radius:8px;padding:8px 10px}
.kv-k{font-size:11px;color:#9fb3c8;margin-bottom:3px}
.kv-v{font-size:13px;color:#E0E6ED;font-weight:600}
.kv-list{display:flex;flex-direction:column}
.kv-row{display:flex;gap:10px;padding:7px 0;border-bottom:1px dashed rgba(26,51,85,.5)}
.kv-row:last-child{border-bottom:none}
.kv-row .kv-k{flex:0 0 84px;color:#9fb3c8}
.kv-row .kv-v{flex:1;color:#E0E6ED}

.chip-row{display:flex;flex-wrap:wrap;gap:8px;margin:6px 0}
.chip{display:inline-flex;align-items:center;font-size:12px;padding:5px 11px;border-radius:20px;background:rgba(26,51,85,.4);border:1px solid rgba(80,170,255,.25);color:#c9d6e3}
.chip-blue{background:rgba(34,211,238,.12);border-color:rgba(34,211,238,.45);color:#9beaf5}

.dr-tl{display:flex;flex-direction:column}
.dr-tl-i{display:grid;grid-template-columns:62px 80px 1fr;gap:8px;align-items:center;padding:9px 0 9px 16px;border-bottom:1px solid rgba(26,51,85,.45);position:relative}
.dr-tl-i:before{content:'';position:absolute;left:0;top:50%;transform:translateY(-50%);width:7px;height:7px;border-radius:50%;background:#22D3EE;box-shadow:0 0 8px rgba(34,211,238,.6)}
.dr-tl-v{font-weight:700;color:#4FC3F7}
.dr-tl-d{color:#9fb3c8;font-size:12px}
.dr-tl-n{color:#c9d6e3;font-size:12.5px}

.mini-bar{height:7px;border-radius:4px;background:rgba(26,51,85,.55);overflow:hidden;margin-top:6px}
.mini-bar > i{display:block;height:100%;border-radius:4px;background:linear-gradient(90deg,#22D3EE,#66BB6A);box-shadow:0 0 8px rgba(34,211,238,.5)}
.mini-bar.big{height:10px}
.mini-pct{display:inline-block;font-size:11px;color:#9fb3c8;margin-top:3px}

.rank{background:rgba(13,31,54,.6);border:1px solid rgba(26,51,85,.55);border-radius:8px;padding:10px 12px}
.rank b{display:block;color:#66BB6A;font-size:14px;margin-bottom:6px}

.dr-def{color:#c9d6e3;line-height:1.75;font-size:12.5px}
.dr-ul{margin:0;padding-left:18px}
.dr-ul li{padding:5px 0;color:#c9d6e3;line-height:1.6}
.dr-ol{margin:0;padding-left:20px}
.dr-ol li{padding:6px 0;color:#c9d6e3;line-height:1.7}
.dr-chart{width:100%;height:200px;background:rgba(6,18,38,.5);border:1px solid rgba(26,51,85,.5);border-radius:10px;margin-top:4px}

.dr-acts{display:flex;gap:10px;margin-top:8px;flex-wrap:wrap}

.doc-tool{display:flex;align-items:center;gap:10px;margin-bottom:14px;flex-wrap:wrap}
.doc-tool .fselect{flex:1;min-width:180px}
.doc-note{font-size:11px;color:#5b7186}
.doc-h{font-size:13px;font-weight:700;color:#22D3EE;margin:14px 0 6px}
.doc-p{font-size:12.5px;line-height:1.8;color:#c9d6e3;background:rgba(13,31,54,.5);border:1px solid rgba(26,51,85,.45);border-radius:8px;padding:10px 12px;margin-bottom:8px}
.doc-p mark.hl{background:rgba(34,211,238,.3);color:#06121f;font-weight:700;border-radius:2px;padding:0 2px}

.diff-wrap{display:grid;grid-template-columns:1fr 1fr;gap:14px}
.diff-col{background:rgba(6,18,38,.5);border:1px solid rgba(26,51,85,.5);border-radius:10px;padding:12px;overflow:auto;max-height:62vh}
.diff-h{font-size:12px;font-weight:700;color:#9fb3c8;margin-bottom:8px;text-align:center;border-bottom:1px solid rgba(26,51,85,.45);padding-bottom:6px}
.diff-l{font-size:12px;line-height:1.7;padding:6px 8px;border-radius:6px;margin-bottom:6px;border-left:3px solid transparent}
.diff-add{background:rgba(102,187,106,.12);border-left-color:#66BB6A;color:#bfead0}
.diff-del{background:rgba(239,83,80,.10);border-left-color:#EF5350;color:#e8b4b2;text-decoration:line-through;text-decoration-color:rgba(239,83,80,.6)}
.diff-same{background:rgba(26,51,85,.3);border-left-color:#5b7186;color:#c9d6e3}
.diff-mod{background:rgba(255,167,38,.12);border-left-color:#FFA726;color:#f3d3a3}

.formula{background:rgba(6,18,38,.6);border:1px dashed rgba(34,211,238,.4);border-radius:8px;padding:12px 14px;color:#9beaf5;font-size:13px;line-height:1.8;font-family:'Courier New',monospace}
.calc{display:flex;flex-direction:column;gap:12px}
.calc-row{display:flex;align-items:center;justify-content:space-between;gap:12px;background:rgba(13,31,54,.6);border:1px solid rgba(26,51,85,.55);border-radius:8px;padding:10px 12px}
.calc-row label{font-size:12.5px;color:#9fb3c8}
.kv-input{width:120px;background:rgba(6,18,38,.7);border:1px solid rgba(80,170,255,.35);border-radius:6px;color:#E0E6ED;padding:6px 8px;font-size:13px;text-align:right}
.kv-input:focus{outline:none;border-color:#22D3EE;box-shadow:0 0 8px rgba(34,211,238,.4)}
.calc-out{background:rgba(34,211,238,.08);border:1px solid rgba(34,211,238,.35);border-radius:8px;padding:12px 14px;color:#c9d6e3;font-size:13px;line-height:1.9}
.calc-out b{color:#66BB6A;font-size:15px;margin:0 2px}

/* 可点击元素：hover 蓝色高亮边框 + 微光动效 */
.drill{cursor:pointer;transition:all .18s ease}
.kpi-card.drill:hover{box-shadow:0 0 0 1px #22D3EE,0 0 14px rgba(34,211,238,.35);background:rgba(34,211,238,.06)}
.sc-adv.drill:hover{box-shadow:0 0 0 1px #22D3EE,0 0 14px rgba(34,211,238,.35)}
.sc-ms.drill:hover{box-shadow:0 0 0 1px #22D3EE,0 0 14px rgba(34,211,238,.35);background:rgba(34,211,238,.06);border-radius:10px}
.policy-track-item.drill:hover{box-shadow:0 0 0 1px #22D3EE,0 0 12px rgba(34,211,238,.3);background:rgba(34,211,238,.06);border-radius:8px}
.table-wrap tr.drill{cursor:pointer;transition:background .15s}
.table-wrap tr.drill:hover{background:rgba(34,211,238,.1)}

/* ===== 减碳项目管理：CCER 钻取专属样式（2026-08-17） ===== */
.ccer-gh.drill,.ccer-gname.drill{cursor:pointer}
.ccer-pstage{display:flex;align-items:center;gap:10px;padding:9px 10px;border:1px solid rgba(26,51,85,.5);border-radius:8px;margin-bottom:8px;background:rgba(13,31,54,.5)}
.ccer-pstage:hover{box-shadow:0 0 0 1px #22D3EE,0 0 12px rgba(34,211,238,.3);border-color:rgba(34,211,238,.5)}
.ccer-ps-l{display:flex;flex-direction:column;flex:0 0 150px}
.ccer-ps-name{font-size:12.5px;color:#E0E6ED;font-weight:600}
.ccer-ps-node{font-size:11px;color:#9fb3c8;margin-top:2px}
.ccer-ps-eta{font-size:11px;color:#9fb3c8;flex:0 0 78px;text-align:right}
.mon-map{position:relative;width:100%;height:200px;background:radial-gradient(circle at 50% 45%,rgba(34,211,238,.10),rgba(6,18,38,.6) 70%);border:1px solid rgba(26,51,85,.5);border-radius:10px;overflow:hidden;margin-top:4px}
.mon-map .mon-center{position:absolute;top:46%;left:50%;transform:translate(-50%,-50%);font-size:12px;color:#9fb3c8;background:rgba(13,31,54,.6);padding:4px 10px;border-radius:14px;border:1px solid rgba(80,170,255,.25)}
.mon-dot{position:absolute;width:12px;height:12px;border-radius:50%;background:#22D3EE;box-shadow:0 0 10px rgba(34,211,238,.7);cursor:pointer}
.mon-dot:hover{background:#66BB6A;box-shadow:0 0 12px rgba(102,187,106,.8)}
.mon-tip{position:absolute;left:16px;top:-4px;white-space:nowrap;font-size:11px;color:#E0E6ED;background:rgba(6,18,38,.92);border:1px solid rgba(80,170,255,.35);padding:3px 8px;border-radius:6px;opacity:0;pointer-events:none;transition:opacity .15s}
.mon-dot:hover .mon-tip{opacity:1}

/* ===== 平台数据管理中心（P3） ===== */
.dm-page{padding:18px 22px 40px;max-width:1180px;margin:0 auto}
.dm-tabs{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:16px}
.dm-tab{padding:8px 16px;border:1px solid var(--border);border-radius:10px;font-size:13px;color:var(--t2);cursor:pointer;background:var(--bg-glass);transition:.18s}
.dm-tab:hover{color:var(--t1);border-color:rgba(80,170,255,.5)}
.dm-tab.active{color:#eaf6ff;border-color:var(--n-cyan);background:linear-gradient(180deg,rgba(34,211,238,.14),transparent);box-shadow:0 0 12px rgba(34,211,238,.25)}
.dm-entity{min-height:200px}
.dm-toolbar{display:flex;gap:10px;margin-bottom:14px;flex-wrap:wrap;align-items:center}
.dm-input{background:rgba(6,18,38,.7);border:1px solid var(--border);border-radius:8px;color:var(--t1);padding:8px 12px;font-size:13px;outline:none;transition:.15s}
.dm-input:focus{border-color:var(--n-cyan);box-shadow:0 0 0 2px rgba(34,211,238,.18)}
.dm-search{flex:1;min-width:200px}
.dm-form{display:grid;grid-template-columns:repeat(2,1fr);gap:14px 18px}
.dm-f{display:flex;flex-direction:column;gap:6px}
.dm-f label{font-size:12px;color:var(--t2)}
.dm-req{color:#FF5C5C;font-weight:700}
.dm-core{color:#FFA726;font-size:11px;border:1px solid rgba(255,167,38,.4);border-radius:6px;padding:0 5px}
.dm-unit{color:#7f9bb5;font-size:11px}
.dm-ro{padding:8px 10px;background:rgba(6,18,38,.5);border-radius:6px;color:var(--t1);font-size:13px}
.dm-single-card{background:var(--bg-glass);border:1px solid var(--border);border-radius:14px;padding:18px 20px;margin-bottom:10px}
.dm-empty{text-align:center;color:var(--t2);padding:40px;font-size:13px;opacity:.7}
.dm-cards{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;margin-top:6px}
.dm-card{background:var(--bg-glass);border:1px solid var(--border);border-radius:16px;padding:20px 18px;cursor:pointer;transition:.18s}
.dm-card.drill:hover{transform:translateY(-4px);border-color:rgba(80,170,255,.55);box-shadow:0 10px 30px rgba(0,0,0,.4),0 0 16px rgba(34,211,238,.18)}
.dm-card-ic{font-size:30px;margin-bottom:8px}
.dm-card-t{font-size:16px;font-weight:700;color:var(--t1)}
.dm-card-d{font-size:12px;color:var(--t2);margin-top:4px}
.dm-card-n{font-size:12px;color:var(--n-cyan);margin-top:10px;font-weight:600}
.dm-home{padding:18px 22px 40px;max-width:1180px;margin:0 auto}
.dm-home-head{display:flex;justify-content:space-between;align-items:flex-start;gap:16px;flex-wrap:wrap;margin-bottom:18px}
.dm-home-t{font-size:22px;font-weight:800;color:#eaf6ff}
.dm-home-s{font-size:13px;color:var(--t2);margin-top:6px}
.dm-home-actions{display:flex;gap:10px;flex-wrap:wrap}
.dm-note{margin-top:22px;padding:12px 16px;background:rgba(34,211,238,.06);border:1px solid rgba(34,211,238,.2);border-radius:10px;font-size:12px;color:#9fc4e0;line-height:1.7}
.dm-toast{position:fixed;left:50%;bottom:30px;transform:translateX(-50%) translateY(20px);background:rgba(8,20,40,.96);border:1px solid rgba(80,170,255,.5);border-radius:10px;padding:12px 18px;color:#eaf6ff;font-size:13px;box-shadow:0 12px 40px rgba(0,0,0,.5);opacity:0;pointer-events:none;transition:.25s;z-index:3000}
.dm-toast.show{opacity:1;pointer-events:auto;transform:translateX(-50%) translateY(0)}
.dm-toast-link{color:#22D3EE;margin-left:8px;cursor:pointer;text-decoration:underline}
.dm-log-head{font-size:14px;color:var(--t1);font-weight:600;margin-bottom:14px}
.dm-old{color:#FF8A80;background:rgba(255,92,92,.1);padding:1px 6px;border-radius:5px;font-size:12px}
.dm-new{color:#69F0AE;background:rgba(105,240,174,.1);padding:1px 6px;border-radius:5px;font-size:12px}
.dm-rp-desc{font-size:12px;color:var(--t2);margin-bottom:12px;line-height:1.6}
.dm-rp-cell{text-align:center}
.dm-rp-no{font-size:10px;color:#7f9bb5;margin-left:4px}
.dm-super{text-align:center;padding:6px 4px}
.dm-super-ic{font-size:34px;margin-bottom:8px}
.dm-super-t{font-size:15px;font-weight:700;color:#eaf6ff;margin-bottom:8px}
.dm-super-d{font-size:12px;color:var(--t2);line-height:1.7;margin-bottom:14px}
.dm-super-row{margin-bottom:14px}
.btn-sm{padding:5px 12px;font-size:12px;margin:0}
.btn-danger{background:linear-gradient(180deg,#ff6b6b,#e23b3b);color:#fff;border:none}
.btn-danger:hover{filter:brightness(1.08)}
.tag-red,.tag-green,.tag-blue{font-size:11px;padding:1px 8px;border-radius:6px;font-weight:600}
.tag-red{background:rgba(255,92,92,.16);color:#FF8A80}
.tag-green{background:rgba(105,240,174,.16);color:#69F0AE}
.tag-blue{background:rgba(80,170,255,.16);color:#7CC4FF}
@media (max-width:900px){.dm-cards{grid-template-columns:repeat(2,1fr)}.dm-form{grid-template-columns:1fr}}
@media (max-width:600px){.dm-cards{grid-template-columns:1fr}}
