/* ===== 积木易搭公众号数据看板 ===== */
:root{
  --bg:#f4f6fa;
  --panel:#ffffff;
  --line:#e5e9f0;
  --line-soft:#eef1f6;
  --txt:#1b2431;
  --txt-2:#5a6779;
  --txt-3:#8b97a8;
  --brand:#2f6bff;
  --brand-soft:#eaf0ff;
  --up:#e23b3b;      /* 中式：增长=红 */
  --down:#12a45c;    /* 中式：下降=绿 */
  --amber:#f0a020;
  --shadow:0 1px 2px rgba(20,32,56,.04),0 6px 20px rgba(20,32,56,.06);
  --radius:14px;
}
*{box-sizing:border-box;margin:0;padding:0}
html{-webkit-text-size-adjust:100%}
body{
  font-family:"PingFang SC","Microsoft YaHei","Hiragino Sans GB","Source Han Sans SC",system-ui,-apple-system,"Segoe UI",sans-serif;
  background:var(--bg);color:var(--txt);
  font-size:14px;line-height:1.6;
  -webkit-font-smoothing:antialiased;
}

/* ---------- 顶栏 ---------- */
.topbar{
  position:sticky;top:0;z-index:50;
  background:rgba(255,255,255,.92);
  backdrop-filter:saturate(180%) blur(12px);
  border-bottom:1px solid var(--line);
}
.topbar-inner{
  max-width:1440px;margin:0 auto;padding:14px 28px;
  display:flex;align-items:center;justify-content:space-between;gap:24px;flex-wrap:wrap;
}
.brand{display:flex;align-items:center;gap:13px}
.brand-logo{
  height:20px;width:auto;flex:none;display:block;
}
.brand-txt h1{font-size:17px;font-weight:650;letter-spacing:.2px}
.brand-txt p{font-size:12px;color:var(--txt-3);margin-top:1px}

