/* ===========================================================
   爱途拾光 · 掌兑系统（企业端）
   设计令牌：主色蓝 #1565d8 / 强调橙 #e2552e / 浅色主题
   间距标准：4px 基准刻度 + 5 个语义令牌（见 :root 注释）

   间距规约（改样式前先看这里）
   ─────────────────────────────────────────────────────────
   1. 页面纵向节奏只由 .stack 容器的 gap 决定（--gap-block = 16px）。
      不要在视图里给区块写 margin-top / margin-bottom。
   2. 卡片内边距左右一律 --pad-card（16px），保证标题、页签、表格左边缘对齐。
   3. 页签卡片之间横向 = 纵向 = --gap-tab（12px），四周留白 = --pad-tab（16px）。
   4. 只允许使用 --sp-1/2/3/4/5/6 这几档值，禁止再出现 9 / 11 / 13 / 15 / 18 这类碎值。
      例外（组件内密度，不参与节奏统一）：.btn / .input / table.tbl 单元格 / .tag 的内边距。
   =========================================================== */
:root{
  --blue:#1565d8; --blue-d:#0f4fae; --blue-l:#eaf1fd; --blue-b:#c3d8f7;
  --orange:#e2552e; --orange-l:#fdeee9; --orange-b:#f7c9b8;
  --bg:#f4f6fa; --surface:#ffffff; --surface-2:#fafbfd;
  --border:#e2e7f0; --border-2:#eef1f7;
  --text:#1a2233; --text-2:#5a6a85; --text-3:#93a0b8;
  --green:#0f7a55; --green-l:#e8f6f0;
  --amber:#b26a00; --amber-l:#fdf3e3;
  --red:#c33c3c; --red-l:#fdecec;
  --radius:10px; --radius-sm:7px;
  --shadow-1:0 1px 2px rgba(20,40,80,.06),0 1px 3px rgba(20,40,80,.05);
  --shadow-2:0 6px 24px rgba(20,40,80,.12);

  /* ---------- 间距刻度（4px 基准） ---------- */
  --sp-1:4px; --sp-2:8px; --sp-3:12px; --sp-4:16px; --sp-5:20px; --sp-6:24px;
  /* ---------- 语义间距令牌：页面骨架与页签的间距只由这 5 个值决定 ---------- */
  --gap-block:var(--sp-4);   /* 页面内相邻区块（页头 / 看板 / 页签区 / 内容卡）之间的垂直间距 */
  --gap-grid:var(--sp-3);    /* 卡片内部小网格（KPI 等）之间的间距 */
  --gap-tab:var(--sp-3);     /* 页签卡片之间：横向 = 纵向 = 12px */
  --pad-card:var(--sp-4);    /* 卡片内边距：左右一律用它，保证标题 / 页签 / 表格左边缘对齐 */
  --pad-tab:var(--sp-4);     /* 页签区四周留白：与 --pad-card 相等，页签不贴边框 */

  --sidebar-w:236px;
  --font:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Microsoft YaHei","Hiragino Sans GB",sans-serif;
}
*{box-sizing:border-box}
html,body{margin:0;padding:0;height:100%}
body{
  font-family:var(--font); color:var(--text); background:var(--bg);
  font-size:14px; line-height:1.55; -webkit-font-smoothing:antialiased;
}
a{color:var(--blue);text-decoration:none}
button{font-family:inherit}
::-webkit-scrollbar{width:9px;height:9px}
::-webkit-scrollbar-thumb{background:#ccd5e4;border-radius:9px}
::-webkit-scrollbar-thumb:hover{background:#b3c0d6}
::-webkit-scrollbar-track{background:transparent}

/* ---------- 启动屏 ---------- */
.boot-screen{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100vh;gap:var(--sp-3)}
.boot-mark{width:56px;height:56px;border-radius:16px;background:linear-gradient(135deg,var(--blue),var(--blue-d));
  color:#fff;display:flex;align-items:center;justify-content:center;font-size:26px;font-weight:700;box-shadow:var(--shadow-2)}
.boot-title{font-size:17px;font-weight:600;letter-spacing:.5px}
.boot-sub{color:var(--text-3);font-size:13px}

/* ---------- 本地数据异常：顶部提示条 + 自救页 ---------- */
.db-banner{display:flex;align-items:center;gap:var(--sp-3);flex-wrap:wrap;
  margin:var(--sp-3) var(--sp-5) 0;padding:var(--sp-2) var(--sp-3);
  background:var(--amber-l);border:1px solid rgba(178,106,0,.25);border-radius:var(--radius-sm);
  font-size:12.8px;color:var(--amber)}
.db-banner .bi{font-size:14px;line-height:1}
.db-banner .bt{flex:1;min-width:220px;line-height:1.6}
.db-banner .btn{padding:var(--sp-1) var(--sp-3);font-size:12.5px}

/* 版本更新提示条：标签页长期开着时发现线上已更新，顶部悬浮一条 */
.update-bar{position:fixed;left:50%;transform:translateX(-50%);top:12px;z-index:9999;
  display:flex;align-items:center;gap:var(--sp-3);max-width:min(760px,92vw);
  padding:10px var(--sp-3) 10px var(--sp-4);
  background:var(--blue);border-radius:var(--radius);box-shadow:var(--shadow-2);
  color:#fff;font-size:13px;line-height:1.5}
.update-bar .ub-i{font-size:15px;line-height:1}
.update-bar .ub-t{flex:1;min-width:0}
.update-bar .ub-t b{font-weight:700}
.update-bar .ub-go{border:0;background:#fff;color:var(--blue-d);font-weight:600;
  font-size:12.5px;padding:6px 14px;border-radius:20px;cursor:pointer;white-space:nowrap}
.update-bar .ub-go:hover{background:#f2f7ff}
.update-bar .ub-x{border:0;background:transparent;color:rgba(255,255,255,.78);
  font-size:17px;line-height:1;cursor:pointer;padding:2px 6px}
.update-bar .ub-x:hover{color:#fff}

.fatal-wrap{min-height:100vh;display:flex;align-items:center;justify-content:center;
  padding:var(--sp-5);background:var(--bg)}
.fatal-card{max-width:640px;width:100%;background:var(--surface);border:1px solid var(--border);
  border-radius:14px;box-shadow:var(--shadow-2);padding:var(--sp-6)}
.fatal-card .fi{width:44px;height:44px;border-radius:var(--radius);background:var(--amber-l);color:var(--amber);
  display:flex;align-items:center;justify-content:center;font-size:22px;margin-bottom:var(--sp-4)}
.fatal-card h2{font-size:18px;margin:0 0 var(--sp-2)}
.fatal-card .fdesc{font-size:13px;color:var(--text-2);line-height:1.7;background:var(--surface-2);
  border:1px solid var(--border-2);border-radius:var(--radius-sm);padding:var(--sp-3);
  margin-bottom:var(--sp-4);word-break:break-word}
.fatal-card .flist{margin:0 0 var(--sp-4);padding-left:var(--sp-5);font-size:13px;
  color:var(--text-2);line-height:1.9}
.fatal-card .flist b{color:var(--text)}
.fatal-card .facts{display:flex;flex-wrap:wrap;gap:var(--sp-2);margin-bottom:var(--sp-5)}
.fatal-card .facts span{font-size:12px;color:var(--text-3);background:var(--surface-2);
  border:1px solid var(--border-2);border-radius:20px;padding:var(--sp-1) var(--sp-3)}
.fatal-card .fbtns{display:flex;gap:var(--sp-2);flex-wrap:wrap}

.auth-diag{margin-top:var(--sp-4);text-align:center}
.linkbtn{border:0;background:transparent;color:var(--blue);font-size:12.5px;cursor:pointer;
  text-decoration:underline;text-underline-offset:3px;padding:var(--sp-1)}
.linkbtn:hover{color:var(--blue-d)}

/* ---------- 登录页 ---------- */
.auth-wrap{min-height:100vh;display:grid;grid-template-columns:1.05fr .95fr}
.auth-hero{background:linear-gradient(150deg,#0f4fae,#1565d8 42%,#2b7ef0);color:#fff;padding:56px 52px;
  display:flex;flex-direction:column;justify-content:space-between;position:relative;overflow:hidden}
.auth-hero::after{content:"";position:absolute;right:-140px;bottom:-160px;width:460px;height:460px;border-radius:50%;
  background:rgba(255,255,255,.07)}
.auth-hero::before{content:"";position:absolute;right:60px;top:-120px;width:280px;height:280px;border-radius:50%;
  background:rgba(226,85,46,.25)}
.auth-logo{display:flex;align-items:center;gap:var(--sp-3);font-size:16px;font-weight:600;letter-spacing:1px;position:relative;z-index:2}
.auth-logo .mk{width:38px;height:38px;border-radius:11px;background:rgba(255,255,255,.16);display:flex;align-items:center;
  justify-content:center;font-size:19px;font-weight:700;backdrop-filter:blur(4px)}
.auth-hero h1{font-size:34px;line-height:1.3;margin:0 0 var(--sp-4);font-weight:700;position:relative;z-index:2}
.auth-hero p{color:rgba(255,255,255,.82);font-size:14px;line-height:1.9;margin:0;position:relative;z-index:2;max-width:430px}
.auth-hero .pill-row{display:flex;flex-wrap:wrap;gap:var(--sp-2);margin-top:var(--sp-5);position:relative;z-index:2}
.auth-hero .pill{background:rgba(255,255,255,.14);border:1px solid rgba(255,255,255,.22);border-radius:20px;
  padding:var(--sp-1) var(--sp-3);font-size:12.5px}
.auth-panel{display:flex;align-items:center;justify-content:center;padding:40px var(--sp-6);background:var(--surface)}
.auth-card{width:100%;max-width:376px}
.auth-card h2{margin:0 0 6px;font-size:21px;font-weight:600}
.auth-card .sub{color:var(--text-2);font-size:13px;margin-bottom:var(--sp-5)}
.tabs{display:flex;background:var(--surface-2);border:1px solid var(--border);border-radius:9px;padding:var(--sp-1);
  margin-bottom:var(--sp-4)}
.tabs button{flex:1;border:0;background:transparent;padding:var(--sp-2) var(--sp-1);border-radius:7px;font-size:13px;
  color:var(--text-2);cursor:pointer;font-weight:500;transition:.15s}
.tabs button.on{background:#fff;color:var(--blue);box-shadow:var(--shadow-1);font-weight:600}
.field{margin-bottom:var(--gap-block)}
.field label{display:block;font-size:12.5px;color:var(--text-2);margin-bottom:6px;font-weight:500}
.field label .req{color:var(--orange)}
/* 表单控件内边距属组件密度，不参与节奏统一 */
.input,select.input,textarea.input{width:100%;border:1px solid var(--border);border-radius:var(--radius-sm);padding:9px 11px;
  font-size:13.5px;color:var(--text);background:#fff;outline:none;transition:.15s;font-family:inherit}
.input:focus{border-color:var(--blue);box-shadow:0 0 0 3px var(--blue-l)}
textarea.input{resize:vertical;min-height:70px;line-height:1.6}
.btn{border:1px solid var(--border);background:#fff;color:var(--text);padding:9px 15px;border-radius:var(--radius-sm);
  font-size:13.5px;cursor:pointer;transition:.15s;font-weight:500;display:inline-flex;align-items:center;gap:var(--sp-1);white-space:nowrap}
.btn:hover{border-color:#c9d4e5;background:var(--surface-2)}
.btn-primary{background:var(--blue);border-color:var(--blue);color:#fff}
.btn-primary:hover{background:var(--blue-d);border-color:var(--blue-d)}
.btn-danger{background:#fff;border-color:var(--orange-b);color:var(--red)}
.btn-danger:hover{background:var(--red-l)}
.btn-block{width:100%;justify-content:center;padding:11px}
.btn-sm{padding:5px 10px;font-size:12.5px;border-radius:6px}
.btn:disabled{opacity:.55;cursor:not-allowed}
.auth-alt{display:flex;justify-content:space-between;font-size:12.5px;color:var(--text-2);margin:-2px 0 var(--sp-4)}
.auth-note{margin-top:var(--sp-5);padding:var(--sp-3);background:var(--blue-l);border:1px solid var(--blue-b);border-radius:8px;
  font-size:12.5px;color:var(--blue-d);line-height:1.7}
.alert{padding:9px 12px;border-radius:8px;font-size:13px;margin-bottom:var(--gap-block);line-height:1.6}
.alert-err{background:var(--red-l);color:var(--red);border:1px solid #f4cccc}
.alert-ok{background:var(--green-l);color:var(--green);border:1px solid #c8e6d8}
.alert-info{background:var(--blue-l);color:var(--blue-d);border:1px solid var(--blue-b)}
.alert-warn{background:var(--amber-l);color:var(--amber);border:1px solid #f0dcb8}

/* ---------- 主布局 ---------- */
.layout{display:grid;grid-template-columns:var(--sidebar-w) 1fr;min-height:100vh}
.sidebar{background:#fff;border-right:1px solid var(--border);display:flex;flex-direction:column;
  position:sticky;top:0;height:100vh;z-index:40}
.brand{padding:17px var(--sp-4);border-bottom:1px solid var(--border-2);display:flex;align-items:center;gap:var(--sp-3)}
.brand .mk{width:33px;height:33px;border-radius:10px;background:linear-gradient(135deg,var(--blue),var(--blue-d));
  color:#fff;display:flex;align-items:center;justify-content:center;font-weight:700;font-size:16px;flex-shrink:0}
.brand .txt{min-width:0}
.brand .t1{font-size:14px;font-weight:700;letter-spacing:.3px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.brand .t2{font-size:11px;color:var(--text-3);white-space:nowrap}
.nav{flex:1;overflow-y:auto;padding:var(--sp-3) var(--sp-2) var(--sp-6)}
.nav-group{margin-bottom:2px}
.nav-group>.gh{font-size:11px;color:var(--text-3);font-weight:600;letter-spacing:1px;
  padding:var(--sp-3) var(--sp-2) var(--sp-1);display:block}
/* 二级归口子标题（例：销售部下的「库存管理」）：比一级标题更轻，右侧带一条细线收口 */
.nav-group>.gh.sub{margin-top:var(--sp-2);padding:var(--sp-2) var(--sp-2) 2px;
  font-size:10.5px;letter-spacing:.6px;font-weight:600;color:var(--text-3);opacity:.9;
  display:flex;align-items:center;gap:var(--sp-2)}
.nav-group>.gh.sub::after{content:"";flex:1;height:1px;background:var(--border-2)}
.nav a{display:flex;align-items:center;gap:var(--sp-2);padding:var(--sp-2) var(--sp-2);border-radius:8px;color:var(--text-2);
  font-size:13.3px;margin-bottom:1px;transition:.13s;font-weight:500}
.nav a:hover{background:var(--surface-2);color:var(--text)}
.nav a.on{background:var(--blue-l);color:var(--blue-d);font-weight:600}
.nav a .ic{width:17px;text-align:center;font-size:14px;flex-shrink:0;opacity:.9}
.nav a .cnt{margin-left:auto;font-size:11px;color:var(--text-3);background:var(--surface-2);border-radius:9px;
  padding:0 var(--sp-1);min-width:20px;text-align:center}
.nav a.on .cnt{background:#fff;color:var(--blue)}
.sidebar-foot{padding:var(--sp-3);border-top:1px solid var(--border-2);font-size:11.5px;color:var(--text-3);line-height:1.6}
.main{min-width:0;display:flex;flex-direction:column}
.topbar{height:56px;background:#fff;border-bottom:1px solid var(--border);display:flex;align-items:center;gap:var(--sp-3);
  padding:0 var(--sp-5);position:sticky;top:0;z-index:30}
.burger{display:none;border:1px solid var(--border);background:#fff;border-radius:8px;width:34px;height:34px;cursor:pointer;
  align-items:center;justify-content:center;font-size:16px;color:var(--text-2)}
.crumb{font-size:14.5px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.crumb .p{color:var(--text-3);font-weight:400;font-size:12.5px;margin-left:var(--sp-2)}
.topbar .spacer{flex:1}
.mode-chip{font-size:11.5px;background:var(--amber-l);color:var(--amber);border:1px solid #f0dcb8;border-radius:20px;
  padding:3px 10px;white-space:nowrap;cursor:default}
/* 顶部产品选择器：全站唯一的「当前产品」入口（选定后各板块只呈现该产品） */
.prod-pick{display:flex;align-items:center;gap:var(--sp-2);padding:3px 8px 3px 10px;border:1px solid var(--border);
  border-radius:9px;background:var(--surface-2);flex-shrink:0;max-width:330px}
.prod-pick .pp-lb{font-size:11px;color:var(--text-3);white-space:nowrap}
.prod-pick .pp-sel{border:0;background:transparent;font-family:inherit;font-size:13.2px;font-weight:600;color:var(--blue-d);
  cursor:pointer;padding:3px 2px;max-width:188px;outline:none}
.prod-pick .pp-chip{font-size:10.5px;padding:1px 7px;border-radius:20px;white-space:nowrap}
.prod-pick .pp-link{border:0;background:transparent;color:var(--blue);font-family:inherit;font-size:11.5px;
  cursor:pointer;padding:2px 4px;white-space:nowrap}
.prod-pick .pp-link:hover{text-decoration:underline}
@media (max-width:900px){ .prod-pick .pp-lb{display:none} .prod-pick .pp-sel{max-width:118px} }
.who{display:flex;align-items:center;gap:var(--sp-2);padding:var(--sp-1) 6px var(--sp-1) var(--sp-1);border-radius:22px;
  border:1px solid var(--border);background:#fff;cursor:pointer;transition:.15s}
.who:hover{background:var(--surface-2)}
.avatar{width:28px;height:28px;border-radius:50%;background:linear-gradient(135deg,var(--blue),var(--blue-d));color:#fff;
  display:flex;align-items:center;justify-content:center;font-size:12.5px;font-weight:600;flex-shrink:0}
.who .nm{font-size:12.8px;font-weight:500;max-width:110px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.who .rl{font-size:11px;color:var(--text-3)}
.menu-pop{position:absolute;right:14px;top:52px;background:#fff;border:1px solid var(--border);border-radius:10px;
  box-shadow:var(--shadow-2);min-width:196px;padding:6px;z-index:60}
.menu-pop button{display:block;width:100%;text-align:left;border:0;background:transparent;padding:var(--sp-2) 11px;border-radius:7px;
  font-size:13px;cursor:pointer;color:var(--text)}
.menu-pop button:hover{background:var(--surface-2)}
.menu-pop .sep{height:1px;background:var(--border-2);margin:var(--sp-1) 0}
.menu-pop .hd{padding:6px 11px;font-size:11.5px;color:var(--text-3)}
.content{padding:var(--sp-5);flex:1;min-width:0}
/* 页头：板块名称只在顶栏面包屑出现一次，这里**不再重复渲染大标题**。
   说明文字压成一行（空间不够时省略号，悬浮 title 看全文），动作按钮靠右，整条更瘦。 */
.page-head{display:flex;align-items:center;gap:var(--sp-4);flex-wrap:wrap;margin-bottom:var(--gap-block)}
.page-head .desc{color:var(--text-2);font-size:12.8px;line-height:1.65;max-width:820px;
  min-width:180px;flex:0 1 auto;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.page-head .acts{margin-left:auto;display:flex;gap:var(--sp-2);flex-wrap:wrap}

/* ---------- 卡片 / KPI ---------- */
.card{background:#fff;border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow-1)}
.card+.card{margin-top:var(--gap-block)}
.card-hd{padding:var(--sp-3) var(--pad-card);border-bottom:1px solid var(--border-2);display:flex;align-items:center;
  gap:var(--sp-3);flex-wrap:wrap}
.card-hd h3{margin:0;font-size:14.5px;font-weight:600}
.card-hd .hint{font-size:12px;color:var(--text-3)}
.card-hd .acts{margin-left:auto;display:flex;gap:var(--sp-2);flex-wrap:wrap}
.card-bd{padding:var(--pad-card)}
.card-bd.tight{padding:0}
.kpi-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(184px,1fr));gap:var(--gap-grid)}
.kpi{background:#fff;border:1px solid var(--border);border-radius:var(--radius);
  padding:var(--sp-3) var(--pad-card);box-shadow:var(--shadow-1);position:relative;overflow:hidden}
.kpi::before{content:"";position:absolute;left:0;top:0;bottom:0;width:3px;background:var(--blue)}
.kpi.k-o::before{background:var(--orange)}
.kpi.k-g::before{background:var(--green)}
.kpi.k-a::before{background:var(--amber)}
.kpi .lb{font-size:12.3px;color:var(--text-2);margin-bottom:var(--sp-2);display:flex;align-items:center;gap:var(--sp-2)}
.kpi .vl{font-size:23px;font-weight:700;letter-spacing:-.5px;line-height:1.2;font-variant-numeric:tabular-nums}
.kpi .vl small{font-size:12.5px;font-weight:500;color:var(--text-3);margin-left:var(--sp-1);letter-spacing:0}
.kpi .ft{font-size:11.5px;color:var(--text-3);margin-top:6px}
.grid-2{display:grid;grid-template-columns:repeat(auto-fit,minmax(330px,1fr));gap:var(--gap-block)}
.grid-3{display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:var(--gap-block)}

/* ---------- 页面堆叠容器：页面竖向间距的唯一来源 ----------
   用法：把视图根节点设为 .stack，其直接子元素之间自动获得统一的 --gap-block 间距。
   目的是彻底消除「有的区块贴在一起（0）、有的隔两倍」的问题：堆叠容器内所有子元素
   自带的外边距（含内联样式）一律失效，间距只由 gap 决定。 */
.stack{display:flex;flex-direction:column;gap:var(--gap-block)}
.stack>*{margin-top:0!important;margin-bottom:0!important;min-width:0}

/* ---------- 表格（单元格内边距属组件密度，不参与节奏统一） ---------- */
.table-wrap{overflow-x:auto}
table.tbl{width:100%;border-collapse:collapse;font-size:13px;min-width:640px}
table.tbl th{background:var(--surface-2);text-align:left;padding:9px 12px;font-weight:600;color:var(--text-2);font-size:12.3px;
  border-bottom:1px solid var(--border);white-space:nowrap;position:sticky;top:0;z-index:2}
table.tbl td{padding:9px 12px;border-bottom:1px solid var(--border-2);vertical-align:top}
table.tbl tbody tr:hover{background:#fbfcfe}
table.tbl td.num,table.tbl th.num{text-align:right;font-variant-numeric:tabular-nums;white-space:nowrap}
table.tbl td.act{white-space:nowrap;text-align:right}
table.tbl .ell{max-width:250px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:block}
/* 日期分组（提货台账「年 → 月」）：分组表头 + 组内小计 */
table.tbl tr.grp-row>td{background:var(--blue-l);border-top:1px solid var(--blue-b);border-bottom:1px solid var(--blue-b);
  padding:var(--sp-2) 12px;font-size:12.5px;color:var(--blue-d)}
table.tbl tr.grp-row .grp-k{font-weight:700;font-size:13px;letter-spacing:.2px}
table.tbl tr.grp-row .grp-n{margin-left:var(--sp-3);color:var(--text-3);font-size:11.8px}
table.tbl tr.grp-row .grp-s{margin-left:var(--sp-3);color:var(--text-2)}
/* 批量导入面板 */
.imp-row{display:flex;align-items:center;flex-wrap:wrap;gap:var(--sp-2);margin:var(--sp-3) 0}
.imp-row label.btn{margin:0}
.empty{padding:44px var(--sp-5);text-align:center;color:var(--text-3)}
.empty .big{font-size:30px;opacity:.35;margin-bottom:var(--sp-2)}
.empty .t{font-size:13.5px;margin-bottom:var(--sp-1);color:var(--text-2)}
.empty .s{font-size:12.3px}
.tag{display:inline-block;font-size:11.5px;padding:2px 8px;border-radius:11px;background:var(--surface-2);
  border:1px solid var(--border);color:var(--text-2);white-space:nowrap;line-height:1.6}
.tag-b{background:var(--blue-l);border-color:var(--blue-b);color:var(--blue-d)}
.tag-o{background:var(--orange-l);border-color:var(--orange-b);color:var(--orange)}
.tag-g{background:var(--green-l);border-color:#c8e6d8;color:var(--green)}
.tag-a{background:var(--amber-l);border-color:#f0dcb8;color:var(--amber)}
.tag-r{background:var(--red-l);border-color:#f4cccc;color:var(--red)}
.toolbar{display:flex;gap:var(--sp-2);flex-wrap:wrap;align-items:center;padding:var(--sp-3) var(--pad-card);
  border-bottom:1px solid var(--border-2)}
.toolbar .grow{flex:1;min-width:150px}
.toolbar .input{max-width:280px}
.pager{display:flex;align-items:center;gap:var(--sp-2);padding:var(--sp-3) var(--pad-card);border-top:1px solid var(--border-2);
  font-size:12.5px;color:var(--text-2);flex-wrap:wrap}
.pager .spacer{flex:1}
.pg-btn{border:1px solid var(--border);background:#fff;border-radius:6px;min-width:29px;height:29px;padding:0 var(--sp-2);
  cursor:pointer;font-size:12.5px;color:var(--text-2)}
.pg-btn.on{background:var(--blue);border-color:var(--blue);color:#fff;font-weight:600}
.pg-btn:disabled{opacity:.4;cursor:not-allowed}

/* ---------- 弹窗 ---------- */
.modal-mask{position:fixed;inset:0;background:rgba(18,28,48,.44);z-index:100;display:flex;align-items:flex-start;
  justify-content:center;padding:32px var(--pad-card);overflow-y:auto;backdrop-filter:blur(2px)}
.modal{background:#fff;border-radius:12px;width:100%;max-width:760px;box-shadow:var(--shadow-2);animation:pop .16s ease-out}
.modal.wide{max-width:900px}
.modal.narrow{max-width:440px}
@keyframes pop{from{transform:translateY(8px) scale(.99);opacity:0}to{transform:none;opacity:1}}
.modal-hd{padding:var(--sp-4) var(--pad-card);border-bottom:1px solid var(--border-2);display:flex;align-items:center;
  gap:var(--sp-3);position:sticky;top:0;background:#fff;border-radius:12px 12px 0 0;z-index:2}
.modal-hd h3{margin:0;font-size:15.5px;font-weight:600}
.modal-hd .sub{font-size:12px;color:var(--text-3);margin-top:2px}
.modal-hd .x{margin-left:auto;border:0;background:transparent;font-size:19px;color:var(--text-3);cursor:pointer;line-height:1;
  padding:var(--sp-1) var(--sp-2);border-radius:6px}
.modal-hd .x:hover{background:var(--surface-2);color:var(--text)}
.modal-bd{padding:var(--pad-card)}
.modal-ft{padding:var(--sp-4) var(--pad-card);border-top:1px solid var(--border-2);display:flex;gap:var(--sp-2);
  justify-content:flex-end;position:sticky;bottom:0;background:#fff;border-radius:0 0 12px 12px;flex-wrap:wrap}
/* 表单网格：横向列间距与纵向行间距统一为 --gap-block；
   网格内的 .field 不再自带下外边距，否则行距会变成「gap + margin」而明显大于列距。 */
.form-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(228px,1fr));gap:var(--gap-block)}
.form-grid>.field{margin-bottom:0}
.form-grid .span2{grid-column:1/-1}
.section-title{grid-column:1/-1;font-size:12px;font-weight:600;color:var(--blue-d);letter-spacing:.6px;border-left:3px solid
  var(--blue);padding-left:var(--sp-2);margin:0}
.hintline{font-size:11.5px;color:var(--text-3);margin-top:var(--sp-1);line-height:1.5}
.check-row{display:flex;align-items:center;gap:var(--sp-2);padding-top:var(--sp-6)}
.check-row input{width:16px;height:16px;accent-color:var(--blue);cursor:pointer}
.check-row label{margin:0;font-size:13px;color:var(--text)}

/* ---------- 提示条 ---------- */
.toasts{position:fixed;right:16px;bottom:16px;z-index:300;display:flex;flex-direction:column;gap:var(--sp-2);align-items:flex-end}
.toast{background:#fff;border:1px solid var(--border);border-left:3px solid var(--blue);border-radius:9px;
  padding:var(--sp-3) var(--pad-card);box-shadow:var(--shadow-2);font-size:13px;max-width:370px;animation:pop .16s ease-out}
.toast.err{border-left-color:var(--red)}
.toast.ok{border-left-color:var(--green)}
.toast.warn{border-left-color:var(--amber)}
.toast .tt{font-weight:600;margin-bottom:var(--sp-1)}
.toast .ms{color:var(--text-2);font-size:12.5px;line-height:1.6;word-break:break-word}

/* ---------- 图表 ---------- */
/* 图表按 680×H 的设计尺寸绘制，容器若铺满宽屏会整体等比放大 1.7~2 倍（字与线一起被吹大）。
   这里给一个宽度上限把它按接近 1:1 的比例呈现，宽屏上不再无限放大。 */
.chart-box{width:100%;max-width:900px;overflow:hidden}
.chart-box svg{display:block;width:100%;height:auto}
.legend{display:flex;flex-wrap:wrap;gap:var(--sp-3);margin-top:var(--sp-2);font-size:12px;color:var(--text-2)}
.legend i{display:inline-block;width:10px;height:10px;border-radius:3px;margin-right:var(--sp-1)}
.bar-line{margin-bottom:var(--sp-3)}
.bar-line .lb{display:flex;justify-content:space-between;font-size:12.5px;margin-bottom:var(--sp-1);gap:var(--sp-3)}
.bar-line .lb .n{color:var(--text-2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.bar-line .lb .v{font-weight:600;font-variant-numeric:tabular-nums;white-space:nowrap}
.bar-track{height:7px;background:var(--border-2);border-radius:5px;overflow:hidden}
.bar-fill{height:100%;border-radius:5px;background:var(--blue);transition:width .4s}
.bar-fill.o{background:var(--orange)}
.bar-fill.g{background:var(--green)}

/* ---------- 其它 ---------- */
.dl{display:grid;grid-template-columns:auto 1fr;gap:var(--sp-2) var(--sp-4);font-size:13px}
.dl dt{color:var(--text-3);white-space:nowrap}
.dl dd{margin:0;word-break:break-word}
.prev-box{background:var(--surface-2);border:1px solid var(--border-2);border-radius:8px;padding:var(--sp-2) var(--sp-3);
  font-size:12.5px;color:var(--text-2);line-height:1.75;word-break:break-word}
code.mono{font-family:ui-monospace,Consolas,monospace;font-size:12.3px;background:var(--surface-2);border:1px solid var(--border-2);
  border-radius:5px;padding:1px 6px;color:var(--blue-d)}
.ver-item{display:flex;align-items:center;gap:var(--sp-3);padding:var(--sp-2) var(--sp-3);
  border-bottom:1px solid var(--border-2);font-size:13px}
.ver-item:last-child{border-bottom:0}
.ver-item .vt{font-weight:600;font-size:12.3px;background:var(--blue-l);color:var(--blue-d);border-radius:6px;padding:2px 7px}
.ver-item .vd{color:var(--text-3);font-size:12px}
.ver-item .sp{flex:1}
/* ---------- 待办 / 提醒：列表区固定高度 + 底部下拉展开 ---------- */
.act-list{position:relative}
.act-list.folded{overflow:hidden}
.act-list.folded::after{content:'';position:absolute;left:0;right:0;bottom:0;height:38px;
  background:linear-gradient(180deg,rgba(255,255,255,0),var(--surface));pointer-events:none}
.act-more{display:flex;align-items:center;justify-content:center;gap:6px;width:100%;
  margin-top:var(--sp-3);padding:8px;font-family:inherit;font-size:12.5px;color:var(--blue);
  background:var(--surface-2);border:1px solid var(--border-2);border-radius:var(--radius-sm);
  cursor:pointer;transition:background .15s,border-color .15s}
.act-more:hover{background:var(--blue-l);border-color:var(--blue-b)}
.act-more .act-ar{font-style:normal;font-size:13px;line-height:1;transition:transform .2s}
.act-more .act-ar.up{transform:rotate(180deg)}
.overlay{display:none;position:fixed;inset:0;background:rgba(18,28,48,.4);z-index:39}
.loading{padding:30px;text-align:center;color:var(--text-3);font-size:13px}
.skel{height:13px;background:linear-gradient(90deg,#eef1f7,#f7f9fc,#eef1f7);background-size:200% 100%;border-radius:5px;
  animation:sk 1.2s infinite;margin-bottom:var(--sp-2)}
@keyframes sk{0%{background-position:200% 0}100%{background-position:-200% 0}}

/* ===========================================================
   分组页签（医学部 / 市场部 / 销售部：按产品 / 按治疗领域）
   ---------------------------------------------------------------
   间距标准（全站统一，产品总览与各板块页完全一致）：
     · 页签区四周留白 = --pad-tab（16px），与卡片标题左边缘对齐
     · 页签卡片之间：横向 = 纵向 = --gap-tab（12px）
     · 页签卡片内部：三行之间的行距 = --sp-2（8px），不足时由「贴底统计行」吸收
   =========================================================== */
.tabstrip{
  display:grid;
  /* auto-fit（而非 auto-fill）：卡片撑满整行，产品少时不会在右侧留下整列空档 */
  grid-template-columns:repeat(auto-fit,minmax(232px,1fr));
  gap:var(--gap-tab);
  padding:var(--pad-tab);
  align-items:stretch;                 /* 同一行内的页签卡片等高 */
}
.tabstrip-empty{padding:var(--sp-2) 0;font-size:13px;color:var(--text-3);line-height:1.7}
.tabcard{position:relative;overflow:hidden;text-align:left;font-family:inherit;cursor:pointer;
  display:flex;flex-direction:column;   /* 纵向布局，配合下文 margin-top:auto 让统计行贴底对齐 */
  border:1px solid var(--border);background:#fff;border-radius:10px;
  padding:var(--sp-3) var(--pad-card);
  transition:border-color .15s,background .15s,box-shadow .15s}
.tabcard::before{content:"";position:absolute;left:0;top:0;bottom:0;width:3px;background:transparent}
.tabcard:hover{border-color:#c9d4e5;background:#fbfcfe}
.tabcard.on{border-color:var(--blue);background:var(--blue-l)}
.tabcard.on::before{background:var(--blue)}
.tabcard .tc-top{display:flex;align-items:center;gap:var(--sp-2);flex-wrap:wrap;margin-bottom:var(--sp-2)}
.tabcard .tc-nm{font-size:13.6px;font-weight:600;color:var(--text);line-height:1.45}
.tabcard.on .tc-nm{color:var(--blue-d)}
.tabcard .tc-sub{font-size:11.8px;color:var(--text-3);line-height:1.55;margin-bottom:var(--sp-2);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.tabcard .tc-ft{display:flex;align-items:baseline;gap:var(--sp-1);
  margin-top:auto;                      /* 标题换行导致卡片变高时，统计行仍贴底，行行对齐 */
  font-size:11.5px;color:var(--text-3)}
.tabcard .tc-n{font-size:17px;font-weight:700;color:var(--blue);font-variant-numeric:tabular-nums;letter-spacing:-.3px}
.tabcard.on .tc-n{color:var(--blue-d)}
.tabcard .tc-u{margin-right:2px}
.tabcard .tc-more{margin-left:auto;max-width:62%;text-align:right;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.scope-bar{display:flex;align-items:center;flex-wrap:wrap;gap:var(--sp-1);padding:var(--sp-3) var(--pad-card);
  background:var(--surface-2);border-top:1px solid var(--border-2);font-size:12.5px;color:var(--text-2);line-height:1.7}
.scope-bar .sb-label{color:var(--text-3)}
.scope-bar .sb-sep{color:#c9d4e5}
.scope-bar .sb-tip{color:var(--text-3)}
.scope-bar .sb-warn{color:var(--amber)}
/* 「当前产品」作用域条：替代原先每个板块一条的产品页签条
   —— 产品增到 5 个 / 10 个也只是下拉里多几行，不会把页面横向撑爆 */
.scope-bar.cur{background:var(--blue-l);border:1px solid var(--blue-b);border-radius:10px;
  padding:9px 14px;gap:var(--sp-2)}
.scope-bar.cur .sb-k{font-size:11.5px;color:var(--text-3)}
.scope-bar.cur .sb-p{font-size:14px;font-weight:700;color:var(--blue-d)}
.scope-bar.cur .sb-n{font-size:12px;color:var(--text-2)}
.scope-bar.cur .sb-warn{color:var(--amber);font-size:12px}
.scope-bar.cur .sb-r{margin-left:auto;display:flex;align-items:center;gap:var(--sp-2)}
.scope-bar.cur .sb-r button{border:0;background:transparent;color:var(--blue);font-family:inherit;
  font-size:12px;cursor:pointer;padding:2px 4px}
.scope-bar.cur .sb-r button:hover{text-decoration:underline}

/* ---------- 产品总览 ---------- */
.tabcard-add{border-style:dashed;background:var(--surface-2)}
.tabcard-add .tc-nm{color:var(--blue-d)}
.tabcard-add:hover{background:var(--blue-l);border-color:var(--blue)}
.prof-grid{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));
  gap:1px;background:var(--border-2);border-top:1px solid var(--border-2)}
.prof-item{background:var(--surface);padding:var(--sp-3) var(--pad-card)}
.prof-item .k{font-size:11.8px;color:var(--text-3);margin-bottom:var(--sp-1)}
.prof-item .v{font-size:13.4px;color:var(--text);line-height:1.6;word-break:break-word}
.prof-item .v.mono{font-family:ui-monospace,Menlo,Consolas,"Courier New",monospace;font-size:12.6px}
/* 产品档案：窄屏逐级降列（桌面端固定 2 行 × 6 列） */
@media (max-width:1400px){ .prof-grid{grid-template-columns:repeat(4,minmax(0,1fr))} }
@media (max-width:1080px){ .prof-grid{grid-template-columns:repeat(3,minmax(0,1fr))} }
@media (max-width:760px){  .prof-grid{grid-template-columns:repeat(2,minmax(0,1fr))} }
.mr{display:flex;align-items:center;gap:var(--sp-3);padding:var(--sp-3) var(--pad-card);border-bottom:1px solid var(--border-2)}
.mr:last-child{border-bottom:0}
.mr .mn{flex:1;font-size:13px}
.mr .mv{min-width:74px;text-align:right}
.mr-empty .mn{color:var(--text-2)}
.todo-row{display:flex;align-items:center;gap:var(--sp-3);flex-wrap:wrap;padding:var(--sp-2) 0;
  border-bottom:1px dashed var(--border-2);font-size:13px}
.todo-row:last-child{border-bottom:0}
.todo-row .td{font-weight:600}
.todo-row .tm{flex:1;color:var(--text-3);font-size:12.3px}

/* ===========================================================
   医学看板：结果数字卡 + 各产品资料覆盖横条
   ---------------------------------------------------------------
   · .stat-duo ——「在营产品医学资料合计 / 4 类齐全产品数」两个放大数字
   · .cover-*  ——按产品横向铺开的四类资料覆盖条（实心=已有记录，虚线=缺失）
   间距沿用统一刻度：卡片间 --gap-block，条内 --sp-2，条上下 --sp-3
   =========================================================== */
.stat-duo{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:var(--gap-block)}
.stat-card{background:#fff;border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow-1);
  padding:var(--sp-4) var(--pad-card);position:relative;overflow:hidden}
.stat-card::before{content:"";position:absolute;left:0;top:0;bottom:0;width:3px;background:var(--blue)}
.stat-card.o::before{background:var(--orange)}
.stat-card .k{font-size:12.6px;color:var(--text-2);font-weight:500}
.stat-card .v{font-size:33px;font-weight:700;letter-spacing:-1px;line-height:1.15;margin:var(--sp-2) 0 var(--sp-1);
  color:var(--blue-d);font-variant-numeric:tabular-nums}
.stat-card.o .v{color:var(--orange)}
.stat-card .v small{font-size:13px;font-weight:500;color:var(--text-3);margin-left:var(--sp-2);letter-spacing:0}
.stat-card .f{font-size:11.8px;color:var(--text-3);line-height:1.65}

.cover-list{display:flex;flex-direction:column}
.cover-row{display:grid;grid-template-columns:216px 1fr 78px;align-items:center;gap:var(--sp-4);
  padding:var(--sp-3) var(--pad-card);border-bottom:1px solid var(--border-2);cursor:pointer;transition:background .15s}
.cover-row:last-child{border-bottom:0}
.cover-row:hover{background:var(--surface-2)}
.cover-nm{display:flex;align-items:center;gap:var(--sp-2);min-width:0}
.cover-nm .cn{font-size:13.4px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cover-bar{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:var(--sp-2)}
.cover-seg{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-2);min-width:0;
  border:1px dashed var(--border);border-radius:8px;padding:var(--sp-2) var(--sp-3);
  background:var(--surface-2);font-size:12px;color:var(--text-3)}
.cover-seg .cs-lb{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cover-seg .cs-v{flex-shrink:0;font-weight:700;font-variant-numeric:tabular-nums}
.cover-seg.on{border-style:solid;border-color:var(--blue-b);background:var(--blue-l);color:var(--blue-d)}
.cover-sum{text-align:right}
.cover-note{display:flex;align-items:center;flex-wrap:wrap;gap:var(--sp-2);
  padding:var(--sp-3) var(--pad-card);border-top:1px solid var(--border-2);
  background:var(--surface-2);font-size:11.8px;color:var(--text-3)}
.cover-note .cover-seg{padding:var(--sp-1) var(--sp-2);font-size:11.5px}
.cover-note .cn-lb{font-weight:600;color:var(--text-2)}
.cover-note .cn-sep{color:#c9d4e5}
.cover-note b{color:var(--text-2)}
@media (max-width:900px){
  .cover-row{grid-template-columns:1fr;gap:var(--sp-2)}
  .cover-bar{grid-template-columns:repeat(2,minmax(0,1fr))}
  .cover-sum{text-align:left}
}

/* ===========================================================
   治疗领域报告（药品格局板块下方）
   ---------------------------------------------------------------
   一份报告 = 一个治疗领域。上方是结构化药品清单，下方是长文报告，
   两者共用同一套排版刻度：段落 --sp-3，区块 --gap-block。
   =========================================================== */
.rp-title{margin:0 0 var(--sp-2);font-size:20px;font-weight:700;letter-spacing:.2px;line-height:1.4}
.rp-meta{display:flex;flex-wrap:wrap;align-items:center;gap:var(--sp-2);font-size:12px;color:var(--text-3);
  padding-bottom:var(--sp-3);border-bottom:1px solid var(--border-2);margin-bottom:var(--sp-4)}
.rp-foot{display:flex;flex-wrap:wrap;gap:var(--sp-4);padding:var(--sp-3) var(--pad-card);
  border-top:1px solid var(--border-2);background:var(--surface-2);font-size:11.5px;color:var(--text-3)}

/* 正文排版（阅读态与编辑态共用） */
.report-body{font-size:14px;line-height:1.85;color:var(--text);word-break:break-word}
.report-body>*:first-child{margin-top:0}
.report-body h1{font-size:19px;margin:var(--sp-5) 0 var(--sp-2);padding-bottom:var(--sp-1);border-bottom:1px solid var(--border-2)}
.report-body h2{font-size:16.5px;margin:var(--sp-5) 0 var(--sp-2)}
.report-body h3{font-size:15px;margin:var(--sp-4) 0 var(--sp-2);color:var(--blue-d)}
.report-body h4{font-size:14px;margin:var(--sp-4) 0 var(--sp-2);color:var(--text-2)}
.report-body p{margin:0 0 var(--sp-3)}
.report-body ul,.report-body ol{margin:0 0 var(--sp-3);padding-left:22px}
.report-body li{margin-bottom:var(--sp-1)}
.report-body blockquote{margin:0 0 var(--sp-3);padding:var(--sp-2) var(--sp-3);border-left:3px solid var(--blue);
  background:var(--blue-l);color:var(--text-2);border-radius:0 8px 8px 0}
.report-body table{border-collapse:collapse;width:100%;margin:0 0 var(--sp-4);font-size:12.8px}
.report-body th,.report-body td{border:1px solid var(--border);padding:7px 10px;text-align:left;vertical-align:top}
.report-body th{background:var(--surface-2);font-weight:600;color:var(--text-2)}
.report-body tr:nth-child(even) td{background:#fcfdff}
.report-body hr{border:0;border-top:1px solid var(--border);margin:var(--sp-5) 0}
.report-body a{color:var(--blue);text-decoration:none;border-bottom:1px solid var(--blue-b)}
.report-body code{font-family:ui-monospace,Consolas,monospace;font-size:12.3px;background:var(--surface-2);
  border:1px solid var(--border-2);border-radius:4px;padding:1px 5px}
.report-body strong,.report-body b{font-weight:600;color:#12203a}

/* 编辑器 */
.rp-toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:var(--sp-1);
  padding-bottom:var(--sp-3);margin-bottom:var(--sp-3);border-bottom:1px dashed var(--border-2)}
.rp-toolbar .input{width:auto;max-width:124px;padding:6px 8px;font-size:12.5px}
.rp-tb{border:1px solid var(--border);background:#fff;border-radius:6px;padding:5px 9px;font-size:12.5px;
  cursor:pointer;font-family:inherit;line-height:1.5;color:var(--text)}
.rp-tb:hover{border-color:var(--blue-b);background:var(--blue-l);color:var(--blue-d)}
.rp-tb.rp-b{font-weight:700}
.rp-tb.rp-i{font-style:italic}
.rp-tb.rp-u{text-decoration:underline}
.rp-trow{display:flex;align-items:center;gap:var(--sp-3);margin-bottom:var(--sp-3)}
.rp-trow label{font-size:12.5px;color:var(--text-2);white-space:nowrap}
.rp-trow .input{font-size:14.5px;font-weight:600}
.rp-editor{min-height:340px;max-height:62vh;overflow-y:auto;border:1px solid var(--border);
  border-radius:var(--radius-sm);padding:var(--sp-4);background:#fff;outline:none;
  transition:border-color .15s,box-shadow .15s}
.rp-editor:focus{border-color:var(--blue);box-shadow:0 0 0 3px var(--blue-l)}
.rp-editor:empty::before{content:attr(data-ph);color:var(--text-3);font-size:13px;line-height:1.8}
.rp-mrow{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:var(--gap-block);margin-top:var(--sp-4)}
.rp-mf label{display:block;font-size:12px;color:var(--text-2);margin-bottom:var(--sp-1)}
.rp-actions{display:flex;gap:var(--sp-2);align-items:center;flex-wrap:wrap;margin-top:var(--sp-4);
  padding-top:var(--sp-4);border-top:1px solid var(--border-2)}

/* ===========================================================
   滚动预测 · 预测矩阵（地区为行 × 月份为列）
   ---------------------------------------------------------------
   「宽表」的呈现：首列地区粘住不跟着横向滚，数字列尽量紧凑，
   格子里就是输入框 —— 观感贴近用户原来那张 Excel。
   ⚠ 选择器一律带 table 前缀，否则打不过上面的 table.tbl 系列规则。
   =========================================================== */
.fc-bar{display:flex;flex-wrap:wrap;align-items:center;gap:var(--sp-2);
  padding-bottom:var(--sp-3);margin-bottom:var(--sp-3);border-bottom:1px dashed var(--border-2)}
.fc-bar .fc-lb{font-size:12.5px;color:var(--text-2);white-space:nowrap}
.fc-bar .input{padding:6px 8px;font-size:12.5px}
.fc-bar .fc-tabs{width:132px;flex:0 0 auto}
.fc-bar .fc-tabs button{flex:1;padding:5px 6px;font-size:12.5px}
.fc-bar .fc-chk{display:flex;align-items:center;gap:5px;font-size:12.5px;
  color:var(--text-2);white-space:nowrap;cursor:pointer}
.fc-bar .fc-chk input{accent-color:var(--blue);margin:0}
.fc-note{font-size:12px;color:var(--text-3);line-height:1.75;margin-bottom:var(--sp-3)}
.fc-note b{color:var(--text-2)}

.fc-scroll{overflow:auto;max-height:62vh;border:1px solid var(--border-2);border-radius:var(--radius-sm)}
table.fc-mx{width:auto;min-width:0;border-collapse:separate;border-spacing:0}
table.fc-mx th,table.fc-mx td{padding:4px 6px;font-size:12.5px;white-space:nowrap;
  border-bottom:1px solid var(--border-2);vertical-align:middle}
table.fc-mx .num{text-align:right;font-variant-numeric:tabular-nums}
table.fc-mx tbody tr:hover{background:#fbfcfe}
table.fc-mx thead th{position:sticky;top:0;z-index:2;background:var(--surface-2);
  font-weight:600;color:var(--text-2);font-size:12px;border-bottom:1px solid var(--border)}
table.fc-mx .fc-reg{position:sticky;left:0;z-index:1;background:#fff;text-align:left;
  font-weight:600;box-shadow:1px 0 0 var(--border-2);min-width:78px;max-width:120px}
table.fc-mx thead .fc-reg{z-index:3;background:var(--surface-2)}
table.fc-mx .fc-col{min-width:58px}
table.fc-mx .fc-cell{padding:2px 3px}
table.fc-mx .fc-tot{background:#fbfcff;font-weight:600}
table.fc-mx .fc-gh{min-width:78px}
table.fc-mx tr.fc-sum td,table.fc-mx tr.fc-sum th{background:var(--blue-l);font-weight:700;
  color:var(--blue-d);border-top:1px solid var(--blue-b)}
.fc-in{width:58px;border:1px solid transparent;background:transparent;border-radius:5px;
  padding:4px 5px;font-size:12.5px;font-family:inherit;text-align:right;color:var(--text);
  font-variant-numeric:tabular-nums}
.fc-in:hover{border-color:var(--border);background:#fff}
.fc-in:focus{border-color:var(--blue);background:#fff;outline:none;box-shadow:0 0 0 2px var(--blue-l)}
.fc-in::placeholder{color:#c9d4e5}
.fc-na{color:#c9d4e5}

@media (max-width:1080px){
  .auth-wrap{grid-template-columns:1fr}
  .auth-hero{display:none}
}
@media (max-width:960px){
  .layout{grid-template-columns:1fr}
  .sidebar{position:fixed;left:0;top:0;bottom:0;width:var(--sidebar-w);transform:translateX(-100%);transition:transform .22s;height:100vh}
  .sidebar.open{transform:none;box-shadow:var(--shadow-2)}
  .burger{display:flex}
  .overlay.show{display:block}
  .content{padding:var(--sp-3)}
  .kpi-grid{grid-template-columns:repeat(auto-fit,minmax(148px,1fr));gap:var(--gap-grid)}
  .kpi .vl{font-size:20px}
  .topbar{padding:0 var(--sp-3)}
  .crumb .p{display:none}
  .who .nm,.who .rl{display:none}
  .who{border-color:transparent;padding:2px}
  .modal-mask{padding:var(--sp-3) var(--sp-2)}
  table.tbl{min-width:560px}
  .tabstrip{grid-template-columns:repeat(auto-fit,minmax(196px,1fr))}
  .stack{gap:var(--sp-3)}
}
@media (max-width:560px){
  .tabstrip{grid-template-columns:1fr}
  .form-grid{grid-template-columns:1fr}
  .toolbar .input{max-width:none}
  .page-head .desc{font-size:12.2px;min-width:120px}
}
@media print{
  .sidebar,.topbar,.db-banner,.page-head .acts,.toolbar,.pager{display:none!important}
  .rp-toolbar,.rp-actions,.rp-mrow{display:none!important}
  .layout{grid-template-columns:1fr}
}
