/* =============================================================================
   上品软件 · 统一设计体系（单一真源）
   管理后台 / 客户后台 / 登录页 共用这一个文件，不再各写一份 CSS 各自漂移。
   两条独立的主题轴：
     1) 视觉模式  data-mode = light | dark | compact   （个人偏好，存 localStorage，人人可选）
        - light : 明亮扁平、柔阴影、舒适密度
        - dark  : 暗色材质、深表面、强对比
        - compact: 明亮但高密度（更小留白/圆角/字号，信息密集）
        未显式选择时跟随系统 prefers-color-scheme。
     2) 品牌配色  data-theme = green | purple | blue | teal | orange （平台级，仅管理员可改）
   无障碍：focus-visible 焦点环 / prefers-reduced-motion 尊重减少动画 / 主题控件可键盘操作。
   ============================================================================= */

/* ---------- 设计令牌：亮色（默认） ---------- */
:root {
  --bg:#f4f5fb; --bg-2:#eef0f8;
  --panel:#ffffff; --panel-2:#fbfcfe; --panel-3:#f7f8fd;
  --ink:#1e2531; --ink-soft:#616b7b; --ink-mute:#8a93a3;  /* --ink-soft 加深至 ≥4.5:1 (WCAG AA 正文)；--ink-mute 同步加深 */
  --line:#e9ecf3; --line-2:#dfe3ec;
  --side-bg:#1c2333; --side-ink:#aab3c6; --side-ink-soft:#8b94a8; --side-hover:rgba(255,255,255,.06);
  --ok:#1f9d55; --ok-bg:#e8f7ee; --ok-line:#bfe6cd; --ok-ink:#17703e;
  --warn:#d98a1a; --warn-bg:#fff4e5; --warn-line:#f0c98a; --warn-ink:#8a5a00;
  --danger:#e14b3f; --danger-bg:#fdeeec; --danger-line:#f4c3bd; --danger-ink:#b23a30;
  --shadow:0 1px 2px rgba(30,37,49,.04), 0 6px 20px rgba(30,37,49,.05);
  --shadow-lg:0 8px 30px rgba(60,70,120,.14);
  /* 密度令牌（compact 会覆盖） */
  --r:12px; --r-sm:8px; --r-xs:6px;
  --fs:13.5px; --fs-sm:12.5px; --fs-xs:11px; --fs-h1:20px;
  --pad-card:18px 20px; --pad-cell:10px 12px; --gap:16px; --nav-pad:9px 20px; --side-w:200px;
  /* 企业级间距刻度（仅供 R23 样板组件取用；新增自定义属性，对既有页面零视觉影响） */
  --sp-1:4px; --sp-2:8px; --sp-3:12px; --sp-4:16px; --sp-6:24px;
  --focus:0 0 0 3px var(--brand-glow);
  color-scheme:light;
}
/* ---------- 暗色：跟随系统（未显式选择时） ---------- */
@media (prefers-color-scheme: dark) {
  :root:not([data-mode="light"]) {
    --bg:#0e131d; --bg-2:#0b0f18;
    --panel:#171e2b; --panel-2:#1b2434; --panel-3:#202a3c;
    --ink:#e6eaf3; --ink-soft:#9aa6bd; --ink-mute:#6b7690;
    --line:#26304a; --line-2:#324065;
    --side-bg:#0c111b; --side-ink:#aab3c6; --side-ink-soft:#7e88a0; --side-hover:rgba(255,255,255,.07);
    --ok-bg:#123123; --ok-line:#1f5a3a; --ok-ink:#6ee2a6;
    --warn-bg:#2f2410; --warn-line:#6b511e; --warn-ink:#f0c07a;
    --danger-bg:#341a1a; --danger-line:#6b2f2f; --danger-ink:#f19a9a;
    --brand-ink:#43c88a; /* 暗底链接/品牌墨色改用更亮品牌绿，保证文字≥4.5:1 */
    --shadow:0 1px 2px rgba(0,0,0,.4), 0 8px 26px rgba(0,0,0,.45);
    --shadow-lg:0 10px 40px rgba(0,0,0,.6);
    color-scheme:dark;
  }
}
/* ---------- 暗色：显式选择（覆盖系统） ---------- */
:root[data-mode="dark"] {
  --bg:#0e131d; --bg-2:#0b0f18;
  --panel:#171e2b; --panel-2:#1b2434; --panel-3:#202a3c;
  --ink:#e6eaf3; --ink-soft:#9aa6bd; --ink-mute:#6b7690;
  --line:#26304a; --line-2:#324065;
  --side-bg:#0c111b; --side-ink:#aab3c6; --side-ink-soft:#7e88a0; --side-hover:rgba(255,255,255,.07);
  --ok-bg:#123123; --ok-line:#1f5a3a; --ok-ink:#6ee2a6;
  --warn-bg:#2f2410; --warn-line:#6b511e; --warn-ink:#f0c07a;
  --danger-bg:#341a1a; --danger-line:#6b2f2f; --danger-ink:#f19a9a;
  --brand-ink:#43c88a; /* 暗底链接/品牌墨色改用更亮品牌绿，保证文字≥4.5:1 */
  --shadow:0 1px 2px rgba(0,0,0,.4), 0 8px 26px rgba(0,0,0,.45);
  --shadow-lg:0 10px 40px rgba(0,0,0,.6);
  color-scheme:dark;
}
/* ---------- 信息密度：独立轴 data-density（可与 light/dark 任意组合，非"第三种风格"） ---------- */
:root[data-density="compact"] {
  --r:8px; --r-sm:6px; --r-xs:4px;
  --fs:12.5px; --fs-sm:11.5px; --fs-xs:10.5px; --fs-h1:17px;
  --pad-card:11px 14px; --pad-cell:6px 9px; --gap:10px; --nav-pad:6px 18px; --side-w:184px;
}

