/* ============================================================
   驭数 CRM — Apple Web 视觉风格样式层
   参考 apple.com 产品页：大字号、全出血分区、发丝线、胶囊按钮、留白主导
   ============================================================ */

:root{
  /* 语义色（亮色） */
  --bg:            #ffffff;
  --bg-alt:        #f5f5f7;
  --surface:       #ffffff;
  --surface-alt:   #f5f5f7;
  --surface-sunk:  #fafafa;

  --text:          #1d1d1f;
  --text-2:        #6e6e73;
  --text-3:        #86868b;
  --text-inv:      #f5f5f7;
  --text-inv-2:    #a1a1a6;

  --hair:          rgba(0,0,0,.10);
  --hair-soft:     rgba(0,0,0,.06);

  --blue:          #0071e3;
  --blue-hover:    #0077ed;
  --blue-soft:     rgba(0,113,227,.08);
  --green:         #248a3d;
  --red:           #d70015;
  --orange:        #bf4800;
  --purple:        #6b3fa0;
  --teal:          #00808a;

  /* 圆角（同心：容器 > 卡片 > 控件） */
  --r-xl: 28px;
  --r-lg: 18px;
  --r-md: 12px;
  --r-sm: 8px;
  --r-pill: 980px;

  /* 阴影（极轻，苹果网页几乎不用重阴影） */
  --sh-1: 0 1px 2px rgba(0,0,0,.03), 0 4px 16px rgba(0,0,0,.03);
  --sh-2: 0 4px 24px rgba(0,0,0,.06);
  --sh-3: 0 12px 48px rgba(0,0,0,.10);

  --nav-h: 52px;
  --bar-h: 34px;
  --side-w: 252px;
  --ease: cubic-bezier(.32,.72,0,1);
  --maxw: 1400px;
}

[data-theme="dark"]{
  --bg:            #000000;
  --bg-alt:        #0a0a0a;
  --surface:       #1d1d1f;
  --surface-alt:   #161617;
  --surface-sunk:  #111113;
  --text:          #f5f5f7;
  --text-2:        #a1a1a6;
  --text-3:        #86868b;
  --hair:          rgba(255,255,255,.14);
  --hair-soft:     rgba(255,255,255,.08);
  --blue:          #2997ff;
  --blue-hover:    #47a6ff;
  --blue-soft:     rgba(41,151,255,.14);
  --green:         #30d158;
  --red:           #ff453a;
  --orange:        #ff9f0a;
  --purple:        #bf5af2;
  --teal:          #40c8e0;
  --sh-1: 0 1px 2px rgba(0,0,0,.5), 0 4px 16px rgba(0,0,0,.4);
  --sh-2: 0 4px 24px rgba(0,0,0,.55);
  --sh-3: 0 12px 48px rgba(0,0,0,.7);
}

*,*::before,*::after{ box-sizing:border-box; }

html{ -webkit-text-size-adjust:100%; scroll-behavior:smooth; }

body{
  margin:0;
  background:var(--bg-alt);
  color:var(--text);
  font-family:-apple-system,BlinkMacSystemFont,"SF Pro Display","SF Pro Text","PingFang SC","Hiragino Sans GB","Microsoft YaHei","Helvetica Neue",Helvetica,Arial,sans-serif;
  font-size:17px;
  line-height:1.47059;
  letter-spacing:-.012em;
  -webkit-font-smoothing:antialiased;
  text-rendering:optimizeLegibility;
}

/* ---------- 滚动渐显（apple.com 招牌动效） ---------- */
.reveal{ opacity:0; transform:translateY(26px); transition:opacity .8s var(--ease), transform .8s var(--ease); }
.reveal.in{ opacity:1; transform:none; }
@media (prefers-reduced-motion: reduce){
  .reveal{ opacity:1; transform:none; transition:none; }
  html{ scroll-behavior:auto; }
}

/* ============================================================
   顶部导航 —— 磨砂玻璃悬浮条
   ============================================================ */
.nav{
  position:fixed; top:var(--bar-h); left:0; right:0; height:var(--nav-h); z-index:900;
  display:flex; align-items:center; gap:28px;
  padding:0 24px;
  background:color-mix(in srgb, var(--bg) 72%, transparent);
  -webkit-backdrop-filter:saturate(180%) blur(20px);
  backdrop-filter:saturate(180%) blur(20px);
  border-bottom:.5px solid var(--hair);
}
@supports not (backdrop-filter: blur(2px)){ .nav{ background:var(--bg); } }

