/* ===== 租客邦 SaaS - 浅色纸感设计系统 ===== */
:root{
  --bg:#f7f6f3;
  --paper:#ffffff;
  --sidebar:#faf9f7;
  --ink:#1a1a1a;
  --muted:#6b6b6b;
  --light:#5f6b7a;
  --line:#e8e6e1;
  --line-soft:#f0eeea;
  --accent:#0f766e;
  --accent-light:#ccfbf1;
  --green:#047857;
  --green-bg:#d1fae5;
  --orange:#b45309;
  --orange-bg:#fef3c7;
  --red:#b91c1c;
  --red-bg:#fee2e2;
  --blue:#1d4ed8;
  --blue-bg:#dbeafe;
  --purple:#7c3aed;
  /* fix94：统计卡扩到 8 张后原 6 色不够用，补靛蓝与石板灰，避免同色重复 */
  --indigo:#4338ca;
  --indigo-bg:#eef2ff;
  --slate:#334155;
  --slate-bg:#f8fafc;
  --shadow:0 1px 3px rgba(0,0,0,0.04),0 4px 12px rgba(0,0,0,0.03);
  --shadow-hover:0 4px 12px rgba(0,0,0,0.06),0 12px 32px rgba(0,0,0,0.04);
  --shadow-drawer:-20px 0 60px rgba(0,0,0,0.1);
  --shadow-modal:0 24px 80px rgba(0,0,0,0.15);
  --radius-sm:8px;
  --radius-md:10px;
  --radius-lg:12px;
  --radius-xl:16px;

  /* ===== fix166 全站统计卡渐变底（原先是各页面 JS 里写死的内联 background，
     内联优先级高于 CSS，导致深色模式下压不住、卡片一律白底。这里统一收敛到变量层。 ===== */
  --card-grad-from:#ffffff;
  --card-grad-accent:#f0fdf9;
  --card-grad-blue:#eff6ff;
  --card-grad-green:#f0fdf4;
  --card-grad-orange:#fffbeb;
  --card-grad-red:#fef2f2;
  --card-grad-purple:#f5f3ff;
  --card-grad-violet:#faf5ff;
  --card-grad-teal:#f0fdfa;
  --card-grad-indigo:#eef2ff;
  --card-grad-slate:#f8fafc;
  --card-shadow:0 1px 2px rgba(16,24,40,.04),0 8px 20px -14px rgba(16,24,40,.18);
  --card-shadow-hover:0 2px 5px rgba(16,24,40,.06),0 16px 30px -16px rgba(16,24,40,.26);

  /* ===== fix166 语义色「文字/描边」亮色档 =====
     浅色主题下与 --red/--green/... 同值（视觉零变化）；深色主题下切到亮色档，
     保证彩色文字、卡片顶部 3px 色条、提示条文字在暗底上仍然清晰。
     注意：这些只用于 color / border，不要用于 background（会破坏 --xxx + #fff 的按钮）。 ===== */
  /* 主色（青绿）用 var 别名，这样 ocean/lime/amber/graphite 各主题无需重复声明即可跟随 */
  --accent-ink:var(--accent);
  --red-ink:#b91c1c;
  --orange-ink:#b45309;
  --green-ink:#047857;
  --blue-ink:#1d4ed8;
  --purple-ink:#7c3aed;
  --indigo-ink:#4338ca;
  --slate-ink:#334155;
  /* 订阅页「推荐/上级」说明块的底与边（原为硬编码浅绿，深色下会变成刺眼亮块） */
  --sub-ref-bg:linear-gradient(135deg,#ecfdf5,#f0fdfa);
  --sub-ref-border:#a7f3d0;
}

/* fix166：套餐色三档 token（浅色档必须写在这里，只有深色档会让浅色模式拿不到值、
   卡片顶边色条与套餐名一起失效）
   -bg / -fg ：随主题切换。用于工作台内的套餐卡、套餐标签（暗底上必须是亮色档）
   -ink      ：不随主题切换。只用于公开落地页——那页是独立浅色设计体系，
               卡片永远是 #def8a6 / #f1f2a3 这类浅色块，浅黄底 + --fg 亮黄字对比度仅 1.2:1 */
:root{
  --plan-basic-bg:#dbeafe; --plan-basic-fg:#2563eb; --plan-basic-ink:#2563eb;
  --plan-standard-bg:#ccfbf1; --plan-standard-fg:#0f766e; --plan-standard-ink:#0f766e;
  --plan-pro-bg:#ede9fe; --plan-pro-fg:#7c3aed; --plan-pro-ink:#7c3aed;
  --plan-flagship-bg:#fef3c7; --plan-flagship-fg:#b45309; --plan-flagship-ink:#b45309;
}

/* ===== 主题皮肤（设置中心可切换，localStorage 记住选择） ===== */
[data-theme="ocean"]{
  --bg:#f2f6fa;
  --sidebar:#f7fafc;
  --line:#e2e9f0;
  --line-soft:#edf1f5;
  --accent:#2563eb;
  --accent-light:#dbeafe;
}
[data-theme="amber"]{
  --bg:#faf7f0;
  --sidebar:#fcf9f3;
  --line:#ede6d8;
  --line-soft:#f3eee3;
  --accent:#b45309;
  --accent-light:#fef3c7;
}
[data-theme="graphite"]{
  --bg:#f4f5f6;
  --sidebar:#f9fafb;
  --line:#e3e5e8;
  --line-soft:#edeff1;
  --accent:#334155;
  --accent-light:#e2e8f0;
}
[data-theme="dark"]{
  --bg:#0f151c;
  --paper:#1a222c;
  --sidebar:#151c25;
  --ink:#e8edf2;
  --muted:#9aa7b3;
  --light:#8a97a5;
  --line:#2a3540;
  --line-soft:#222c37;
  --accent:#2dd4bf;
  --accent-light:#134843;
  --green-bg:#0f3d30;
  --orange-bg:#4a2f10;
  --red-bg:#4c1d1d;
  --blue-bg:#172d4d;
  --shadow:0 1px 3px rgba(0,0,0,0.3),0 4px 12px rgba(0,0,0,0.25);
  --shadow-hover:0 4px 12px rgba(0,0,0,0.4),0 12px 32px rgba(0,0,0,0.3);
  --shadow-drawer:-20px 0 60px rgba(0,0,0,0.5);
  --shadow-modal:0 24px 80px rgba(0,0,0,0.6);
  /* fix166：补齐缺失的语义色底（原先只有 green/orange/red/blue 有暗色档） */
  --purple-bg:#241f3a;
  --indigo-bg:#1c1e38;
  --slate-bg:#1a222c;
  /* fix166：统计卡渐变底的暗色档 —— 整体走 --paper 同族的暗面，只保留极淡的语义色偏 */
  --card-grad-from:#1a222c;
  --card-grad-accent:#13231f;
  --card-grad-blue:#151f2e;
  --card-grad-green:#132320;
  --card-grad-orange:#231d12;
  --card-grad-red:#251818;
  --card-grad-purple:#1c1a2c;
  --card-grad-violet:#1e1a2c;
  --card-grad-teal:#132320;
  --card-grad-indigo:#181a2c;
  --card-grad-slate:#1a222c;
  --card-shadow:0 1px 2px rgba(0,0,0,.24),0 10px 26px -14px rgba(0,0,0,.5);
  --card-shadow-hover:0 2px 6px rgba(0,0,0,.32),0 18px 36px -18px rgba(0,0,0,.6);
  /* fix166：语义色亮色档 —— 深色下 #b91c1c 这类深色值在暗底上对比度仅约 2.6:1，换亮档后 ≥4.5:1 */
  --red-ink:#f87171;
  --orange-ink:#fbbf24;
  --green-ink:#34d399;
  --blue-ink:#60a5fa;
  --purple-ink:#a78bfa;
  --indigo-ink:#818cf8;
  --slate-ink:#94a3b8;
  /* --accent(#2dd4bf) 压在 --accent-light(#134843) 上只有 2.75:1，文字需要再亮一档 */
  --accent-ink:#5eead4;
  --sub-ref-bg:linear-gradient(135deg,#0e2a23,#102420);
  --sub-ref-border:#1e5145;
  --plan-basic-bg:#172d4d; --plan-basic-fg:#60a5fa;
  --plan-standard-bg:#134843; --plan-standard-fg:#2dd4bf;
  --plan-pro-bg:#241f3a; --plan-pro-fg:#a78bfa;
  --plan-flagship-bg:#3a2710; --plan-flagship-fg:#fbbf24;
}
/* 公开页（落地页/登录/注册/找回密码）固定使用浅色纸感配色。
   这些页面的底色是硬编码的浅色（#fff / #f8fbfa），若继承暗色主题的变量，
   --ink 会变成浅色文字落在浅底上（对比度约 1.2:1，几乎不可读）。 */
#loginGate,.public-page,.login-page,.auth-login{
  --bg:#f7f6f3; --paper:#ffffff; --sidebar:#faf9f7; --ink:#1a1a1a; --muted:#6b6b6b; --light:#5f6b7a;
  --line:#e8e6e1; --line-soft:#f0eeea; --accent:#0f766e; --accent-light:#ccfbf1;
  --green:#047857; --green-bg:#d1fae5; --orange:#b45309; --orange-bg:#fef3c7;
  --red:#b91c1c; --red-bg:#fee2e2; --blue:#1d4ed8; --blue-bg:#dbeafe; --purple:#7c3aed;
  /* fix166b：这套页面永远是浅色纸感，所以 -ink 也必须是浅色档，
     否则深色主题下会继承到亮色档（#f87171 压在 #fee2e2 上约 1.6:1，看不见） */
  --accent-ink:#0f766e; --red-ink:#b91c1c; --orange-ink:#b45309; --green-ink:#047857;
  --blue-ink:#1d4ed8; --purple-ink:#7c3aed; --indigo-ink:#4338ca; --slate-ink:#334155;
}
/* 暗色模式配套 */
[data-theme="dark"] th{background:#151c25}
[data-theme="dark"] tr:hover td{background:#1f2935}
[data-theme="dark"] .btn{background:#1a222c}
[data-theme="dark"] .btn:hover{border-color:var(--accent);color:var(--accent-ink)}
/* fix310：暗色模式下 .btn 的兜底背景（.btn{background:#1a222c}，特异性 0,2,0）会盖掉
   .btn-primary（0,1,0），导致主按钮在暗色下变成深灰而非主题强调色。这里用同特异性但靠后的
   规则把主按钮还原为亮青绿底 + 深字（与 .chip.active / .page-btns button.active 同一套反色写法）。 */
[data-theme="dark"] .btn-primary{background:var(--accent);border-color:var(--accent);color:#06281f;box-shadow:inset 0 0 0 1px rgba(255,255,255,.14),0 1px 2px rgba(45,212,191,.32)}
[data-theme="dark"] .btn-primary:hover{background:var(--accent);border-color:var(--accent);color:#06281f;filter:brightness(1.07);transform:translateY(-1px);box-shadow:inset 0 0 0 1px rgba(255,255,255,.18),0 4px 14px rgba(45,212,191,.4)}
/* fix310：暗色下 --accent 变为亮青绿，原「accent 底 + 白字」写法（日历选中日、财务筛选项等）
   对比度仅约 1.9:1，改为亮底 + 深字（#06281f），与 .btn-primary / .chip.active 同一套反色写法。
   财务筛选项用的是内联 style，必须加 !important 才能盖住内联 color:#fff。 */
[data-theme="dark"] .day-btn.active{color:#06281f}
[data-theme="dark"] .btn-sm[style*="background:var(--accent)"],
[data-theme="dark"] .btn[style*="background:var(--accent)"]{color:#06281f!important}
[data-theme="dark"] .btn-sm[style*="background:#fff"]{background:#1a222c!important}
[data-theme="dark"] .btn-ghost:hover{background:#222c37}
[data-theme="dark"] .chip{background:#1a222c}
[data-theme="dark"] .chip.active{background:var(--accent);border-color:var(--accent);color:#06281f}
[data-theme="dark"] .day-btn{background:#1a222c}
/* fix127/128 青柠主题：官网首页/注册页同款视觉。128 调整为以中性灰为主的底色（参考截图近白灰底），青柠只做强调色 */
[data-theme="lime"]{
  --bg:#f2f3f1;
  --sidebar:#f9faf8;
  --line:#e4e6e2;
  --line-soft:#eef0ed;
  --accent:#4d7c0f;
  --accent-light:#ecfccb;
}
[data-theme="lime"] .btn-primary{background:#101828;border-color:#101828;box-shadow:0 1px 2px rgba(16,24,40,.2)}
[data-theme="lime"] .btn-primary:hover{background:#1b2534;border-color:#1b2534;transform:translateY(-1px)}
[data-theme="lime"] .nav-item.active::before{background:#84cc16}
[data-theme="lime"] th{background:#f4f5f3}

[data-theme="dark"] .ship-opt{background:#1a222c}
[data-theme="dark"] .ship-acc{background:#1a222c}
[data-theme="dark"] input,[data-theme="dark"] select,[data-theme="dark"] textarea{color-scheme:dark}
[data-theme="dark"] .form-group input,[data-theme="dark"] .form-group select,[data-theme="dark"] .form-group textarea{background:#151c25}
[data-theme="dark"] .search-box input,[data-theme="dark"] .filter-group select{background:#151c25}
[data-theme="dark"] .page-btns button{background:#1a222c}
[data-theme="dark"] .toggle-switch .ts-track{background:#3a4754}
[data-theme="dark"] .order-section{background:#1a222c;border-color:#222c37}
[data-theme="dark"] .order-section.sec-blue{background:#17222e;border-color:#1f2e3d}
[data-theme="dark"] .order-section.sec-green{background:#16241f;border-color:#1e3129}
[data-theme="dark"] .order-section.sec-purple{background:#1d1c2a;border-color:#2a2740}
[data-theme="dark"] .order-modal .modal-body{background:#101820}
[data-theme="dark"] .modal,[data-theme="dark"] .drawer{border-color:#2a3540}
[data-theme="dark"] .drawer{background:#0f151c}
[data-theme="dark"] .modal-close,[data-theme="dark"] .drawer-close{background:#222c37}
[data-theme="dark"] .sg-scroll{background:#1a222c;border-color:#222c37}
[data-theme="dark"] .sg-head{background:#151c25}
/* fix166b：暗色下 --accent 是亮青绿(#2dd4bf)，两处「深底 + 白字」会反相成看不清，
   改为与 .chip.active 同一套反色写法（亮底 + 深字）。浅色主题不受影响，无需覆盖。 */
[data-theme="dark"] .brand-icon{color:#06281f}
[data-theme="dark"] .page-btns button.active{background:var(--accent);border-color:var(--accent);color:#06281f}
[data-theme="dark"] .sg-label{background:#1a222c!important}
[data-theme="dark"] .sg-row:hover .sg-label{background:#222c37!important}
[data-theme="dark"] .progress{background:#222c37}
[data-theme="dark"] .nav-item:hover{background:#1f2935}
[data-theme="dark"] .nav-item.active{background:#1f2935}
[data-theme="dark"] .nav-item.active::before{background:var(--accent)}

/* ===== fix311：设置→界面皮肤 切换器升级（真实 CSS 变量驱动预览 + 选中光晕 + 悬浮微动效 + 跟随系统）===== */
.theme-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:14px}
@media(max-width:680px){.theme-grid{grid-template-columns:repeat(2,1fr)}}
.theme-card{position:relative;cursor:pointer;border:2px solid var(--line);border-radius:16px;overflow:hidden;background:var(--paper);
  transition:transform .18s ease,border-color .18s ease,box-shadow .18s ease;outline:none}
.theme-card:hover{transform:translateY(-3px) scale(1.015);border-color:color-mix(in srgb,var(--accent) 45%,var(--line));box-shadow:0 14px 30px rgba(15,23,42,.14)}
.theme-card:focus-visible{border-color:var(--accent)}
.theme-card.active{border-color:var(--accent);box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 26%,transparent),0 10px 26px rgba(15,23,42,.12)}
.theme-card-preview{height:96px;display:flex;overflow:hidden;background:var(--bg)}
.theme-card-preview .pv-nav{width:38%;padding:11px 9px;display:flex;flex-direction:column;gap:7px;background:var(--sidebar);border-right:1px solid var(--line-soft)}
.theme-card-preview .pv-brand{width:22px;height:22px;border-radius:7px;background:var(--accent);box-shadow:0 1px 2px rgba(0,0,0,.18)}
.theme-card-preview .pv-ni{height:8px;border-radius:5px;background:color-mix(in srgb,var(--ink) 13%,transparent)}
.theme-card-preview .pv-ni.on{background:var(--accent-light);box-shadow:inset 2px 0 0 var(--accent)}
.theme-card-preview .pv-main{flex:1;padding:11px 12px;display:flex;flex-direction:column;gap:7px;background:var(--paper)}
.theme-card-preview .pv-label{font-size:9.5px;font-weight:600;letter-spacing:.3px;color:var(--muted)}
.theme-card-preview .pv-value{font-size:18px;font-weight:700;line-height:1;color:var(--accent-ink);font-variant-numeric:tabular-nums}
.theme-card-preview .pv-track{height:6px;border-radius:99px;background:color-mix(in srgb,var(--ink) 10%,transparent);overflow:hidden;margin-top:1px}
.theme-card-preview .pv-fill{height:100%;width:62%;border-radius:99px;background:var(--accent)}
.theme-card-preview.auto{position:relative}
.theme-card-preview .pv-auto{position:absolute;top:7px;right:8px;font-size:9px;font-weight:700;letter-spacing:.5px;color:var(--accent-ink);background:var(--accent-light);padding:2px 7px;border-radius:99px}
.theme-card-foot{display:flex;align-items:center;gap:9px;padding:10px 12px}
.theme-card-dot{width:14px;height:14px;border-radius:50%;flex-shrink:0}
.theme-card-name{font-size:13px;font-weight:600;color:var(--ink);line-height:1.2}
.theme-card-desc{font-size:11px;color:var(--light);line-height:1.35;margin-top:1px}
.theme-card-check{margin-left:auto;width:22px;height:22px;border-radius:50%;display:grid;place-items:center;background:var(--accent);color:#fff;font-size:12px;font-weight:700;opacity:0;transform:scale(.4);transition:opacity .18s,transform .18s}
.theme-card.active .theme-card-check{opacity:1;transform:scale(1)}
.theme-card-hint{margin-right:6px;font-size:11px;font-weight:600;color:var(--accent-ink);opacity:0;transition:opacity .15s,transform .15s;transform:translateY(2px)}
.theme-card:hover .theme-card-hint{opacity:1;transform:translateY(0)}
.theme-card.active .theme-card-hint{opacity:1;transform:translateY(0)}
/* fix312：当前主题状态条（跟随系统会实时显示 深色/浅色） */
.theme-status{display:inline-flex;align-items:center;gap:6px;margin-top:14px;padding:7px 13px;border-radius:99px;background:var(--accent-light);color:var(--accent-ink);font-size:12px;font-weight:600}

/* fix312：让 4 套浅色皮肤在预览作用域内拥有完整且自包含的浅色调色板，
   这样预览卡始终以「本皮肤真实观感」呈现，不再继承页面主题的底色（否则深色模式下石墨灰会变成暗底暗字不可见） */
[data-theme="ocean"]{--paper:#fff;--sidebar:#f7fafc;--bg:#f2f6fa;--ink:#1a1a1a;--muted:#6b6b6b;--light:#5f6b7a;--line:#e2e9f0;--line-soft:#edf1f5;--accent-light:#dbeafe;--accent-ink:var(--accent)}
[data-theme="amber"]{--paper:#fff;--sidebar:#fcf9f3;--bg:#faf7f0;--ink:#1a1a1a;--muted:#6b6b6b;--light:#5f6b7a;--line:#ede6d8;--line-soft:#f3eee3;--accent-light:#fef3c7;--accent-ink:var(--accent)}
[data-theme="graphite"]{--paper:#fff;--sidebar:#f9fafb;--bg:#f4f5f6;--ink:#1a1a1a;--muted:#6b6b6b;--light:#5f6b7a;--line:#e3e5e8;--line-soft:#edeff1;--accent-light:#e2e8f0;--accent-ink:var(--accent)}
[data-theme="lime"]{--paper:#fff;--sidebar:#f9faf8;--bg:#f2f3f1;--ink:#1a1a1a;--muted:#6b6b6b;--light:#5f6b7a;--line:#e4e6e2;--line-soft:#eef0ed;--accent-light:#ecfccb;--accent-ink:var(--accent)}

*{box-sizing:border-box;margin:0;padding:0}
html,body{height:100%}
body{background:var(--bg);color:var(--ink);font:14px/1.6 -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans SC","PingFang SC","Microsoft YaHei",sans-serif;-webkit-font-smoothing:antialiased;transition:background .25s,color .25s}

/* ===== 布局 ===== */
.app{display:grid;grid-template-columns:220px 1fr;min-height:100vh}
.app-nav{padding:22px 12px;background:var(--sidebar);border-right:1px solid var(--line);position:sticky;top:0;height:100vh;overflow-y:auto;display:flex;flex-direction:column}
main{padding:28px 28px 48px;min-width:0}

/* ===== 侧边栏 ===== */
.brand{padding:0 10px 24px;color:var(--ink);font-size:17px;font-weight:700;display:flex;align-items:center;gap:10px;letter-spacing:-0.3px}
.brand-icon{display:grid;place-items:center;width:30px;height:30px;border-radius:8px;background:var(--accent);color:#fff;font-style:normal;font-size:14px;font-weight:700}
.brand-icon img{width:100%;height:100%;display:block;object-fit:cover;border-radius:inherit}
.brand-logo-preview{width:44px;height:44px;border-radius:12px;font-size:18px;flex-shrink:0}
.workspace{padding:0 10px;color:var(--light);font-size:11px;text-transform:uppercase;letter-spacing:0.5px;margin-bottom:4px}
.nav{margin-top:8px;flex:1}
.nav-item{display:flex;gap:10px;align-items:center;min-height:38px;margin:2px 0;padding:9px 12px;border-radius:var(--radius-md);color:var(--muted);text-decoration:none;font-size:13.5px;font-weight:500;transition:all .15s;cursor:pointer;border:none;background:none;width:100%;font-family:inherit}
.nav-item:hover{background:var(--paper);color:var(--ink);box-shadow:var(--shadow)}
.nav-item.active{background:var(--paper);color:var(--accent-ink);box-shadow:var(--shadow);font-weight:600}
.nav-item.active::before{content:"";position:absolute;left:0;top:50%;transform:translateY(-50%);width:3px;height:16px;background:var(--accent);border-radius:0 3px 3px 0}
.nav-item svg{width:17px;height:17px;opacity:.7;flex-shrink:0}
.nav-item.active svg{opacity:1;stroke:var(--accent)}
/* 二级菜单 */
.nav-caret{margin-left:auto;font-size:11px;color:var(--light);transition:transform .2s}
/* 分组标题（可折叠） */
.nav-group-label{padding:0 10px;margin:10px 0 6px;color:var(--light);font-size:10.5px;font-weight:600;letter-spacing:0.8px}
.nav-group-toggle{display:flex;align-items:center;width:100%;padding:0 10px;margin:10px 0 6px;color:var(--light);font-size:10.5px;font-weight:600;letter-spacing:0.8px;background:none;border:none;cursor:pointer;font-family:inherit;text-align:left;transition:color .15s}
.nav-group-toggle:hover{color:var(--muted)}
.nav-group-toggle.collapsed .nav-caret{transform:rotate(-90deg)}
.nav-item:has(+ .nav-sub.open) .nav-caret{transform:rotate(90deg)}
.nav-sub{display:none;padding:2px 0 4px 30px}
.nav-sub.open{display:block}
.nav-sub-item{display:block;width:100%;text-align:left;padding:7px 12px;margin:1px 0;border:none;background:none;border-radius:var(--radius-md);color:var(--muted);font-size:12.5px;font-family:inherit;cursor:pointer;transition:all .15s;position:relative}
.nav-sub-item::before{content:"";position:absolute;left:0;top:50%;transform:translateY(-50%);width:4px;height:4px;border-radius:50%;background:var(--line)}
.nav-sub-item:hover{background:var(--paper);color:var(--ink)}
.nav-sub-item.active{background:var(--accent-light);color:var(--accent-ink);font-weight:600}
.nav-sub-item.active::before{background:var(--accent)}
[data-theme="dark"] .nav-sub-item:hover{background:#1f2935}
[data-theme="dark"] .nav-sub-item.active{background:#1f2935}
.side-foot{padding:20px 10px 0;color:var(--light);font-size:11px;line-height:1.7;border-top:1px solid var(--line);margin-top:auto}
.side-foot strong{color:var(--muted);font-weight:500}

/* ===== 页面头部 ===== */
.page-head{display:flex;align-items:flex-start;justify-content:space-between;gap:18px;margin-bottom:28px;flex-wrap:wrap}
.page-head h1{margin:0;font-size:26px;font-weight:700;letter-spacing:-0.5px}
.page-head .sub{margin-top:6px;color:var(--muted);font-size:13.5px}

/* ===== 按钮 ===== */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:9px 18px;border:1px solid var(--line);border-radius:var(--radius-md);background:var(--paper);color:var(--ink);font:inherit;font-size:13px;font-weight:500;cursor:pointer;transition:all .2s;white-space:nowrap}
.btn:hover{border-color:var(--accent);color:var(--accent-ink);box-shadow:var(--shadow)}
.btn:disabled{opacity:.5;cursor:not-allowed;transform:none!important;box-shadow:none}
/* fix312：主按钮统一用「自身强调色压暗 12%」做 1px 内描边，浅色皮肤下白字按钮边缘更清晰；
   hover 用 brightness 压暗各自强调色（不再写死青绿 #115e59），保证各皮肤 hover 一致（配色统一） */
.btn-primary{background:var(--accent);border-color:var(--accent);color:#fff;box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--accent) 50%,#000 12%),0 1px 2px rgba(15,23,42,.12)}
.btn-primary:hover{filter:brightness(.93);transform:translateY(-1px);box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--accent) 50%,#000 12%),0 4px 12px rgba(15,23,42,.16)}
.btn-danger{background:var(--red-bg);border-color:var(--red-bg);color:var(--red-ink)}
.btn-danger:hover{background:var(--red);border-color:var(--red);color:#fff}
.btn-sm{padding:5px 10px;font-size:12px;border-radius:var(--radius-sm)}
.btn-ghost{padding:6px 10px;border:none;background:transparent;color:var(--muted);font-size:12px}
.btn-ghost:hover{background:var(--bg);color:var(--ink)}

/* 设备页：列表 / 型号统计 分段切换 */
.seg{display:inline-flex;background:var(--bg);border:1px solid var(--line);border-radius:10px;padding:3px;gap:3px}
.seg-btn{border:none;background:transparent;color:var(--muted);font:inherit;font-size:13px;font-weight:600;padding:6px 18px;border-radius:8px;cursor:pointer;transition:all .15s}
.seg-btn:hover{color:var(--ink)}
.seg-btn.active{background:var(--paper);color:var(--accent-ink);box-shadow:var(--shadow-hover)}

/* ===== 卡片 ===== */
.card{padding:22px;border:1px solid var(--line);border-radius:var(--radius-xl);background:var(--paper);box-shadow:var(--card-shadow);margin-bottom:16px;transition:box-shadow .2s}
.card-hover:hover{box-shadow:var(--shadow-hover)}
.card-header{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:18px;flex-wrap:wrap;gap:8px}
.card-header h2{margin:0;font-size:15px;font-weight:600}
.card-header .sub{margin-top:2px;font-size:12.5px;color:var(--muted)}

/* ===== 表格 ===== */
.table-wrap{border:1px solid var(--line);border-radius:var(--radius-xl);background:var(--paper);box-shadow:var(--shadow);overflow-x:auto;margin-bottom:16px}
.table-wrap .card-header{padding:16px 20px;border-bottom:1px solid var(--line-soft)}
table{width:100%;border-collapse:collapse;font-size:13.5px}
.table-wrap table{font-size:14px}
.table-wrap th{font-size:13px}
.table-wrap td{font-size:14px}
th{padding:12px 16px;text-align:left;background:var(--bg);color:var(--muted);font-size:11.5px;font-weight:600;border-bottom:1px solid var(--line);white-space:nowrap;letter-spacing:0.3px;text-transform:uppercase}
td{padding:14px 16px;border-bottom:1px solid var(--line-soft);vertical-align:middle}
tr:hover td{background:#fafaf9}
tr:last-child td{border-bottom:none}

/* ===== 表单 ===== */
.form-group{margin-bottom:16px}
.form-group label{display:block;margin-bottom:6px;font-size:12.5px;font-weight:600;color:var(--ink)}
.form-group input,.form-group select,.form-group textarea{width:100%;padding:10px 12px;border:1px solid var(--line);border-radius:var(--radius-md);background:var(--paper);color:var(--ink);font:inherit;font-size:13px;outline:none;transition:all .2s}
.form-group input:focus,.form-group select:focus,.form-group textarea:focus{border-color:var(--accent);box-shadow:0 0 0 3px rgba(13,148,136,0.08)}
.form-row{display:grid;grid-template-columns:1fr 1fr;gap:14px}
.form-row-3{grid-template-columns:repeat(3,1fr)}

/* ===== 新建订单弹窗分区样式 ===== */
.order-modal{max-width:min(760px,94vw)}
.order-modal .modal-body{padding:20px;max-height:calc(100vh - 170px);overflow-y:auto;background:#fafbfc}
.order-section{background:var(--paper);border:1px solid var(--line-soft);border-radius:var(--radius-lg);padding:18px 20px;margin-bottom:14px}
.order-section:last-child{margin-bottom:0}
.order-section.sec-blue{background:#f4f8fd;border-color:#e3edf8}
.order-section.sec-green{background:#f3faf6;border-color:#e2f2ea}
.order-section.sec-purple{background:#f7f5fb;border-color:#ece7f5}
.order-section-title{margin:0 0 14px;font-size:14px;font-weight:700;color:var(--ink)}
.order-section .form-group{margin-bottom:14px}
.order-section .form-group:last-child{margin-bottom:0}
.order-hint{font-size:12px;color:var(--muted);margin:6px 0 8px;white-space:nowrap;overflow-x:auto;overflow-y:hidden}
.order-hint.ok{color:var(--green-ink)}
.order-hint.warn{color:var(--red-ink)}
@media (max-width:480px){.order-hint{font-size:11px}#daysHint{font-size:12px!important}}
.day-grid{display:grid;grid-template-columns:repeat(10,1fr);gap:8px;margin-bottom:14px}
.day-btn{padding:9px 0;border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--paper);color:var(--ink);font-size:13px;font-weight:500;cursor:pointer;transition:.15s;text-align:center}
.day-btn:hover{border-color:var(--accent);color:var(--accent-ink)}
.day-btn.active{background:var(--accent);border-color:var(--accent);color:#fff;font-weight:700}
.ship-options{display:flex;gap:10px;flex-wrap:wrap}
.ship-opt{display:flex;align-items:center;gap:7px;padding:9px 18px;border:1px solid var(--line);border-radius:999px;background:var(--paper);cursor:pointer;font-size:13px;color:var(--muted);transition:.15s;user-select:none}
.ship-opt input{display:none}
.ship-opt.active{border-color:var(--accent);color:var(--accent-ink);background:var(--accent-light);font-weight:600}
.ship-acc{display:inline-flex;align-items:center;gap:6px;padding:7px 14px;border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--paper);font-size:12.5px;color:var(--muted);cursor:pointer;transition:.15s;user-select:none}
.ship-acc input{width:14px;height:14px;accent-color:var(--accent);margin:0}
.ship-acc:has(input:checked){border-color:var(--accent);color:var(--accent-ink);background:var(--accent-light);font-weight:600}
.toggle-switch{position:relative;width:40px;height:22px;display:inline-block;flex-shrink:0}
.toggle-switch input{display:none}
.toggle-switch .ts-track{position:absolute;inset:0;border-radius:999px;background:#cbd5d1;transition:.2s;cursor:pointer}
.toggle-switch .ts-track::after{content:"";position:absolute;top:3px;left:3px;width:16px;height:16px;border-radius:50%;background:#fff;transition:.2s;box-shadow:0 1px 3px rgba(0,0,0,.2)}
.toggle-switch input:checked + .ts-track{background:var(--accent)}
.toggle-switch input:checked + .ts-track::after{left:21px}

/* 客户信息点击复制 */
.copy-contact{border-radius:8px;padding:2px 6px;margin:-2px -6px;transition:background .15s}
.copy-contact:hover{background:var(--accent-light)}
@keyframes copyTipIn{0%{visibility:hidden;transform:translateY(4px)}12%{visibility:visible;transform:translateY(0)}80%{visibility:visible}100%{visibility:hidden}}

/* ===== 标签 ===== */
.tag{display:inline-flex;align-items:center;padding:4px 10px;border-radius:20px;font-size:11.5px;font-weight:600;white-space:nowrap}
/* fix166：套餐等级标签 —— 变量驱动，深色模式自动切暗底 + 亮字 */
.plan-tag-basic{background:var(--plan-basic-bg);color:var(--plan-basic-fg)}
.plan-tag-standard{background:var(--plan-standard-bg);color:var(--plan-standard-fg)}
.plan-tag-pro{background:var(--plan-pro-bg);color:var(--plan-pro-fg)}
.plan-tag-flagship{background:var(--plan-flagship-bg);color:var(--plan-flagship-fg)}
.tag-green{background:var(--green-bg);color:var(--green-ink)}
.tag-orange{background:var(--orange-bg);color:var(--orange-ink)}
.tag-red{background:var(--red-bg);color:var(--red-ink)}
.tag-blue{background:var(--blue-bg);color:var(--blue-ink)}
.tag-gray{background:var(--line-soft);color:var(--muted)}
/* fix192：随心换（保障）标记 —— 设备列表产品名后的「保」角标，悬停/点击看到期时间 */
.care-badge{display:inline-flex;align-items:center;justify-content:center;min-width:18px;height:18px;padding:0 5px;margin-left:6px;border-radius:6px;background:var(--green-bg);color:var(--green-ink);border:1px solid color-mix(in srgb,var(--green) 36%,transparent);font-size:10.5px;font-weight:700;line-height:1;cursor:pointer;user-select:none;vertical-align:2px;white-space:nowrap}
.care-badge:hover{filter:brightness(0.97)}
.care-badge.expired{background:var(--line-soft);color:var(--light);border-color:var(--line)}
/* v223：设备列表状态小标记（保/修/换/售）共用 care-badge 布局，仅换配色 */
.badge-repair{background:var(--orange-bg);color:var(--orange-ink);border-color:color-mix(in srgb,var(--orange) 36%,transparent)}
.badge-swap{background:var(--blue-bg);color:var(--blue-ink);border-color:color-mix(in srgb,var(--blue) 36%,transparent)}
.badge-sold{background:var(--line-soft);color:var(--muted);border-color:var(--line)}
.badge-preship{background:var(--blue-bg);color:var(--blue-ink);border-color:color-mix(in srgb,var(--blue) 36%,transparent)}

/* ===== 统计卡片 ===== */
.stat-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:16px;margin-bottom:20px}
/* fix166：统计卡质感对齐数据看板 —— 14px 圆角 + 双层柔和阴影 + 悬停微浮起。
   内联的语义色渐变底已改为 var(--card-grad-*) 变量驱动，深色模式自动走暗色档。 */
.stat-card{padding:22px;border:1px solid var(--line);border-radius:14px;background:var(--paper);box-shadow:var(--card-shadow);transition:transform .18s ease,box-shadow .18s ease,border-color .18s ease}
.stat-card:hover{transform:translateY(-2px);box-shadow:var(--card-shadow-hover)}
.stat-label{color:var(--muted);font-size:12px;margin-bottom:8px;font-weight:500}
.stat-value{font-size:28px;font-weight:700;margin-bottom:6px;letter-spacing:-0.5px}
.stat-value.accent{color:var(--accent-ink)}
.stat-value.green{color:var(--green-ink)}
.stat-value.orange{color:var(--orange-ink)}
.stat-value.red{color:var(--red-ink)}
.stat-desc{font-size:12px;color:var(--light)}

/* ===== 筛选工具栏 ===== */
.toolbar{display:flex;justify-content:space-between;align-items:center;margin-bottom:16px;flex-wrap:wrap;gap:12px}
.search-box{position:relative}
/* fix385：全站统一 SmartSearch（智能排期同款下拉搜索）手机端适配 */
.ss-wrap{max-width:100%}
.ss-wrap>input:focus{border-color:var(--accent);box-shadow:0 0 0 3px rgba(13,148,136,0.08)}
@media (max-width:850px){
  .ss-wrap{width:100%}
  .ss-wrap>input{width:100%!important}
  .ss-wrap>span:last-child{max-width:calc(100vw - 32px)}
}
.search-box input{padding:9px 12px 9px 36px;border:1px solid var(--line);border-radius:var(--radius-md);background:var(--paper);color:var(--ink);font:inherit;width:280px;outline:none;transition:all .2s;font-size:13px}
.search-box input:focus{border-color:var(--accent);box-shadow:0 0 0 3px rgba(13,148,136,0.08)}
.search-box::before{content:"🔍";position:absolute;left:12px;top:50%;transform:translateY(-50%);font-size:13px;opacity:.4}
.filter-group{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.filter-group select{padding:9px 28px 9px 12px;border:1px solid var(--line);border-radius:var(--radius-md);background:var(--paper);color:var(--ink);font:inherit;font-size:13px;cursor:pointer;outline:none;appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%239ca3af' stroke-width='2'%3E%3Cpolyline points='6 9 12 15 18 9'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 10px center}
.chips{display:flex;flex-wrap:wrap;gap:6px}
/* 产品分类标签选择器（录入设备「选择型号」/ 新建订单「选择产品」共用同一套 markup）
   桌面端即为原来的内联样式；手机端在 ≤850px 媒体查询里瘦身，让 8 个分类排 2 行 */
.prod-cats{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:8px}
.chip{padding:5px 12px;border:1px solid var(--line);border-radius:999px;background:var(--paper);color:var(--muted);font:inherit;font-size:12.5px;cursor:pointer;transition:.2s}
.chip:hover{border-color:var(--accent);color:var(--accent-ink)}
.chip.active{background:var(--ink);border-color:var(--ink);color:#fff}

/* ===== 分页 ===== */
.pagination{padding:14px 20px;display:flex;justify-content:space-between;align-items:center;border-top:1px solid var(--line-soft)}
.page-info{color:var(--light);font-size:12px}
.page-btns{display:flex;gap:6px}
.page-btns button{padding:6px 12px;border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--paper);color:var(--ink);font:inherit;font-size:12px;cursor:pointer;transition:.2s}
.page-btns button:hover:not(:disabled){border-color:var(--accent);color:var(--accent-ink)}
.page-btns button:disabled{opacity:.4;cursor:not-allowed}
.page-btns button.active{background:var(--ink);color:#fff;border-color:var(--ink)}

/* ===== 侧滑抽屉 ===== */
.drawer-overlay{position:fixed;inset:0;background:rgba(15,23,42,0.28);display:none;z-index:99}
.drawer-overlay.show{display:block}
.drawer{position:fixed;top:0;right:0;width:100%;max-width:720px;height:100vh;background:var(--bg);border-left:1px solid var(--line);box-shadow:var(--shadow-drawer);overflow-y:auto;z-index:100;animation:drawerIn .35s cubic-bezier(.4,0,.2,1);display:none}
.drawer.show{display:block}
@keyframes drawerIn{from{transform:translateX(100%)}to{transform:translateX(0)}}
.drawer-header{padding:24px 28px;background:var(--paper);border-bottom:1px solid var(--line);display:flex;justify-content:space-between;align-items:flex-start;position:sticky;top:0;z-index:2}
.drawer-close{width:36px;height:36px;border:none;border-radius:var(--radius-md);background:var(--bg);color:var(--muted);font-size:20px;cursor:pointer;display:grid;place-items:center;transition:.2s;flex-shrink:0}
.drawer-close:hover{background:var(--line);color:var(--ink)}
.drawer-body{padding:24px 28px 40px}
.drawer-footer{padding:14px 28px;background:var(--paper);border-top:1px solid var(--line);display:flex;align-items:center;gap:10px;position:sticky;bottom:0;z-index:2}

/* ===== 弹窗 ===== */
.modal-overlay{position:fixed;inset:0;background:rgba(15,23,42,0.28);display:none;align-items:center;justify-content:center;z-index:100;padding:20px}
.modal-overlay.show{display:flex}
/* 弹窗统一为右侧抽拉式 */
.modal{width:100%;max-width:520px;background:var(--paper);border-radius:0;box-shadow:var(--shadow-drawer);overflow:hidden;animation:drawerIn .32s cubic-bezier(.4,0,.2,1);border:none;border-left:1px solid var(--line);position:fixed;top:0;right:0;height:100dvh;display:flex;flex-direction:column}
.modal-lg,.order-modal{max-width:min(760px,100vw)}
/* 例外：居中弹窗（如今日归还提醒），保持传统居中样式 */
.modal.modal-center{position:static;top:auto;right:auto;height:auto;max-height:calc(100dvh - 48px);max-width:520px;border-radius:16px;border:none;box-shadow:var(--shadow-modal);animation:modalIn .24s ease}
.modal.modal-center .modal-body{flex:none;overflow-y:auto}
.modal-body{overflow-y:auto;flex:1}
.order-modal .modal-body{max-height:none}
@keyframes modalIn{from{opacity:0;transform:translateY(20px) scale(.97)}to{opacity:1;transform:translateY(0) scale(1)}}
.modal-header{padding:20px 24px;border-bottom:1px solid var(--line-soft);display:flex;justify-content:space-between;align-items:center;flex-shrink:0}
.modal-header h3{margin:0;font-size:16px;font-weight:600}
.modal-close{width:32px;height:32px;border:none;border-radius:var(--radius-sm);background:var(--bg);color:var(--muted);font-size:18px;cursor:pointer;display:grid;place-items:center;transition:.2s}
.modal-close:hover{background:var(--line);color:var(--ink)}
.modal-body{padding:24px}
.modal-footer{padding:16px 24px;border-top:1px solid var(--line-soft);display:flex;justify-content:flex-end;gap:10px;flex-shrink:0}

/* ===== 设备/用户信息展示 ===== */
.info-row{display:flex;align-items:center;gap:12px}
.info-avatar{width:40px;height:40px;border-radius:12px;background:linear-gradient(135deg,#0f766e,#115e59);color:#fff;display:grid;place-items:center;font-size:16px;font-weight:700;flex-shrink:0;box-shadow:0 2px 8px rgba(13,148,136,0.2)}
.info-avatar.gray{background:linear-gradient(135deg,#6b7280,#9ca3af);box-shadow:0 2px 8px rgba(0,0,0,0.06)}
.info-avatar.red{background:linear-gradient(135deg,#ef4444,#fca5a5);box-shadow:0 2px 8px rgba(239,68,68,0.2)}
.info-name{font-weight:600;color:var(--ink);margin-bottom:2px;font-size:13.5px}
.info-meta{color:var(--light);font-size:12px}

/* ===== 时间线 ===== */
.timeline{position:relative;padding-left:20px;margin-bottom:24px}
.timeline::before{content:"";position:absolute;left:5px;top:4px;bottom:4px;width:2px;background:var(--line);border-radius:1px}
.timeline-item{position:relative;margin-bottom:16px;padding-left:16px}
.timeline-item::before{content:"";position:absolute;left:-20px;top:5px;width:10px;height:10px;border-radius:50%;background:var(--paper);border:2px solid var(--accent)}
.timeline-item.blue::before{border-color:var(--blue)}
.timeline-item.red::before{border-color:var(--red)}
.timeline-date{font-size:11.5px;color:var(--light);margin-bottom:2px}
.timeline-text{font-size:13px;color:var(--ink);font-weight:500}
.timeline-sub{font-size:12px;color:var(--muted);margin-top:2px}

/* ===== Tab 切换 ===== */
/* fix134：窄屏时标签栏横向滑动，避免最后一个标签（如设置页「账号安全」）被挤出屏幕 */
.tab-bar{display:flex;gap:4px;margin-bottom:20px;border-bottom:1px solid var(--line);padding-bottom:0;overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none;-ms-overflow-style:none}
.tab-bar::-webkit-scrollbar{display:none}
.tab-bar button{padding:10px 18px;border:none;border-bottom:2px solid transparent;background:none;color:var(--muted);font:inherit;font-size:13px;font-weight:500;cursor:pointer;transition:.2s;margin-bottom:-1px;flex:0 0 auto;white-space:nowrap}
.tab-bar button.active{color:var(--accent-ink);border-bottom-color:var(--accent)}
.tab-bar button:hover:not(.active){color:var(--ink)}
.tab-panel{display:none}
.tab-panel.active{display:block;animation:fadeIn .25s ease}

/* ===== 图表 ===== */
.chart-container{height:220px;display:flex;align-items:flex-end;justify-content:space-around;padding:10px 0 0;gap:8px}
.chart-bar-wrapper{display:flex;flex-direction:column;align-items:center;flex:1;min-width:0}
.chart-bar{width:32px;background:var(--accent);border-radius:6px 6px 0 0;min-height:4px;position:relative;transition:height .5s cubic-bezier(.4,0,.2,1);opacity:.85}
.chart-bar:hover{opacity:1}
.chart-bar::after{content:attr(data-value);position:absolute;top:-24px;left:50%;transform:translateX(-50%);font-size:11px;font-weight:700;color:var(--ink);white-space:nowrap}
.chart-count{margin-top:10px;font-size:11px;color:var(--light);text-align:center}
.chart-count span{display:block;color:var(--ink);font-weight:600;margin-bottom:2px;font-size:12px}

/* ===== 进度条 ===== */
.progress{height:6px;background:var(--line-soft);border-radius:3px;overflow:hidden}
.progress-fill{height:100%;background:linear-gradient(90deg,var(--accent),color-mix(in oklab,var(--accent) 52%,#fff));border-radius:3px}
[data-theme="dark"] .progress-fill{background:linear-gradient(90deg,var(--accent),color-mix(in oklab,var(--accent) 68%,#000))}

/* ===== 空状态 ===== */
.empty{padding:80px 20px;text-align:center;color:var(--muted)}
.empty-icon{font-size:48px;margin-bottom:16px;opacity:.25}
.empty h3{margin:0 0 8px;font-size:18px;color:var(--ink);font-weight:600}
.empty p{margin:0;color:var(--light)}

/* ===== 移动端顶栏与导航抽屉 ===== */
.mobile-topbar{display:none}
.nav-scrim{display:none}

/* ===== 响应式 ===== */
@media(max-width:1100px){
  .stat-grid{grid-template-columns:repeat(2,1fr)}
  .form-row{grid-template-columns:1fr}
}
@media(max-width:850px){
  .app{grid-template-columns:1fr}

  /* 顶栏 */
  .mobile-topbar{display:flex;align-items:center;gap:12px;padding:10px 14px;background:var(--sidebar);border-bottom:1px solid var(--line);position:sticky;top:0;z-index:90}
  .mtb-btn{width:38px;height:38px;border:1px solid var(--line);border-radius:var(--radius-md);background:var(--paper);font-size:17px;color:var(--ink);cursor:pointer;display:grid;place-items:center;flex-shrink:0}
  .mtb-brand{display:flex;align-items:center;gap:8px;font-size:15.5px;font-weight:700;letter-spacing:-0.3px}
  .mtb-user{margin-left:auto;white-space:nowrap}

  /* 侧边栏变抽屉 */
  .app-nav{position:fixed;top:0;left:0;bottom:0;width:min(280px,82vw);height:100dvh;z-index:120;transform:translateX(-105%);transition:transform .28s cubic-bezier(.4,0,.2,1);box-shadow:none;padding-top:14px}
  .app-nav .brand{display:none}
  .app-nav.mobile-open{transform:translateX(0);box-shadow:var(--shadow-drawer)}
  .nav-scrim{display:block;position:fixed;inset:0;background:rgba(0,0,0,0.3);backdrop-filter:blur(2px);z-index:110;opacity:0;pointer-events:none;transition:opacity .25s}
  .nav-scrim.show{opacity:1;pointer-events:auto}

  main{padding:16px 14px 100px}
  .page-head{margin-bottom:18px;gap:10px}
  .page-head h1{font-size:21px}
  .page-head .sub{font-size:12px}

  .stat-grid{grid-template-columns:1fr 1fr;gap:10px}
  .stat-card{padding:14px}
  .stat-value{font-size:21px}
  .card{padding:16px}
  .card-header{margin-bottom:12px}

  /* 工具栏与搜索 */
  .toolbar{flex-direction:column;align-items:stretch}
  .search-box input{width:100%}

  /* 表格：可横向滑动 + 滑动提示 */
  .table-wrap{overflow-x:auto;-webkit-overflow-scrolling:touch}
  table{min-width:700px}
  th,td{padding:10px 12px}

  /* 抽屉与弹窗全屏化 */
  .drawer{max-width:100%}
  .modal-overlay{padding:0}
  .modal{max-width:100%!important}
  .modal-body{overflow-y:auto;flex:1;padding:18px 16px}
  .modal-footer{padding:12px 16px calc(12px + env(safe-area-inset-bottom))}
  .order-modal .modal-body{max-height:none}
  .modal-lg{max-width:100%!important}

  /* 表单：手机上输入放大字号防 iOS 自动缩放，单列布局 */
  .form-group input,.form-group select,.form-group textarea{font-size:16px}
  .form-row,.form-row-3{grid-template-columns:1fr}

  /* 租期天数按钮：5 列 */
  .day-grid{grid-template-columns:repeat(5,1fr)}
  .day-btn{padding:11px 0}

  /* 客户账号导航权限网格：2 列 */
  #rgNavPerms{grid-template-columns:1fr 1fr!important}

  /* 产品分类标签：瘦身，让 8 个分类在手机上排 2 行（原来 40px 高的胶囊撑着 2~3 行）
     用 inline-flex + 固定 height 才能压住 emoji 字体的行盒高度（line-height 锁不住）；
     必须同时写 min-height —— 下方全局点按目标规则（button/.btn/.chip/select 统一 min-height:40px）
     优先级高于 height，漏了它 chip 还是 40px 高 */
  .prod-cats{gap:6px;margin-bottom:10px}
  .prod-cats .chip{display:inline-flex;align-items:center;height:28px;min-height:28px;padding:0 7px;font-size:11.5px;line-height:1;white-space:nowrap;flex-shrink:0}

  /* 产品选择区收紧内边距，给「品牌 + 型号」腾出横向空间（原文案在 393px 下右侧被裁断） */
  .order-section{padding:12px}
  .order-modal .modal-body{padding:14px}

  /* 型号/产品下拉：选项允许折行，不再被裁；行高收紧（列表整体高度由 JS 按结果数动态设 size，
     手机上上限 4 行 —— 393px 下 6 行 = 225px，360px 下选项折行后高达 339px，会把列表顶出屏幕） */
  #addLibraryId option,#orderProduct option{white-space:normal;padding:5px 10px;line-height:1.35}

  /* 产品选择的搜索框与底部提示行（fix115：搜索框加高一档更好点中，提示行与列表拉开间距，
     缓解「分类标签 + 搜索 + 下拉 + 提示」堆在一起的拥挤感） */
  .prod-search{padding:9px 12px 9px 34px!important;line-height:1.3;border-radius:10px!important}
  .prod-hint{font-size:11px!important;margin-top:6px!important}

  /* 筛选 chips 可横向滚动 */
  .chips,.filter-group{flex-wrap:nowrap;overflow-x:auto;-webkit-overflow-scrolling:touch;padding-bottom:4px}
  .chip,.filter-group .btn{flex-shrink:0}

  /* 分页紧凑 */
  .pagination{flex-direction:column;gap:10px;align-items:flex-start}

  /* 时间线、图表间距 */
  .chart-container{gap:4px}
  .chart-bar{width:20px}
  .timeline{padding-left:16px}

  /* 通知/看板等 grid 自适应 */
  [style*="grid-template-columns:repeat(5"]{grid-template-columns:repeat(3,1fr)!important}
  [style*="grid-template-columns:repeat(4"]{grid-template-columns:1fr 1fr!important}
  [style*="grid-template-columns:repeat(3"]{grid-template-columns:1fr 1fr!important}

  /* 并排卡片窄屏改纵向（今日待发/逾期未还、详情页双列信息等） */
  [style*="grid-template-columns:1fr 1fr"]{grid-template-columns:1fr!important;gap:10px!important}
  /* 自动宽度标签列保持原样（订单详情里的「客户/电话」信息格） */
  [style*="grid-template-columns:auto 1fr"]{grid-template-columns:auto 1fr!important;gap:4px 12px!important}

  /* 大按钮更易点按 */
  .btn{padding:10px 16px}
  .btn-sm{padding:7px 12px}
}
@media(max-width:380px){
  .stat-grid{grid-template-columns:1fr}
}

/* ===== 动画 ===== */
@keyframes fadeIn{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}
.page-enter{animation:fadeIn .35s cubic-bezier(.4,0,.2,1)}

/* ===== 首页数据看板卡片 ===== */
.dashboard-page{--dash-card-border:color-mix(in srgb,var(--line) 82%,transparent);--dash-card-shadow:0 1px 2px rgba(15,23,42,.03),0 10px 28px rgba(15,23,42,.045);--dash-card-shadow-hover:0 12px 34px rgba(15,23,42,.09),0 2px 8px rgba(15,23,42,.04)}
.dashboard-page .dashboard-stat-grid{gap:14px}
.dashboard-page .stat-card{position:relative;isolation:isolate;min-height:148px;padding:21px 21px 18px;overflow:hidden;border:1px solid var(--dash-card-border)!important;border-top:none!important;box-shadow:var(--dash-card-shadow);background:linear-gradient(145deg,var(--paper) 0%,color-mix(in srgb,var(--paper) 94%,var(--accent-light)) 100%);transition:transform .22s cubic-bezier(.2,.8,.2,1),box-shadow .22s,border-color .22s}
.dashboard-page .stat-card::before{content:"";position:absolute;z-index:-1;width:92px;height:92px;right:-34px;top:-38px;border-radius:50%;background:currentColor;opacity:.075}
.dashboard-page .stat-card::after{content:"";position:absolute;left:21px;right:21px;bottom:0;height:3px;border-radius:999px 999px 0 0;background:currentColor;opacity:.7;transform:scaleX(.28);transform-origin:left;transition:transform .25s ease,opacity .25s}
.dashboard-page .stat-card:nth-child(1),.dashboard-page .stat-card:nth-child(5){color:var(--accent-ink)}
.dashboard-page .stat-card:nth-child(2),.dashboard-page .stat-card:nth-child(7){color:var(--orange-ink)}
.dashboard-page .stat-card:nth-child(3),.dashboard-page .stat-card:nth-child(8){color:var(--blue-ink)}
.dashboard-page .stat-card:nth-child(4){color:var(--red-ink)}
.dashboard-page .stat-card:nth-child(6){color:var(--green-ink)}
.dashboard-page .stat-card:hover{transform:translateY(-4px);border-color:color-mix(in srgb,currentColor 24%,var(--line))!important;box-shadow:var(--dash-card-shadow-hover)}
.dashboard-page .stat-card:hover::after{transform:scaleX(1);opacity:1}
.dashboard-page .stat-label{display:flex;align-items:center;min-height:24px;margin-bottom:10px;font-size:12px;font-weight:650;letter-spacing:.04em}
.dashboard-page .stat-value{margin-bottom:8px;color:var(--ink)!important;font-size:29px;line-height:1.2;letter-spacing:-.8px;font-variant-numeric:tabular-nums}
.dashboard-page .stat-desc{line-height:1.45;color:var(--muted)}
/* 首页「沉睡会员」统计卡（仅平台超管，>0 时整体红色强调；含 ::before 圆点与 ::after 底条） */
.dashboard-page .stat-card-sleep,.dashboard-page .stat-card-sleep .stat-value{color:var(--red-ink)!important}
.dashboard-page .stat-card-sleep .stat-label{color:var(--red-ink)}
.dashboard-page > .card,.dashboard-page > div[style*="grid-template-columns"] > .card{border-color:var(--dash-card-border);box-shadow:var(--dash-card-shadow)}
.dashboard-page > .card:hover,.dashboard-page > div[style*="grid-template-columns"] > .card:hover{border-color:color-mix(in srgb,var(--accent) 16%,var(--line));box-shadow:0 10px 30px rgba(15,23,42,.065)}
.dashboard-page .card-header h2{font-size:15.5px;letter-spacing:-.15px}
.dashboard-page .card-header .sub{color:var(--light)}
.dashboard-page > div[style*="grid-template-columns:3fr 2fr"] .card{height:100%}
.dashboard-page > div[style*="grid-template-columns:3fr 2fr"] .card .btn{min-height:50px;border-color:var(--line-soft);background:color-mix(in srgb,var(--paper) 96%,var(--accent-light))}
.dashboard-page > div[style*="grid-template-columns:3fr 2fr"] .card .btn:hover{border-color:color-mix(in srgb,var(--accent) 38%,var(--line));background:var(--accent-light);transform:translateY(-2px)}
[data-theme="dark"] .dashboard-page{--dash-card-shadow:0 1px 2px rgba(0,0,0,.22),0 12px 30px rgba(0,0,0,.16);--dash-card-shadow-hover:0 14px 36px rgba(0,0,0,.3)}
@media(max-width:850px){.dashboard-page .dashboard-stat-grid{gap:10px}.dashboard-page .stat-card{min-height:132px;padding:17px 16px 15px}.dashboard-page .stat-card::after{left:16px;right:16px}.dashboard-page .stat-value{font-size:24px}.dashboard-page .stat-desc{font-size:11.5px}}
@media(max-width:480px){.dashboard-page .dashboard-stat-grid{grid-template-columns:1fr 1fr}.dashboard-page .stat-card{min-height:126px}}
@media(prefers-reduced-motion:reduce){.dashboard-page .stat-card,.dashboard-page .stat-card::after{transition:none}.dashboard-page .stat-card:hover{transform:none}}
/* fix165 看板配色全部收敛到变量层：随「设置 → 外观主题」联动（6 套主题 + 深色模式）。
   规范：语义色（订单=蓝 / 租金=绿 / 三族圆点）保持固定色相，深色模式另给一套值；
   其余「主题色」一律走 var(--accent) 派生，换皮肤时图表、进度条、光晕自动跟着变。 */
.dashboard-page{
  /* 大卡·累计订单（蓝族语义色）—— 字色按 WCAG AA 调深（原 #2f6fd0 仅 4.3:1，标题过淡） */
  --dash-blue-bg:#eaf2fe; --dash-blue-bd:#dbe7fb; --dash-blue-ink:#2563c9; --dash-blue-sub:#3a6ea5;
  --dash-blue-deco-1:rgba(59,130,246,.22); --dash-blue-deco-2:rgba(59,130,246,.13);
  /* 大卡·累计租金收入（绿族语义色）—— 同上，原 #2f9e6a 仅 3.1:1 */
  --dash-green-bg:#e9f7ef; --dash-green-bd:#d7efe1; --dash-green-ink:#1c7f52; --dash-green-sub:#4a8365;
  --dash-green-deco-1:rgba(16,163,74,.22); --dash-green-deco-2:rgba(16,163,74,.13);
  /* 大卡正文数值 + 分隔线强度 */
  --dash-strong-ink:#16233c; --dash-hr-op:.17;
  /* 右侧小卡：底色取 -paper 混一点当前主题的 accent-light，边框/悬停走主题线色与强调色 */
  --dash-mini-bg:linear-gradient(180deg,var(--paper) 0%,color-mix(in srgb,var(--paper) 95%,var(--accent-light)) 100%);
  --dash-mini-bd:var(--dash-card-border);
  --dash-mini-bd-hover:color-mix(in srgb,var(--accent) 26%,var(--line));
  --dash-mini-sh:0 1px 2px rgba(16,24,40,.04),0 8px 20px -14px rgba(16,24,40,.18);
  --dash-mini-sh-hover:0 2px 5px rgba(16,24,40,.06),0 16px 30px -16px rgba(16,24,40,.26);
  /* 回本进度条轨道 */
  --dash-track:var(--line-soft);
  /* 小卡三族圆点：设备类=蓝 / 运营类=青 / 资产类=琥珀 */
  --dash-col1:#3b82f6; --dash-col2:#14b8a6; --dash-col3:#f59e0b;
  --dash-col1-glow:rgba(59,130,246,.15); --dash-col2-glow:rgba(20,184,166,.15); --dash-col3-glow:rgba(245,158,11,.17);
  --dash-col-deco-op:.09;
  /* 图表：轴线文字、网格线、柱子渐变全部由 --accent 派生（换主题即换色） */
  --dash-chart-axis:var(--muted); --dash-chart-axis-dim:var(--light);
  --dash-chart-grid:var(--line); --dash-chart-grid-soft:var(--line-soft);
  --dash-bar-to:color-mix(in oklab,var(--accent) 52%,#fff);
  --dash-bar-mute-from:color-mix(in oklab,var(--accent) 36%,#fff);
  --dash-bar-mute-to:color-mix(in oklab,var(--accent) 14%,#fff);
  /* 设备分类占比：8 色分类数据色（多色是为区分扇区，不随强调色变，只在暗色下降一档饱和度） */
  --dash-cat-1:#b0e870; --dash-cat-2:#30f0d0; --dash-cat-3:#c0d030; --dash-cat-4:#a0f0c8;
  --dash-cat-5:#7fc94a; --dash-cat-6:#1fbfa4; --dash-cat-7:#9aa825; --dash-cat-8:#4fbf92;
  /* 饼图光晕与投影：浅色靠白色发光，暗色换成极低透明度，避免夜里出现白圈 */
  --dash-pie-halo:rgba(255,255,255,.42); --dash-pie-halo-hover:rgba(255,255,255,.55);
  --dash-pie-core-halo:rgba(255,255,255,.32);
  --dash-pie-sh:rgba(15,23,42,.13); --dash-pie-sh-hover:rgba(15,23,42,.2); --dash-pie-core-sh:rgba(15,23,42,.1);
  --dash-pie-sh-soft:rgba(15,23,42,.06);
}
[data-theme="dark"] .dashboard-page{
  --dash-blue-bg:rgba(59,130,246,.13); --dash-blue-bd:rgba(59,130,246,.28);
  --dash-blue-ink:#7db1f7; --dash-blue-sub:#8fa8c9;
  --dash-blue-deco-1:rgba(59,130,246,.2); --dash-blue-deco-2:rgba(59,130,246,.11);
  --dash-green-bg:rgba(16,163,74,.13); --dash-green-bd:rgba(16,163,74,.28);
  --dash-green-ink:#5cc98f; --dash-green-sub:#8fb5a1;
  --dash-green-deco-1:rgba(16,163,74,.2); --dash-green-deco-2:rgba(16,163,74,.11);
  --dash-strong-ink:var(--ink); --dash-hr-op:.24;
  --dash-mini-bg:linear-gradient(180deg,var(--paper) 0%,color-mix(in srgb,var(--paper) 92%,#000) 100%);
  --dash-mini-bd-hover:color-mix(in srgb,var(--accent) 32%,var(--line));
  --dash-mini-sh:0 1px 2px rgba(0,0,0,.2),0 8px 20px -14px rgba(0,0,0,.4);
  --dash-mini-sh-hover:0 2px 6px rgba(0,0,0,.28),0 16px 30px -16px rgba(0,0,0,.5);
  --dash-track:var(--line);
  --dash-col1:#60a5fa; --dash-col2:#2dd4bf; --dash-col3:#fbbf24;
  --dash-col1-glow:rgba(96,165,250,.18); --dash-col2-glow:rgba(45,212,191,.18); --dash-col3-glow:rgba(251,191,36,.2);
  --dash-col-deco-op:.15;
  --dash-bar-to:color-mix(in oklab,var(--accent) 68%,#000);
  --dash-bar-mute-from:color-mix(in oklab,var(--accent) 44%,#000);
  --dash-bar-mute-to:color-mix(in oklab,var(--accent) 24%,#000);
  --dash-cat-1:#9ed95e; --dash-cat-2:#2ad6bb; --dash-cat-3:#a9b92a; --dash-cat-4:#8edcb4;
  --dash-cat-5:#6fb43f; --dash-cat-6:#1aa98f; --dash-cat-7:#889225; --dash-cat-8:#45ab82;
  --dash-pie-halo:rgba(255,255,255,.13); --dash-pie-halo-hover:rgba(255,255,255,.2);
  --dash-pie-core-halo:rgba(255,255,255,.05);
  --dash-pie-sh:rgba(0,0,0,.45); --dash-pie-sh-hover:rgba(0,0,0,.6); --dash-pie-core-sh:rgba(0,0,0,.4);
  --dash-pie-sh-soft:rgba(0,0,0,.3);
}
/* fix163 数据看板顶部（按设计图）：左大卡(累计订单数) + 中大卡(累计租金收入) + 右侧 3×2 小卡 */
.dash-top{display:grid;grid-template-columns:1fr 1fr 1.55fr;gap:14px;align-items:stretch;margin-bottom:16px}
.dash-hero{position:relative;isolation:isolate;overflow:hidden;border-radius:var(--radius-xl);padding:18px 20px;border:1px solid transparent;display:flex;flex-direction:column;min-height:152px;box-shadow:var(--dash-card-shadow)}
.dash-hero::before{content:"";position:absolute;right:22px;top:14px;width:52px;height:52px;border-radius:50%;z-index:-1}
.dash-hero::after{content:"";position:absolute;right:2px;top:40px;width:32px;height:32px;border-radius:50%;z-index:-1}
/* fix169：大卡主色统一收敛到 --c（= 该族的 ink 色，本身已随主题切换），
   徽章底 / 悬停染边 / 悬停柔光全部由它派生 —— 与财务管理收入分类卡的 --c 同一套写法。 */
.dash-hero-blue{--c:var(--dash-blue-ink);background:var(--dash-blue-bg);border-color:var(--dash-blue-bd)}
.dash-hero-blue::before{background:var(--dash-blue-deco-1)}
.dash-hero-blue::after{background:var(--dash-blue-deco-2)}
.dash-hero-green{--c:var(--dash-green-ink);background:var(--dash-green-bg);border-color:var(--dash-green-bd)}
.dash-hero-green::before{background:var(--dash-green-deco-1)}
.dash-hero-green::after{background:var(--dash-green-deco-2)}
.dash-hero-label{display:flex;align-items:center;gap:8px;font-size:13.5px;font-weight:600}
/* v262：图标徽章 —— 主色淡底圆角方块 + SVG 线性图标（.dash-ico），与设备管理统计卡同风格。 */
/* v262：图标徽章改为 SVG 线性图标（与设备管理 .inv-acard-icon 同风格描边图标） */
.dash-hero-label .dash-ico,.dash-mini-label .dash-ico{flex:none;display:grid;place-items:center;
  width:20px;height:20px;border-radius:6px;line-height:1;color:var(--c,var(--accent));
  background:color-mix(in srgb,var(--c,var(--accent)) 18%,transparent);
  transition:transform .2s cubic-bezier(.2,.8,.25,1),background .2s ease}
.dash-hero-label .dash-ico svg,.dash-mini-label .dash-ico svg{width:13px;height:13px}
.dash-hero-blue .dash-hero-label{color:var(--dash-blue-ink)}
.dash-hero-green .dash-hero-label{color:var(--dash-green-ink)}
.dash-hero-value{font-size:40px;font-weight:700;line-height:1.06;letter-spacing:-1.2px;margin-top:6px;color:var(--dash-strong-ink);font-variant-numeric:tabular-nums;white-space:nowrap}
.dash-hero-hr{height:1px;margin:14px 0 12px;background:currentColor;opacity:var(--dash-hr-op)}
.dash-hero-blue .dash-hero-hr{color:var(--dash-blue-ink)}
.dash-hero-green .dash-hero-hr{color:var(--dash-green-ink)}
.dash-hero-sub{display:flex;gap:34px;margin-top:auto}
.dash-sub span{display:block;font-size:12.5px;margin-bottom:5px}
.dash-hero-blue .dash-sub span{color:var(--dash-blue-sub)}
.dash-hero-green .dash-sub span{color:var(--dash-green-sub)}
.dash-sub b{font-size:19px;font-weight:700;color:var(--dash-strong-ink);font-variant-numeric:tabular-nums}
/* fix164 小卡美化：渐变底 + 多层柔和阴影 + 悬停微浮起 + 按列（设备/运营/资产）配色圆点 */
/* fix433：原先固定 3列×2行，加「广场代发/转让利润」两张卡会溢出第 7、8 格
   → 改为 3 列 + 自动增行（grid-auto-rows 与前两行等高），列数与配色分组不变 */
.dash-mini-grid{display:grid;grid-template-columns:repeat(3,1fr);grid-auto-rows:minmax(0,1fr);gap:12px}
.dash-mini{position:relative;isolation:isolate;overflow:hidden;background:var(--dash-mini-bg);border:1px solid var(--dash-mini-bd);border-radius:14px;padding:14px 16px;display:flex;flex-direction:column;justify-content:center;gap:7px;box-shadow:var(--dash-mini-sh);transition:transform .18s ease,box-shadow .18s ease,border-color .18s ease}
.dash-mini::after{content:"";position:absolute;right:-24px;top:-28px;width:78px;height:78px;border-radius:50%;z-index:-1;opacity:var(--dash-col-deco-op)}
.dash-mini[data-col="1"]::after{background:var(--dash-col1)}
.dash-mini[data-col="2"]::after{background:var(--dash-col2)}
.dash-mini[data-col="3"]::after{background:var(--dash-col3)}
.dash-mini:hover{transform:translateY(-3px) scale(1.012);border-color:color-mix(in srgb,var(--c,var(--accent)) 44%,var(--line));box-shadow:var(--dash-mini-sh-hover),0 0 0 3px color-mix(in srgb,var(--c,var(--accent)) 11%,transparent)}
.dash-mini-label{display:flex;align-items:center;gap:8px;font-size:12.5px;font-weight:500;color:var(--muted);white-space:nowrap;min-width:0}
/* fix437：可点击的统计卡（租赁广场「代发收入 / 转让利润」→ 直达财务管理广场独立账）加悬停反馈 */
.stat-card[data-clickable],.stat-card[style*="cursor:pointer"]{cursor:pointer;transition:transform .18s ease,box-shadow .18s ease}
.stat-card[data-clickable]:hover,.stat-card[style*="cursor:pointer"]:hover{transform:translateY(-3px);box-shadow:0 8px 22px rgba(0,0,0,.12)}
.stat-card[data-clickable] .inv-acard-desc,.stat-card[style*="cursor:pointer"] .inv-acard-desc{color:var(--accent-ink)}
/* fix434：看板小卡标签较长，nowrap 会被卡片的 overflow:hidden 裁掉
   → 文字部分单独截断成省略号（图标固定不压缩），标题的 title 属性已带完整口径说明 */
.dash-mini-label>span:last-child{min-width:0;overflow:hidden;text-overflow:ellipsis}
/* fix169：小卡主色变量 —— 取代原来那个 6px 纯色圆点（它只够表示「属于哪一族」，
   而收入分类卡的徽章同时承担了「图标 + 主色」两件事）。徽章底 / 悬停染边 / 柔光全部由 --c 派生。 */
.dash-mini[data-col="1"]{--c:var(--dash-col1)}
.dash-mini[data-col="2"]{--c:var(--dash-col2)}
.dash-mini[data-col="3"]{--c:var(--dash-col3)}
.dash-mini-value{display:flex;align-items:center;gap:8px;font-size:26px;font-weight:700;color:var(--dash-strong-ink);letter-spacing:-.5px;line-height:1.12;font-variant-numeric:tabular-nums}
/* fix170：资产原值改为精确到元后位数变多（如 ¥1,286,400），按字符数降一档字号，避免撑破小卡。
   9~10 字符走 .num-m，>10 字符走 .num-s；阈值由 Dashboard.js 的 _costCls 判定。 */
.dash-mini-value.num-m{font-size:22px}
.dash-mini-value.num-s{font-size:18px}
.dash-mini-unit{font-size:13px;font-weight:500;color:var(--light);letter-spacing:0;margin-left:-4px}
/* fix168：回本进度条加长 —— 由固定 44px 改为「吃掉数值行剩余空间」（min 76px），
   数字短的时候能明显变长；外层是 flex，窄屏也不会把数字挤掉。 */
.dash-progress{flex:1 1 auto;width:auto;min-width:76px;height:7px;border-radius:999px;background:var(--dash-track);overflow:hidden;display:inline-block;margin-left:2px}
.dash-progress-fill{position:relative;display:block;height:100%;background:linear-gradient(90deg,#f59e0b,#fbbf24);border-radius:999px;box-shadow:0 0 6px rgba(245,158,11,.35);transition:filter .15s;transform-origin:left center;animation:dashBarGrow .72s cubic-bezier(.2,.75,.2,1) backwards}
/* 条内流光：让「进度」看起来是活的（不动画只影响视觉，宽度仍由数据决定） */
.dash-progress-fill::after{content:"";position:absolute;top:0;bottom:0;left:0;width:40%;background:linear-gradient(90deg,transparent,rgba(255,255,255,.62),transparent);animation:dashBarShimmer 2.6s ease-in-out infinite}
.dash-progress-fill:hover{filter:brightness(1.06)}

/* ===== fix168：数据看板动效 =====
   原则：动画只加「份量感」，不改变任何布局尺寸，且全部可被 prefers-reduced-motion 关掉。
   注意所有入场动画都用 fill-mode:backwards —— 用 both/forwards 会把 transform 永久锁在
   终帧，导致 :hover 的上浮失效（这是 CSS 动画覆盖 hover 的经典坑）。 */
@keyframes dashRiseIn{from{opacity:0;transform:translateY(15px) scale(.986)}to{opacity:1;transform:none}}
@keyframes dashMiniRiseIn{from{opacity:0;transform:translateY(11px) scale(.972)}to{opacity:1;transform:none}}
@keyframes dashBarGrow{from{transform:scaleX(0)}to{transform:scaleX(1)}}
@keyframes dashBarShimmer{0%{transform:translateX(-115%)}62%,100%{transform:translateX(330%)}}
@keyframes dashDecoDrift{0%,100%{transform:translate3d(0,0,0)}50%{transform:translate3d(-5px,6px,0)}}
@keyframes dashIcoBreath{0%,100%{transform:scale(1);opacity:1}50%{transform:scale(1.07);opacity:.86}}

.dash-hero{transition:transform .22s cubic-bezier(.2,.8,.25,1),box-shadow .22s ease,border-color .22s ease;animation:dashRiseIn .54s cubic-bezier(.2,.8,.25,1) backwards}
.dash-hero:nth-child(2){animation-delay:.1s}
.dash-hero:hover{transform:translateY(-3px);border-color:color-mix(in srgb,var(--c,var(--dash-blue-ink)) 44%,var(--dash-card-border));box-shadow:var(--dash-card-shadow-hover),0 0 0 3px color-mix(in srgb,var(--c,var(--dash-blue-ink)) 11%,transparent)}
/* 大卡右上角的两个装饰圆：缓慢漂移，给静态卡片一点呼吸 */
.dash-hero::before{animation:dashDecoDrift 7.5s ease-in-out infinite}
.dash-hero::after{animation:dashDecoDrift 9.5s ease-in-out infinite reverse}
.dash-hero:hover::before,.dash-hero:hover::after{opacity:1.25}

.dash-mini{animation:dashMiniRiseIn .48s cubic-bezier(.2,.8,.25,1) backwards;animation-delay:calc(var(--i,0) * 58ms)}
/* 三族圆点呼吸；hover 时换成人眼更容易捕捉的「放大 + 光晕扩散」 */
/* fix169：徽章取代了原来的 6px 圆点，呼吸幅度必须收窄（scale 1.34 放到 20px 方块上太闹）；
   并且悬停要先把 animation 停掉再放大 —— 否则 CSS 动画会在运行时压住 transform，hover 完全没有反馈。
   ⚠️ 选择器必须写成 .dash-mini[data-col]:hover（0,4,1），它才压得住下面三条
   .dash-mini[data-col="N"] .dash-mini-label::before（0,3,1）—— 写成 .dash-mini:hover（0,2,1）
   会被呼吸动画直接盖掉（本轮实测：hover 时 transform 停在动画当前帧 1.037，徽章纹丝不动）。 */
.dash-hero:hover .dash-hero-label::before,
.dash-mini[data-col]:hover .dash-mini-label::before{animation:none;transform:scale(1.12)}
.dash-mini[data-col="1"] .dash-mini-label::before{animation:dashIcoBreath 3.6s ease-in-out infinite}
.dash-mini[data-col="2"] .dash-mini-label::before{animation:dashIcoBreath 3.6s ease-in-out .4s infinite}
.dash-mini[data-col="3"] .dash-mini-label::before{animation:dashIcoBreath 3.6s ease-in-out .8s infinite}
.dash-mini:hover{transform:translateY(-3px) scale(1.012)}
/* hover 时卡片右下的装饰圆稍微显形，强化「亮起来」的感觉 */
.dash-mini::after{transition:opacity .22s ease,transform .32s cubic-bezier(.2,.8,.25,1)}
.dash-mini:hover::after{transform:scale(1.14);opacity:calc(var(--dash-col-deco-op) * 1.8)}

@media(prefers-reduced-motion:reduce){
  .dash-hero,.dash-mini,.dash-progress-fill,
  .dash-hero::before,.dash-hero::after,
  .dash-hero-label::before,.dash-mini-label::before,.dash-progress-fill::after{animation:none}
  .dash-hero:hover,.dash-mini:hover{transform:none}
  .dash-hero-label::before,.dash-mini-label::before{transition:none}
}
@media(max-width:680px){
  .dash-top{grid-template-columns:1fr;gap:12px}
  .dash-hero{min-height:134px;padding:16px 18px}
  .dash-hero-value{font-size:32px}
  .dash-hero-sub{gap:28px}
  /* 手机端按列填充：左列=设备类指标组、右列=运营/资产组，与设计图的两组对应 */
  /* fix433：去掉固定 3 行，改 auto-rows，否则新增的广场两张卡会被挤掉 */
  /* fix475②：手机端恢复普通行流（2 列 × 3 行）—— fix433 去掉固定行数后，
     grid-auto-flow:column 失去行数约束，6 张卡被挤成 6 个内容宽度的窄列（标签全部截断）。
     行流下 6 卡自然排成 3 行 2 列，卡片恢复全宽。 */
  .dash-mini-grid{grid-template-columns:1fr 1fr;grid-auto-flow:row;grid-auto-rows:auto;gap:10px}
  /* fix476②：精简模式 —— 只留 data-core="1" 的核心 4 卡，其余折叠（由顶栏按钮切换） */
  .dash-mini-grid.compact .dash-mini:not([data-core="1"]){display:none}
  .dash-mini{padding:13px 14px}
  .dash-mini-value{font-size:23px}
  /* fix170：手机端 2 列布局卡片更窄，长金额再降一档（与桌面 .num-m/.num-s 对应） */
  .dash-mini-value.num-m{font-size:19px}
  .dash-mini-value.num-s{font-size:16px}
}

/* ===== v258：数据看板顶部卡片统一为「网站皮肤色 + 主色图标芯片」（与设备管理统计卡同款）=====
   底色一律 --bg（随皮肤/深浅自动跟随），边框 --line，主色只留在图标芯片、数值与悬停光晕上；
   悬停上浮幅度与设备管理一致（-4px），不加 overflow 裁切，避免第一行卡片被切。
   ⚠️ 选择器统一带 .dashboard-page 前缀（0,2,0+），才能压住上面 .dash-hero/.dash-mini 的同类声明。 */
.dashboard-page .dash-hero,
.dashboard-page .dash-mini{
  background:var(--bg);
  border:1px solid var(--line);
  box-shadow:var(--dash-card-shadow);
}
.dashboard-page .dash-hero{padding:16px 18px;min-height:140px}
.dashboard-page .dash-hero:hover{
  transform:translateY(-4px) scale(1.01);
  border-color:var(--line);
  box-shadow:var(--dash-card-shadow-hover),0 0 40px color-mix(in srgb,var(--c,var(--accent)) 25%,transparent);
  z-index:5;
}
/* 右上角装饰圆改极淡：保留层次感，不抢主色 */
.dashboard-page .dash-hero::before{opacity:.5}
.dashboard-page .dash-hero::after{opacity:.45}
.dashboard-page .dash-hero:hover::before,.dashboard-page .dash-hero:hover::after{opacity:.8}
/* 标题统一 muted（与设备管理卡片一致），颜色语义交给图标芯片 */
.dashboard-page .dash-hero-label,
.dashboard-page .dash-hero-blue .dash-hero-label,
.dashboard-page .dash-hero-green .dash-hero-label{color:var(--muted)}
.dashboard-page .dash-hero-hr{background:var(--line);opacity:1;margin:12px 0 10px}
.dashboard-page .dash-hero-value{font-size:30px;font-weight:800;line-height:1;letter-spacing:-1px}
.dashboard-page .dash-mini{padding:12px 14px}
.dashboard-page .dash-mini:hover{
  transform:translateY(-4px) scale(1.01);
  border-color:var(--line);
  box-shadow:var(--dash-card-shadow-hover),0 0 40px color-mix(in srgb,var(--c,var(--accent)) 25%,transparent);
  z-index:5;
}
/* v265：悬停颜色效果与设备管理对齐——图标芯片放大微旋 */
.dashboard-page .dash-hero:hover .dash-ico,
.dashboard-page .dash-mini:hover .dash-ico{transform:scale(1.1) rotate(5deg)}
.dashboard-page .dash-mini-value{font-size:30px;font-weight:800;letter-spacing:-1px;line-height:1}
.dashboard-page .dash-mini-value.num-m{font-size:26px}
.dashboard-page .dash-mini-value.num-s{font-size:22px}
/* v264：数值/标签字体与设备管理统计卡完全对齐（30px/800/-1px，标签 13px/600/.5px） */
.dashboard-page .dash-hero-label{font-size:13px;letter-spacing:.5px}
.dashboard-page .dash-mini-label{font-size:13px;font-weight:600;letter-spacing:.5px}
/* 金额里的 ¥ 与「万」：0.7 倍灰蓝实色（同设备管理 .inv-acard-currency/--light 方案） */
.dashboard-page .dash-money-cur,.dashboard-page .dash-money-wan{font-size:.7em;font-weight:700;letter-spacing:0;color:var(--light);-webkit-text-fill-color:var(--light);background:none}
/* 图标芯片：圆角方块 + 主色淡底 + 描边 + 发光（同设备管理 .inv-acard-icon） */
.dashboard-page .dash-hero-label .dash-ico{
  width:30px;height:30px;border-radius:9px;
  background:color-mix(in srgb,var(--c,var(--accent)) 14%,var(--bg));
  border:1px solid color-mix(in srgb,var(--c,var(--accent)) 26%,transparent);
  box-shadow:0 4px 12px color-mix(in srgb,var(--c,var(--accent)) 22%,transparent);
}
.dashboard-page .dash-hero-label .dash-ico svg{width:17px;height:17px}
.dashboard-page .dash-mini-label .dash-ico{
  width:26px;height:26px;border-radius:8px;
  background:color-mix(in srgb,var(--c,var(--accent)) 14%,var(--bg));
  border:1px solid color-mix(in srgb,var(--c,var(--accent)) 26%,transparent);
  box-shadow:0 4px 12px color-mix(in srgb,var(--c,var(--accent)) 20%,transparent);
}
.dashboard-page .dash-mini-label .dash-ico svg{width:14px;height:14px}
@media(max-width:680px){
  /* fix479：手机端两张 hero 大卡缩小并排一行（原来各占整行，手机上纵向太占屏）。
     .dash-top 改 2 列 → 两个 hero 并排；右侧 6 张小卡跨满整行另起，
     保持原有 2×3 行流不变。 */
  .dashboard-page .dash-top{grid-template-columns:1fr 1fr;gap:10px}
  .dashboard-page .dash-mini-grid{grid-column:1 / -1}
  .dashboard-page .dash-hero{padding:11px 12px;min-height:0}
  .dashboard-page .dash-hero::before{width:38px;height:38px;right:14px;top:10px}
  .dashboard-page .dash-hero::after{width:22px;height:22px;right:-2px;top:32px}
  .dashboard-page .dash-hero-label{font-size:11.5px;gap:5px}
  .dashboard-page .dash-hero-label .dash-ico{width:20px;height:20px;border-radius:7px}
  .dashboard-page .dash-hero-label .dash-ico svg{width:12px;height:12px}
  .dashboard-page .dash-hero-value{font-size:22px;letter-spacing:-.6px;margin-top:4px}
  .dashboard-page .dash-hero-hr{margin:8px 0 7px}
  .dashboard-page .dash-hero-sub{gap:10px;flex-wrap:wrap}
  .dashboard-page .dash-sub span{font-size:10.5px;margin-bottom:3px}
  .dashboard-page .dash-sub b{font-size:12.5px}
  .dashboard-page .dash-mini{padding:11px 12px}
  .dashboard-page .dash-mini-value{font-size:24px}
  .dashboard-page .dash-mini-value.num-m{font-size:21px}
  .dashboard-page .dash-mini-value.num-s{font-size:18px}
}
@media(prefers-reduced-motion:reduce){
  .dashboard-page .dash-hero:hover,.dashboard-page .dash-mini:hover{transform:none}
}
/* ===== v261：看板卡片套用设备管理 8 色主题（inv-g1..g8 同款色值）=====
   --c 主色驱动：图标芯片 / 数值渐变字 / 悬停光晕 / 装饰圆全部随卡变色；
   映射与设备管理一致：设备总数=靛蓝g1 在租=绿g2 回本=橙g3 出租率=紫g5
   资产原值=蓝g6 租金收入=青绿g7 租赁次数=青g8 订单数=靛蓝g1 */
.dashboard-page .inv-g1{--c:#6366f1;--cl:#818cf8}
.dashboard-page .inv-g2{--c:#10b981;--cl:#34d399}
.dashboard-page .inv-g3{--c:#f59e0b;--cl:#fbbf24}
.dashboard-page .inv-g4{--c:#f43f5e;--cl:#fb7185}
.dashboard-page .inv-g5{--c:#8b5cf6;--cl:#a78bfa}
.dashboard-page .inv-g6{--c:#3b82f6;--cl:#60a5fa}
.dashboard-page .inv-g7{--c:#14b8a6;--cl:#2dd4bf}
.dashboard-page .inv-g8{--c:#06b6d4;--cl:#22d3ee}
/* 数值改为同色渐变字（同设备管理 .inv-acard-value.inv-accent） */
.dashboard-page .dash-hero-value{background:linear-gradient(135deg,var(--c) 0%,var(--cl) 100%);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;color:transparent}
.dashboard-page .dash-mini-value>span[data-cv]{background:linear-gradient(135deg,var(--c) 0%,var(--cl) 100%);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;color:transparent}
/* 装饰圆随卡主色（覆盖原蓝/绿族固定色） */
.dashboard-page .dash-mini::after{background:var(--c,var(--accent))}
.dashboard-page .dash-hero::before{background:color-mix(in srgb,var(--c) 16%,transparent)}
.dashboard-page .dash-hero::after{background:color-mix(in srgb,var(--c) 10%,transparent)}

/* ===== v263：全站统计卡统一（皮肤色底 + 线性图标芯片）=====
   范围：所有 .stat-card（订单/配件/客户/售后/日历/物流/会员设备/设备库/排期/仓库/注册会员/财务流水等）。
   财务管理「收入分类/支出分类」卡是 .cat-card，不命中本规则，保持原样不动。
   图标芯片由 app.js 的 StatEnhance 增强器自动插入，颜色取自卡片原 border-top 语义色（--sc）。 */
.stat-card{
  background:var(--bg)!important;
  border:1px solid var(--line)!important;
  border-radius:16px!important;
  padding:16px 18px!important;
  box-shadow:var(--card-shadow);
}
.stat-card:hover{
  transform:translateY(-4px)!important;
  box-shadow:var(--card-shadow-hover),0 0 20px color-mix(in srgb,var(--sc,var(--accent)) 14%,transparent)!important;
  transition:transform .2s ease,box-shadow .2s ease;
}
.stat-head{display:flex;align-items:center;gap:8px;margin-bottom:8px}
.stat-head .stat-label{margin-bottom:0}
.stat-ico{flex:none;display:grid;place-items:center;width:26px;height:26px;border-radius:8px;line-height:1;
  color:var(--sc,var(--accent));
  background:color-mix(in srgb,var(--sc,var(--accent)) 14%,var(--bg));
  border:1px solid color-mix(in srgb,var(--sc,var(--accent)) 26%,transparent);
  box-shadow:0 3px 8px color-mix(in srgb,var(--sc,var(--accent)) 16%,transparent);
}
.stat-ico svg{width:14px;height:14px}

/* ===== 全站淡色氛围背景 ===== */
:root{--bg-glow-primary:rgba(13,148,136,.075);--bg-glow-secondary:rgba(37,99,235,.045);--bg-wash:rgba(255,255,255,.18)}
[data-theme="ocean"]{--bg-glow-primary:rgba(37,99,235,.085);--bg-glow-secondary:rgba(14,165,233,.045);--bg-wash:rgba(255,255,255,.16)}
[data-theme="amber"]{--bg-glow-primary:rgba(217,119,6,.075);--bg-glow-secondary:rgba(245,158,11,.04);--bg-wash:rgba(255,255,255,.16)}
[data-theme="lime"]{--bg-glow-primary:rgba(132,204,22,.055);--bg-glow-secondary:rgba(100,116,80,.03);--bg-wash:rgba(255,255,255,.2)}
[data-theme="graphite"]{--bg-glow-primary:rgba(51,65,85,.065);--bg-glow-secondary:rgba(59,130,246,.03);--bg-wash:rgba(255,255,255,.2)}
[data-theme="dark"]{--bg-glow-primary:rgba(45,212,191,.055);--bg-glow-secondary:rgba(59,130,246,.04);--bg-wash:rgba(255,255,255,.008)}
body{
  background-color:var(--bg);
  background-image:
    radial-gradient(circle at 14% 2%,var(--bg-glow-primary) 0,transparent 34rem),
    radial-gradient(circle at 92% 14%,var(--bg-glow-secondary) 0,transparent 30rem),
    linear-gradient(145deg,var(--bg-wash),transparent 48%);
  background-attachment:fixed;
}
.app{background:transparent}
.app-nav{background:color-mix(in srgb,var(--sidebar) 92%,transparent);backdrop-filter:saturate(115%) blur(12px);-webkit-backdrop-filter:saturate(115%) blur(12px)}
main{position:relative}
@media(max-width:850px){
  body{background-attachment:scroll;background-image:radial-gradient(circle at 80% 0,var(--bg-glow-primary) 0,transparent 23rem),linear-gradient(150deg,var(--bg-wash),transparent 58%)}
  .mobile-topbar{background:color-mix(in srgb,var(--sidebar) 94%,transparent);backdrop-filter:saturate(115%) blur(12px);-webkit-backdrop-filter:saturate(115%) blur(12px)}
}

/* 设备回本数据更新动效 */
@keyframes paybackNumberIn{
  0%{opacity:.2;transform:translateY(3px) scale(.94);filter:brightness(1.35)}
  55%{opacity:1;transform:translateY(-1px) scale(1.045);filter:brightness(1.12)}
  100%{transform:none;filter:none}
}
@keyframes paybackResultIn{
  0%{opacity:0;transform:translateX(-6px);background:var(--accent-light)}
  45%{opacity:1;transform:translateX(0);background:var(--accent-light)}
  100%{background:transparent}
}
@keyframes paybackBarIn{from{transform:scaleX(0)}to{transform:scaleX(1)}}
.payback-number{display:inline-block;transform-origin:left center;animation:paybackNumberIn .48s cubic-bezier(.2,.8,.2,1) both}
.payback-result{display:inline-flex;align-items:baseline;gap:3px;width:max-content;padding:0 4px;margin-left:-4px;border-radius:4px;font-weight:550;animation:paybackResultIn .72s ease-out both}
.payback-result strong{font-size:12.5px;font-variant-numeric:tabular-nums}
/* fix168：回本进度条加长加厚（5px → 8px）+ 条内流光，与数据看板的进度条同一套视觉语言 */
.payback-track{height:8px;border-radius:5px;background:var(--line-soft,#eee);overflow:hidden}
.payback-bar-animated{position:relative;overflow:hidden;height:100%;border-radius:5px;transform-origin:left center;animation:paybackBarIn .65s cubic-bezier(.2,.75,.2,1) both}
.payback-bar-animated::after{content:"";position:absolute;top:0;bottom:0;left:0;width:42%;background:linear-gradient(90deg,transparent,rgba(255,255,255,.58),transparent);animation:dashBarShimmer 2.8s ease-in-out infinite}
@media(prefers-reduced-motion:reduce){.payback-number,.payback-result,.payback-bar-animated{animation:none}.payback-bar-animated::after{animation:none;opacity:0}}
/* Dashboard device category pie */
.device-pie-layout{display:grid;grid-template-columns:minmax(180px,214px) 1fr;align-items:center;gap:26px;padding:4px 2px 2px}
.device-pie{position:relative;width:min(100%,214px);aspect-ratio:1;margin:auto;border-radius:50%;cursor:crosshair;box-shadow:inset 0 0 0 1px var(--dash-pie-halo),0 14px 36px var(--dash-pie-sh);transition:transform .24s cubic-bezier(.2,.8,.2,1),box-shadow .24s,outline .15s}
.device-pie:hover{transform:translateY(-3px) scale(1.025);box-shadow:inset 0 0 0 1px var(--dash-pie-halo-hover),0 20px 46px var(--dash-pie-sh-hover)}
.device-pie-core{position:absolute;inset:24%;display:grid;place-items:center;border-radius:50%;background:linear-gradient(145deg,var(--paper),var(--bg));box-shadow:0 0 0 7px var(--dash-pie-core-halo),inset 0 0 0 1px var(--line-soft),0 5px 16px var(--dash-pie-core-sh);pointer-events:none}
.device-pie-tip{position:absolute;z-index:3;display:flex;align-items:center;gap:6px;max-width:170px;padding:7px 10px;border:1px solid rgba(255,255,255,.55);border-radius:9px;background:rgba(15,23,42,.9);color:#fff;font-size:11px;line-height:1;white-space:nowrap;box-shadow:0 8px 22px rgba(15,23,42,.24);opacity:0;transform:translate(12px,-50%) scale(.92);pointer-events:none;transition:opacity .12s,transform .12s;backdrop-filter:blur(8px)}
.device-pie-tip.show{opacity:1;transform:translate(12px,-50%) scale(1)}
.device-pie-tip span{width:8px;height:8px;border-radius:50%;box-shadow:0 0 0 3px rgba(255,255,255,.15)}
.device-pie-side{display:flex;flex-direction:column;gap:7px;min-width:0}
.device-pie-legend{display:grid;grid-template-columns:10px minmax(0,1fr) auto;align-items:center;gap:8px;width:100%;padding:7px 9px;border:1px solid transparent;border-radius:9px;background:transparent;font:inherit;font-size:12px;text-align:left;cursor:pointer;transition:background .16s,border-color .16s,transform .16s,box-shadow .16s}
.device-pie-legend:hover,.device-pie-legend.active{background:var(--paper);border-color:var(--line-soft);transform:translateX(3px);box-shadow:0 5px 14px var(--dash-pie-sh-soft)}
.device-pie-detail{display:flex;align-items:center;min-height:38px;margin-top:2px;padding:9px 11px;border:1px solid var(--line-soft);border-radius:10px;background:linear-gradient(135deg,var(--bg),var(--paper));color:var(--muted);font-size:11.5px;line-height:1.45;box-shadow:inset 3px 0 0 color-mix(in srgb,var(--accent) 22%,transparent)}
.device-pie-hint-dot{width:6px;height:6px;margin-right:7px;border-radius:50%;background:var(--accent);box-shadow:0 0 0 4px color-mix(in srgb,var(--accent) 12%,transparent);animation:devicePiePulse 1.8s ease-in-out infinite}
@keyframes devicePiePulse{50%{box-shadow:0 0 0 7px color-mix(in srgb,var(--accent) 0%,transparent)}}

/* fix297：设备分类占比 —— 图例行改为「带分类色的卡片」
   每张卡用该分类的主题变量色（--c）染色：左边框 + 圆点 + 占比条全部由 --c 派生，
   与饼图扇区同色；hover/选中时整卡左移并染边。暗色模式下靠 --c 高饱和保证可辨识。 */
.dev-cat-card{position:relative;display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:8px;width:100%;padding:8px 11px 11px;margin:0;border:1px solid var(--line-soft);border-left:3px solid var(--c);border-radius:10px;background:color-mix(in srgb,var(--c) 9%,var(--paper));font:inherit;font-size:12px;text-align:left;cursor:pointer;transition:background .16s,border-color .16s,transform .16s,box-shadow .16s}
.dev-cat-card:hover,.dev-cat-card.active{transform:translateX(3px);box-shadow:0 6px 16px var(--dash-pie-sh-soft);border-color:var(--c)}
.dev-cat-dot{width:11px;height:11px;border-radius:4px;background:var(--c);flex-shrink:0;box-shadow:0 0 0 3px color-mix(in srgb,var(--c) 16%,transparent)}
.dev-cat-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--ink);font-weight:600}
.dev-cat-name small{margin-left:5px;font-weight:500;color:var(--muted);font-size:11px}
.dev-cat-pct{color:var(--ink);font-variant-numeric:tabular-nums;font-size:12.5px;font-weight:700}
.dev-cat-bar{grid-column:1 / -1;height:5px;margin-top:5px;border-radius:3px;background:color-mix(in srgb,var(--c) 16%,var(--line-soft));overflow:hidden}
.dev-cat-bar i{display:block;height:100%;border-radius:3px;background:var(--c);transition:width .3s ease}
@media(max-width:680px){.device-pie-layout{grid-template-columns:1fr;gap:18px}.device-pie{width:min(100%,220px)}.device-pie-side{width:100%}}

/* Dashboard 商品数据统计（fix155，横向条形图） */
.pd-stat-row{display:flex;align-items:center;gap:10px;min-width:0}
.pd-stat-rank{width:26px;text-align:center;flex-shrink:0;font-size:14px;line-height:1}
.pd-stat-name{width:130px;flex-shrink:0;text-align:right;font-size:12.5px;font-weight:600;color:var(--ink);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pd-stat-val{flex-shrink:0;width:134px;font-size:12px;color:var(--muted);font-variant-numeric:tabular-nums;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
@media(max-width:600px){
  .pd-stat-row{gap:7px}
  .pd-stat-name{width:84px;font-size:12px}
  .pd-stat-val{width:98px;font-size:11px}
}

/* ===== 全站移动端体验统一（触控、宽表、筛选、弹窗） ===== */
@media(max-width:850px){
  html{scroll-padding-top:64px}
  body{overflow-x:hidden}

  /* 页面标题与操作按钮：标题在上，主要操作横向滚动，避免挤压换行 */
  .page-head{display:block}
  .page-head>div:last-child:not(:first-child){width:100%;margin-top:14px;display:flex!important;gap:8px!important;overflow-x:auto;padding:2px 0 5px;-webkit-overflow-scrolling:touch;scrollbar-width:none}
  .page-head>div:last-child:not(:first-child)::-webkit-scrollbar{display:none}
  .page-head>div:last-child:not(:first-child)>.btn{flex:0 0 auto;white-space:nowrap}
  .page-head>button,.page-head>a.btn{width:100%;margin-top:12px;justify-content:center}

  /* 卡片与标题保持统一密度 */
  .card,.table-wrap{border-radius:14px}
  .card-header{align-items:flex-start;gap:10px}
  .card-header h2{font-size:15px;line-height:1.35}
  .card-header .sub{font-size:11.5px}

  /* 搜索和筛选在手机上占满宽度 */
  .toolbar>*{width:100%}
  .search-box{width:100%}
  .filter-group{width:100%;padding:1px 0 6px;scroll-snap-type:x proximity}
  .filter-group select,.filter-group .btn{flex:0 0 auto;min-height:42px;scroll-snap-align:start}

  /* 宽表格保留首列定位，并用阴影提示可以横向滑动 */
  .table-wrap{position:relative;margin-left:0!important;margin-right:0!important;box-shadow:inset -14px 0 16px -18px rgba(15,23,42,.45),var(--shadow)}
  .table-wrap table,.orders-table-wrap table{min-width:760px!important;font-size:13px!important}
  .table-wrap th,.table-wrap td,.orders-table-wrap th,.orders-table-wrap td{padding:11px 12px!important;font-size:13px!important;white-space:nowrap}
  .table-wrap th:first-child,.table-wrap td:first-child{position:sticky;left:0;z-index:2;background:var(--paper);box-shadow:7px 0 12px -12px rgba(15,23,42,.7)}
  .table-wrap th:first-child{z-index:3;background:var(--bg)}
  /* fix186：会员设备页的展开明细行是 colspan 整行，不能被当成「冻结首列」 */
  .table-wrap tr.md-detail>td.md-detail-cell{position:static;left:auto;z-index:auto;box-shadow:none}

  /* 弹窗底部按钮固定，触控区域一致 */
  .modal-header{padding:16px}
  .modal-footer{position:sticky;bottom:0;z-index:4;background:var(--paper);box-shadow:0 -8px 22px rgba(15,23,42,.06);overflow-x:auto;justify-content:flex-end}
  .modal-footer .btn{min-height:42px;flex:0 0 auto;white-space:nowrap}
  .drawer-header{padding:17px 16px}
  .drawer-body{padding:18px 16px calc(32px + env(safe-area-inset-bottom))}
  .drawer-footer{padding:12px 16px calc(12px + env(safe-area-inset-bottom))}

  /* 表单和触控控件最小点击高度 */
  button,.btn,.chip,select{min-height:40px}
  input[type="checkbox"],input[type="radio"]{min-width:18px;min-height:18px}
  .ship-options{gap:8px}
  .ship-opt{min-height:42px;display:flex;align-items:center;justify-content:center}

  /* 避免内联固定多栏在窄屏溢出 */
  [style*="grid-template-columns:3fr 2fr"],
  [style*="grid-template-columns:2fr 1fr"],
  [style*="grid-template-columns:1fr 2fr"]{grid-template-columns:1fr!important}
}

/* fix183：看板内联「3fr 2fr」双栏（营收趋势/商品数据统计、近期订单/设备分类占比、出租率走势/客户贡献排行）
   —— 851~1100px 之间两栏宽度装不下卡内内容（30 根柱子、商品条形图、饼图图例等），
   实测整页会被顶出 22~91px 横向滚动条且各排分隔线互相错位。故把堆叠断点由 850px 提到 1100px：
   该区间改为单列全宽，内容不再溢出、各排自然对齐。（上面的 850px 规则保留兼容，已被子集覆盖）
   全站只有看板这三排使用该内联模板，其它页面不受影响。 */
@media(max-width:1100px){
  [style*="grid-template-columns:3fr 2fr"],
  [style*="grid-template-columns:2fr 1fr"],
  [style*="grid-template-columns:1fr 2fr"]{grid-template-columns:1fr!important}
}

@media(max-width:600px){
  .stat-grid{grid-template-columns:1fr 1fr!important;gap:10px!important}
}
@media(max-width:480px){
  main{padding-left:10px;padding-right:10px}
  .mobile-topbar{padding-left:10px;padding-right:10px}
  .stat-grid{grid-template-columns:1fr 1fr!important;gap:8px!important}
  .stat-card{padding:13px!important;min-width:0}
  .stat-value{font-size:20px!important;overflow-wrap:anywhere}
  .stat-desc{font-size:11px!important}
  .card{padding:14px 12px}
  .modal-body{padding:16px 12px}
  .modal-footer{padding-left:12px;padding-right:12px}
  #rgNavPerms{grid-template-columns:1fr!important}
}

@media(prefers-reduced-motion:reduce){
  *,*::before,*::after{scroll-behavior:auto!important;animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}
}

/* 库存调拨：宽版弹窗与清晰设备列表 */
.warehouse-transfer-modal{max-width:min(920px,94vw)}
.warehouse-transfer-modal .modal-body{padding:24px 28px}
.tf-device-list{height:min(420px,46vh);min-height:280px;overflow-y:auto;border:1px solid var(--line);border-radius:12px;background:var(--paper);scrollbar-gutter:stable}
.tf-select-all{position:sticky;top:0;z-index:2;display:grid;grid-template-columns:22px 1fr;align-items:center;gap:10px;min-height:44px;padding:9px 16px;border-bottom:1px solid var(--line);background:var(--bg);font-size:13px;font-weight:700;cursor:pointer}
.tf-device-row{display:grid;grid-template-columns:22px 32px minmax(0,1fr) 100px;align-items:center;gap:12px;min-height:66px;padding:10px 16px;border-bottom:1px solid var(--line-soft);cursor:pointer;font-size:13px;transition:background .15s}
.tf-device-row:hover{background:var(--accent-light)}
.tf-device-row input,.tf-select-all input{width:17px;height:17px;margin:0}
.tf-device-icon{width:32px;height:32px;display:grid;place-items:center;border-radius:8px;background:var(--bg);font-size:17px}
.tf-device-main{display:grid;grid-template-columns:minmax(150px,1fr) minmax(230px,1.5fr);align-items:center;gap:14px;min-width:0}
.tf-device-main strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:13.5px}
.tf-device-main span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--light);font-family:ui-monospace,SFMono-Regular,Consolas,monospace;font-size:11.5px}
.tf-device-location{color:var(--muted);font-size:12px;white-space:nowrap;text-align:right}
@media(max-width:850px){
  .warehouse-transfer-modal{max-width:100vw}
  .warehouse-transfer-modal .modal-body{padding:18px 16px}
  .tf-device-list{height:min(440px,52vh);min-height:240px}
  .tf-device-row{grid-template-columns:22px 30px minmax(0,1fr);gap:9px;padding:10px 12px}
  .tf-device-main{grid-template-columns:1fr;gap:3px}
  .tf-device-location{grid-column:3;text-align:left;font-size:11px}
}
/* 注册用户：次要操作收纳，降低列表操作区噪音 */
.reg-more{position:relative}
.reg-more>summary{list-style:none;cursor:pointer;user-select:none;white-space:nowrap}
.reg-more>summary::-webkit-details-marker{display:none}
.reg-more[open]>summary{border-color:var(--accent);color:var(--accent-ink);background:var(--accent-light)}
.reg-more-menu{position:absolute;right:0;top:calc(100% + 6px);z-index:40;min-width:128px;padding:6px;background:var(--paper);border:1px solid var(--line);border-radius:10px;box-shadow:var(--card-shadow-hover)}
.reg-more-menu button{display:block;width:100%;padding:8px 10px;border:0;border-radius:7px;background:transparent;color:var(--ink);font-size:12px;text-align:left;cursor:pointer;white-space:nowrap}
.reg-more-menu button:hover{background:var(--accent-light);color:var(--accent-ink)}
.login-open>.app,.login-open>.mobile-topbar,.login-open>.nav-scrim{display:none!important}

/* ===== 设备管理页 手机适配（fix89） ===== */
/* ===== v253 设备资产总览：玻璃拟态（对照 dashboard.html 参考稿） ===== */
.inv-page{
  --glass-bg:rgba(255,255,255,.7);
  --glass-border:rgba(226,232,240,.8);
  --glass-hover:rgba(255,255,255,.9);
  --card-shadow-md:0 4px 16px rgba(148,163,184,.12);
  --card-shadow-xl:0 20px 60px rgba(148,163,184,.2);
  --blur:blur(20px);
}
[data-theme="dark"] .inv-page{
  --glass-bg:rgba(30,41,59,.55);
  --glass-border:rgba(148,163,184,.18);
  --glass-hover:rgba(30,41,59,.78);
  --card-shadow-md:0 4px 16px rgba(0,0,0,.28);
  --card-shadow-xl:0 20px 60px rgba(0,0,0,.45);
}
/* 背景 3 个极淡漂浮光斑 */
.inv-page .inv-glass-wrap{position:relative;overflow:hidden;border-radius:24px}
/* v268：去掉卡片框外的背景底色（原彩色径向渐变光斑层整个移除，wrap 与页面背景融为一体） */
.inv-page .inv-glass-wrap::before{content:none}
@keyframes invBgFloat{0%,100%{transform:translate(0,0) scale(1)}33%{transform:translate(30px,-30px) scale(1.05)}66%{transform:translate(-20px,20px) scale(.95)}}
.inv-page .inv-glass-inner{position:relative;z-index:1;padding:10px 8px}
/* 头部 */
.inv-page .inv-asset-head{display:flex;align-items:baseline;justify-content:space-between;margin:0 4px 18px}
.inv-page .inv-grad-title{font-size:24px;font-weight:700;letter-spacing:-.5px;background:linear-gradient(135deg,var(--ink) 0%,var(--muted) 100%);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;color:transparent}
.inv-page .inv-asset-updated{font-size:13px;color:var(--light);font-variant-numeric:tabular-nums;padding:6px 14px;background:var(--glass-bg);border:1px solid var(--glass-border);border-radius:20px;-webkit-backdrop-filter:var(--blur);backdrop-filter:var(--blur)}
/* 网格 */
.inv-page .inv-asset-grid{gap:14px;margin:0 0 10px}
/* 玻璃卡片（底色随网站皮肤色 --bg，边框随 --line，深浅主题自动跟随） */
.inv-page .inv-acard{
  position:relative;overflow:hidden;
  background:var(--bg);border:1px solid var(--line);border-radius:16px;padding:14px;
  -webkit-backdrop-filter:var(--blur);backdrop-filter:var(--blur);
  box-shadow:var(--card-shadow-md);
  transition:all .4s cubic-bezier(.22,1,.36,1);cursor:default;
}
.inv-page .inv-acard:hover{transform:translateY(-4px) scale(1.01);background:var(--bg);border-color:var(--line);box-shadow:var(--card-shadow-xl),0 0 40px var(--accent-shadow);z-index:5}
/* 悬停旋转流动光晕（radial glow + rotateGlow） */
.inv-page .inv-acard::before{content:'';position:absolute;top:-50%;left:-50%;width:200%;height:200%;background:radial-gradient(circle,var(--accent-glow) 0%,transparent 70%);opacity:0;transition:opacity .5s ease;pointer-events:none;z-index:0}
.inv-page .inv-acard:hover::before{opacity:.3;animation:invRotateGlow 3s linear infinite}
@keyframes invRotateGlow{from{transform:rotate(0)}to{transform:rotate(360deg)}}
/* 卡片顶部 */
.inv-page .inv-acard-top{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px;position:relative;z-index:2}
.inv-page .inv-acard-label{display:flex;align-items:center;gap:6px;font-size:13px;font-weight:600;color:var(--muted);letter-spacing:.5px}
/* 呼吸状态点 */
.inv-page .inv-dot{display:inline-block;width:8px;height:8px;border-radius:50%;background:var(--accent);box-shadow:0 0 8px var(--accent-shadow)}
.inv-page .inv-dot.pulse{animation:invPulse 2s ease-in-out infinite}
@keyframes invPulse{0%,100%{box-shadow:0 0 8px var(--accent-shadow),0 0 0 0 var(--accent-glow)}50%{box-shadow:0 0 12px var(--accent-shadow),0 0 0 8px transparent}}
/* 图标芯片 40px */
.inv-page .inv-acard-icon{width:36px;height:36px;border-radius:11px;display:grid;place-items:center;background:linear-gradient(135deg,var(--accent-soft),var(--accent-soft));color:var(--accent);border:1px solid var(--accent-border);box-shadow:0 4px 12px var(--accent-shadow),inset 0 1px 0 rgba(255,255,255,.3);transition:all .3s cubic-bezier(.34,1.56,.64,1)}
.inv-page .inv-acard-icon svg{width:17px;height:17px}
.inv-page .inv-acard:hover .inv-acard-icon{transform:scale(1.1) rotate(5deg);box-shadow:0 6px 20px var(--accent-shadow),inset 0 1px 0 rgba(255,255,255,.4)}
/* 数值 34px */
.inv-page .inv-acard-value{position:relative;font-size:30px;font-weight:800;line-height:1;letter-spacing:-1px;font-variant-numeric:tabular-nums;color:var(--ink);z-index:2;margin-bottom:5px;text-shadow:0 2px 4px rgba(0,0,0,.05)}
.inv-page .inv-acard-unit{font-size:15px;font-weight:600;color:var(--light);margin-left:4px;letter-spacing:0}
.inv-page .inv-acard-currency{font-size:21px;font-weight:700;margin-right:2px;background:linear-gradient(135deg,var(--accent) 0%,var(--accent) 100%);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;color:transparent}
.inv-page .inv-acard-value.inv-accent{background:linear-gradient(135deg,var(--accent) 0%,var(--accent-light) 100%);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;color:transparent}
.inv-page .inv-acard-value.inv-accent .inv-acard-unit,.inv-page .inv-acard-value.inv-accent .inv-acard-currency{-webkit-text-fill-color:var(--light);background:none;color:var(--light)}
.inv-page .inv-num-money{background:linear-gradient(135deg,var(--accent) 0%,var(--accent-light) 100%);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;color:transparent}
/* 描述 */
.inv-page .inv-acard-desc{position:relative;font-size:12px;color:var(--light);z-index:2;line-height:1.6}
.inv-page .inv-acard-desc b{color:var(--muted);font-weight:600}
/* 进度条 */
.inv-page .inv-acard-bar{position:relative;margin-top:12px;height:7px;border-radius:99px;background:rgba(226,232,240,.6);overflow:hidden;z-index:2;box-shadow:inset 0 1px 2px rgba(148,163,184,.2)}
[data-theme="dark"] .inv-page .inv-acard-bar{background:rgba(148,163,184,.18)}
.inv-page .inv-acard-bar>i{display:block;height:100%;border-radius:99px;background:linear-gradient(90deg,var(--accent),var(--accent-light));box-shadow:0 0 12px var(--accent-shadow);width:0;transition:width 1.2s cubic-bezier(.22,1,.36,1) .2s;position:relative}
.inv-page .inv-acard-bar>i::after{content:'';position:absolute;top:0;left:0;right:0;height:50%;background:linear-gradient(180deg,rgba(255,255,255,.3),transparent);border-radius:99px 99px 0 0}
/* 环形图 60px */
.inv-page .inv-card-body{display:flex;align-items:center;gap:14px;position:relative;z-index:2}
.inv-page .inv-ring{position:relative;width:60px;height:60px;flex:none}
.inv-page .inv-ring svg{width:60px;height:60px;transform:rotate(-90deg);filter:drop-shadow(0 0 6px var(--accent-shadow))}
.inv-page .inv-ring-track{stroke:rgba(226,232,240,.8);stroke-width:6}
[data-theme="dark"] .inv-page .inv-ring-track{stroke:rgba(148,163,184,.2)}
.inv-page .inv-donut-fg{stroke:var(--accent);stroke-width:6;stroke-linecap:round;stroke-dasharray:195;stroke-dashoffset:195;transition:stroke-dashoffset 1.4s cubic-bezier(.22,1,.36,1) .3s}
.inv-page .inv-ring-em{position:absolute;inset:0;display:grid;place-items:center;font-size:14px;font-weight:700;font-variant-numeric:tabular-nums;color:var(--ink);text-shadow:0 0 12px var(--accent-shadow)}
.inv-page .inv-ring-meta{flex:1;min-width:0}
/* 8 种发光色彩主题 */
.inv-page .inv-g1{--accent:#6366f1;--accent-light:#818cf8;--accent-soft:rgba(99,102,241,.08);--accent-border:rgba(99,102,241,.2);--accent-shadow:rgba(99,102,241,.25);--accent-glow:rgba(99,102,241,.12)}
.inv-page .inv-g2{--accent:#10b981;--accent-light:#34d399;--accent-soft:rgba(16,185,129,.08);--accent-border:rgba(16,185,129,.2);--accent-shadow:rgba(16,185,129,.25);--accent-glow:rgba(16,185,129,.12)}
.inv-page .inv-g3{--accent:#f59e0b;--accent-light:#fbbf24;--accent-soft:rgba(245,158,11,.08);--accent-border:rgba(245,158,11,.2);--accent-shadow:rgba(245,158,11,.25);--accent-glow:rgba(245,158,11,.12)}
.inv-page .inv-g4{--accent:#f43f5e;--accent-light:#fb7185;--accent-soft:rgba(244,63,94,.08);--accent-border:rgba(244,63,94,.2);--accent-shadow:rgba(244,63,94,.25);--accent-glow:rgba(244,63,94,.12)}
.inv-page .inv-g5{--accent:#8b5cf6;--accent-light:#a78bfa;--accent-soft:rgba(139,92,246,.08);--accent-border:rgba(139,92,246,.2);--accent-shadow:rgba(139,92,246,.25);--accent-glow:rgba(139,92,246,.12)}
.inv-page .inv-g6{--accent:#3b82f6;--accent-light:#60a5fa;--accent-soft:rgba(59,130,246,.08);--accent-border:rgba(59,130,246,.2);--accent-shadow:rgba(59,130,246,.25);--accent-glow:rgba(59,130,246,.12)}
.inv-page .inv-g7{--accent:#14b8a6;--accent-light:#2dd4bf;--accent-soft:rgba(20,184,166,.08);--accent-border:rgba(20,184,166,.2);--accent-shadow:rgba(20,184,166,.25);--accent-glow:rgba(20,184,166,.12)}
.inv-page .inv-g8{--accent:#06b6d4;--accent-light:#22d3ee;--accent-soft:rgba(6,182,212,.08);--accent-border:rgba(6,182,212,.2);--accent-shadow:rgba(6,182,212,.25);--accent-glow:rgba(6,182,212,.12)}
/* 响应式（对照参考稿） */
@media(max-width:1024px){.inv-page .inv-asset-grid{grid-template-columns:repeat(2,1fr)!important}}
@media(max-width:850px){.inv-page .inv-acard{padding:12px!important}.inv-page .inv-acard-value{font-size:26px}}
@media(max-width:640px){.inv-page .inv-asset-grid{grid-template-columns:repeat(2,1fr)!important;gap:10px!important}.inv-page .inv-asset-head h2{font-size:20px}}
/* 减少动态效果偏好 */
@media (prefers-reduced-motion:reduce){
  .inv-page .inv-glass-wrap::before,.inv-page .inv-acard::before,.inv-page .inv-dot.pulse{animation:none!important}
}

/* 统计卡：桌面 5/4 列，窄屏逐级降为 2 列、超窄 1 列（覆盖页面内联的 repeat(5/4,1fr)） */
.inv-page .inv-stat-5{grid-template-columns:repeat(5,1fr)!important}
.inv-page .inv-stat-4{grid-template-columns:repeat(4,1fr)!important}
@media(max-width:1100px){
  .inv-page .inv-stat-5{grid-template-columns:repeat(4,1fr)!important}
  .inv-page .inv-stat-4{grid-template-columns:repeat(3,1fr)!important}
}
@media(max-width:850px){
  .inv-page .inv-stat-5,.inv-page .inv-stat-4{grid-template-columns:repeat(2,1fr)!important}
  /* 产品搜索框满宽 */
  .inv-page #invPicker{width:100%}
  .inv-page #invPickerInput{width:100%!important}
  .inv-page .toolbar>input.inv-stk-search{width:100%!important}
  /* 表格卡片头部的操作按钮行换行，避免溢出 */
  .inv-page .table-wrap .card-header>div:last-child{display:flex!important;flex-wrap:wrap!important;width:100%!important;gap:8px!important}
  .inv-page .table-wrap .card-header>div:last-child>span:first-child{flex:1 1 100%}
  .inv-page .table-wrap .card-header>div:last-child .btn{flex:1 1 calc(50% - 8px);min-width:0;justify-content:center}
}
@media(max-width:600px){
  .inv-page .inv-stat-5,.inv-page .inv-stat-4{grid-template-columns:repeat(2,1fr)!important}
}
@media(max-width:380px){
  .inv-page .inv-stat-5,.inv-page .inv-stat-4{grid-template-columns:1fr!important}
}
/* 设备资产总览卡：手机端一排 2 个（8 卡共 4 排），间距收紧 */
@media(max-width:640px){
  .inv-page .inv-asset-grid{grid-template-columns:repeat(2,1fr)!important;gap:10px!important}
  .inv-page .inv-acard{padding:12px 10px!important}
  .inv-page .inv-acard-value{font-size:24px!important}
  .inv-page .card-wm{font-size:42px!important;right:6px!important;bottom:-10px!important;opacity:.1}
}

/* 三张表（设备列表 / 型号统计 / 库存盘点）在 ≤768px 沿用全站统一的横向滑动 + 首列冻结，
   与「配件库存 / 订单管理」完全一致（fix92：由卡片式改回滑动式） */
@media(max-width:768px){
  .inv-page .table-wrap td .info-row{min-width:0}
  .inv-page .table-wrap td .info-name{overflow:hidden;text-overflow:ellipsis}
}

/* 设备档案抽屉内的内联多栏在超窄屏堆叠 */
@media(max-width:480px){
  .inv-drawer-overview{grid-template-columns:1fr!important}
  .inv-drawer-info{grid-template-columns:1fr!important}
}

/* ===== 设备管理页 手机适配（fix91：补齐 .inv-page 类，修复 fix89 规则全部未生效） ===== */
.inv-ops{display:flex;gap:6px;flex-wrap:wrap}
@media(max-width:850px){
  /* 列表头部统计文字独占一行，不再被右侧按钮挤成竖排 */
  .inv-page .table-wrap .card-header{flex-wrap:wrap!important}
  .inv-page .table-wrap .card-header>div:last-child>span:first-child{flex:1 1 100%;white-space:nowrap}
  /* 页头按钮在窄屏换行铺开 */
  .inv-page .page-head{flex-wrap:wrap;gap:10px}
  .inv-page .page-head>div:last-child{flex-wrap:wrap;width:100%}
}
@media(max-width:768px){
  /* 操作列按钮排成两排（2 列），收窄该列宽度、减少横向滑动距离 */
  .inv-ops{display:grid;grid-template-columns:1fr 1fr;gap:8px}
  .inv-ops>.btn{width:100%;justify-content:center}
}
@media(max-width:420px){
  .inv-page .table-wrap .card-header>div:last-child>span:first-child{white-space:normal}
}

/* ===== 配件库存页 手机适配（fix95：统计卡由 4 张增至 6 张，逐级降列） ===== */
/* 桌面 6 列一行；中屏 3 列两行；≤850px 交给全站 .stat-grid 规则降为 2 列；超窄 1 列 */
.stat-grid.acc-stat-6{grid-template-columns:repeat(6,1fr)}
@media(max-width:1400px){.stat-grid.acc-stat-6{grid-template-columns:repeat(3,1fr)}}
@media(max-width:850px){.stat-grid.acc-stat-6{grid-template-columns:repeat(2,1fr)}}
@media(max-width:380px){.stat-grid.acc-stat-6{grid-template-columns:1fr}}

/* 配件清单「操作」列：手机端 4 个按钮（档案/入库/编辑/删除）排成 2 排 2 列，
   不再挤成一条长横排；桌面端仍是原来的一行 flex 排列。 */
@media(max-width:850px){
  .acc-ops{display:grid!important;grid-template-columns:repeat(2,1fr);gap:6px;width:128px}
  .acc-ops .btn{width:100%;min-width:0;padding:7px 2px}
}

.login-page{position:fixed;inset:0;z-index:1000;display:flex;align-items:center;justify-content:center;padding:24px;background:radial-gradient(circle at 20% 10%,#dff7f1 0,transparent 35%),linear-gradient(135deg,#f8fafc,#eef7f5)}
.login-panel{width:min(480px,100%);padding:44px;background:rgba(255,255,255,.94);border:1px solid rgba(15,118,110,.14);border-radius:20px;box-shadow:0 24px 70px rgba(15,23,42,.13)}
.login-logo{width:48px;height:48px;border-radius:14px;display:grid;place-items:center;background:#a9e45f;color:#173a26;font-size:22px;font-weight:900;margin-bottom:18px}
.login-panel h1{font-size:27px;margin:0 0 8px}.login-panel p{font-size:14px;color:var(--muted);margin:0 0 26px}.login-panel label{display:block;font-size:12px;font-weight:600;margin:13px 0 6px}.login-panel input{width:100%;box-sizing:border-box;padding:11px 12px;border:1px solid var(--line);border-radius:10px;font:inherit;outline:none}.login-panel input:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-light)}
.login-panel>.btn{width:100%;margin-top:8px;padding:11px}.login-error{height:22px;padding-top:5px;color:var(--red-ink);font-size:12px}.login-demo{text-align:center;color:var(--light);font-size:11px;margin-top:14px}
.public-page{min-height:100vh;background:#f8fbfa;color:var(--ink)}.public-nav{height:70px;padding:0 max(24px,calc((100vw - 1180px)/2));display:flex;align-items:center;justify-content:space-between;background:rgba(255,255,255,.9);border-bottom:1px solid rgba(15,118,110,.1);position:sticky;top:0;z-index:5;backdrop-filter:blur(14px)}.public-brand{border:0;background:none;font-size:18px;font-weight:800;display:flex;align-items:center;gap:10px;cursor:pointer;color:var(--ink)}.public-brand span{width:34px;height:34px;border-radius:10px;display:grid;place-items:center;background:var(--accent);color:#fff}.public-nav nav{display:flex;gap:8px}.public-nav nav button,.auth-link,.auth-back{border:0;background:none;cursor:pointer;color:var(--muted);padding:8px 12px}.public-nav nav .public-cta{background:var(--accent);color:#fff;border-radius:9px}.hero{max-width:1180px;margin:auto;min-height:570px;padding:70px 24px;display:grid;grid-template-columns:1.05fr .95fr;align-items:center;gap:56px}.hero-badge{display:inline-block;padding:6px 11px;border-radius:20px;background:var(--accent-light);color:var(--accent-ink);font-size:12px;font-weight:700}.hero h1{font-size:46px;line-height:1.2;letter-spacing:-1.5px;margin:20px 0}.hero h1 em{font-style:normal;color:var(--accent-ink)}.hero-copy>p{font-size:16px;line-height:1.8;color:var(--muted);max-width:570px}.hero-actions{display:flex;gap:12px;margin-top:28px}.hero-actions .btn,.public-bottom .btn{padding:11px 20px;font-size:14px}.hero-note{font-size:12px;color:var(--light);margin-top:16px}.hero-preview{padding:16px;border-radius:22px;background:#fff;box-shadow:0 30px 80px rgba(15,118,110,.15);border:1px solid rgba(15,118,110,.12);transform:rotate(1deg)}.preview-bar{padding:8px 6px 17px;border-bottom:1px solid var(--line-soft);font-size:12px;color:var(--muted)}.preview-bar i{display:inline-block;width:8px;height:8px;border-radius:50%;background:#d1d5db;margin-right:5px}.preview-bar span{float:right}.preview-stats{display:grid;grid-template-columns:1fr 1fr;gap:12px;padding:16px 4px 4px}.preview-stats b{padding:24px 18px;border-radius:14px;background:linear-gradient(135deg,#f0fdfa,#f8fafc);font-size:15px}.preview-stats small{display:block;color:var(--light);font-size:11px;font-weight:400;margin-top:8px}.feature-section{max-width:1180px;margin:auto;padding:60px 24px 90px}.section-title{text-align:center;margin-bottom:34px}.section-title span{font-size:12px;color:var(--accent-ink);font-weight:700}.section-title h2{font-size:28px;margin:9px 0}.feature-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}.feature-grid article{padding:24px;border:1px solid var(--line);border-radius:16px;background:#fff}.feature-grid article>span{font-size:24px}.feature-grid h3{margin:13px 0 7px;font-size:16px}.feature-grid p{margin:0;color:var(--muted);font-size:13px;line-height:1.7}.public-bottom{text-align:center;padding:60px 24px;background:#eaf8f5}.public-bottom h2{font-size:28px;margin:0 0 10px}.public-bottom p{color:var(--muted);margin-bottom:22px}.public-footer{text-align:center;padding:24px;color:var(--light);font-size:11px;background:#fff}.auth-wrap{min-height:calc(100vh - 120px);display:flex;align-items:center;justify-content:center;padding:42px 20px}.auth-wrap .login-panel{position:relative}.auth-back{padding:0;margin-bottom:18px}.auth-link{display:block;width:100%;margin-top:10px;color:var(--accent-ink)}.register-panel{width:min(880px,100%)}.auth-grid{display:grid;grid-template-columns:1fr 1fr;gap:0 22px}.terms{display:flex!important;align-items:center;gap:7px;font-weight:400!important;color:var(--muted)}.terms input{width:auto!important}.register-panel .login-error{height:25px}
@media(max-width:760px){.public-nav{padding:0 16px}.public-nav nav button:first-child:not(.public-login){display:none}.hero{grid-template-columns:1fr;padding-top:45px}.hero h1{font-size:34px}.hero-preview{transform:none}.feature-grid{grid-template-columns:1fr}.auth-grid{grid-template-columns:1fr}}
.plan-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:14px;max-width:1100px;margin:0 auto}.plan-card{position:relative;padding:22px;background:var(--paper);border:1px solid var(--line);border-top:4px solid var(--plan);border-radius:15px}.plan-card.current{box-shadow:0 0 0 2px var(--plan),0 12px 30px rgba(15,23,42,.08)}.plan-name{font-size:16px;font-weight:800;color:var(--plan)}.plan-price{margin:16px 0 3px}.plan-price strong{font-size:26px}.plan-price span,.plan-month{font-size:12px;color:var(--muted)}.plan-card p{font-size:12px;color:var(--muted);margin:12px 0}.plan-card .btn{width:100%;margin-top:12px}.onboarding-card{position:fixed;right:24px;bottom:24px;z-index:350;width:300px;padding:20px;background:var(--paper);border:1px solid rgba(15,118,110,.18);border-radius:16px;box-shadow:0 20px 55px rgba(15,23,42,.18)}.onboard-close{position:absolute;right:12px;top:10px;border:0;background:none;color:var(--light);font-size:20px;cursor:pointer}.onboard-kicker{font-size:11px;color:var(--accent-ink);font-weight:700}.onboarding-card h3{margin:5px 0;font-size:17px}.onboarding-card>p{font-size:11.5px;color:var(--light);margin:0 0 12px}.onboard-step{width:100%;display:flex;align-items:center;gap:8px;border:0;border-radius:9px;background:var(--bg);padding:9px 10px;margin-top:6px;text-align:left;cursor:pointer;font-size:12px}.onboard-step span{color:var(--accent-ink);font-weight:800}.onboard-step b{margin-left:auto}.onboard-step.done{color:var(--light);text-decoration:line-through}.onboard-progress{height:5px;background:var(--line-soft);border-radius:10px;margin-top:13px;overflow:hidden}.onboard-progress i{display:block;height:100%;background:var(--accent);transition:width .3s}
@media(max-width:900px){.plan-grid{grid-template-columns:1fr 1fr;max-width:100%}}@media(max-width:600px){.plan-grid{grid-template-columns:1fr}.onboarding-card{left:12px;right:12px;bottom:12px;width:auto}}

/* ===== 找回密码 / 修改密码 ===== */
.forgot-link{display:block;width:100%;text-align:right;font-size:12.5px;color:#2563eb;cursor:pointer;margin:2px 0 4px;background:none;border:0;padding:0}
.forgot-link:hover{text-decoration:underline}
.fp-hint{font-size:12.5px;color:#92400e;background:#fef3c7;border:1px solid #fde68a;border-radius:8px;padding:9px 12px;margin-bottom:14px;line-height:1.6}
.fp-hint.fp-ok{color:#166534;background:#f0fdf4;border-color:#bbf7d0}

/* ===== 登录页美化 ===== */
.auth-login{display:flex;align-items:stretch;justify-content:flex-start;min-height:calc(100vh - 70px);padding:0;background:#fafaf7}
.login-card{flex:1;display:grid;grid-template-columns:minmax(230px,20%) 1fr;width:100%;max-width:none;background:#fafaf7;border-radius:0;box-shadow:none;overflow:hidden}
.login-art{background:#dcf3a5;display:flex;flex-direction:column;justify-content:flex-end;align-items:flex-start;gap:16px;padding:44px 28px}
.login-art h2{margin:0;font-size:clamp(20px,1.7vw,27px);line-height:1.4;font-weight:900;color:#173a26;letter-spacing:-.3px}
.art-pill{border:0;cursor:pointer;font-family:inherit;background:#a9e45f;color:#173a26;font-weight:700;font-size:15px;padding:12px 28px;border-radius:999px;box-shadow:0 6px 16px rgba(90,140,30,.22);transition:transform .16s,box-shadow .16s}
.art-pill:hover{transform:translateY(-2px);box-shadow:0 10px 22px rgba(90,140,30,.3)}
.login-form{background:#fafaf7;display:flex;flex-direction:column;justify-content:center;max-width:600px;width:100%;margin:0 auto;padding:56px 56px 44px}
.login-form .auth-back{margin:-8px 0 12px -4px;padding:6px 8px;font-size:12.5px;color:var(--muted);display:inline-flex;align-items:center;gap:4px;border-radius:8px}
.login-form .auth-back:hover{background:var(--bg);color:var(--ink)}
.login-form .login-logo{margin-bottom:14px}
.login-form h1{margin-bottom:22px}
.login-form label{display:block;font-size:12px;font-weight:600;margin:13px 0 6px}
.login-form input{width:100%;box-sizing:border-box;padding:11px 12px;border:1px solid var(--line);border-radius:10px;font:inherit;outline:none}
.login-form input:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-light)}
.login-form select{width:100%;box-sizing:border-box;padding:11px 12px;border:1px solid var(--line);border-radius:10px;font:inherit;outline:none;background:#fff;color:var(--ink);appearance:auto}
.login-form select:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-light)}
.login-form>.btn,.login-form .btn{width:100%;margin-top:8px;padding:11px}
@media(max-width:900px){.login-card{grid-template-columns:1fr}.login-art{display:none}.login-form{padding:36px 26px 28px}}
.login-form .btn-primary,.login-panel .btn-primary{background:#101828;color:#fff;border:none;border-radius:999px;box-shadow:0 8px 20px rgba(16,24,40,.18);font-weight:700}
.login-form .btn-primary:hover,.login-panel .btn-primary:hover{background:#1b2534}
.login-panel{border:1px solid #e4ecd4}

/* ===== 公开首页 v4（明亮通透现代 SaaS） ===== */
.hp{display:block;padding:0}
.hp *{box-sizing:border-box}
.hp a{cursor:pointer}
.public-page{background:#f8f9f8}
/* 顶部导航 */
.public-nav{height:76px;padding:0 max(32px,calc((100vw - 1376px)/2));display:flex;align-items:center;justify-content:space-between;background:rgba(255,255,255,.8);border-bottom:1px solid #e8ebf2;position:sticky;top:0;z-index:60;backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px)}
.public-brand{border:0;background:none;font-size:18px;font-weight:800;display:flex;align-items:center;gap:10px;cursor:pointer;color:#0f172a;letter-spacing:.2px}
.public-brand span{width:34px;height:34px;border-radius:11px;display:grid;place-items:center;background:#101828;color:#fff;font-size:15px;font-weight:900;box-shadow:0 4px 12px rgba(16,24,40,.24)}
.public-menu{display:flex;align-items:center;gap:2px}
.public-menu button,.public-auth button{border:0;background:none;cursor:pointer;color:#55606e;font-size:14px;font-weight:500;padding:9px 14px;border-radius:9px;transition:all .16s}
.public-menu button:hover{color:#0f172a;background:#eef1f6}
.public-auth{display:flex;align-items:center;gap:10px}
.public-auth button:hover{color:#0f172a}
.public-nav .public-auth .public-cta{padding:10px 22px;font-weight:600;color:#fff;background:#101828;border-radius:999px;box-shadow:0 6px 16px rgba(16,24,40,.22);transition:transform .16s,box-shadow .16s}
.public-nav .public-auth .public-cta:hover{transform:translateY(-1px);box-shadow:0 8px 22px rgba(16,24,40,.32);color:#fff;background:#1b2534}
.public-footer{padding:38px max(32px,calc((100vw - 1376px)/2));text-align:center;color:#5f6b7a;font-size:13px;background:#fff;border-top:1px solid #eceff4}

/* ===== Hero（左文右图 + 柔和光斑） ===== */
.hp-hero{position:relative;overflow:hidden;padding:86px max(32px,calc((100vw - 1376px)/2)) 40px;background:radial-gradient(120% 100% at 50% 42%,#c3e88e 0%,#d4efa6 48%,#e9f7c9 100%)}
.hp-blob{position:absolute;border-radius:50%;filter:blur(60px);pointer-events:none;opacity:.5}
.hp-blob-a{width:560px;height:560px;top:-180px;left:-120px;background:#c5ee72}
.hp-blob-b{width:480px;height:480px;top:-80px;right:-140px;background:#a7f3d0}
.hp-blob-c{width:360px;height:360px;bottom:-120px;left:38%;background:#bae6fd}
.hp-hero-inner{position:relative;z-index:2;text-align:center;max-width:1080px;margin:0 auto}
.hp-badge{display:inline-flex;align-items:center;gap:8px;padding:8px 16px;border-radius:999px;background:#fff;border:1px solid rgba(15,23,42,.08);color:#44502e;font-size:13px;font-weight:600;box-shadow:0 2px 10px rgba(63,98,18,.1)}
.hp-badge-dot{width:7px;height:7px;border-radius:50%;background:#65a30d;box-shadow:0 0 0 3px rgba(101,163,13,.2)}
.hp-hero h1{font-size:clamp(34px,5.2vw,64px);line-height:1.12;letter-spacing:-2px;margin:26px 0 20px;color:#0f172a;font-weight:900}
.hp-word{background:linear-gradient(90deg,#3f6212,#0d9488);-webkit-background-clip:text;background-clip:text;color:transparent}
.hp-lead{font-size:18px;line-height:1.85;color:#44502e;max-width:780px;margin:0 auto}
.hp-actions{display:flex;gap:14px;margin:32px 0 0;justify-content:center;flex-wrap:wrap}
.hp-btn{font-family:inherit;cursor:pointer;border-radius:999px;font-weight:600;font-size:15px;padding:14px 30px;transition:transform .16s,box-shadow .16s,border-color .16s,background .16s;display:inline-flex;align-items:center;justify-content:center;gap:6px}
.hp-btn-primary{background:#101828;color:#fff;border:none;box-shadow:0 10px 26px rgba(16,24,40,.28)}
.hp-btn-primary:hover{transform:translateY(-2px);box-shadow:0 14px 34px rgba(16,24,40,.36);background:#1b2534}
.hp-btn-light{background:#fff;color:#0f172a;border:1px solid rgba(15,23,42,.12)}
.hp-btn-light:hover{border-color:#3f6212;color:#3f6212;transform:translateY(-2px)}
.hp-note{display:flex;justify-content:center;gap:18px;flex-wrap:wrap;margin-top:22px;color:#5f6b7a;font-size:13px}
.hp-note::before{content:""}

/* Hero 产品舞台 */
.hp-stage{position:relative;max-width:1300px;margin:70px auto 0;z-index:2}
.hp-win{background:#fff;border:1px solid #e3e8f0;border-radius:18px;overflow:hidden;box-shadow:0 30px 70px rgba(15,23,42,.13);text-align:left}
.hp-win-bar{display:flex;align-items:center;gap:7px;padding:11px 16px;background:#f8fafc;border-bottom:1px solid #eef1f6}
.hp-win-bar i{width:11px;height:11px;border-radius:50%}
.hp-win-bar i:nth-child(1){background:#ff5f57}.hp-win-bar i:nth-child(2){background:#febc2e}.hp-win-bar i:nth-child(3){background:#28c840}
.hp-win-bar span{margin-left:10px;color:#5f6b7a;font-size:12px}
.hp-win-body{display:grid;grid-template-columns:250px 1fr;min-height:390px}
.hp-side{padding:22px 14px;background:#fafbfc;border-right:1px solid #eef1f6}
.hp-side-logo{font-weight:800;font-size:13px;display:flex;align-items:center;gap:8px;margin:0 8px 22px;color:#0f172a}
.hp-side-logo span{width:26px;height:26px;border-radius:7px;background:#101828;color:#fff;display:grid;place-items:center;font-size:11px;font-weight:900}
.hp-side ul{list-style:none;display:flex;flex-direction:column;gap:4px;padding:0;margin:0}
.hp-side li{padding:9px 11px;border-radius:9px;font-size:12.5px;color:#475569;display:flex;align-items:center;gap:9px}
.hp-side li.on{background:#ecfccb;color:#3f6212;font-weight:600}
.hp-side li span{opacity:.9}
.hp-content{padding:30px 32px}
.hp-stat-row{display:grid;grid-template-columns:1fr 1fr 1fr;gap:12px;margin-bottom:18px}
.hp-stat{position:relative;padding:16px;border-radius:13px;border:1px solid #eef1f6;background:#fbfcfe}
.hp-stat b{font-size:22px;color:#0f172a;display:block;line-height:1.1}
.hp-stat>span{font-size:12px;color:#5f6b7a;display:block;margin-top:7px}
.hp-stat em{position:absolute;top:14px;right:14px;font-style:normal;font-size:11px;font-weight:600}
.hp-stat em.up{color:#15803d}
.hp-stat em.warn{color:var(--orange-ink)}
.hp-stat-t{border-top:3px solid #84cc16}.hp-stat-c{border-top:3px solid #14b8a6}.hp-stat-s{border-top:3px solid #a8b80a}
.hp-table{overflow:hidden;border:1px solid #eef1f6;border-radius:12px}
.hp-trow{display:grid;grid-template-columns:1.6fr 1.4fr 1.1fr .7fr;align-items:center;padding:11px 16px;font-size:12.5px;gap:8px}
.hp-trow+.hp-trow{border-top:1px solid #f1f3f8}
.hp-thead{background:#f8fafc;color:#5f6b7a;font-weight:600}
.hp-trow .t-name{color:#0f172a;font-weight:600}
.hp-trow .t-cust{color:#475569}
.pill{padding:3px 11px;border-radius:999px;font-size:11px;font-weight:600;width:fit-content}
.pill-blue{background:#e0f2fe;color:#0369a1}
/* fix390⑥：收藏筛选 pill（橙色，与蓝色「仅看在库」区分） */
.pill-orange{background:#fff1e0;color:#b45309}
.pill-green{background:#dcfce7;color:#15803d}
/* 悬浮通知卡 */
.hp-float{position:absolute;background:#fff;border-radius:13px;box-shadow:0 14px 34px rgba(15,23,42,.16);padding:12px 16px;display:flex;flex-direction:column;gap:2px;animation:floaty 4.5s ease-in-out infinite;z-index:3}
.hp-float span{font-size:17px}
.hp-float b{font-size:12.5px;color:#0f172a}
.hp-float small{font-size:11px;color:#5f6b7a}
.hp-float-a{top:34px;left:-30px;--rot:-7deg}
.hp-float-b{bottom:60px;right:-26px;--rot:6deg;animation-delay:1.3s}
.hp-float-c{top:-10px;right:5%;--rot:5deg;animation-delay:.6s}
.hp-fr{display:flex;align-items:center;gap:10px;text-align:left}
.hp-fr+.hp-fr{margin-top:11px}
.hp-fr i{width:26px;height:26px;border-radius:50%;flex-shrink:0;box-shadow:inset 0 0 0 1px rgba(15,23,42,.08)}
.hp-fr b{font-size:12.5px;color:#0f172a}
.hp-fr small{font-size:11px;color:#5f6b7a}
@keyframes floaty{0%,100%{transform:rotate(var(--rot,0deg)) translateY(0)}50%{transform:rotate(var(--rot,0deg)) translateY(-10px)}}

/* 品牌信任条 */
.hp-logos{padding:26px 0;border-top:1px solid #eef1f6;background:#f8f9f8}
.hp-logos ul{list-style:none;max-width:1440px;margin:14px auto 0;padding:0 32px;display:flex;justify-content:space-between;flex-wrap:wrap;gap:10px}
.hp-logos span{display:block;text-align:center;color:#5f6b7a;font-size:12px;letter-spacing:.3px}
.hp-logos li{font-size:15px;font-weight:700;color:#5f6b7a}

/* ===== 区块 ===== */
.hp-section{max-width:1440px;margin:0 auto;padding:96px 32px}
.hp-section.hp-alt{background:#f8f9f8;box-shadow:0 0 0 100vmax #f8f9f8;clip-path:inset(0 -100vmax)}
.hp-head{text-align:center;margin-bottom:52px}
.hp-kicker{display:inline-block;color:#4d7c0f;font-size:12px;font-weight:800;letter-spacing:1.6px;text-transform:uppercase;margin-bottom:12px}
.hp-head h2{font-size:clamp(26px,3.8vw,42px);margin:0;color:#0f172a;font-weight:800;letter-spacing:-.8px}
.hp-head p{font-size:16px;color:#5f6b7a;margin:14px auto 0;max-width:640px;line-height:1.8}

/* 功能 6 卡 */
.hp-feat-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:24px}
.hp-feat-grid article{padding:34px 30px;border-radius:18px;background:#fff;border:1px solid #e9edf4;transition:transform .2s,box-shadow .2s,border-color .2s}
.hp-feat-grid article:hover{transform:translateY(-5px);box-shadow:0 22px 50px rgba(15,23,42,.1);border-color:transparent}
.hp-ic{display:inline-grid;place-items:center;width:54px;height:54px;border-radius:15px;font-size:25px;background:color-mix(in srgb,var(--c) 14%,#fff);box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--c) 22%,transparent)}
.hp-feat-grid h3{margin:18px 0 9px;font-size:17px;color:#0f172a}
.hp-feat-grid p{margin:0;font-size:14px;color:#475569;line-height:1.75}

/* 为什么选我们：数字列表 */
.hp-reason-grid{max-width:1100px;margin:0 auto;display:flex;flex-direction:column;gap:16px}
.hp-reason{display:flex;align-items:flex-start;gap:22px;padding:26px 28px;border-radius:16px;background:#f8fafc;border:1px solid #eef1f6;transition:transform .2s,background .2s}
.hp-reason:hover{transform:translateX(6px);background:#f7fee7}
.hp-reason>span{font-size:30px;font-weight:800;line-height:1;background:linear-gradient(135deg,#3f6212,#0d9488);-webkit-background-clip:text;background-clip:text;color:transparent;width:44px}
.hp-reason h3{margin:0 0 7px;font-size:18px;color:#0f172a}
.hp-reason p{margin:0;font-size:14px;color:#475569;line-height:1.75}

/* 价格 */
.hp-plan-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:20px;align-items:stretch}
.hp-plan-grid-2{grid-template-columns:repeat(2,1fr);max-width:1000px;margin-left:auto;margin-right:auto}
.hp-plan-grid-4{grid-template-columns:repeat(4,1fr);max-width:1240px;margin-left:auto;margin-right:auto;gap:16px}
.hp-plan{position:relative;display:flex;flex-direction:column;padding:38px 34px;border-radius:20px;background:#fff;border:1px solid #e9edf4;transition:transform .2s,box-shadow .2s}
.hp-plan:hover{transform:translateY(-5px);box-shadow:0 24px 55px rgba(15,23,42,.1)}
/* 四档套餐四色底（浅黄绿 / 浅青 / 浅薄荷绿 / 浅黄） */
.hp-plan-i0{background:#def8a6}
.hp-plan-i1{background:#aef3ec}
.hp-plan-i2{background:#a9edc4}
.hp-plan-i3{background:#f1f2a3}
.hp-plan-i0,.hp-plan-i1,.hp-plan-i2,.hp-plan-i3{border-color:rgba(15,23,42,.05)}
.hp-plan h3{font-size:16px;color:#0f172a;margin:0}
.hp-price{font-size:38px;font-weight:800;color:#0f172a;margin:10px 0 2px;letter-spacing:-1px}
.hp-price small{font-size:13px;color:#5f6b7a;font-weight:500;margin-left:3px}
.hp-plan>p{font-size:13px;color:#5f6b7a;margin:0 0 22px}
.hp-plan ul{list-style:none;display:flex;flex-direction:column;gap:10px;margin:0 0 26px;padding:0;flex:1}
.hp-plan li{display:flex;align-items:center;gap:9px;font-size:13.5px;color:#475569}
.hp-plan li::before{content:"✓";flex-shrink:0;display:grid;place-items:center;width:18px;height:18px;border-radius:50%;background:#ecfccb;color:#3f6212;font-weight:800;font-size:11px}
.hp-plan .hp-btn{width:100%}
.hp-plan-hot{border:1px solid #4d7c0f;box-shadow:0 20px 60px rgba(101,163,13,.2);overflow:hidden}
.hp-plan-hot::before{content:"";position:absolute;inset:0;background:linear-gradient(160deg,rgba(233,247,201,.6),rgba(255,255,255,0) 45%);pointer-events:none}
.hp-plan-hot>*{position:relative}
/* 四档并排时的紧凑版式：窄列下不让「¥x/月」「免费开始」折行，卡片整体收窄内边距 */
.hp-plan-grid-4 .hp-plan{padding:26px 22px;border-radius:16px}
.hp-plan-grid-4 .hp-plan h3{font-size:15px}
.hp-plan-grid-4 .hp-price{font-size:30px;margin:8px 0 2px;white-space:nowrap}
.hp-plan-grid-4 .hp-price small{font-size:12px}
.hp-plan-grid-4 .hp-plan>p{font-size:12.5px;margin:0 0 16px;min-height:36px}
.hp-plan-grid-4 .hp-plan ul{gap:8px;margin-bottom:18px}
.hp-plan-grid-4 .hp-plan li{font-size:12.5px;gap:7px}
.hp-plan-grid-4 .hp-plan .hp-btn{white-space:nowrap;font-size:13px;padding:11px 10px}
.hp-hot-tag{position:absolute;top:0;left:50%;transform:translateX(-50%);background:#101828;color:#fff;font-size:11px;font-weight:700;padding:6px 16px;border-radius:0 0 10px 10px;z-index:2}
.hp-btn-outline{background:#fff;color:#0f172a;border:1px solid #dbe3ee;border-radius:999px}
.hp-btn-outline:hover{border-color:#3f6212;color:#3f6212}

/* 客户评价 */
.hp-rev-grid{max-width:1180px;margin:0 auto;display:grid;grid-template-columns:1fr 1fr;gap:24px}
.hp-rev{padding:34px 32px;border-radius:18px;background:#fff;border:1px solid #e9edf4}
.hp-stars{color:#a16207;font-size:15px;letter-spacing:2px;margin-bottom:14px}
.hp-rev blockquote{margin:0;font-size:15px;line-height:1.85;color:#334155}
.hp-rev-user{display:flex;align-items:center;gap:12px;margin-top:20px}
.hp-avatar{width:42px;height:42px;border-radius:50%;display:grid;place-items:center;font-size:15px;font-weight:700;color:#fff;background:linear-gradient(135deg,color-mix(in srgb,var(--c,#0f766e) 75%,#000),color-mix(in srgb,var(--c,#0f766e) 55%,#000))}
.hp-rev-user b{display:block;font-size:13.5px;color:#0f172a}
.hp-rev-user small{font-size:12px;color:#5f6b7a}

/* CTA */
.hp-cta{max-width:1440px;margin:0 auto;padding:0 32px 96px}
.hp-cta-card{position:relative;overflow:hidden;text-align:center;padding:88px 56px;border-radius:28px;background:#4fd9a2;color:#0f172a;box-shadow:0 30px 80px rgba(79,217,162,.35)}
.hp-cta-glow{position:absolute;inset:0;background:radial-gradient(circle at 20% 20%,rgba(255,255,255,.35),transparent 40%),radial-gradient(circle at 80% 100%,rgba(255,255,255,.22),transparent 45%);pointer-events:none}
.hp-cta-card>*{position:relative}
.hp-cta-card h2{font-size:clamp(24px,3.4vw,36px);margin:0 0 14px;color:#0f172a;font-weight:800;letter-spacing:-1px}
.hp-cta-card p{color:rgba(15,23,42,.72);margin:0 0 30px;font-size:15px}
.hp-btn-white{background:#101828;color:#fff;border:none;font-weight:700;box-shadow:0 8px 24px rgba(16,24,40,.25);border-radius:999px}
.hp-btn-white:hover{transform:translateY(-2px);background:#1b2534}
.hp-cta-card small{display:block;margin-top:20px;color:rgba(15,23,42,.7);font-size:13px}
.hp-cta-card small a{color:#0f172a;font-weight:700}

/* ===== 响应式 ===== */
@media(max-width:1000px){
  .hp-feat-grid,.hp-plan-grid{grid-template-columns:1fr 1fr}
  .hp-rev-grid{grid-template-columns:1fr}
  .hp-win-body{grid-template-columns:1fr}
  .hp-side{display:none}
}
@media(max-width:820px){.public-nav .public-menu{display:none}}
@media(max-width:640px){
  .public-nav{padding:0 16px}
  .public-nav .public-auth button:not(.public-cta):not(.public-login){display:none}
  .public-nav .public-auth .public-login{padding:9px 10px}
  .public-nav .public-auth .public-cta{white-space:nowrap;flex-shrink:0}
  .hp-hero{padding-top:70px}
  .hp-actions{flex-direction:column;align-items:stretch}
  .hp-actions .hp-btn{width:100%}
  .hp-feat-grid,.hp-plan-grid{grid-template-columns:1fr}
  .hp-stat-row{grid-template-columns:1fr}
  .hp-trow{grid-template-columns:1fr 1fr;gap:4px}
  .hp-thead{display:none}
  .hp-section{padding:64px 18px}
  .hp-float{display:none}
}

/* ===== 订单日历：窄屏改为卡片内横向滚动，避免整页横向溢出 ===== */
.cal-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:6px}
.cal-legend{display:flex;gap:18px;margin-top:14px;padding-top:12px;border-top:1px solid var(--line-soft);font-size:12px;color:var(--muted);flex-wrap:wrap;row-gap:8px}
@media(max-width:720px){
  .cal-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch;padding-bottom:4px}
  .cal-grid{min-width:520px}
  .cal-legend{gap:12px}
}

/* ===== 订阅与续费页（fix63 重新排版） ===== */
.sub-hero{display:grid;grid-template-columns:minmax(0,1.35fr) minmax(0,1fr);gap:18px;padding:20px 22px;margin-bottom:18px;border-radius:var(--radius-xl);border:1px solid var(--line);background:var(--paper);box-shadow:var(--shadow)}
.sub-hero-l{display:flex;flex-direction:column;justify-content:center;min-width:0}
.sub-cap{font-size:11.5px;color:var(--light);letter-spacing:.04em}
.sub-plan{font-size:27px;font-weight:800;letter-spacing:-.5px;margin:5px 0 8px;display:flex;align-items:center;gap:9px;flex-wrap:wrap}
.sub-trial{font-size:11.5px;font-weight:700;color:var(--orange-ink);background:var(--orange-bg);border-radius:999px;padding:2px 9px}
.sub-meta{display:flex;gap:8px;align-items:center;flex-wrap:wrap;font-size:12.5px;color:var(--muted)}
.sub-acts{display:flex;gap:9px;align-items:center;flex-wrap:wrap;margin-top:15px}
.sub-acts-tip{font-size:12px;color:var(--light)}
.sub-hero-r{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.sub-metric{padding:13px 14px;border-radius:12px;background:var(--bg);border:1px solid var(--line-soft);min-width:0}
.sub-num{font-size:20px;font-weight:800;letter-spacing:-.3px;margin:3px 0 6px;display:flex;align-items:baseline;gap:3px}
.sub-num b{font-size:23px}
.sub-num span{font-size:12px;font-weight:600;color:var(--light)}
.sub-bar{height:6px;border-radius:999px;background:#e9e7e2;overflow:hidden}
.sub-bar i{display:block;height:100%;border-radius:999px;transition:width .3s}
.sub-sub{font-size:11.5px;color:var(--light);margin-top:7px;line-height:1.5}
.plan-flag{position:absolute;top:-1px;right:14px;font-size:11px;font-weight:700;color:#fff;background:var(--plan);border-radius:0 0 7px 7px;padding:3px 9px}
.plan-flag-hot{background:#7c3aed}
.plan-feats{margin:14px 0 4px;border-top:1px solid var(--line-soft);padding-top:11px}
.plan-card .plan-feats p{margin:7px 0;font-size:12.5px;color:var(--muted)}
.sub-note{margin:12px 0 0;text-align:center;font-size:12px;color:var(--light)}
.sub-chips{display:flex;gap:7px;align-items:center;flex-wrap:wrap}
.sub-chip{font-size:11.5px;font-weight:600;border-radius:999px;padding:2px 10px}
/* fix166b：原来的浅绿渐变 + 深绿字在深色下是「刺眼亮块 + 字看不清」，
   整块改为变量（--sub-ref-bg / --sub-ref-border 见 :root 与 [data-theme="dark"]），
   浅色档取原值，视觉零变化 */
.sub-ref{display:flex;flex-direction:column;gap:11px;padding:16px 18px;margin-top:18px;border-radius:var(--radius-xl);border:1px solid var(--sub-ref-border);background:var(--sub-ref-bg)}
.sub-ref-head{display:flex;align-items:center;gap:9px;flex-wrap:wrap}
.sub-ref-title{font-size:14.5px;font-weight:700;color:var(--green-ink)}
.sub-ref-sub{font-size:12px;color:var(--green-ink)}
.sub-ref-row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.sub-ref-stats{display:flex;gap:16px;flex-wrap:wrap;font-size:12px;color:var(--green-ink)}
@media(max-width:860px){
  .sub-hero{grid-template-columns:1fr;padding:17px 16px}
}
@media(max-width:520px){
  .sub-hero-r{grid-template-columns:1fr}
  .sub-plan{font-size:23px}
}
/* 侧栏底部：账号信息与版本标签同行并排，节约高度 */
.side-foot-row{display:flex;align-items:center;gap:8px;min-width:0}
.side-foot-mail{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.side-foot-row .tag{flex:0 0 auto}
.side-foot-acts{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:10px}
.side-foot-acts .btn{width:100%;margin:0!important}
/* 订阅到期锁定：侧边栏顶部红色警示条 */
.nav-lock-banner{margin:0 0 10px;padding:9px 11px;border-radius:10px;background:var(--red-bg);border:1px solid color-mix(in srgb,var(--red) 34%,transparent)}
.nav-lock-title{font-size:12.5px;font-weight:700;color:var(--red-ink);line-height:1.4}
.nav-lock-sub{margin-top:3px;font-size:11px;color:var(--red-ink);opacity:.85;line-height:1.5}

/* ===== 快捷续期：点击特效（弹跳 / 波纹 / 选中高亮 / 日期闪动 / 结果条）===== */
.qe-bar{display:flex;gap:8px;flex-wrap:wrap}
.qe-btn{position:relative;overflow:hidden;background:#fff;border-color:var(--line);transition:transform .13s ease,background .18s ease,border-color .18s ease,color .18s ease,box-shadow .18s ease}
.qe-btn:hover{background:var(--blue-bg);border-color:var(--blue);color:var(--blue-ink)}
.qe-btn:active{transform:scale(.92)}
.qe-btn.qe-on{background:var(--blue-bg);border-color:var(--blue);color:var(--blue-ink);font-weight:600;box-shadow:0 0 0 2px rgba(55,138,221,.18)}
@keyframes qePop{0%{transform:scale(1)}32%{transform:scale(1.14)}62%{transform:scale(.95)}100%{transform:scale(1)}}
.qe-btn.qe-fire{animation:qePop .38s cubic-bezier(.34,1.56,.64,1)}
@keyframes qeRipple{0%{opacity:.5;transform:scale(.4)}100%{opacity:0;transform:scale(2.4)}}
.qe-ripple{position:absolute;top:50%;left:50%;width:22px;height:22px;margin:-11px 0 0 -11px;border-radius:50%;background:var(--blue);pointer-events:none;animation:qeRipple .5s ease-out forwards}
@keyframes qeFlash{0%{box-shadow:0 0 0 3px rgba(55,138,221,.35)}100%{box-shadow:0 0 0 0 rgba(55,138,221,0)}}
.qe-flash{animation:qeFlash .9s ease-out}
@keyframes qeNoteIn{0%{opacity:0;transform:translateY(-8px) scale(.98)}100%{opacity:1;transform:translateY(0) scale(1)}}
.qe-note{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:10px;padding:9px 12px;border-radius:10px;background:var(--green-bg);border:1px solid var(--green);color:var(--green-ink);font-size:12.5px;animation:qeNoteIn .3s cubic-bezier(.34,1.56,.64,1)}
.qe-note .qe-check{width:17px;height:17px;border-radius:50%;background:var(--green);color:#fff;display:flex;align-items:center;justify-content:center;font-size:11px;flex:0 0 auto}
.qe-note .btn{margin-left:auto;background:#fff}
@keyframes qeNumIn{0%{opacity:.15;transform:translateY(7px)}100%{opacity:1;transform:translateY(0)}}
.qe-num{display:inline-block;animation:qeNumIn .34s ease-out}
@media(prefers-reduced-motion:reduce){.qe-btn.qe-fire,.qe-ripple,.qe-flash,.qe-note,.qe-num{animation:none!important}}

/* ===== 订单列表「客户 / 地址」列：「姓名：/ 手机：/ 地址：」三行 =====
   fix96 改为三行结构（去掉圆形首字头像）；fix98 去掉 📋 图标、「所在地区」改名「地址」；
   fix99 三行的「值」统一字体族 / 字号 / 字重 / 字距（手机号原先单独用等宽字体，是唯一的差异源）；
   fix100 标签改成与「值」同号，整格只靠颜色分主次；
   fix101 整列字号对齐「租期」列（该列内联写死 13px）→ 桌面 16px 改为 13px，行高 1.72 改为 1.7；
   fix102 「新 / 老N」客户标记从「手机」行移到「姓名」行之后；
   fix103 标记改挂到「手机」末位之后并用锚点抬到上一行 → 标记右缘与手机末位对齐（姓名行 / 手机行右缘齐平）；
   fix104 标签「手机号：」去掉「号」字 → 「手机：」，三个标签同为 3 个全角字符、等宽
         → 三行的「值」左边缘严格对齐（CSS 无需改动，仅改了 Orders.js 的标签文案） */
/* 去掉原来的圆形首字头像，改成与客户档案一致的「标签：值」行内结构；
   值用 inline 流（非 flex），地址过长时自然折行，和参考图一致 */
/* min-width 会撑起该列的 min-content，避免窄屏表格把本列压成「竖排」；max-width 防止桌面过宽 */
.oc-cell{min-width:150px;max-width:270px;cursor:pointer;white-space:normal;font-family:inherit;font-size:13px;font-weight:400;letter-spacing:normal}
.oc-line{line-height:1.7;min-width:0}
/* fix100：标签与「值」同字号（inherit → 桌面 16px / 手机 13px），仅用颜色区分主次 */
.oc-lb{color:var(--muted);font-size:inherit;font-family:inherit;font-weight:400;letter-spacing:normal}
/* fix99：姓名 / 手机号 / 地址 三行的「值」统一字体族、字号、字重、字距。
   原先手机号单独用了等宽字体（ui-monospace），是这一列里唯一与其他两行不一致的地方。 */
.oc-val{color:var(--ink);font-family:inherit;font-size:inherit;font-weight:400;letter-spacing:normal;word-break:break-word}
/* 手机号数字等宽对齐：只启用表格数字（tabular-nums），不改变字体族 */
.oc-phone{font-variant-numeric:tabular-nums}
.oc-empty{color:var(--light);font-weight:400}
/* 客户标记：新客「新」（绿）；老客「老N」（N=第几次租，N≥2，灰蓝） */
.oc-new{display:inline-block;margin-left:6px;padding:0 6px;border:1px solid var(--green-ink);border-radius:5px;background:var(--green-bg);color:var(--green-ink);font-size:11px;font-weight:700;line-height:16px;vertical-align:middle}
.oc-old{display:inline-block;margin-left:6px;padding:0 6px;border:1px solid var(--line);border-radius:5px;background:var(--bg);color:var(--muted);font-size:11px;font-weight:700;line-height:16px;vertical-align:middle}
/* fix103：「新 / 老N」放到手机号末位（最后一位数字）的正上方，于是姓名行与手机号行右缘对齐。
   实现：锚点 0 宽 0 高（不占布局、不改变手机号行宽），标记绝对定位 + right:0
   → 标记右缘 = 锚点右缘 = 手机号末位；再用 bottom 抬到上一行。
     锚点 bottom = 手机号行的基线；目标：标记底边落在姓名行基线上方约 3px（视觉居中于姓名行文字）
     → 抬升量 = 1 个行高(=1.7 × 13px = 22.1px) - 3px = 19px。 */
.oc-badge-anchor{position:relative;display:inline-block;width:0;height:0;vertical-align:baseline}
.oc-badge-anchor>.oc-new,
.oc-badge-anchor>.oc-old{margin-left:0;position:absolute;right:0;bottom:calc(100% + 19px);white-space:nowrap}
/* 手机端表格统一 white-space:nowrap，这里必须显式放开换行，否则三行会被拉成一长条 */
.orders-table-wrap td .oc-cell{white-space:normal}
@media(max-width:850px){
  /* 手机：姓名 + 「新/老N」标记要能并排（fix102 标记已移到姓名行），所以列宽下限比桌面大一点。
     font-size 不再需要在这写：.oc-cell 基础值已是 13px，与「租期」列一致（fix101） */
  .orders-table-wrap td .oc-cell{min-width:186px;max-width:210px}
}

/* ===== 财务管理：收支分类卡片 + 资金流水客户区分（fix136） =====
   背景：分类卡原来是「纯文字 + 金额」的白块，一屏 9 张密密麻麻分不出主次；
   资金流水原来只用一组「几乎看不出差别」的极淡底色区分客户。 */

/* --- 收支分类卡片：图标徽章 + 科目名 + 金额 + 笔数/占比 + 占比条 --- */
.cat-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(168px,1fr));gap:12px}
.cat-total{display:flex;flex-direction:column;align-items:flex-end;gap:1px;flex:0 0 auto}
.cat-total span{font-size:11.5px;color:var(--muted)}
.cat-total strong{font-size:18px;font-weight:750;letter-spacing:-.2px;font-variant-numeric:tabular-nums}
.cat-card{position:relative;display:flex;flex-direction:column;gap:9px;overflow:hidden;box-sizing:border-box;
  padding:14px 15px 12px;border:1px solid var(--line);border-radius:14px;background:var(--paper);color:var(--ink);
  font:inherit;text-align:left;cursor:pointer;
  transition:transform .18s cubic-bezier(.2,.8,.2,1),box-shadow .18s,border-color .18s,background .18s}
/* 右上角淡色圆斑：给卡片一点色彩层次，但压得足够淡，不跟金额抢视线 */
.cat-card::after{content:"";position:absolute;z-index:0;right:-30px;top:-34px;width:86px;height:86px;border-radius:50%;
  background:var(--c);opacity:.07;transition:opacity .22s,transform .22s}
.cat-card:hover{transform:translateY(-2px);box-shadow:var(--shadow-hover);border-color:color-mix(in srgb,var(--c) 45%,var(--line))}
.cat-card:hover::after{opacity:.13;transform:scale(1.08)}
.cat-card.active{border-color:var(--c);background:color-mix(in srgb,var(--c) 7%,var(--paper));
  box-shadow:0 0 0 3px color-mix(in srgb,var(--c) 16%,transparent)}
.cat-card.active::after{opacity:.18}
/* 金额为 0 的科目整体压暗，让真有数据的科目先被看到 */
.cat-card.zero{opacity:.5}
.cat-card.zero:hover,.cat-card.zero.active{opacity:1}
.cat-top{display:flex;align-items:center;gap:8px;min-width:0}
.cat-ico{flex:0 0 auto;width:25px;height:25px;border-radius:8px;display:grid;place-items:center;font-size:13px;
  background:color-mix(in srgb,var(--c) 14%,transparent)}
.cat-name{font-size:12px;font-weight:650;color:color-mix(in srgb,var(--c) 55%,var(--ink));
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cat-amt{display:block;font-size:20px;font-weight:750;line-height:1.15;letter-spacing:-.4px;font-variant-numeric:tabular-nums}
.cat-foot{display:flex;align-items:center;justify-content:space-between;gap:8px;font-size:11.5px;color:var(--muted)}
.cat-pct{font-weight:700;color:color-mix(in srgb,var(--c) 50%,var(--ink))}
.cat-check{position:absolute;z-index:1;right:11px;top:11px;width:17px;height:17px;border-radius:50%;display:grid;place-items:center;
  background:var(--c);color:#fff;font-size:11px;font-weight:700;opacity:0;transform:scale(.5);transition:.2s}
.cat-card.active .cat-check{opacity:1;transform:scale(1)}

/* --- 资金流水：同一客户 = 同色圆标 + 左侧色条 + 行底色；点客户名只看该客户 --- */
.fin-records-table{--cc-a:6%;--cc-a-hover:13%}
[data-theme="dark"] .fin-records-table{--cc-a:16%;--cc-a-hover:26%}
.fin-records-table tbody tr{background:color-mix(in srgb,var(--cc,transparent) var(--cc-a),transparent);transition:background .15s}
/* 覆盖全局 tr:hover td 的灰底（它会把行底色整块盖掉） */
.fin-records-table tbody tr:hover td{background:color-mix(in srgb,var(--cc,transparent) var(--cc-a-hover),var(--paper))}
/* 首列左侧色条：表头与单元格都用 4px 透明占位，保证有无客户时左右对齐一致 */
.fin-records-table thead th:first-child{border-left:4px solid transparent}
.fin-records-table tbody td:first-child{border-left:4px solid var(--cc,transparent)}
.fin-cust{display:inline-flex;align-items:center;gap:8px;min-width:0;max-width:200px}
.fin-cust-av{flex:0 0 auto;width:24px;height:24px;border-radius:50%;display:grid;place-items:center;
  font-size:12px;font-weight:700;color:#fff;
  background:linear-gradient(135deg,color-mix(in srgb,var(--c,#475569) 84%,#fff),color-mix(in srgb,var(--c,#475569) 62%,#000))}
.fin-cust-name{min-width:0;max-width:160px;padding:0;border:0;border-bottom:1px dashed transparent;background:transparent;
  color:var(--ink);font:inherit;font-size:inherit;text-align:left;cursor:pointer;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.fin-cust-name:hover{color:var(--c,var(--accent));border-bottom-color:currentColor}
.fin-cust-name.active{color:var(--c,var(--accent));font-weight:700;border-bottom-style:solid}
.fin-cust-chip{display:inline-flex;align-items:center;gap:7px;font-weight:600;
  background:var(--accent-light);border-color:color-mix(in srgb,var(--accent) 32%,transparent);color:var(--accent-ink)}
.fin-cust-dot{width:9px;height:9px;border-radius:50%;background:var(--c,#475569);flex:0 0 auto}

@media(max-width:850px){
  /* 手机端首列是 sticky（冻结列），必须自己带上行底色，否则色条与底色在冻结列上完全看不见 */
  .fin-records-table tbody td:first-child{background:color-mix(in srgb,var(--cc,transparent) var(--cc-a),var(--paper))}
  .fin-cust{max-width:168px}
}
@media(max-width:600px){
  .cat-grid{grid-template-columns:1fr 1fr;gap:10px}
  .cat-card{padding:12px 12px 11px}
  .cat-amt{font-size:17px}
  .cat-name{font-size:11.5px}
}

/* fix166：套餐卡 / 新手引导卡深色适配（深色下 --plan 是亮色档，徽标文字改用深色） */
[data-theme="dark"] .plan-flag{color:#0f151c}
[data-theme="dark"] .plan-card.current{box-shadow:0 0 0 2px var(--plan),0 12px 30px rgba(0,0,0,.4)}

/* ===== fix184：全站问候语横幅 =====
   由 js/greeting.js 插到 #appMain 最顶部（看板页不插，改用看板自己的问候卡），
   所有色值走主题变量，浅色 / 深色与三套强调色主题都自动适配。 */
#greetBar{margin:0 0 18px}
.greet-bar{display:flex;align-items:center;gap:11px;padding:11px 14px;border-radius:14px;
  border:1px solid color-mix(in srgb,var(--accent) 30%,var(--line-soft));
  background:linear-gradient(90deg,var(--accent-light),color-mix(in srgb,var(--paper) 86%,var(--accent-light)));
  animation:greetBarIn .35s ease}
.greet-bar-ico{font-size:18px;line-height:1;flex-shrink:0}
.greet-bar-body{min-width:0;flex:1}
.greet-bar-text{font-size:13.5px;font-weight:600;color:var(--ink);word-break:break-word}
.greet-bar-meta{margin-top:1px;font-size:11.5px;color:var(--muted)}
.greet-bar-x{width:26px;height:26px;flex-shrink:0;border:none;border-radius:8px;background:transparent;
  color:var(--muted);font-size:14px;cursor:pointer;display:grid;place-items:center;transition:.2s}
.greet-bar-x:hover{background:color-mix(in srgb,var(--paper) 70%,var(--accent-light));color:var(--ink)}
@keyframes greetBarIn{from{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:none}}
@media(max-width:850px){
  #greetBar{margin-bottom:14px}
  .greet-bar{padding:10px 12px;gap:9px}
  .greet-bar-ico{font-size:16px}
  .greet-bar-text{font-size:12.5px}
  .greet-bar-meta{font-size:11px}
}
/* 全站问候语的「开始/结束显示时间」两列：datetime-local 在窄屏需要整行，否则字符被裁 */
.greet-time-row{display:grid;grid-template-columns:1fr 1fr;gap:0 16px}
@media(max-width:640px){.greet-time-row{grid-template-columns:1fr}}

/* fix185：超管通知页两个发布板块加底色，便于一眼定位（浅色/深色通过 color-mix 适配） */
.card.notice-tint{background:linear-gradient(180deg,color-mix(in srgb,var(--accent-light) 42%,var(--paper)),var(--paper));
  border:1px solid color-mix(in srgb,var(--accent-light) 65%,var(--line-soft))}
.card.greet-tint{background:linear-gradient(180deg,color-mix(in srgb,#ffd9a8 42%,var(--paper)),var(--paper));
  border:1px solid color-mix(in srgb,#ffd9a8 60%,var(--line-soft))}

/* fix317：型号统计——单价低于持有日均收益的型号整行标红 */
tr.row-warn{background:color-mix(in srgb,var(--red) 12%,var(--paper))!important;
  box-shadow:inset 3px 0 0 var(--red-ink)}
tr.row-warn:hover{background:color-mix(in srgb,var(--red) 18%,var(--paper))!important}
tr.row-warn .info-name{color:var(--red-ink)}
/* fix495：今天到期整行红色加重（hover 不丢色） */
tr[data-due="1"]:hover{background:color-mix(in srgb,var(--red) 18%,var(--paper))!important}
/* fix496：取消订单整行灰色弱化（与 tag-gray 同一套灰，hover 不透出底层色） */
tr[data-cancel="1"]{background:var(--line-soft)!important}
tr[data-cancel="1"]:hover{background:color-mix(in srgb,var(--muted) 12%,var(--paper))!important}
tr[data-cancel="1"] .info-name{color:var(--muted)}

/* fix315：看板顶部消息通知铃铛 + 弹层 */
.notice-badge{position:absolute;top:-6px;right:-6px;min-width:17px;height:17px;border-radius:9px;
  background:#ef4444;color:#fff;font-size:10.5px;font-weight:700;line-height:17px;text-align:center;
  padding:0 4px;box-shadow:0 1px 4px rgba(239,68,68,.4);pointer-events:none}
.notice-pop{position:absolute;top:calc(100% + 8px);right:0;width:min(390px,92vw);z-index:60;
  background:var(--paper);border:1px solid var(--line-soft);border-radius:14px;
  box-shadow:0 12px 40px rgba(0,0,0,.14);padding:13px 14px}
@media (max-width:640px){.notice-pop{position:fixed;top:104px;left:50%;right:auto;transform:translateX(-50%);width:min(390px,94vw)}}

/* fix313：数据看板顶部的「消息通知」卡片 */
.notice-list{display:flex;flex-direction:column;gap:8px}
.notice-row{display:flex;align-items:flex-start;gap:12px;padding:10px 12px;border-radius:10px;background:var(--paper);border:1px solid var(--line-soft)}
.notice-row.unread{background:color-mix(in srgb,var(--accent-light) 55%,var(--paper));border-color:color-mix(in srgb,var(--accent-light) 80%,var(--line-soft))}
.notice-row.unread:hover{filter:brightness(.985)}
.notice-main{flex:1;min-width:0}
.notice-title{font-size:13.5px;font-weight:600;color:var(--ink);line-height:1.4}
.notice-content{font-size:12.5px;color:var(--muted);margin-top:3px;line-height:1.5;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}
.notice-meta{display:flex;flex-direction:column;align-items:flex-end;gap:5px;white-space:nowrap;flex-shrink:0}
.notice-time{font-size:11px;color:var(--light)}
.notice-read{font-size:11px;color:var(--muted)}
.notice-unread{font-size:11px;font-weight:700;color:var(--accent-ink)}
.notice-empty{padding:14px 0;text-align:center;color:var(--light);font-size:13px}

/* fix211：表头/单元格注释浮层 —— 接管原生 title，即时弹出、支持换行，并把「怎么算：」高亮为蓝字。
   深色底不用主题变量：浮层需要跨越任意主题色都保持易读，跟随主题反而会在浅色主题上糊掉。 */
.col-tip-box{position:fixed;left:0;top:0;z-index:130;max-width:330px;padding:9px 12px;border-radius:10px;
  background:rgba(20,24,32,.96);color:#fff;font-size:12.5px;line-height:1.7;letter-spacing:.2px;
  box-shadow:0 10px 30px rgba(15,23,42,.26);pointer-events:none;white-space:normal;
  opacity:0;transform:translateY(-3px);transition:opacity .13s ease,transform .13s ease}
.col-tip-box.show{opacity:1;transform:translateY(0)}
.col-tip-box .ct-plain{font-weight:600}
.col-tip-box .ct-algo{margin-top:2px;color:#cbced6}
.col-tip-box .ct-fx{color:#6fc6ff;font-weight:600}
/* v229：鼠标移到有注释的表头上不再切成「帮助」光标（带问号，用户反馈碍眼），
   保持普通指针即可 —— 提示浮层照常弹出，只是光标不带问号。 */
@media(hover:hover){
  thead th[title],thead th[data-col-tip]{cursor:default}
}

/* fix214：扫码落地页（?scan= 打开，未登录也能看设备有限信息） */
#scanLanding{position:fixed;inset:0;z-index:200;display:none}
#scanLanding .sl-mask{position:absolute;inset:0;background:rgba(15,23,42,.55);backdrop-filter:blur(2px);display:flex;align-items:flex-start;justify-content:center;padding:24px 14px;overflow:auto}
#scanLanding .sl-card{position:relative;width:100%;max-width:440px;background:var(--paper);color:var(--text);border:1px solid var(--line);border-radius:16px;box-shadow:0 24px 60px rgba(15,23,42,.32);margin-top:6vh;overflow:hidden}
#scanLanding .sl-head{display:flex;align-items:center;justify-content:space-between;padding:14px 18px;border-bottom:1px solid var(--line-soft);background:var(--accent-light)}
#scanLanding .sl-brand{font-weight:800;font-size:15px;color:var(--accent-ink)}
#scanLanding .sl-close{background:var(--bg);color:var(--text);border:1px solid var(--line);border-radius:8px;padding:6px 12px;font-size:12.5px;cursor:pointer}
#scanLanding .sl-body{padding:18px}
#scanLanding .sl-loading{padding:40px 0;text-align:center;color:var(--muted)}
#scanLanding .sl-dev{display:flex;align-items:center;gap:12px;margin-bottom:14px}
#scanLanding .sl-dev .sl-ico{width:42px;height:42px;border-radius:12px;background:var(--accent-light);display:flex;align-items:center;justify-content:center;font-size:22px;flex-shrink:0}
#scanLanding .sl-dev .sl-name{font-size:16px;font-weight:800}
#scanLanding .sl-dev .sl-sub{font-size:12px;color:var(--muted);margin-top:2px}
#scanLanding .sl-row{display:flex;justify-content:space-between;font-size:13px;padding:7px 0;border-bottom:1px dashed var(--line-soft)}
#scanLanding .sl-row .k{color:var(--muted)}
#scanLanding .sl-banner{padding:12px 14px;border-radius:12px;font-size:13.5px;font-weight:700;margin:4px 0 12px}
#scanLanding .sl-banner.renting{background:var(--blue-bg);color:var(--blue-ink)}
#scanLanding .sl-banner.idle{background:var(--green-bg);color:var(--green-ink)}
#scanLanding .sl-banner.repair{background:var(--orange-bg);color:var(--orange-ink)}
#scanLanding .sl-banner.sold{background:#f1f1f0;color:var(--muted)}
#scanLanding .sl-orders{margin-top:10px}
#scanLanding .sl-orders .ot{font-size:12.5px;color:var(--muted);margin:8px 0 6px}
#scanLanding .sl-order{border:1px solid var(--line-soft);border-radius:10px;padding:10px 12px;margin-bottom:8px;font-size:12.5px}
#scanLanding .sl-order .oc{font-weight:700;font-size:13.5px;margin-bottom:4px}
#scanLanding .sl-login-tip{margin-top:14px;padding:12px 14px;background:var(--accent-light);border-radius:12px;font-size:12.5px;color:var(--accent-ink);display:flex;align-items:center;justify-content:space-between;gap:10px}
#scanLanding .sl-login-btn{background:var(--accent);color:#fff;border:none;border-radius:8px;padding:7px 14px;font-size:12.5px;font-weight:700;cursor:pointer;flex-shrink:0}
@media(max-width:480px){#scanLanding .sl-mask{padding:0}#scanLanding .sl-card{max-width:none;min-height:100%;margin-top:0;border-radius:0}}

/* ===== 手机端照片上传按钮：解决「裸 file input 在手机上难以点击 / iOS 不弹选择器」 ===== */
/* 关键：可见大按钮是 <label>，内部叠一个铺满的透明 input；点哪都等于点 input，iOS/Android 都能唤起系统选择器 */
.upload-label{font-size:13px;font-weight:600;color:var(--ink);margin-bottom:6px}
.photo-upload-btn{position:relative;display:block;width:100%;min-height:48px;box-sizing:border-box;padding:13px 14px;border:1.5px dashed var(--line);border-radius:10px;background:var(--bg);color:var(--accent-ink);font-size:14px;font-weight:600;text-align:center;cursor:pointer;overflow:hidden;-webkit-tap-highlight-color:transparent}
.photo-upload-btn:active{background:var(--accent-light)}
.photo-upload-btn input[type=file]{position:absolute;inset:0;opacity:0;width:100%;height:100%;font-size:0;cursor:pointer}

/* ===== v266：卡片水印底数字（设备管理「出租中/闲置待租」+ 数据看板「在租设备数」） =====
   右下角超大淡色数字，随卡片主色 12% 透明度，被卡片圆角裁剪；纯装饰不参与交互 */
.card-wm{position:absolute;right:10px;bottom:-16px;z-index:0;font-size:64px;font-weight:800;line-height:1;letter-spacing:-2px;font-variant-numeric:tabular-nums;color:var(--accent,var(--c,#6366f1));opacity:.12;pointer-events:none;user-select:none}
.dashboard-page .card-wm{color:var(--c,var(--accent));font-size:54px;right:8px;bottom:-12px}
/* 保证卡片内容在水印之上 */
.inv-page .inv-acard-desc,.dashboard-page .dash-mini-label,.dashboard-page .dash-mini-value{position:relative;z-index:2}
@media(max-width:850px){.inv-page .card-wm{font-size:52px;right:8px;bottom:-12px}}
@media(max-width:680px){.dashboard-page .card-wm{font-size:44px;bottom:-9px}}

/* ===== v271：统计卡设计系统「全站化」=====
   把只作用于设备管理页（.inv-page）的 inv-acard 卡片体系提升为全站通用：
   配件库存 / 订单管理 / 订单日历 / 客户管理 / 售后工单 一律套用同一套
   结构（inv-acard-top 标签+图标芯片 / inv-acard-value 数值 / inv-acard-desc 描述）
   与同一套样式（字号、悬停上浮+光晕、图标微旋、8 色主题），实现 1:1 一致。
   原 .inv-page 前缀规则保留不动，本块为等价的全局版本。 */
.inv-acard{
  --glass-bg:rgba(255,255,255,.7);
  --glass-border:rgba(226,232,240,.8);
  --card-shadow-md:0 4px 16px rgba(148,163,184,.12);
  --card-shadow-xl:0 20px 60px rgba(148,163,184,.2);
  --blur:blur(20px);
}
[data-theme="dark"] .inv-acard{
  --glass-bg:rgba(30,41,59,.55);
  --glass-border:rgba(148,163,184,.18);
  --card-shadow-md:0 4px 16px rgba(0,0,0,.28);
  --card-shadow-xl:0 20px 60px rgba(0,0,0,.45);
}
.inv-glass-wrap{position:relative;overflow:hidden;border-radius:24px}
/* v268：去掉卡片框外的背景底色（原彩色径向渐变光斑层整个移除，wrap 与页面背景融为一体） */
.inv-glass-wrap::before{content:none}
@keyframes invBgFloat{0%,100%{transform:translate(0,0) scale(1)}33%{transform:translate(30px,-30px) scale(1.05)}66%{transform:translate(-20px,20px) scale(.95)}}
.inv-glass-inner{position:relative;z-index:1;padding:10px 8px}
/* 头部 */
.inv-asset-head{display:flex;align-items:baseline;justify-content:space-between;margin:0 4px 18px}
.inv-grad-title{font-size:24px;font-weight:700;letter-spacing:-.5px;background:linear-gradient(135deg,var(--ink) 0%,var(--muted) 100%);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;color:transparent}
.inv-asset-updated{font-size:13px;color:var(--light);font-variant-numeric:tabular-nums;padding:6px 14px;background:var(--glass-bg);border:1px solid var(--glass-border);border-radius:20px;-webkit-backdrop-filter:var(--blur);backdrop-filter:var(--blur)}
/* 网格 */
.inv-asset-grid{gap:14px;margin:0 0 10px}
/* 玻璃卡片（底色随网站皮肤色 --bg，边框随 --line，深浅主题自动跟随） */
.inv-acard{
  position:relative;overflow:hidden;
  background:var(--bg);border:1px solid var(--line);border-radius:16px;padding:14px;
  -webkit-backdrop-filter:var(--blur);backdrop-filter:var(--blur);
  box-shadow:var(--card-shadow-md);
  transition:all .4s cubic-bezier(.22,1,.36,1);cursor:default;
}
.inv-acard:hover{transform:translateY(-4px) scale(1.01);background:var(--bg);border-color:var(--line);box-shadow:var(--card-shadow-xl),0 0 40px var(--accent-shadow);z-index:5}
/* 悬停旋转流动光晕（radial glow + rotateGlow） */
.inv-acard::before{content:'';position:absolute;top:-50%;left:-50%;width:200%;height:200%;background:radial-gradient(circle,var(--accent-glow) 0%,transparent 70%);opacity:0;transition:opacity .5s ease;pointer-events:none;z-index:0}
.inv-acard:hover::before{opacity:.3;animation:invRotateGlow 3s linear infinite}
@keyframes invRotateGlow{from{transform:rotate(0)}to{transform:rotate(360deg)}}
/* 卡片顶部 */
.inv-acard-top{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px;position:relative;z-index:2}
.inv-acard-label{display:flex;align-items:center;gap:6px;font-size:13px;font-weight:600;color:var(--muted);letter-spacing:.5px}
/* 呼吸状态点 */
.inv-dot{display:inline-block;width:8px;height:8px;border-radius:50%;background:var(--accent);box-shadow:0 0 8px var(--accent-shadow)}
.inv-dot.pulse{animation:invPulse 2s ease-in-out infinite}
@keyframes invPulse{0%,100%{box-shadow:0 0 8px var(--accent-shadow),0 0 0 0 var(--accent-glow)}50%{box-shadow:0 0 12px var(--accent-shadow),0 0 0 8px transparent}}
/* 图标芯片 40px */
.inv-acard-icon{width:36px;height:36px;border-radius:11px;display:grid;place-items:center;background:linear-gradient(135deg,var(--accent-soft),var(--accent-soft));color:var(--accent);border:1px solid var(--accent-border);box-shadow:0 4px 12px var(--accent-shadow),inset 0 1px 0 rgba(255,255,255,.3);transition:all .3s cubic-bezier(.34,1.56,.64,1)}
.inv-acard-icon svg{width:17px;height:17px}
.inv-acard:hover .inv-acard-icon{transform:scale(1.1) rotate(5deg);box-shadow:0 6px 20px var(--accent-shadow),inset 0 1px 0 rgba(255,255,255,.4)}
/* 数值 34px */
.inv-acard-value{position:relative;font-size:30px;font-weight:800;line-height:1;letter-spacing:-1px;font-variant-numeric:tabular-nums;color:var(--ink);z-index:2;margin-bottom:5px;text-shadow:0 2px 4px rgba(0,0,0,.05)}
.inv-acard-unit{font-size:15px;font-weight:600;color:var(--light);margin-left:4px;letter-spacing:0}
.inv-acard-currency{font-size:21px;font-weight:700;margin-right:2px;background:linear-gradient(135deg,var(--accent) 0%,var(--accent) 100%);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;color:transparent}
.inv-acard-value.inv-accent{background:linear-gradient(135deg,var(--accent) 0%,var(--accent-light) 100%);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;color:transparent}
.inv-acard-value.inv-accent .inv-acard-unit,.inv-acard-value.inv-accent .inv-acard-currency{-webkit-text-fill-color:var(--light);background:none;color:var(--light)}
.inv-num-money{background:linear-gradient(135deg,var(--accent) 0%,var(--accent-light) 100%);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;color:transparent}
/* 描述 */
.inv-acard-desc{position:relative;font-size:12px;color:var(--light);z-index:2;line-height:1.6}
.inv-acard-desc b{color:var(--muted);font-weight:600}
/* 进度条 */
.inv-acard-bar{position:relative;margin-top:12px;height:7px;border-radius:99px;background:rgba(226,232,240,.6);overflow:hidden;z-index:2;box-shadow:inset 0 1px 2px rgba(148,163,184,.2)}
[data-theme="dark"] .inv-acard-bar{background:rgba(148,163,184,.18)}
.inv-acard-bar>i{display:block;height:100%;border-radius:99px;background:linear-gradient(90deg,var(--accent),var(--accent-light));box-shadow:0 0 12px var(--accent-shadow);width:0;transition:width 1.2s cubic-bezier(.22,1,.36,1) .2s;position:relative}
.inv-acard-bar>i::after{content:'';position:absolute;top:0;left:0;right:0;height:50%;background:linear-gradient(180deg,rgba(255,255,255,.3),transparent);border-radius:99px 99px 0 0}
/* 环形图 60px */
.inv-card-body{display:flex;align-items:center;gap:14px;position:relative;z-index:2}
.inv-ring{position:relative;width:60px;height:60px;flex:none}
.inv-ring svg{width:60px;height:60px;transform:rotate(-90deg);filter:drop-shadow(0 0 6px var(--accent-shadow))}
.inv-ring-track{stroke:rgba(226,232,240,.8);stroke-width:6}
[data-theme="dark"] .inv-ring-track{stroke:rgba(148,163,184,.2)}
.inv-donut-fg{stroke:var(--accent);stroke-width:6;stroke-linecap:round;stroke-dasharray:195;stroke-dashoffset:195;transition:stroke-dashoffset 1.4s cubic-bezier(.22,1,.36,1) .3s}
.inv-ring-em{position:absolute;inset:0;display:grid;place-items:center;font-size:14px;font-weight:700;font-variant-numeric:tabular-nums;color:var(--ink);text-shadow:0 0 12px var(--accent-shadow)}
.inv-ring-meta{flex:1;min-width:0}
/* 8 种发光色彩主题 */
.inv-g1{--accent:#6366f1;--accent-light:#818cf8;--accent-soft:rgba(99,102,241,.08);--accent-border:rgba(99,102,241,.2);--accent-shadow:rgba(99,102,241,.25);--accent-glow:rgba(99,102,241,.12)}
.inv-g2{--accent:#10b981;--accent-light:#34d399;--accent-soft:rgba(16,185,129,.08);--accent-border:rgba(16,185,129,.2);--accent-shadow:rgba(16,185,129,.25);--accent-glow:rgba(16,185,129,.12)}
.inv-g3{--accent:#f59e0b;--accent-light:#fbbf24;--accent-soft:rgba(245,158,11,.08);--accent-border:rgba(245,158,11,.2);--accent-shadow:rgba(245,158,11,.25);--accent-glow:rgba(245,158,11,.12)}
.inv-g4{--accent:#f43f5e;--accent-light:#fb7185;--accent-soft:rgba(244,63,94,.08);--accent-border:rgba(244,63,94,.2);--accent-shadow:rgba(244,63,94,.25);--accent-glow:rgba(244,63,94,.12)}
.inv-g5{--accent:#8b5cf6;--accent-light:#a78bfa;--accent-soft:rgba(139,92,246,.08);--accent-border:rgba(139,92,246,.2);--accent-shadow:rgba(139,92,246,.25);--accent-glow:rgba(139,92,246,.12)}
.inv-g6{--accent:#3b82f6;--accent-light:#60a5fa;--accent-soft:rgba(59,130,246,.08);--accent-border:rgba(59,130,246,.2);--accent-shadow:rgba(59,130,246,.25);--accent-glow:rgba(59,130,246,.12)}
.inv-g7{--accent:#14b8a6;--accent-light:#2dd4bf;--accent-soft:rgba(20,184,166,.08);--accent-border:rgba(20,184,166,.2);--accent-shadow:rgba(20,184,166,.25);--accent-glow:rgba(20,184,166,.12)}
.inv-g8{--accent:#06b6d4;--accent-light:#22d3ee;--accent-soft:rgba(6,182,212,.08);--accent-border:rgba(6,182,212,.2);--accent-shadow:rgba(6,182,212,.25);--accent-glow:rgba(6,182,212,.12)}
/* 响应式（对照参考稿） */
@media(max-width:1024px){.inv-asset-grid{grid-template-columns:repeat(2,1fr)!important}}
@media(max-width:850px){.inv-acard{padding:12px!important}.inv-acard-value{font-size:26px}}
@media(max-width:640px){.inv-asset-grid{grid-template-columns:repeat(2,1fr)!important;gap:10px!important}.inv-asset-head h2{font-size:20px}}
/* 减少动态效果偏好 */
@media (prefers-reduced-motion:reduce){
  .inv-glass-wrap::before,.inv-acard::before,.inv-dot.pulse{animation:none!important}
}

/* 统计卡：桌面 5/4 列，窄屏逐级降为 2 列、超窄 1 列（覆盖页面内联的 repeat(5/4,1fr)） */
.inv-stat-5{grid-template-columns:repeat(5,1fr)!important}
.inv-stat-4{grid-template-columns:repeat(4,1fr)!important}
@media(max-width:1100px){
  .inv-stat-5{grid-template-columns:repeat(4,1fr)!important}
  .inv-stat-4{grid-template-columns:repeat(3,1fr)!important}
}
@media(max-width:850px){
  .inv-stat-5,.inv-stat-4{grid-template-columns:repeat(2,1fr)!important}
  /* 产品搜索框满宽 */
  #invPicker{width:100%}
  #invPickerInput{width:100%!important}
  .toolbar>input.inv-stk-search{width:100%!important}
  /* 表格卡片头部的操作按钮行换行，避免溢出 */
  .table-wrap .card-header>div:last-child{display:flex!important;flex-wrap:wrap!important;width:100%!important;gap:8px!important}
  .table-wrap .card-header>div:last-child>span:first-child{flex:1 1 100%}
  .table-wrap .card-header>div:last-child .btn{flex:1 1 calc(50% - 8px);min-width:0;justify-content:center}
}
@media(max-width:600px){
  .inv-stat-5,.inv-stat-4{grid-template-columns:repeat(2,1fr)!important}
}
@media(max-width:380px){
  .inv-stat-5,.inv-stat-4{grid-template-columns:1fr!important}
}
/* 设备资产总览卡：手机端一排 2 个（8 卡共 4 排），间距收紧 */
@media(max-width:640px){
  .inv-asset-grid{grid-template-columns:repeat(2,1fr)!important;gap:10px!important}
  .inv-acard{padding:12px 10px!important}
  .inv-acard-value{font-size:24px!important}
  .card-wm{font-size:42px!important;right:6px!important;bottom:-10px!important;opacity:.1}
}

/* ==========================================================================
   fix314：安卓 APP（WebView 外壳）适配
   仅在 App 内生效（js/appmode.js 会给 <html> 加 .app-mode），
   普通浏览器访问完全不受影响。
   ========================================================================== */
@media(max-width:850px){
  /* 原生顶栏已提供标题/返回/刷新，隐藏网页自带顶栏，避免出现「双层头」；
     抽屉菜单保留，由原生底栏的「更多」打开。 */
  html.app-mode .mobile-topbar{display:none!important}
}
html.app-mode .nav-scrim{display:none}
html.app-mode .nav-scrim.show{display:block}
/* 底部手势条避让：内容与浮层都不要压到系统手势区 */
html.app-mode .modal-footer{padding-bottom:calc(14px + env(safe-area-inset-bottom))}
html.app-mode .drawer-body{padding-bottom:calc(32px + env(safe-area-inset-bottom))}
/* App 内禁用长按选中/系统文本菜单，更接近原生手感（输入框除外） */
html.app-mode body{-webkit-user-select:none;user-select:none;-webkit-touch-callout:none}
html.app-mode input,
html.app-mode textarea,
html.app-mode [contenteditable="true"]{-webkit-user-select:text;user-select:text}
/* App 内不再需要「添加到主屏幕」这类浏览器引导 */
html.app-mode .pwa-install-tip{display:none!important}

/* ==========================================================================
   fix315：离线 / 同步状态指示条（js/netstatus.js）
   —— 只在「离线 / 同步失败 / 需重新登录」时出现，正常同步时 display:none，
      不占用任何布局，普通浏览器与 App 内行为一致。
   自成一体的深色胶囊：在浅色与深色主题下都保持同一可读性（白字 on 深底）。
   ========================================================================== */
.net-status-bar{
  position:fixed;left:50%;transform:translateX(-50%);
  bottom:calc(16px + env(safe-area-inset-bottom));
  z-index:5000;display:none;align-items:center;gap:10px;
  /* 必须显式 width:max-content —— 只用 left:50% 时，fixed 元素的可用宽度被
     限成「视口的一半」，文字会被提前截断成「离线中 · 1 处改…」（fix315 踩过）。 */
  width:max-content;max-width:calc(100vw - 24px);
  padding:8px 10px 8px 14px;border-radius:99px;
  font-size:12.5px;font-weight:600;line-height:1.25;
  color:#fff;background:#3f3f46;border:1px solid rgba(255,255,255,.18);
  box-shadow:0 10px 28px rgba(15,23,42,.28);
  animation:nsIn .22s cubic-bezier(.4,0,.2,1);
}
/* App 内底部有原生 56dp 导航条，指示条上移避让 */
html.app-mode .net-status-bar{bottom:calc(70px + env(safe-area-inset-bottom))}
.net-status-bar.offline{background:#3f3f46}
.net-status-bar.error{background:#9a3412}
.net-status-bar.auth{background:#854d0e}
.net-status-bar .ns-ico{flex-shrink:0;font-size:14px;line-height:1}
.net-status-bar .ns-txt{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0;max-width:60vw}
.net-status-bar .ns-act{flex-shrink:0;border:0;border-radius:99px;cursor:pointer;
  padding:5px 13px;font-size:12px;font-weight:700;font-family:inherit;
  background:rgba(255,255,255,.94);color:#1f2937}
.net-status-bar .ns-act:hover{background:#fff}
@keyframes nsIn{from{opacity:0;transform:translateX(-50%) translateY(10px)}to{opacity:1;transform:translateX(-50%) translateY(0)}}
@media(prefers-reduced-motion:reduce){.net-status-bar{animation:none}}

/* ===== fix318 ①：型号统计里型号名可点击下钻到该型号各设备收益明细 ===== */
.inv-model-link{cursor:pointer}
.inv-model-link:hover{color:var(--accent-ink);text-decoration:underline}

/* ===== fix318 ②：设备收益排行 13 列，手机上隐藏次要列，别全靠横滑才能看核心数据 =====
   保留（7 列）：排名 / 设备 / 累计租金收入 / ROI / 回本进度 / 出租率 / 持有日均收益
   隐藏（6 列）：采购成本 / 租赁次数 / 维修成本 / 持有天数 / 年化收益率 / 剩余回本天数
   注意：排序只改行的先后顺序，不改变列的次序，所以这里的 nth-child 序号长期有效。 */
@media(max-width:640px){
  .roi-tbl th:nth-child(3),.roi-tbl td:nth-child(3),   /* 采购成本 */
  .roi-tbl th:nth-child(4),.roi-tbl td:nth-child(4),   /* 租赁次数 */
  .roi-tbl th:nth-child(6),.roi-tbl td:nth-child(6),   /* 维修成本 */
  .roi-tbl th:nth-child(10),.roi-tbl td:nth-child(10), /* 持有天数 */
  .roi-tbl th:nth-child(12),.roi-tbl td:nth-child(12), /* 年化收益率 */
  .roi-tbl th:nth-child(13),.roi-tbl td:nth-child(13){ /* 剩余回本天数 */
    display:none!important;
  }
  /* 藏起 6 列后不再需要 760px 的最小宽度（.table-wrap table 是 0-1-1，这里用 0-2-0 才盖得住），
     留 560px 保证剩下 7 列不被挤成一团 */
  .table-wrap .roi-tbl{min-width:560px!important}
}

/* fix323：发货抽屉配件区手机端默认折叠（桌面 open 展开） */
details.ship-acc-details{margin:0}
details.ship-acc-details>summary{list-style:none;cursor:pointer;user-select:none;display:flex;align-items:center;gap:6px;margin:0}
details.ship-acc-details>summary::-webkit-details-marker{display:none}
details.ship-acc-details>summary::marker{content:''}
details.ship-acc-details[open]>summary{margin-bottom:10px}
/* fix323：型号下钻跳转后在收益排行高亮目标行 */
.roi-hl{box-shadow:inset 3px 0 0 var(--accent);animation:roiHl 1.8s ease;background:var(--accent-light)}
@keyframes roiHl{0%{background:var(--accent-light)}40%{background:color-mix(in srgb,var(--accent) 24%,transparent)}100%{background:var(--accent-light)}}

/* fix328：移动端响应式修复 —— 客户/财务/设备库 顶部统计卡与抽屉指标卡 */
/* 需要 3 列统计卡的页面（如设备库）：桌面 3 列，窄屏降为 2 列、超窄 1 列（覆盖页面内联的 repeat(3,1fr)） */
.stat-grid.sg-3{grid-template-columns:repeat(3,1fr)}
@media(max-width:850px){.stat-grid.sg-3{grid-template-columns:repeat(2,1fr)}}
@media(max-width:480px){.stat-grid.sg-3{grid-template-columns:1fr}}
/* fix457：交易中页五卡一行（代发收入 / 转让利润 / 待发订单 / 转让订单 / 数量记账）
   —— 桌面 5 列一行；中屏 3 列（3+2 两行）、窄屏 2 列、超窄 1 列 */
.stat-grid.sg-5{grid-template-columns:repeat(5,1fr)}
/* fix458：5 列断点从 1400px 压到 1200px —— 原 1400px 一档在 1280~1399px 的
   笔记本/分屏浏览器上会变成 3+2 两排，五卡本意是「一排放五张核心指标」，
   压到 1200px 后主流笔记本（1366/1280 宽）都能保持一行；1200px 以下再降 3 列。 */
@media(max-width:1200px){.stat-grid.sg-5{grid-template-columns:repeat(3,1fr)}}
@media(max-width:850px){.stat-grid.sg-5{grid-template-columns:repeat(2,1fr)}}
@media(max-width:480px){.stat-grid.sg-5{grid-template-columns:1fr}}
/* 五列时卡片更紧凑，数值与描述不换行溢出 */
.stat-grid.sg-5 .stat-card{min-width:0;padding:14px 14px 12px}
.stat-grid.sg-5 .inv-acard-value{font-size:22px}
/* 抽屉内 3 列指标卡：手机端单列，避免数字被压扁 */
.drawer-metrics{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin-bottom:24px}
@media(max-width:640px){.drawer-metrics{grid-template-columns:1fr;gap:10px}.drawer-metrics>div{padding:14px!important}}
/* 抽屉内表格在手机端可横向滚动，避免溢出 */
.drawer-table-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch;margin:0 -2px}
.drawer-table-scroll>table{min-width:520px}

/* v329：订单日历「今日」高亮（方案 A）—— 浅青绿底 + 2px 描边 + 外发光环 + 实心「今天」胶囊徽章 */
.cal-today{position:relative;background:var(--accent-light);border:2px solid var(--accent);box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 16%,transparent)}
.cal-today:hover{box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 22%,transparent),0 6px 16px rgba(15,118,110,.18);transform:translateY(-1px);z-index:1}
.cal-today-badge{display:inline-flex;align-items:center;justify-content:center;font-size:12px;font-weight:800;line-height:1;padding:3px 9px;border-radius:999px;background:var(--accent);color:#fff;box-shadow:0 1px 2px rgba(15,118,110,.28)}
[data-theme="dark"] .cal-today-badge{color:#06281f}

/* ===== fix338 平台共享设备 · 型号小卡片（对齐配件库存卡片风格） ===== */
.th-mgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:12px}
.th-mcard{background:var(--paper);border:1px solid var(--line);border-radius:12px;padding:12px;display:flex;flex-direction:column;gap:8px;transition:box-shadow .15s,border-color .15s}
.th-mcard:hover{box-shadow:0 4px 14px rgba(0,0,0,.08)}
.th-mcard-zero{background:var(--orange-bg);border-color:color-mix(in srgb,var(--orange) 38%,transparent)}
.th-mcard-head{display:flex;align-items:center;justify-content:space-between;gap:8px;min-width:0}
.th-mcard-head strong{font-size:13.5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.th-mcard-badge{flex-shrink:0;padding:1px 10px;border-radius:999px;background:var(--blue-bg);color:var(--blue-ink);font-size:12px;font-weight:700}
.th-mcard-badge.zero{background:var(--red-bg);color:var(--red-ink)}
.th-mcard-rows{display:flex;flex-direction:column;gap:3px}
.th-mrow{display:flex;justify-content:space-between;align-items:center;gap:8px;font-size:12px;color:var(--muted);min-width:0}
.th-mrow-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
/* fix387：自己发布的供应方标记 */
.th-mine{display:inline-block;padding:0 5px;border-radius:5px;background:var(--orange-bg);color:var(--orange,#e07a1f);font-size:10.5px;font-weight:600;line-height:16px;vertical-align:1px}
.th-mcard-meta{font-size:11.5px;color:var(--light);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
[data-theme="dark"] .th-mcard-zero{background:rgba(255,145,0,.08)}
.th-mcard-dist{flex-shrink:0;font-size:11px;padding:1px 8px;border-radius:999px;background:var(--bg);color:var(--muted);font-weight:600;white-space:nowrap}
.th-mcard-dist.near{background:var(--green-bg);color:var(--green-ink)}
/* fix347：租赁广场免责提示（页面最顶部常驻） */
.th-notice{display:flex;flex-direction:column;gap:4px;margin-bottom:14px;padding:11px 14px;border:1px solid color-mix(in srgb,var(--orange) 34%,transparent);border-left:4px solid var(--orange-ink);border-radius:10px;background:var(--orange-bg)}
.th-notice-title{font-size:13px;font-weight:700;color:var(--orange-ink)}
.th-notice-body{font-size:12.5px;line-height:1.65;color:var(--muted)}
/* fix397②：互助接单页顶部双向说明条 */
.th-howto{margin-bottom:12px;padding:11px 14px;border:1px solid var(--line);border-left:4px solid var(--blue);border-radius:10px;background:var(--blue-bg)}
.th-howto-title{font-size:13px;font-weight:700;color:var(--blue-ink);margin-bottom:6px}
.th-howto-row{display:flex;gap:8px;font-size:12.5px;line-height:1.6;color:var(--muted);padding:3px 0;flex-wrap:wrap}
.th-howto-row b{flex-shrink:0;color:var(--ink);font-weight:600}
.th-howto-muted{font-size:12px;color:var(--light);border-top:1px dashed var(--line);margin-top:5px;padding-top:7px}
/* fix378③：租赁广场快捷改价 —— 原地改数字时的短暂高亮，替代整页刷新带来的「变化感知」 */
.th-flash{animation:thFlash 900ms ease-out 1;border-radius:6px}
@keyframes thFlash{0%,35%{background-color:color-mix(in srgb,var(--accent) 26%,transparent)}100%{background-color:transparent}}

/* ===== fix405 租赁广场 · 发布转让订单弹窗放大 + 醒目按钮 ===== */
.th-pub-modal{max-width:660px}
.th-pub-modal .modal-body{padding:26px 28px;font-size:14px}
.th-pub-modal .form-row{grid-template-columns:1fr;gap:7px 14px;margin-bottom:18px}
.th-pub-modal .form-row > label{font-size:14px;font-weight:600;color:var(--ink)}
.th-pub-modal input[type=text],.th-pub-modal input[type=number],.th-pub-modal input:not([type]),.th-pub-modal select,.th-pub-modal textarea{
  width:100%;padding:11px 13px;font-size:14px;border:1px solid var(--line);border-radius:10px;background:var(--paper);color:var(--ink)}
.th-pub-modal .form-note{font-size:12px;color:var(--light);margin-top:-10px;line-height:1.5}
.th-pub-modal .pub-section{margin:6px 0 4px;padding:14px 16px;border:1px solid var(--line);border-radius:12px;background:var(--bg)}
.th-pub-modal .pub-section-title{font-size:13px;font-weight:700;color:var(--blue-ink);margin-bottom:10px;display:flex;align-items:center;gap:6px}
.th-pub-modal .pub-hint{display:inline-block;margin-left:6px;padding:1px 8px;border-radius:999px;background:var(--green-bg);color:var(--green-ink);font-size:11.5px;font-weight:600}
.th-pub-modal .shot-grid{display:flex;gap:8px;flex-wrap:wrap;margin-top:8px}
.th-pub-modal .shot-grid .shot{position:relative}
.th-pub-modal .shot-grid .shot img{width:72px;height:72px;object-fit:cover;border-radius:8px;border:1px solid var(--line)}
.th-pub-modal .shot-grid .shot .x{position:absolute;top:-6px;right:-6px;width:18px;height:18px;border-radius:50%;background:var(--red);color:#fff;font-size:11px;display:grid;place-items:center;cursor:pointer}
.th-pub-cta{display:inline-flex;align-items:center;gap:6px;padding:11px 22px;font-size:15px;font-weight:700;border-radius:10px;box-shadow:0 6px 16px rgba(15,118,110,.28)}
.th-pub-cta:hover{transform:translateY(-1px);box-shadow:0 9px 22px rgba(15,118,110,.36)}
/* 接单后可见的凭证/补充图，统一网格 */
.th-proof{display:flex;gap:8px;flex-wrap:wrap;margin-top:6px}
.th-proof .th-proof-img{width:78px;height:78px;object-fit:cover;border-radius:9px;border:1px solid var(--line);cursor:zoom-in}
.th-proof-kind{font-size:11.5px;color:var(--light);margin-right:4px}
/* 独立图片灯箱（不占用 Modal 层，关闭不会清掉父弹窗） */
.th-lightbox{position:fixed;inset:0;z-index:99999;background:rgba(8,12,20,.84);display:flex;flex-direction:column;align-items:center;justify-content:center;padding:24px;cursor:zoom-out}
.th-lightbox img{max-width:92%;max-height:80%;border-radius:12px;border:1px solid rgba(255,255,255,.18);object-fit:contain;cursor:zoom-in;transition:transform .15s ease;touch-action:none;-webkit-user-select:none;user-select:none;will-change:transform}
.th-lightbox img.zoomed{cursor:grab}
.th-lightbox img.zoomed:active{cursor:grabbing}
.th-lightbox .th-lb-cap{color:#fff;font-size:12.5px;margin-top:12px;opacity:.85;text-align:center;max-width:90%}
.th-lightbox .th-lb-tip{color:#fff;font-size:12px;margin-top:5px;opacity:.55}

/* ===== fix406 互助接单板改为订单管理页同款「表头+行」表格格式 ===== */
.th-board-tbl td{vertical-align:top}
.th-board-tbl .info-row{align-items:flex-start}
.th-board-tbl .info-avatar{flex-shrink:0}
@media(max-width:760px){
  /* 9 列内容比订单表更宽，最小宽度放大一点，首列仍由全局 .table-wrap 规则冻结 */
  .table-wrap .th-board-tbl{min-width:920px!important}
}

/* ===== fix407 交易进度（会员）表格化：与互助接单板同款「表头 + 行」 ===== */
.th-hall-tbl .th-proof{gap:6px;margin-top:2px}
.th-hall-tbl .th-proof-img{width:56px;height:56px;border-radius:7px}
.th-hall-tbl .th-proof-kind{display:block;margin-bottom:2px}
.th-hall-tbl td{min-width:0}
/* ===== fix456② 手机端把 9 列表格改成「一单一张卡」 =====
   原先手机上靠 min-width:1000px 横向硬滑，9 列挤在一屏里既看不清也点不准。
   现在用 td 上的 data-label 当字段名，把每行拆成上下堆叠的字段行，
   桌面端（>760px）完全不受影响，仍是原来的表格。 */
@media(max-width:760px){
  .table-wrap .th-hall-tbl{min-width:0!important}
  .th-hall-tbl thead{display:none}
  .th-hall-tbl tbody tr{display:block;border:1px solid var(--line);border-radius:12px;background:var(--paper);
    margin:0 0 12px;padding:10px 12px;box-shadow:0 1px 3px rgba(0,0,0,.04)}
  .th-hall-tbl tbody tr[style*="display:none"]{display:none!important}
  .th-hall-tbl td{display:flex;align-items:flex-start;gap:10px;width:100%;min-width:0!important;
    padding:7px 0!important;border:none;border-bottom:1px dashed var(--line-soft);white-space:normal!important}
  .th-hall-tbl td:last-child{border-bottom:none;padding-bottom:0!important}
  .th-hall-tbl td::before{content:attr(data-label);flex:0 0 76px;width:76px;font-size:11.5px;color:var(--muted);
    line-height:1.5;padding-top:1px}
  .th-hall-tbl td > *{min-width:0}
  /* 操作列：字段名收起，按钮横向排列不换行堆叠 */
  .th-hall-tbl td[data-label="操作"]{display:block}
  .th-hall-tbl td[data-label="操作"]::before{display:block;margin-bottom:6px}
  .th-hall-tbl td[data-label="操作"] > div{flex-direction:row!important;flex-wrap:wrap;align-items:center}
  /* 空态 / 关键字空态行：跨 9 列的提示，手机上按普通文字块显示 */
  .th-hall-tbl td[colspan]{display:block;border-bottom:none;padding:14px 0!important;text-align:center}
  .th-hall-tbl td[colspan]::before{display:none}
  /* 订单号列首行加粗，作为卡片的「标题」 */
  .th-hall-tbl td[data-label="订单 / 对方"]{padding-top:0!important}
}
@media(max-width:760px){
  /* 交易进度 9 列内容比订单表更宽，横向滑动 + 首列冻结（沿用全局 .table-wrap 规则） */
  .table-wrap .th-hall-tbl{min-width:1000px!important}
}

/* ===== fix408 租赁广场 · 新建转让订单（复用新建租赁订单弹窗 + 转让发布区块） ===== */
.th-new-tr-cta{display:inline-flex;align-items:center;gap:5px;padding:11px 16px;font-size:15px;font-weight:700;
  border-radius:10px;border:1px solid var(--accent);color:var(--accent-ink);background:var(--accent-light);
  transition:transform .12s,box-shadow .12s}
.th-new-tr-cta:hover{transform:translateY(-1px);box-shadow:0 6px 16px rgba(15,118,110,.2)}
.th-tr-modal{max-width:720px}
.th-tr-modal .order-section.sec-orange{border-color:var(--orange)}
.th-tr-modal .order-section-title{color:var(--orange-ink)}
.th-tr-modal .pub-hint{display:inline-block;margin-left:6px;padding:1px 8px;border-radius:20px;
  background:var(--accent-light);color:var(--accent-ink);font-size:11px;font-weight:600}
.th-tr-modal .shot-grid{display:flex;gap:8px;flex-wrap:wrap;margin-top:8px}
.th-tr-modal .shot-grid > div{position:relative}
.th-tr-modal .shot-x{position:absolute;top:-6px;right:-6px;width:20px;height:20px;border-radius:50%;
  border:1px solid var(--line);background:var(--paper);color:var(--red-ink);font-size:13px;line-height:1;
  display:flex;align-items:center;justify-content:center;cursor:pointer;padding:0}

/* ===== fix410 转让发布：总价口径 + 快捷定价 + 凭证合并上传 ===== */
.shot-grid{width:100%}
.shot-grid .shot-x{position:absolute;top:-6px;right:-6px;width:20px;height:20px;border-radius:50%;
  border:1px solid var(--line);background:var(--paper);color:var(--red-ink);font-size:13px;line-height:1;
  display:flex;align-items:center;justify-content:center;cursor:pointer;padding:0}
.th-pub-modal .shot-grid > div,.th-tr-modal .shot-grid > div{position:relative}
.th-tr-modal .sec-orange{border-color:var(--orange)}

/* ===== fix412 板头两个按钮缩小（原 11px/15px 过大，抢了表格的视觉重心）===== */
.th-pub-cta{padding:7px 14px;font-size:13px;border-radius:8px;box-shadow:0 3px 9px rgba(15,118,110,.22)}
.th-pub-cta:hover{transform:translateY(-1px);box-shadow:0 5px 14px rgba(15,118,110,.3)}
.th-new-tr-cta{padding:7px 12px;font-size:13px;border-radius:8px}
.th-new-tr-cta:hover{transform:translateY(-1px);box-shadow:0 3px 9px rgba(15,118,110,.18)}
@media(max-width:760px){
  .th-pub-cta,.th-new-tr-cta{padding:8px 13px;font-size:13.5px}
}

/* ===== fix416 确认发货弹窗：加宽，避免序列号行被挤成竖排 ===== */
.modal .th-ship-modal-body{min-width:0}
.modal:has(.th-ship-modal-body){max-width:720px}
.th-ship-modal-body .form-row>div{min-width:0}
.th-ship-modal-body .form-row label>span{white-space:normal}
@media(max-width:760px){.modal:has(.th-ship-modal-body){max-width:100%}}

/* ===== fix421 订单板筛选条 ===== */
.pill-group + div select{font-size:12.5px}
.th-hall-tbl .th-proof-img{width:64px;height:64px}

/* ===== 交易广场（设备买卖）fix447 =====
   求购卡（.mk-card-want）为本次重点设计：搜索图标章 + 预算/台数高亮 + 信息栅格
   （地区 / 收货地 / 联系方式）+ 求购方署名。全部走 CSS 变量，兼容各主题（含 dark）。 */
.trade-market .page-head .muted{display:block;margin-top:6px}
.tm-tabs{display:flex;gap:4px;margin-bottom:18px;border-bottom:1px solid var(--line)}
.tm-tab{padding:9px 15px;border:none;background:transparent;font-size:13.5px;font-weight:600;color:var(--muted);cursor:pointer;border-radius:var(--radius-sm) var(--radius-sm) 0 0;position:relative;transition:color .15s,background .15s}
.tm-tab:hover{color:var(--ink);background:var(--line-soft)}
.tm-tab.active{color:var(--accent)}
.tm-tab.active::after{content:'';position:absolute;left:12px;right:12px;bottom:-1px;height:2px;background:var(--accent);border-radius:2px 2px 0 0}
.tm-board-head{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-bottom:14px;flex-wrap:wrap}
.tm-stats{display:flex;gap:8px;flex-wrap:wrap}
.tm-stats span{padding:5px 13px;border-radius:999px;background:var(--paper);border:1px solid var(--line);font-size:12.5px;font-weight:600;color:var(--light)}
.tm-actions{display:flex;gap:8px;flex-wrap:wrap}
.tm-filter{display:flex;gap:8px;flex-wrap:wrap;align-items:center;margin-bottom:18px}
.tm-filter select,.tm-filter input{border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--paper);color:var(--ink);font-size:13px;padding:6px 9px}
.tm-filter input:focus,.tm-filter select:focus{outline:none;border-color:var(--accent)}
.mk-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(276px,1fr));gap:14px}
.mk-card{background:var(--paper);border:1px solid var(--line);border-radius:var(--radius-lg);overflow:hidden;box-shadow:var(--shadow);transition:transform .18s ease,box-shadow .18s ease,border-color .18s ease;display:flex;flex-direction:column}
.mk-card:hover{transform:translateY(-2px);box-shadow:var(--shadow-hover)}
.mk-img{height:148px;background:var(--line-soft);display:flex;align-items:center;justify-content:center;overflow:hidden;flex-shrink:0}
.mk-img img{width:100%;height:100%;object-fit:cover}
.mk-img-ph{font-size:32px;opacity:.35}
.mk-body{padding:14px 16px 15px;display:flex;flex-direction:column;gap:8px;flex:1;min-width:0}
.mk-title{font-size:14.5px;font-weight:700;color:var(--ink);display:flex;align-items:center;gap:7px;flex-wrap:wrap;line-height:1.35}
.mk-title .tag{font-size:11px;font-weight:600}
.mk-price{font-size:19px;font-weight:800;color:var(--red);letter-spacing:-.3px;line-height:1.2}
.mk-price .muted{font-size:12px;font-weight:500;color:var(--muted)}
.mk-qty{display:inline-block;margin-left:7px;font-size:11.5px;font-weight:700;color:var(--blue);background:var(--blue-bg);padding:2px 9px;border-radius:999px;vertical-align:2px;letter-spacing:0}
.mk-meta{font-size:12.5px;color:var(--muted);line-height:1.5}
.mk-note{font-size:12.5px;color:var(--light);background:var(--line-soft);border-radius:var(--radius-sm);padding:8px 10px;line-height:1.55;word-break:break-all}
.mk-owner{font-size:12px;color:var(--muted);display:flex;align-items:center;gap:7px;min-width:0}
.mk-owner::before{content:'';width:15px;height:15px;border-radius:50%;background:var(--accent-light);flex-shrink:0}
.mk-actions{display:flex;gap:8px;align-items:center;margin-top:auto;padding-top:6px;flex-wrap:wrap}

/* ---- 求购卡（重点设计）---- */
.mk-card-want{border-color:var(--accent-light);background:linear-gradient(180deg,var(--card-grad-accent) 0,var(--paper) 88px)}
.mk-card-want:hover{border-color:var(--accent)}
.mk-card-want .mk-body{gap:9px}
.mk-want-head{display:flex;align-items:center;gap:9px;min-width:0}
.mk-want-icon{width:30px;height:30px;border-radius:9px;background:var(--accent-light);color:var(--accent);display:flex;align-items:center;justify-content:center;font-size:14px;flex-shrink:0}
.mk-want-head .mk-title{flex:1;min-width:0}
.mk-info{display:grid;grid-template-columns:1fr 1fr;gap:7px 12px}
.mk-info-item{display:flex;align-items:baseline;gap:6px;font-size:12.5px;min-width:0;line-height:1.45}
.mk-info-item b{font-weight:600;color:var(--muted);flex-shrink:0;font-size:12px}
.mk-info-item span{color:var(--ink);font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.mk-info-full{grid-column:1 / -1}
.mk-info-full span{white-space:normal}

/* ---- 交易记录卡 ---- */
.tm-pills{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:14px}
.tm-pills .pill{cursor:pointer;border:1px solid var(--line);background:var(--paper);color:var(--light)}
.tm-pills .pill-blue{background:var(--blue-bg);color:var(--blue);border-color:transparent}
.mk-order-head{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.mk-order-head .mk-title{flex:1;min-width:110px}
.mk-order-meta{font-size:12.5px;color:var(--muted);margin:9px 0 12px;line-height:1.5}
.mk-order-actions{display:flex;gap:8px;flex-wrap:wrap;align-items:center}
#mk-focus-order{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-light)}

/* ---- 管理表格（我的出售 / 我的求购）---- */
.mk-manage-tbl td{vertical-align:middle}
.mk-manage-tbl .mk-cell-strong{font-weight:600;color:var(--ink)}
.mk-manage-tbl .mk-cell-sub{display:block;font-size:12px;color:var(--muted);margin-top:2px}
.mk-manage-tbl .mk-act{display:flex;gap:6px;flex-wrap:wrap}

@media(max-width:560px){
  .mk-grid{grid-template-columns:1fr}
  .mk-info{grid-template-columns:1fr}
  .tm-board-head,.tm-actions{width:100%}
  .tm-actions .btn{flex:1}
}

/* ========== 交易广场 fix449：出售台数 / 撮合提醒 / 联系方式隐私 ========== */
.mk-total{font-size:12.5px;color:var(--muted);margin-top:3px}
.mk-total b{color:var(--accent);font-size:13.5px}

/* 多选设备列表 */
.mk-dev-list{display:flex;flex-direction:column;gap:6px;max-height:220px;overflow:auto;border:1px solid var(--line);border-radius:10px;padding:8px;background:var(--paper)}
.mk-dev-pick{display:flex;align-items:center;gap:8px;padding:7px 8px;border-radius:8px;cursor:pointer;font-size:13px;border:1px solid transparent}
.mk-dev-pick:hover{background:var(--hover,rgba(127,127,127,.08))}
.mk-dev-pick input{width:16px;height:16px;flex:none;accent-color:var(--accent)}
.mk-dev-pick-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:600}
.mk-dev-pick-price{margin-left:auto;color:var(--accent);font-weight:700;white-space:nowrap}

/* 撮合提醒条 */
.mk-match-bar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:10px 12px;margin-bottom:10px;border-radius:10px;font-size:13px;
  border:1px solid var(--accent-light);background:var(--blue-bg,var(--hover,rgba(127,127,127,.06)));color:var(--text)}
.mk-match-bar span{flex:1;min-width:0}
.mk-match-bar .btn{flex:none;background:var(--paper);color:var(--accent);border-color:var(--accent);font-weight:600}
.mk-match-bar .btn:hover{background:var(--accent);color:#fff}

/* 联系方式隐私 */
.mk-secret{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;letter-spacing:.5px}
.mk-secret-btn{margin-left:8px;padding:2px 9px;font-size:11.5px;border-radius:999px;border:1px solid var(--accent);
  background:var(--paper);color:var(--accent);cursor:pointer}
.mk-secret-btn:hover{background:var(--accent);color:var(--paper)}

@media(max-width:560px){
  .mk-match-bar .btn{width:100%}
  .mk-dev-pick-price{font-size:12px}
}
/* ============================================================
   fix464 交易大厅改版：成色/运费标签 · 报价撮合 · 新订单流 · 售后凭证
   ============================================================ */

/* ---- 通用标签：一口价 / 可议价 / 成色 / 运费规则 ---- */
.tag-purple{background:var(--card-grad-purple,#f5f3ff);color:var(--purple,#7c3aed)}

.mk-fix,.mk-neg{display:inline-block;padding:1px 8px;border-radius:999px;font-size:11.5px;font-weight:600;line-height:18px;vertical-align:middle}
.mk-fix{background:var(--green-bg);color:var(--green-ink)}
.mk-neg{background:var(--orange-bg);color:var(--orange-ink)}

.mk-cond{display:inline-block;padding:1px 8px;border-radius:999px;font-size:11.5px;font-weight:600;line-height:18px;
  background:var(--card-grad-blue,#eff6ff);color:var(--blue-ink,var(--blue));vertical-align:middle}
.mk-cond-none{background:var(--line-soft);color:var(--muted);font-weight:500}

.mk-ship{display:inline-block;padding:1px 8px;border-radius:999px;font-size:11.5px;font-weight:600;line-height:18px;
  background:var(--line-soft);color:var(--slate);vertical-align:middle}
.mk-ship-free{background:var(--green-bg);color:var(--green-ink)}
.mk-ship-self{background:var(--blue-bg);color:var(--blue-ink,var(--blue))}

/* ---- 筛选栏 checkbox（成色/包邮/自提）---- */
.mk-chk{display:inline-flex;align-items:center;gap:5px;padding:5px 11px;border:1px solid var(--line);border-radius:8px;
  background:var(--paper);font-size:12.5px;cursor:pointer;user-select:none;white-space:nowrap;transition:all .15s}
.mk-chk:hover{border-color:var(--accent);color:var(--accent-ink)}
.mk-chk input{width:14px;height:14px;accent-color:var(--accent);cursor:pointer}
.mk-chk:has(input:checked){border-color:var(--accent);background:var(--card-grad-accent,#f0fdf9);color:var(--accent-ink);font-weight:600}

/* ---- 实拍图 / 凭证照片网格 ---- */
.mk-photo-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(76px,1fr));gap:8px;margin-top:8px}
.mk-photo-grid:empty{display:none}
.mk-photo-cell{position:relative;aspect-ratio:1;border-radius:10px;overflow:hidden;border:1px solid var(--line);background:var(--line-soft)}
.mk-photo-cell img{width:100%;height:100%;object-fit:cover;display:block}
.mk-photo-cell .mk-img-ph{width:100%;height:100%;display:flex;align-items:center;justify-content:center;font-size:20px}
.mk-photo-del{position:absolute;top:3px;right:3px;width:20px;height:20px;border:none;border-radius:50%;
  background:rgba(15,23,42,.62);color:#fff;font-size:13px;line-height:1;cursor:pointer;display:flex;align-items:center;justify-content:center}
.mk-photo-del:hover{background:var(--red)}

/* 挂牌卡实拍图张数角标 */
.mk-img-count{position:absolute;right:6px;bottom:6px;padding:1px 7px;border-radius:999px;font-size:10.5px;font-weight:600;
  background:rgba(15,23,42,.6);color:#fff}
.mk-dev-cb{width:16px;height:16px;flex:none;accent-color:var(--accent);cursor:pointer}

/* ---- 下单确认摘要 ---- */
.mk-buy-summary{padding:12px;border:1px solid var(--line);border-radius:var(--radius-lg);background:var(--slate-bg,#f8fafc);margin-bottom:12px}
.mk-buy-img{width:100%;height:150px;border-radius:10px;overflow:hidden;margin-bottom:10px;background:var(--line-soft)}
.mk-buy-img img{width:100%;height:100%;object-fit:cover;display:block}

/* ---- 「收到 N 条报价」提示条 ---- */
.mk-quote-hint{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:10px;padding:8px 11px;border-radius:10px;
  font-size:12.5px;background:var(--card-grad-purple,#f5f3ff);border:1px solid rgba(124,58,237,.22);color:var(--purple,#7c3aed)}
.mk-quote-hint b{font-size:13.5px}

/* ---- 报价列表（求购方查看收到的报价）---- */
.mk-quote-item{padding:12px;border:1px solid var(--line);border-radius:var(--radius-lg);background:var(--paper);margin-bottom:10px}
.mk-quote-item:last-child{margin-bottom:0}
.mk-quote-top{display:flex;align-items:center;gap:9px;flex-wrap:wrap}
.mk-quote-seller{font-weight:700;font-size:13.5px;color:var(--ink)}
.mk-quote-price{margin-left:auto;font-weight:700;font-size:14.5px;color:var(--accent-ink)}
.mk-quote-price .muted{font-size:11.5px;font-weight:400;margin-left:2px}
.mk-quote-meta{margin-top:6px;font-size:12px;color:var(--light);line-height:1.6}
.mk-quote-note{margin-top:6px;padding:7px 9px;border-radius:8px;background:var(--line-soft);font-size:12.5px;color:var(--muted);line-height:1.6}
.mk-quote-act{display:flex;align-items:center;gap:8px;margin-top:9px;flex-wrap:wrap}

/* ---- 「我的出售」内的分区（我发出的报价）---- */
.mk-sect{margin-top:20px}
.mk-sect-head{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap;margin-bottom:10px;padding-bottom:8px;border-bottom:1px solid var(--line-soft)}
.mk-sect-head h3{margin:0;font-size:14.5px;font-weight:700;color:var(--ink)}
.mk-sect-head .muted{font-size:12px}

/* ---- 交易记录大厅 ---- */
.tm-orders{display:flex;flex-direction:column;gap:10px}
.mk-flow{padding:9px 13px;border-radius:10px;font-size:12.5px;line-height:1.6;color:var(--slate);
  background:var(--card-grad-slate,#f8fafc);border:1px dashed var(--line)}
.mk-order{padding:14px 15px}
.mk-order-head{display:flex;align-items:center;gap:9px;flex-wrap:wrap}
.mk-order-head .mk-title{flex:1;min-width:120px}
.mk-order-head .mk-price{margin-left:auto;font-weight:700;font-size:15px;color:var(--accent-ink)}
.mk-order-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:11px;
  padding-top:11px;border-top:1px solid var(--line-soft)}
.mk-order-meta{margin-top:7px;font-size:12px;color:var(--light);line-height:1.7}
.mk-ship-row{margin-top:8px;padding:7px 11px;border-radius:9px;font-size:12.5px;
  background:var(--card-grad-blue,#eff6ff);color:var(--blue-ink,var(--blue));border:1px solid rgba(29,78,216,.16)}
.mk-ship-row b{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;letter-spacing:.4px}
.mk-as-row{margin-top:8px;padding:7px 11px;border-radius:9px;font-size:12.5px;
  background:var(--orange-bg);color:var(--orange-ink);border:1px solid rgba(180,83,9,.18)}

/* 通知跳转定位高亮 */
#mk-focus-order,#mk-focus-want{animation:mkFocusFlash 2.2s ease-out 1}
@keyframes mkFocusFlash{0%,32%{box-shadow:0 0 0 3px rgba(15,118,110,.26);border-color:var(--accent)}100%{box-shadow:none}}

/* ---- 通知弹窗 ---- */
.mk-notif-modal{border-top:3px solid var(--accent)}
.mk-notif-modal .modal-header h3{color:var(--accent-ink)}
.mk-notif-body{font-size:13.5px;line-height:1.75;color:var(--ink);padding:11px 13px;border-radius:10px;
  background:var(--card-grad-accent,#f0fdf9);border:1px solid var(--accent-light)}

@media(max-width:560px){
  .mk-order{padding:12px}
  .mk-order-head .mk-price{margin-left:0}
  .mk-quote-price{margin-left:0}
  .mk-flow{font-size:11.5px;padding:8px 10px}
  .mk-buy-img{height:120px}
}/* ============================================================
   fix466 我的求购 · 公开分享链接
   ============================================================ */
.mk-share-bar{display:flex;align-items:center;gap:14px;flex-wrap:wrap;margin-bottom:14px;padding:13px 15px;
  border:1px solid var(--line);border-radius:var(--radius-lg);background:var(--paper)}
.mk-share-bar.on{border-color:rgba(29,78,216,.28);background:var(--card-grad-blue,#eff6ff)}
.mk-share-txt{flex:1;min-width:210px}
.mk-share-txt b{display:block;font-size:13.5px;font-weight:700;color:var(--ink)}
.mk-share-txt span{display:block;margin-top:3px;font-size:12px;color:var(--light);line-height:1.65}
.mk-share-url{width:100%;margin:7px 0 1px;padding:7px 10px;border:1px solid var(--line);border-radius:8px;
  background:var(--paper);font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px;color:var(--slate)}
.mk-share-ops{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
/* fix467：自定义分享文案编辑行 */
.mk-share-cfg{display:flex;gap:8px;align-items:center;margin:7px 0 2px}
.mk-share-title{flex:1;min-width:0;padding:7px 10px;border:1px solid var(--line);border-radius:8px;
  font-size:12.5px;font-family:inherit;background:#fff;color:var(--ink)}
.mk-share-title:focus{outline:none;border-color:var(--accent)}

/* fix468/471：求购「加价 / 减价项」编辑器（纯自定义：名称 + 金额，行可删） */
.form-sect{margin:10px 0 2px}
.form-sect-title{font-size:13px;font-weight:600;margin:0 0 7px;display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.cond-extra-row{display:flex;align-items:center;gap:8px;margin:6px 0}
.cond-extra-row .ce-label{flex:1;min-width:0;padding:6px 9px;border:1px solid var(--line);border-radius:7px;font-size:12.5px;font-family:inherit;background:var(--paper);color:var(--ink)}
.cond-extra-row .ce-label::placeholder{color:#9aa1ab}
.cond-extra-row .ce-label:focus{outline:none;border-color:var(--accent)}
.cond-extra-row .ce-sign{color:#8a8f98;font-size:12.5px;flex:0 0 auto}
.cond-extra-row .ce-delta{width:60px;text-align:center;padding:6px 4px;border:1px solid var(--line);border-radius:7px;font-size:12.5px;font-family:inherit;background:var(--paper);color:var(--ink)}
.cond-extra-row .ce-delta:focus{outline:none;border-color:var(--accent)}
.cond-extra-row .ce-del{border:none;background:#fbe9e9;color:#c0392b;border-radius:7px;width:26px;height:26px;line-height:1;cursor:pointer;font-size:15px;flex:0 0 auto}
.cond-extra-row .ce-del:hover{background:#f6d6d6}
/* fix471：修正 fix468 遗留的布局反转 —— .th-pub-modal input[type=number]{width:100%}
   特异度 (0,2,1) 高于 .cond-extra-row .ce-delta (0,2,0)，导致金额框撑满整行、
   名称框被 min-width:auto 挤到 0。这里用 (0,3,0) 反压，并给金额框固定小宽度。 */
.th-pub-modal .cond-extra-row .ce-label{flex:1 1 auto;width:auto;min-width:0}
.th-pub-modal .cond-extra-row .ce-delta{flex:0 0 auto;width:64px;min-width:0;padding:6px 4px}
.mk-extras{margin-top:9px;display:flex;flex-wrap:wrap;gap:6px;align-items:center}
.mk-extras .ce-chip{font-size:11.5px;padding:2px 9px;border-radius:999px;font-weight:600;white-space:nowrap}
.mk-extras .ce-chip.up{background:#e1f5ee;color:#0f6e56}
.mk-extras .ce-chip.down{background:#faeeda;color:#854f0b}
.mk-condref{margin:4px 0 10px;padding:10px 12px;border:1px dashed var(--line);border-radius:10px;background:#fafbfc}
.mk-condref .mk-condref-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap;font-size:13px;margin-top:6px}
.mk-condref .mk-condref-row b{color:var(--ink)}
/* fix470：求购到期倒计时提示 */
.mk-dl{font-size:12px;color:var(--muted,#888);margin-left:4px}
.mk-dl-orange{font-size:12px;color:#e8860c;margin-left:4px;font-weight:600}
.mk-dl-red{font-size:12px;color:#e23d3d;margin-left:4px;font-weight:600}

@media(max-width:560px){
  .mk-share-bar{gap:10px;padding:12px}
  .mk-share-ops{width:100%}
  .mk-share-ops .btn{flex:1;min-width:0}
  .mk-share-cfg{flex-wrap:wrap}
  .mk-share-cfg .btn{flex:0 0 auto}
}
/* fix483③：搜索命中片段高亮 —— SearchRegistry.highlight() 输出的 <mark> 用这个类。
   用 background 而非 color，只做底色不改变文字颜色，深浅色主题下对比度都不受影响。 */
.ku-hit{background:rgba(250,204,21,.45);color:inherit;border-radius:3px;padding:0 1px}
[data-theme="dark"] .ku-hit{background:rgba(250,204,21,.32);color:inherit}
mark.ku-hit{font-weight:600}
/* fix483②：扫码枪扫完序列号后，给搜索框一个短暂的高亮反馈 —— 让用户确认「扫到了、已触发搜索」 */
.ku-scan-flash{animation:kuScanFlash .6s ease}
@keyframes kuScanFlash{
  0%{box-shadow:0 0 0 0 rgba(16,122,87,.5)}
  100%{box-shadow:0 0 0 10px rgba(16,122,87,0)}
}
@media (prefers-reduced-motion:reduce){
  .ku-scan-flash{animation:none}
}
/* ===== fix385：顶栏「消息通知」铃铛 + 双分类面板 ===== */
/* 入口从导航栏「消息中心」迁出：桌面固定右上角圆形铃铛，移动端固定顶栏 */
.ku-bell{position:relative;width:38px;height:38px;border-radius:50%;background:#fff;border:1px solid var(--line);color:var(--ink);cursor:pointer;display:flex;align-items:center;justify-content:center;padding:0;box-shadow:0 2px 10px rgba(15,23,42,.08);transition:.18s;flex-shrink:0}
[data-theme="dark"] .ku-bell{background:#1a222c}
.ku-bell:hover{border-color:var(--accent);color:var(--accent-ink);transform:translateY(-1px)}
/* fix479：全局只有一个铃铛（渲染在 page-head 动作区首位，即「新建订单」左侧）；
   无动作容器的页面退回 fixed 右上角。原来 .ku-bell-d/.ku-bell-m 两个入口已删除。 */
/* fix479：为「头部本身没有按钮容器」的页面（如设置中心）新建的右对齐容器 */
.ku-bell-host{display:flex;align-items:center;gap:8px;margin-left:auto}
/* fix479②：页内入口改为带文字的胶囊按钮（🔔 消息 · N 条未读），未读数直接写进文案不再叠红点 */
.ku-bell-inpage{width:auto;height:38px;border-radius:999px;padding:0 13px;gap:6px;white-space:nowrap}
.ku-bell-inpage .ku-bell-txt{font-size:13.5px;font-weight:600;letter-spacing:.2px}
.ku-bell-fixed{position:fixed;top:13px;right:16px;z-index:90}
/* fix480②：久未读（最旧一条未读超过 24h）→ 橙色底，引导优先处理；常规未读维持默认白底 */
.ku-bell.is-stale{background:var(--orange-bg);border-color:var(--orange);color:var(--orange-ink)}
[data-theme="dark"] .ku-bell.is-stale{background:#3a2a12}
.ku-bell.is-stale:hover{border-color:var(--orange);color:var(--orange-ink)}
/* 为「消息」四个字的宽度与后面的 N 条未读一致（无未读时文案短，胶囊宽度会跳动） */
@media(max-width:680px){
  .ku-bell-inpage{width:38px;padding:0}
  .ku-bell-inpage .ku-bell-txt{display:none}
}
/* 通知面板：参考后台通知样式 —— 顶部标题行 + 双页签 + 列表 + 底部「查看全部」 */
#kuNotifyMask{display:none;position:fixed;inset:0;z-index:91}
/* fix475③：背景不再用 var(--paper) —— 部分 iOS 浏览器内核对自定义属性回退解析不稳，
   会把整条 background 判为无效 → 面板变透明（安卓正常、iOS 透明即此症状）。
   改用字面色 + 深色主题显式覆盖，保证任何内核都不透明。 */
#kuNotifyPanel{display:none;position:fixed;top:58px;right:12px;width:min(400px,calc(100vw - 20px));z-index:92;background:#fff;border:1px solid var(--line);border-radius:16px;box-shadow:0 18px 50px rgba(15,23,42,.18);overflow:hidden}
[data-theme="dark"] #kuNotifyPanel{background:#1a222c}
.ku-nhead{display:flex;align-items:center;gap:8px;padding:14px 16px 10px}
.ku-ntabs{display:flex;gap:2px;padding:0 12px;border-bottom:1px solid var(--line-soft,var(--line))}
.ku-ntab{position:relative;border:none;background:none;cursor:pointer;font-size:13.5px;font-weight:600;color:var(--muted,#888);padding:9px 14px 10px;display:flex;align-items:center;gap:6px}
.ku-ntab.active{color:var(--accent-ink)}
.ku-ntab.active::after{content:'';position:absolute;left:10px;right:10px;bottom:-1px;height:2.5px;border-radius:2px;background:var(--accent)}
.ku-ntab-n{min-width:16px;height:16px;line-height:16px;text-align:center;background:var(--red);color:#fff;border-radius:9px;font-size:10px;font-weight:700;padding:0 4px}
.ku-nlist{overflow-y:auto;padding:10px 12px 6px;max-height:54vh}
/* fix480③：系统公告页签的来源筛选 chips（全部 / 系统提醒 / 全站公告） */
.ku-nchips{display:flex;gap:6px;padding:9px 12px 0;flex-wrap:wrap}
.ku-nchip{border:1px solid var(--line);background:transparent;color:var(--muted);
  font-size:11.5px;line-height:1.6;padding:3px 10px;border-radius:999px;cursor:pointer;transition:.16s;white-space:nowrap}
.ku-nchip:hover{border-color:var(--accent);color:var(--accent-ink)}
.ku-nchip.on{background:var(--accent);border-color:var(--accent);color:#fff;font-weight:600}
.ku-nrow{display:flex;align-items:flex-start;gap:8px;padding:9px 10px;border:1px solid var(--line);border-radius:10px;margin-bottom:8px;cursor:pointer;background:transparent}
.ku-nrow:hover{border-color:var(--accent)}
.ku-nrow.unread{background:#fff7ed;border-color:var(--orange)}
[data-theme="dark"] .ku-nrow.unread{background:color-mix(in srgb,var(--orange) 16%,transparent)}
.ku-nrow-main{flex:1;min-width:0}
.ku-nrow-txt{font-size:12.5px;line-height:1.65;word-break:break-word}
.ku-nrow-title{font-size:13px;font-weight:700;word-break:break-word}
.ku-nrow-time{font-size:10.5px;color:var(--light,#9aa5b1);margin-top:3px}
.ku-nrow-clamp{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.ku-ndot{width:8px;height:8px;border-radius:50%;background:var(--red);flex-shrink:0;margin-top:5px}
.ku-nempty{text-align:center;padding:30px 0;font-size:12.5px;color:var(--muted,#888)}
.ku-nempty span{font-size:11px;color:var(--light,#9aa5b1)}
.ku-nfoot{border-top:1px solid var(--line-soft,var(--line));padding:8px 12px;display:flex}
/* 桌面端主区顶部让位，避免铃铛与页头右上按钮重叠 */
@media(min-width:851px){ main{padding-top:64px} }

/* ===================== fix474：通知直达定位 + 消息通知设置 ===================== */
/* ① 通知点击后跳到对应业务行时的闪烁高亮（2 秒后自动消失） */
.th-flash{animation:thFlash 1.2s ease-in-out 2}
@keyframes thFlash{0%,100%{background:transparent}50%{background:color-mix(in srgb,var(--accent) 26%,transparent)}}
tr.th-flash td{background:color-mix(in srgb,var(--accent) 20%,transparent)!important}
/* 面板里带跳转的消息给一个「›」可点提示 */
.ku-nrow-go{align-self:center;color:var(--light);font-size:17px;line-height:1;flex-shrink:0;margin-left:2px}
.ku-nrow:hover .ku-nrow-go{color:var(--accent-ink)}

/* ===================== fix476③：流标原因 / 浏览曝光回显 ===================== */
/* 流标卡片状态列下方的「为什么流标」一行：白色空间窄，用 normal 换行 + 双行结构
   （第一行事实、第二行结论），hover 由 title 给出完整建议。 */
.th-expire-why{max-width:186px;white-space:normal;word-break:break-word;margin-top:5px;
  font-size:11px;line-height:1.55;color:var(--orange-ink);opacity:.95}
.th-expire-why span{display:block;font-weight:700;margin-top:1px}
/* 我发布的开放帖：实时曝光提示（未流标就能看出「是不是没人看到」） */
.th-view-tag{margin-top:3px;font-size:11px;color:var(--light,#9aa5b1);white-space:nowrap}

/* ===================== fix476②：手机端看板「精简模式」 ===================== */
/* 开关按钮：默认不渲染（桌面 6 卡全显示，不需要这个入口），只在 ≤680px 出现。
   样式跟随页面卡片语言（虚线描边 + 主色文字），放在 .dash-top 正下方，不打断图表区。 */
.dash-mini-more{display:none}
@media(max-width:680px){
  .dash-mini-more{display:flex;align-items:center;justify-content:center;gap:5px;width:100%;
    margin:-4px 0 16px;padding:8px 12px;font-size:12.5px;font-weight:600;line-height:1.6;
    color:var(--accent-ink);background:var(--bg);border:1px dashed var(--line);border-radius:11px;cursor:pointer;transition:.16s}
  .dash-mini-more:hover{border-style:solid;border-color:var(--accent);background:var(--accent-light)}
  .dash-mini-more:active{transform:translateY(1px)}
}

/* ===================== fix476①：通知面板「仅看未读」过滤 ===================== */
/* 头部小开关：默认描边幽灵按钮，开启后填充主色（与 .chip.active 同一语言）。
   放在「🔔 消息通知」标题右侧、与「全部已读」同一行；窄屏也不会把标题挤掉
   （标题 strong 是 flex 自适应，按钮 flex-shrink:0 + nowrap）。 */
.ku-nfilter{flex:0 0 auto;white-space:nowrap;border:1px solid var(--line);background:transparent;color:var(--muted,#888);
  font-size:11px;font-weight:600;line-height:1.6;padding:1px 8px;border-radius:999px;cursor:pointer;transition:.16s}
.ku-nfilter:hover{border-color:var(--accent);color:var(--accent-ink)}
.ku-nfilter.on{background:var(--accent);border-color:var(--accent);color:#fff}
/* 过滤生效时的说明条：告诉用户「当前未读几条 / 已隐藏几条已读」，避免以为消息丢了 */
.ku-nhint{padding:0 16px 8px;font-size:11px;color:var(--light,#9aa5b1);display:flex;align-items:center;gap:6px}
.ku-nhint::before{content:'🔍';font-size:10.5px}

/* ===================== fix477①：曝光 → 接单转化漏斗（我发布的） ===================== */
/* 「我发布的」页签顶部的一行汇总：把「发了多少 / 被看多少次 / 成交还是流标」压成一行。
   用 accent-light 底色与下方白色列表区分开；窄屏自动换行、每个指标不拆行（nowrap）。 */
.th-funnel{margin:10px 0 12px;padding:11px 14px;border:1px solid var(--line);border-radius:12px;
  background:var(--accent-light);border-color:color-mix(in srgb,var(--accent) 30%,var(--line))}
.th-funnel-hd{display:flex;align-items:center;gap:8px;font-size:12.5px;font-weight:700;color:var(--accent-ink)}
/* iOS Safari 对 var(--x,#fff) 这种带兜底的复合值偶尔判为无效 → 整块透明（fix475③ 踩过），
   所以这里写死 #fff，深色主题再单独覆盖。 */
.th-funnel-hd span{font-weight:400;font-size:11px;color:var(--light);padding:0 7px;line-height:1.7;
  border:1px solid var(--line);border-radius:999px;background:#fff}
.th-funnel-items{display:flex;flex-wrap:wrap;gap:6px 14px;margin-top:8px}
.th-fi{font-size:11.5px;color:var(--muted,#888);white-space:nowrap}
.th-fi b{font-size:14px;font-weight:700;color:var(--ink);margin-right:3px}
.th-funnel-tip{margin-top:8px;font-size:11.5px;line-height:1.6;color:var(--accent-ink)}
@media(max-width:680px){
  .th-funnel{padding:10px 12px}
  .th-funnel-items{gap:6px 12px}
}

/* ===================== fix477③：流标后「按建议调整并重发」 ===================== */
/* 跟在 💡 结论行下面的小按钮：结论 → 动作一步到位，避免用户看完建议还要自己算该改多少。
   宽度不撑破状态列（状态列是 nowrap 窄列），所以限宽 + 允许内部换行。 */
.th-advice-btn{display:block;max-width:186px;white-space:normal;word-break:break-word;margin-top:5px;
  padding:3px 8px;font-size:11px;font-weight:600;line-height:1.5;text-align:left;
  color:var(--accent-ink);background:#fff;border:1px solid var(--accent);border-radius:8px;
  cursor:pointer;transition:.16s}
.th-advice-btn:hover{background:var(--accent);color:#fff}
.th-advice-btn:active{transform:translateY(1px)}
[data-theme="dark"] .th-funnel-hd span{background:#1a222c}
[data-theme="dark"] .th-advice-btn{background:#1a222c}
