:root{
  --bg:#0f1115; --panel:#161a21; --panel2:#1c222b; --line:#262d38;
  --txt:#e6e9ef; --muted:#8b95a5; --acc:#4c8dff; --acc2:#3b6fd4;
  --ok:#2fbf71; --warn:#e0a33e; --bad:#e05a5a; --purple:#a06bff;
  --r:10px;
}
*{box-sizing:border-box}
html,body{margin:0;height:100%}
body{background:var(--bg);color:var(--txt);font:14px/1.5 -apple-system,"Segoe UI","Microsoft YaHei",system-ui,sans-serif}
.muted{color:var(--muted)}
.err{color:var(--bad)}

/* ---------- 登录 ---------- */
.login-body{display:grid;place-items:center;min-height:100vh}
.login-card{background:var(--panel);padding:36px 32px;border-radius:16px;border:1px solid var(--line);width:min(92vw,360px);text-align:center}
.login-card h1{margin:0 0 6px;font-size:20px;letter-spacing:.5px}
.login-card form{display:grid;gap:12px;margin-top:22px}
.login-card input{padding:12px 14px;border-radius:var(--r);border:1px solid var(--line);background:var(--panel2);color:var(--txt);font-size:15px}
.login-card button{padding:12px;border-radius:var(--r);border:0;background:var(--acc);color:#fff;font-size:15px;cursor:pointer}
.login-card button:hover{background:var(--acc2)}

/* ---------- 顶栏 ---------- */
.topbar{position:sticky;top:0;z-index:50;display:flex;align-items:center;gap:18px;padding:12px 18px;background:rgba(15,17,21,.92);backdrop-filter:blur(8px);border-bottom:1px solid var(--line)}
.brand{font-weight:600;letter-spacing:.4px}
.tabs{display:flex;gap:6px}
.tab{background:transparent;border:1px solid var(--line);color:var(--muted);padding:7px 16px;border-radius:999px;cursor:pointer;font-size:13px}
.tab.active{background:var(--acc);border-color:var(--acc);color:#fff}
.top-actions{margin-left:auto;display:flex;gap:10px;align-items:center}
.top-actions input{padding:8px 12px;border-radius:999px;border:1px solid var(--line);background:var(--panel2);color:var(--txt);width:min(38vw,300px)}
.ghost{background:transparent;border:1px solid var(--line);color:var(--muted);padding:7px 14px;border-radius:999px;cursor:pointer}
.ghost:hover{color:var(--txt);border-color:var(--muted)}

/* ---------- 主区 ---------- */
main{height:calc(100vh - 57px);overflow:hidden}
.view{display:none;height:100%}
.view.active{display:flex}

/* ---------- 筛选侧栏 ---------- */
.filters{width:230px;flex:0 0 230px;padding:16px;overflow:auto;border-right:1px solid var(--line);background:var(--panel)}
.fgroup{margin-bottom:20px}
.fgroup h3{margin:0 0 8px;font-size:12px;text-transform:uppercase;letter-spacing:.8px;color:var(--muted);font-weight:600}
.chips{display:flex;flex-wrap:wrap;gap:6px}
.chip{border:1px solid var(--line);background:var(--panel2);color:var(--muted);padding:5px 11px;border-radius:999px;font-size:12px;cursor:pointer;user-select:none}
.chip.on{background:var(--acc);border-color:var(--acc);color:#fff}
.switch{display:flex;align-items:center;gap:8px;font-size:13px;cursor:pointer}
.filters select{width:100%;padding:8px;border-radius:8px;background:var(--panel2);color:var(--txt);border:1px solid var(--line)}
.snap{font-size:12px;line-height:1.7}

/* ---------- 表格 ---------- */
.tablewrap{flex:1;overflow:auto;padding:0}
.rows{min-width:900px}
.row{display:grid;grid-template-columns:52px minmax(0,1fr) 100px 208px;gap:10px;align-items:center;padding:11px 16px;border-bottom:1px solid var(--line);cursor:pointer}
.row:hover{background:var(--panel2)}
.row .tier{width:26px;height:26px;border-radius:8px;display:grid;place-items:center;font-weight:700;font-size:13px}
.tier.A{background:rgba(47,191,113,.16);color:var(--ok)}
.tier.B{background:rgba(76,141,255,.16);color:var(--acc)}
.tier.C{background:rgba(224,163,62,.16);color:var(--warn)}
.row .main{min-width:0}
.row .title{font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.row .sub{font-size:12px;color:var(--muted);display:flex;gap:8px;min-width:0;align-items:baseline}
.row .sub .cotxt{flex:0 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.row .sub .sub-deadline{display:none;flex:0 0 auto;color:var(--warn);white-space:nowrap;font-variant-numeric:tabular-nums}
.badge{font-size:11px;padding:3px 8px;border-radius:999px;border:1px solid var(--line);color:var(--muted);white-space:nowrap}
.badge.ok{color:var(--ok);border-color:rgba(47,191,113,.4)}
.badge.warn{color:var(--warn);border-color:rgba(224,163,62,.4)}
.badge.bad{color:var(--bad);border-color:rgba(224,163,62,.4)}
.badge.stale{color:var(--bad);border-color:rgba(224,90,90,.4)}
.row .dl{font-size:12px;text-align:right;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:clip}
.row .dl.soon{color:var(--warn)}
.row .dl.urgent{color:var(--bad);font-weight:600}
.row .acts{display:flex;gap:6px;justify-content:flex-end;flex-wrap:nowrap;min-width:0;overflow:hidden}
.act{background:transparent;border:1px solid var(--line);color:var(--muted);border-radius:7px;padding:4px 9px;font-size:12px;cursor:pointer;white-space:nowrap;flex:0 0 auto}
.act:hover{color:var(--txt)}
.act.on{background:var(--acc);border-color:var(--acc);color:#fff}
.act.star.on{background:var(--warn);border-color:var(--warn);color:#171717}
.status-sel{background:var(--panel2);color:var(--txt);border:1px solid var(--line);border-radius:7px;padding:4px 6px;font-size:12px}

/* ---------- 详情抽屉 ---------- */
.drawer{position:fixed;top:0;right:0;height:100%;width:min(560px,96vw);background:var(--panel);border-left:1px solid var(--line);transform:translateX(100%);transition:transform .22s ease;z-index:80;display:flex;flex-direction:column}
.drawer.open{transform:none}
.drawer .dhead{padding:16px;border-bottom:1px solid var(--line);display:flex;gap:12px;align-items:flex-start}
.drawer .dhead h2{margin:0;font-size:16px}
.drawer .dbody{flex:1;overflow:auto;padding:16px;white-space:pre-wrap;font-size:13px;line-height:1.75}
.drawer .dclose{margin-left:auto;background:transparent;border:0;color:var(--muted);font-size:22px;cursor:pointer}

/* ---------- 看板 ---------- */
.board{display:flex;gap:14px;padding:16px;overflow:auto;height:100%;align-items:flex-start}
.col{flex:0 0 270px;background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:10px;max-height:100%;display:flex;flex-direction:column}
.col h3{margin:4px 6px 10px;font-size:13px;display:flex;justify-content:space-between;color:var(--muted)}
.col .cards{overflow:auto;display:grid;gap:8px}
.card{background:var(--panel2);border:1px solid var(--line);border-radius:10px;padding:10px;cursor:grab}
.card .t{font-weight:600;font-size:13px;margin-bottom:4px}
.card .c{font-size:11px;color:var(--muted)}
.card.drag{opacity:.4}
.col.over{outline:2px dashed var(--acc);outline-offset:-4px}

/* ---------- toast ---------- */
.toast{position:fixed;left:50%;bottom:26px;transform:translate(-50%,20px);background:var(--acc);color:#fff;padding:10px 18px;border-radius:999px;font-size:13px;opacity:0;pointer-events:none;transition:.22s;z-index:200}
.toast.show{opacity:1;transform:translate(-50%,0)}

/* ============================================================
   移动端适配（<= 820px）
   - 顶栏折成两行
   - 侧栏筛选改成左侧抽屉（点「筛选」按钮滑出）
   - 表格每行变成卡片（档位 + 标题 + 徽章 + 截止 + 操作）
   - 看板横向滚动，单列宽 78vw
   ============================================================ */
.mobile-only{display:none}
.backdrop{position:fixed;inset:0;background:rgba(0,0,0,.55);opacity:0;pointer-events:none;transition:.2s;z-index:70}
.backdrop.show{opacity:1;pointer-events:auto}

@media (max-width: 820px){
  .mobile-only{display:inline-flex}

  /* 顶栏 */
  .topbar{flex-wrap:wrap;gap:8px;padding:9px 12px}
  .brand{font-size:14px;flex:1 1 auto}
  .brand .muted{font-size:12px}
  .tabs{order:3;width:100%}
  .tab{flex:1;padding:8px 0;font-size:13px}
  .top-actions{order:2;margin-left:0;gap:8px;flex:0 0 auto}
  .top-actions input{width:min(46vw,220px);padding:7px 11px;font-size:13px}
  .ghost{padding:7px 11px;font-size:13px}

  main{height:calc(100vh - 108px)}

  /* 侧栏 -> 抽屉 */
  .filters{
    position:fixed;left:0;top:0;bottom:0;width:82vw;max-width:300px;
    transform:translateX(-100%);transition:transform .22s ease;z-index:75;
    border-right:1px solid var(--line);border-top:0;padding-top:18px;
  }
  .filters.open{transform:none}

  /* 表格 -> 卡片 */
  .rows{min-width:0}
  .row{
    display:flex;flex-wrap:wrap;align-items:center;
    gap:8px;padding:12px 14px;border-bottom:1px solid var(--line);
  }
  .row .tier{flex:0 0 28px;width:28px;height:28px}
  .row .main{flex:1 1 calc(100% - 44px);min-width:0}
  .row .title{white-space:normal;line-height:1.35;font-size:14px}
  .row .sub{white-space:normal;font-size:12px;margin-top:3px}
  /* 徽章/截止/操作各占一行 */
  .row .cell-jd,.row .cell-vf{flex:0 0 auto}
  .row .dl{flex:0 0 auto;text-align:left;font-size:12px;order:5}
  .row .acts{flex:1 1 100%;justify-content:flex-start;order:6;gap:8px}
  .row .acts .status-sel{flex:1;min-width:0;padding:7px 8px}
  .act{padding:7px 12px}

  /* 抽屉（详情）占满宽度 */
  .drawer{width:100%;max-width:none}

  /* 看板：横向滚动 + 单列 78vw */
  .board{padding:12px;gap:10px;scroll-snap-type:x mandatory}
  .col{flex:0 0 78vw;max-width:320px;scroll-snap-align:start}
  .card{padding:12px}

  /* 登录页 */
  .login-card{padding:28px 20px;width:min(94vw,340px)}
}

/* 超窄屏（<= 380px）：进一步压缩 */
@media (max-width: 380px){
  .tab{font-size:12px;padding:7px 0}
  .row .acts{flex-wrap:wrap}
  .col{flex:0 0 86vw}
}

/* ============================================================
   通道栏（2026-10-23）：财务/管理 · 统考 · 公众号
   ============================================================ */
/* ★ 2026-10-26 修：原来 nowrap + overflow-x:auto + 隐藏滚动条 →
   窗口窄一点（实测 ~1000px）第 5 个渠道「飞书汇总」被挤出屏幕，且看不见也滚不出来。
   渠道数量会随数据源增加，这种"静默消失"必须禁掉：改为自动换行。 */
.chanbar{display:flex;flex-wrap:wrap;gap:8px;padding:8px 18px;border-bottom:1px solid var(--line);background:var(--panel);overflow-x:visible}
.chanbar::-webkit-scrollbar{display:none}
.chan{flex:0 0 auto;display:inline-flex;align-items:center;gap:7px;background:transparent;border:1px solid var(--line);color:var(--muted);padding:7px 14px;border-radius:999px;font-size:13px;cursor:pointer;white-space:nowrap}
.chan b{font-weight:600;font-size:12px;opacity:.8}
.chan:hover{color:var(--txt)}
.chan.active{background:var(--acc);border-color:var(--acc);color:#fff}
.chan.active b{opacity:1}

/* 筛选抽屉的小标题栏（仅手机显示） */
.fhead{display:none;align-items:center;justify-content:space-between;margin-bottom:14px;padding-bottom:10px;border-bottom:1px solid var(--line);font-weight:600}
.fhead .dclose{background:transparent;border:0;color:var(--muted);font-size:26px;line-height:1;cursor:pointer;padding:0 4px}

/* main 高度要让出通道栏 */
main{height:calc(100vh - 57px - 53px)}

/* 详情抽屉：底部渐隐 + 滚动提示 */
.drawer .dbody{position:relative}
.drawer .dbody::after{content:'';position:sticky;bottom:0;display:block;height:34px;margin:-34px -16px 0;background:linear-gradient(transparent,rgba(22,26,33,.96));pointer-events:none}
.drawer .dbody.scrolled::after{opacity:0}

/* ============================================================
   追加的移动端修正（按 observer 评审：行高 254px / 抽屉无关闭 / 看板过窄）
   ============================================================ */
@media (max-width: 820px){
  main{height:calc(100vh - 108px - 48px)}
  .chanbar{padding:7px 12px;gap:6px}
  .chan{padding:6px 11px;font-size:12px}
  .fhead{display:flex}
  .desktop-only{display:none !important}
  .mobile-only{display:inline-flex}

  /* 行高问题：标题最多 2 行，副标题最多 1 行 */
  .row .title{
    display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;
    overflow:hidden;white-space:normal;line-height:1.35;max-height:2.7em;
  }
  .row .sub{
    display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;
    overflow:hidden;white-space:normal;
  }
  .row{padding:11px 13px;gap:6px}

  /* 看板：单列更宽 + 卡片标题最多 3 行 */
  .col{flex:0 0 84vw}
  .card .t{display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden;line-height:1.35}
}

/* ============================================================
   第三轮 UI 修正（按 observer 二次评审）
   ============================================================ */
/* 看板卡片底部操作行 */
.card .cacts{display:flex;gap:6px;align-items:center;margin-top:8px}
.card .cacts .status-sel{flex:1;min-width:0}
.card .cacts .act{padding:5px 9px;font-size:11px}

/* 筛选页脚（重置按钮） */
.ffoot{margin-top:auto;padding-top:12px;border-top:1px solid var(--line)}
.filters{display:flex;flex-direction:column}
.filters .fgroup{margin-bottom:16px}

@media (max-width: 820px){
  /* 触控区：下拉与按钮至少 40px 高 */
  .row .acts .status-sel{min-height:40px}
  .row .acts .act{min-height:40px;min-width:44px;display:inline-flex;align-items:center;justify-content:center}
  .card .cacts .status-sel{min-height:38px}
  .card .cacts .act{min-height:38px;min-width:42px;display:inline-flex;align-items:center;justify-content:center}
  /* 关闭按钮独立热区 */
  .fhead .dclose{min-width:44px;min-height:44px;display:inline-flex;align-items:center;justify-content:center;margin:-8px -8px -8px 0}
  .drawer .dclose{min-width:44px;min-height:44px;display:inline-flex;align-items:center;justify-content:center}
  /* 详情抽屉底部固定提示条 */
  .drawer .dfoot{position:sticky;bottom:0;padding:10px 16px;border-top:1px solid var(--line);background:var(--panel)}
}

/* 撤销条（2026-10-23） */
.toast{display:flex;align-items:center;gap:12px}
.toast .undo-btn{background:rgba(255,255,255,.22);border:0;color:#fff;padding:5px 12px;border-radius:999px;font-size:13px;cursor:pointer;white-space:nowrap}
.toast .undo-btn:hover{background:rgba(255,255,255,.34)}

/* ============================================================
   本周必投视图 + 抽屉上下条（2026-10-23）
   ============================================================ */
.weekhead{display:flex;align-items:center;gap:12px;padding:10px 18px;border-bottom:1px solid var(--line);background:var(--panel);font-size:13px}
.weekhead #wk-sub{flex:1;font-size:12px}
.weekhead select{background:var(--panel2);color:var(--txt);border:1px solid var(--line);border-radius:8px;padding:6px 10px;font-size:12px}
.tab b{font-size:11px;opacity:.85;margin-left:4px}

.drawer .dhead{align-items:center}
.drawer .dnav{display:flex;gap:6px;align-items:center;margin-left:auto}
.drawer .dnav .act{min-width:34px;text-align:center}
.drawer .dnav .act:disabled{opacity:.3;cursor:default}

@media (max-width: 820px){
  .weekhead{padding:8px 12px}
  .weekhead #wk-sub{display:none}
  .drawer .dnav .act{min-width:40px;min-height:40px}
  .tab b{display:none}
}

/* ---- 2026-10-23 地区二级 chips（苏南展开） ---- */
/* 设计要点：必须让用户一眼看出「这是苏南的子项」。
   observer 实测上一版：与一级 chips 同样式、无缩进、无分隔线 → 会被当成平级选项。 */
.subcity {
  display: flex; flex-wrap: wrap; gap: 6px;
  margin: 8px 0 0 4px; padding: 6px 0 4px 12px;
  border-left: 3px solid #4a7bd8;
  background: linear-gradient(90deg, rgba(74,123,216,.10), transparent 72%);
  border-radius: 0 6px 6px 0;
}
.subcity[data-empty='1'] { display: none; }
.subcity .sc-head {
  flex-basis: 100%; font-size: 11px; letter-spacing: .04em;
  color: #8aa2c6; margin-bottom: 7px;
}
.subcity .chip {
  font-size: 12px; padding: 4px 10px; min-height: 28px;
  border-style: dashed; background: rgba(255,255,255,.03);
}
.subcity .chip.on { border-style: solid; }

/* 手机端触控：observer 实测 chip 高 32-34px 偏小，拉到 36px */
@media (max-width: 820px) {
  .chip { min-height: 36px; display: inline-flex; align-items: center; padding: 6px 12px; }
  .subcity .chip { min-height: 32px; }
}

/* ================= 2026-10-24 首页面板 / 模态框 / 更多菜单 ================= */
.panel{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;padding:12px 16px;background:linear-gradient(180deg,#111827,#0f172a);border-bottom:1px solid #1e293b}
.pcell{background:#1b2436;border:1px solid #253044;border-radius:12px;padding:10px 12px;text-align:center;cursor:pointer;transition:.15s}
.pcell:hover{border-color:#3b82f6;transform:translateY(-1px)}
.pcell.on{border-color:#3b82f6;box-shadow:0 0 0 2px rgba(59,130,246,.25) inset}
.pnum{font-size:26px;font-weight:700;line-height:1.1;color:#e5edff}
.pnum.zero{color:#5b6b85}
.plabel{font-size:12px;color:#8aa2c6;margin-top:2px}
.pnote{grid-column:1/-1;font-size:12px;color:#c9a227;background:rgba(201,162,39,.10);border:1px solid rgba(201,162,39,.35);border-radius:8px;padding:6px 10px}
.pnote:empty{display:none}
.pact{grid-column:1/-1;display:flex;gap:8px;flex-wrap:wrap}
.pact button{font-size:13px}
@media(max-width:820px){
  .panel{grid-template-columns:repeat(2,1fr);padding:10px 12px;gap:8px}
  .pnum{font-size:22px}
}

.moremenu{position:fixed;top:52px;right:10px;background:#1b2436;border:1px solid #2c3a52;border-radius:10px;padding:6px;display:none;z-index:60;min-width:200px;box-shadow:0 12px 30px rgba(0,0,0,.45)}
.moremenu.show{display:block}
.moremenu button{display:block;width:100%;text-align:left;background:none;border:0;color:#dbe6f7;padding:9px 12px;border-radius:8px;font-size:14px;cursor:pointer}
.moremenu button:hover{background:#243044}

.morewrap{display:flex;justify-content:center;padding:14px}
.morewrap .ghost{min-width:180px}

.modal{position:fixed;inset:0;background:rgba(4,8,16,.72);display:none;align-items:center;justify-content:center;z-index:80;padding:16px}
.modal.show{display:flex}
.mbox{background:#151d2c;border:1px solid #2c3a52;border-radius:14px;width:min(560px,100%);max-height:88vh;display:flex;flex-direction:column}
.mhead{display:flex;justify-content:space-between;align-items:center;padding:12px 16px;border-bottom:1px solid #243044;font-weight:600}
.mbody{padding:14px 16px;overflow:auto;display:grid;gap:10px}
.mbody label{display:grid;gap:4px;font-size:13px;color:#9fb0c9}
.mbody input,.mbody select,.mbody textarea{background:#0f1725;border:1px solid #2c3a52;color:#e5edff;border-radius:8px;padding:9px 10px;font-size:14px;width:100%;box-sizing:border-box}
.mbody input:focus,.mbody textarea:focus,.mbody select:focus{outline:none;border-color:#3b82f6}
.req{color:#ef4444}
.mhint{font-size:12px;color:#f0a020;min-height:16px}
.mfoot{display:flex;justify-content:flex-end;gap:10px;padding:12px 16px;border-top:1px solid #243044}
.mfoot .primary{background:#2563eb;color:#fff;border:0;border-radius:8px;padding:9px 18px;font-size:14px;cursor:pointer}
.mfoot .primary:disabled{opacity:.5;cursor:default}

/* 抽屉里的可编辑字段 */
.dedit{display:grid;grid-template-columns:88px 1fr;gap:8px;align-items:center;margin:6px 0}
.dedit span{font-size:13px;color:#8aa2c6}
.dedit input,.dedit select{background:#0f1725;border:1px solid #2c3a52;color:#e5edff;border-radius:6px;padding:6px 8px;font-size:13px;width:100%;box-sizing:border-box}
.dbadge{display:inline-block;font-size:11px;padding:1px 6px;border-radius:999px;background:#1d4ed8;color:#fff;margin-left:6px;vertical-align:middle}
.dbadge.manual{background:#7c3aed}
.dbadge.blocked{background:#64748b}
.dbadge.possible{background:#b45309;color:#fff}
.possible-box{margin:0 0 12px;padding:10px 12px;border:1px solid rgba(245,158,11,.45);border-left:4px solid #f59e0b;border-radius:6px;background:rgba(245,158,11,.08)}
.possible-title{color:#f5b74a;font-weight:600;margin-bottom:4px}

/* ---- 2026-10-24 observer 复核后的两处修正 ---- */
/* ① 通道切换在手机上横向截断成「江…」= 静默丢信息 → 允许换行 */
@media (max-width: 820px){
  .chanbar{flex-wrap:wrap;overflow-x:visible;gap:6px;padding:8px 12px}
  .chan{font-size:13px;padding:6px 10px;white-space:nowrap}
  /* ② 行内「投递」按钮触控区太窄，拇指易点成下拉 */
  .row .acts .act{min-height:38px;min-width:52px;display:inline-flex;align-items:center;justify-content:center}
  .row .acts .status-sel{min-height:38px}
}

/* ---- 2026-10-24 observer：必填标记对比度 + 选填提示 ---- */
.mbody .req{color:#ff7b7b;font-weight:700;font-size:13px}
.mbody .opt{color:#7f93b0;font-size:11px;font-weight:400;margin-left:4px}

.opt2{display:block;color:#6b7f9c;font-size:11px;margin-top:2px}
.opt2{display:block;color:#6b7f9c;font-size:11px;margin-top:3px;line-height:1.4}

/* ---- 终检修正：提示行可关闭 + 通道栏手机单行滚动 ---- */
.pnote{display:flex;align-items:flex-start;gap:8px}
.pnote .notex{margin-left:auto;background:none;border:0;color:#8aa2c6;font-size:16px;line-height:1;cursor:pointer;padding:0 2px;flex:0 0 auto}
.pnote .notex:hover{color:#e5edff}
@media (max-width: 820px){
  /* ★ 2026-10-26：手机也不许横向藏渠道（同样会「看不见也滚不出来」）→ 换行 */
  .chanbar{flex-wrap:wrap;overflow-x:visible;gap:6px;padding:7px 12px}
  .chan{font-size:12px;padding:5px 9px;white-space:nowrap;flex:0 0 auto}
}

/* ================= 2026-10-24 视觉打磨（小白视角） ================= */
/* 档位色块：A 绿 / B 蓝 / C 灰（原来 C 用黄色，看着像"警告"，其实只是"其他"） */
.tier{width:30px!important;height:30px!important;border-radius:10px!important;font-size:13px!important;letter-spacing:0}
.tier.C{background:rgba(148,163,184,.16);color:#94a3b8}

/* 行 hover / 当前行，让"我现在看的是哪条"看得见 */
.row{transition:background .12s,border-color .12s}
.row:hover{background:rgba(59,130,246,.06);border-color:rgba(59,130,246,.35)}

/* 副标题里的迷你徽标（信息完整度 / 条件核对 / 抓取时间） */
.mini{font-size:11px;padding:0 5px;border-radius:5px;background:rgba(148,163,184,.12);color:#94a3b8;white-space:nowrap}
.mini.ok{color:#4ade80;background:rgba(74,222,128,.10)}
.mini.warn{color:#fbbf24;background:rgba(251,191,36,.10)}
.mini.bad{color:#f87171;background:rgba(248,113,113,.10)}
.mini.stale{color:#fbbf24;background:rgba(251,191,36,.14);border:1px solid rgba(251,191,36,.35)}

/* 首屏主行动按钮 */
.pact .go{background:linear-gradient(180deg,#3b82f6,#2563eb);color:#fff;border:0;border-radius:10px;
  padding:10px 18px;font-size:15px;font-weight:600;cursor:pointer;box-shadow:0 4px 14px rgba(37,99,235,.35)}
.pact .go:hover{filter:brightness(1.08)}
.pact .go b{font-size:17px;margin:0 2px}

/* 首次引导条 */
.guide{grid-column:1/-1;display:flex;flex-wrap:wrap;gap:10px 18px;align-items:center;
  background:rgba(59,130,246,.08);border:1px solid rgba(59,130,246,.35);border-radius:12px;padding:12px 14px}
.guide .gstep{font-size:13px;color:#c7d6ea;display:flex;gap:7px;align-items:center}
.guide .gstep b{display:inline-grid;place-items:center;width:20px;height:20px;border-radius:50%;
  background:#2563eb;color:#fff;font-size:12px;flex:0 0 auto}
.guide .gclose{margin-left:auto;background:rgba(255,255,255,.08);border:1px solid rgba(255,255,255,.18);
  color:#dbe6f7;border-radius:8px;padding:6px 12px;font-size:13px;cursor:pointer}
.guide .gclose:hover{background:rgba(255,255,255,.14)}

@media (max-width:820px){
  .pact .go{flex:1 1 100%;text-align:center}
  .guide .gstep{font-size:12px}
  .guide{order:9}
}

/* ---- 终检2：手机端只留必要信息（徽标进详情），一屏多看几条 ---- */
@media (max-width: 820px){
  .row .main .mini{display:none}
  .row{padding:9px 12px}
  .row .title{font-size:14px;line-height:1.3;max-height:2.6em}
}


/* 2026-10-24：行内四列在窄桌面下的兜底（实测操作列 152px 会溢出盖住截止日） */
.row .acts .status-sel{max-width:118px}
@media (max-width: 1100px){
  .row{grid-template-columns:48px minmax(0,1fr) 92px 196px;gap:8px;padding:10px 12px}
}

/* ---- 2026-10-24 列表列头（用户要求「以列的方式显示」） ---- */
.rowhead{
  display:grid;grid-template-columns:52px minmax(0,1fr) 100px 208px;gap:10px;
  padding:9px 16px;font-size:11px;letter-spacing:.03em;color:var(--muted);
  background:rgba(255,255,255,.02);border-bottom:1px solid var(--line);
  position:sticky;top:0;z-index:2;backdrop-filter:blur(6px);
}
.rowhead .ta-r{text-align:right}
.row .dl.none{color:#4d5666;font-weight:400}
@media (max-width:1100px){
  .rowhead{grid-template-columns:48px minmax(0,1fr) 92px 196px;gap:8px;padding:8px 12px}
}
@media (max-width:820px){
  .rowhead{display:none}
}

/* ---- 2026-10-24 操作区固定三格槽位（缺链接时也不塌） ---- */
.row .acts{
  display:grid!important;
  /* 112+36+48 + 2×6 = 208，必须与 .rowhead 第 4 列同宽，否则列头对不上控件 */
  grid-template-columns:minmax(0,112px) 36px 48px;
  gap:6px;justify-content:end;align-items:center;overflow:visible;
}
.row .acts .status-sel{max-width:none;width:100%}
.row .acts .act{width:100%;text-align:center;box-sizing:border-box}
.act.act-off{color:#4d5666;border-color:#2b323d;cursor:default;pointer-events:none}
@media (max-width:1100px){
  .row .acts{grid-template-columns:minmax(0,110px) 38px 52px}
}
@media (max-width:820px){
  /* 手机上不套三格槽位，否则每个控件 width:100% 会各自占一行，行高从 132 涨到 220 */
  .row .acts{display:flex!important;flex-wrap:wrap;gap:8px}
  .row .acts .act{width:auto!important;min-width:56px}
  .row .acts .status-sel{width:auto!important;min-width:104px;max-width:none}
}

/* ---- 列头提亮（observer：与首行同底色，灰字被压下去读着费力） ---- */
.rowhead{
  background:#141922!important;
  color:#a8b4c6!important;
  font-weight:600;
  border-bottom:1px solid #2c3543!important;
  box-shadow:0 1px 0 rgba(255,255,255,.05), 0 6px 14px rgba(0,0,0,.25);
}
.rowhead .ta-r{color:#b7c3d6}


/* ---- 2026-10-24 列头第 4 列：与操作控件同网格，逐格对齐 ---- */
.rowhead .hacts{
  display:grid;grid-template-columns:minmax(0,112px) 36px 48px;gap:6px;
  justify-content:end;align-items:center;
}
.rowhead .hacts i{
  font-style:normal;text-align:center;font-size:11px;color:#b7c3d6;
}
@media (max-width:1100px){
  .rowhead .hacts{grid-template-columns:minmax(0,106px) 34px 46px}
  .row .acts{grid-template-columns:minmax(0,106px) 34px 46px}
}


/* ---- 2026-10-24 副标题换成可换行的 flex（原单行省略号会把徽标裁掉，实测 480 个元素溢出） ---- */
.row .sub{
  display:flex;flex-wrap:wrap;align-items:center;gap:6px 8px;
  white-space:normal!important;overflow:visible!important;text-overflow:clip!important;
  font-size:12px;color:var(--muted);margin-top:3px;
}
.row .sub .cotxt{
  min-width:0;max-width:100%;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}
.row .sub .mini{flex:0 0 auto}
@media (max-width:820px){
  .row .sub{gap:4px 6px}
  .chan{min-height:34px}
}

/* ---- 数据新鲜度面板 ---- */
.srchead{font-size:13px;color:#c7d6ea;margin-bottom:8px}
.srcrow{display:grid;grid-template-columns:1fr 64px 62px 76px;gap:8px;align-items:center;
  padding:6px 8px;border-radius:8px;font-size:12.5px}
.srcrow + .srcrow{margin-top:2px}
.srcrow .srcname{color:#dbe6f7;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.srcrow .srcch{color:#8b95a5}
.srcrow .srccount{color:#a8b4c6;text-align:right}
.srcrow .srcdays{text-align:right;color:#a8b4c6}
.srcrow.stale{background:rgba(224,90,90,.10)} .srcrow.stale .srcdays{color:#ff7b7b;font-weight:600}
.srcrow.unknown{background:rgba(139,149,165,.10)} .srcrow.unknown .srcdays{color:#8b95a5}
.srcrow.warn{background:rgba(224,163,62,.08)} .srcrow.warn .srcdays{color:#e0a33e}
.srcwarn{margin-top:10px;font-size:12px;color:#e0a33e}

/* ---- 2026-10-24 终审：主行动格 / 抽屉分组 / 危险区 / 无链接区分 ---- */
.pcell.go-cell{background:linear-gradient(180deg,rgba(76,141,255,.18),rgba(76,141,255,.06));border-color:rgba(76,141,255,.55)!important}
.pcell.go-cell .pnum{color:#9dc0ff}
.pcell.go-cell .plabel{color:#b8cdff;font-weight:600}
.pcell.go-cell:hover{transform:translateY(-2px);box-shadow:0 6px 18px rgba(76,141,255,.25)}

.dgroup{margin:14px 0 6px;font-size:11px;letter-spacing:.06em;color:#7d8ea8;font-weight:600}
.dgroup:first-child{margin-top:4px}

.act.danger{color:#ff7b7b;border-color:rgba(224,90,90,.45);margin-top:4px}
.act.danger:hover{background:rgba(224,90,90,.12);color:#ff9b9b}

/* 「无链接」与「投递」必须一眼可分：虚线灰框、无填充 */
.act.act-off{color:#5b6675!important;border-style:dashed!important;border-color:#39424f!important;background:transparent!important}

/* 抽屉右上角按钮拉开间距，避免误触关闭 */
.dhead .dnav{display:flex;gap:8px;align-items:center}
.dhead .dnav .act{min-width:34px;min-height:30px}

/* 筛选栏窄时状态 chip 不截断 */
@media (max-width:1100px){ .filters .chip{font-size:12px;padding:4px 8px} }


/* ---- 2026-10-24 终审第二轮 ---- */
/* ① 「该投的」降权为描边，避免与下方蓝色通道 Tab 形成双蓝块；箭头放大让它像入口 */
.pcell.go-cell{
  background:linear-gradient(180deg,rgba(76,141,255,.10),rgba(76,141,255,.03))!important;
  border:1.5px solid rgba(76,141,255,.55)!important;
}
.pcell.go-cell .pnum{color:#cfe0ff!important}
.pcell.go-cell .plabel{color:#cfe0ff;font-weight:700}
.pcell.go-cell .plabel::after{content:'  ➜';font-size:14px;font-weight:700;opacity:.95}

/* ② 分组标题加浓，扫读时不会跳过去 */
.dgroup{color:#9fb0c9!important;font-weight:700!important;letter-spacing:.05em;
  border-bottom:1px solid rgba(255,255,255,.08);padding-bottom:5px}

/* ③ 抽屉只读信息折叠，控制总长度 */
.dmore{margin:10px 0 4px}
.dmore summary{cursor:pointer;font-size:12px;color:#8b95a5;padding:6px 0;list-style:none}
.dmore summary::-webkit-details-marker{display:none}
.dmore summary::before{content:'▸ ';color:#5b6675}
.dmore[open] summary::before{content:'▾ '}
.dmore .muted{font-size:12px}

/* ---- 终审第三轮：主入口补权重 + 折叠标题可点感 ---- */
.pcell.go-cell{
  background:linear-gradient(180deg,rgba(76,141,255,.20),rgba(76,141,255,.06))!important;
  border:2px solid rgba(120,170,255,.85)!important;
  box-shadow:0 4px 14px rgba(76,141,255,.18)!important;
}
.pcell.go-cell .plabel{color:#e3edff!important}
.dmore summary{font-weight:700!important;color:#c7d6ea!important;font-size:12.5px!important}
.dmore summary::before{color:#7aa2ff!important}

/* ---- 2026-10-26 飞书通道：没有档位，第一格改显示「届次」 ---- */
.tier.G{
  background:rgba(148,163,184,.16);color:#cbd5e1;
  width:auto!important;min-width:26px!important;padding:0 5px!important;
  border-radius:6px!important;font-size:11px!important;font-weight:600!important;
  letter-spacing:0;white-space:nowrap;
}
/* 抽屉里的「键 / 值」两列表（飞书维度、来源冲突）——比一行行文字好扫 */
.dgrid{display:grid;grid-template-columns:92px minmax(0,1fr);gap:6px 12px;margin:6px 0 10px;font-size:13px;line-height:1.5}
.dgrid .dk{color:var(--muted)}
.dgrid .dv{word-break:break-word}
@media (max-width:820px){
  .dgrid{grid-template-columns:78px minmax(0,1fr);gap:5px 10px;font-size:12.5px}
}
/* ---- 2026-10-26 信息源徽标（两级：飞书抓取 / 自己抓取）---- */
.dbadge.src-feishu{background:#0e7490}     /* 青蓝：飞书共享表 */
.dbadge.src-self{background:#15803d}       /* 绿：自己抓取 */
.dbadge.src-unknown{background:#475569}    /* 灰：未登记来源 */
/* ---- 2026-10-26 标题行改 flex：长标题只省略文字，徽标永远露出来 ---- */
.row .title{display:flex;align-items:center;gap:6px;min-width:0;white-space:normal;overflow:visible;text-overflow:clip}
.row .title > .ttxt{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.row .title > .dbadge{flex:0 0 auto}/* 2026-10-26 队列分段标题 */
.qsep{margin:14px 16px 6px;padding:8px 10px;border-left:3px solid #b45309;background:rgba(180,83,9,.10);
  color:#fbbf24;font-size:12.5px;border-radius:4px}
/* 2026-10-26 「更多筛选」折叠（默认收起，手机上少滚 8 组） */
.fmore{margin:8px 0 4px}
.fmore>summary{cursor:pointer;font-size:12.5px;color:var(--muted);padding:9px 0;border-top:1px solid var(--line);list-style:none}
.fmore>summary::-webkit-details-marker{display:none}
.fmore>summary::before{content:'\25B8  '}
.fmore[open]>summary::before{content:'\25BE  '}
.fmore .fgroup:first-of-type{margin-top:10px}
/* 2026-10-26 observer：手机上岗位名被省略号吃掉，关键信息（是否财务岗）看不到 → 允许两行 */
@media (max-width:820px){
  .row .title > .ttxt{white-space:normal;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;line-height:1.35}
  .row .title{align-items:flex-start}
}
/* 已截止的行压暗，但不隐藏（隐藏会让计数与列表打架） */
.row.expired{opacity:.52}
.row.expired .dl{color:#64748b}
/* 性质不明：低调但可见（不用琥珀色，否则满屏像告警） */
.mini.nat-unknown{opacity:.55}
/* 2026-10-26 投递进程时间线（默认关，开了才出现） */
.tlist{margin:8px 0 4px}
.titem{display:flex;align-items:center;gap:8px;padding:5px 0;border-bottom:1px dashed rgba(148,163,184,.18);font-size:13px}
.titem .td{color:var(--muted);font-variant-numeric:tabular-nums;flex:0 0 44px}
.titem .tk{font-weight:600}
.titem .tn{color:var(--muted);flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.titem .tx{background:transparent;border:0;color:#64748b;font-size:16px;line-height:1;cursor:pointer;padding:0 4px}
.titem .tx:hover{color:#f87171}

/* ---- 2026-10-26 设计改版：今天 / 全部 / 我投过的 ---- */
.panel.slim{display:flex;flex-wrap:wrap;gap:10px;align-items:center;padding:10px 16px}
.panel.slim .pnote{flex:1 1 auto;min-width:0}
.panel.slim .pact{flex:0 0 auto}
.todayhead{padding:11px 16px;font-size:13px;color:#9aa4b2;border-bottom:1px solid var(--line);background:rgba(255,255,255,.02)}
#view-today .rows{min-width:0}
#view-today .morewrap{padding:12px 16px}
#view-today .morewrap .ghost{width:100%}

/* 我投过的：四列（日期 / 岗位 / 状态 / 跟进+来源） */
.row.arow{grid-template-columns:96px minmax(0,1fr) 96px 210px}
.rowhead.ah{grid-template-columns:96px minmax(0,1fr) 96px 210px}
.arow .adate{color:var(--muted);font-size:12px;font-variant-numeric:tabular-nums;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.arow .astatus{font-size:12px;text-align:right;color:var(--ok);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
#view-applied .rows{min-width:0}
@media (max-width:820px){
  .row.arow{grid-template-columns:72px minmax(0,1fr) 76px;gap:8px;padding:10px 12px}
  .rowhead.ah{display:none}
  .arow .acts{display:none}
}

/* ★ 2026-10-26 修：.view.active 是 display:flex（横向），今天/我投过的没有左侧筛选栏，
   三个子块会被排成一行 → 表格被挤、更多按钮飘到右边。这两个视图必须纵向排列。 */
#view-today.active, #view-applied.active{flex-direction:column}
#view-today .todayhead, #view-applied .todayhead{flex:0 0 auto}
#view-today .tablewrap, #view-applied .tablewrap{flex:1 1 auto;min-height:0;width:100%}
#view-today .morewrap{flex:0 0 auto;padding:12px 16px;display:flex;gap:12px;align-items:center}
#view-today .morewrap .ghost{flex:1 1 auto}

/* 2026-10-27 修：「再显示 80 条」贴到窗口下沿会被切 → 改成悬浮在列表右下角 */
#view-today .morewrap{position:sticky;bottom:0;background:linear-gradient(to top,rgba(15,17,21,.96),rgba(15,17,21,0));padding:10px 16px 14px;z-index:3}
#view-today .morewrap .ghost{background:var(--panel2);border-color:var(--line)}

#src-alert{margin:10px 16px;padding:12px 14px;border-left:4px solid #e05a5a;background:rgba(224,90,90,.10);border-radius:6px;color:#ffd7d7}
#src-alert .sa-t{font-weight:700;font-size:14px;margin-bottom:6px}
#src-alert .sa-d{font-size:13px;color:#e8b4b4;margin-bottom:6px}
#src-alert .sa-s{font-size:13px;font-family:ui-monospace,Consolas,monospace;background:rgba(0,0,0,.25);padding:4px 8px;border-radius:4px;margin:4px 0}
#src-alert .sa-h{font-size:12px;color:#b98b8b;margin-top:8px;line-height:1.5}

/* 2026-10-27：顶栏高频入口——窄屏隐藏（手机上顶栏已经挤满，放回 ⋯ 菜单） */
.top-extra{display:none}
@media (min-width:1100px){ .top-extra{display:inline-flex;flex:0 0 auto} }

/* 登录失效状态位（只在有源失效时出现，不是常驻按钮） */
.login-chip{color:var(--warn);border-color:#5a4520;background:rgba(224,163,62,.10)}
.login-chip:hover{color:#ffd08a;border-color:var(--warn);background:rgba(224,163,62,.18)}

/* 登录注册表状态（2026-10-28） */
.lsites{margin:10px 0;border:1px solid var(--line);border-radius:8px;overflow:hidden}
.lsite{display:flex;align-items:center;gap:8px;padding:8px 10px;border-bottom:1px solid var(--line);font-size:13px}
.lsite:last-child{border-bottom:0}
.lbadge{font-size:11px;padding:1px 7px;border-radius:999px;border:1px solid var(--line);color:var(--muted)}
.lbadge.ok{color:var(--ok);border-color:#245c3c;background:rgba(47,191,113,.08)}
.lbadge.bad{color:var(--bad);border-color:#5c2424;background:rgba(224,90,90,.10)}
.lbadge.warn{color:var(--warn);border-color:#5a4520;background:rgba(224,163,62,.10)}
.lnote{font-size:12px;margin-left:auto}
.lg-opt{display:flex;align-items:center;gap:6px;margin-top:10px;font-size:12px}
@media (max-width:1100px){.row .sub .sub-deadline{display:inline}}

/* 源候选面板（2026-10-28）：只读台账，列 = 公司/线索/2027/三地/财务/官方探测/状态 */
.mbox-wide{width:min(980px,100%)}
.candwrap{overflow:auto;max-height:62vh}
.candtable{border-collapse:collapse;width:100%;font-size:12.5px}
.candtable th,.candtable td{border-bottom:1px solid #243044;padding:7px 8px;text-align:left;vertical-align:top}
.candtable th{position:sticky;top:0;background:#151d2c;color:#9fb0c9;font-weight:600;white-space:nowrap;z-index:1}
.candtable td.c-company{color:#e5edff;font-weight:600}
.candtable td.c-clue{color:#9aa9c0;max-width:260px}
.candtable td.c-num{text-align:right;color:#c7d6ea;white-space:nowrap;font-variant-numeric:tabular-nums}
.candtable td.c-probe{color:#8b95a5;max-width:300px;word-break:break-all;font-size:11.5px}
.candchip{display:inline-block;padding:1px 8px;border-radius:999px;font-size:11px;border:1px solid #2c3a52;color:#9fb0c9;white-space:nowrap}
.candchip.c-ready{color:#2fbf71;border-color:#245c3c;background:rgba(47,191,113,.10)}
.candchip.c-promoted{color:#2fbf71;border-color:#245c3c;background:rgba(47,191,113,.06)}
.candchip.c-lead{color:#60a5fa;border-color:#1f4d80;background:rgba(59,130,246,.10)}
.candchip.c-dead{color:#8b95a5;border-color:#2c3a52;background:rgba(139,149,165,.08)}
.candchip.c-rej{color:#6b7280;border-color:#2a3242;background:rgba(0,0,0,.18)}
.candchip.c-next{color:#e0a33e;border-color:#5a4520;background:rgba(224,163,62,.10)}
#cand-chip.cand-ready{color:#2fbf71;border-color:#245c3c}
@media (max-width:820px){.candtable td.c-clue,.candtable td.c-probe{max-width:150px}}