.ctrl{display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.account-picker{
  display:flex;align-items:center;gap:8px;color:var(--txt-3);font-size:12px;
  white-space:nowrap;
}
.account-sel{
  border:1px solid #cfd8e8;background:var(--brand-soft);color:var(--brand);
  padding:8px 34px 8px 12px;border-radius:9px;font-size:13px;font-weight:650;
  font-family:inherit;cursor:pointer;min-width:128px;outline:none;
}
.account-sel:hover,.account-sel:focus{border-color:var(--brand);box-shadow:0 0 0 3px rgba(47,107,255,.08)}
.account-sel:disabled{opacity:.55;cursor:wait}
.seg{display:flex;background:#eef1f6;border-radius:10px;padding:3px;gap:2px}
.seg-btn{
  border:0;background:transparent;cursor:pointer;
  padding:7px 17px;border-radius:8px;
  font-size:13px;font-weight:550;color:var(--txt-2);
  font-family:inherit;transition:.16s;white-space:nowrap;
}
.seg-btn:hover{color:var(--txt)}
.seg-btn.active{background:#fff;color:var(--brand);box-shadow:0 1px 4px rgba(20,32,56,.12)}

.period-sel{
  border:1px solid var(--line);background:#fff;color:var(--txt);
  padding:8px 13px;border-radius:9px;font-size:13px;font-weight:550;
  font-family:inherit;cursor:pointer;min-width:150px;outline:none;transition:.16s;
}
.period-sel:hover{border-color:#c3cede}
.period-sel:focus{border-color:var(--brand);box-shadow:0 0 0 3px var(--brand-soft)}
.period-sel:disabled{opacity:.4;cursor:not-allowed}

.nav-arrows{display:flex;gap:5px}
.nav-arrows button{
  width:33px;height:33px;border-radius:9px;
  border:1px solid var(--line);background:#fff;color:var(--txt-2);
  font-size:18px;line-height:1;cursor:pointer;transition:.16s;font-family:inherit;
}
.nav-arrows button:hover:not(:disabled){border-color:var(--brand);color:var(--brand);background:var(--brand-soft)}
.nav-arrows button:disabled{opacity:.32;cursor:not-allowed}

/* ---------- 布局 ---------- */
.wrap{max-width:1440px;margin:0 auto;padding:26px 28px 60px}
.data-gap{
  margin:0 0 22px;padding:13px 16px;border:1px solid #f1d7a8;border-radius:12px;
  background:#fffaf0;color:#8b641d;font-size:12.5px;line-height:1.7;
}
.data-gap strong{display:block;color:#72500f;margin-bottom:3px}
.gap-list{display:grid;gap:2px}
.gap-item{position:relative;padding-left:14px}
.gap-item::before{content:'•';position:absolute;left:2px;color:#d39523;font-weight:700}
.block{margin-bottom:38px}
.block-head{display:flex;align-items:center;gap:14px;margin-bottom:7px}
.block-head h2{font-size:19px;font-weight:650;display:flex;align-items:center;gap:11px}
.idx{
  font-size:11px;font-weight:700;color:var(--brand);
  background:var(--brand-soft);padding:4px 9px;border-radius:6px;letter-spacing:.6px;
}
.period-tag{
  font-size:12px;font-weight:600;color:var(--txt-2);
  background:#fff;border:1px solid var(--line);padding:4px 12px;border-radius:20px;
}
.block-desc{font-size:13px;color:var(--txt-3);margin-bottom:16px;max-width:900px}

/* ---------- KPI ---------- */
.kpi-grid{
  display:grid;grid-template-columns:repeat(auto-fit,minmax(212px,1fr));
  gap:14px;margin-bottom:18px;
}
.kpi{
  background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);
  padding:17px 18px;box-shadow:var(--shadow);position:relative;overflow:hidden;
  transition:.18s;
}
.kpi:hover{transform:translateY(-2px);box-shadow:0 4px 10px rgba(20,32,56,.07),0 12px 30px rgba(20,32,56,.09)}
.kpi::before{content:'';position:absolute;left:0;top:0;bottom:0;width:3px;background:var(--accent,var(--brand))}
.kpi-label{font-size:12.5px;color:var(--txt-3);margin-bottom:9px;display:flex;align-items:center;gap:6px}
.kpi-val{font-size:27px;font-weight:680;letter-spacing:-.4px;line-height:1.15;font-variant-numeric:tabular-nums}
.kpi-unit{font-size:13px;font-weight:500;color:var(--txt-3);margin-left:3px}
.kpi-foot{margin-top:9px;display:flex;align-items:center;gap:8px;flex-wrap:wrap;font-size:12px}
.chip{
  display:inline-flex;align-items:center;gap:3px;
  padding:2px 8px;border-radius:20px;font-weight:600;font-size:11.5px;
  font-variant-numeric:tabular-nums;
}
.chip.up{background:#fdecec;color:var(--up)}
.chip.down{background:#e6f7ef;color:var(--down)}
.chip.flat{background:#eef1f6;color:var(--txt-3)}
.kpi-sub{color:var(--txt-3);font-size:11.5px}

/* ---------- 卡片 & 图表 ---------- */
.card{
  background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);
  padding:17px 19px 13px;box-shadow:var(--shadow);margin-bottom:16px;
}
.card-head{display:flex;align-items:baseline;justify-content:space-between;gap:12px;margin-bottom:6px;flex-wrap:wrap}
.card-head h3{font-size:14.5px;font-weight:620}
.hint{font-size:11.5px;color:var(--txt-3)}
.chart{width:100%;height:330px;min-width:0}
.chart.tall{height:390px}
.grid-2{display:grid;grid-template-columns:1fr 1fr;gap:16px}
/* 关键：栅格子项默认 min-width:auto，会被 ECharts 画布的行内宽度撑开，
   导致视口变窄时轨道无法收缩。显式归零后画布才能正确回缩。 */
.grid-2>*,.kpi-grid>*{min-width:0}
.card{min-width:0}
.card-head{min-width:0}
.card-head h3{min-width:0}

/* ---------- 表格 ---------- */
.table-wrap{overflow-x:auto;margin-top:8px;max-width:100%}
.tbl{width:100%;border-collapse:collapse;font-size:13px}
.tbl th{
  text-align:right;padding:9px 12px;color:var(--txt-3);font-weight:600;font-size:12px;
  border-bottom:1px solid var(--line);white-space:nowrap;background:#fafbfd;
}
.tbl th:first-child,.tbl td:first-child{text-align:center;width:44px}
.tbl th:nth-child(2),.tbl td:nth-child(2){text-align:left;min-width:290px}
.tbl td{padding:10px 12px;text-align:right;border-bottom:1px solid var(--line-soft);font-variant-numeric:tabular-nums}
.tbl tbody tr:hover{background:#f8fafd}
.tbl tbody tr:last-child td{border-bottom:0}
.rank{
  display:inline-flex;align-items:center;justify-content:center;
  width:21px;height:21px;border-radius:6px;font-size:11.5px;font-weight:700;
  background:#eef1f6;color:var(--txt-2);
}
.rank.r1{background:#fff1dc;color:#c47600}
.rank.r2{background:#eef1f6;color:#68758a}
.rank.r3{background:#fbeade;color:#b06a30}
.t-title{color:var(--txt);font-weight:500;display:block;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:430px}
.t-date{font-size:11px;color:var(--txt-3);margin-top:2px;display:block}
.badge{
  display:inline-block;padding:1px 7px;border-radius:5px;font-size:11px;font-weight:600;
}
.badge.top{background:var(--brand-soft);color:var(--brand)}
.badge.sec{background:#f2f4f8;color:var(--txt-3)}
.empty{padding:40px;text-align:center;color:var(--txt-3);font-size:13px}

/* ---------- 页脚 ---------- */
.foot{
  margin-top:36px;padding-top:20px;border-top:1px solid var(--line);
  font-size:12px;color:var(--txt-3);line-height:1.85;
}
.foot .warn{color:#a97012;background:#fff8ec;border-left:3px solid var(--amber);
  padding:9px 13px;border-radius:0 8px 8px 0;margin-top:9px}

/* ---------- 半年汇总卡（B6） ---------- */
.half-cards{margin-top:14px}
.half-card{padding:14px 16px}
.half-card .kpi-label{margin-bottom:7px}
.half-card .kpi-val{font-size:23px}

/* ---------- KPI 同比/环比 清晰标识（需求1 / B2 / B3 / F1） ---------- */
.kpi-cmp{margin-top:11px;display:flex;flex-direction:column;gap:5px}
.cmp-row{display:flex;align-items:center;gap:8px;font-size:11.5px}
.cmp-label{
  flex:none;width:32px;color:var(--txt-2);font-weight:650;font-size:11px;
  background:#f1f4f9;border-radius:5px;padding:2px 0;text-align:center;letter-spacing:.5px;
}
.cmp-abs{color:var(--txt-3);font-weight:500;font-size:10.5px;font-variant-numeric:tabular-nums;letter-spacing:.1px}
.kpi-sub{margin-top:10px;color:var(--txt-3);font-size:11px;line-height:1.5}

/* ---------- 发布日历（新增） ---------- */
.cal-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:7px;width:100%;max-width:560px;min-width:0}
.cal-wk{text-align:center;font-size:11.5px;color:var(--txt-3);font-weight:600;padding:2px 0;min-width:0}
.cal-cell{
  aspect-ratio:1/1;display:flex;flex-direction:column;align-items:center;justify-content:center;
  background:#f6f8fb;border-radius:10px;font-size:14px;color:var(--txt-2);position:relative;
  font-variant-numeric:tabular-nums;min-width:0;overflow:hidden;padding:2px;
}
.cal-cell.empty{background:transparent}
.cal-cell.has{background:var(--brand-soft);cursor:help}
.cal-dot{
  width:26px;height:26px;border-radius:50%;background:var(--brand);color:#fff;
  display:flex;align-items:center;justify-content:center;font-weight:650;font-size:12px;flex:none;
}
.cal-cnt{font-size:9px;color:var(--brand);font-weight:600;margin-top:1px;line-height:1}

/* 全年日历（独立年份选择） */
.cal-year{display:grid;grid-template-columns:repeat(auto-fill,minmax(168px,1fr));gap:14px;width:100%}
.cal-month{border:1px solid var(--line);border-radius:12px;padding:8px 8px 10px;background:#fcfdff}
.cal-mh{font-size:12.5px;font-weight:700;color:var(--txt-2);text-align:center;margin-bottom:6px}
.cal-grid.sm{grid-template-columns:repeat(7,1fr);gap:3px;max-width:none}
.cal-wk.sm{font-size:10px;padding:1px 0}
.cal-cell.sm{aspect-ratio:1/1;border-radius:7px;font-size:12px;padding:1px}
.cal-cell.sm .cal-dot{width:18px;height:18px;font-size:10px}
.cal-cell.sm .cal-cnt{font-size:8px}
.cal-year-sel{margin-left:auto;font-size:12.5px;padding:5px 10px;border:1px solid var(--line);
  border-radius:8px;background:#fff;color:var(--txt);cursor:pointer}

/* sparkline 悬浮提示 */
.spark{position:relative}
.spark-dot{position:absolute;width:9px;height:9px;border-radius:50%;background:var(--brand);
  border:2px solid #fff;box-shadow:0 1px 4px rgba(20,32,56,.3);transform:translate(-50%,-50%);
  display:none;pointer-events:none;z-index:2}
.spark-tip{position:fixed;z-index:999;pointer-events:none;background:rgba(255,255,255,.98);
  border:1px solid var(--line);border-radius:9px;padding:7px 11px;font-size:12px;color:var(--txt);
  box-shadow:0 6px 22px rgba(20,32,56,.16);line-height:1.5}

/* 指定日期范围选择器 */
.range-box{display:flex;align-items:center;gap:6px;flex-wrap:wrap;
  background:#eef1f6;border-radius:10px;padding:5px 10px}
.range-box .r-sep{color:var(--txt-3);font-size:12.5px}
.range-box .r-sel{font-size:12.5px;padding:4px 6px;border:1px solid var(--line);border-radius:7px;
  background:#fff;color:var(--txt);cursor:pointer}
.range-box .r-apply{font-size:12.5px;padding:5px 14px;border:none;border-radius:7px;cursor:pointer;
  background:var(--brand);color:#fff;font-weight:600}
.range-box .r-apply:hover{filter:brightness(1.05)}

/* ---------- 头条/次条 次条打开率（C5） ---------- */
.pos-stats{margin-top:10px;display:flex;flex-wrap:wrap;gap:8px}
.mini-pill{font-size:12px;color:var(--txt-2);background:#f6f8fb;border:1px solid var(--line);
  padding:5px 11px;border-radius:20px}
.mini-pill b{color:var(--txt);font-weight:650}
.mini-pill.muted{color:var(--txt-3);border-style:dashed}

/* ---------- 坐标轴提示（D3） ---------- */
.axis-note{margin-top:8px;font-size:11.5px;color:#a97012;background:#fff8ec;
  border-left:3px solid var(--amber);padding:6px 11px;border-radius:0 8px 8px 0}

/* ---------- 渠道集中度 CR1（D4） ---------- */
.cr1-wrap{margin-bottom:16px}
.cr1{display:inline-block;font-size:13px;color:var(--txt-2);background:#f6f8fb;
  border:1px solid var(--line);padding:9px 14px;border-radius:11px}
.cr1 b{color:var(--txt);font-weight:680;font-size:14px;font-variant-numeric:tabular-nums}
.cr1.warn{background:#fdecec;border-color:#f3b6b6;color:#b03434}
.cr1.warn b{color:#c0271f}
.cr1.muted{color:var(--txt-3);border-style:dashed}

/* ---------- ⓘ 口径说明图标（A3） ---------- */
.info-ic{display:inline-flex;align-items:center;justify-content:center;
  width:16px;height:16px;margin-left:6px;font-size:11px;font-weight:700;
  color:#fff;background:var(--txt-3);border-radius:50%;cursor:help;
  position:relative;vertical-align:middle;font-style:normal}
.info-ic:hover{background:var(--brand)}
.info-ic:hover::after{
  content:attr(data-tip);position:absolute;top:130%;right:0;z-index:60;
  width:280px;background:#1b2431;color:#fff;font-size:11.5px;line-height:1.6;font-weight:400;
  padding:10px 13px;border-radius:9px;box-shadow:0 8px 24px rgba(20,32,56,.28);
  white-space:normal;text-align:left}
.info-ic:hover::before{content:'';position:absolute;top:118%;right:6px;z-index:61;
  border:6px solid transparent;border-bottom-color:#1b2431}

/* ---------- 栏目分析（C7） ---------- */
.col-grid{align-items:stretch;gap:16px}
.col-grid .chart{height:340px}
.col-grid .table-wrap{align-self:center}

/* ---------- 概览区三段式重构 ---------- */
.ov-head{flex-wrap:wrap;align-items:flex-end;margin-bottom:10px}
.ov-head-left{display:flex;flex-direction:column;gap:2px;min-width:0;flex:1}
.ov-title-row{display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.export-btn{
  display:inline-flex;align-items:center;gap:6px;
  border:1px solid var(--line);background:#fff;color:var(--txt-2);
  padding:7px 14px;border-radius:9px;font-size:13px;font-weight:550;cursor:pointer;
  font-family:inherit;transition:.16s;white-space:nowrap;
}
.export-btn:hover{border-color:var(--brand);color:var(--brand);background:var(--brand-soft)}
.export-btn svg{width:15px;height:15px}
.ov-stats{display:flex;align-items:center;gap:10px;flex-wrap:wrap;font-size:12.5px;color:var(--txt-3);margin-top:8px}
.ov-stats .stat{white-space:nowrap}
.ov-sep{color:var(--line);font-weight:300}

/* 第一行：6 主卡（图标 + 大数值 + 同比/环比 + 辅助 + sparkline） */
.ov-main{grid-template-columns:repeat(6,1fr);gap:14px;margin-bottom:16px}
.ov-main .kpi-val{font-size:34px;font-weight:700;letter-spacing:-.6px}
.kpi-top{display:flex;align-items:center;gap:7px;margin-bottom:9px}
.kpi-top .kpi-label{margin-bottom:0}
.kpi-ic{width:22px;height:22px;display:inline-flex;flex:none}
.kpi-ic svg{width:100%;height:100%}
.spark{margin-top:12px;height:40px;width:100%}
.spark-svg{width:100%;height:40px;display:block}

/* 第二行：互动量 / 完成率 / 雷达 */
.ov-row2{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;margin-bottom:16px}
.ov-sub{padding-bottom:10px}
.ov-sub-top{margin-bottom:4px}
.ov-sub-val{font-size:30px;font-weight:700;letter-spacing:-.5px;font-variant-numeric:tabular-nums;line-height:1.15}
.ov-sub-unit{font-size:13px;font-weight:500;color:var(--txt-3);margin-left:3px}
.ov-sub-break{margin-top:8px;color:var(--txt-3);font-size:11.5px}
.ov-mini{height:132px}
.ov-radar{height:240px}

/* 第三行：趋势(6) + 总览表(4) */
.ov-row3{display:grid;grid-template-columns:3fr 2fr;gap:16px;margin-bottom:16px}
.ov-tbl{margin-top:2px;table-layout:fixed;width:100%}
.ov-tbl th:first-child,.ov-tbl td:first-child{text-align:left;width:30%}
.ov-tbl th:nth-child(2),.ov-tbl td:nth-child(2){width:24%;text-align:right}
.ov-tbl th:nth-child(3),.ov-tbl td:nth-child(3){width:24%;text-align:right}
.ov-tbl th:nth-child(4),.ov-tbl td:nth-child(4){width:22%;min-width:88px;text-align:right}
.ov-tbl tbody tr{height:44px}
.ov-tbl td{white-space:nowrap}
.ov-tbl tbody tr:nth-child(even){background:#fafbfd}
.ov-tbl .ov-tname{text-align:left;font-weight:600;color:var(--txt)}
.ov-tbl .up{color:var(--up);font-weight:600}
.ov-tbl .down{color:var(--down);font-weight:600}
.ov-tbl .flat{color:var(--txt-3);font-weight:600}
.ov-tbl-note{margin-top:10px;font-size:11.5px;color:var(--txt-3)}
.mini-seg{display:inline-flex;background:#eef1f6;border-radius:8px;padding:3px;gap:2px}
.mini-btn{border:0;background:transparent;cursor:pointer;padding:4px 12px;border-radius:6px;
  font-size:12px;font-weight:550;color:var(--txt-2);font-family:inherit;transition:.16s}
.mini-btn.active{background:#fff;color:var(--brand);box-shadow:0 1px 4px rgba(20,32,56,.12)}

/* ---------- 响应式 ---------- */
@media (max-width:1400px){
  .ov-main{grid-template-columns:repeat(3,1fr)}
}
@media (max-width:1080px){
  .grid-2{grid-template-columns:1fr}
  .col-grid{grid-template-columns:1fr}
  .topbar-inner{padding:12px 18px}
  .wrap{padding:20px 18px 48px}
  .ov-row2{grid-template-columns:1fr}
  .ov-row3{grid-template-columns:1fr}
}
@media (max-width:900px){
  .ov-main{grid-template-columns:1fr}
  .ov-head{flex-direction:column;align-items:flex-start;gap:10px}
}
@media (max-width:640px){
  /* 顶栏不再吸顶，给内容让出空间；控件纵向堆叠 */
  .topbar{position:static}
  .topbar-inner{padding:10px 14px}
  .wrap{padding:16px 14px 44px}
  .brand-txt h1{font-size:15px}
  .brand-txt p{font-size:11px}
  .block-head h2{font-size:17px}

  /* 控件区：分段切换独占一行（四按钮等宽），其下为「月份选择 + 翻页」一行 */
  .ctrl{flex-wrap:wrap;gap:10px;width:100%}
  .account-picker{flex:1 1 100%;width:100%}
  .account-sel{flex:1;min-width:0}
  .seg{flex:1 1 100%;justify-content:space-between}
  .seg-btn{flex:1;padding:9px 4px;font-size:12.5px}
  .period-sel{flex:1 1 auto;min-width:0}
  .nav-arrows{flex:none}

  /* 主 KPI 卡在手机上两列排布，减小留白与字号 */
  .ov-main{grid-template-columns:repeat(2,1fr);gap:10px}
  .ov-main .kpi{padding:13px 13px}
  .ov-main .kpi-val{font-size:24px}

  /* 图表在手机上适当降低高度，避免一屏只看到一张图 */
  .chart{height:280px}
  .chart.tall{height:320px}
  .col-grid .chart{height:300px}
  .ov-mini{height:150px}
  .ov-radar{height:280px}
  .ov-row3 .chart{height:300px}

  .kpi-val{font-size:23px}

  /* 移动端 ⓘ 口径提示支持点击（无悬停）：聚焦/按住即显示 */
  .info-ic:focus,.info-ic:active{background:var(--brand);outline:none}
  .info-ic:focus::after,.info-ic:active::after{
    content:attr(data-tip);position:absolute;top:135%;left:50%;transform:translateX(-50%);z-index:60;
    width:min(260px,82vw);background:#1b2431;color:#fff;font-size:11.5px;line-height:1.6;font-weight:400;
    padding:10px 13px;border-radius:9px;box-shadow:0 8px 24px rgba(20,32,56,.28);
    white-space:normal;text-align:left;
  }
  .info-ic:focus::before,.info-ic:active::before{
    content:'';position:absolute;top:122%;left:50%;transform:translateX(-50%);z-index:61;
    border:6px solid transparent;border-bottom-color:#1b2431;
  }

  .tbl th:nth-child(2),.tbl td:nth-child(2){min-width:140px}
  .t-title{max-width:140px}
  .tbl td,.tbl th{padding:8px 8px;font-size:12px}
  .ov-tbl th:first-child,.ov-tbl td:first-child{min-width:60px}
  .ov-tbl th:nth-child(4),.ov-tbl td:nth-child(4){min-width:80px}
}
@media (max-width:420px){
  /* 极窄屏：主 KPI 卡改单列，分段按钮字号再收一点 */
  .ov-main{grid-template-columns:1fr}
  .ov-main .kpi-val{font-size:28px}
  .seg-btn{font-size:12px;padding:8px 2px}
  .wrap{padding:14px 11px 40px}
}
/* 触控优化：去除点击高亮、避免双击缩放 */
button{-webkit-tap-highlight-color:transparent;touch-action:manipulation}
