:root{
  --orange:#FF6A00;
  --orange-2:#FF8A1F;
  --orange-deep:#E55A00;
  --orange-soft:#FFF2E8;
  --orange-line:#FFE0C7;
  --ink:#1C1C1E;
  --ink-2:#4B5563;
  --muted:#8A9099;
  --bg:#F7F4F1;
  --card:#FFFFFF;
  --line:#EFE7E1;
  --up:#E33E38;      /* 中国习惯：涨用红 */
  --down:#12A150;    /* 跌用绿 */
  --radius:14px;
  --shadow:0 1px 2px rgba(28,20,12,.04), 0 8px 24px -12px rgba(28,20,12,.10);
}
*{box-sizing:border-box;-webkit-font-smoothing:antialiased}
/* iOS / 企业微信内置浏览器：禁止横屏或窄屏时自动放大字号，否则整页版式会被撑乱 */
html,body{margin:0;padding:0}
html{-webkit-text-size-adjust:100%;text-size-adjust:100%}
body{
  font-family:-apple-system,BlinkMacSystemFont,"PingFang SC","Hiragino Sans GB","Microsoft YaHei",sans-serif;
  background:var(--bg);color:var(--ink);font-size:14px;line-height:1.5;
  -webkit-tap-highlight-color:transparent;
}
/* 长按菜单只对按钮/导航禁用；正文保留长按，方便复制访问地址 */
button,.tab,.nav a,.tabbar a,.rank-row,.spot-row{-webkit-touch-callout:none}
a{color:inherit;text-decoration:none}
button{font-family:inherit;cursor:pointer}
/* 触摸设备上取消 300ms 点击延迟；只对可点元素生效，不影响滚动 */
a,button,.tab,.nav a,.tabbar a,.rank-row,.spot-row,.tbl tbody tr{touch-action:manipulation}
/* iOS 输入框字号小于 16px 时，聚焦会自动放大页面 —— 移动端统一提到 16px（见文末媒体查询） */
/* 关键：[hidden] 必须能压住带 display 的类（如 .force-mask{display:grid}），否则设了 hidden 也照样显示 */
[hidden]{display:none!important}
::-webkit-scrollbar{width:8px;height:8px}
::-webkit-scrollbar-thumb{background:#DCD3CC;border-radius:4px}

/* ============ 登录页 ============ */
.login-wrap{
  min-height:100vh;
  min-height:100dvh;   /* 动态视口高度：iOS 地址栏/工具栏收起时不出现白边 */
  display:grid;grid-template-columns:1.1fr .9fr;
}
.login-left{
  background:
    radial-gradient(1100px 620px at 12% 8%, #FFB067 0%, transparent 58%),
    radial-gradient(900px 560px at 88% 92%, #FF7A18 0%, transparent 55%),
    linear-gradient(150deg,#FF8A1F 0%,#FF6A00 46%,#D94900 100%);
  color:#fff;padding:64px 56px;display:flex;flex-direction:column;justify-content:space-between;position:relative;overflow:hidden;
}
.login-left:after{
  content:"";position:absolute;inset:auto -120px -180px auto;width:520px;height:520px;border-radius:50%;
  background:rgba(255,255,255,.09);
}
.brand{display:flex;align-items:center;gap:12px;font-weight:700;letter-spacing:.5px}
.brand .dot{width:34px;height:34px;border-radius:10px;background:rgba(255,255,255,.22);display:grid;place-items:center;font-size:16px;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}
.login-hero h1{font-size:38px;line-height:1.24;margin:0 0 16px;font-weight:800;letter-spacing:-.5px}
.login-hero p{font-size:15px;opacity:.92;max-width:420px;margin:0}
.login-hero ul{list-style:none;padding:0;margin:30px 0 0;display:grid;gap:12px}
.login-hero li{display:flex;gap:10px;align-items:flex-start;font-size:13.5px;opacity:.95}
.login-hero li b{font-weight:600}
.tick{width:18px;height:18px;border-radius:50%;background:rgba(255,255,255,.25);display:grid;place-items:center;flex:0 0 18px;margin-top:1px;font-size:11px}
.login-foot{font-size:12px;opacity:.72}
.login-right{display:grid;place-items:center;padding:40px;background:#fff}
.login-card{width:100%;max-width:352px}
.login-card h2{font-size:22px;margin:0 0 6px;font-weight:700}
.login-card .sub{color:var(--muted);font-size:13px;margin:0 0 28px}
.field{margin-bottom:16px}
.field label{display:block;font-size:12.5px;color:var(--ink-2);margin-bottom:7px;font-weight:500}
.field input{
  width:100%;height:44px;border:1px solid #E3DBD4;border-radius:10px;padding:0 13px;font-size:14px;outline:none;transition:.16s;background:#fff;
}
.field input:focus{border-color:var(--orange);box-shadow:0 0 0 3px rgba(255,106,0,.12)}
.btn-primary{
  width:100%;height:44px;border:0;border-radius:10px;color:#fff;font-size:15px;font-weight:600;
  background:linear-gradient(135deg,#FF8A1F,#FF6A00 60%,#EF5A00);box-shadow:0 6px 16px -6px rgba(255,106,0,.7);transition:.16s;
}
.btn-primary:hover{filter:brightness(1.04)}
.btn-primary:disabled{opacity:.6;cursor:not-allowed}
.login-err{color:var(--up);font-size:12.5px;margin-top:12px;min-height:18px}
.login-note{margin-top:26px;font-size:11.5px;color:#A9A29C;line-height:1.7;border-top:1px dashed var(--line);padding-top:16px}

/* ============ 三级进度卡（今天/本周/本月）============ */
.prog-row{display:grid;grid-template-columns:1fr 1fr 1.12fr;gap:14px;margin-bottom:14px}
.prog-card{
  background:var(--card);border:1px solid var(--line);border-radius:var(--radius);
  padding:15px 17px 14px;box-shadow:var(--shadow);position:relative;overflow:hidden;min-width:0;
}
.prog-card.week{background:linear-gradient(155deg,#FFF8F1 0%,#FFFDFB 65%);border-color:#FFE0C7}
.prog-card.month{
  background:linear-gradient(135deg,#FF8A1F 0%,#FF6A00 52%,#E85700 100%);
  color:#fff;border-color:transparent;box-shadow:0 14px 30px -18px rgba(255,106,0,.85);
}
.prog-card.month:after{content:"";position:absolute;right:-44px;top:-64px;width:190px;height:190px;border-radius:50%;background:rgba(255,255,255,.10)}
.prog-h{display:flex;align-items:baseline;gap:8px;margin-bottom:9px;position:relative;z-index:1}
.prog-t{font-size:13.5px;font-weight:800;letter-spacing:.2px}
.prog-d{font-size:11.5px;color:var(--muted);font-variant-numeric:tabular-nums}
.prog-card.month .prog-d{color:rgba(255,255,255,.82)}
.prog-v{font-size:29px;font-weight:800;letter-spacing:-.9px;font-variant-numeric:tabular-nums;line-height:1.12;position:relative;z-index:1}
.prog-v small{font-size:14px;font-weight:600;margin-right:2px;opacity:.62}
.prog-goal{font-size:12px;color:var(--muted);margin-top:6px;position:relative;z-index:1}
.prog-goal b{color:var(--ink);font-weight:700;font-variant-numeric:tabular-nums}
.prog-card.month .prog-goal{color:rgba(255,255,255,.88)}
.prog-card.month .prog-goal b{color:#fff}
.prog-bar{height:8px;border-radius:5px;background:#F1EAE4;margin-top:11px;position:relative;z-index:1}
.prog-bar>i{display:block;height:100%;border-radius:5px;background:linear-gradient(90deg,#FFA94D,#FF6A00);transition:width .45s ease}
.prog-bar>i.over{background:linear-gradient(90deg,#12A150,#0E8442)}
.prog-bar>i.behind{background:linear-gradient(90deg,#FFB4A8,#E33E38)}
.prog-bar .mark{position:absolute;top:-3px;width:2px;height:14px;border-radius:2px;background:rgba(28,20,12,.42)}
.prog-card.month .prog-bar{background:rgba(255,255,255,.26)}
.prog-card.month .prog-bar>i{background:#fff}
.prog-card.month .prog-bar .mark{background:rgba(255,255,255,.9)}
.prog-foot{font-size:12.5px;margin-top:10px;font-weight:700;display:flex;align-items:center;gap:6px;flex-wrap:wrap;position:relative;z-index:1;font-variant-numeric:tabular-nums}
.prog-foot .tagx{font-size:11px;font-weight:700;padding:1px 7px;border-radius:6px;background:rgba(0,0,0,.06)}
.prog-card.month .prog-foot .tagx{background:rgba(255,255,255,.22);color:#fff}
.prog-sub{font-size:11.5px;color:var(--muted);margin-top:5px;line-height:1.55;position:relative;z-index:1}
.prog-card.month .prog-sub{color:rgba(255,255,255,.82)}
.src-tag{font-size:10.5px;font-weight:600;padding:1px 6px;border-radius:5px;background:#FFF3E0;color:#B26A00;vertical-align:1px}
/* 月度目标两个层级（基础 / 冲刺）：并列两行，各自数值 + 完成率 + 还差多少，不合并不隐藏 */
.mt-goals{margin-top:9px;position:relative;z-index:1;display:flex;flex-direction:column;gap:8px}
.mt-goal{background:rgba(255,255,255,.10);border-radius:8px;padding:6px 8px 7px}
.mt-goal.sprint{background:rgba(255,255,255,.16);box-shadow:inset 0 0 0 1px rgba(255,255,255,.22)}
.mt-goal .mt-l{display:flex;align-items:baseline;gap:6px;line-height:1.3}
.mt-goal .mt-k{font-size:11px;font-weight:700;color:rgba(255,255,255,.86);letter-spacing:.2px;flex:0 0 auto}
.mt-goal.sprint .mt-k{color:#FFE7C7}
.mt-goal b{font-size:14px;font-weight:800;color:#fff;font-variant-numeric:tabular-nums;letter-spacing:-.2px}
.mt-goal .mt-r{margin-left:auto;font-size:11.5px;font-weight:700;color:rgba(255,255,255,.95);font-variant-numeric:tabular-nums}
.mt-goal .prog-bar{height:6px;margin-top:5px}
.mt-goal .prog-bar .mark{top:-2px;height:10px}
.mt-goal .mt-g{font-size:10.5px;color:rgba(255,255,255,.84);margin-top:3px;display:flex;gap:8px;flex-wrap:wrap;font-variant-numeric:tabular-nums}
.mt-goal .mt-g .g-diff{color:#FFE7C7;opacity:.95}
.mt-goal .prog-bar>i.sprint{background:linear-gradient(90deg,#FFE7C7,#FFC46B)}
.prog-foot .tagx.sprint{background:rgba(255,231,199,.28);color:#FFE7C7}
/* 三口径对照（D-214）：店铺 / 人员 / 团队并列，各自算完成率，不做合并 */
.wk-dims{display:flex;gap:6px;margin-top:6px;position:relative;z-index:1;flex-wrap:wrap}
.wk-dim{flex:1 1 0;min-width:78px;background:rgba(0,0,0,.045);border-radius:7px;padding:5px 7px 6px;line-height:1.35}
.wk-dim b{display:block;font-size:12.5px;font-weight:700;color:var(--ink);letter-spacing:-.2px}
.wk-dim .dl{display:block;font-size:10.5px;color:var(--muted);margin-top:1px}
.wk-dim .dr{display:block;font-size:10.5px;font-weight:600;margin-top:1px}
.wk-dim.na{opacity:.55}
.wk-dim.na b{color:var(--muted);font-weight:600}
.wk-dim.poor .dr{color:#E33E38}
.wk-dim.good .dr{color:#12A150}
.wk-dims .warn{flex:1 1 100%;font-size:10.5px;color:#B26A00;background:#FFF8E8;border-radius:6px;padding:4px 7px;line-height:1.45}
@media(max-width:1180px){
  .prog-row{grid-template-columns:1fr 1fr}
  .prog-card.month{grid-column:1/-1}
}
@media(max-width:720px){
  .prog-row{grid-template-columns:1fr}
  .prog-card.month{grid-column:auto}
  .prog-v{font-size:26px}
}

/* ============ 总览页排名速览（前三 / 后三）============ */
.spot-sec{margin-bottom:12px}
.spot-sec:last-of-type{margin-bottom:6px}
.spot-sec-t{
  font-size:11.5px;font-weight:700;letter-spacing:.3px;margin-bottom:7px;
  display:flex;align-items:center;gap:6px;color:var(--ink-2);
}
.spot-sec-t:before{content:"";width:3px;height:12px;border-radius:2px;background:var(--orange)}
.spot-sec-t.top:before{background:linear-gradient(180deg,#FFC24B,#FF9500)}
.spot-sec-t.bottom:before{background:linear-gradient(180deg,#FFB4A8,#E33E38)}
.spot-list{display:flex;flex-direction:column;gap:1px}

.spot-row{
  display:grid;grid-template-columns:46px 1fr auto;align-items:center;gap:10px;
  padding:7px 6px;border-radius:8px;cursor:pointer;transition:.12s;
}
.spot-row:hover{background:#FFFAF6}
.spot-row .no{
  font-size:11px;font-weight:800;padding:2px 0;border-radius:5px;text-align:center;
  background:#F4F0EC;color:var(--muted);font-variant-numeric:tabular-nums;white-space:nowrap;
}
.spot-row .no.g1{background:linear-gradient(135deg,#FFC24B,#FF9500);color:#fff}
.spot-row .no.g2{background:linear-gradient(135deg,#D5DCE4,#A8B4C0);color:#fff}
.spot-row .no.g3{background:linear-gradient(135deg,#F0B183,#D98652);color:#fff}
.spot-row .no.bad{background:#FFEFEC;color:#D9312C}
.spot-row .nm{min-width:0}
.spot-row .nm .t{
  font-size:12.8px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
  display:block;
}
.spot-row .nm .bar{height:4px;border-radius:3px;background:#F3EDE7;overflow:hidden;margin-top:5px}
.spot-row .nm .bar>i{display:block;height:100%;border-radius:3px;background:linear-gradient(90deg,#FFA94D,#FF6A00)}
.spot-row .nm .bar>i.bad{background:linear-gradient(90deg,#FFB4A8,#E33E38)}
.spot-row .v{
  text-align:right;font-size:12.8px;font-weight:700;font-variant-numeric:tabular-nums;white-space:nowrap;
}
.spot-row .v small{display:block;font-size:10.5px;font-weight:600;color:var(--muted);margin-top:2px}
.spot-row .v small.warn{color:#D9312C}

.spot-note{
  font-size:11px;color:#A9A29C;line-height:1.7;border-top:1px dashed var(--line);
  padding-top:10px;margin-top:4px;
}
.spot-more{font-size:11.5px;color:var(--orange-deep);font-weight:600;white-space:nowrap}
.spot-more:hover{text-decoration:underline}
.spot-empty{font-size:12.5px;color:#9AA0A6;padding:8px 6px}

@media(max-width:720px){
  .spot-row{grid-template-columns:44px 1fr auto;gap:8px}
}

/* ============ 主框架 ============ */
.topbar{
  height:60px;background:#fff;border-bottom:1px solid var(--line);display:flex;align-items:center;
  padding:0 24px;gap:18px;position:sticky;top:0;z-index:30;
}
.topbar .logo{display:flex;align-items:center;gap:9px;font-weight:800;font-size:15px;letter-spacing:.2px;white-space:nowrap}
.topbar .logo i{
  width:28px;height:28px;border-radius:8px;display:grid;place-items:center;color:#fff;font-style:normal;font-size:13px;font-weight:800;
  background:linear-gradient(135deg,#FF9A3C,#FF6A00);
}
.nav{display:flex;gap:2px;margin-left:10px}
.nav a{padding:8px 14px;border-radius:9px;font-size:13.5px;color:var(--ink-2);font-weight:500;transition:.14s}
.nav a:hover{background:var(--orange-soft);color:var(--orange-deep)}
.nav a.on{background:var(--orange-soft);color:var(--orange-deep);font-weight:600}
.topbar .right{margin-left:auto;display:flex;align-items:center;gap:12px}
.datepick{
  display:flex;align-items:center;gap:8px;border:1px solid #E3DBD4;border-radius:9px;padding:0 10px;height:34px;background:#fff;
}
.datepick input{border:0;outline:none;font-size:13px;color:var(--ink);font-family:inherit;background:transparent}
.user-chip{display:flex;align-items:center;gap:8px;font-size:13px;color:var(--ink-2)}
.avatar{width:28px;height:28px;border-radius:50%;background:linear-gradient(135deg,#FFB067,#FF6A00);color:#fff;display:grid;place-items:center;font-size:12px;font-weight:700}
.ghost-btn{border:1px solid #E3DBD4;background:#fff;border-radius:9px;height:32px;padding:0 12px;font-size:12.5px;color:var(--ink-2)}
.ghost-btn:hover{border-color:var(--orange);color:var(--orange-deep)}
.scope-badge{
  display:inline-flex;align-items:center;gap:5px;height:26px;padding:0 9px;border-radius:7px;
  background:var(--orange-soft);color:var(--orange-deep);font-size:11.5px;font-weight:600;white-space:nowrap;
}
.scope-badge:before{content:"";width:5px;height:5px;border-radius:50%;background:var(--orange)}
.sel{width:100%;height:44px;border:1px solid #E3DBD4;border-radius:10px;padding:0 10px;font-size:14px;background:#fff;font-family:inherit;color:var(--ink)}
.sel:focus{outline:none;border-color:var(--orange);box-shadow:0 0 0 3px rgba(255,106,0,.12)}

.wrap{max-width:1480px;margin:0 auto;padding:20px 24px 60px}
.demo-banner{
  display:flex;align-items:center;gap:10px;background:#FFF7E8;border:1px solid #FFE2B8;color:#8A5A00;
  border-radius:11px;padding:10px 14px;font-size:12.5px;margin-bottom:16px;
}
.demo-banner b{font-weight:700}

/* ============ KPI ============ */
.kpi-row{display:grid;grid-template-columns:1.35fr 1fr 1fr 1fr;gap:14px;margin-bottom:16px}
.kpi{
  background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:18px 18px 16px;
  box-shadow:var(--shadow);position:relative;overflow:hidden;
}
.kpi .lab{font-size:12.5px;color:var(--muted);display:flex;align-items:center;gap:6px;margin-bottom:10px}
.kpi .val{font-size:29px;font-weight:800;letter-spacing:-.8px;line-height:1.1;font-variant-numeric:tabular-nums}
.kpi .val small{font-size:14px;font-weight:600;color:var(--ink-2);margin-left:3px;letter-spacing:0}
.kpi .foot{margin-top:9px;font-size:12px;color:var(--muted);display:flex;flex-wrap:wrap;gap:10px;align-items:center}
.kpi.hero{
  background:linear-gradient(135deg,#FF8A1F 0%,#FF6A00 55%,#E85700 100%);color:#fff;border-color:transparent;
  box-shadow:0 14px 30px -18px rgba(255,106,0,.85);
}
.kpi.hero .lab{color:rgba(255,255,255,.86)}
.kpi.hero .val small{color:rgba(255,255,255,.85)}
.kpi.hero .foot{color:rgba(255,255,255,.82)}
.kpi.hero:after{content:"";position:absolute;right:-40px;top:-60px;width:180px;height:180px;border-radius:50%;background:rgba(255,255,255,.10)}
.delta{font-weight:600;font-variant-numeric:tabular-nums}
.delta.up{color:var(--up)}
.delta.down{color:var(--down)}
.kpi.hero .delta.up,.kpi.hero .delta.down{color:#fff}
.pill{display:inline-flex;align-items:center;gap:4px;height:20px;padding:0 7px;border-radius:6px;font-size:11.5px;font-weight:600}
.pill.soft{background:var(--orange-soft);color:var(--orange-deep)}
.progress{height:6px;border-radius:4px;background:#F1EAE4;overflow:hidden;margin-top:12px}
.progress > i{display:block;height:100%;border-radius:4px;background:linear-gradient(90deg,#FF9A3C,#FF6A00)}
.kpi.hero .progress{background:rgba(255,255,255,.24)}
.kpi.hero .progress > i{background:#fff}
.progress-mark{position:relative;height:0}
.progress-mark span{position:absolute;top:-4px;width:2px;height:8px;background:rgba(28,20,12,.35);border-radius:2px}

/* ============ 卡片 ============ */
.grid{display:grid;gap:14px}
.g-3{grid-template-columns:1.15fr 1.15fr 1fr}
.g-2{grid-template-columns:1.6fr 1fr}
.card{
  background:var(--card);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);
  display:flex;flex-direction:column;min-width:0;
}
.card-h{display:flex;align-items:center;gap:10px;padding:15px 17px 12px;border-bottom:1px solid #F6F0EB}
.card-h h3{font-size:14.5px;margin:0;font-weight:700;letter-spacing:.1px}
.card-h .hint{font-size:11.5px;color:var(--muted);font-weight:400}
.card-h .sp{margin-left:auto;display:flex;gap:6px}
.tab{height:26px;padding:0 10px;border-radius:7px;border:1px solid transparent;background:#F6F1EC;color:var(--ink-2);font-size:12px;font-weight:500}
.tab.on{background:#fff;border-color:var(--orange-line);color:var(--orange-deep);font-weight:600;box-shadow:0 1px 2px rgba(0,0,0,.04)}
.card-b{padding:14px 17px 16px;flex:1;min-width:0}

/* ============ 排行榜 ============ */
/* 排名全量展示：多列自适应，店铺 24 家 / 人员 30 人一次铺开不折成长条 */
.rank-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(316px,1fr));gap:1px 20px;align-items:start}
.rank-list{display:flex;flex-direction:column;gap:2px}
.rank-row{
  display:grid;grid-template-columns:22px 1fr 76px 54px;align-items:center;gap:9px;
  padding:7px 6px;border-radius:8px;cursor:pointer;transition:.12s;
}
.rank-row:hover{background:#FFFAF6}
.rk{width:20px;height:20px;border-radius:6px;display:grid;place-items:center;font-size:11px;font-weight:700;color:var(--muted);background:#F4F0EC}
.rk.top1{background:linear-gradient(135deg,#FFC24B,#FF9500);color:#fff}
.rk.top2{background:linear-gradient(135deg,#D5DCE4,#A8B4C0);color:#fff}
.rk.top3{background:linear-gradient(135deg,#F0B183,#D98652);color:#fff}
.rk-name{display:flex;flex-direction:column;gap:5px;min-width:0}
.rk-name .t{font-size:12.8px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.tag-mini{display:inline-block;margin-left:5px;padding:0 5px;border-radius:4px;background:#F4F0EC;color:#8A9099;font-size:10px;font-weight:500;vertical-align:1px}
/* 日均排名徽标：与销售排名并列显示，用蓝色与普通灰标签区分，一眼能认出这是另一套名次 */
.tag-mini.avgrank{background:#EAF3FF;color:#2B6CB0;font-weight:600;flex:none}
/* 冲刺完成率徽标：金色，与基础完成率（右侧大字）区分开 */
.tag-mini.sprint{background:#FFF5E3;color:#B26A00;font-weight:600;flex:none}
.rk-bar{height:5px;border-radius:3px;background:#F3EDE7;overflow:hidden}
.rk-bar > i{display:block;height:100%;border-radius:3px;background:linear-gradient(90deg,#FFA94D,#FF6A00)}
.rk-bar > i.warn{background:linear-gradient(90deg,#FFB4A8,#E33E38)}
.rk-val{text-align:right;font-size:12.8px;font-weight:700;font-variant-numeric:tabular-nums}
.rk-rate{text-align:right;font-size:11.5px;font-weight:600;color:var(--muted);font-variant-numeric:tabular-nums}
.rk-rate.good{color:var(--up)}
.rk-rate.bad{color:var(--down)}

/* 表格 */
.tbl{width:100%;border-collapse:collapse;font-size:12.8px}
.tbl th{
  text-align:right;font-weight:600;color:var(--muted);font-size:11.5px;padding:8px 8px;border-bottom:1px solid var(--line);white-space:nowrap;
}
.tbl th:first-child,.tbl td:first-child{text-align:left}
.tbl td{padding:9px 8px;border-bottom:1px solid #F8F4F0;text-align:right;font-variant-numeric:tabular-nums}
.tbl tbody tr:hover{background:#FFFAF6;cursor:pointer}
.tbl .name{font-weight:600}
.tag{display:inline-block;padding:1px 6px;border-radius:5px;font-size:11px;font-weight:600}
.tag.tm{background:#FFF0F0;color:#D9312C}
.tag.jd{background:#FFF3F0;color:#C9432E}
.tag.soft{background:#F3F0ED;color:var(--ink-2)}

/* 店铺 × 日期 明细矩阵 */
.tbl.matrix{font-size:11.5px}
.tbl.matrix th,.tbl.matrix td{padding:6px 7px;white-space:nowrap}
.tbl.matrix th{font-size:10.5px}
.tbl.matrix .sticky-l{position:sticky;left:0;background:#fff;z-index:2;box-shadow:1px 0 0 var(--line)}
.tbl.matrix tbody tr:hover .sticky-l{background:#FFFAF6}
.tbl.matrix .tot{background:#FFF9F5;font-weight:700}
.tbl.matrix td.z{color:#D9D2CB}
.tbl.matrix tfoot td{background:#FFF9F5}

/* 图表 */
.chart{width:100%;display:block;overflow:visible}
.legend{display:flex;gap:14px;font-size:11.5px;color:var(--muted);align-items:center}
.legend i{display:inline-block;width:9px;height:3px;border-radius:2px;margin-right:5px;vertical-align:middle}
.legend .sq{width:9px;height:9px;border-radius:2px}

/* 折线图悬停读数（提示框绝对定位在图表容器内，随鼠标吸附到最近数据点） */
.ch-tip{
  position:absolute;left:0;top:0;z-index:6;pointer-events:none;
  opacity:0;transition:opacity .12s ease;
  background:rgba(36,26,20,.94);color:#fff;border-radius:9px;
  padding:8px 11px;font-size:12px;line-height:1.55;white-space:nowrap;
  box-shadow:0 8px 22px -8px rgba(0,0,0,.45);
  font-variant-numeric:tabular-nums;
  will-change:transform;
}
.ch-tip.on{opacity:1}
.ch-tip .ch-h{font-size:11.5px;opacity:.72;margin-bottom:5px;letter-spacing:.3px}
.ch-tip .ch-row{display:flex;align-items:center;justify-content:space-between;gap:14px}
.ch-tip .ch-row + .ch-row{margin-top:3px}
.ch-tip .ch-k{display:flex;align-items:center;gap:5px;opacity:.88}
.ch-tip .ch-k i{width:7px;height:7px;border-radius:2px;display:inline-block;flex:none}
.ch-tip .ch-v{font-weight:700;letter-spacing:.2px}
.ch-tip .ch-cmp{
  margin-top:6px;padding-top:6px;border-top:1px solid rgba(255,255,255,.16);
  font-size:11.5px;opacity:.92;
}
.ch-tip .ch-cmp b{font-weight:700}
/* 深色底上的涨跌色：红涨绿跌（与看板一致），调亮以保证可读 */
.ch-tip .up{color:#FF9C93}
.ch-tip .down{color:#7BE3AE}

/* 推广区 */
.ad-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin-bottom:4px}
.ad-cell{background:#FFF9F5;border:1px solid #FBEADF;border-radius:10px;padding:11px 12px}
.ad-cell .l{font-size:11.5px;color:var(--muted)}
.ad-cell .v{font-size:19px;font-weight:800;margin-top:3px;letter-spacing:-.4px;font-variant-numeric:tabular-nums}
.ad-cell .v small{font-size:11px;font-weight:600;color:var(--muted);margin-left:2px;letter-spacing:0}

/* ============ 各销售部推广分析（D-025）============
 * 工具条借鉴现有 .tab 按钮，不引入新交互语言；汇总条用 ad-cell 同款底纹保持视觉连续。
 */
.adtool{border:1px solid var(--line);border-radius:10px;padding:10px 12px;margin-bottom:12px;background:#FDFBF9}
.adtool-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:8px}
.adtool-row:last-child{margin-bottom:0}
.adtool-lab{font-size:11.5px;color:var(--muted);font-weight:600;white-space:nowrap}
.adtool .tab{padding:4px 11px;font-size:12px;border-radius:7px}
/* 汇总条：全部 / 筛选后 两组数并排，用户一眼看出"筛掉了多少" */
.adsum{display:grid;grid-template-columns:repeat(auto-fit,minmax(122px,1fr));gap:9px;margin-bottom:12px}
.adsum .s{background:#FFF9F5;border:1px solid #FBEADF;border-radius:10px;padding:9px 11px}
.adsum .s .l{font-size:11px;color:var(--muted);white-space:nowrap}
.adsum .s .v{font-size:16px;font-weight:800;margin-top:2px;letter-spacing:-.3px;font-variant-numeric:tabular-nums}
.adsum .s .d{font-size:10.5px;margin-top:2px;font-variant-numeric:tabular-nums}
/* 渠道构成小字：让表格自己说明"这部门的钱花在哪个平台" */
.chmix{display:flex;gap:5px;flex-wrap:wrap;margin-top:4px}
.chmix i{font-style:normal;font-size:10px;padding:1px 5px;border-radius:4px;background:#F4F0EC;color:#6B7280;white-space:nowrap}
.chmix i b{color:#1C1C1E;font-weight:700}
.adnote{margin-top:12px;padding-top:11px;border-top:1px dashed var(--line);font-size:11.5px;color:#A9A29C;line-height:1.75}
.adnote b{color:#6B7280}
/* 表头可点排序 */
.tbl th[data-sortkey]{cursor:pointer;user-select:none;white-space:nowrap}
.tbl th[data-sortkey]:hover{color:var(--orange-deep)}
.tbl th[data-sortkey] .ar{font-size:9px;margin-left:2px;color:var(--orange)}

/* 抽屉 */
.drawer-mask{position:fixed;inset:0;background:rgba(24,18,12,.34);opacity:0;pointer-events:none;transition:.2s;z-index:60}
.drawer-mask.on{opacity:1;pointer-events:auto}
.drawer{
  position:fixed;top:0;right:0;height:100%;width:min(620px,94vw);background:#fff;z-index:61;
  transform:translateX(102%);transition:transform .26s cubic-bezier(.3,.8,.3,1);display:flex;flex-direction:column;
  box-shadow:-16px 0 40px -20px rgba(0,0,0,.28);
}
.drawer.on{transform:none}
.drawer-h{padding:18px 22px 14px;border-bottom:1px solid var(--line);display:flex;align-items:center;gap:10px}
.drawer-h h3{margin:0;font-size:16px;font-weight:700}
.drawer-h .close{margin-left:auto;width:30px;height:30px;border-radius:8px;border:0;background:#F5F1EC;font-size:16px;color:var(--ink-2);line-height:1}
.drawer-b{padding:18px 22px 40px;overflow:auto;flex:1}
.mini-kpis{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin-bottom:18px}
.mini{border:1px solid var(--line);border-radius:10px;padding:10px 12px}
.mini .l{font-size:11.5px;color:var(--muted)}
.mini .v{font-size:17px;font-weight:800;margin-top:2px;font-variant-numeric:tabular-nums}
.sec-t{font-size:12.5px;font-weight:700;color:var(--ink-2);margin:20px 0 10px}

/* 响应式 */
@media(max-width:1180px){
  .kpi-row{grid-template-columns:1fr 1fr}
  .g-3,.g-2{grid-template-columns:1fr}
  .ad-grid{grid-template-columns:1fr 1fr}
}
@media(max-width:720px){
  .login-wrap{grid-template-columns:1fr}
  .login-left{display:none}
  .wrap{padding:14px 12px 50px}
  .kpi-row{grid-template-columns:1fr}
  .nav{display:none}
  .topbar{padding:0 12px;gap:8px;height:54px;flex-wrap:nowrap;overflow:hidden}
  .topbar .logo{font-size:14px;gap:6px}
  .topbar .logo i{width:24px;height:24px;font-size:12px}
  .datepick{padding:0 8px;height:32px;flex:0 0 auto}
  .datepick .dp-label{display:none}
  .datepick input{width:112px;font-size:12px}
  .user-chip #uname{display:none}
  .user-chip{gap:0;flex:0 0 auto}
  .ghost-btn{padding:0 9px;height:30px;font-size:12px;flex:0 0 auto}
  .demo-banner{font-size:11.5px;line-height:1.55;align-items:flex-start;padding:9px 11px}
  .demo-banner b{flex:0 0 auto}
  .ad-grid{grid-template-columns:1fr 1fr}
  .mini-kpis{grid-template-columns:1fr}
  .kpi .val{font-size:26px}
  .card-h{flex-wrap:wrap}
  .drawer{width:100%}
}
@media(max-width:420px){
  .datepick input{width:104px}
  .topbar .logo span{display:none}
}

/* ============ 强制改密 ============ */
.force-mask{
  position:fixed;inset:0;background:rgba(24,18,12,.52);z-index:90;
  display:grid;place-items:center;padding:20px;backdrop-filter:blur(3px);
}
.force-card{
  background:#fff;border-radius:16px;padding:30px 30px 26px;width:100%;max-width:400px;
  box-shadow:0 30px 60px -24px rgba(0,0,0,.4);
}
.force-card h3{font-size:19px;margin:0 0 8px;font-weight:700}
.force-card p{font-size:13px;color:#6B7280;margin:0 0 22px;line-height:1.65}

/* ============ 收藏引导（注册成功后教用户存网址 / 固定标签页，D-203）============
 * 只在「申请已提交」那一刻弹一次。目的是把一次性地址变成可复访的入口。
 * 桌面居中卡片，≤720px 变底部抽屉（拇指可达、不遮地址栏）。
 */
.bmk-mask{
  position:fixed;inset:0;background:rgba(24,18,12,.52);z-index:95;
  display:grid;place-items:center;padding:20px;backdrop-filter:blur(3px);
  opacity:0;transition:opacity .18s ease;
}
.bmk-mask.on{opacity:1}
.bmk-card{
  position:relative;background:#fff;border-radius:16px;width:100%;max-width:470px;
  padding:26px 26px 20px;box-shadow:0 30px 60px -24px rgba(0,0,0,.42);
  transform:translateY(8px) scale(.98);transition:transform .18s ease;
  max-height:calc(100vh - 40px);overflow:auto;-webkit-overflow-scrolling:touch;
}
.bmk-mask.on .bmk-card{transform:none}
.bmk-x{
  position:absolute;right:13px;top:13px;width:30px;height:30px;border:0;border-radius:8px;
  background:#F5F1EC;color:var(--ink-2);font-size:17px;line-height:1;padding:0;
}
.bmk-x:hover{background:#EDE7E1}
.bmk-ic{
  width:42px;height:42px;border-radius:12px;display:grid;place-items:center;
  background:var(--orange-soft);color:var(--orange-deep);margin-bottom:13px;
}
.bmk-t{font-size:18.5px;font-weight:800;margin:0 0 7px;letter-spacing:-.2px;padding-right:28px}
.bmk-s{font-size:13px;color:#5A6270;line-height:1.7;margin:0 0 15px}
.bmk-s b{color:var(--ink)}
.bmk-why{border:1px solid var(--line);border-radius:11px;background:#FCFAF8;padding:11px 13px;margin-bottom:15px}
.bmk-row{display:flex;gap:9px;font-size:12.5px;line-height:1.65}
.bmk-row+.bmk-row{margin-top:9px;padding-top:9px;border-top:1px dashed var(--line)}
.bmk-k{flex:none;width:80px;color:var(--orange-deep);font-weight:700}
.bmk-v{color:#5A6270}
.bmk-steps{margin-bottom:14px}
.bmk-sh{font-size:12.5px;font-weight:700;color:var(--ink);margin-bottom:7px}
.bmk-steps ol{margin:0;padding-left:19px;font-size:12.5px;color:#5A6270;line-height:1.85}
.bmk-steps li::marker{color:var(--orange);font-weight:700}
.bmk-steps kbd{
  display:inline-block;padding:1px 6px;border:1px solid #E0D8D1;border-bottom-width:2px;
  border-radius:5px;background:#FBFAF9;font-size:11.5px;font-family:inherit;color:var(--ink);
}
.bmk-addr{display:flex;gap:8px;align-items:center;margin-bottom:14px}
.bmk-addr code{
  flex:1;min-width:0;background:#F8F6F4;border:1px solid var(--line);border-radius:9px;
  padding:8px 11px;font-size:12.5px;color:var(--ink-2);word-break:break-all;
  -webkit-user-select:all;user-select:all;
}
.bmk-check{
  display:flex;align-items:center;gap:8px;font-size:12.5px;color:#6B7280;
  margin-bottom:16px;cursor:pointer;-webkit-tap-highlight-color:transparent;
}
.bmk-check input{width:16px;height:16px;accent-color:var(--orange);flex:none;margin:0}
.bmk-foot{display:flex;gap:10px}
.bmk-foot .btn-primary{flex:1}
.bmk-cancel{
  flex:none;height:44px;padding:0 20px;border:1px solid #E3DBD4;background:#fff;
  border-radius:10px;font-size:14px;color:var(--ink-2);
}
.bmk-cancel:hover{border-color:#D6CCC4;background:#FBFAF9}
@media(max-width:720px){
  .bmk-mask{align-items:flex-end;padding:0}
  .bmk-card{
    max-width:none;border-radius:18px 18px 0 0;
    padding:22px 18px calc(16px + env(safe-area-inset-bottom));
    max-height:88vh;transform:translateY(24px);transition:transform .22s ease;
  }
  .bmk-mask.on .bmk-card{transform:none}
  .bmk-t{font-size:17px}
  .bmk-row{flex-direction:column;gap:3px}
  .bmk-k{width:auto}
  .bmk-foot{flex-direction:column-reverse}
  .bmk-cancel{width:100%}
}

/* ==================================================================
   移动端 & 企业微信内置浏览器适配
   - 断点 720px（平板竖屏 / 手机横屏也覆盖），420px 再收紧一档
   - 企业微信 UA 会在 <html> 上加 .is-wecom，用于处理内核差异
   - 关键点：iOS 输入框 <16px 会放大页面、底部导航避开 Home 指示条、
     宽表横向滚动 + 首列吸附、图表按容器宽度重绘
   ================================================================== */

/* 桌面端不显示底部导航 */
.tabbar{display:none}

/* 登录页手机头部：桌面隐藏 */
.login-mobile-head{display:none}

/* 设置页「手机访问」信息块 */
.mobile-info{font-size:13px;line-height:1.9;color:var(--ink-2)}
.mobile-info .row{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin:7px 0}
.mobile-info .url{
  display:inline-block;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;
  background:#FFF7EE;border:1px solid var(--orange-line);color:#B4530A;
  padding:3px 9px;border-radius:7px;font-size:13.5px;word-break:break-all;
}
.mobile-info .note{font-size:11.5px;color:#A9A29C;margin-top:10px;line-height:1.75}
.mobile-info .badge-ok{color:#12A150;font-weight:700}
.mobile-info .badge-warn{color:#B26A00;font-weight:700}

/* 抽屉打开时锁住背景滚动，避免 iOS 出现「滚两层」 */
body.drawer-open{overflow:hidden}

@media(max-width:720px){
  /* ---------- 顶部栏 ---------- */
  .topbar{
    height:54px;padding:0 10px;gap:6px;flex-wrap:nowrap;
    padding-top:env(safe-area-inset-top);
    height:calc(54px + env(safe-area-inset-top));
  }
  .topbar .logo{font-size:14px;gap:6px;flex:0 0 auto}
  .topbar .logo i{width:26px;height:26px;font-size:13px}
  .topbar .logo span{display:none}          /* 只留「雷」字标，把宽度让给日期 */
  .topbar .right{margin-left:auto;gap:6px;flex:1 1 auto;min-width:0;justify-content:flex-end}
  .scope-badge{display:none}                 /* 数据范围在「我的」页有完整说明 */
  .datepick{flex:1 1 auto;min-width:0;height:34px;padding:0 8px;overflow:hidden}
  .datepick .dp-label{display:none}
  .datepick input{
    width:100%;min-width:0;font-size:16px;   /* 16px：iOS 低于此值聚焦会放大整页 */
    -webkit-appearance:none;appearance:none;
  }
  .user-chip{gap:0;flex:0 0 auto}
  .user-chip #uname{display:none}
  .avatar{width:26px;height:26px;font-size:11px}
  .ghost-btn{height:32px;padding:0 10px;font-size:12.5px;flex:0 0 auto}

  /* ---------- 底部标签栏 ---------- */
  .tabbar{
    display:grid;grid-template-columns:repeat(5,1fr);
    position:fixed;left:0;right:0;bottom:0;z-index:50;
    background:rgba(255,255,255,.98);
    -webkit-backdrop-filter:saturate(180%) blur(10px);
    backdrop-filter:saturate(180%) blur(10px);
    border-top:1px solid var(--line);
    padding-bottom:env(safe-area-inset-bottom);
    box-shadow:0 -6px 18px -14px rgba(28,20,12,.35);
  }
  .tabbar a{
    position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;
    gap:3px;min-height:52px;padding:6px 0 5px;
    color:#8A9099;font-size:10.5px;font-weight:600;line-height:1;
  }
  .tabbar a svg{width:21px;height:21px;display:block}
  .tabbar a.on{color:var(--orange-deep)}
  .tabbar a.on:before{
    content:"";position:absolute;top:0;left:50%;transform:translateX(-50%);
    width:24px;height:3px;border-radius:0 0 4px 4px;background:var(--orange);
  }
  .tabbar a:active{background:#FFF7F0}

  /* ---------- 内容区：底部留出导航高度 + 安全区 ---------- */
  .wrap{padding:12px 12px calc(74px + env(safe-area-inset-bottom))}
  .demo-banner{font-size:11.5px;line-height:1.55;align-items:flex-start;padding:9px 11px;margin-bottom:12px;gap:6px}
  .demo-banner b{flex:0 0 auto}
  .demo-banner #srcText{flex:1 1 100%;min-width:0;word-break:break-word}

  /* ---------- 卡片 ---------- */
  .grid.g-2,.grid.g-3{grid-template-columns:1fr}
  .card-h{padding:12px 13px 10px;gap:8px;flex-wrap:wrap}
  .card-h h3{font-size:14px}
  .card-h .hint{font-size:11px;line-height:1.5}
  .card-h .sp{
    margin-left:auto;max-width:100%;overflow-x:auto;overflow-y:hidden;
    -webkit-overflow-scrolling:touch;scrollbar-width:none;
  }
  .card-h .sp::-webkit-scrollbar{display:none}
  .card-h .sp .tab,.card-h .sp .spot-more{flex:0 0 auto}
  .card-b{padding:12px 13px 14px;overflow-x:auto;-webkit-overflow-scrolling:touch}
  .tab{height:28px;padding:0 11px;font-size:12px;white-space:nowrap}
  .sec-t{margin:16px 0 8px}

  /* ---------- 三级进度卡 ---------- */
  .prog-row{grid-template-columns:1fr;gap:10px;margin-bottom:12px}
  .prog-card{padding:13px 14px 12px;border-radius:13px}
  .prog-v{font-size:27px;letter-spacing:-.6px}
  .prog-v small{font-size:13px}
  .prog-h{margin-bottom:7px}
  .prog-foot{font-size:12px;gap:5px}
  .prog-sub{font-size:11px}
  .prog-bar{height:7px;margin-top:9px}

  /* 区间查询汇总：内联写了 repeat(4,1fr)，必须 !important 覆盖 */
  #qSummary{grid-template-columns:1fr 1fr!important;gap:10px!important}
  #qSummary .prog-v{font-size:20px;letter-spacing:-.3px}
  #qSummary .prog-v small{font-size:11px}
  #qSummary .prog-t{font-size:12px}
  #qSummary .prog-sub{font-size:10.5px}
  #qSummary .prog-card{padding:11px 12px 10px}

  /* 推广页 KPI 同为内联四列 */
  #view-ad .kpi-row{grid-template-columns:1fr 1fr!important;gap:10px!important;margin-bottom:12px}
  #view-ad .kpi{padding:12px 12px 11px}
  #view-ad .kpi .val{font-size:21px;letter-spacing:-.4px}
  #view-ad .kpi .lab{font-size:11.5px;margin-bottom:6px}
  #view-ad .kpi .foot{font-size:11px;gap:5px}

  /* ---------- 区间查询表单 ---------- */
  #view-query .field{width:100%!important;flex:1 1 100%;margin:0 0 10px!important}
  #view-query .field input{width:100%}
  #qGo{width:100%!important;padding:0!important;height:44px!important}
  #qMsg{flex:1 1 100%;min-height:16px}

  /* ---------- 排名明细：单列，行高加大便于点按 ---------- */
  .rank-grid{grid-template-columns:1fr;gap:0}
  .rank-row{grid-template-columns:24px 1fr 74px 50px;gap:8px;padding:9px 4px;min-height:42px}
  .rk-name .t{font-size:13px}
  .rk-val,.rk-rate{font-size:12.5px}
  .spot-row{padding:9px 4px;min-height:40px}
  .spot-row .nm .t{font-size:13px}

  /* ---------- 表格：横向滚动 + 首列吸附 ---------- */
  .tbl{min-width:620px;font-size:12px}
  .tbl.matrix{min-width:520px}
  .tbl th{padding:8px 7px}
  .tbl td{padding:9px 7px}
  .tbl th:first-child,.tbl td:first-child{
    position:sticky;left:0;background:#fff;z-index:2;box-shadow:1px 0 0 var(--line);
  }
  .tbl tbody tr:hover td:first-child{background:#FFFAF6}
  /* 矩阵表已有 .sticky-l，保持层级更高，避免与上面的规则打架 */
  .tbl.matrix .sticky-l{z-index:3}

  /* ---------- 推广概览小卡 ---------- */
  .ad-grid{grid-template-columns:1fr 1fr;gap:9px}
  .ad-cell{padding:10px 11px;border-radius:9px}
  .ad-cell .v{font-size:17px}
  .mini-kpis{grid-template-columns:1fr}

  /* ---------- 设置页：内联网格全部改单列 ---------- */
  #view-settings .card-b .grid{grid-template-columns:1fr!important;gap:10px!important}
  #view-settings .card-b .grid > div[style*="display:flex"]{flex-wrap:wrap}
  .field input,.sel{font-size:16px}   /* 全站 16px，防 iOS 聚焦放大 */
  .field{margin-bottom:13px}
  .btn-primary{height:46px;font-size:15.5px}

  /* ---------- 抽屉改为底部弹出（更适合单手） ---------- */
  .drawer{
    top:auto;bottom:0;left:0;right:0;width:100%;
    height:82vh;height:82dvh;
    border-radius:16px 16px 0 0;
    transform:translateY(102%);
    box-shadow:0 -16px 40px -20px rgba(0,0,0,.3);
  }
  .drawer.on{transform:none}
  .drawer-h{padding:14px 16px 12px}
  .drawer-h h3{font-size:15px}
  .drawer-b{padding:14px 16px calc(24px + env(safe-area-inset-bottom))}
  .mini-kpis{grid-template-columns:1fr 1fr}

  /* ---------- 强制改密弹窗：键盘弹起时也能滚 ---------- */
  .force-mask{padding:14px;align-items:center;overflow-y:auto}
  .force-card{padding:22px 18px 20px;max-height:86vh;max-height:86dvh;overflow-y:auto;border-radius:14px}
  .force-card h3{font-size:17px}
  .force-card p{font-size:12.5px;margin-bottom:16px}

  /* ---------- 登录页 ---------- */
  .login-wrap{grid-template-columns:1fr;min-height:100vh;min-height:100dvh}
  .login-left{display:none}
  .login-right{
    display:block;padding:0;background:var(--bg);
    padding-bottom:calc(24px + env(safe-area-inset-bottom));
  }
  .login-mobile-head{
    display:flex;align-items:center;gap:11px;
    padding:calc(22px + env(safe-area-inset-top)) 18px 20px;
    background:linear-gradient(135deg,#FF8A1F 0%,#FF6A00 58%,#E85700 100%);
    color:#fff;border-radius:0 0 20px 20px;
    box-shadow:0 12px 26px -20px rgba(255,106,0,.95);
  }
  .login-mobile-head .lg{
    width:40px;height:40px;border-radius:11px;display:grid;place-items:center;
    background:rgba(255,255,255,.22);font-size:18px;font-weight:800;flex:0 0 40px;
  }
  .login-mobile-head b{display:block;font-size:15px;font-weight:700;letter-spacing:.2px}
  .login-mobile-head small{display:block;font-size:11.5px;opacity:.85;margin-top:2px}
  .login-card{
    max-width:100%;margin:14px 12px 0;padding:20px 18px 22px;
    background:#fff;border-radius:16px;border:1px solid var(--line);box-shadow:var(--shadow);
  }
  .login-card h2{font-size:19px}
  .login-card .sub{font-size:12.5px;margin-bottom:18px}
  .login-note{margin-top:18px;padding-top:13px;font-size:11px}
}

/* 超窄屏（iPhone SE 等 375 以下）再收紧 */
@media(max-width:420px){
  .topbar .logo span{display:none}
  .datepick input{font-size:16px}
  .prog-v{font-size:25px}
  #qSummary .prog-v{font-size:18px}
  .tabbar a span{font-size:10px}
  .tabbar a svg{width:20px;height:20px}
  .drawer{height:88vh;height:88dvh}
}

/* 横屏手机：把底部导航让出来，内容区左右留白更紧凑 */
@media(max-width:720px) and (orientation:landscape){
  .tabbar a{min-height:44px;padding:3px 0}
  .tabbar a svg{width:18px;height:18px}
  .drawer{height:94vh;height:94dvh}
}

/* 企业微信内核兜底：部分旧版 X5 不支持 backdrop-filter */
.is-wecom .tabbar{background:#fff;-webkit-backdrop-filter:none;backdrop-filter:none}
.is-wecom .login-left .dot{-webkit-backdrop-filter:none;backdrop-filter:none}

/* 页面内轻提示（替代 alert，企微里 alert 常被拦或很难看） */
.toast{
  position:fixed;left:50%;bottom:calc(86px + env(safe-area-inset-bottom));
  transform:translateX(-50%) translateY(6px);
  background:rgba(28,28,30,.93);color:#fff;font-size:13px;font-weight:500;
  padding:10px 16px;border-radius:11px;z-index:200;
  max-width:86vw;text-align:center;line-height:1.5;
  opacity:0;transition:opacity .18s ease,transform .18s ease;pointer-events:none;
}
.toast.on{opacity:1;transform:translateX(-50%) translateY(0)}
@media(min-width:721px){ .toast{bottom:32px} }