/* ---------- 品牌配色轴（与模式正交）。--halo=品牌色光晕，登录背景/侧栏光晕都用它，随配色协调，不写死紫色 ---------- */
:root { --brand:#16a06a; --brand-ink:#0d7a49; --brand-2:#2bb87c;
  --grad:linear-gradient(135deg,#16a06a 0%,#2bb87c 100%);
  --grad-soft:linear-gradient(135deg,rgba(22,160,106,.10),rgba(43,184,124,.10));
  --brand-glow:rgba(22,160,106,.22); --brand-shadow:rgba(22,160,106,.30);
  --halo:rgba(22,160,106,.16); --halo-2:rgba(43,184,124,.12); }
/* --btn=按钮底色：由当前品牌色加深约28%，保证白字≥4.5:1(WCAG AA 正文对比度)对所有品牌轴成立；随 --brand 自动跟随。 */
:root { --btn: color-mix(in srgb, var(--brand) 72%, #000); }
[data-theme="purple"]{ --brand:#5563e6; --brand-ink:#4a56d2; --brand-2:#7b74f2; --grad:linear-gradient(135deg,#5b6cf0,#7a5cf0); --grad-soft:linear-gradient(135deg,rgba(91,108,240,.10),rgba(122,92,240,.10)); --brand-glow:rgba(85,99,230,.22); --brand-shadow:rgba(103,92,230,.30); --halo:rgba(91,108,240,.18); --halo-2:rgba(122,92,240,.13); }
[data-theme="blue"]{ --brand:#2d7ff9; --brand-ink:#1f6fe0; --brand-2:#4d9bff; --grad:linear-gradient(135deg,#2d7ff9,#4d9bff); --grad-soft:linear-gradient(135deg,rgba(45,127,249,.10),rgba(77,155,255,.10)); --brand-glow:rgba(45,127,249,.22); --brand-shadow:rgba(45,127,249,.28); --halo:rgba(45,127,249,.16); --halo-2:rgba(77,155,255,.12); }
[data-theme="teal"]{ --brand:#0ea5a5; --brand-ink:#0b8f8f; --brand-2:#22c3c3; --grad:linear-gradient(135deg,#0ea5a5,#22c3c3); --grad-soft:linear-gradient(135deg,rgba(14,165,165,.10),rgba(34,195,195,.10)); --brand-glow:rgba(14,165,165,.22); --brand-shadow:rgba(14,165,165,.28); --halo:rgba(14,165,165,.16); --halo-2:rgba(34,195,195,.12); }
[data-theme="orange"]{ --brand:#ef7a24; --brand-ink:#df6a14; --brand-2:#ff9a45; --grad:linear-gradient(135deg,#ef7a24,#ff9a45); --grad-soft:linear-gradient(135deg,rgba(239,122,36,.10),rgba(255,154,69,.10)); --brand-glow:rgba(239,122,36,.22); --brand-shadow:rgba(239,122,36,.28); --halo:rgba(239,122,36,.16); --halo-2:rgba(255,154,69,.12); }
:root[data-mode="dark"] [data-theme], :root[data-mode="dark"] { --grad-soft:linear-gradient(135deg,rgba(255,255,255,.05),rgba(255,255,255,.02)); }

/* ---------- 复位 ---------- */
* { box-sizing:border-box; }
html { scroll-behavior:smooth; }
body {
  margin:0; font-family:"Segoe UI","PingFang SC","Microsoft YaHei",system-ui,sans-serif;
  font-size:var(--fs); line-height:1.6; color:var(--ink); background:var(--bg);
  -webkit-font-smoothing:antialiased;
}
a { color:var(--brand-ink); text-decoration:none; transition:color .15s; }
a:hover { filter:brightness(1.1); }
img { max-width:100%; }

/* ============================================================================
   壳布局：CSS Grid，侧栏定宽 + 主区 minmax(0,1fr)。
   minmax(0,1fr) + main{min-width:0} 是根因修复：主区能收缩到内容以下，
   宽内容（榜单表）在自己的滚动容器里横向滚动，绝不把整页撑出横向滚动条。
   ============================================================================ */
body.admin-shell { display:grid; grid-template-columns:var(--side-w) minmax(0,1fr); min-height:100vh; }
nav.side {
  position:sticky; top:0; align-self:start; height:100vh; width:var(--side-w);
  display:flex; flex-direction:column; overflow-y:auto; overflow-x:hidden;
  background:var(--side-bg);
  background-image:radial-gradient(120% 60% at 0 0, var(--halo), transparent 55%); /* 品牌色光晕，随配色协调 */
  color:var(--side-ink); padding:20px 0 14px; z-index:20; box-shadow:2px 0 16px rgba(20,26,40,.24);
}
main { min-width:0; padding:26px 34px; animation:rise .4s cubic-bezier(.2,.7,.2,1) both; }
@keyframes rise { from{opacity:0;transform:translateY(12px);} to{opacity:1;transform:none;} }

/* 侧栏内部 */
nav.side .brand { color:#fff; font-weight:700; font-size:15px; letter-spacing:.3px; padding:0 20px 6px; display:flex; flex-direction:column; gap:2px; }
/* 品牌标识：原创几何「上」标（自绘 SVG，无外部字体/位图依赖），替代原先的临时渐变色块。
   用 mask 着色以适配侧栏深底；尺寸/间距与原色块一致，移动端侧栏布局不受影响。 */
nav.side .brand::before { content:""; width:26px; height:26px; margin-bottom:9px; background:linear-gradient(135deg,#43c88a,#2bb87c 55%,#9be3c4);
  -webkit-mask:url("brand/logo-mono.svg") no-repeat center/contain; mask:url("brand/logo-mono.svg") no-repeat center/contain; }
nav.side .brand span { color:var(--side-ink-soft); font-size:12px; font-weight:500; }
nav.side .navcap { color:#5b6478; font-size:10.5px; letter-spacing:1.5px; text-transform:uppercase; padding:14px 20px 5px; }
nav.side .navgroup { display:flex; flex-direction:column; }
nav.side a { position:relative; color:var(--side-ink); padding:var(--nav-pad); font-size:var(--fs); transition:color .16s,background .16s; border-left:3px solid transparent; }
nav.side a:hover { color:#fff; background:var(--side-hover); }
nav.side a.on { color:#fff; background:rgba(255,255,255,.10); border-left-color:var(--brand-2); font-weight:600; }
/* 图标化导航（企业控制台）：图标 + 文案对齐，选中态图标提亮为品牌色 */
nav.side .navgroup a { display:flex; align-items:center; gap:11px; }
nav.side .nav-ico { width:17px; height:17px; flex:0 0 auto; opacity:.72; transition:opacity .16s,color .16s; }
nav.side .navgroup a:hover .nav-ico { opacity:1; }
nav.side .navgroup a.on .nav-ico { opacity:1; color:var(--brand-2); }
nav.side .navgroup a > span { min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
nav.side .spacer { flex:1; min-height:8px; }
nav.side .navuser { padding:12px 20px 0; margin-top:8px; border-top:1px solid rgba(255,255,255,.07); display:flex; flex-direction:column; gap:4px; }
nav.side .navuser span { color:var(--side-ink-soft); font-size:12px; }
nav.side .navuser a { padding:4px 0; color:var(--side-ink); font-size:12.5px; border-left:none; }

/* 视觉模式切换（个人偏好，人人可用） */
.mode-toggle { display:flex; gap:6px; padding:8px 20px 2px; }
.mode-toggle button {
  flex:1; background:rgba(255,255,255,.06); color:var(--side-ink); border:1px solid rgba(255,255,255,.10);
  box-shadow:none; padding:6px 4px; font-size:11.5px; font-weight:600; border-radius:var(--r-sm); cursor:pointer;
  transition:background .14s,color .14s,border-color .14s;
}
.mode-toggle button:hover { color:#fff; background:rgba(255,255,255,.12); }
.mode-toggle button[aria-pressed="true"] { background:var(--btn); color:#fff; border-color:var(--btn); box-shadow:0 2px 8px var(--brand-shadow); }

/* 品牌配色圆点：显式收窄 padding，避免撑破侧栏（曾致底部横向滚动条的根因之一，这里不靠隐藏遮盖） */
nav.side .theme-pick { display:grid; grid-template-columns:repeat(5,18px); align-items:center; gap:9px; width:100%; padding:8px 20px 2px; flex:none; }
nav.side .theme-pick a { display:block; width:18px; min-width:18px; height:18px; margin:0; padding:0; border-left:0; border:2px solid transparent; border-radius:50%; cursor:pointer; transition:transform .12s,border-color .12s; }
nav.side .theme-pick a:hover { transform:scale(1.15); }
nav.side .theme-pick a.on { border-color:#fff; }
.theme-pick .tg{background:#16a06a;} .theme-pick .tp{background:#5b6cf0;} .theme-pick .tb{background:#2d7ff9;} .theme-pick .tt{background:#0ea5a5;} .theme-pick .to{background:#ef7a24;}

/* ---------- 排版 ---------- */
h1 { font-size:var(--fs-h1); font-weight:700; color:var(--ink); margin:2px 0 18px; letter-spacing:-.2px; }
h1 .muted { letter-spacing:0; }
.muted { color:var(--ink-soft); font-size:var(--fs-sm); font-weight:400; }
.ok { color:var(--ok); } .bad { color:var(--danger); }

/* ---------- 页头（企业级云控制台）：面包屑 · 标题 · 一句白话说明 · 右侧主动作 ---------- */
/* R23 阶段二：全部选择器前缀 body.r23s，仅本轮 10 个样板 route 生效，绝不影响非样板页。 */
body.r23s .pagehead { display:flex; flex-direction:column; gap:var(--sp-1); margin:0 0 var(--sp-6); }
body.r23s .pagehead .crumbs { display:flex; align-items:center; gap:6px; font-size:12px; color:var(--ink-mute); line-height:1.4; }
body.r23s .pagehead .crumbs a { color:var(--ink-soft); }
body.r23s .pagehead .crumbs a:hover { color:var(--brand-ink); }
body.r23s .pagehead .crumbs .sep { color:var(--line-2); font-size:11px; }
body.r23s .pagehead .crumbs b { color:var(--ink-soft); font-weight:600; }
body.r23s .pagehead__bar { display:flex; align-items:flex-start; justify-content:space-between; gap:var(--sp-4); flex-wrap:wrap; }
body.r23s .pagehead__bar h1 { margin:2px 0 0; }
body.r23s .pagehead__desc { margin:var(--sp-1) 0 0; color:var(--ink-soft); font-size:13px; font-weight:400; line-height:1.55; max-width:74ch; }
body.r23s .pagehead__act { display:flex; align-items:center; gap:var(--sp-2); flex:0 0 auto; padding-top:2px; }
body.r23s .pagehead__act .tag { align-self:center; }
body.r23s .pagehead__tabs { display:flex; gap:2px; margin:calc(-1 * var(--sp-3)) 0 var(--sp-4); border-bottom:1px solid var(--line); flex-wrap:wrap; }
body.r23s .pagehead__tabs a { padding:8px 14px; font-size:13px; color:var(--ink-soft); border-bottom:2px solid transparent; margin-bottom:-1px; }
body.r23s .pagehead__tabs a:hover { color:var(--brand-ink); }
body.r23s .pagehead__tabs a.on { color:var(--brand-ink); border-bottom-color:var(--brand); font-weight:600; }
@media (max-width:560px) { body.r23s .pagehead__bar { flex-direction:column; } body.r23s .pagehead__act { width:100%; } }

/* ============================================================================
   R23 阶段二样板皮肤 —— 仅 body.r23s（本轮 10 个样板 route）生效。
   未经 Codex 逐图批准，绝不把此标记扩到全站；未列入样板的页面保持原基准外观。
   企业级细化：圆角收敛 8–10、正文 14/辅助 12、统计数字实色墨、卡片左对齐。
   ============================================================================ */
body.r23s { --r:10px; --r-sm:8px; --r-xs:6px; --fs:14px; --fs-sm:12px; --fs-h1:19px; --pad-card:16px 18px; }
body.r23s .stat { background:none; -webkit-background-clip:border-box; background-clip:border-box; color:var(--ink); font-weight:700; font-size:26px; letter-spacing:-.3px; }
body.r23s .grid .card { text-align:left; padding:16px 18px; }
body.r23s .grid .card::before { display:none; }
body.r23s .grid .card:hover .stat { transform:none; }
/* 专业空状态（真实：说明 + 权限允许的下一步路径，绝不造假数据/假图表） */
body.r23s .emptystate { text-align:center; padding:36px 20px; display:flex; flex-direction:column; align-items:center; gap:10px; }
body.r23s .emptystate .es-ic { width:44px; height:44px; display:flex; align-items:center; justify-content:center; border-radius:12px; background:var(--panel-3); color:var(--ink-soft); }
body.r23s .emptystate .es-ic .ui-ico { width:22px; height:22px; }
body.r23s .emptystate b { font-size:15px; color:var(--ink); }
body.r23s .emptystate p { margin:0; max-width:54ch; color:var(--ink-soft); font-size:13px; line-height:1.6; }
/* 自动上品：分组表单（筛选开关网格 / 补给参数字段网格 / 排除规则表）+ 运行控制工具栏 */
body.r23s .auto-sec { margin-bottom:var(--sp-4); }
body.r23s .auto-sec:last-child { margin-bottom:0; }
body.r23s .auto-sec__hd { font-size:13px; font-weight:700; color:var(--ink); margin:0 0 2px; }
body.r23s .auto-sec__sub { font-size:12px; color:var(--ink-soft); margin:0 0 10px; line-height:1.5; }
body.r23s .auto-toolbar { display:flex; align-items:center; gap:var(--sp-2); flex-wrap:wrap; }
body.r23s .auto-toolbar form { margin:0; }
body.r23s .auto-checks { display:grid; grid-template-columns:repeat(auto-fill,minmax(212px,1fr)); gap:8px 12px; }
body.r23s .auto-checks label { display:flex; align-items:center; gap:8px; font-size:13px; color:var(--ink); padding:8px 11px; border:1px solid var(--line-2); border-radius:var(--r-sm); background:var(--panel); cursor:pointer; transition:border-color .14s; }
body.r23s .auto-checks label:hover { border-color:var(--brand); }
body.r23s .auto-checks input[type=checkbox] { flex:0 0 auto; margin:0; }
body.r23s .auto-fields { display:grid; grid-template-columns:repeat(auto-fill,minmax(184px,1fr)); gap:14px 16px; }
body.r23s .auto-fields .fld { display:flex; flex-direction:column; gap:4px; min-width:0; }
body.r23s .auto-fields .fld > span { font-size:12.5px; font-weight:600; color:var(--ink); }
body.r23s .auto-fields .fld input { width:100%; box-sizing:border-box; }
body.r23s .auto-fields .fld small { font-size:11.5px; color:var(--ink-soft); line-height:1.45; }
body.r23s .auto-extable input[type=text], body.r23s .auto-extable input:not([type]), body.r23s .auto-extable input[type=number] { width:100%; box-sizing:border-box; }
body.r23s .auto-extable th, body.r23s .auto-extable td { padding:6px 10px; }

/* ---------- 面板 ---------- */
.card { background:var(--panel); border:1px solid var(--line); border-radius:var(--r); padding:var(--pad-card); margin-bottom:var(--gap); box-shadow:var(--shadow); transition:box-shadow .18s,border-color .18s; }
.card:hover { border-color:var(--line-2); }
.row-head { width:100%; margin-bottom:10px; font-weight:700; color:var(--ink); font-size:14px; }
.row { display:flex; justify-content:space-between; padding:5px 0; }

/* ---------- 概览统计卡 ---------- */
.grid { display:grid; grid-template-columns:repeat(auto-fill,minmax(168px,1fr)); gap:14px; }
.grid .card { text-align:center; padding:22px 14px; cursor:default; position:relative; overflow:hidden; }
.grid .card::before { content:""; position:absolute; inset:0; background:var(--grad-soft); opacity:0; transition:opacity .25s; }
.grid .card:hover::before { opacity:1; }
.grid .card > * { position:relative; }
.grid .card > div:last-child { color:var(--ink-soft); font-size:var(--fs-sm); margin-top:4px; }
.stat { font-size:30px; font-weight:800; line-height:1.1; letter-spacing:-.5px; background:var(--grad); -webkit-background-clip:text; background-clip:text; color:transparent; transition:transform .22s; }
.grid .card:hover .stat { transform:scale(1.05); }

/* ---------- 反馈条 / Toast ---------- */
.flash { background:var(--ok-bg); border:1px solid var(--ok-line); color:var(--ok-ink); padding:11px 15px; border-radius:var(--r-sm); margin:12px 0; font-size:13px; animation:drop .3s ease both; }
.flash.err { background:var(--danger-bg); border-color:var(--danger-line); color:var(--danger-ink); }
@keyframes drop { from{opacity:0;transform:translateY(-8px);} to{opacity:1;transform:none;} }
.toast-host { position:fixed; right:18px; bottom:18px; display:flex; flex-direction:column; gap:8px; z-index:60; }
.toast { background:var(--panel); border:1px solid var(--line-2); color:var(--ink); padding:11px 15px; border-radius:var(--r-sm); box-shadow:var(--shadow-lg); font-size:13px; animation:drop .25s ease both; }
.toast.ok { border-left:3px solid var(--ok); } .toast.err { border-left:3px solid var(--danger); }

/* ---------- 空状态 / 加载骨架 ---------- */
.empty { text-align:center; color:var(--ink-soft); padding:40px 16px; }
.empty .emoji { font-size:34px; opacity:.5; display:block; margin-bottom:8px; }
.skeleton { position:relative; overflow:hidden; background:var(--panel-3); border-radius:var(--r-sm); }
.skeleton::after { content:""; position:absolute; inset:0; transform:translateX(-100%); background:linear-gradient(90deg,transparent,rgba(125,140,170,.12),transparent); animation:sk 1.2s infinite; }
@keyframes sk { to{transform:translateX(100%);} }

/* ---------- 登录页 ---------- */
.login-body { display:flex; align-items:center; justify-content:center; min-height:100vh; padding:16px; background:var(--bg-2);
  background-image:radial-gradient(60% 55% at 50% 0,var(--halo),transparent 70%),radial-gradient(50% 50% at 90% 100%,var(--halo-2),transparent 70%); } /* 品牌色，随配色协调，不写死紫 */
.login { width:min(340px,100%); box-shadow:var(--shadow-lg); animation:rise .4s cubic-bezier(.2,.7,.2,1) both; }
.login h2 { font-size:19px; font-weight:700; margin:0 0 4px; }
.login .muted { display:block; margin-bottom:18px; }
.login input { display:block; width:100%; margin-bottom:12px; }
.login button { width:100%; margin-top:4px; }
.login-tabs { display:flex; margin:0 0 16px; border:1px solid var(--line-2); border-radius:var(--r-sm); overflow:hidden; }
.login-tabs .ltab { flex:1; width:auto; margin:0; padding:9px 8px; background:var(--panel); border:none; border-radius:0; color:var(--ink-soft); font-size:13px; font-weight:600; cursor:pointer; transition:background .12s,color .12s; box-shadow:none; }
.login-tabs .ltab + .ltab { border-left:1px solid var(--line-2); }
.login-tabs .ltab.on { background:var(--btn); color:#fff; }
/* 管理后台：主要方式(验证器动态码) / 备用方式(账号密码) 的层级副标 */
.login-tabs .ltab small { display:block; font-size:10.5px; font-weight:400; opacity:.72; margin-top:1px; }
.captcha-row { display:flex; gap:8px; align-items:stretch; margin-bottom:12px; }
.captcha-row input { flex:1; width:auto; min-width:0; margin-bottom:0; }
.captcha-img { flex:none; width:130px; height:44px; border:1px solid var(--line-2); border-radius:var(--r-sm); cursor:pointer; background:#fff; }

/* ---------- 榜单宽表：只在 .pool-wrap 内横向滚动，字段完整不删 ---------- */
.pool-wrap { width:100%; max-width:100%; max-height:calc(100vh - 250px); overflow:auto; border:1px solid var(--line-2); border-radius:var(--r-sm); overscroll-behavior:contain; }
.pool-table { width:max-content; min-width:2827px; border-collapse:collapse; font-size:13px; background:var(--panel); }
.pool-table thead th { position:sticky; top:0; z-index:1; background:var(--panel-3); padding:8px 10px; text-align:left; font-weight:700; color:var(--ink); border:1px solid var(--line-2); white-space:nowrap; }
.pool-table td { padding:8px 10px; border:1px solid var(--line); vertical-align:top; }
.pool-table th.num, .pool-table td.num { text-align:right; white-space:nowrap; vertical-align:middle; }
.pool-table tbody tr:hover { background:var(--panel-2); }
.pool-table .pool-prod { display:grid; grid-template-columns:64px 1fr; gap:10px; align-items:start; }
.pool-table .pool-thumb { width:60px; height:60px; object-fit:cover; border-radius:5px; border:1px solid var(--line); display:block; }
.pool-table .pool-title { font-weight:700; color:var(--brand-ink); white-space:normal; word-break:break-word; line-height:1.4; }
.pool-table .pool-sub { margin-top:4px; color:var(--ink-soft); font-size:12px; white-space:normal; word-break:break-word; }
.pool-table .pool-chip { display:inline-block; margin:0 4px 4px 0; padding:2px 6px; border-radius:4px; background:var(--panel-3); color:var(--brand-ink); white-space:nowrap; font-size:12px; }
.pool-table .pool-rate { font-size:12px; margin-top:2px; }

/* ---------- 表单控件 ---------- */
input, select, textarea { padding:9px 12px; border:1px solid var(--line-2); border-radius:var(--r-sm); font-size:var(--fs); color:var(--ink); background:var(--panel); transition:border-color .16s,box-shadow .16s; }
input::placeholder { color:var(--ink-mute); }
input:focus, select:focus, textarea:focus { border-color:var(--brand); outline:none; box-shadow:var(--focus); }
.pricing-row { display:flex; flex-wrap:wrap; align-items:flex-end; gap:12px 16px; }
.pricing-row label { display:flex; flex-direction:column; font-size:12px; color:var(--ink-soft); gap:4px; }
.pricing-row input, .pricing-row select { width:130px; }

/* ---------- 按钮 ---------- */
button { background:var(--btn); color:#fff; border:none; cursor:pointer; padding:9px 18px; border-radius:var(--r-sm); font-size:var(--fs); font-weight:600; box-shadow:0 2px 6px var(--brand-shadow); transition:box-shadow .18s,filter .18s,transform .05s; }
button:hover { filter:brightness(1.06); box-shadow:0 4px 12px var(--brand-shadow); }
button:active { transform:translateY(1px); filter:brightness(.97); box-shadow:0 1px 3px var(--brand-shadow); }
.btn-sm { padding:5px 14px; font-size:12px; }
.btn-plain { background:var(--panel); color:var(--ink); border:1px solid var(--line-2); box-shadow:none; font-weight:500; }
.btn-plain:hover { filter:none; background:var(--panel-3); border-color:var(--line-2); box-shadow:var(--shadow); }
/* 主/次/危险三级按钮，<a class=btn> 与 <button> 同形；R23 前缀 body.r23s，仅样板页生效 */
body.r23s a.btn, body.r23s .btn { display:inline-flex; align-items:center; gap:6px; background:var(--btn); color:#fff; border:1px solid var(--btn); cursor:pointer; padding:8px 16px; border-radius:var(--r-sm); font-size:13px; font-weight:600; text-decoration:none; box-shadow:0 1px 2px var(--brand-shadow); transition:filter .15s,box-shadow .15s; }
body.r23s a.btn:hover, body.r23s .btn:hover { filter:brightness(1.06); box-shadow:0 3px 10px var(--brand-shadow); }
body.r23s a.btn-secondary, body.r23s .btn-secondary { display:inline-flex; align-items:center; gap:6px; background:var(--panel); color:var(--ink); border:1px solid var(--line-2); box-shadow:none; font-weight:500; padding:8px 16px; border-radius:var(--r-sm); font-size:13px; text-decoration:none; cursor:pointer; transition:background .15s,border-color .15s; }
body.r23s a.btn-secondary:hover, body.r23s .btn-secondary:hover { background:var(--panel-3); border-color:var(--line-2); filter:none; }
body.r23s .btn-danger { background:var(--danger); border-color:var(--danger); color:#fff; }
body.r23s .btn-danger:hover { filter:brightness(1.05); }

/* ---------- 标签 / 徽章 ---------- */
.tag { display:inline-block; font-size:var(--fs-xs); font-weight:600; background:var(--panel-3); color:var(--ink-soft); border:0; padding:3px 10px; border-radius:999px; vertical-align:middle; }
.tag.bound { background:var(--ok-bg); color:var(--ok-ink); }

/* ---------- 状态胶囊（前置圆点，企业控制台「运行中 ○」语义色） ---------- */
.pill { display:inline-flex; align-items:center; gap:6px; font-size:var(--fs-xs); font-weight:600; padding:3px 10px 3px 8px; border-radius:999px; background:var(--panel-3); color:var(--ink-soft); border:1px solid var(--line-2); vertical-align:middle; line-height:1.5; white-space:nowrap; }
.pill::before { content:""; width:6px; height:6px; border-radius:50%; background:currentColor; flex:0 0 auto; }
.pill--ok { background:var(--ok-bg); color:var(--ok-ink); border-color:var(--ok-line); }
.pill--warn { background:var(--warn-bg); color:var(--warn-ink); border-color:var(--warn-line); }
.pill--danger { background:var(--danger-bg); color:var(--danger-ink); border-color:var(--danger-line); }
.pill--info { background:var(--grad-soft); color:var(--brand-ink); border-color:var(--brand-glow); }

/* ---------- 信息卡：标题 + 对齐的「标签 · 值」行（企业控制台 实例信息/登录信息 样式） ---------- */
.infocard { background:var(--panel); border:1px solid var(--line); border-radius:var(--r); box-shadow:var(--shadow); margin-bottom:var(--gap); overflow:hidden; }
.infocard__hd { display:flex; align-items:center; gap:10px; padding:13px 18px; border-bottom:1px solid var(--line); font-weight:700; color:var(--ink); font-size:14px; }
.infocard__hd .ui-ico { width:16px; height:16px; color:var(--brand-ink); flex:0 0 auto; }
.infocard__hd .spacer { flex:1; }
.infocard__bd { padding:6px 18px 10px; }
.kv { display:flex; align-items:flex-start; gap:14px; padding:8px 0; border-bottom:1px solid var(--line); font-size:13px; }
.kv:last-child { border-bottom:0; }
.kv > .k { flex:0 0 108px; color:var(--ink-soft); font-weight:500; }
.kv > .v { flex:1 1 auto; min-width:0; color:var(--ink); word-break:break-word; }
.kv > .v.mono { font-family:"SFMono-Regular",Consolas,"Liberation Mono",monospace; letter-spacing:.2px; }
@media (max-width:520px) { .kv { flex-direction:column; gap:2px; } .kv > .k { flex:none; } }

/* ---------- 客户卡片 / 折叠操作 ---------- */
.tcard { display:flex; align-items:center; flex-wrap:wrap; gap:6px 8px; padding:12px 16px; }
.tcard .tid { font-size:14px; white-space:nowrap; }
.tcard .tmeta { color:var(--ink-soft); font-size:12.5px; margin:0 2px; }
.tcard .tmeta b { color:var(--ink); }
.tcard .spacer { flex:1; min-width:8px; }
.tcard details { border:1px solid var(--line-2); border-radius:8px; background:var(--panel-2); }
.tcard details[open] { width:100%; order:10; background:var(--panel); }
.tcard summary { cursor:pointer; padding:4px 11px; font-size:12.5px; user-select:none; list-style:none; white-space:nowrap; color:var(--ink-soft); transition:background .12s,color .12s; }
.tcard summary::-webkit-details-marker { display:none; }
.tcard summary:hover { color:var(--brand-ink); background:var(--panel-3); border-radius:7px; }
.tcard details[open] > summary { border-bottom:1px solid var(--line-2); font-weight:600; color:var(--brand-ink); }
.tcard .tact-go { margin:0; } .tcard .tact-go .btn-plain { padding:4px 11px; font-size:12.5px; }
.act-form { display:flex; flex-wrap:wrap; gap:10px; align-items:flex-end; padding:10px 14px; max-width:100%; box-sizing:border-box; }
.act-form label { font-size:12.5px; min-width:0; max-width:100%; box-sizing:border-box; }
/* R22：窄屏/长行时行内输入不得顶破卡片与根页面（管理端每租户操作表单）。inline width 仍是首选宽度，容器不足时收缩。 */
.act-form input, .act-form select { max-width:100%; box-sizing:border-box; }

/* ---------- 列表页统一工具栏外框（标题条 + 结果摘要 + 查询体），三大表格页共用同一层级 ---------- */
.tbltoolbar { background:var(--panel); border:1px solid var(--line); border-radius:var(--r); box-shadow:var(--shadow); margin-bottom:var(--gap); overflow:hidden; }
.tbltoolbar__hd { display:flex; align-items:center; gap:9px; padding:11px 16px; border-bottom:1px solid var(--line); font-weight:700; font-size:13.5px; color:var(--ink); }
.tbltoolbar__hd .ui-ico { width:15px; height:15px; color:var(--brand-ink); flex:0 0 auto; }
.tbltoolbar__hd .count { margin-left:auto; font-weight:600; color:var(--ink-soft); font-size:12.5px; }
.tbltoolbar__hd .count b { color:var(--ink); }
.tbltoolbar__bd { padding:13px 16px; }
.tbltoolbar__bd > form { margin:0; }

/* ---------- 分类多行搜索工具条（共享组件：总数据 / 任务中心 / 管理端列表通用） ---------- */
/* 分组命名(关键词 / 精确商品ID多行 / 状态来源 / 操作)；默认紧凑、展开不撑空白；精确ID多行、关键词与ID分属两栏。 */
.tdx-search { display:flex; flex-wrap:wrap; gap:12px 18px; align-items:flex-start; }
.tdx-search .tdx-grp { display:flex; flex-direction:column; gap:5px; min-width:0; }
.tdx-search .gl { font-size:11px; font-weight:700; letter-spacing:.02em; color:var(--ink-soft); }
.tdx-search .row { display:flex; flex-wrap:wrap; gap:6px; align-items:center; }
.tdx-search input[type=text], .tdx-search input[type=number], .tdx-search input[type=date], .tdx-search textarea, .tdx-search select { padding:7px 9px; border:1px solid var(--line-2); border-radius:var(--r-sm); background:var(--panel); color:var(--ink); box-sizing:border-box; font:inherit; }
.tdx-search textarea { line-height:1.4; font-size:12.5px; }
.tdx-search input:focus-visible, .tdx-search textarea:focus-visible, .tdx-search select:focus-visible { outline:2px solid var(--brand); outline-offset:1px; }
.tdx-search label { display:flex; align-items:center; gap:4px; font-size:12.5px; color:var(--ink-soft); white-space:nowrap; }
.tdx-search button[type=submit] { background:var(--btn); color:#fff; border:0; padding:8px 16px; border-radius:var(--r-sm); font-weight:600; cursor:pointer; }
.tdx-search button[type=submit]:hover { filter:brightness(1.06); }
.tdx-search button[type=submit]:focus-visible { outline:2px solid var(--brand); outline-offset:2px; }
.tdx-idnote { font-size:11px; color:var(--ink-soft); }
.tdx-idnote .bad { color:var(--danger-ink); }
/* 次级操作条（如总数据「手动上品」）：视觉上是表格上方的工具条，弱于筛选卡，避免层级竞争 */
.tdx-actionbar { display:flex; flex-wrap:wrap; align-items:center; gap:10px; padding:10px 14px; background:var(--panel-3); border:1px solid var(--line-2); border-radius:var(--r-sm); }
.tdx-actionbar > b { font-size:13px; }
.tdx-actionbar .cnt { font-size:12px; color:var(--ink-soft); }
.tdx-actionbar textarea { flex:1 1 240px; min-width:0; max-width:460px; padding:7px 9px; border:1px solid var(--line-2); border-radius:var(--r-sm); background:var(--panel); color:var(--ink); box-sizing:border-box; resize:vertical; font:inherit; }
.tdx-actionbar textarea:focus-visible { outline:2px solid var(--brand); outline-offset:1px; }
.tdx-actionbar button[type=submit] { background:var(--btn); color:#fff; border:0; padding:8px 16px; border-radius:var(--r-sm); font-weight:600; cursor:pointer; }
.tdx-actionbar button[type=submit]:hover { filter:brightness(1.06); }
.tdx-actionbar .hint { font-size:12px; color:var(--ink-soft); flex:1 1 100%; }

/* ---------- 统一线性图标（内联 SVG，替代 emoji/廉价字符图标） ---------- */
.ui-ico { width:1.1em; height:1.1em; display:inline-block; vertical-align:-0.15em; flex:0 0 auto; }

/* ---------- 统一分页栏（列表页通用） ---------- */
.pgbar { display:flex; align-items:center; gap:8px; flex-wrap:wrap; padding:10px 14px; border-top:1px solid var(--line); font-size:12.5px; color:var(--ink-soft); }
.pgbar b { color:var(--ink); }

/* ---------- 概览分组统计（状态/业务·账户）：统一数字字号、实色(无渐变裁字)、稳定栅格无孤卡 ---------- */
.ov { display:flex; flex-direction:column; gap:16px; }
.ov-group__hd { font-size:12px; font-weight:700; color:var(--ink-soft); letter-spacing:.02em; margin:0 0 8px; }
.ov-stats { display:grid; grid-template-columns:repeat(auto-fill,minmax(148px,1fr)); gap:12px; }
.ov-card { background:var(--panel); border:1px solid var(--line-2); border-radius:var(--r-sm); padding:14px 16px; }
.ov-card .ov-num { font-size:22px; font-weight:700; line-height:1.15; color:var(--ink); }
.ov-card .ov-num.ok { color:var(--ok-ink); }
.ov-card .ov-num.bad { color:var(--danger-ink); }
.ov-card .ov-num.warn { color:var(--warn-ink); }
.ov-card .ov-lbl { font-size:12px; color:var(--ink-soft); margin-top:4px; }
/* 首屏「下一步建议」：真实状态驱动，无假数据/假图表 */
.ov-todo { display:flex; flex-direction:column; gap:8px; }
.ov-todo__item { display:flex; align-items:flex-start; gap:9px; padding:9px 11px; border:1px solid var(--line-2); border-radius:var(--r-sm); background:var(--panel-3); font-size:12.5px; text-decoration:none; color:var(--ink); }
.ov-todo__item:hover { border-color:var(--brand); }
.ov-todo__item .ui-ico { color:var(--brand-ink); margin-top:1px; }
.ov-todo__item.warn .ui-ico { color:var(--warn-ink); }
.ov-todo__item .a { color:var(--brand-ink); font-weight:600; white-space:nowrap; margin-left:auto; }
.ov-empty { font-size:12.5px; color:var(--ink-soft); padding:9px 11px; }

/* ---------- 运营工作台：宽屏两栏（主区数据/配置 + 侧栏入口），窄屏堆叠；充分利用宽屏、消除大面积空白 ---------- */
.workbench { display:grid; grid-template-columns:1fr; gap:var(--gap); align-items:start; }
@media (min-width:1080px) { .workbench { grid-template-columns:minmax(0,1.62fr) minmax(300px,1fr); } }
.workbench__main, .workbench__side { display:flex; flex-direction:column; gap:var(--gap); min-width:0; }
.workbench__main > *, .workbench__side > * { margin-bottom:0; }
/* 侧栏面板标题（与 infocard 同源，但用于入口/健康小卡） */
.sidepanel { background:var(--panel); border:1px solid var(--line); border-radius:var(--r); box-shadow:var(--shadow); overflow:hidden; }
.sidepanel__hd { display:flex; align-items:center; gap:8px; padding:12px 16px; border-bottom:1px solid var(--line); font-weight:700; font-size:13.5px; color:var(--ink); }
.sidepanel__hd .ui-ico { width:15px; height:15px; color:var(--brand-ink); }
.sidepanel__bd { padding:12px 14px; display:flex; flex-direction:column; gap:8px; }
.sidepanel__bd .quick-entries { grid-template-columns:1fr; gap:8px; }
/* 系统健康行：标签 + 状态胶囊，右对齐 */
.healthrow { display:flex; align-items:center; gap:10px; font-size:13px; padding:7px 2px; }
.healthrow .hl { color:var(--ink-soft); }
.healthrow .hv { margin-left:auto; font-weight:600; color:var(--ink); }

/* ---------- 表格 ---------- */
table.shops { width:100%; border-collapse:separate; border-spacing:0; margin-top:8px; }
/* 十轮·UI补：普通客户表(选品/计费明细)只在自身容器内横滚，绝不撑宽页面；单元格 nowrap 防止窄屏逐字竖排。
   table 用 width:auto+min-width:100%：内容窄时填满卡片，内容宽时长到 max-content 并在 .table-wrap 内横滚。 */
.table-wrap { width:100%; max-width:100%; overflow-x:auto; -webkit-overflow-scrolling:touch; }
.table-wrap > table.shops { width:auto; min-width:100%; }
.table-wrap > table.shops th, .table-wrap > table.shops td { white-space:nowrap; }
table.shops th, table.shops td { text-align:left; padding:var(--pad-cell); font-size:13px; border-bottom:1px solid var(--line); }
table.shops th { color:var(--ink-soft); font-weight:600; font-size:12px; background:var(--panel-2); }
table.shops th:first-child { border-top-left-radius:var(--r-sm); }
table.shops th:last-child { border-top-right-radius:var(--r-sm); }
table.shops tbody tr { transition:background .16s; }
table.shops tbody tr:hover td { background:var(--panel-3); }
table.shops tr:last-child td { border-bottom:0; }

/* ---------- 管理员代看横幅 ---------- */
.imp-banner { background:var(--warn-bg); border:1px solid var(--warn-line); color:var(--warn-ink); padding:9px 15px; border-radius:var(--r-sm); margin:0 0 16px; font-size:13px; }
.imp-banner a { color:var(--warn-ink); font-weight:700; margin-left:10px; text-decoration:underline; }

/* ============================================================================
   无障碍
   ============================================================================ */
:focus-visible { outline:2px solid var(--brand); outline-offset:2px; }
a:focus-visible, button:focus-visible, summary:focus-visible, [tabindex]:focus-visible { outline:2px solid var(--brand); outline-offset:2px; border-radius:4px; }
.mode-toggle button:focus-visible, .theme-pick a:focus-visible { outline:2px solid #fff; outline-offset:2px; }
@media (prefers-reduced-motion: reduce) { *, *::before, *::after { animation:none !important; transition:none !important; scroll-behavior:auto !important; } }

/* ============================================================================
   响应式：320 / 375 / 390 / 768 / 1024 / 1280 / 1440 / 1920
   页面本身永不横向溢出；侧栏在窄屏折叠为顶部横栏；宽表在自身容器内滚动。
   ============================================================================ */
@media (max-width:1024px) { main { padding:22px 22px; } }

/* 移动端：产品级抽屉导航（汉堡按钮 + 侧滑抽屉 + 遮罩），而非把菜单堆在顶部 */
.nav-toggle { display:none; }
.nav-backdrop { display:none; }
@media (max-width:860px) {
  .nav-toggle {
    display:inline-flex; align-items:center; justify-content:center; position:fixed; top:10px; left:10px; z-index:46;
    width:42px; height:42px; border-radius:11px; background:var(--side-bg); color:#fff; border:none; box-shadow:var(--shadow); font-size:18px; cursor:pointer;
  }
  body.admin-shell { grid-template-columns:minmax(0,1fr); }
  nav.side {
    position:fixed; top:0; left:0; height:100vh; width:min(82vw,290px);
    transform:translateX(-100%); transition:transform .22s ease; z-index:48;
    flex-direction:column; overflow-y:auto;
  }
  body.nav-open nav.side { transform:none; box-shadow:6px 0 30px rgba(10,14,22,.4); }
  .nav-backdrop { display:block; position:fixed; inset:0; background:rgba(10,14,22,.45); z-index:47; opacity:0; pointer-events:none; transition:opacity .2s; }
  body.nav-open .nav-backdrop { opacity:1; pointer-events:auto; }
  main { padding:64px 16px 16px; }   /* 顶部留白给汉堡按钮 */
}
@media (max-width:430px) { nav.side { width:86vw; } }
@media (max-width:430px) {
  :root { --fs:13px; --pad-card:14px 14px; }
  main { padding:60px 12px 12px; }   /* 顶部保留汉堡按钮(top:10,高42)让位，标题/表单不被遮挡 */
  .pricing-row input, .pricing-row select { width:100%; }
  .pricing-row label { width:100%; }
  .login { width:100%; }
}
/* 登录页在窄屏无汉堡按钮，无需顶部让位 */
@media (max-width:430px) { body.login-body main { padding:12px; } }

/* ---------- R16 密度表格（管理端榜单池 + 客户端总数据 共用）：拆列/矮行/单行辅助/浮层 ---------- */
.mt th, .mt td { padding:6px 8px; vertical-align:middle; }
.mt .num { text-align:right; white-space:nowrap; }
.mt .ctr { text-align:center; white-space:nowrap; }
.mt .one { display:block; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; max-width:100%; }
.mt .mt-id { font-size:12px; color:var(--ink-soft); }
.mt .mt-sub { font-size:12px; color:var(--ink-soft); }
.mt .mt-img { width:52px; height:52px; object-fit:cover; border-radius:4px; border:1px solid var(--line); display:block; margin:0 auto; }
.mt .mt-imgph { width:52px; height:52px; border:1px dashed var(--line-2); border-radius:4px; display:flex; align-items:center; justify-content:center; color:var(--ink-soft); font-size:11px; margin:0 auto; }
.mt .mt-title { display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; overflow:hidden; line-height:1.35; font-weight:600; color:var(--brand-ink); word-break:break-word; font-size:12.5px; }
/* 上品决策·标签列组：每类一列，同类多项单行紧凑；全部原始标签直接可见——无 +N、无浮层、无点击/悬停。
   nowrap 不换行(不撑高行)；不裁字(overflow:visible，列宽已按边界样本给足，含超长品牌名)；空=—。 */
.mt .mt-tagcol { display:inline-flex; align-items:center; gap:4px; white-space:nowrap; overflow:visible; }
.mt .mt-tagchip { display:inline-block; padding:1px 5px; border:1px solid var(--line-2); border-radius:4px; background:var(--panel-3); color:var(--ink); font-size:12px; line-height:1.5; white-space:nowrap; }
/* 标签决策列收紧左右内边距(每侧 2px)，保证 7 列 + 全品牌在 1440 同屏（不缩字、不换行、不裁字、不压标题） */
.mt th[class*="mtc-tg_"], .mt td[class*="mtc-tg_"] { padding-left:1px; padding-right:1px; }
/* 风险/合规：颜色仅辅助判断，文字始终完整可读(不靠颜色单独表意)；浅深色均清晰。 */
.mt .mt-tagcol.risk .mt-tagchip { background:var(--danger-bg); border-color:var(--danger-line); color:var(--danger-ink); font-weight:600; }
.mt .mt-tagcol.comp .mt-tagchip { background:var(--warn-bg); border-color:var(--warn-line); color:var(--warn-ink); }
.mt .rate-up { color:#c24141; } .mt .rate-down { color:#2f7d32; } .mt .dash { color:var(--ink-soft); }
/* 左吸附（两端各自定 left 偏移；背景不透明，悬停同步换色，右缘投影提示） */
.mt .stkl { position:sticky; z-index:2; background:var(--panel); }
.mt thead .stkl { z-index:4; background:var(--panel-3); }
.mt tbody tr:hover .stkl { background:var(--panel-2); }
.mt .stkl-last { box-shadow:6px 0 8px -6px rgba(0,0,0,.28); }
/* 右吸附（客户端上品操作列） */
.mt .stkr { position:sticky; right:0; z-index:2; background:var(--panel); box-shadow:-6px 0 8px -6px rgba(0,0,0,.28); }
.mt thead .stkr { z-index:4; background:var(--panel-3); }
.mt tbody tr:hover .stkr { background:var(--panel-2); }
.mt th, .mt td { box-sizing:border-box; }

/* 快捷入口：精致紧凑响应式入口组件（名称+白话说明+图形+当前态/悬停/焦点）。复用统一 token，无散落内联样式。 */
.quick-entries { display:grid; grid-template-columns:repeat(auto-fill, minmax(230px, 1fr)); gap:10px; }
.qentry { display:flex; align-items:flex-start; gap:10px; padding:12px; border:1px solid var(--line-2); border-radius:var(--r-sm); background:var(--panel); color:var(--ink); text-decoration:none; transition:border-color .15s ease, background .15s ease, transform .15s ease; }
.qentry:hover { border-color:var(--brand); background:var(--panel-3); transform:translateY(-1px); }
.qentry:focus-visible { outline:2px solid var(--brand); outline-offset:2px; }
.qentry.on { border-color:var(--brand); box-shadow:inset 3px 0 0 var(--brand); }
.qentry__ic { flex:0 0 auto; width:36px; height:36px; display:flex; align-items:center; justify-content:center; border-radius:8px; background:var(--panel-3); font-size:18px; line-height:1; color:var(--brand-ink); }
.qentry:hover .qentry__ic { background:var(--brand); color:#fff; }
.qentry__tx { min-width:0; display:flex; flex-direction:column; gap:2px; }
.qentry__tx b { font-size:13.5px; font-weight:600; color:var(--brand-ink); }
.qentry__tx small { font-size:12px; color:var(--ink-soft); line-height:1.4; }
@media (max-width:520px) { .quick-entries { grid-template-columns:1fr; } }
@media (prefers-reduced-motion:reduce) { .qentry { transition:none; } .qentry:hover { transform:none; } }
/* 登录页原创标识：主标(图形+字标)，随卡片宽度自适应，小屏不溢出 */
.login-logo { display:block; width:200px; max-width:70%; height:auto; margin:0 auto 10px; }

/* R28 店铺绑定：三层「店铺与物流」+ 一次配齐的绑定抽屉。竖排字段，窄屏不横向溢出。 */
.shop-card { display:flex; gap:12px; align-items:flex-start; justify-content:space-between; flex-wrap:wrap;
  padding:12px 0; border-top:1px solid var(--line); }
.shop-card:first-of-type { border-top:0; }
.shop-card > div:first-child { min-width:0; flex:1 1 260px; }
.shop-acts { display:flex; gap:6px; align-items:center; flex-wrap:wrap; }
.bind-drawer > summary { display:inline-block; list-style:none; }
.bind-drawer > summary::-webkit-details-marker { display:none; }
.bind-grid { display:grid; grid-template-columns:repeat(auto-fit,minmax(min(220px,100%),1fr)); gap:10px 14px; }
.bind-grid label { display:flex; flex-direction:column; gap:4px; min-width:0; }
.bind-grid label > span { font-weight:600; font-size:13px; }
.bind-grid label > i { font-style:normal; font-size:12px; line-height:1.4; }
.bind-grid select, .bind-grid input { width:100%; max-width:100%; box-sizing:border-box; }
.bind-miss:not(:empty) { margin-top:8px; font-size:13px; }
@media (max-width:520px) { .bind-grid { grid-template-columns:1fr; } }

/* R28 修复 site_matrix 实测两项：①绑定抽屉在 flex 子项内导致根横向溢出 ②缺项提示对比度 2.93<4.5 */
.shop-acts, .bind-drawer, .bind-form { min-width: 0; max-width: 100%; }
.bind-drawer { display: block; }
.bind-grid { min-width: 0; }
.bind-grid > label { min-width: 0; }
.bind-grid select, .bind-grid input { min-width: 0; }
.bind-miss, .bind-warn { color: #8a4b06; }                 /* 深琥珀：白底对比度 ≈7.0，深色底另见下 */
@media (prefers-color-scheme: dark) { .bind-miss, .bind-warn { color: #f0a95c; } }
:root[data-theme="dark"] .bind-miss, :root[data-theme="dark"] .bind-warn { color: #f0a95c; }
:root[data-theme="light"] .bind-miss, .bind-warn { color: #8a4b06; }

/* R28：抽屉独占一行(不挤在操作列里)，从根上消除 flex 子项内的网格溢出 */
/* R33：抽屉现在是 .shop-card 的直接 flex 子项，这条 flex-basis:100% 才真正生效——
   之前它被包在一层普通 <div> 里，100% 只等于那层窄包装的宽度，表单被压成右侧窄条。 */
.bind-drawer { flex:1 1 100%; width:100%; }
.shop-card { align-items:flex-start; }
/* 展开后的表单用卡片的有效宽度，并按宽度分档：宽屏多列、窄屏单列，两侧都不留大片空白 */
.bind-drawer[open] { margin-top:10px; padding-top:10px; border-top:1px dashed var(--line); }
.bind-form { width:100%; }
.bind-grid { grid-template-columns:repeat(auto-fit,minmax(min(240px,100%),1fr)); }
@media (min-width:1200px) { .bind-grid { grid-template-columns:repeat(4,minmax(0,1fr)); } }
@media (min-width:900px) and (max-width:1199px) { .bind-grid { grid-template-columns:repeat(3,minmax(0,1fr)); } }
@media (min-width:600px) and (max-width:899px) { .bind-grid { grid-template-columns:repeat(2,minmax(0,1fr)); } }
@media (max-width:599px) { .bind-grid { grid-template-columns:1fr; } }
