/* 摸鱼神器 · 雾白工作台 / 薄荷鱼品牌。独立覆盖层，保留业务 DOM。 */
:root,[data-theme='warm']{
--bg-0:#f1f4f8;--bg-1:#fcfdff;--bg-2:#edf1f7;--bg-3:#fff;--bg-hover:#e5ebf5;
--line:#dfe5ef;--line-2:#ccd5e3;--line-strong:#aab8cd;
--text:#202b40;--text-2:#526179;--text-3:#627089;--text-inv:#fff;
--accent:#485ac5;--accent-2:#394aad;--accent-ink:#384aae;--accent-soft:#e9edfc;--accent-line:#bdc7ef;
--ok:#20725d;--warn:#91620c;--bad:#b53f53;--info:#45668c;
--ok-soft:#e3f3ed;--warn-soft:#fbf0d9;--bad-soft:#fbe9ed;--info-soft:#e8f0fa;
--font-display:var(--font);--font-sans:var(--font);--font-mono:var(--mono);
--fs-11:14px;--fs-12:14px;--fs-13:15px;--fs-14:16px;--fs-16:18px;--fs-20:23px;--fs-26:28px;--fs-32:32px;
--r-sm:9px;--r-md:12px;--r-lg:16px;--r-xl:20px;
--sh-1:0 2px 5px #25385806;--sh-2:0 8px 26px #2538580d;--sh-3:0 20px 60px #14213c26;
--t-fast:120ms;--t-base:160ms;--t-slow:160ms;--sidebar-w:216px;--header-h:68px;--s-9:36px;
color-scheme:light;
}
[data-theme='dark']{
--bg-0:#141b29;--bg-1:#1c2637;--bg-2:#243146;--bg-3:#28354b;--bg-hover:#303f58;
--line:#34425a;--line-2:#43536d;--line-strong:#697d9c;
--text:#edf2fc;--text-2:#becbe0;--text-3:#a4b4ce;--text-inv:#142035;
--accent:#a7b6ff;--accent-2:#c1cbff;--accent-ink:#bdc8ff;--accent-soft:#2d3b60;--accent-line:#5b6fa7;
--ok:#83d8b6;--warn:#f0c77b;--bad:#ff9ba9;--info:#a8c9ee;
--ok-soft:#213f3b;--warn-soft:#443b29;--bad-soft:#482e3d;--info-soft:#293b54;
--sh-1:0 2px 5px #0002;--sh-2:0 8px 26px #0003;--sh-3:0 20px 60px #0006;color-scheme:dark;
}
body{line-height:1.65}body::before,[data-theme='dark'] body::before{background:none}
::selection{background:var(--accent-soft);color:var(--text)}
.topbar{background:var(--bg-1);padding:0 24px;backdrop-filter:none;gap:12px}
.brand-mark{width:38px;height:38px;border-radius:12px;background:#222b58;box-shadow:none}
.brand-mark img{display:block;width:100%;height:100%;object-fit:cover}
.brand-mark::after{display:none}.brand-name{font-size:20px;letter-spacing:.04em}
.brand-sub{font-size:14px}.topbar .btn-primary{background:var(--accent-soft);color:var(--accent-ink);border-color:transparent;box-shadow:none}
.sidebar{background:#222b48;border-color:#303c5b;padding:18px 12px 12px;--text:#f1f5ff;--text-2:#d1daee;--text-3:#a8b7d3;--line:#3a4663;--line-2:#4c5a76;--bg-2:#303d5b;--bg-hover:#354363;--bg-3:#354363;--accent:#a6eed9}
.sidebar .nav-item{color:#d3ddef;border-radius:10px;padding:10px 12px;font-size:15px;min-height:42px}
.sidebar .nav-item svg{width:21px;height:21px;opacity:.9;stroke-width:1.75}
.sidebar .nav-item:hover{background:#303d5b;color:#fff}
.sidebar .nav-item.active{background:#d8f5ec;color:#193c39;box-shadow:0 3px 10px #111a3326}
.sidebar .nav-item.active svg{color:#206954}.sidebar .nav-item.active::before{background:#257561;height:16px}
.sidebar .nav-group-head{color:#a9bbd7;padding:16px 12px 7px}
.sidebar .nav-group.collapsed:has(.nav-item.active) .nav-group-head{color:#d8f5ec;background:#303d5b}
.sidebar .foot-meta{color:#a9bbd7;font-size:13px}.sidebar-foot{padding:10px 0 0}
.sidebar .badge{background:#5c3144;color:#ffd4dc}.sidebar kbd{background:#303d5b;color:#dce6f7}
.content{padding:28px 30px 40px;scroll-behavior:auto;overflow-x:auto}
.page-head{align-items:center;margin-bottom:24px;gap:18px;flex-wrap:wrap}
.page-title{font-size:30px;line-height:1.3;letter-spacing:.01em;font-weight:700}
.page-eyebrow{font-size:14px;letter-spacing:.1em;margin-bottom:8px}.page-desc{font-size:15px;max-width:78ch;line-height:1.8}
.card{border-radius:16px;box-shadow:var(--sh-1);background:var(--bg-1)}
.card-focus{background:linear-gradient(120deg,var(--accent-soft),var(--bg-1) 70%)}
.card-head{padding:16px 20px;min-height:62px}.card-title{font-size:18px}.card-body{padding:20px}.card-body.flush{padding:0}
.btn{border-radius:9px;min-height:38px;height:auto;padding:8px 15px;line-height:1.4;font-size:15px;background:var(--bg-3)}
.btn-primary,.btn-accent{background:var(--accent);color:var(--text-inv);border-color:var(--accent);box-shadow:0 3px 8px #4056a51a}
.btn-primary:hover,.btn-accent:hover{background:var(--accent-2);border-color:var(--accent-2)}
.btn-sm{font-size:14px;min-height:34px;padding:6px 10px}.btn-ghost{background:transparent;border-color:transparent}.icon-btn{padding:7px}
.btn:focus-visible,.nav-item:focus-visible,input:focus-visible,textarea:focus-visible,select:focus-visible,button:focus-visible{outline:3px solid var(--accent);outline-offset:3px}
.input,input:not([type='checkbox']):not([type='radio']):not([type='range']):not([type='file']),select,textarea{border-radius:9px;font-size:15px;background-color:var(--bg-3);color:var(--text);border-color:var(--line-2)}
.input:focus,textarea:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}
.metrics{gap:12px;margin-bottom:24px}.metric{padding:18px;background:var(--bg-1);border:1px solid var(--line);border-radius:12px;box-shadow:none;min-width:0}
.metric-v{font-family:var(--font);font-variant-numeric:tabular-nums;font-size:27px;letter-spacing:-.03em;overflow-wrap:anywhere}.metric-k,.metric-label{font-size:14px;color:var(--text-2)}
.metric-sub{font-size:14px}.num,.t-right{font-variant-numeric:tabular-nums}
.table-wrap{max-height:65vh;overflow:auto}table{font-size:14px;width:100%;table-layout:auto}
thead th{font-size:14px;font-weight:600;padding:12px 10px;background:var(--bg-2);color:var(--text-2);white-space:normal}
tbody td{padding:14px 10px;font-size:14px;white-space:normal;overflow-wrap:anywhere;line-height:1.6}
tbody td [style*='font-size:11px'],tbody td [style*='font-size:12px']{font-size:14px!important}
tbody tr:nth-child(even) td{background:color-mix(in srgb,var(--bg-2) 35%,var(--bg-1))}
tbody tr:hover td{background:var(--accent-soft)}td.actions{min-width:110px}td .btn + .btn{margin-left:2px}.actions .btn{margin:3px 0}
.empty{padding:40px 24px;white-space:normal}.empty-art{background:var(--accent-soft);color:var(--accent-ink);border-radius:18px}.empty-title{font-size:20px}.empty-desc{font-size:15px;line-height:1.8}
.chip,.badge{font-size:14px}.toast{border-radius:12px;background:var(--bg-3);color:var(--text);border:1px solid var(--line-2);box-shadow:var(--sh-3)}
/* 使用真实导航状态区分页面，无需增加脚本和业务状态 */
.body:has(.nav-item[data-view='stock'].active) .content>.row-between{display:block!important}
.body:has(.nav-item[data-view='stock'].active) .content>.row-between>div:last-child{justify-content:flex-end;margin:0 0 20px;width:auto}
.body:has(.nav-item[data-view='stock'].active) .metric{border:0;border-right:1px solid var(--line);border-radius:0;background:transparent;padding:12px 16px}
.body:has(.nav-item[data-view='stock'].active) .metrics{border:1px solid var(--line);background:var(--bg-1);border-radius:14px;gap:0;padding:8px}
.body:has(.nav-item[data-view='ar'].active) .metrics>.metric:first-child,.body:has(.nav-item[data-view='commission'].active) .metrics>.metric:first-child{background:var(--accent);color:var(--text-inv);border-color:var(--accent)}
.body:has(.nav-item[data-view='ar'].active) .metrics>.metric:first-child *,.body:has(.nav-item[data-view='commission'].active) .metrics>.metric:first-child *{color:inherit}
.body:has(.nav-item[data-view='ar'].active) .page-head{border-bottom:1px solid var(--line-2);padding-bottom:22px}
.body:has(.nav-item[data-view='quotes'].active,.nav-item[data-view='salesorder'].active,.nav-item[data-view='real'].active) .content>.page-head{background:var(--bg-1);border-left:4px solid var(--accent);padding:22px 24px;border-radius:4px 14px 14px 4px}
.body:has(.nav-item[data-view='today'].active,.nav-item[data-view='swatch'].active,.nav-item[data-view='shortage'].active) .content>.page-head{padding:20px 24px;background:linear-gradient(110deg,var(--ok-soft),var(--bg-0));border-radius:16px}
.body:has(.nav-item[data-view='archive'].active) .page-head{border-bottom:2px solid var(--line-2);padding-bottom:24px}
.set-tabs{padding:6px;background:var(--bg-2);border-radius:12px;border:1px solid var(--line);gap:6px}.set-tab{flex:1;border-color:transparent;background:transparent}.set-tab.active{background:var(--bg-3);border-color:var(--line-2);box-shadow:var(--sh-1)}
.manual-shell{max-width:1100px;margin:auto}.set-body{max-width:1200px}.plugin-group-head{padding-top:18px;padding-bottom:18px}
.wb{border:1px solid var(--line);border-radius:18px;overflow:hidden;background:var(--bg-1)}.wb-side{background:var(--bg-2);border-color:var(--line)}.wb-main{background:var(--bg-1);min-width:0}.chat-head{background:var(--bg-1);border-bottom:1px solid var(--line)}
.chat-welcome-title{font-family:var(--font);font-size:30px}.chat-welcome-desc{font-size:16px;line-height:1.9}.chat-welcome-mark{background:var(--accent-soft);color:var(--accent)}
.chat-chip{border-radius:12px;background:var(--bg-3);font-size:15px;border-color:var(--line-2);padding:12px 16px}.chat-chip:hover{background:var(--accent-soft);border-color:var(--accent-line)}
.chat-input-box{background:var(--bg-3);border:1px solid var(--line-2);border-radius:16px;box-shadow:var(--sh-2)}.chat-input{font-size:16px;line-height:1.7}.chat-hint{font-size:14px}.chat-bubble{font-size:16px;line-height:1.85}.chat-msg-user .chat-bubble{background:var(--accent-soft);color:var(--text)}
.sess.active{background:var(--bg-3);border-color:var(--accent-line)}
/* 三种即时反馈：按钮按下、表格悬停、页面入场。 */
@keyframes v4-enter{from{opacity:.5;transform:translateY(5px)}to{opacity:1;transform:none}}
.fade-up{animation:v4-enter 160ms ease-out!important}
*,*::before,*::after{animation-duration:160ms!important;animation-delay:0ms!important;transition-duration:160ms!important}
.skeleton,.skeleton-row{animation:none!important;background:var(--bg-2)}
@media(min-width:1181px){.metrics:has(>:nth-child(5)){grid-template-columns:repeat(5,minmax(0,1fr))}}
@media(max-width:1400px){:root{--sidebar-w:200px}.content{padding:24px}.brand-sub{display:none}.metric{padding:14px}.metric-v{font-size:24px}thead th,tbody td{padding-left:8px;padding-right:8px}}
@media(max-width:1100px){:root{--sidebar-w:184px}.content{padding:20px}.wb-side{width:180px;min-width:160px}.page-title{font-size:27px}.grid-4{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-height:820px){.sidebar{padding-top:10px}.sidebar .nav-item{padding:8px 10px;min-height:39px}.sidebar .nav-group-head{padding:9px 10px 5px}}
@media(prefers-reduced-motion:reduce){*,*::before,*::after{animation:none!important;transition:none!important;scroll-behavior:auto!important}}


/* ===== 落地修正（验收后补丁） ===== */
/* 1) 侧栏：加宽一点点，项高压到 38，让 14 项 + 3 个组头在 900 高的屏里放得下 */
:root,[data-theme='warm']{--sidebar-w:232px}
@media(max-width:1400px){:root{--sidebar-w:212px}}
@media(max-width:1100px){:root{--sidebar-w:196px}}
.sidebar .nav-item{min-height:36px;padding:7px 12px;font-size:14.5px}
.sidebar .nav-group-head{padding:9px 12px 4px;font-size:13px}
.sidebar-foot{padding:8px 0 0}
.sidebar .foot-meta{font-size:12px}

/* 2) 侧栏滚动条：不占视觉，鼠标移上去才显形 */
.nav-scroll{scrollbar-width:thin;scrollbar-color:transparent transparent}
.nav-scroll:hover{scrollbar-color:#5b6b8c transparent}
.nav-scroll::-webkit-scrollbar{width:6px}
.nav-scroll::-webkit-scrollbar-thumb{background:transparent;border-radius:6px}
.nav-scroll:hover::-webkit-scrollbar-thumb{background:#5b6b8c}

/* 3) 顶栏「导入客户单据」是全站主入口，恢复实心，别被页面内主按钮比下去 */
.topbar .btn-primary{background:var(--accent);color:var(--text-inv);border-color:var(--accent);box-shadow:0 3px 8px #4056a52e}
.topbar .btn-primary:hover{background:var(--accent-2);border-color:var(--accent-2)}

/* 4) 内容区不要横向滚动条轨道；需要横滚的交给 .table-wrap */
.content{overflow-x:clip}

/* 5) 窄窗下指标连排退化成两列时，去掉中间竖线，避免看起来像断开的表格 */
@media(max-width:1100px){
  .body:has(.nav-item[data-view='stock'].active) .metric{border-right:0;border-bottom:1px solid var(--line)}
  .body:has(.nav-item[data-view='stock'].active) .metric:nth-last-child(-n+2){border-bottom:0}
}

/* 手机/窄屏兜底：欢迎层与弹窗不能溢出屏幕（客户扫码第一眼就看这个） */
@media (max-width: 860px) {
  #welcome-root {
    padding: 12px !important;
    align-items: flex-start !important;
    overflow-y: auto !important;
  }
  .welcome-card {
    max-width: 100% !important;
    width: 100% !important;
    padding: 22px 18px !important;
    margin: 12px 0 24px !important;
  }
  .welcome-card h1,
  .welcome-card .welcome-title {
    font-size: 22px !important;
    line-height: 1.35 !important;
  }
  .welcome-card p,
  .welcome-card li {
    font-size: 14px !important;
  }
  #modal-root > * {
    max-width: 94vw !important;
    width: auto !important;
  }
}

/* 手机兜底 v2：欢迎层自己定位，卡片按屏宽收 —— **只在真有卡片时才铺屏**
 *
 * 这条 fixed 本来是为「欢迎卡片」写的手机兜底，但写在了元素级、没跟「卡片在不在」绑定：
 * 欢迎层关掉时只清 innerHTML（index.html 的 close() 和 electron main.ts:481 那处都只清内容），
 * 空壳于是照样 position:fixed + inset:0 + 蒙 35% 暗 + pointer-events:auto，
 * 把整屏点击全吃掉 —— ≤860px 手机扫码进网页版 = 一片灰、点什么都没反应
 * （2026-11-04 线上实测 + 周工探针 probe-narrow.mjs：390×844 与 764×485 下
 *  页面正中 = DIV#welcome-root，真鼠标点菜单项「点不动」）。
 *
 * 判据选 :has(.welcome)，不选 :empty —— 两条都能修掉今天这个洞，差别在以后：
 *   :has(.welcome) 说的是**意图**（「这张卡片在不在」），正是这条 fixed 存在的理由；
 *   :empty 说的是**代理**（「元素空不空」）—— 只要有人在 innerHTML 里留一个空白或注释，
 *   :empty 就悄悄失效、洞又回来，而 :has 不受影响。
 *   代价：:has 要 Chrome 105+（2022）—— 产品线是 Electron + 现代 Chrome，够。
 */
@media (max-width: 860px) {
  #welcome-root:has(.welcome) {
    position: fixed !important;
    inset: 0 !important;
    display: flex !important;
    align-items: flex-start !important;
    justify-content: center !important;
    padding: 12px !important;
    overflow-y: auto !important;
    background: rgba(20, 27, 41, 0.35);
    z-index: 900;
  }
  /* 没有卡片：不占屏、不挡点。
     这是兜底的主保险 —— 任何一条清空欢迎层的路径（index.html 的 close()、
     electron main.ts 的 innerHTML=''、以后新加的）都会落到这里，不用各自记得收层。 */
  #welcome-root:not(:has(.welcome)),
  #welcome-root.is-closed {
    position: static !important;
    inset: auto !important;
    display: none !important;
    background: none !important;
    pointer-events: none !important;
    z-index: auto !important;
  }
  .welcome-card {
    width: auto !important;
    max-width: min(366px, calc(100vw - 24px)) !important;
    margin: 4px auto 24px !important;
    padding: 20px 16px !important;
  }
}

/* 手机兜底 v3：flex item 的 min-width:auto 会被内容撑破 */
@media (max-width: 860px) {
  #welcome-root { box-sizing: border-box; }
  #welcome-root .welcome-card {
    flex: 0 1 auto !important;
    min-width: 0 !important;
    width: 100% !important;
    max-width: 100% !important;
    box-sizing: border-box !important;
    overflow-wrap: break-word;
  }
  #welcome-root .welcome-card * {
    max-width: 100% !important;
    overflow-wrap: break-word;
  }
  #welcome-root .welcome-steps,
  #welcome-root ol,
  #welcome-root ul {
    padding-left: 18px !important;
    margin-left: 0 !important;
  }
}

/* ── 设置页：整体居中 + 卡片留白（2026-10-27 反馈：内容贴边、太挤） ── */
.settings-page{max-width:1000px;margin:0 auto;padding-bottom:40px}
.settings-page .page-head{margin-bottom:20px}
.settings-page .set-tabs{gap:10px;margin:18px 0 22px;padding-bottom:14px}
.settings-page .set-tab{padding:10px 16px}
/* 设置里的卡片是「标题+正文直接挂在卡上」，没有 card-head/card-body，补内边距 */
.settings-page .card:not(:has(.card-head)):not(:has(.card-body)){padding:22px 26px}
.settings-page .card > h3:first-child,
.settings-page .card > h2:first-child{margin:0 0 8px;font-size:17px}
.settings-page .card > p.muted:first-of-type{margin-top:0;line-height:1.7}
.settings-page .grid-2{gap:16px 22px;margin:16px 0 8px}
.settings-page .field label{display:block;margin-bottom:6px;color:var(--text-2)}
.settings-page .field input,
.settings-page .field select{width:100%;box-sizing:border-box}
.settings-page .row-actions{gap:12px;margin-top:20px;flex-wrap:wrap}
.settings-page .set-list{margin-top:12px;gap:10px}
.settings-page .set-list li{padding:2px 0}
.set-account{border-color:color-mix(in srgb, var(--accent) 26%, var(--line))}
@media (max-width:760px){
  .settings-page{max-width:none}
  .settings-page .grid-2{grid-template-columns:1fr}
  .settings-page .card:not(:has(.card-head)):not(:has(.card-body)){padding:18px 16px}
}
/* 账号卡的退出登录：描边红字，别做成不起眼的纯文字 */
.set-account .row-actions{margin-top:16px}
.set-account #set-logout{
  border:1px solid color-mix(in srgb, var(--bad) 45%, var(--line));
  color:var(--bad);
  background:var(--bg-1);
  padding:8px 18px;
  border-radius:9px;
  font-weight:600;
  cursor:pointer;
}
.set-account #set-logout:hover{
  background:var(--bad-soft);
  border-color:var(--bad);
}

/* ── 登录设备（云端才显示） ── */
.set-devices { margin-top: 14px; border-top: 1px dashed var(--line); padding-top: 12px; }
.set-devices-head { font-size: var(--fs-12); font-weight: 600; margin-bottom: 8px; display: flex; gap: 8px; align-items: baseline; }
.set-device {
  display: flex; align-items: center; gap: 10px; flex-wrap: wrap;
  padding: 7px 0; font-size: var(--fs-12); color: var(--text-2);
}
.set-device b { color: var(--text); font-weight: 600; }
.set-device .muted { margin-left: auto; }
.btn-xs { padding: 2px 8px; font-size: var(--fs-11); }

/* ══════════ 助手（秘书）页 ══════════ */
.asst-page { display: grid; grid-template-columns: 236px 1fr; gap: 16px; align-items: start; }
.asst-side { position: sticky; top: 8px; }
.asst-new { width: 100%; justify-content: center; }
.asst-sessions { margin-top: 10px; display: flex; flex-direction: column; gap: 4px; max-height: 62vh; overflow: auto; }
.asst-session {
  display: flex; align-items: center; gap: 8px;
  padding: 8px 10px; border-radius: 10px; cursor: pointer;
  border: 1px solid transparent; font-size: 13px; color: var(--ink-2);
}
.asst-session:hover { background: var(--hover, rgba(0,0,0,.04)); }
.asst-session.active { background: var(--brand-soft, #eef2ff); border-color: var(--brand-line, #c7d2fe); color: var(--ink); font-weight: 600; }
.asst-session-title { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.asst-del {
  border: 0; background: transparent; cursor: pointer; color: var(--ink-3, #9aa0a6);
  font-size: 16px; line-height: 1; padding: 0 2px; opacity: 0;
}
.asst-session:hover .asst-del { opacity: 1; }
.asst-del:hover { color: var(--bad, #a63a2e); }
.asst-empty-hint { font-size: 12px; color: var(--ink-3, #9aa0a6); padding: 8px 4px; line-height: 1.6; }

.asst-main { display: flex; flex-direction: column; gap: 14px; min-width: 0; }
.asst-brief .card-body { padding: 18px 20px; }
.asst-brief-head { display: flex; align-items: center; justify-content: space-between; font-size: 13px; color: var(--ink-3, #75797e); margin-bottom: 8px; }
.asst-headline { font-size: 17px; font-weight: 700; line-height: 1.5; margin-bottom: 10px; }
.asst-bullets { margin: 0; padding-left: 18px; display: flex; flex-direction: column; gap: 6px; font-size: 13.5px; line-height: 1.7; }
.asst-actions { margin-top: 14px; display: flex; flex-direction: column; gap: 8px; }
.asst-action { display: flex; gap: 10px; align-items: flex-start; font-size: 13.5px; line-height: 1.6; }
.asst-action-no {
  flex: none; width: 20px; height: 20px; border-radius: 999px; background: var(--brand-soft, #eef2ff);
  color: var(--brand, #4f46e5); font-size: 12px; font-weight: 700;
  display: inline-flex; align-items: center; justify-content: center; margin-top: 1px;
}
.asst-skeleton { font-size: 13px; color: var(--ink-3, #75797e); display: flex; align-items: center; gap: 10px; }

.asst-chat .card-body { padding: 0; display: flex; flex-direction: column; }
.asst-chat-head { padding: 14px 20px; border-bottom: 1px solid var(--line, #ececef); font-weight: 600; font-size: 14px; }
.asst-messages { padding: 18px 20px; display: flex; flex-direction: column; gap: 14px; max-height: 56vh; overflow: auto; }
.asst-msg { display: flex; flex-direction: column; gap: 6px; max-width: 86%; }
.asst-msg.me { align-self: flex-end; align-items: flex-end; }
.asst-bubble { padding: 11px 14px; border-radius: 12px; font-size: 13.8px; line-height: 1.75; background: var(--soft, #f5f6f8); }
.asst-msg.me .asst-bubble { background: var(--brand, #4f46e5); color: #fff; }
.asst-trace { display: flex; gap: 8px; align-items: center; font-size: 11px; }
.asst-badge { padding: 1px 6px; border-radius: 999px; }
.asst-badge.ok { background: rgba(16,163,74,.12); color: #15803d; }
.asst-badge.bad { background: rgba(214,69,69,.12); color: #a63a2e; }
.asst-badge.warn { background: rgba(217,140,31,.14); color: #a86412; }
.asst-meta { color: var(--ink-3, #9aa0a6); }
.asst-error { margin: 0 20px 10px; padding: 10px 12px; border-radius: 10px; background: rgba(214,69,69,.08); color: #a63a2e; font-size: 12.5px; }

.asst-input { display: flex; gap: 10px; padding: 12px 16px; border-top: 1px solid var(--line, #ececef); }
.asst-input textarea {
  flex: 1; resize: none; border: 1px solid var(--line, #e3e4e8); border-radius: 10px;
  padding: 10px 12px; font: inherit; font-size: 13.5px; line-height: 1.6; max-height: 120px; background: var(--card, #fff);
}
.asst-input textarea:focus { outline: 2px solid var(--brand-soft, #e0e7ff); border-color: var(--brand-line, #c7d2fe); }

.asst-welcome { padding: 8px 0 4px; }
.asst-welcome-title { font-size: 16px; font-weight: 700; margin-bottom: 6px; }
.asst-welcome-desc { font-size: 13px; color: var(--ink-3, #75797e); line-height: 1.7; margin-bottom: 12px; }
.asst-tips { display: flex; flex-wrap: wrap; gap: 8px; }
.asst-tip {
  border: 1px solid var(--line, #e3e4e8); background: var(--card, #fff); border-radius: 999px;
  padding: 6px 12px; font-size: 12.5px; cursor: pointer; color: var(--ink-2, #4b5563);
}
.asst-tip:hover { border-color: var(--brand-line, #c7d2fe); color: var(--brand, #4f46e5); }

@media (max-width: 900px) {
  .asst-page { grid-template-columns: 1fr; }
  .asst-side { position: static; }
  .asst-sessions { max-height: 180px; }
}

/* 41. 对话页真正铺满：外层不滚，输入框永远完整可见（2026-10-27 v2）
   之前 .wb 用 calc(100vh - header - 32px) 算高度，可是它其实躺在 #view 的 padding
   里面，还有订阅条 34px，算出来的高度比容器高 40~70px → 输入框底部被裁掉。 */
#view:has(.wb) {
  padding: 0 18px;
  overflow: hidden;
  display: flex;
  flex-direction: column;
  min-height: 0;
}
#view:has(.wb) > .wb {
  height: 100%;
  flex: 1 1 auto;
  min-height: 0;
}
.wb-main { min-height: 0; overflow: hidden; }
.wb-main > .chat-scroll {
  flex: 1 1 0;
  min-height: 0;
  overflow-y: auto;
  overscroll-behavior: contain;
  padding: 18px 12px 12px;
}
.wb-main > .chat-input-box {
  flex: 0 0 auto;
  margin: 8px 12px 20px;
}
/* 空状态：居中且留白，别贴着边框 */
.wb-main .chat-welcome {
  margin: auto;
  max-width: 760px;
  padding: 30px 26px 40px;
}
.wb-main .chat-welcome-desc { max-width: 46ch; }
.wb-main .chat-chips { gap: 10px; margin-top: 8px; }

/* 41b. 对话页头部与九宫格：给足左右留白，别顶到窗口边 */
#view:has(.wb) .wb { padding: 0; }
#view:has(.wb) .perm-bar,
#view:has(.wb) .chat-head { padding-left: 24px; padding-right: 24px; }
#view:has(.wb) .chat-head { padding-top: 14px; padding-bottom: 6px; }
#view:has(.wb) .perm-bar { padding-top: 12px; flex-wrap: wrap; row-gap: 8px; }
#view:has(.wb) .chat-scroll { padding-top: 8px; }

/* 42. 助手页也铺满：晨报在上，对话区自己滚，输入框钉在底部 */
#view:has(.asst-page) {
  padding: 8px 18px 16px;
  overflow: hidden;
  display: flex;
  flex-direction: column;
  min-height: 0;
}
#view:has(.asst-page) > .asst-page {
  flex: 1 1 auto;
  min-height: 0;
  height: 100%;
  align-items: stretch;
}
#view:has(.asst-page) .asst-side { position: static; min-height: 0; overflow: auto; }
#view:has(.asst-page) .asst-main { min-height: 0; }
#view:has(.asst-page) .asst-brief { flex: 0 0 auto; }
#view:has(.asst-page) .asst-chat {
  flex: 1 1 auto;
  min-height: 0;
  display: flex;
}
#view:has(.asst-page) .asst-chat > .card-body {
  flex: 1 1 auto;
  min-height: 0;
  display: flex;
  flex-direction: column;
}
#view:has(.asst-page) .asst-messages {
  flex: 1 1 0;
  min-height: 0;
  overflow-y: auto;
  overscroll-behavior: contain;
}
#view:has(.asst-page) .asst-input { flex: 0 0 auto; }

/* 43. 图片生成页（双端通用） */
.dz-head { margin-bottom: 14px; }
.dz-grid { display: grid; grid-template-columns: minmax(260px, 360px) 1fr; gap: 16px; align-items: start; }
.dz-upload h3, .dz-form h3, .dz-result h3 { margin: 0 0 10px; font-size: 15px; }
.dz-drop {
  border: 2px dashed var(--line-2); border-radius: 14px; padding: 26px 16px; text-align: center;
  cursor: pointer; background: var(--bg-2); transition: all .15s var(--ease);
}
.dz-drop:hover, .dz-drop.on { border-color: var(--accent); background: var(--accent-soft); }
.dz-drop-art { font-size: 30px; margin-bottom: 6px; }
.dz-preview { position: relative; }
.dz-preview img { width: 100%; border-radius: 12px; display: block; }
.dz-preview .btn { position: absolute; right: 8px; top: 8px; }
.dz-guide { margin: 12px 0 0; padding-left: 18px; line-height: 1.8; }
.dz-row { display: flex; gap: 10px; align-items: center; margin-bottom: 10px; flex-wrap: wrap; }
.dz-row > label { width: 46px; color: var(--text-2); font-size: 13px; }
.chips { display: flex; gap: 8px; flex-wrap: wrap; }
.chip {
  border: 1px solid var(--line-2); background: var(--bg-1); border-radius: 999px;
  padding: 5px 12px; font-size: 13px; cursor: pointer; color: var(--text-2);
}
.chip.on { border-color: var(--accent); color: var(--accent-ink); background: var(--accent-soft); }
.dz-promptused { margin-top: 10px; }
.dz-promptused summary { cursor: pointer; color: var(--text-2); font-size: 13px; }
.dz-list { display: grid; grid-template-columns: repeat(auto-fill, minmax(190px, 1fr)); gap: 12px; }
.dz-item { margin: 0; border: 1px solid var(--line); border-radius: 12px; overflow: hidden; background: var(--bg-1); }
.dz-item img { width: 100%; display: block; cursor: zoom-in; }
.dz-item figcaption { display: flex; justify-content: space-between; align-items: center; padding: 8px 10px; font-size: 12.5px; }
@media (max-width: 980px) { .dz-grid { grid-template-columns: 1fr; } }

/* 聊天里直接出图 */
.chat-pic { margin: 6px 0 8px; }
.chat-pic img { max-width: min(420px, 100%); border-radius: 12px; border: 1px solid var(--line); cursor: zoom-in; display: block; }

/* ══════════ 43. 套餐价格页 ══════════ */
.pricing-page{max-width:1080px;margin:0 auto;padding-bottom:40px}
.pr-toggle{display:flex;gap:0;border:1px solid var(--line-2);border-radius:10px;overflow:hidden;background:var(--card)}
.pr-toggle button{border:0;background:transparent;padding:9px 16px;font-size:13px;cursor:pointer;color:var(--ink-2)}
.pr-toggle button.on{background:var(--ink);color:#fff}
.pr-save{font-size:11px;opacity:.85}
.pr-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(232px,1fr));gap:16px}
.pr-card{position:relative;border:1px solid var(--line-2);border-radius:14px;background:var(--card);padding:22px 20px 18px;display:flex;flex-direction:column}
.pr-card.hot{border-color:var(--accent);box-shadow:0 8px 26px rgba(70,90,220,.12)}
.pr-card.mine{border-color:var(--ok,#3fa45b)}
.pr-flag{position:absolute;top:-10px;right:14px;background:var(--accent);color:#fff;font-size:11px;padding:3px 9px;border-radius:999px}
.pr-flag.mine-flag{background:var(--ok,#3fa45b);right:auto;left:14px}
.pr-name{font-size:15px;font-weight:700}
.pr-who{font-size:12px;color:var(--ink-3);margin-top:4px;min-height:32px}
.pr-price{font-size:34px;font-weight:800;letter-spacing:-.5px;margin-top:8px}
.pr-cur{font-size:16px;font-weight:600;margin-right:2px}
.pr-unit{font-size:13px;font-weight:500;color:var(--ink-3);margin-left:2px}
.pr-sub{font-size:12px;color:var(--ink-3);margin-top:2px;min-height:18px}
.pr-list{list-style:none;padding:0;margin:16px 0 18px;display:flex;flex-direction:column;gap:8px}
.pr-list li{font-size:13px;color:var(--ink-2);padding-left:18px;position:relative;line-height:1.45}
.pr-list li:before{content:"✓";position:absolute;left:0;color:var(--ok,#3fa45b);font-weight:700}
.pr-list li b{color:var(--ink)}
.pr-cta{margin-top:auto;width:100%}
.pr-notes{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-top:18px}
.pr-note-title{font-size:14px;font-weight:700;margin-bottom:8px}
.pr-note-body{display:flex;flex-direction:column;gap:7px;font-size:13px;color:var(--ink-2);line-height:1.5}
@media (max-width:1000px){.pr-grid{grid-template-columns:1fr}.pr-notes{grid-template-columns:1fr}}
.pr-stamp{display:inline-block;background:rgba(63,164,91,.12);color:#2f7d47;border:1px solid rgba(63,164,91,.35);border-radius:999px;padding:7px 14px;font-size:12.5px;font-weight:600}
.pr-sub b{color:var(--ink)}

/* 43b. 三档对照表 */
.pr-cmp{margin-top:18px;padding:18px 20px;background:var(--card);border:1px solid var(--line);border-radius:12px}
.pr-cmp table{width:100%;border-collapse:collapse;margin-top:10px;font-size:13.5px}
.pr-cmp th,.pr-cmp td{padding:8px 10px;border-bottom:1px solid var(--line-soft,var(--line));text-align:left}
.pr-cmp th:not(:first-child),.pr-cmp td:not(:first-child){text-align:center;width:120px}
.pr-cmp thead th{font-weight:600;color:var(--ink-2,var(--ink))}
.pr-cmp .hint{margin-top:10px;font-size:12.5px;color:var(--muted)}

/* 定价页：免费版功能划掉 */
.pr-card .off{color:var(--muted);text-decoration:line-through}

/* 额度提醒条 */
.quota-warn{display:flex;align-items:center;gap:12px;margin:10px 18px 0;padding:10px 14px;border:1px solid #e6c98a;background:#fdf6e6;color:#7a5c18;border-radius:10px;font-size:13px}
.quota-warn .sp{flex:1}
.quota-warn button{padding:4px 10px;border:1px solid #d9b96b;background:#fff;border-radius:6px;cursor:pointer}
.quota-warn a{color:#7a5c18}
[data-theme="dark"] .quota-warn{background:#2c2415;border-color:#5a4a22;color:#e8cf95}

/* 图片包付款弹窗 */
.dz-pay{position:fixed;inset:0;background:rgba(15,18,28,.55);display:flex;align-items:center;justify-content:center;z-index:90}
.dz-pay-card{width:340px;background:var(--card);border-radius:14px;padding:20px 22px;box-shadow:0 20px 60px rgba(0,0,0,.3);text-align:center}
.dz-pay-title{font-size:16px;font-weight:600;margin-bottom:12px}
.dz-pay-qr{width:220px;height:220px;object-fit:contain;border:1px solid var(--line);border-radius:10px;background:#fff}
.dz-pay-note{font-size:12.5px;color:var(--muted);margin-top:8px}
.dz-pay-state{margin-top:12px;font-size:13px;color:var(--brand,#4f5bd5)}
.dz-pay-actions{display:flex;gap:10px;margin-top:14px;justify-content:center}
.dz-pay-actions button{flex:1}


/* 知识库卡片（设置页） */
.kb-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:10px 18px;margin-top:12px}
.kb-item{display:flex;flex-direction:column;gap:2px;padding:10px 12px;border:1px solid var(--line,rgba(0,0,0,.08));border-radius:10px;background:var(--surface-2,rgba(0,0,0,.02))}
.kb-k{font-size:12px;color:var(--muted,#6b7280)}
.kb-v{font-size:14px;font-weight:600;word-break:break-all}