.nav-brand{ display:flex; align-items:center; gap:9px; font-size:19px; font-weight:600; letter-spacing:-.02em; flex:none; }
.nav-mark{ width:22px; height:22px; border-radius:6px; background:linear-gradient(150deg,#0071e3,#5ac8fa); flex:none; }
.nav-brand small{ font-size:12px; font-weight:400; color:var(--text-3); letter-spacing:0; }

.nav-station{
  display:flex; align-items:center; gap:6px; flex:none;
  font-size:14px; color:var(--text-2); cursor:pointer;
  padding:5px 11px; border-radius:var(--r-pill);
  transition:background .25s var(--ease), color .25s var(--ease);
}
.nav-station:hover{ background:var(--surface-alt); color:var(--text); }
.nav-station .chev{ width:8px; height:8px; border-right:1.5px solid currentColor; border-bottom:1.5px solid currentColor; transform:rotate(45deg) translateY(-1px); opacity:.6; }

.nav-spacer{ flex:1 1 auto; }

.nav-search{
  display:flex; align-items:center; gap:7px;
  width:230px; padding:6px 12px;
  background:var(--surface-alt); border-radius:var(--r-pill);
  font-size:14px; color:var(--text-3);
  border:.5px solid transparent; transition:border-color .25s var(--ease), background .25s var(--ease);
}
.nav-search:focus-within{ border-color:var(--blue); background:var(--bg); }
.nav-search input{ border:0; background:none; outline:none; font:inherit; color:var(--text); width:100%; }
.nav-search input::placeholder{ color:var(--text-3); }

.icon-btn{
  width:32px; height:32px; flex:none; display:grid; place-items:center;
  border:0; border-radius:50%; background:transparent; color:var(--text-2);
  cursor:pointer; transition:background .25s var(--ease), color .25s var(--ease);
}
.icon-btn:hover{ background:var(--surface-alt); color:var(--text); }
.icon-btn svg{ width:17px; height:17px; fill:none; stroke:currentColor; stroke-width:1.6; stroke-linecap:round; stroke-linejoin:round; }

.nav-toggle{
  display:flex; align-items:center; gap:8px; flex:none;
  padding:6px 13px; border:0; border-radius:var(--r-pill); cursor:pointer;
  background:transparent; color:var(--text-2); font:inherit; font-size:13px;
  transition:background .25s var(--ease), color .25s var(--ease);
}
.nav-toggle:hover{ background:var(--surface-alt); color:var(--text); }
.nav-toggle.on{ background:var(--blue); color:#fff; }

/* ============================================================
   骨架
   ============================================================ */
.shell{ display:grid; grid-template-columns:var(--side-w) 1fr; padding-top:calc(var(--nav-h) + var(--bar-h)); }

.sidebar{
  position:sticky; top:calc(var(--nav-h) + var(--bar-h));
  height:calc(100vh - var(--nav-h) - var(--bar-h));
  overflow-y:auto; padding:26px 14px 60px;
  border-right:.5px solid var(--hair);
  background:var(--bg);
}
.side-group{ margin-bottom:26px; }
.side-group h4{
  margin:0 0 8px 12px; font-size:12px; font-weight:600;
  color:var(--text-3); letter-spacing:.02em;
}
.side-link{
  display:flex; align-items:center; gap:10px;
  padding:8px 12px; margin-bottom:1px;
  border-radius:10px; font-size:15px; color:var(--text);
  text-decoration:none; cursor:pointer;
  transition:background .2s var(--ease), color .2s var(--ease);
}
.side-link:hover{ background:var(--surface-alt); }
.side-link.active{ background:var(--blue); color:#fff; font-weight:500; }
.side-link .dot{ width:6px; height:6px; border-radius:50%; background:var(--text-3); flex:none; opacity:.5; }
.side-link.active .dot{ background:#fff; opacity:1; }

.main{ min-width:0; padding:0 0 140px; background:var(--bg-alt); }
.wrap{ max-width:var(--maxw); margin:0 auto; padding:0 40px; }

/* ============================================================
   页面 Hero —— 大字号 + 大留白
   ============================================================ */
.hero{
  padding:88px 0 64px;
  background:var(--bg);
  border-bottom:.5px solid var(--hair);
}
.hero .eyebrow{
  font-size:14px; font-weight:600; color:var(--blue);
  letter-spacing:.01em; margin-bottom:14px;
}
.hero h1{
  margin:0; font-size:clamp(38px,4.6vw,64px); font-weight:600;
  letter-spacing:-.028em; line-height:1.06;
}
.hero .sub{
  margin:20px 0 0; max-width:760px;
  font-size:clamp(19px,1.7vw,26px); font-weight:400;
  line-height:1.35; letter-spacing:-.01em; color:var(--text-2);
}
.hero-actions{ margin-top:32px; display:flex; align-items:center; gap:26px; flex-wrap:wrap; }

/* 紧凑 Hero —— 正文本身就是密集看板的页面用（如营销渠道），避免顶部大片留白
   ★ 2026-10-21 再压一档（用户：标题部分再压缩一下，留那么多空间干啥）：
     从 126px 压到约 72px —— eyebrow 与 h1 同行（inline 小标签），副标题独占一行，限一行截断 */
.hero.compact{ padding:12px 0 13px; }
/* ★ 2026-10-21 用户要求「向左靠齐」：这一页正文是 .pf-body.onlych（左右 padding 为 0、全宽），
   而 .wrap 默认 max-width 居中 + 40px 内边距 → 标题比下面的 Tab/指标卡右移 100 多像素。
   这里去掉 max-width 与内边距，让标题左端与 Tab 条、指标卡左端一条竖线对齐。 */
.hero.compact .wrap{
  display:flex; flex-wrap:wrap; align-items:baseline;
  column-gap:10px; row-gap:0;
  max-width:none; margin:0; padding:0;
}
.hero.compact .eyebrow{
  order:0; margin:0; font-size:11.5px; font-weight:600; letter-spacing:.02em;
  padding:2px 8px; border-radius:999px;
  background:color-mix(in srgb,var(--blue) 9%,transparent);
  color:var(--blue); line-height:1.5;
  transform:translateY(-2px);
}
.hero.compact h1{
  order:1; margin:0; font-size:clamp(20px,1.9vw,25px); font-weight:600;
  letter-spacing:-.02em; line-height:1.2;
}
.hero.compact .sub{
  order:2; flex:1 0 100%; margin:3px 0 0; max-width:none;
  font-size:13px; line-height:1.5; color:var(--text-3);
  overflow:hidden; text-overflow:ellipsis; white-space:nowrap;
}
.hero.compact .hero-actions{ order:3; margin-top:8px; }

/* 深色 Hero（apple.com 常用全黑强调段） */
.hero.dark{ background:#000; color:#f5f5f7; border-bottom-color:rgba(255,255,255,.14); }
.hero.dark .eyebrow{ color:#2997ff; }
.hero.dark .sub{ color:#a1a1a6; }

/* ============================================================
   分区
   ============================================================ */
.section{ padding:64px 0; border-bottom:.5px solid var(--hair); background:var(--bg); }
.section.gray{ background:var(--bg-alt); }
.section.dark{ background:#000; color:#f5f5f7; border-bottom-color:rgba(255,255,255,.14); }
.section.dark .sec-sub{ color:#a1a1a6; }

.sec-head{ margin-bottom:32px; }
.sec-head h2{
  margin:0; font-size:clamp(26px,2.6vw,38px); font-weight:600;
  letter-spacing:-.022em; line-height:1.1;
}
.sec-sub{
  margin:12px 0 0; max-width:720px; font-size:19px;
  color:var(--text-2); line-height:1.4; letter-spacing:-.01em;
}
.sec-aside{ margin-left:auto; display:flex; gap:10px; align-items:center; }
.sec-head.row{ display:flex; align-items:flex-end; gap:20px; flex-wrap:wrap; }

/* ============================================================
   卡片 / 区块容器
   ============================================================ */
.card{
  background:var(--surface);
  border-radius:var(--r-lg);
  box-shadow:var(--sh-1);
  padding:26px 28px;
  border:.5px solid var(--hair-soft);
}
.section.gray .card{ border-color:transparent; }
.section.dark .card{ background:#1d1d1f; border-color:rgba(255,255,255,.10); }

.card-title{
  display:flex; align-items:center; justify-content:space-between;
  gap:16px; margin-bottom:18px;
}
.card-title h3{ margin:0; font-size:19px; font-weight:600; letter-spacing:-.015em; }
.card-title .meta{ font-size:13px; color:var(--text-3); }

.grid{ display:grid; gap:18px; }
.g-2{ grid-template-columns:repeat(2,minmax(0,1fr)); }
.g-3{ grid-template-columns:repeat(3,minmax(0,1fr)); }
.g-4{ grid-template-columns:repeat(4,minmax(0,1fr)); }
.g-2-1{ grid-template-columns:2fr 1fr; }
.g-1-2{ grid-template-columns:1fr 2fr; }
@media (max-width:1100px){
  .g-4{ grid-template-columns:repeat(2,minmax(0,1fr)); }
  .g-3,.g-2-1,.g-1-2{ grid-template-columns:1fr; }
}
@media (max-width:700px){
  .g-2,.g-3,.g-4{ grid-template-columns:1fr; }
}

/* ============================================================
   KPI 卡
   ============================================================ */
.kpi{ display:flex; flex-direction:column; gap:8px; }
.kpi .label{ font-size:13px; color:var(--text-2); letter-spacing:0; }
.kpi .value{
  font-size:clamp(30px,3vw,44px); font-weight:600;
  letter-spacing:-.028em; line-height:1.05;
}
.kpi .value .unit{ font-size:.42em; font-weight:500; color:var(--text-2); margin-left:4px; letter-spacing:0; }
.kpi .foot{ display:flex; align-items:center; gap:8px; font-size:13px; color:var(--text-3); }

.delta{ display:inline-flex; align-items:center; gap:3px; font-size:13px; font-weight:500; padding:2px 8px; border-radius:var(--r-pill); }
.delta.up{ color:var(--green); background:color-mix(in srgb, var(--green) 12%, transparent); }
.delta.down{ color:var(--red); background:color-mix(in srgb, var(--red) 12%, transparent); }
.delta.flat{ color:var(--text-3); background:var(--surface-alt); }

/* ============================================================
   按钮
   ============================================================ */
.btn{
  display:inline-flex; align-items:center; justify-content:center; gap:7px;
  min-height:38px; padding:0 20px;
  border:0; border-radius:var(--r-pill);
  background:var(--blue); color:#fff;
  font:inherit; font-size:15px; font-weight:400; letter-spacing:-.01em;
  cursor:pointer; white-space:nowrap;
  transition:background .25s var(--ease), transform .15s var(--ease), opacity .2s;
}
.btn:hover{ background:var(--blue-hover); }
.btn:active{ transform:scale(.97); }
.btn.ghost{ background:transparent; color:var(--blue); }
.btn.ghost:hover{ background:var(--blue-soft); }
.btn.plain{ background:var(--surface-alt); color:var(--text); }
.btn.plain:hover{ background:color-mix(in srgb, var(--text) 8%, var(--surface-alt)); }
.btn.tinted{ background:rgba(0,113,227,.10); color:var(--blue); }
.btn.tinted:hover{ background:rgba(0,113,227,.16); }
.btn.sm{ min-height:30px; padding:0 14px; font-size:13px; }
.btn[disabled]{ opacity:.4; cursor:not-allowed; }

/* 苹果式文本链接 + 尖角 */
.link{ color:var(--blue); text-decoration:none; font-size:17px; }
.link::after{ content:" ›"; }
.link:hover{ text-decoration:underline; }
.link.sm{ font-size:14px; }

/* ============================================================
   表格
   ============================================================ */
.table-tools{ display:flex; align-items:center; gap:10px; margin-bottom:16px; flex-wrap:wrap; }
.chips{ display:flex; gap:6px; padding:3px; background:var(--surface-alt); border-radius:var(--r-pill); }
.chip{
  padding:5px 15px; border:0; border-radius:var(--r-pill); cursor:pointer;
  background:transparent; color:var(--text-2); font:inherit; font-size:13px;
  transition:background .25s var(--ease), color .25s var(--ease);
}
.chip:hover{ color:var(--text); }
.chip.on{ background:var(--bg); color:var(--text); box-shadow:var(--sh-1); }

.tbl-scroll{ overflow-x:auto; margin:0 -28px; padding:0 28px; }
table.tbl{ width:100%; border-collapse:collapse; font-size:15px; }
table.tbl th{
  text-align:left; font-weight:400; font-size:13px; color:var(--text-2);
  padding:0 16px 10px 0; border-bottom:.5px solid var(--hair); white-space:nowrap;
}
table.tbl td{
  padding:14px 16px 14px 0; border-bottom:.5px solid var(--hair-soft);
  vertical-align:middle;
}
table.tbl tbody tr{ transition:background .2s var(--ease); }
table.tbl tbody tr:hover{ background:var(--surface-sunk); }
table.tbl td.num{ font-variant-numeric:tabular-nums; }
table.tbl .row-act{ text-align:right; white-space:nowrap; }

.tag{ display:inline-block; padding:3px 10px; border-radius:var(--r-pill); font-size:12px; font-weight:500; letter-spacing:0; }
.tag.blue{ background:var(--blue-soft); color:var(--blue); }
.tag.green{ background:color-mix(in srgb, var(--green) 12%, transparent); color:var(--green); }
.tag.red{ background:color-mix(in srgb, var(--red) 12%, transparent); color:var(--red); }
.tag.orange{ background:color-mix(in srgb, var(--orange) 12%, transparent); color:var(--orange); }
.tag.gray{ background:var(--surface-alt); color:var(--text-2); }

/* 空状态（诚实占位，不编造数据） */
.empty{
  display:flex; flex-direction:column; align-items:center; justify-content:center;
  gap:8px; padding:52px 20px; text-align:center;
  color:var(--text-3); font-size:15px;
  border:1px dashed var(--hair); border-radius:var(--r-md);
  background:var(--surface-sunk);
}
.empty .big{ font-size:15px; font-weight:500; color:var(--text-2); }
.empty .hint{ font-size:13px; }

/* ============================================================
   图表
   ============================================================ */
.chart-box{ position:relative; width:100%; }
.chart-box canvas{ width:100% !important; }

/* ============================================================
   列表 / 时间线
   ============================================================ */
.list{ display:flex; flex-direction:column; }
.list-item{
  display:flex; align-items:center; gap:16px;
  padding:16px 0; border-bottom:.5px solid var(--hair-soft);
}
.list-item:last-child{ border-bottom:0; }
.list-item .li-main{ flex:1; min-width:0; }
.list-item .li-title{ font-size:16px; font-weight:500; letter-spacing:-.01em; }
.list-item .li-desc{ font-size:14px; color:var(--text-2); margin-top:3px; }
.list-item .li-meta{ font-size:13px; color:var(--text-3); white-space:nowrap; }
.list-item .avatar{
  width:38px; height:38px; flex:none; border-radius:50%;
  display:grid; place-items:center; font-size:15px; font-weight:600; color:#fff;
  background:linear-gradient(150deg,#8e8e93,#48484a);
}

.timeline{ position:relative; padding-left:26px; }
.timeline::before{ content:""; position:absolute; left:5px; top:8px; bottom:8px; width:1px; background:var(--hair); }
.tl-item{ position:relative; padding-bottom:24px; }
.tl-item:last-child{ padding-bottom:0; }
.tl-item::before{
  content:""; position:absolute; left:-26px; top:6px;
  width:11px; height:11px; border-radius:50%;
  background:var(--bg); border:2px solid var(--blue);
}
.tl-item.done::before{ border-color:var(--green); background:var(--green); }
.tl-time{ font-size:12px; color:var(--text-3); }
.tl-title{ font-size:16px; font-weight:500; margin-top:2px; }
.tl-desc{ font-size:14px; color:var(--text-2); margin-top:3px; }

/* ============================================================
   看板
   ============================================================ */
.kanban{ display:grid; grid-template-columns:repeat(4,minmax(220px,1fr)); gap:14px; overflow-x:auto; }
.kb-col{ background:var(--surface-alt); border-radius:var(--r-md); padding:12px; }
.kb-head{ display:flex; align-items:center; justify-content:space-between; font-size:13px; font-weight:600; padding:4px 6px 12px; }
.kb-head .cnt{ color:var(--text-3); font-weight:400; }
.kb-card{
  background:var(--surface); border-radius:var(--r-sm); padding:13px 14px;
  margin-bottom:9px; box-shadow:var(--sh-1);
  border:.5px solid var(--hair-soft); cursor:grab;
  transition:transform .2s var(--ease), box-shadow .2s var(--ease);
}
.kb-card:hover{ transform:translateY(-2px); box-shadow:var(--sh-2); }
.kb-card .t{ font-size:14px; font-weight:500; line-height:1.35; }
.kb-card .m{ font-size:12px; color:var(--text-3); margin-top:7px; display:flex; gap:8px; align-items:center; }

/* ============================================================
   日历
   ============================================================ */
.cal{ display:grid; grid-template-columns:repeat(7,1fr); gap:8px; }
.cal-dow{ font-size:12px; color:var(--text-3); text-align:center; padding-bottom:6px; }
.cal-cell{
  min-height:96px; border-radius:var(--r-md); padding:8px;
  background:var(--surface-alt); border:.5px solid var(--hair-soft);
  font-size:13px; transition:background .2s var(--ease);
}
.cal-cell.other{ opacity:.32; }
.cal-cell:hover{ background:var(--surface-sunk); }
.cal-cell .d{ font-size:13px; color:var(--text-2); margin-bottom:6px; }
.cal-ev{
  font-size:11px; padding:3px 7px; border-radius:6px; margin-bottom:4px;
  background:var(--blue-soft); color:var(--blue);
  white-space:nowrap; overflow:hidden; text-overflow:ellipsis;
}
.cal-ev.green{ background:color-mix(in srgb, var(--green) 12%, transparent); color:var(--green); }
.cal-ev.orange{ background:color-mix(in srgb, var(--orange) 12%, transparent); color:var(--orange); }
.cal-ev.purple{ background:color-mix(in srgb, var(--purple) 12%, transparent); color:var(--purple); }

/* ============================================================
   表单
   ============================================================ */
.field{ margin-bottom:18px; }
.field > label{ display:block; font-size:13px; color:var(--text-2); margin-bottom:7px; }
.field input[type=text],.field input[type=number],.field input[type=date],
.field select,.field textarea{
  width:100%; padding:11px 14px; font:inherit; font-size:15px; color:var(--text);
  background:var(--surface-alt); border:.5px solid transparent;
  border-radius:var(--r-md); outline:none;
  transition:border-color .25s var(--ease), background .25s var(--ease);
}
.field textarea{ min-height:88px; resize:vertical; }
.field input:focus,.field select:focus,.field textarea:focus{
  border-color:var(--blue); background:var(--bg);
}
.field .fh{ font-size:12px; color:var(--text-3); margin-top:6px; }
.form-row{ display:grid; gap:0 18px; grid-template-columns:repeat(2,minmax(0,1fr)); }
.form-row.f3{ grid-template-columns:repeat(3,minmax(0,1fr)); }
@media (max-width:760px){ .form-row,.form-row.f3{ grid-template-columns:1fr; } }
.form-actions{ display:flex; gap:12px; padding-top:6px; }

.switch{ display:inline-flex; align-items:center; gap:10px; cursor:pointer; font-size:15px; }
.switch input{ display:none; }
.switch .track{
  width:44px; height:27px; border-radius:var(--r-pill); background:var(--hair);
  position:relative; transition:background .28s var(--ease); flex:none;
}
.switch .track::after{
  content:""; position:absolute; top:2px; left:2px; width:23px; height:23px;
  border-radius:50%; background:#fff; box-shadow:0 1px 3px rgba(0,0,0,.25);
  transition:transform .28s var(--ease);
}
.switch input:checked + .track{ background:var(--green); }
.switch input:checked + .track::after{ transform:translateX(17px); }

/* 权限矩阵表 */
.matrix th:first-child,.matrix td:first-child{ position:sticky; left:0; background:var(--surface); }
.matrix .yes{ color:var(--green); font-size:16px; }
.matrix .no{ color:var(--text-3); }

/* ============================================================
   AI 浮窗
   ============================================================ */
.ai-fab{
  position:fixed; right:26px; bottom:26px; z-index:950;
  min-width:56px; height:56px; padding:0 16px 0 13px; border:0; border-radius:999px; cursor:pointer;
  background:linear-gradient(150deg,#0071e3,#5ac8fa); color:#fff;
  box-shadow:0 8px 28px rgba(0,113,227,.38);
  display:inline-flex; align-items:center; gap:7px; white-space:nowrap;
  animation:breathe 3.6s var(--ease) infinite;
  transition:transform .25s var(--ease);
}
/* ★ 2026-10-13 加文字标签：原来纯图标被当成主题切换按钮，用户找不到 AI 入口 */
.ai-fab-t{ font-size:13.5px; font-weight:600; letter-spacing:.2px; }
.ai-fab:hover{ transform:scale(1.04); }
.ai-fab svg{ width:22px; height:22px; flex:none; fill:none; stroke:currentColor; stroke-width:1.7; stroke-linecap:round; stroke-linejoin:round; }
/* ★ 2026-10-13 不再按窄屏隐藏文字：窗口一窄 AI 入口就退化成认不出的纯图标圆钮
   （实测 360px 宽窗口下 media query 命中，用户反馈"AI 智脑不好用"，实际是找不着入口）。
   胶囊只多 60px，不影响布局；极窄屏改用短文案「AI」。 */
@media (max-width:420px){
  .ai-fab{ padding:0 12px; gap:0; }
  .ai-fab-t{ font-size:0; }
  .ai-fab-t::after{ content:'AI'; font-size:13px; }
}
@keyframes breathe{ 0%,100%{ box-shadow:0 8px 28px rgba(0,113,227,.34);} 50%{ box-shadow:0 8px 38px rgba(0,113,227,.58);} }

.ai-panel{
  position:fixed; right:26px; bottom:26px; z-index:960;
  width:380px; height:520px; border-radius:22px; overflow:hidden;
  background:color-mix(in srgb, var(--bg) 82%, transparent);
  -webkit-backdrop-filter:saturate(180%) blur(24px);
  backdrop-filter:saturate(180%) blur(24px);
  box-shadow:var(--sh-3); border:.5px solid var(--hair);
  display:flex; flex-direction:column;
  opacity:0; pointer-events:none; transform:translateY(14px) scale(.97);
  transition:opacity .32s var(--ease), transform .32s var(--ease);
}
.ai-panel.open{ opacity:1; pointer-events:auto; transform:none; }
.ai-head{ display:flex; align-items:center; gap:10px; padding:15px 18px; border-bottom:.5px solid var(--hair); }
.ai-head .t{ font-size:15px; font-weight:600; }
.ai-head .s{ font-size:12px; color:var(--text-3); }
.ai-body{ flex:1; overflow-y:auto; padding:18px; display:flex; flex-direction:column; gap:14px; }
.bubble{ max-width:82%; padding:11px 15px; font-size:15px; line-height:1.45; border-radius:18px; }
.bubble.ai{ align-self:flex-start; background:var(--surface-alt); border-bottom-left-radius:6px; }
.bubble.me{ align-self:flex-end; background:var(--blue); color:#fff; border-bottom-right-radius:6px; }
/* ★ 2026-09-22 AI 智脑·移动端友好表格样式（web 端 markdown 表格升级） */
.bubble table{ width:100%; border-collapse:collapse; font-size:13px; margin:6px 0 8px; display:block; overflow-x:auto; max-width:100%; }
.bubble table th, .bubble table td{ padding:6px 9px; border-bottom:.5px solid var(--hair); text-align:left; vertical-align:top; white-space:nowrap; }
.bubble table th{ font-weight:600; color:var(--text-1); background:var(--surface-2,rgba(0,0,0,.03)); position:sticky; top:0; }
.bubble table tr:last-child td{ border-bottom:none; }
.bubble table td em, .bubble table th em{ color:var(--text-3); font-style:normal; }
.ai-quick{ display:flex; flex-wrap:wrap; gap:7px; padding:0 18px 12px; }
.ai-quick button{
  padding:6px 12px; font:inherit; font-size:12.5px; cursor:pointer;
  background:var(--surface-alt); border:.5px solid var(--hair-soft);
  border-radius:var(--r-pill); color:var(--text-2);
  transition:background .2s var(--ease), color .2s var(--ease);
}
.ai-quick button:hover{ background:var(--blue-soft); color:var(--blue); border-color:transparent; }
.ai-input{ display:flex; gap:9px; padding:12px 14px; border-top:.5px solid var(--hair); }
.ai-input input{
  flex:1; padding:9px 15px; font:inherit; font-size:15px; color:var(--text);
  background:var(--surface-alt); border:.5px solid transparent; border-radius:var(--r-pill); outline:none;
}
.ai-input input:focus{ border-color:var(--blue); }

/* ============================================================
   Tweaks 面板
   ============================================================ */
.tweaks{
  position:fixed; right:26px; bottom:96px; z-index:940;
  width:270px; padding:18px; border-radius:var(--r-lg);
  background:color-mix(in srgb, var(--bg) 88%, transparent);
  -webkit-backdrop-filter:saturate(180%) blur(24px);
  backdrop-filter:saturate(180%) blur(24px);
  box-shadow:var(--sh-3); border:.5px solid var(--hair);
  opacity:0; pointer-events:none; transform:translateY(10px) scale(.98);
  transition:opacity .3s var(--ease), transform .3s var(--ease);
}
.tweaks.open{ opacity:1; pointer-events:auto; transform:none; }
.tweaks h5{ margin:0 0 14px; font-size:13px; font-weight:600; letter-spacing:.02em; color:var(--text-2); }
.tw-row{ display:flex; align-items:center; justify-content:space-between; gap:12px; padding:9px 0; font-size:14px; }
.tw-row + .tw-row{ border-top:.5px solid var(--hair-soft); }

/* ============================================================
   编辑模式（L2 页面内联编辑）
   ============================================================ */
body.editing [data-ck]{ cursor:text; border-radius:5px; transition:box-shadow .2s var(--ease); }
body.editing [data-ck]:hover{ box-shadow:0 0 0 2px var(--blue-soft); }
body.editing [data-ck]:focus{ outline:none; box-shadow:0 0 0 2px var(--blue); background:var(--surface-alt); }

.edit-bar{
  position:fixed; left:50%; bottom:26px; transform:translateX(-50%) translateY(20px);
  z-index:970; display:flex; align-items:center; gap:10px;
  padding:10px 14px; border-radius:var(--r-pill);
  background:color-mix(in srgb, var(--bg) 88%, transparent);
  -webkit-backdrop-filter:saturate(180%) blur(24px);
  backdrop-filter:saturate(180%) blur(24px);
  box-shadow:var(--sh-3); border:.5px solid var(--hair);
  font-size:13px; color:var(--text-2);
  opacity:0; pointer-events:none; transition:opacity .3s var(--ease), transform .3s var(--ease);
}
.edit-bar.show{ opacity:1; pointer-events:auto; transform:translateX(-50%); }

/* 示例数据提示条 */
.demo-bar{
  position:fixed; top:0; left:0; right:0; height:var(--bar-h); z-index:910;
  display:flex; align-items:center; justify-content:center; gap:4px;
  background:#000; color:#f5f5f7; font-size:13px; letter-spacing:0;
  overflow:hidden;
}
.demo-bar b{ color:#2997ff; font-weight:500; }
[data-theme="dark"] .demo-bar{ background:#1d1d1f; }

/* 响应式 */
@media (max-width:1024px){
  .shell{ grid-template-columns:1fr; }
  .sidebar{
    position:fixed; top:calc(var(--nav-h) + var(--bar-h)); left:0; width:var(--side-w); z-index:880;
    height:calc(100vh - var(--nav-h) - var(--bar-h));
    transform:translateX(-100%); transition:transform .34s var(--ease);
    box-shadow:var(--sh-3);
  }
  .sidebar.open{ transform:none; }
  .nav-search{ display:none; }
  .wrap{ padding:0 22px; }
  .hero{ padding:56px 0 44px; }
}
@media (max-width:560px){
  .hero h1{ font-size:34px; }
  .ai-panel{ right:0; left:0; bottom:0; width:auto; height:76vh; border-radius:22px 22px 0 0; }
}

::selection{ background:var(--blue); color:#fff; }

/* ============================================================
   经营概览 5-Tab 模块（替换版）
   ============================================================ */
.ov-sub{
  background:var(--bg); border-bottom:.5px solid var(--hair);
  position:sticky; top:calc(var(--nav-h) + var(--bar-h)); z-index:200;
}
.ov-bar{ display:flex; align-items:center; gap:18px; padding:12px 40px 6px; flex-wrap:wrap; }
.ov-bar .mode{ font-size:13px; color:var(--text-3); }
.ov-tabs{ display:flex; gap:4px; padding:0 40px; overflow-x:auto; }
.ov-tab{
  padding:10px 15px; border:0; background:none; cursor:pointer;
  font:inherit; font-size:15px; color:var(--text-2); white-space:nowrap;
  border-bottom:2px solid transparent; transition:color .2s var(--ease);
}
.ov-tab:hover{ color:var(--text); }
.ov-tab.on{ color:var(--blue); font-weight:600; border-bottom-color:var(--blue); }

.ov-page{ padding:32px 40px 120px; max-width:1080px; margin:0 auto; }

/* 蓝色主卡 */
.obig{
  background:linear-gradient(150deg,#0a84ff,#1e63ff);
  color:#fff; border-radius:var(--r-lg); padding:22px 28px 26px;
  box-shadow:var(--sh-2);
}
.obig .cols{ display:grid; grid-template-columns:repeat(3,1fr); gap:12px; }
.obig .col .v{ font-size:clamp(30px,3.2vw,42px); font-weight:600; letter-spacing:-.02em; line-height:1.05; }
.obig .col .k{ font-size:14px; opacity:.92; margin-top:5px; font-weight:500; }
.obig .col .s{ font-size:12.5px; opacity:.82; margin-top:3px; }
.obig .more{ margin-top:18px; text-align:center; font-size:13px; opacity:.9; cursor:pointer; }
.obig .more span{ display:inline-flex; align-items:center; gap:5px; }

/* 分油品明细（单站） */
.ofuel{ margin-top:14px; border-top:.5px solid rgba(255,255,255,.22); }
.ofuel .row{ display:grid; grid-template-columns:1fr 1fr 1fr; padding:13px 0; border-bottom:.5px solid rgba(255,255,255,.14); }
.ofuel .row:last-child{ border-bottom:0; }
.ofuel .c .v{ font-size:20px; font-weight:600; letter-spacing:-.01em; }
.ofuel .c .k{ font-size:12px; opacity:.85; margin-top:2px; }
.ofuel .c .s{ font-size:12px; opacity:.72; margin-top:1px; }
.ofuel .fuel-chip{ display:inline-block; font-size:11px; font-weight:600; color:#fff; padding:1px 7px; border-radius:5px; margin-right:6px; }
.f-92{ background:#d70015; } .f-95{ background:#248a3d; } .f-0{ background:#8e8e93; }

/* ★ 2026-10-13 分油品：白底指标卡（蓝底只留顶部总览/总预测） */
.ofuel-card{
  background:var(--surface); border-radius:var(--r-lg); box-shadow:var(--sh-1);
  padding:18px 22px; margin-top:14px; border:.5px solid var(--hair-soft);
}
.ofuel-card .ofc-head{ display:flex; align-items:baseline; gap:10px; margin-bottom:6px; }
.ofuel-card .ofc-head h3{ margin:0; font-size:17px; font-weight:600; letter-spacing:-.01em; }
.ofuel-card .ofc-head span{ margin-left:auto; font-size:12.5px; color:var(--text-3); }
.ofuel-card .ofuel{ margin-top:0; border-top:none; }
.ofuel-card.folded .ofuel{ display:none; }
/* 白底下的文字色改成深色 */
.ofuel-card .ofuel .row{ border-bottom:.5px solid var(--hair-soft); }
.ofuel-card .ofuel .c .v{ color:var(--text); }
.ofuel-card .ofuel .c .k{ color:var(--text-2); opacity:1; }
.ofuel-card .ofuel .c .s{ color:var(--text-3); opacity:1; }
.ofuel-card .share{ font-style:normal; font-size:20px; font-weight:600; color:var(--blue); }

/* ★ 近27天每日指数 */
.t27{ overflow-x:auto; -webkit-overflow-scrolling:touch; padding-bottom:4px; }
.t27bars{ display:flex; align-items:flex-end; gap:3px; height:150px; min-width:100%; }
.t27b{ flex:1 0 6px; min-width:6px; background:rgba(0,113,227,.35); border-radius:3px 3px 0 0; }
.t27b.cur{ background:var(--blue); }
.t27ax{ display:flex; gap:3px; margin-top:6px; min-width:100%; }
.t27ax span{ flex:1 0 6px; min-width:6px; font-size:9px; color:var(--text-3); text-align:center; white-space:nowrap; }
@media (max-width:560px){
  .ofuel-card{ padding:16px 16px; }
  .t27bars{ height:120px; }
}

/* 运营辅助网格 */
.ops{ display:grid; grid-template-columns:repeat(3,1fr); gap:14px; }
.ops .o{ background:var(--surface); border-radius:var(--r-lg); box-shadow:var(--sh-1); padding:18px 20px; border:.5px solid var(--hair-soft); }
.ops .o .v{ font-size:26px; font-weight:600; letter-spacing:-.02em; }
/* ★ 2026-10-23 金额类卡（卡充值/卡消费/卡沉淀）：
   1) 单位「元」原来没有任何样式，和数字贴在一起显示成「0元」；
   2) 金额最长 105,856 是 7 个字符，26px 在手机 3 列（每列约 110px）里会溢出 →
      给 .v.money 收一档字号，保证一位不换行。 */
.ops .o .v .u{ font-size:13px; font-weight:400; color:var(--text-3); margin-left:3px; letter-spacing:0; }
.ops .o .v.money{ font-size:22px; }
@media (max-width:430px){
  .ops .o .v.money{ font-size:19px; }
  .ops .o .v .u{ font-size:11.5px; margin-left:2px; }
}
.ops .o .k{ font-size:13px; color:var(--text-2); margin-top:6px; }
.ops .o .s{ font-size:12.5px; color:var(--text-3); margin-top:3px; }
.ops .o .qs{ font-size:12px; color:var(--blue); margin-left:4px; cursor:help; }
/* ★ 2026-10-20 低销量预警卡：触发态要一眼能看出
   （原来 .o-alert / .s-alert 两个类名**根本没写样式**，红色全靠 inline 塞在副标题上，
     改成 92#+95# 口径后正常态也被染红 → 补真实的告警样式） */
.ops .o.o-alert{ background:var(--red-soft,rgba(215,0,21,.06)); box-shadow:inset 0 0 0 1px rgba(215,0,21,.18); }
.ops .o.o-alert .v{ color:var(--red); }
.ops .o .s.s-alert{ color:var(--red); font-weight:600; }
@media (prefers-color-scheme:dark){
  .ops .o.o-alert{ background:rgba(255,69,58,.10); box-shadow:inset 0 0 0 1px rgba(255,69,58,.22); }
}

/* 图表卡片 + 数据解读 */
.chk{ background:var(--surface); border-radius:var(--r-lg); box-shadow:var(--sh-1); padding:22px 24px; border:.5px solid var(--hair-soft); }
.chk-head{ display:flex; align-items:center; gap:12px; margin-bottom:16px; flex-wrap:wrap; }
.chk-head h3{ margin:0; font-size:19px; font-weight:600; letter-spacing:-.015em; }
.chk-head .right{ margin-left:auto; display:flex; gap:14px; align-items:center; font-size:13px; color:var(--text-3); }
.chk-head .ic{ width:26px; height:26px; flex:none; border-radius:7px; display:grid; place-items:center; color:#fff; }
.chk-foot{ display:flex; gap:8px; align-items:flex-start; margin-top:16px; padding-top:14px; border-top:.5px solid var(--hair-soft); font-size:13px; color:var(--text-3); line-height:1.5; }
.chk-foot .ic{ width:16px; height:16px; flex:none; margin-top:1px; }
.period-tabs{ display:inline-flex; gap:2px; padding:2px; background:var(--surface-alt); border-radius:var(--r-pill); }
.period-tabs .pt{ padding:4px 12px; font-size:12px; border:0; border-radius:var(--r-pill); background:none; color:var(--text-2); cursor:pointer; }
.period-tabs .pt.on{ background:var(--bg); color:var(--text); box-shadow:var(--sh-1); }

/* 横向条形列表（支付方式销售） */
.hbar-list{ display:flex; flex-direction:column; gap:10px; }
.hbar{ display:grid; grid-template-columns:90px 1fr 64px 56px; align-items:center; gap:12px; font-size:13px; }
.hbar .lb{ color:var(--text-2); }
.hbar .tk{ height:22px; border-radius:5px; background:var(--blue); position:relative; min-width:0; }
.hbar .tk span{ position:absolute; left:8px; top:50%; transform:translateY(-50%); color:#fff; font-size:12px; }
.hbar .m{ text-align:right; color:var(--text); font-variant-numeric:tabular-nums; }
.hbar .p{ text-align:right; color:var(--text-2); font-variant-numeric:tabular-nums; }
.hbar .m b,.hbar .p b{ font-weight:500; }

/* 液位仪油罐 */
.tank-list{ display:flex; flex-direction:column; gap:18px; }
.tank{ display:grid; grid-template-columns:120px 1fr; gap:18px; background:var(--surface); border-radius:var(--r-lg); box-shadow:var(--sh-1); padding:20px 22px; border:.5px solid var(--hair-soft); }
.tank-head{ grid-column:1 / -1; display:flex; align-items:center; gap:10px; margin-bottom:4px; }
.tank-head .no{ font-size:16px; font-weight:700; letter-spacing:-.01em; }
.tank-legend{ grid-column:1 / -1; display:flex; flex-wrap:wrap; gap:6px 14px; font-size:11px; color:var(--text-2); margin-bottom:6px; }
.tank-legend i{ width:8px; height:8px; border-radius:2px; display:inline-block; margin-right:4px; vertical-align:middle; }
.tank-viz{ position:relative; width:86px; margin:0 auto; height:230px; }
.tank-body{ position:absolute; inset:0; border:1.5px solid var(--text-3); border-radius:6px 6px 10px 10px; background:var(--surface-sunk); overflow:hidden; }
.tank-fill{ position:absolute; left:0; right:0; bottom:0; }
.tank-pt{ position:absolute; left:-48px; right:0; height:0; border-top:1px dashed var(--text-3); }
.tank-pt span{ position:absolute; left:0; top:-14px; font-size:10px; color:var(--text-3); white-space:nowrap; }
.tank-pt.r{ border-top-color:var(--red); }
.tank-detail{ }
.tank-detail .tr{ display:flex; align-items:center; justify-content:space-between; padding:6px 0; border-bottom:.5px solid var(--hair-soft); font-size:14px; }
.tank-detail .tr:last-child{ border-bottom:0; }
.tank-detail .k{ color:var(--text-2); }
.tank-detail .v{ font-variant-numeric:tabular-nums; }

/* 站点下拉 */
.dd{ position:relative; display:inline-block; }
.dd-btn{
  display:inline-flex; align-items:center; gap:8px;
  padding:8px 16px; font:inherit; font-size:15px; cursor:pointer;
  background:var(--surface); color:var(--text);
  border:.5px solid var(--hair); border-radius:var(--r-pill);
  box-shadow:var(--sh-1);
  transition:border-color .2s var(--ease), box-shadow .2s var(--ease);
}
.dd-btn:hover{ border-color:var(--blue); }
.dd-btn .chev{ width:8px; height:8px; border-right:1.5px solid currentColor; border-bottom:1.5px solid currentColor; transform:rotate(45deg) translateY(-2px); opacity:.55; }
.dd-menu{
  position:absolute; top:calc(100% + 8px); left:0; z-index:300;
  width:280px; padding:10px;
  background:color-mix(in srgb, var(--bg) 92%, transparent);
  -webkit-backdrop-filter:saturate(180%) blur(24px);
  backdrop-filter:saturate(180%) blur(24px);
  border:.5px solid var(--hair); border-radius:16px; box-shadow:var(--sh-3);
  animation:ddIn .22s var(--ease);
}
@keyframes ddIn{ from{ opacity:0; transform:translateY(-6px);} to{ opacity:1; transform:none;} }
.dd-search{
  width:100%; padding:8px 12px; margin-bottom:8px;
  font:inherit; font-size:14px; color:var(--text);
  background:var(--surface-alt); border:.5px solid transparent;
  border-radius:10px; outline:none;
}
.dd-search:focus{ border-color:var(--blue); background:var(--bg); }
/* ★ 2026-10-21：去掉搜索框后列表空间更充裕，max-height 从 280 放到 min(60vh,420px)
   —— 8 个站点（约 384px）一屏看全，不用再滚动找最后一个。 */
.dd-list{ max-height:min(60vh,420px); overflow-y:auto; }
.dd-item{
  padding:9px 12px; border-radius:9px; font-size:14.5px; cursor:pointer;
  display:flex; align-items:center; gap:6px;
  transition:background .18s var(--ease);
}
.dd-item:hover{ background:var(--surface-alt); }
.dd-item.on{ background:var(--blue-soft); color:var(--blue); font-weight:600; }
/* ★ 2026-10-23「全部站点」挪到列表最后，用一条发丝线跟单站区分（聚合口径 vs 单站） */
.dd-item.dd-all{
  margin-top:6px; padding-top:10px; border-top:.5px solid var(--hair-soft);
  border-radius:0 0 9px 9px; color:var(--text-2);
}
.dd-item.dd-all.on{ color:var(--blue); }
.dd-empty{ padding:14px; text-align:center; font-size:13px; color:var(--text-3); }

/* CNG 单独行 */
.cng-wrap{ margin-top:12px; padding-top:12px; border-top:.5px solid rgba(255,255,255,.22); }
.cng-tag{ display:inline-block; font-size:11px; font-weight:600; color:#fff; padding:2px 8px; border-radius:5px; background:#00808a; margin-right:6px; }
.cng-note{ margin-top:8px; font-size:12px; opacity:.8; }
.f-cng{ background:#00808a; }

/* ============================================================
   业绩看板模块
   ============================================================ */
.perf-title{
  background:#0b5c52; color:#fff; height:48px;
  display:flex; align-items:center; padding:0 40px;
  font-size:20px; font-weight:600; letter-spacing:-.01em;
}
.perf-bar{
  display:flex; align-items:center; gap:14px; flex-wrap:wrap;
  padding:14px 40px; background:var(--bg);
  border-bottom:.5px solid var(--hair);
  position:sticky; top:calc(var(--nav-h) + var(--bar-h)); z-index:200;
}
.pf-meta{ font-size:13px; color:var(--text-3); }
.perf-body{ padding:0 40px 120px; max-width:1800px; margin:0 auto; }

.perf-legend{ display:flex; gap:16px; align-items:center; flex-wrap:wrap; padding:18px 0 12px; font-size:12.5px; color:var(--text-3); }
.perf-legend .rate{ padding:3px 10px; border-radius:var(--r-pill); font-weight:500; }
.lg-ph{ color:var(--text-2); }
.lg-cng{ color:var(--blue); font-weight:500; }

/* KPI 卡片网格（整合双表） */
.u{ font-size:11px; color:var(--text-3); margin-left:3px; font-weight:400; }
.rule{ display:inline-block; font-size:10.5px; color:var(--text-3); background:var(--surface-alt); border:.5px solid var(--hair-soft); border-radius:4px; padding:1px 6px; margin-left:6px; font-weight:400; vertical-align:1px; }
.note2{ display:inline-block; font-size:10.5px; color:var(--orange); margin-left:6px; font-weight:400; }
.ph{ color:var(--text-3); font-size:11px; margin-left:5px; cursor:help; }
.na{ color:var(--text-3); }
.rate{ display:inline-block; padding:4px 12px; border-radius:var(--r-pill); font-weight:600; font-size:13px; white-space:nowrap; }
.rate.g{ background:rgba(36,138,61,.14); color:var(--green); }
.rate.y{ background:rgba(191,72,0,.14); color:var(--orange); }
.rate.r{ background:rgba(215,0,21,.12); color:var(--red); }
.kpi-grid{ display:grid; grid-template-columns:repeat(auto-fill,minmax(248px,1fr)); gap:16px; grid-auto-rows:1fr; }
.kpi-item{
  background:var(--surface); border-radius:var(--r-lg); box-shadow:var(--sh-1);
  border:.5px solid var(--hair-soft); padding:18px 20px 16px;
  display:flex; flex-direction:column; gap:9px;
  justify-content:space-between;
  transition:transform .25s var(--ease), box-shadow .25s var(--ease);
}
.kpi-item:hover{ transform:translateY(-2px); box-shadow:var(--sh-2); }
/* 第 1 行：名称 + 角标（固定不换行） */
.kpi-item .ki-top{ display:flex; align-items:flex-start; gap:8px; min-height:22px; }
.kpi-item .ki-name{
  flex:1; min-width:0; font-size:14px; font-weight:500; color:var(--text);
  line-height:1.4; white-space:nowrap; overflow:hidden; text-overflow:ellipsis;
}
.kpi-item .ki-flags{ flex:none; display:flex; align-items:center; gap:4px; }
.kpi-item .flag{
  font-size:10px; line-height:1; padding:3px 6px; border-radius:4px;
  color:var(--text-3); background:var(--surface-alt); border:.5px solid var(--hair-soft);
}
.kpi-item .flag.ph{ color:var(--blue); background:var(--blue-soft); border-color:transparent; }
.kpi-item .flag.ok{ color:var(--green); background:color-mix(in srgb, var(--green) 12%, transparent); border-color:transparent; font-weight:600; }
.kpi-item .flag.bad{ color:#fff; background:var(--red); border-color:transparent; font-weight:600; }
.kpi-item .flag.warn{ color:var(--orange); background:color-mix(in srgb, var(--orange) 12%, transparent); border-color:transparent; font-weight:700; }
/* 第 2 行：数值 */
.kpi-item .ki-act{
  font-size:clamp(23px,2.1vw,29px); font-weight:600; letter-spacing:-.024em;
  line-height:1.15; font-variant-numeric:tabular-nums;
}
/* 第 3 行：完成率进度条 */
.kpi-item .ki-bar{ height:4px; border-radius:var(--r-pill); background:var(--surface-alt); overflow:hidden; }
.kpi-item .ki-bar i{ display:block; height:100%; border-radius:var(--r-pill); transition:width .6s var(--ease); }
.kpi-item .ki-bar i.na{ width:100%; background:var(--hair-soft); }
/* 第 4 行：目标 + 完成率 */
.kpi-item .ki-meta{
  display:flex; align-items:center; justify-content:space-between; gap:10px;
  font-size:12.5px; color:var(--text-3); margin-top:1px;
}
.kpi-item .ki-meta .rate{ font-size:13px; padding:3px 10px; }

/* ---------- 目标值胶囊：加底色 + 可点击手改（2026-10-13） ---------- */
.kpi-item .ki-tgt-lab{ color:var(--text-3); flex:none; margin-right:2px; }
.kpi-item .ki-tgt{
  display:inline-flex; align-items:center; gap:4px;
  padding:2px 9px; border-radius:var(--r-pill, 999px);
  /* 不用 var(--surface-alt)：它在浅色下是 #f5f5f7 浅灰，看不出来。这里用明确的蓝色底。 */
  background:rgba(0,113,227,.13); color:#0060b9;
  font-variant-numeric:tabular-nums; font-weight:600;
  border:.5px solid rgba(0,113,227,.22);
}
/* ★ 只展示、不可点（2026-10-13 用户要求：目标不要在指标卡上直接改） */
.kpi-item .ki-tgt-edit{ display:none; }
.kpi-item .ki-tgt .u{ font-weight:500; opacity:.75; }
.kpi-item .ki-tgt-edit{ font-style:normal; font-size:10px; opacity:.5; }
.kpi-item .ki-tgt:hover .ki-tgt-edit{ opacity:1; }
/* 已被人工改过的目标：琥珀色 + 虚线，一眼能看出不是 Excel 原值 */
.kpi-item .ki-tgt.over{
  background:rgba(191,72,0,.16); color:#a03c00;
  border-color:rgba(191,72,0,.42);
}
/* 深色模式下的目标胶囊 */
[data-theme="dark"] .kpi-item .ki-tgt{ background:rgba(10,132,255,.22); color:#7cc0ff; border-color:rgba(10,132,255,.35); }
[data-theme="dark"] .kpi-item .ki-tgt.over{ background:rgba(255,159,10,.2); color:#ffb340; border-color:rgba(255,159,10,.42); }
.kpi-item .ki-tgt.over::after{ content:'已改'; font-size:9.5px; opacity:.85; font-weight:600; }
.kpi-item .ki-tgt-in{
  width:82px; border:none; outline:none; background:transparent; color:inherit;
  font:inherit; font-variant-numeric:tabular-nums; text-align:right; padding:0;
}
.kpi-item .ki-tgt-reset{ margin-top:5px; }
.kpi-item .ki-tgt-reset .linkbtn,
.linkbtn{
  border:none; background:none; color:var(--blue); cursor:pointer;
  font-size:11.5px; padding:2px 0; text-decoration:underline; text-underline-offset:2px;
}
.linkbtn:hover{ opacity:.75; }

/* 预警按钮角标 */
.al-badge{
  display:inline-block; margin-left:6px; padding:1px 7px; border-radius:var(--r-pill);
  background:var(--red); color:#fff; font-size:11px; font-weight:700;
}

/* 弹窗 */
.modal-wrap{ position:fixed; inset:0; z-index:1000; }
.modal-mask{ position:absolute; inset:0; background:rgba(0,0,0,.42); -webkit-backdrop-filter:blur(4px); backdrop-filter:blur(4px); }
.modal{
  position:absolute; top:50%; left:50%; transform:translate(-50%,-50%);
  width:min(720px,92vw); max-height:86vh; overflow:hidden;
  background:var(--bg); border-radius:22px; box-shadow:var(--sh-3);
  border:.5px solid var(--hair); animation:moIn .28s var(--ease);
}
@keyframes moIn{ from{ opacity:0; transform:translate(-50%,-46%) scale(.98);} to{ opacity:1; transform:translate(-50%,-50%);} }
.modal-in{ max-height:86vh; overflow-y:auto; padding:22px 26px 26px; }
.mo-head{ display:flex; align-items:center; gap:12px; margin-bottom:6px; position:sticky; top:-22px; background:var(--bg); padding:4px 0 12px; z-index:2; }
.mo-head h3{ margin:0; font-size:19px; font-weight:600; letter-spacing:-.015em; }
.mo-head .icon-btn{ margin-left:auto; }
.mo-sec{ font-size:12.5px; font-weight:600; color:var(--text-2); margin:20px 0 10px; letter-spacing:.02em; }
.al-tbl td,.al-tbl th{ font-size:13px; }
.al-tbl td.num{ font-variant-numeric:tabular-nums; font-weight:600; }
.al-tbl td.grn{ color:var(--green); } .al-tbl td.org{ color:var(--orange); } .al-tbl td.red{ color:var(--red); }
.mo-in{
  width:100%; padding:9px 12px; font:inherit; font-size:14px; color:var(--text);
  background:var(--surface-alt); border:.5px solid transparent; border-radius:10px; outline:none;
}
.mo-in:focus{ border-color:var(--blue); background:var(--bg); }
.mo-in.sm{ width:66px; padding:6px 9px; text-align:center; }
.mo-row{ display:flex; align-items:center; gap:10px; font-size:14px; margin:14px 0 4px; }
.mo-pre{
  margin:0; padding:14px 16px; background:var(--surface-alt); border-radius:12px;
  font-family:ui-monospace,SFMono-Regular,Menlo,monospace; font-size:12.5px; line-height:1.7;
  color:var(--text-2); white-space:pre-wrap; word-break:break-all;
}
.mo-foothint{ margin-top:12px; font-size:12px; color:var(--text-3); line-height:1.6; }

/* ---------- 目标设置面板（2026-10-13） ---------- */
.mo-actions{
  display:flex; align-items:center; gap:10px; margin-top:22px;
  padding-top:16px; border-top:.5px solid var(--hair);
}
.tgt-grid{ display:flex; flex-direction:column; gap:2px; }
.tgt-row{
  display:grid; grid-template-columns:1fr 150px 130px 34px; align-items:center; gap:12px;
  padding:9px 10px; border-radius:10px;
}
.tgt-row:nth-child(odd){ background:var(--surface-alt); }
.tgt-row.changed{ background:rgba(191,72,0,.09); box-shadow:inset 0 0 0 .5px rgba(191,72,0,.3); }
.tgt-n{ font-size:13.5px; display:flex; align-items:baseline; gap:5px; }
.tgt-n i{ font-style:normal; font-size:11.5px; color:var(--text-3); }
.tgt-row input.mo-in{ text-align:right; font-variant-numeric:tabular-nums; }
.tgt-excel{ font-size:11.5px; color:var(--text-3); text-align:right; font-variant-numeric:tabular-nums; }
.tgt-undo{
  width:28px; height:28px; border:none; border-radius:8px; cursor:pointer;
  background:rgba(0,113,227,.1); color:var(--blue); font-size:13px; line-height:1;
}
.tgt-undo:hover{ background:rgba(0,113,227,.2); }
.tgt-undo.ph{ background:none; cursor:default; }
@media (max-width:640px){
  /* 窄屏改成两行：名称一行、输入框一行，避免名称折行挤在一起 */
  .tgt-row{ grid-template-columns:1fr 40px; grid-template-areas:'n undo' 'in in'; row-gap:8px; padding:12px 10px; }
  .tgt-n{ grid-area:n; }
  .tgt-row input.mo-in{ grid-area:in; text-align:right; }
  .tgt-undo{ grid-area:undo; }
  .tgt-excel{ display:none; }
}
@media (max-width:760px){
  .modal-in{ padding:18px 18px 22px; }
}
.rate.flat{ background:var(--surface-alt); color:var(--text-3); font-weight:500; }

/* 年度同比 */
.yc{ margin-top:18px; background:#fff8e1; border:.5px solid rgba(191,72,0,.18); border-radius:var(--r-lg); padding:18px 22px 20px; }
[data-theme="dark"] .yc{ background:#2a2410; border-color:rgba(255,214,10,.18); }
.yc .base-title{ font-size:14px; font-weight:600; margin-bottom:14px; }
.yc .base-title .u2{ font-size:11.5px; color:var(--text-3); margin-left:8px; font-weight:400; }
.yc-grid{ display:grid; grid-template-columns:1.35fr 1fr 1fr; gap:12px 26px; align-items:end; }
.yc-h{ font-size:12.5px; color:var(--text-2); text-align:right; }
.yc-l{ font-size:13.5px; color:var(--text-2); align-self:center; }
.yc-cell{ text-align:right; }
.yc-cell .v{ font-size:17px; font-weight:600; font-variant-numeric:tabular-nums; letter-spacing:-.01em; }
.yc-cell .chg{ font-size:11.5px; font-weight:600; margin-top:2px; font-variant-numeric:tabular-nums; }
.chg.up{ color:var(--green); }
.chg.down{ color:var(--red); }
.yc-l.cur,.yc-cell.cur{ border-top:.5px solid rgba(0,0,0,.14); padding-top:10px; margin-top:4px; }
.yc-cell.cur .v{ color:var(--blue); }

/* 每日明细大表 */

.perf-sec-title{ margin:34px 0 14px; font-size:clamp(22px,2.2vw,30px); font-weight:600; letter-spacing:-.02em; }
.perf-sec-title span{ font-size:14px; font-weight:400; color:var(--text-3); margin-left:10px; letter-spacing:0; }

/* 每日明细大表 */
.perf-tbl-wrap{ overflow-x:auto; border-radius:var(--r-lg); background:var(--surface); box-shadow:var(--sh-1); border:.5px solid var(--hair-soft); }
.perf-tbl{ border-collapse:separate; border-spacing:0; font-size:13px; white-space:nowrap; }
.perf-tbl th,.perf-tbl td{ padding:9px 12px; border-bottom:.5px solid var(--hair-soft); }
.perf-tbl thead th{ position:sticky; top:0; z-index:5; background:var(--surface-alt); font-weight:500; font-size:12px; color:var(--text-2); }
.perf-tbl th.dt{ text-align:right; min-width:96px; }
.perf-tbl th.dt .d1{ display:block; font-size:12px; color:var(--text); }
.perf-tbl th.dt .d2{ display:block; font-size:10.5px; color:var(--text-3); }
.perf-tbl td.num{ text-align:right; font-variant-numeric:tabular-nums; }
.perf-tbl .sticky{ position:sticky; left:0; z-index:6; background:var(--surface); min-width:230px; box-shadow:1px 0 0 var(--hair-soft); }
.perf-tbl thead .sticky{ z-index:8; background:var(--surface-alt); }
.perf-tbl .rname{ font-weight:500; }
.perf-tbl .u2{ font-size:10.5px; color:var(--text-3); margin-left:5px; font-weight:400; }
.perf-tbl .grp td{ background:var(--surface-alt); font-size:12px; font-weight:600; color:var(--text-2); letter-spacing:.02em; z-index:7; }
.perf-tbl .wk{ background:var(--surface-sunk); }
[data-theme="dark"] .perf-tbl .wk{ background:#141416; }
.perf-tbl td.good{ color:var(--green); }
.perf-tbl td.warn{ color:var(--red); font-weight:600; }
.perf-tbl .total{ color:var(--blue); font-weight:700; background:rgba(0,113,227,.05); }
.perf-tbl th.total{ background:rgba(0,113,227,.10); color:var(--blue); }
.perf-tbl tbody tr:hover td:not(.grp){ background:var(--blue-soft); }
.perf-foot{ margin-top:14px; font-size:12.5px; color:var(--text-3); }

/* ---------- 业绩看板：移动端适配 ---------- */
@media (max-width:760px){
  .perf-title{ padding:0 20px; font-size:18px; }
  .perf-bar{ padding:12px 20px; gap:10px; }
  .pf-meta{ font-size:12px; flex-basis:100%; order:5; }
  .perf-body{ padding:0 14px 90px; }
  .perf-legend{ gap:8px; font-size:11.5px; padding:14px 0 8px; }
  .perf-legend .rate{ padding:2px 8px; font-size:11px; }
  .kpi-grid{ grid-template-columns:repeat(2,minmax(0,1fr)); gap:10px; }
  .kpi-item{ padding:14px 14px 12px; border-radius:14px; }
  .kpi-item .ki-act{ font-size:20px; }
  .kpi-item .ki-meta{ flex-direction:column; align-items:flex-start; gap:5px; }
  .yc{ padding:14px 16px; }
  .yc-grid{ grid-template-columns:1fr 1fr; gap:10px 14px; }
  .yc-grid > div:first-child{ display:none; }
  .yc-h{ text-align:left; }
  .yc-cell{ text-align:left; }
  .yc-l{ grid-column:1 / -1; font-weight:600; color:var(--text); margin-top:6px; }
  .yc-l.cur{ margin-top:10px; }
  .perf-sec-title{ font-size:19px; margin:26px 0 10px; }
  .perf-sec-title span{ display:block; margin:6px 0 0; }
  .perf-tbl-wrap{ border-radius:14px; -webkit-overflow-scrolling:touch; }
  .perf-tbl .sticky{ min-width:118px; font-size:12px; }
  .perf-tbl th.dt{ min-width:76px; }
  .perf-tbl th,.perf-tbl td{ padding:7px 9px; font-size:12px; }
  .perf-tbl .u2{ display:none; }
  .perf-foot{ font-size:11.5px; }
}

/* 储值看板（卡 Tab） */
.ov-sec{ margin:34px 0 4px; }
.ov-sec-t{ font-size:clamp(22px,2.2vw,30px); font-weight:600; letter-spacing:-.02em; }
.ov-sec-s{ font-size:15px; color:var(--text-2); margin-top:8px; }
.sv-grid{ display:grid; grid-template-columns:1fr 1fr; gap:14px; align-content:stretch; }
.sv-card{
  background:var(--surface); border-radius:var(--r-lg); box-shadow:var(--sh-1);
  border:.5px solid var(--hair-soft); padding:20px 22px;
  display:flex; flex-direction:column; justify-content:center; gap:8px; min-height:118px;
}
.sv-card .k{ font-size:13px; color:var(--text-2); }
.sv-card .v{ font-size:clamp(22px,2.4vw,30px); font-weight:600; letter-spacing:-.02em; color:var(--text-2); }
.sv-card .v .u{ font-size:12px; font-weight:400; }
.sv-card .u3{ font-size:11.5px; color:var(--text-3); margin-top:4px; }
.sv-note{ margin:10px 0 0; font-size:12px; color:var(--text-3); line-height:1.6; }

/* ============================================================
   利润看板模块
   ============================================================ */
.pf-bar{
  display:flex; align-items:center; gap:10px; flex-wrap:wrap;
  padding:12px 40px; background:var(--bg); border-bottom:.5px solid var(--hair);
  position:sticky; top:calc(var(--nav-h) + var(--bar-h)); z-index:200;
}
.pf-date{
  padding:7px 11px; font:inherit; font-size:13px; color:var(--text);
  background:var(--surface-alt); border:.5px solid transparent; border-radius:10px; outline:none;
}
.pf-date:focus{ border-color:var(--blue); background:var(--bg); }
.pf-settled{
  font-size:12px; color:var(--text-2); background:var(--surface-alt);
  border:.5px solid var(--hair-soft); border-radius:var(--r-pill); padding:4px 12px;
}
.pf-meta{ padding:10px 40px 0; font-size:12.5px; color:var(--text-3); }
.pf-body{ padding:22px 40px 120px; }
.pf-note{
  font-size:13px; color:var(--text-2); background:var(--blue-soft);
  border-radius:var(--r-md); padding:10px 14px; margin-bottom:18px;
}
.pf-sec{ font-size:clamp(20px,2vw,26px); font-weight:600; letter-spacing:-.02em; margin:26px 0 14px; }
.pf-sec:first-child{ margin-top:6px; }

/* ★ 2026-09-22 各站利润达成对比 — 汇总条 + 横向对比条（替代原 8 列硬塞表格） */
.pf-summary{
  display:flex; align-items:stretch; gap:0;
  background:var(--surface); border-radius:var(--r-lg);
  box-shadow:var(--sh-1); border:.5px solid var(--hair-soft);
  margin-bottom:18px; overflow:hidden;
}
.pf-sum-cell{
  flex:1; padding:16px 20px;
  display:flex; flex-direction:column; gap:3px;
  border-right:.5px solid var(--hair-soft);
}
.pf-sum-cell:last-child{ border-right:none; }
.pf-sum-cell .lbl{
  font-size:11.5px; color:var(--text-3);
  text-transform:uppercase; letter-spacing:.04em;
}
.pf-sum-cell .val{
  font-size:26px; font-weight:700; letter-spacing:-.02em;
  font-variant-numeric:tabular-nums;
  display:flex; align-items:baseline; gap:4px;
}
.pf-sum-cell .val .u{ font-size:14px; color:var(--text-3); font-weight:500; }
.pf-sum-cell .val.g{ color:var(--green); }
.pf-sum-cell .val.r{ color:var(--red); }
.pf-sum-cell .val.t{ font-size:17px; }
.pf-sum-cell .sub{ font-size:11.5px; color:var(--text-3); }

.pf-compare-list{ display:flex; flex-direction:column; gap:10px; }
.pf-cmp-row{
  background:var(--surface); border-radius:var(--r-lg);
  box-shadow:var(--sh-1); border:.5px solid var(--hair-soft);
  padding:16px 22px;
  display:grid;
  grid-template-columns:180px 1fr auto;
  gap:22px; align-items:center;
  transition:box-shadow .2s var(--ease), transform .2s var(--ease);
}
.pf-cmp-row:hover{ box-shadow:var(--sh-2); transform:translateY(-1px); }
.pf-cmp-row.pass{ background:linear-gradient(180deg, var(--green-soft) 0%, var(--surface) 60%); }

.pf-cmp-station{ display:flex; flex-direction:column; gap:3px; min-width:0; }
.pf-cmp-name{
  font-size:15.5px; font-weight:600; color:var(--text);
  display:flex; align-items:center; gap:7px;
}
.pf-tag-cng{
  display:inline-block; padding:2px 8px; border-radius:var(--r-pill);
  background:var(--blue-soft); color:var(--blue);
  font-size:11px; font-weight:600;
}
.pf-cmp-meta{
  font-size:12px; color:var(--text-3); display:flex; gap:8px; align-items:center;
}
.pf-bad{ font-weight:700; font-variant-numeric:tabular-nums; }
.pf-bad.zero{ color:var(--green); }
.pf-bad.has{ color:var(--red); }
.pf-cmp-meta .sep{ color:var(--hair); }

.pf-cmp-rates{ display:grid; grid-template-columns:1fr 1fr 1fr; gap:18px; min-width:0; }
.pf-rate-block{ display:flex; flex-direction:column; gap:5px; min-width:0; }
.pf-rate-head{
  display:flex; justify-content:space-between; align-items:baseline;
  font-size:11.5px; color:var(--text-3);
}
.pf-rate-head .n{ letter-spacing:.02em; }
.pf-rate-head .p{ font-variant-numeric:tabular-nums; font-weight:700; font-size:13.5px; color:var(--text); }
.pf-rate-head .p.g{ color:var(--green); }
.pf-rate-head .p.y{ color:var(--orange); }
.pf-rate-head .p.r{ color:var(--red); }
.pf-rate-head .p.na{ color:var(--text-3); font-weight:500; }
/* 单条进度条（达成率可视化）：独立 class，避免与顶部工具栏的 .pf-bar 冲突 */
.pf-prog{
  display:block; height:6px; padding:0; margin:0;
  background:var(--surface-sunk); border:none;
  border-radius:var(--r-pill); position:relative; overflow:hidden;
}
.pf-prog > i{
  position:absolute; left:0; top:0; bottom:0; border-radius:var(--r-pill);
  transition:width .4s var(--ease);
}
.pf-prog > i.g{ background:var(--green); }
.pf-prog > i.y{ background:var(--orange); }
.pf-prog > i.r{ background:var(--red); }
.pf-prog > i.na{ background:var(--hair-soft); }
.pf-rate-foot{
  font-size:11px; color:var(--text-3);
  font-variant-numeric:tabular-nums; line-height:1.3;
}
.pf-rate-foot .delta.up{ color:var(--red); font-weight:600; }
.pf-rate-foot .delta.ok{ color:var(--green); font-weight:600; }
.pf-rate-foot .dim{ color:var(--text-3); }

.pf-cmp-action{ display:flex; flex-direction:column; gap:5px; align-items:flex-end; }
.pf-btn{
  display:inline-flex; align-items:center; gap:5px;
  min-height:30px; padding:0 14px;
  background:var(--blue); color:#fff;
  border:none; border-radius:var(--r-pill);
  font:13px/1 inherit; font-weight:500;
  cursor:pointer; transition:filter .15s var(--ease);
}
.pf-btn:hover{ filter:brightness(1.08); }
.pf-btn.ghost{ background:var(--surface-alt); color:var(--text-2); border:.5px solid var(--hair-soft); }
.pf-act-sub{ font-size:11px; color:var(--text-3); }
.pf-act-sub.ok{ color:var(--green); font-weight:600; }

/* 响应式：≤900px 自动堆叠（移动端友好） */
@media (max-width: 900px) {
  .pf-summary{ flex-direction:column; }
  .pf-sum-cell{ border-right:none; border-bottom:.5px solid var(--hair-soft); }
  .pf-sum-cell:last-child{ border-bottom:none; }
  .pf-cmp-row{
    grid-template-columns:1fr;
    gap:12px; padding:14px 16px;
  }
  .pf-cmp-rates{ grid-template-columns:1fr; gap:10px; }
  .pf-cmp-action{ flex-direction:row; justify-content:space-between; align-items:center; }
}

/* 汇总表 */
.pf-sum-wrap{ overflow-x:auto; border-radius:var(--r-lg); box-shadow:var(--sh-1); border:.5px solid var(--hair-soft); background:var(--surface); }
.pf-sum{ border-collapse:separate; border-spacing:0; font-size:13px; white-space:nowrap; }
.pf-sum th,.pf-sum td{ padding:10px 14px; border-bottom:.5px solid var(--hair-soft); border-right:.5px solid var(--hair-soft); }
.pf-sum thead th{ background:#0b5c52; color:#fff; font-weight:600; font-size:12.5px; text-align:center; }
.pf-sum thead th.base{ background:#8a6d1f; }
.pf-sum thead tr.gh th{ font-size:13px; }
.pf-sum thead tr.mh th{ background:#0e7365; font-weight:400; font-size:11.5px; max-width:130px; overflow:hidden; text-overflow:ellipsis; }
.pf-sum thead tr.mh th.base{ background:#a3812a; }
.pf-sum tbody th.sticky,.pf-sum thead th.sticky{
  position:sticky; left:0; z-index:6; background:var(--surface-alt); text-align:left;
  box-shadow:1px 0 0 var(--hair-soft); font-weight:600;
}
.pf-sum thead th.corner{ z-index:9; background:#0b5c52; }
.pf-sum td.num{ text-align:right; font-variant-numeric:tabular-nums; }
.pf-sum td.base{ background:#fff8e1; }
[data-theme="dark"] .pf-sum td.base{ background:#2a2410; }
.pf-sum tr.row-t td{ background:rgba(0,113,227,.07); }
.pf-sum tr.row-t td.base{ background:#fff8e1; }
.pf-sum tr.row-a td.strong{ font-weight:700; }
.pf-sum tr.row-r td{ font-size:12px; color:var(--text-3); }
.pf-sum tr.row-r td.up{ color:var(--green); }
.pf-sum tr.row-r td.down{ color:var(--red); }
.pf-sum tr.row-p td{ text-align:center; font-size:12px; color:var(--text-3); }
.pf-sum tr.row-p td.pass{ color:var(--green); }
.pf-sum tr.row-p td.fail{ background:var(--red); color:#fff; font-weight:600; }
.pf-sum tr.row-p td.fail .failtxt{ color:#fff; }
.pf-sum tbody tr:hover td{ filter:brightness(.97); }
[data-theme="dark"] .pf-sum tbody tr:hover td{ filter:brightness(1.25); }

/* 明细表 */
.pf-det-wrap{ overflow-x:auto; border-radius:var(--r-lg); box-shadow:var(--sh-1); border:.5px solid var(--hair-soft); background:var(--surface); -webkit-overflow-scrolling:touch; }
.pf-det{ border-collapse:separate; border-spacing:0; font-size:12.5px; white-space:nowrap; }
.pf-det th,.pf-det td{ padding:8px 12px; border-bottom:.5px solid var(--hair-soft); }
.pf-det thead th{
  position:sticky; top:0; z-index:5; background:var(--surface-alt);
  font-weight:500; font-size:11.5px; color:var(--text-2);
}
.pf-det thead th.yellow{ background:#fdf3d0; color:#6b5200; }
.pf-det td.num{ text-align:right; font-variant-numeric:tabular-nums; }
.pf-det td.yellow{ background:#fffdf3; }
[data-theme="dark"] .pf-det td.yellow{ background:#211d08; }
.pf-det .sticky{ position:sticky; z-index:6; background:var(--surface); box-shadow:1px 0 0 var(--hair-soft); }
.pf-det thead .sticky{ z-index:8; background:var(--surface-alt); }
.pf-det .s0{ left:0; min-width:96px; } .pf-det .s1{ left:96px; min-width:70px; } .pf-det .s2{ left:166px; min-width:140px; }
.pf-det tr.wk td{ background:var(--surface-sunk); }
.pf-det tr.wk td.yellow{ background:#fffdf3; }
.pf-det tr.abn td{ background:rgba(215,0,21,.07); }
.pf-det tr.abn td.yellow{ background:rgba(215,0,21,.10); }
.pf-det tr.grp td{ background:var(--surface-alt); font-weight:600; font-size:12px; color:var(--text-2); z-index:7; cursor:pointer; user-select:none; }
.pf-det tr.grp td:hover{ background:var(--blue-soft); }
.pf-det .gk-chev{ display:inline-block; width:16px; color:var(--blue); font-size:11px; }
.pf-det .gk-cnt{ margin-left:10px; font-weight:400; font-size:11px; color:var(--text-3); background:var(--surface); border:.5px solid var(--hair-soft); border-radius:var(--r-pill); padding:1px 8px; }
.pf-det tr.total td{ font-weight:700; color:var(--blue); border-top:.5px solid var(--hair); background:rgba(0,113,227,.05); }
.pf-det .warn-ic{ color:var(--red); margin-right:5px; font-size:11px; }
.pf-det td.up{ color:var(--green); } .pf-det td.down{ color:var(--red); }
.pf-det tbody tr:hover td:not(.sticky){ background:var(--blue-soft); }

@media (max-width:760px){
  .pf-bar{ padding:12px 16px; }
  .pf-meta{ padding:10px 16px 0; }
  .pf-body{ padding:18px 16px 90px; }
  .pf-det .s2{ display:none; }
  .pf-det .s1{ left:70px; }
}

/* 掘金计划模块 */
.gm-title{
  background:#0b5c52; color:#fff; height:48px;
  display:flex; align-items:center; padding:0 40px;
  font-size:19px; font-weight:700; letter-spacing:-.01em;
}
.gm-bar{
  display:flex; align-items:center; gap:14px; flex-wrap:wrap;
  padding:14px 40px; background:var(--bg); border-bottom:.5px solid var(--hair);
}
.gm-actions{ display:flex; align-items:center; gap:10px; flex-wrap:wrap; margin-bottom:16px; }
.gm-tbl td{ font-size:13.5px; }
.gm-act{ color:var(--blue); font-size:12.5px; cursor:pointer; margin-left:12px; white-space:nowrap; }
.gm-act:hover{ text-decoration:underline; }
.gm-link{ color:var(--blue); font-size:12px; cursor:pointer; white-space:nowrap; }
.gm-page{ font-size:12.5px; color:var(--text-3); text-align:right; padding:12px 4px 0; }
.gm-stats{ display:grid; grid-template-columns:repeat(4,1fr); gap:14px; margin-top:4px; }
.gm-stat{ background:var(--surface); border-radius:var(--r-lg); box-shadow:var(--sh-1); border:.5px solid var(--hair-soft); padding:18px 20px; }
.gm-stat .v{ font-size:26px; font-weight:600; letter-spacing:-.02em; }
.gm-stat .k{ font-size:13px; color:var(--text-2); margin-top:4px; }
.gm-cfg{ display:grid; grid-template-columns:250px 1fr; gap:18px; align-items:start; }
.gm-tree{ background:var(--surface); border-radius:var(--r-lg); box-shadow:var(--sh-1); border:.5px solid var(--hair-soft); padding:12px; position:sticky; top:130px; }
.gm-node{ padding:11px 14px; border-radius:10px; font-size:14.5px; cursor:pointer; color:var(--text); transition:background .2s var(--ease); }
.gm-node:hover{ background:var(--surface-alt); }
.gm-node.on{ background:var(--blue); color:#fff; font-weight:500; }
.gm-cards{ display:grid; grid-template-columns:repeat(2,1fr); gap:14px; }
.gm-pcard{ background:var(--surface); border-radius:var(--r-lg); box-shadow:var(--sh-1); border:.5px solid var(--hair-soft); padding:18px 20px; }
.gm-pcard .k{ font-size:13px; color:var(--text-2); }
.gm-pcard .v{ font-size:21px; font-weight:600; letter-spacing:-.015em; margin-top:5px; }
.gm-pcard .s{ font-size:12px; color:var(--text-3); margin-top:5px; }
.tagcloud{ display:flex; flex-wrap:wrap; gap:8px 16px; align-items:center; line-height:1.9; }
.tagcloud span{ cursor:default; transition:color .2s var(--ease); }
.tagcloud span:hover{ color:var(--blue); }

/* 漏斗 */
.funnel{ display:flex; flex-direction:column; gap:7px; padding:6px 0; }
.frow{ display:flex; align-items:center; gap:12px; }
.fstep{
  margin:0 auto; height:46px; border-radius:4px;
  display:flex; align-items:center; justify-content:center; gap:12px;
  color:#fff; font-size:13.5px; min-width:180px;
  clip-path:polygon(2.5% 0, 97.5% 0, 100% 100%, 0 100%);
  transition:transform .25s var(--ease);
}
.fstep:hover{ transform:scale(1.02); }
.fstep .fl{ opacity:.92; }
.fstep .fv{ font-weight:700; font-variant-numeric:tabular-nums; }
.frate{ flex:0 0 64px; font-size:12px; color:var(--text-3); text-align:left; }

/* 掘金 KPI 卡（带主题色数值） */
.gm-kpi .ki-meta .gm-link{ font-size:12px; }

@media (max-width:900px){
  .gm-cfg{ grid-template-columns:1fr; }
  .gm-tree{ position:static; display:flex; flex-wrap:wrap; gap:6px; }
  .gm-node{ padding:8px 12px; font-size:13px; }
  .gm-stats{ grid-template-columns:repeat(2,1fr); }
  .gm-cards{ grid-template-columns:1fr; }
  .gm-title{ padding:0 20px; font-size:17px; }
  .gm-bar{ padding:12px 20px; }
  .funnel .frate{ flex-basis:48px; font-size:11px; }
}



/* ============================================================
   云同步状态（免登录：不再有登录遮罩，仅保留云端连接状态提示）
   ============================================================ */
.cloud-user{ display:none; align-items:center; gap:6px; font-size:12.5px; color:var(--text-3); white-space:nowrap; }
.cu-dot{
  width:6px; height:6px; border-radius:50%; background:var(--green); flex:none;
  box-shadow:0 0 0 3px color-mix(in srgb, var(--green) 18%, transparent);
}
.cloud-user.offline .cu-dot{ background:var(--orange); box-shadow:0 0 0 3px color-mix(in srgb, var(--orange) 18%, transparent); }
.cu-name{ font-weight:500; }
.cloud-saved{
  font-size:12px; color:var(--green); opacity:0;
  transition:opacity .3s var(--ease); white-space:nowrap;
}

/* toast */
.io-toast{
  position:fixed; left:50%; bottom:34px; transform:translate(-50%,20px);
  z-index:3000; padding:11px 22px; border-radius:var(--r-pill);
  background:rgba(28,28,30,.94); color:#fff; font-size:13.5px;
  box-shadow:var(--sh-3); opacity:0; pointer-events:none;
  transition:opacity .25s var(--ease), transform .25s var(--ease);
  -webkit-backdrop-filter:blur(12px); backdrop-filter:blur(12px);
  max-width:80vw; text-align:center;
}
.io-toast.show{ opacity:1; transform:translate(-50%,0); }
.io-toast.warn{ background:rgba(215,0,21,.94); }

/* 券效果分析 */
.cp-daily th{ text-align:center; font-size:11.5px; }
.cp-daily td{ text-align:center; font-size:12px; white-space:nowrap; }
.cp-daily td.warn{ background:rgba(215,0,21,.10); color:var(--red); font-weight:600; }
.cp-daily .sticky{ position:sticky; z-index:6; background:var(--surface); text-align:left; }
.cp-daily thead .sticky{ z-index:8; background:var(--surface-alt); }
.cp-daily .s0{ left:0; min-width:150px; } .cp-daily .s1{ left:150px; min-width:110px; }
.cp-daily th .d2{ display:block; font-size:10px; color:var(--text-3); }
.cp-daily th.tot,.cp-daily td.tot{ background:rgba(0,113,227,.06); font-weight:700; }
.pf-det td.bad{ color:var(--red); font-weight:600; }
.pf-det td.good{ color:var(--green); font-weight:600; }
.ai-score{ font-size:52px; font-weight:700; letter-spacing:-.03em; color:var(--blue); line-height:1.1; }
.ai-score span{ font-size:18px; color:var(--text-3); font-weight:400; }
.ai-bars{ margin-top:18px; }
.ai-bar{ display:flex; align-items:center; gap:12px; margin-bottom:10px; font-size:13px; }
.ai-bar .k{ flex:0 0 72px; color:var(--text-2); }
.ai-bar .t{ flex:1; height:8px; background:var(--surface-alt); border-radius:var(--r-pill); overflow:hidden; }
.ai-bar .t i{ display:block; height:100%; background:linear-gradient(90deg,#5ac8fa,#0071e3); border-radius:var(--r-pill); }
.ai-bar .v{ flex:0 0 40px; text-align:right; font-variant-numeric:tabular-nums; font-weight:600; }
.ai-sec{ font-size:13px; font-weight:600; margin:16px 0 8px; }
.ai-sec.good{ color:var(--green); } .ai-sec.bad{ color:var(--red); }
.ai-list{ margin:0 0 6px; padding-left:20px; font-size:13px; line-height:1.75; color:var(--text-2); }

@media (max-width:760px){
  .cp-daily .s1{ display:none; }
  .cp-daily .s0{ min-width:110px; }
}

/* 合并视图提示 */
.station-note{ display:flex; gap:12px; align-items:center; padding:18px 20px; background:var(--surface-alt); border:.5px dashed var(--hair); border-radius:var(--r-lg); font-size:15px; color:var(--text-2); }
@media (max-width:700px){
  .ops{ grid-template-columns:repeat(2,1fr); }
  .obig .cols{ grid-template-columns:1fr; text-align:left; }
  .ofuel .row{ grid-template-columns:1fr 1fr; gap:8px 12px; }
  .ofuel .c{ padding:6px 0; }
  .ov-page{ padding:24px 20px 100px; }
  .ov-bar,.ov-tabs{ padding-left:20px; padding-right:20px; }
}

/* ============================================================
   销量预测模块
   ============================================================ */
.fc-head{ background:var(--surface-alt); border-bottom:.5px solid var(--hair); }
.fc-head-in{ max-width:var(--maxw); margin:0 auto; padding:34px 40px 26px; }
.fc-head .eyebrow{ font-size:13px; font-weight:600; color:var(--blue); letter-spacing:.02em; margin-bottom:8px; }
.fc-head h1{ font-size:clamp(30px,3.6vw,44px); font-weight:700; letter-spacing:-.026em; line-height:1.08; margin:0 0 10px; }
.fc-head .sub{ font-size:14.5px; color:var(--text-2); line-height:1.55; max-width:820px; margin:0; }

/* 工具条 */
.fc-bar{
  display:flex; align-items:center; gap:14px; flex-wrap:wrap;
  padding:13px 40px; background:var(--bg); border-bottom:.5px solid var(--hair);
  position:sticky; top:calc(var(--nav-h) + var(--bar-h)); z-index:200;
}
.fc-fi{ display:flex; align-items:center; gap:7px; font-size:12.5px; color:var(--text-2); }
.fc-fi>span{ white-space:nowrap; }
.fc-fi select,.fc-fi input[type=date],.fc-fi input[type=number]{
  padding:7px 10px; font:inherit; font-size:13px; color:var(--text);
  background:var(--surface-alt); border:.5px solid transparent; border-radius:10px; outline:none;
  -webkit-appearance:none; appearance:none; min-width:104px;
}
.fc-fi input[type=date]{ min-width:132px; }
.fc-fi input[type=number]{ min-width:78px; }
.fc-fi select{ background-image:linear-gradient(45deg,transparent 50%,var(--text-3) 50%),linear-gradient(135deg,var(--text-3) 50%,transparent 50%); background-position:calc(100% - 14px) 15px,calc(100% - 9px) 15px; background-size:5px 5px,5px 5px; background-repeat:no-repeat; padding-right:26px; }
.fc-fi select:focus,.fc-fi input:focus{ border-color:var(--blue); background:var(--bg); }
.fc-fi input[type=range]{ width:92px; accent-color:var(--blue); }
.fc-fi b{ font-size:12.5px; font-weight:600; color:var(--blue); min-width:34px; }
.fc-sw{ gap:6px; cursor:pointer; user-select:none; }
.fc-sw input{ width:15px; height:15px; accent-color:var(--blue); cursor:pointer; }
.fc-disc,.fc-pd{ display:none; }
.fc-disc.on,.fc-pd.on{ display:flex; }
.fc-grow{ flex:1; }

/* 标签页 */
.fc-tabs{ display:flex; gap:4px; padding:14px 40px 0; }
.fc-tab{
  padding:8px 18px; font:inherit; font-size:13.5px; font-weight:500; color:var(--text-2);
  background:transparent; border:none; border-radius:var(--r-pill); cursor:pointer;
  transition:background .2s var(--ease),color .2s var(--ease);
}
.fc-tab:hover{ background:var(--surface-alt); color:var(--text); }
.fc-tab.on{ background:var(--text); color:var(--text-inv); }

.fc-body{ max-width:var(--maxw); margin:0 auto; padding:22px 40px 130px; }

/* KPI */
.fc-kpis{ display:grid; grid-template-columns:repeat(4,1fr); gap:14px; margin-bottom:8px; }
/* KPI 卡数量自适应（2026-09-21）：1 全油品 + 1 汽油 + 最多 3 个分油品（本站不售的出卡就少） */
.fc-kpis-n2{ grid-template-columns:repeat(2,1fr); }
.fc-kpis-n3{ grid-template-columns:repeat(3,1fr); }
.fc-kpis-n4{ grid-template-columns:repeat(4,1fr); }
.fc-kpis-n5{ grid-template-columns:repeat(5,1fr); gap:12px; }
/* 5 列时卡片变窄，收紧内边距与字号，避免「2026/09/21 全油品合计」换行 */
.fc-kpis-n5 .fc-kpi{ padding:18px 16px; }
.fc-kpis-n5 .fc-kpi-v{ font-size:clamp(22px,2.3vw,28px); }
.fc-kpi{
  background:var(--surface); border:.5px solid var(--hair-soft); border-radius:var(--r-lg);
  padding:20px 22px; box-shadow:var(--sh-1); position:relative; overflow:hidden;
}
.fc-kpi::after{ content:''; position:absolute; left:0; top:0; bottom:0; width:3px; background:var(--blue); opacity:.9; }
.fc-kpi.tone-purple::after{ background:var(--purple); }
.fc-kpi.tone-green::after{ background:var(--green); }
.fc-kpi.tone-orange::after{ background:var(--orange); }
.fc-kpi.tone-red::after{ background:var(--red); }
.fc-kpi.tone-teal::after{ background:var(--teal); }
.fc-kpi-k{ font-size:12.5px; color:var(--text-3); margin-bottom:9px; letter-spacing:.01em; }
.fc-kpi-v{ font-size:clamp(26px,2.9vw,34px); font-weight:600; letter-spacing:-.028em; line-height:1.05; font-variant-numeric:tabular-nums; }
.fc-kpi-u{ font-size:13px; font-weight:400; color:var(--text-3); margin-left:4px; letter-spacing:0; }
.fc-kpi-s{ font-size:12px; color:var(--text-3); margin-top:7px; }

/* 区块标题 */
.fc-sec-h{
  display:flex; align-items:baseline; gap:12px; flex-wrap:wrap;
  font-size:clamp(19px,1.9vw,24px); font-weight:600; letter-spacing:-.02em;
  margin:34px 0 14px;
}
.fc-sec-h:first-child{ margin-top:6px; }
.fc-sec-h .sub{ font-size:13px; font-weight:400; color:var(--text-3); letter-spacing:0; }
.fc-sub-h{ font-size:15px; font-weight:600; margin:24px 0 12px; letter-spacing:-.01em; }
.fc-panel-h{ font-size:clamp(19px,1.9vw,24px); font-weight:600; letter-spacing:-.02em; margin-bottom:16px; }
.fc-panel-h .sub{ display:block; font-size:13px; font-weight:400; color:var(--text-3); letter-spacing:0; margin-top:6px; }

/* 分段 / 折叠按钮 */
.fc-seg{ display:inline-flex; gap:2px; background:var(--surface-alt); border-radius:var(--r-pill); padding:3px; margin-left:auto; }
.fc-seg button{ padding:5px 14px; font:inherit; font-size:12.5px; color:var(--text-2); background:transparent; border:none; border-radius:var(--r-pill); cursor:pointer; }
.fc-seg button.on{ background:var(--bg); color:var(--text); font-weight:600; box-shadow:var(--sh-1); }
.fc-fold{ margin-left:auto; padding:6px 14px; font:inherit; font-size:12.5px; color:var(--blue); background:var(--blue-soft); border:none; border-radius:var(--r-pill); cursor:pointer; }

/* 矩阵表 */
.fc-mx-wrap{ overflow-x:auto; border-radius:var(--r-lg); box-shadow:var(--sh-1); border:.5px solid var(--hair-soft); background:var(--surface); -webkit-overflow-scrolling:touch; }
.fc-mx{ border-collapse:separate; border-spacing:0; font-size:13px; white-space:nowrap; width:100%; }
.fc-mx th,.fc-mx td{ padding:11px 15px; border-bottom:.5px solid var(--hair-soft); border-right:.5px solid var(--hair-soft); }
.fc-mx thead th{ background:var(--surface-alt); font-weight:600; font-size:11.5px; color:var(--text-2); text-align:center; vertical-align:bottom; }
.fc-mx thead th .t{ display:block; font-size:12px; color:var(--text); line-height:1.35; }
.fc-mx thead th .s{ display:block; font-size:10.5px; color:var(--text-3); font-weight:400; margin-top:4px; line-height:1.3; white-space:normal; max-width:150px; }
.fc-mx thead th.hl{ background:#fdf3d0; color:#6b5200; }
.fc-mx thead th.hl .t{ color:#6b5200; }
.fc-mx thead th.hl .s{ color:#8a6d1f; }
.fc-mx th.c0{ text-align:left; position:sticky; left:0; z-index:6; background:var(--surface-alt); font-weight:600; }
.fc-mx thead th.c0{ z-index:8; }
.fc-mx td.num{ text-align:right; font-variant-numeric:tabular-nums; }
.fc-mx td.hi{ text-align:center; background:#fffdf3; color:var(--text-2); }
.fc-mx td.hl{ background:#fffdf3; font-weight:600; }
[data-theme="dark"] .fc-mx td.hi,[data-theme="dark"] .fc-mx td.hl{ background:#211d08; }
[data-theme="dark"] .fc-mx thead th.hl{ background:#2a2410; color:#e8c86a; }
[data-theme="dark"] .fc-mx thead th.hl .t{ color:#e8c86a; }
[data-theme="dark"] .fc-mx thead th.hl .s{ color:#b99b3f; }
.fc-mx tbody tr:hover td{ filter:brightness(.98); }
[data-theme="dark"] .fc-mx tbody tr:hover td{ filter:brightness(1.3); }
.fc-mx tr.fc-mx-tot td,.fc-mx tr.fc-mx-tot th{ background:rgba(0,113,227,.07); font-weight:700; color:var(--blue); }
.fc-mx tr.fc-mx-tot td.hl{ background:rgba(0,113,227,.13); }
.fc-mx .dot{ display:inline-block; width:8px; height:8px; border-radius:50%; margin-right:7px; vertical-align:middle; }
.fc-mx-note{ margin-top:12px; font-size:12px; color:var(--text-3); line-height:1.75; display:flex; flex-direction:column; gap:3px; }
.fc-mx-note b{ color:var(--text-2); }
.fc-mx-note em{ font-style:normal; background:#fdf3d0; padding:1px 5px; border-radius:4px; color:#6b5200; }
[data-theme="dark"] .fc-mx-note em{ background:#2a2410; color:#e8c86a; }

/* 模型链路 */
.fc-chain{ display:flex; flex-direction:column; gap:0; }
.fc-ch-row{ display:grid; grid-template-columns:112px 1fr; gap:0; position:relative; }
.fc-ch-row+.fc-ch-row{ margin-top:2px; }
.fc-ch-tag{
  display:flex; flex-direction:column; align-items:center; justify-content:center; gap:6px;
  padding:18px 8px; border-radius:var(--r-md) 0 0 var(--r-md); color:#fff; text-align:center;
}
.fc-ch-tag .no{ font-size:11px; opacity:.7; font-weight:600; }
.fc-ch-tag .nm{ font-size:14px; font-weight:600; letter-spacing:.02em; writing-mode:vertical-rl; text-orientation:upright; }
.fc-ch-tag.tone-blue{ background:#0071e3; }
.fc-ch-tag.tone-green{ background:#248a3d; }
.fc-ch-tag.tone-orange{ background:#bf4800; }
.fc-ch-tag.tone-purple{ background:#6b3fa0; }
.fc-ch-body{ background:var(--surface); border:.5px solid var(--hair-soft); border-left:none; border-radius:0 var(--r-md) var(--r-md) 0; padding:18px 20px; }
.fc-chips{ display:flex; gap:10px; flex-wrap:wrap; }
.fc-chip{
  display:inline-flex; align-items:center; gap:9px; padding:9px 16px; border-radius:var(--r-pill);
  background:var(--surface-alt); border:.5px solid var(--hair-soft); font-size:14px; font-weight:600;
  border-left:3px solid var(--c);
}
.fc-chip em{ font-style:normal; font-size:13px; font-weight:400; color:var(--text-2); font-variant-numeric:tabular-nums; }
.fc-ch-text{ font-size:13.5px; color:var(--text-2); line-height:1.7; }
.fc-ch-text b{ color:var(--text); }
.fc-ch-formula{
  margin-top:10px; font-size:14px; color:var(--text); font-variant-numeric:tabular-nums;
  background:var(--surface-alt); border-radius:var(--r-md); padding:11px 15px;
  display:flex; align-items:center; gap:14px; flex-wrap:wrap;
}
.fc-ch-formula b{ color:var(--blue); }
.fc-ch-tag2{ font-size:11.5px; color:var(--text-3); background:var(--bg); border:.5px solid var(--hair-soft); border-radius:var(--r-pill); padding:3px 10px; }
.fc-ch-body .fc-cbox{ border-left-color:transparent; }
.fc-ch-body{ display:grid; grid-template-columns:repeat(auto-fit,minmax(190px,1fr)); gap:12px; }
.fc-ch-body>.fc-ch-text,.fc-ch-body>.fc-cres,.fc-ch-body>.fc-cres-note,.fc-ch-body>.fc-chips{ grid-column:1/-1; }
.fc-cbox{ background:var(--surface-alt); border:.5px solid var(--hair-soft); border-radius:var(--r-md); padding:12px 14px; }
.fc-cbox.on{ border-color:var(--blue); background:var(--blue-soft); }
.fc-cbox-t{ font-size:12px; font-weight:600; color:var(--text-2); margin-bottom:8px; }
.fc-cbox.on .fc-cbox-t{ color:var(--blue); }
.fc-cbox-i{ display:flex; justify-content:space-between; gap:10px; font-size:11.5px; color:var(--text-3); padding:3px 0; line-height:1.4; }
.fc-cbox-i .v{ font-variant-numeric:tabular-nums; white-space:nowrap; }
.fc-cbox-i.on{ color:var(--text); font-weight:500; }
.fc-cbox-i.on .v{ color:var(--blue); font-weight:600; }

.fc-cres{ display:flex; align-items:stretch; gap:8px; flex-wrap:wrap; }
.fc-cres-f{
  flex:1; min-width:96px; background:var(--surface-alt); border:.5px solid var(--hair-soft);
  border-radius:var(--r-md); padding:12px 14px; font-size:20px; font-weight:600;
  font-variant-numeric:tabular-nums; letter-spacing:-.02em; display:flex; flex-direction:column; gap:4px;
}
.fc-cres-f em{ font-style:normal; font-size:11px; font-weight:400; color:var(--text-3); letter-spacing:0; }
.fc-cres-f.hl{ background:#fffdf3; border-color:#e8d894; }
.fc-cres-f.big{ background:var(--blue); border-color:var(--blue); color:#fff; }
.fc-cres-f.big em{ color:rgba(255,255,255,.72); }
.fc-cres-op{ display:flex; align-items:center; color:var(--text-3); font-size:15px; }
.fc-cres-note{ font-size:12px; color:var(--text-3); }
/* 低量高噪序列告警（退化模式） */
.fc-cres-warn{ grid-column:1/-1; font-size:12.5px; line-height:1.6; color:#bf4800; background:rgba(191,72,0,.07);
  border:.5px solid rgba(191,72,0,.22); border-radius:var(--r-md); padding:9px 12px; margin-top:8px; }
.fc-ch-body>.fc-cres-warn{ grid-column:1/-1; }

/* 图表 */
.fc-chart-wrap{ margin-top:26px; background:var(--surface); border:.5px solid var(--hair-soft); border-radius:var(--r-lg); box-shadow:var(--sh-1); padding:20px 22px 12px; }
.fc-chart-h{ display:flex; align-items:baseline; gap:14px; flex-wrap:wrap; font-size:16px; font-weight:600; letter-spacing:-.01em; margin-bottom:14px; }
.fc-chart-h .sub{ font-size:12.5px; font-weight:400; color:var(--text-3); }
.fc-chart-lg{ margin-left:auto; display:flex; align-items:center; gap:16px; font-size:12px; font-weight:400; color:var(--text-2); font-style:normal; }
.fc-chart-lg i{ display:inline-block; width:16px; height:3px; border-radius:2px; margin-right:5px; vertical-align:middle; }
.fc-chart-lg i.d-act{ background:var(--text-3); }
.fc-chart-lg i.d-fut{ background:#0071e3; }
.fc-chart-lg i.d-band{ background:rgba(0,113,227,.22); height:11px; border-radius:3px; }
.fc-chart{ width:100%; height:260px; display:block; overflow:visible; }
.fc-ax{ font-size:10.5px; fill:var(--text-3); }

/* 通用表 */
.fc-tb-wrap{ overflow-x:auto; border-radius:var(--r-lg); box-shadow:var(--sh-1); border:.5px solid var(--hair-soft); background:var(--surface); -webkit-overflow-scrolling:touch; }
.fc-tb{ border-collapse:separate; border-spacing:0; font-size:12.5px; white-space:nowrap; width:100%; }
.fc-tb th,.fc-tb td{ padding:9px 14px; border-bottom:.5px solid var(--hair-soft); }
.fc-tb thead th{ background:var(--surface-alt); font-weight:600; font-size:11.5px; color:var(--text-2); text-align:left; }
.fc-tb thead th.num{ text-align:right; }
.fc-tb thead th.hl{ background:#fdf3d0; color:#6b5200; }
.fc-tb td.num{ text-align:right; font-variant-numeric:tabular-nums; }
.fc-tb td.hl{ background:#fffdf3; font-weight:600; }
[data-theme="dark"] .fc-tb td.hl{ background:#211d08; }
[data-theme="dark"] .fc-tb thead th.hl{ background:#2a2410; color:#e8c86a; }
.fc-tb tbody tr:hover td{ filter:brightness(.98); }
[data-theme="dark"] .fc-tb tbody tr:hover td{ filter:brightness(1.3); }
.fc-tb .sticky{ position:sticky; left:0; z-index:5; background:var(--surface); box-shadow:1px 0 0 var(--hair-soft); }
.fc-tb thead .sticky{ z-index:7; background:var(--surface-alt); }
.fc-tb tr.wk td{ background:var(--surface-sunk); }
.fc-tb tr.wk td.sticky{ background:var(--surface-sunk); }
.fc-tb tr.hl td{ background:rgba(0,113,227,.07); }
.fc-tb tr.hl td.sticky{ background:rgba(0,113,227,.10); }
.fc-tb tr.in15 td{ background:#f7fbff; }
[data-theme="dark"] .fc-tb tr.in15 td{ background:#0d1620; }
.fc-tb tr.fc-tb-tot td{ font-weight:700; color:var(--blue); background:rgba(0,113,227,.07); border-top:.5px solid var(--hair); }
.fc-tb tr.lv td{ color:var(--text); font-weight:500; }
.fc-tb tr.lv.hl td{ background:#fffdf3; }
[data-theme="dark"] .fc-tb tr.lv.hl td{ background:#211d08; }
.fc-tb td.up{ color:var(--green); }
.fc-tb td.down{ color:var(--red); }
.fc-tb td.warn{ color:var(--orange); }
.fc-tb .na{ color:var(--text-3); }
.fc-tag{ font-size:10.5px; background:var(--blue); color:#fff; border-radius:4px; padding:1px 5px; margin-left:6px; }
.fc-tag.sm{ background:var(--orange); }
.fc-pill{ display:inline-block; font-size:11px; padding:2px 9px; border-radius:var(--r-pill); background:var(--surface-alt); color:var(--text-2); border:.5px solid var(--hair-soft); }
.fc-pill.promo{ background:var(--red); color:#fff; border-color:var(--red); }
.fc-conf{ font-size:11.5px; font-weight:600; padding:2px 8px; border-radius:var(--r-pill); }
.fc-conf.lv-h{ background:rgba(36,138,61,.12); color:var(--green); }
.fc-conf.lv-m{ background:rgba(191,72,0,.12); color:var(--orange); }
.fc-conf.lv-l{ background:rgba(215,0,21,.12); color:var(--red); }

.fc-panel{ background:var(--surface); border:.5px solid var(--hair-soft); border-radius:var(--r-lg); box-shadow:var(--sh-1); padding:24px 26px; }
.fc-empty{ font-size:13.5px; color:var(--text-3); padding:22px 0; text-align:center; }
.fc-empty.ok{ color:var(--green); }

/* ===== 站点档案 / 地址栏 ===== */
.fc-sitebox{ margin-bottom:4px; }
.fc-site-grid{ display:flex; gap:14px; flex-wrap:wrap; align-items:center; }
.fc-fi-w{ flex:1; min-width:280px; }
.fc-fi-w input[type=text]{
  flex:1; min-width:200px; padding:8px 12px; font:inherit; font-size:13px; color:var(--text);
  background:var(--surface-alt); border:.5px solid var(--hair); border-radius:9px; outline:none;
}
.fc-fi-w input[type=text]:focus{ border-color:var(--blue); background:var(--bg); }
.fc-site-hint{
  margin-top:14px; font-size:12.5px; color:var(--text-2); line-height:1.65;
  background:var(--surface-alt); border-radius:var(--r-md); padding:11px 14px;
  display:flex; align-items:center; gap:10px; flex-wrap:wrap;
}
.fc-site-hint .fc-src{ margin-left:auto; font-size:11px; color:var(--text-3); }
/* 工具条站点定位胶囊：已按用户要求移除（经纬度对业务无用），
   故不再保留 .fc-site-chip / .fc-pin 样式。油站地址见「日期表 → 站点档案」。 */

/* ===== 日期表 ===== */
.fc-dt-bar{ display:flex; align-items:center; gap:10px; flex-wrap:wrap; margin:26px 0 12px; }
.fc-dt-t{ font-size:16px; font-weight:600; letter-spacing:-.01em; }
.fc-dt-sub{ font-size:12.5px; color:var(--text-3); }
.fc-dt{ font-size:12.5px; }
.fc-dt th,.fc-dt td{ padding:6px 10px; }
.fc-th-em{ display:block; font-style:normal; font-size:10px; color:var(--text-3); font-weight:400; }
.fc-dt-past td, .fc-dt tr.past td{ background:var(--surface-alt); color:var(--text-2); }
.fc-dt tr.past td.sticky{ background:var(--surface-alt); }
.fc-dt td.dt-t{ color:var(--text-3); font-variant-numeric:tabular-nums; }
.fc-dt td.dt-wk{ display:block; font-size:10px; color:var(--text-3); }
.fc-dt td.dt-src{ white-space:nowrap; }
.fc-dt td.dt-note{ max-width:150px; overflow:hidden; text-overflow:ellipsis; color:var(--text-3); font-size:11.5px; }
.fc-dt-in,.fc-dt-note,.fc-dt-sel{
  width:100%; padding:5px 8px; font:inherit; font-size:12px; color:var(--text);
  background:var(--bg); border:.5px solid var(--hair-soft); border-radius:7px; outline:none;
  font-variant-numeric:tabular-nums;
}
.fc-dt-in{ width:82px; text-align:right; }
.fc-dt-note{ width:130px; }
.fc-dt-in:focus,.fc-dt-note:focus,.fc-dt-sel:focus{ border-color:var(--blue); box-shadow:0 0 0 3px rgba(0,113,227,.10); }
.fc-dt-in::placeholder{ color:var(--hair); }
.fc-dt-ck{ display:inline-flex; align-items:center; gap:5px; cursor:pointer; }
.fc-dt-ck input{ width:15px; height:15px; accent-color:var(--red); cursor:pointer; }
.fc-dt-cal{ font-size:10px; color:var(--text-3); }
.fc-src-p,.fc-src-r,.fc-src-w{
  display:inline-block; font-size:10px; padding:1px 6px; border-radius:4px; margin-right:4px;
}
.fc-src-p{ background:rgba(191,72,0,.12); color:var(--orange); }
.fc-src-r{ background:rgba(0,113,227,.12); color:var(--blue); }
.fc-src-w{ background:rgba(36,138,61,.12); color:var(--green); }

/* ===== 调价窗口 ===== */
.fc-pw-top{ grid-template-columns:repeat(5,1fr); }
.fc-pw-add{ display:flex; gap:12px; flex-wrap:wrap; align-items:center; margin:18px 0 6px; }
.fc-pw-add .fc-fi-w input{ min-width:160px; }
.fc-pw-c{ color:var(--blue); font-weight:600; }
.fc-x{
  width:22px; height:22px; line-height:1; padding:0; font-size:16px; color:var(--text-3);
  background:transparent; border:.5px solid var(--hair); border-radius:6px; cursor:pointer;
}
.fc-x:hover{ background:var(--red); border-color:var(--red); color:#fff; }
.fc-tb tr.dim td{ opacity:.55; }

/* ===== 误差分析 ===== */
.fc-kpis-3{ grid-template-columns:repeat(3,1fr); }
.fc-calib-c b.ok{ color:var(--green); }
.fc-b{ font-weight:600; }
.fc-gr{ display:inline-block; font-size:11px; font-weight:600; padding:2px 9px; border-radius:var(--r-pill); }
.fc-gr.pass{ background:rgba(36,138,61,.12); color:var(--green); }
.fc-gr.fail{ background:rgba(215,0,21,.12); color:var(--red); }
.fc-gr.na{ background:var(--surface-alt); color:var(--text-3); }
.fc-etab tr.pass td{ border-left:2px solid rgba(36,138,61,.5); }
.fc-etab tr.fail td{ border-left:2px solid rgba(215,0,21,.5); }
.fc-etab td.sticky{ border-left:none; }
.fc-et-in{ width:92px; }
/* 分星期误差条 */
.fc-wkbar{ display:grid; grid-template-columns:repeat(7,1fr); gap:10px; margin-top:6px; }
.fc-wkbar-i{
  background:var(--surface); border:.5px solid var(--hair-soft); border-radius:var(--r-md);
  padding:14px 12px; text-align:center; border-top:3px solid var(--hair);
}
.fc-wkbar-i.tone-green{ border-top-color:var(--green); }
.fc-wkbar-i.tone-orange{ border-top-color:var(--orange); }
.fc-wkbar-i.tone-red{ border-top-color:var(--red); }
.fc-wkbar-i span{ display:block; font-size:12px; color:var(--text-3); margin-bottom:6px; }
.fc-wkbar-i b{ display:block; font-size:19px; font-weight:600; letter-spacing:-.02em; font-variant-numeric:tabular-nums; }
.fc-wkbar-i.tone-green b{ color:var(--green); }
.fc-wkbar-i.tone-orange b{ color:var(--orange); }
.fc-wkbar-i.tone-red b{ color:var(--red); }
.fc-wkbar-i em{ display:block; font-style:normal; font-size:10.5px; color:var(--text-3); margin-top:4px; }
.fc-wkbar-i.empty{ opacity:.5; }
.fc-wkbar-i.empty b{ color:var(--text-3); }

/* 自校准 */
.fc-calib-top{ display:grid; grid-template-columns:repeat(5,1fr); gap:12px; margin-bottom:6px; }
.fc-calib-c{ background:var(--surface-alt); border-radius:var(--r-md); padding:14px 16px; text-align:center; }
.fc-calib-c b{ display:block; font-size:22px; font-weight:600; letter-spacing:-.02em; font-variant-numeric:tabular-nums; }
.fc-calib-c b.warn{ color:var(--red); }
.fc-calib-c span{ font-size:11.5px; color:var(--text-3); }
.fc-sug{ display:flex; flex-direction:column; gap:10px; }
.fc-sug-i{ display:grid; grid-template-columns:1fr auto; gap:8px 16px; align-items:center; background:var(--surface-alt); border:.5px solid var(--hair-soft); border-left:3px solid var(--orange); border-radius:var(--r-md); padding:14px 16px; }
.fc-sug-l{ display:flex; align-items:center; gap:10px; }
.fc-sug-t{ font-size:13.5px; font-weight:600; }
.fc-sug-k{ font-size:11px; color:var(--text-3); background:var(--bg); border:.5px solid var(--hair-soft); border-radius:4px; padding:1px 7px; font-family:ui-monospace,SFMono-Regular,Menlo,monospace; }
.fc-sug-m{ grid-column:1; display:flex; gap:18px; flex-wrap:wrap; font-size:12px; color:var(--text-2); }
.fc-sug-v{ font-variant-numeric:tabular-nums; }
.fc-sug-v b{ color:var(--blue); }
.fc-sug-b{ grid-row:1/3; grid-column:2; align-self:center; }
.fc-sug-b[disabled]{ opacity:.45; cursor:default; }

@media (max-width:1100px){
  .fc-kpis{ grid-template-columns:repeat(2,1fr); }
  .fc-kpis-3{ grid-template-columns:1fr; }
  .fc-calib-top{ grid-template-columns:repeat(3,1fr); }
  .fc-cres-f{ min-width:78px; font-size:17px; }
  .fc-wkbar{ grid-template-columns:repeat(4,1fr); }
}
@media (max-width:760px){
  .fc-head-in,.fc-bar,.fc-tabs,.fc-body{ padding-left:20px; padding-right:20px; }
  .fc-kpis{ grid-template-columns:1fr 1fr; }
  .fc-kpis-n5,.fc-kpis-n4,.fc-kpis-n3{ grid-template-columns:1fr 1fr; }
  .fc-kpis-3{ grid-template-columns:1fr; }
  .fc-ch-row{ grid-template-columns:1fr; }
  .fc-ch-tag{ flex-direction:row; border-radius:var(--r-md) var(--r-md) 0 0; padding:9px 14px; }
  .fc-ch-tag .nm{ writing-mode:horizontal-tb; }
  .fc-ch-body{ border-left:.5px solid var(--hair-soft); border-radius:0 0 var(--r-md) var(--r-md); }
  .fc-sug-i{ grid-template-columns:1fr; }
  .fc-sug-b{ grid-row:auto; grid-column:1; justify-self:start; }
  .fc-wkbar{ grid-template-columns:repeat(2,1fr); }
  .fc-pw-top{ grid-template-columns:repeat(2,1fr); }
}

/* ===== 数据源管理（#/system/data-source）===== */
.ds-wrap{ padding:0 0 40px; }
.ds-bar{ display:flex; align-items:center; gap:10px; flex-wrap:wrap; margin:22px 0 14px; }
.ds-fi{ display:inline-flex; align-items:center; gap:8px; font-size:12.5px; color:var(--text-2); }
.ds-fi select{ padding:6px 10px; font:inherit; font-size:13px; color:var(--text); background:var(--surface); border:.5px solid var(--hair-soft); border-radius:var(--r-md); }
.ds-grow{ flex:1; }
.ds-meta{ font-size:11.5px; color:var(--text-3); }
.ds-tabs{ display:flex; gap:6px; flex-wrap:wrap; margin-bottom:18px; }
.ds-tab{ padding:7px 15px; font:inherit; font-size:13px; color:var(--text-2); background:var(--surface-alt); border:.5px solid transparent; border-radius:var(--r-pill); cursor:pointer; transition:.16s; }
.ds-tab:hover{ color:var(--text); }
.ds-tab.on{ background:var(--blue); color:#fff; }
.ds-panel{ background:var(--surface); border:.5px solid var(--hair-soft); border-radius:var(--r-lg); box-shadow:var(--sh-1); padding:20px 22px; margin-bottom:16px; }
.ds-panel-h{ display:flex; flex-direction:column; gap:5px; margin-bottom:14px; }
.ds-panel-h b{ font-size:15.5px; font-weight:600; letter-spacing:-.01em; }
.ds-sub{ font-size:12px; color:var(--text-3); line-height:1.65; }
.ds-sub code, .ds-note code{ background:var(--surface-alt); padding:1px 6px; border-radius:5px; font-size:11.5px; }
.ds-kpis{ display:grid; grid-template-columns:repeat(3,1fr); gap:12px; margin-bottom:16px; }
.ds-kpi{ background:var(--surface-alt); border-radius:var(--r-md); padding:13px 15px; display:flex; flex-direction:column; gap:5px; }
.ds-kpi span{ font-size:11.5px; color:var(--text-3); }
.ds-kpi b{ font-size:19px; font-weight:600; letter-spacing:-.02em; font-variant-numeric:tabular-nums; }
.ds-rows{ display:flex; flex-direction:column; }
.ds-row{ display:grid; grid-template-columns:36px minmax(140px,1.5fr) 92px minmax(140px,1.2fr) minmax(110px,1fr) auto; align-items:center; gap:10px; padding:10px 6px; border-bottom:.5px solid var(--hair-soft); font-size:12.5px; }
.ds-row:last-child{ border-bottom:0; }
.ds-head{ font-size:11.5px; color:var(--text-3); padding-bottom:8px; }
.ds-idx{ color:var(--text-3); font-variant-numeric:tabular-nums; }
.ds-st{ display:flex; align-items:center; gap:7px; font-weight:500; }
.ds-dot{ width:7px; height:7px; border-radius:50%; flex:none; background:var(--text-3); }
.ds-dot.ok{ background:var(--green); box-shadow:0 0 0 3px rgba(36,138,61,.15); }
.ds-dot.na{ background:var(--orange); box-shadow:0 0 0 3px rgba(255,149,0,.15); }
.ds-tag{ font-size:10.5px; font-weight:500; color:var(--green); background:rgba(36,138,61,.12); padding:1px 7px; border-radius:var(--r-pill); }
.ds-num{ font-variant-numeric:tabular-nums; font-weight:500; }
.ds-num span{ font-size:11px; color:var(--text-3); margin-left:3px; font-weight:400; }
.ds-rng, .ds-extra{ color:var(--text-2); font-size:12px; }
.ds-act{ display:flex; gap:6px; justify-content:flex-end; }
.ds-btn{ padding:6px 13px; font:inherit; font-size:12px; color:#fff; background:var(--blue); border:0; border-radius:var(--r-pill); cursor:pointer; transition:.16s; }
.ds-btn:hover{ filter:brightness(.94); }
.ds-btn.ghost{ background:var(--surface-alt); color:var(--text-2); }
.ds-btn.ghost:hover{ color:var(--text); background:var(--hair-soft); }
.ds-form{ display:flex; gap:10px; flex-wrap:wrap; align-items:flex-end; margin-bottom:16px; }
.ds-form label{ display:flex; flex-direction:column; gap:5px; font-size:11.5px; color:var(--text-3); }
.ds-form input, .ds-form select{ padding:7px 11px; font:inherit; font-size:13px; color:var(--text); background:var(--bg); border:.5px solid var(--hair-soft); border-radius:var(--r-md); min-width:150px; }
.ds-form input:focus, .ds-form select:focus{ outline:none; border-color:var(--blue); }
.ds-inline-sel{ padding:4px 9px; font:inherit; font-size:12.5px; color:var(--text); background:var(--surface); border:.5px solid var(--hair-soft); border-radius:var(--r-md); }
.ds-tb{ width:100%; border-collapse:collapse; font-size:12.5px; }
.ds-tb th, .ds-tb td{ text-align:left; padding:9px 10px; border-bottom:.5px solid var(--hair-soft); }
.ds-tb th{ font-size:11.5px; color:var(--text-3); font-weight:500; }
.ds-x{ background:none; border:0; color:var(--red); font:inherit; font-size:12px; cursor:pointer; padding:2px 4px; }
.ds-empty{ padding:26px; text-align:center; color:var(--text-3); font-size:12.5px; background:var(--surface-alt); border-radius:var(--r-md); }
.ds-note{ font-size:12px; color:var(--text-3); line-height:1.75; background:var(--surface-alt); border-radius:var(--r-md); padding:12px 15px; }
/* 费用预算：源表链接条 */
.ds-srcbox{ display:flex; align-items:center; gap:10px; flex-wrap:wrap; background:var(--surface-alt); border-radius:var(--r-md); padding:11px 14px; margin-bottom:14px; font-size:12px; }
.ds-srcbox > span{ color:var(--text-3); flex:none; }
.ds-srcbox > code{ color:var(--text-2); font-size:11.5px; word-break:break-all; flex:1; min-width:200px; }
.ds-tb td[rowspan]{ vertical-align:top; color:var(--text-3); font-size:11.5px; }

/* 数据契约面板 */
.ds-meta-grid{ display:grid; grid-template-columns:repeat(4,1fr); gap:10px; margin-bottom:12px; }
.ds-fld{ background:var(--surface-alt); border-radius:var(--r-md); padding:10px 13px; display:flex; flex-direction:column; gap:4px; }
.ds-fld > span{ font-size:11px; color:var(--text-3); }
.ds-fld > b, .ds-fld > code{ font-size:12.5px; color:var(--text); word-break:break-all; }
.ds-fld > code{ font-size:11.5px; }
.ds-rule{ font-size:12px; color:var(--text-2); background:var(--surface-alt); border-left:2px solid var(--blue); border-radius:0 var(--r-md) var(--r-md) 0; padding:9px 13px; margin-bottom:12px; line-height:1.7; }
.ds-rule.ds-warn{ border-left-color:var(--orange); color:var(--text); background:rgba(255,149,0,.07); }
.ds-scroll{ overflow-x:auto; }
.ds-tb-tight th, .ds-tb-tight td{ padding:7px 9px; }
.ds-tb code{ background:var(--surface-alt); padding:1px 6px; border-radius:5px; font-size:11.5px; white-space:nowrap; }
.ds-mini{ font-size:11px; color:var(--text-3); margin-left:6px; }
.ds-req{ color:var(--orange); font-weight:600; font-size:11.5px; }
.ds-actbar{ display:flex; align-items:center; gap:8px; flex-wrap:wrap; margin-top:12px; }
.ds-two{ display:grid; grid-template-columns:minmax(280px,1fr) minmax(280px,1fr); gap:18px; margin-bottom:16px; }
.ds-lbl{ font-size:12.5px; font-weight:600; color:var(--text); margin-bottom:9px; display:flex; align-items:center; gap:10px; }
.ds-cols{ font-size:11.5px; color:var(--text-3); line-height:1.7; margin-bottom:8px; word-break:break-all; }
.ds-paste{ width:100%; min-height:150px; padding:11px 13px; font:12.5px/1.65 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace; color:var(--text); background:var(--bg); border:.5px solid var(--hair-soft); border-radius:var(--r-md); resize:vertical; box-sizing:border-box; }
.ds-paste:focus{ outline:none; border-color:var(--blue); }
.ds-paste-msg{ font-size:12px; color:var(--text-2); line-height:1.7; margin-top:9px; }
.ds-ok{ color:var(--green); }
.ds-bad{ color:var(--red); font-weight:500; }
.ds-form-col{ flex-direction:column; align-items:stretch; }
.ds-form-col label{ width:100%; }
.ds-form-col input, .ds-form-col select{ width:100%; box-sizing:border-box; min-width:0; }
.ds-clr{ margin-left:auto; }
@media (max-width:900px){
  .ds-meta-grid{ grid-template-columns:1fr 1fr; }
  .ds-two{ grid-template-columns:1fr; }
}

/* ===== 费用预算看板（budgetboard.js） ===== */
.bb-bar{ display:flex; align-items:center; gap:10px; flex-wrap:wrap; margin:0 0 14px; }
.bb-fi{ display:inline-flex; align-items:center; gap:7px; font-size:12.5px; color:var(--text-2); }
.bb-fi select, .bb-fi input{ padding:6px 10px; font:inherit; font-size:13px; color:var(--text); background:var(--surface); border:.5px solid var(--hair-soft); border-radius:var(--r-md); }
.bb-fi input{ min-width:190px; }
.bb-fi select:focus, .bb-fi input:focus{ outline:none; border-color:var(--blue); }
.bb-grow{ flex:1; }
.bb-btn{ padding:6px 13px; font:inherit; font-size:12px; color:#fff; background:var(--blue); border:0; border-radius:var(--r-pill); cursor:pointer; transition:.16s; }
.bb-btn:hover{ filter:brightness(.94); }
.bb-btn.ghost{ background:var(--surface-alt); color:var(--text-2); }
.bb-btn.ghost:hover{ color:var(--text); background:var(--hair-soft); }
.bb-cards{ display:grid; grid-template-columns:repeat(4,1fr); gap:12px; margin-bottom:16px; }
.bb-cards.n1{ grid-template-columns:minmax(180px,260px); }
.bb-cards.wrap{ grid-template-columns:repeat(auto-fill,minmax(152px,1fr)); }
.bb-cards.wrap .bb-card > b{ font-size:19px; }
.bb-card{ background:var(--surface-alt); border-radius:var(--r-md); padding:13px 15px; display:flex; flex-direction:column; gap:5px; }
.bb-card > span{ font-size:11.5px; color:var(--text-3); }
.bb-card > b{ font-size:21px; font-weight:600; letter-spacing:-.02em; font-variant-numeric:tabular-nums; }
.bb-card > em{ font-size:11px; color:var(--text-3); font-style:normal; }
.c-blue{ color:var(--blue); }
.c-red{ color:var(--red); }
.c-green{ color:var(--green); }
.bb-panel{ background:var(--surface); border:.5px solid var(--hair-soft); border-radius:var(--r-lg); box-shadow:var(--sh-1); padding:18px 20px; margin-bottom:16px; }
.bb-panel-h{ display:flex; flex-direction:column; gap:5px; margin-bottom:13px; }
.bb-panel-h b{ font-size:15px; font-weight:600; }
.bb-sub{ font-size:12px; color:var(--text-3); line-height:1.65; }
.bb-scroll{ overflow-x:auto; }
.bb-tb{ width:100%; border-collapse:collapse; font-size:12.5px; white-space:nowrap; }
.bb-tb th, .bb-tb td{ text-align:left; padding:9px 11px; border-bottom:.5px solid var(--hair-soft); }
.bb-tb th{ font-size:11.5px; color:var(--text-3); font-weight:500; }
.bb-tb td.bb-num, .bb-tb th.bb-num{ text-align:right; font-variant-numeric:tabular-nums; }
.bb-tb .bb-bold{ font-weight:600; }
.bb-tb .bb-up{ color:var(--red); }
.bb-tb .bb-dn{ color:var(--green); }
.bb-tb .bb-na{ color:var(--text-3); }
.bb-stw{ font-weight:500; }
.bb-stw em{ font-size:10.5px; color:var(--text-3); font-style:normal; margin-left:6px; }
.bb-dim{ color:var(--text-2); }
.bb-txt{ color:var(--text-3); font-size:11.5px; max-width:220px; white-space:normal; }
.bb-tb-d td{ padding:8px 11px; }
.bb-srow{ cursor:pointer; transition:.14s; }
.bb-srow:hover{ background:var(--surface-alt); }
.bb-srow.on{ background:rgba(0,122,255,.07); }
.bb-tot{ background:var(--surface-alt); font-weight:600; }
.bb-tot td{ border-bottom:0; }
.bb-empty{ padding:26px; text-align:center; color:var(--text-3); font-size:12.5px; background:var(--surface-alt); border-radius:var(--r-md); }
.bb-foot{ font-size:12px; color:var(--text-3); line-height:1.8; background:var(--surface-alt); border-radius:var(--r-md); padding:12px 15px; }
.bb-more{ margin-top:11px; font-size:12px; color:var(--text-3); background:var(--surface-alt); border-radius:var(--r-md); padding:9px 13px; line-height:1.7; }
@media (max-width:900px){ .bb-cards{ grid-template-columns:1fr 1fr; } }
@media (max-width:760px){
  .ds-kpis{ grid-template-columns:1fr; }
  .ds-row{ grid-template-columns:30px 1fr; row-gap:4px; }
  .ds-row > .ds-num, .ds-row > .ds-rng, .ds-row > .ds-extra, .ds-row > .ds-act{ grid-column:2; }
  .ds-head{ display:none; }
}

/* ============================================================
   站点页脚 —— 备案信息
   工信部要求：备案号须在网站底部居中展示，并超链接至备案官网首页
   ============================================================ */
.site-footer{
  border-top:.5px solid var(--hair);
  background:var(--bg-alt);
  padding:30px 40px 36px;
}
.site-footer .sf-inner{
  max-width:var(--maxw); margin:0 auto;
  display:flex; flex-wrap:wrap; align-items:center; justify-content:center;
  column-gap:9px; row-gap:5px;
  font-size:12.5px; line-height:1.5; letter-spacing:0;
  color:var(--text-3);
}
.site-footer .sf-name{ color:var(--text-2); }
.site-footer .sf-dot{ color:var(--text-3); opacity:.45; }
.site-footer a.sf-beian{
  color:var(--text-3); text-decoration:none;
  transition:color .18s var(--ease);
}
.site-footer a.sf-beian:hover{ color:var(--blue); text-decoration:underline; }
@media (max-width:640px){
  .site-footer{ padding:22px 18px 28px; }
  .site-footer .sf-inner{ font-size:11.5px; column-gap:7px; }
}

/* ============================================================
   ★ 2026-10-13 手机端紧凑化（经营概览）
   病因：@media(max-width:700px) 把 .obig .cols 从 3 列改成了 1 列，
        三个大数字竖着堆 → 占掉半屏；加上工具栏四行、卡片内边距偏大，整页显得松散失衡。
   目标：手机上「一屏能看完主数据」，桌面端完全不受影响。
   ============================================================ */

/* ---- ≤700px：保持多列，只缩字号与间距 ---- */
@media (max-width:700px){
  .ov-page{ padding:14px 14px 84px; }
  .obig{ padding:16px 14px; border-radius:16px; }
  .obig .cols{ grid-template-columns:repeat(3,1fr); gap:6px; }      /* ★ 关键：保持 3 列 */
  .obig .col .v{ font-size:clamp(17px,4.6vw,24px); letter-spacing:-.5px; }
  .obig .col .k{ font-size:11.5px; margin-top:3px; }
  .obig .col .s{ font-size:10.5px; margin-top:2px; }
  .obig .more{ margin-top:10px; font-size:12px; }

  .ofuel-card{ padding:14px 14px; border-radius:14px; margin-top:10px; }
  .ofuel-card .ofc-head h3{ font-size:15px; }
  .ofuel-card .ofuel .row{ grid-template-columns:repeat(3,1fr); gap:6px; padding:9px 0; }
  .ofuel-card .ofuel .c .v{ font-size:15px; }
  .ofuel-card .ofuel .c .k{ font-size:10.5px; }
  .ofuel-card .ofuel .c .s{ font-size:10.5px; }
  .ofuel-card .ofuel .fuel-chip{ font-size:10px; padding:1px 5px; }
  .ofuel-card .share{ font-size:15px; }

  .ops{ grid-template-columns:repeat(3,1fr); gap:8px; }
  .ops .o{ padding:12px 12px; border-radius:12px; }
  .ops .o .v{ font-size:19px; }
  .ops .o .k{ font-size:11.5px; margin-top:4px; }
  .ops .o .s{ font-size:10.5px; margin-top:2px; }

  .chk{ padding:14px 14px; border-radius:14px; margin-bottom:10px; }
  .chk-head h3{ font-size:15.5px; }
  .chk-head .right{ font-size:11px; }
  .t27bars{ height:104px; }
  .t27ax span{ font-size:8px; }

  /* AI 悬浮球缩小，别挡住内容 */
  .ai-fab{ min-width:44px; height:44px; padding:0 11px; right:14px; bottom:14px; gap:5px; }
  .ai-fab svg{ width:18px; height:18px; }
  .ai-fab-t{ font-size:12px; }
}

/* ---- ≤480px：竖屏手机，再压一档 ---- */
@media (max-width:480px){
  .ov-page{ padding:12px 12px 76px; }
  .obig{ padding:14px 12px; border-radius:15px; }
  .obig .cols{ gap:5px; }
  .obig .col .v{ font-size:clamp(16px,5.4vw,22px); }
  .obig .col .k{ font-size:11px; }
  .obig .col .s{ font-size:10px; }

  /* 分油品：手机上只留「实际销量 + 占比」两列，第三列（笔数/预测）收掉 */
  .ofuel-card .ofuel .row{ grid-template-columns:1.25fr 1fr; gap:4px 8px; }
  .ofuel-card .ofuel .c:last-child{ display:none; }

  .ops{ grid-template-columns:repeat(3,1fr); gap:6px; }
  .ops .o{ padding:10px 9px; }
  .ops .o .v{ font-size:16.5px; }
  .ops .o .k{ font-size:11px; }

  .chk{ padding:12px 12px; }
  .t27bars{ height:88px; gap:2px; }
}

/* ---- 工具栏瘦身：手机隐藏次要项，腾出垂直空间 ---- */
@media (max-width:700px){
  .ov-bar{ padding:8px 14px; gap:8px; }
  .ov-bar .chip, .ov-tabs button{ padding:5px 11px; font-size:13px; }
  .ov-tabs{ padding-left:14px; padding-right:14px; }
  .ov-page + .ov-tabs, .ov-tabs{ overflow-x:auto; -webkit-overflow-scrolling:touch; scrollbar-width:none; }
  .ov-tabs::-webkit-scrollbar{ display:none; }
}

/* ★ 2026-10-13 页面底部「数据来源」说明 —— 弱化处理，不与主数据抢视线 */
.src-foot{
  margin-top:26px; padding:14px 16px;
  border-top:.5px solid var(--hair-soft);
  font-size:12px; color:var(--text-3); line-height:1.75;
}
.src-foot .sf-t{ font-size:12.5px; font-weight:600; color:var(--text-2); margin-bottom:6px; }
.src-foot .sf-r{ display:flex; gap:10px; }
.src-foot .sf-k{ flex:0 0 96px; color:var(--text-3); }
.src-foot .sf-v{ flex:1; color:var(--text-2); font-variant-numeric:tabular-nums; }
.src-foot .sf-note{ margin-top:6px; font-size:11.5px; color:var(--text-3); opacity:.9; }
@media (max-width:560px){
  .src-foot{ margin-top:18px; padding:12px 4px; }
  .src-foot .sf-r{ flex-direction:column; gap:1px; margin-bottom:5px; }
  .src-foot .sf-k{ flex:none; }
}

/* ★ 2026-10-13 工具栏精简：站名下拉顶到最左（原左侧有「开关+全部站点」已移除） */
.ov-bar{ padding-left:0; padding-right:0; }
.ov-bar > .dd:first-child{ margin-left:0; }

/* ★ 2026-10-16 液位仪（真实数据）补充样式 */
.tank-alarm{ margin-left:auto; font-size:11.5px; color:#bf4800; font-weight:600; }
.tank-water{ position:absolute; left:0; right:0; bottom:0; background:#0071e3; opacity:.55; border-radius:0 0 3px 3px; }
.tank-note{ margin-top:14px; padding-top:12px; border-top:.5px solid var(--hair-soft);
  font-size:12px; color:var(--text-3); line-height:1.7; }

/* ============================================================
   下拉刷新（移动端 / 2026-10-21）
   背景：iOS 主屏幕独立模式没有 Safari 原生下拉刷新；
        标签页模式的原生下拉又会整页重载，SPA 状态全丢。
   这里做覆盖式胶囊，不推动布局，视觉接近系统原生。
   ============================================================ */
.ptr-pill{
  position:fixed; left:50%; z-index:1500;
  top:calc(var(--nav-h) + env(safe-area-inset-top,0px) + 6px);
  display:flex; align-items:center; gap:7px;
  padding:7px 14px; border-radius:var(--r-pill);
  background:var(--surface); color:var(--text-2);
  box-shadow:0 6px 22px rgba(0,0,0,.16), 0 0 0 .5px var(--hair);
  font-size:12.5px; font-weight:600; white-space:nowrap;
  opacity:0; pointer-events:none;
  transform:translate(-50%,-10px);
  transition:opacity .16s var(--ease), transform .16s var(--ease);
}
.ptr-pill.show{ opacity:1; transform:translate(-50%,0) }
.ptr-pill.ready{ color:var(--blue) }
.ptr-pill .ar{
  display:inline-block; font-size:13px; line-height:1;
  transition:transform .18s var(--ease);
}
.ptr-pill.ready .ar{ transform:rotate(180deg) }
.ptr-pill .ring{
  width:13px; height:13px; border-radius:50%;
  border:2px solid var(--hair); border-top-color:var(--blue);
  animation:ysPtrSpin .8s linear infinite;
}
@keyframes ysPtrSpin{ to{ transform:rotate(360deg) } }

/* ============================================================
   七娃（原「掘金计划」）—— 同域整页内嵌
   ★ 2026-10-24 用户要求：菜单改名「七娃」，内容换成七娃系统。
   七娃是独立系统（自带登录/导航/主题），这里只负责给它一块整屏位置：
   去掉 #main 的内边距与底部留白，iframe 严格按「视口 − 顶栏」撑满。
   类名一律 qiwa- 前缀，避免撞上 apple-web.css 里的通用类。
   ============================================================ */
.main.is-qiwa{ padding:0 0 0; background:var(--bg-alt); overflow:hidden; }
/* 七娃页整屏嵌入：页脚（备案条）会让页面多出 86px 滚动，这一页先隐藏
   （七娃自己的页脚里也有备案信息，不会漏） */
body.is-qiwa-page .site-footer{ display:none; }
.qiwa-shell{
  position:relative;
  height:calc(100vh - var(--nav-h) - var(--bar-h));
  background:var(--bg-alt);
}
.qiwa-frame{
  display:block; width:100%; height:100%;
  border:0; background:#fff;
}
/* 保留七娃原外部链接：小胶囊。
   ⚠️ 位置要避开右下角的「AI 智脑」悬浮球（bottom≈20px, 高 44px）→ 抬到 76px */
.qiwa-pop{
  position:absolute; right:16px; bottom:96px; z-index:6;
  display:inline-flex; align-items:center; gap:5px;
  height:32px; padding:0 13px 0 11px;
  font-size:12.5px; font-weight:500; letter-spacing:-.01em;
  color:var(--text-2); text-decoration:none;
  background:color-mix(in srgb, var(--surface) 86%, transparent);
  -webkit-backdrop-filter:saturate(180%) blur(14px);
  backdrop-filter:saturate(180%) blur(14px);
  border:.5px solid var(--hair); border-radius:var(--r-pill);
  box-shadow:var(--sh-1); opacity:.55;
  transition:opacity .18s var(--ease), transform .18s var(--ease), color .18s var(--ease);
}
.qiwa-pop:hover{ opacity:1; color:var(--blue); transform:translateY(-1px); }
.qiwa-pop-ic{ font-size:13px; line-height:1; }
@media (max-width:700px){
  .qiwa-shell{ height:calc(100vh - var(--nav-h) - var(--bar-h)); }
  .qiwa-pop{ right:12px; bottom:90px; height:30px; font-size:12px; }
}
