:root{--brand: #4D148C;--brand-hover: #5E1FA8;--brand-soft: #F1EAFB;--brand-line: rgba(77, 20, 140, .22);--accent: #FA4616;--accent-soft: #FEF0EB;--ok: #15803D;--ok-soft: #E8F5EC;--wait: #D97706;--wait-soft: #FDF3E4;--bad: #D93026;--bad-soft: #FDECEB;--info: #2563EB;--info-soft: #EAF1FE;--bg: #F6F6F9;--surface: #FFFFFF;--surface-2: #FAFAFC;--text: #33333F;--text-2: #6B6B7B;--text-3: #9A9AAB;--title: #1D1D26;--line: #E5E5ED;--line-soft: #EFEFF4;--r-card: 12px;--r-ctrl: 8px;--r-tag: 6px;--mono: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace}*{margin:0;padding:0;box-sizing:border-box}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Helvetica Neue,Helvetica,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;color:var(--text);font-size:13px;background-color:var(--bg)}.num,.mono,.stat-value,.ant-statistic-content,.stat-item .v,.metric-card .vl,.countdown{font-family:var(--mono);font-variant-numeric:tabular-nums}#root{min-height:100vh}.logo{height:72px;display:flex;align-items:center;justify-content:center;padding:0 18px}.logo img{width:109px!important;display:block}.logo.collapsed{justify-content:center;padding:0}.logo.collapsed img{width:44px!important}.sider-foot{margin:14px 16px;padding-top:12px;border-top:1px solid rgba(255,255,255,.14);font-size:10.5px;color:#ffffff94;font-family:var(--mono);letter-spacing:.04em;display:flex;align-items:center;gap:7px}.sider-foot:before{content:"";width:6px;height:6px;border-radius:50%;background:#4ade80;box-shadow:0 0 7px #4ade80}.pagebar{display:flex;align-items:center;justify-content:space-between;gap:12px;height:56px;background:#fff;border-bottom:1px solid var(--line);padding:0 20px;position:sticky;top:0;z-index:10}.pagebar .ptitle{font-size:14px;font-weight:500;color:var(--title);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.pagebar .right{display:flex;align-items:center;gap:16px;flex-shrink:0}.sys-state{display:inline-flex;align-items:center;gap:7px;font-size:11.5px;color:var(--text-3);font-family:var(--mono)}.sys-state:before{content:"";width:6px;height:6px;border-radius:50%;background:var(--ok);box-shadow:0 0 7px #15803d99}.wall{max-width:1920px;margin:0 auto}.wall-head{display:flex;align-items:flex-end;justify-content:space-between;gap:16px;flex-wrap:wrap;margin-bottom:18px}.wall-head h1{font-size:21px;font-weight:500;color:var(--title);letter-spacing:-.01em;line-height:1.2}.wall-head .sub{font-size:12px;color:var(--text-3);margin-top:4px}.zone{margin-bottom:24px}.zone-head{display:flex;align-items:center;gap:10px;margin-bottom:13px}.zone-head h3{font-size:12.5px;font-weight:500;color:var(--text);letter-spacing:.04em;white-space:nowrap;display:flex;align-items:center;gap:7px}.zone-head h3:before{content:"";width:3px;height:13px;border-radius:2px;background:linear-gradient(180deg,var(--brand),var(--accent))}.zone-head .line{flex:1;height:1px;background:var(--line-soft)}.zone-head .side{font-size:11.5px;color:var(--text-3);white-space:nowrap}.zone-head .side a{color:var(--brand);text-decoration:none}.stat-wall{display:grid;grid-template-columns:repeat(auto-fit,minmax(136px,1fr));background:#fff;border:1px solid var(--line);border-radius:var(--r-card);overflow:hidden}.stat-item{padding:15px 18px;border-right:1px solid var(--line-soft);min-width:0}.stat-item:last-child{border-right:0}.stat-item .k{font-size:11.5px;color:var(--text-2);letter-spacing:.03em;margin-bottom:5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.stat-item .v{font-size:26px;font-weight:500;color:var(--title);line-height:1.12;letter-spacing:-.015em}.stat-item .v .unit{font-size:13px;color:var(--text-3);font-family:inherit}.stat-item .d{font-size:11.5px;margin-top:4px;color:var(--text-3)}.up{color:var(--bad);font-weight:500}.down{color:var(--ok);font-weight:500}.chart-wall{display:grid;gap:22px}.chart-wall.c2{grid-template-columns:1.65fr 1fr}.chart-wall.c3{grid-template-columns:1fr 1fr 1fr}.chart-box{min-width:0}.chart-box .cap{display:flex;align-items:baseline;justify-content:space-between;gap:10px;margin-bottom:8px}.chart-box .cap b{font-size:12.5px;font-weight:500;color:var(--text)}.chart-box .cap span{font-size:11.5px;color:var(--text-3)}.chart-box .cap a{font-size:11.5px;color:var(--brand);text-decoration:none}.chart-stage{background:#fff;border-radius:var(--r-card);border:1px solid var(--line-soft);padding:12px 14px}.dist-row{display:flex;align-items:center;gap:10px;font-size:12.5px}.dist-row .nm{width:74px;flex:0 0 74px;color:var(--text)}.dist-row .track{flex:1;height:6px;background:var(--line-soft);border-radius:4px;overflow:hidden}.dist-row .fill{display:block;height:100%;border-radius:4px;background:linear-gradient(90deg,#7C3AED,var(--brand))}.dist-row .vl{width:66px;flex:0 0 66px;text-align:right;color:var(--title);font-weight:500;font-size:12px}.todo-bar{background:var(--wait-soft);border-left:3px solid var(--wait);border-radius:0 var(--r-card) var(--r-card) 0;padding:11px 15px;margin-bottom:20px}.todo-bar h3{font-size:12.5px;font-weight:500;color:#92400e;margin-bottom:7px;display:flex;align-items:center;gap:7px}.todo-bar h3:before{content:"";width:6px;height:6px;border-radius:50%;background:var(--wait);box-shadow:0 0 6px #d97706b3}.todo-list{display:flex;gap:24px;flex-wrap:wrap}.todo-item{font-size:12.5px;color:var(--text-2)}.todo-item a{color:var(--text);text-decoration:none;font-weight:500}.todo-item a:hover{color:var(--brand)}.todo-item .hot{color:#c2410c;font-weight:500}.alert-item{display:block;padding:10px 13px;border-radius:var(--r-ctrl);border:1px solid var(--line-soft);background:#fff;text-decoration:none;transition:border-color .15s,box-shadow .15s}.alert-item:hover{border-color:var(--brand-line);box-shadow:0 2px 10px #4d148c12}.alert-item .t{display:flex;align-items:center;gap:8px;margin-bottom:3px}.alert-item .t i{width:6px;height:6px;border-radius:50%;flex:0 0 6px;display:inline-block}.alert-item .t b{font-size:12.5px;font-weight:500;color:var(--text)}.alert-item .t em{margin-left:auto;font-style:normal;font-size:11.5px;color:var(--text-3)}.alert-item .m{font-size:11.5px;color:var(--text-2);padding-left:14px}.st-tag{display:inline-flex;align-items:center;gap:6px;font-size:11.5px;padding:2px 9px 2px 8px;border-radius:var(--r-tag);white-space:nowrap;line-height:1.6;border:1px solid transparent}.st-tag:before{content:"";width:6px;height:6px;border-radius:50%;background:currentColor;box-shadow:0 0 5px currentColor;flex:0 0 6px}.st-run{background:var(--brand-soft);color:var(--brand);border-color:var(--brand-line)}.st-ok{background:var(--ok-soft);color:var(--ok);border-color:#15803d38}.st-wait{background:var(--wait-soft);color:#b45309;border-color:#d9770638}.st-no{background:var(--bad-soft);color:#b3261e;border-color:#d9302638}.st-idle{background:var(--surface-2);color:var(--text-3);border-color:var(--line-soft)}.countdown{font-size:20px;font-weight:500;color:var(--accent)}.countdown.over{color:var(--text-3)}.page-header{margin-bottom:16px;display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:12px}.page-title{font-size:20px;font-weight:500;color:var(--title);display:flex;align-items:center;gap:9px}.page-title:before{content:"";width:3px;height:16px;border-radius:2px;background:linear-gradient(180deg,var(--brand),var(--accent))}.site-layout-content{padding:18px 20px 40px}.stat-card{text-align:center;padding:20px}.stat-value{font-size:28px;font-weight:500;margin:8px 0;color:var(--title)}.stat-label{color:var(--text-2);font-size:13px}.stat-trend-up{color:var(--bad)}.stat-trend-down{color:var(--ok)}.metric-card{background:#fff;border:1px solid var(--line);border-radius:var(--r-card);padding:14px 16px}.metric-card .lb{font-size:11.5px;color:var(--text-2);margin-bottom:5px}.metric-card .vl{font-size:26px;font-weight:500;color:var(--title)}.metric-card .vl .unit{font-size:13px;color:var(--text-3);font-family:inherit}.metric-card .dt{font-size:11.5px;margin-top:4px;color:var(--text-3)}.metric-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px}.metric-grid.cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.anomaly-row>td{background:var(--bad-soft)!important}.anomaly-row:hover>td{background:#fbddda!important}.province-sum-row>td{background:var(--brand-soft)!important;font-weight:500}.province-sum-gap>td{background:var(--wait-soft)!important}.province-sum-row:hover>td{background:#e9dff8!important}.ant-table{background:transparent}.ant-table-thead>tr>th{background:transparent!important;font-weight:500!important;font-size:11.5px;letter-spacing:.02em;color:var(--text-2)!important;border-bottom:1px solid var(--line)!important}.ant-table-tbody>tr>td{border-bottom:1px solid var(--line-soft)!important}.ant-card{border-color:var(--line)}.ant-card-head{border-bottom-color:var(--line-soft)}.ant-layout-sider{box-shadow:none}.ant-layout-sider-trigger{background:#ffffff1f!important;border-top:1px solid rgba(255,255,255,.14);color:#ffffffd9}.ant-menu-dark.ant-menu-inline .ant-menu-sub.ant-menu-inline{background:#ffffff12!important}.login-container{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:24px;position:relative;overflow:hidden;background:radial-gradient(700px 420px at 50% 6%,rgba(77,20,140,.1),transparent 62%),var(--bg)}.login-container:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background-image:linear-gradient(rgba(29,29,38,.035) 1px,transparent 1px),linear-gradient(90deg,rgba(29,29,38,.035) 1px,transparent 1px);background-size:40px 40px;mask-image:radial-gradient(560px 400px at 50% 45%,#000 25%,transparent 76%);-webkit-mask-image:radial-gradient(560px 400px at 50% 45%,#000 25%,transparent 76%)}.login-card{position:relative;z-index:1;width:400px;max-width:100%;background:#fff;border:1px solid var(--line);border-radius:16px;padding:36px 34px 28px;box-shadow:0 18px 50px #1d1d261a}.login-logo{text-align:center;margin-bottom:20px}.login-logo img{width:124px!important;height:auto!important;border-radius:0!important}.login-title{text-align:center;font-size:24px;font-weight:700;color:var(--brand);margin-bottom:6px}.login-subtitle{text-align:center;color:var(--text-3);font-size:14px;letter-spacing:.08em;margin-bottom:26px}@media (max-width: 1200px){.chart-wall.c2{grid-template-columns:1fr}.chart-wall.c3{grid-template-columns:1fr 1fr}}@media (max-width: 1024px){.metric-grid,.metric-grid.cols-3{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (max-width: 768px){.site-layout-content{padding:12px 12px 32px}.wall-head h1{font-size:17px}.stat-wall{grid-template-columns:repeat(2,minmax(0,1fr))}.stat-item{border-right:0;border-bottom:1px solid var(--line-soft);padding:12px 14px}.stat-item .v{font-size:22px}.chart-wall.c3{grid-template-columns:1fr}.todo-list{flex-direction:column;gap:6px}.pagebar{padding:0 12px}.ant-table-wrapper{overflow-x:auto}.ant-btn{min-height:40px}.ant-btn-sm{min-height:32px}}@media (max-width: 480px){.login-card{padding:26px 20px 22px}.stat-wall{grid-template-columns:repeat(2,minmax(0,1fr))}}

/* ==========================================================================
   页签（AntD Tabs）样式 —— 未选中=灰色，选中=品牌紫实心（当前所在子板块一眼可见）
   2026-09-22 二次修正：上一版做成「全浅紫」，用户反馈应改为「选中的变紫、其余灰」
   位于样式表末尾 + !important，故可覆盖 AntD 运行时注入的样式
   ========================================================================== */
:root {
  --tab-bg: #F0F0F3;          /* 未选中：浅灰底 */
  --tab-bg-hover: #E5E5EB;    /* 未选中 hover：稍深一档 */
  --tab-line: #E3E3EA;        /* 未选中：浅灰描边 */
  --tab-text: #6B6B7B;        /* 未选中：灰字 */
  --tab-active-bg: #4D148C;   /* 选中：品牌紫实心 */
  --tab-active-bg-hover: #5E1FA8;
}
.ant-tabs > .ant-tabs-nav {
  margin-bottom: 16px !important;
}
/* 页签栏底部的分隔线 */
.ant-tabs-top > .ant-tabs-nav::before {
  border-bottom: 1px solid var(--line) !important;
}
/* 页签之间留一点缝，看起来是一枚枚独立按钮 */
.ant-tabs > .ant-tabs-nav .ant-tabs-nav-list {
  gap: 6px;
}
/* 未选中页签：浅灰底 + 灰描边 + 灰字，圆角胶囊 */
.ant-tabs > .ant-tabs-nav .ant-tabs-tab {
  margin: 0 !important;
  padding: 7px 18px !important;
  background: var(--tab-bg) !important;
  border: 1px solid var(--tab-line) !important;
  border-radius: 8px !important;
  color: var(--tab-text) !important;
  transition: background .15s ease, color .15s ease, border-color .15s ease;
}
.ant-tabs > .ant-tabs-nav .ant-tabs-tab:not(.ant-tabs-tab-active):hover {
  background: var(--tab-bg-hover) !important;
}
.ant-tabs > .ant-tabs-nav .ant-tabs-tab .ant-tabs-tab-btn {
  color: var(--tab-text) !important;
  font-size: 13px !important;
  text-shadow: none !important;
}
/* 选中页签：品牌紫实心 + 白字（当前所在子板块一眼可见） */
.ant-tabs > .ant-tabs-nav .ant-tabs-tab.ant-tabs-tab-active,
.ant-tabs > .ant-tabs-nav .ant-tabs-tab:has(.ant-tabs-tab-btn[aria-selected="true"]) {
  background: var(--tab-active-bg) !important;
  border-color: var(--tab-active-bg) !important;
  border-radius: 8px !important;
  color: #FFFFFF !important;
}
.ant-tabs > .ant-tabs-nav .ant-tabs-tab.ant-tabs-tab-active .ant-tabs-tab-btn,
.ant-tabs > .ant-tabs-nav .ant-tabs-tab:has(.ant-tabs-tab-btn[aria-selected="true"]) .ant-tabs-tab-btn {
  color: #FFFFFF !important;
  font-weight: 500 !important;
}
.ant-tabs > .ant-tabs-nav .ant-tabs-tab.ant-tabs-tab-active:hover {
  background: var(--tab-active-bg-hover) !important;
}
/* 选中已由「紫色实心胶囊」表达，隐藏 AntD 的滑动下划线，避免多余线条 */
.ant-tabs > .ant-tabs-nav .ant-tabs-ink-bar {
  display: none !important;
}
/* 页签内的关闭 × / 图标颜色跟随 */
.ant-tabs > .ant-tabs-nav .ant-tabs-tab .ant-tabs-tab-remove,
.ant-tabs > .ant-tabs-nav .ant-tabs-tab .anticon {
  color: inherit !important;
  opacity: .75;
}
.ant-tabs > .ant-tabs-nav .ant-tabs-tab:hover .ant-tabs-tab-remove,
.ant-tabs > .ant-tabs-nav .ant-tabs-tab:hover .anticon {
  opacity: 1;
}
/* 窄屏：页签多时允许横向滚动，不挤压变形 */
@media (max-width: 768px) {
  .ant-tabs > .ant-tabs-nav .ant-tabs-tab {
    padding: 6px 12px !important;
  }
  .ant-tabs > .ant-tabs-nav .ant-tabs-tab .ant-tabs-tab-btn {
    font-size: 12.5px !important;
  }
}
