/* ============================================================================
   狸猫 UI 共享样式（T53a · 2026-09-18 钦阳拍板：全站客户面/内部面统一路书设计语言）

   唯一真源 = 路书设计语言：
     · token（:root 变量）**逐字照搬** `templates/roadbook.html` 的 `:root` 段
       （= `scripts/t30_build_roadbook_template.py` 生成的皮肤 v2「暖白杂志感」）；
     · 组件类从路书既有组件抽形，**只换类名前缀 `lui-`**，不引新色板、不引新字体、不引外部依赖。

   ⛔ 纪律（与路书同一条）：
     1. 本文件**不含**任何页面专属结构；只放可复用的 token + 组件。
     2. 色值只从下面的变量取，组件里不写死新颜色（深色面板/白色文字除外，与路书一致）。
     3. 字体一律系统栈（无 @import / 无 webfont / 无 CDN）。
     4. 路书产物（roadbook.html / quote_roadbook.html）**不引用本文件** —— 它们由生成器自带
        内联 <style>，本文件与它们零耦合（T53a 验收③：路书产物 md5 不变）。

   使用方式：
     <link rel="stylesheet" href="/static/limao-ui.css?v=1">
     页面自己的 <style> 里**不要再定义** :root 的调色板 token（会被覆盖成旧皮）。
   ============================================================================ */

:root{
  /* 皮肤 v2「暖白杂志感」（2026-09-14 钦阳反馈：浅黄底不够高级）——
     实测对标 Aman Resorts #F3EEE7 / Belmond #EDEDEA：底色去黄、文字近黑、强调色做减法。
     纸感分层改为靠「明度」而不是「黄度」拉开：底纸 → 卡片 → 内嵌面 → 书页 */
  --paper:#F5F3EE; --paper-card:#FFFFFF; --paper-sub:#EFEDE8; --paper-page:#FBFAF7;
  --ink:#313131; --ink-strong:#1A1A1A; --ink-2:#5F5C56; --ink-3:#8C8880;
  --deep:#1A1A1A; --deep-2:#111112;
  /* 强调色减法：沙金 #C9A227 → 哑金 #AE8B4E（降饱和、更贵气）；
     陶土 #A65D3F 只保留给「承诺模块」的关键词，其余一律去彩 */
  --gold:#AE8B4E; --gold-ink:#8A6E3C; --gold-lit:#D9C58C; --clay:#A65D3F;
  --line:#E6E3DC; --line-2:#D6D2C9;
  /* 阴影统一走中性深色（不再是墨蓝）：越靠上层阴影越大 */
  --sh-1:0 6px 18px rgba(24,24,26,.09);
  --sh-2:0 10px 26px rgba(24,24,26,.16);
  --sh-3:0 20px 60px rgba(20,20,22,.26);
  --sh-up:0 -10px 30px rgba(18,18,20,.16);
  /* 角落暖光晕：去饱和到 hsla(40,35%,70%,.10)，只留一层温度、不留黄色 */
  --glow-gold:radial-gradient(circle at 12% 0,hsla(40,35%,70%,.10),transparent 42%);
  --mono:ui-monospace,"SF Mono","Geist Mono",Menlo,Consolas,monospace;
  /* 衬线栈照抄路书 `.serif`（系统栈，不下载字体） */
  --serif:"Songti SC","Noto Serif SC",serif;
  /* 页面外框（路书 body 的底色：纸页浮在浅灰纸台上） */
  --desk:#E8E6E1;
  /* 语义色（路书三态色彩语言：完成=绿 / 当前=金 / 待办=灰；状态条另有陶土·蓝·灰） */
  --ok:#2F6B4F; --info:#1F5C8B; --muted:#7A7A7A;
}

/* ============================ 0. 基础 ============================ */
.lui-page{
  background:var(--desk); color:var(--ink);
  font-family:-apple-system,"PingFang SC","Noto Sans SC",sans-serif;
  font-variant-numeric:tabular-nums;
  -webkit-font-smoothing:antialiased;
}
/* 纸页容器：路书 `.phone` 的等价物（375/480/720 等宽度由页面自己定，这里只给皮肤） */
.lui-shell{background:var(--paper);box-shadow:var(--sh-3);position:relative}
.lui-serif{font-family:var(--serif)}
.lui-mono{font-family:var(--mono)}

/* 眉标：等宽 + 加宽字距（杂志感；路书 `.sec-kicker`） */
.lui-kicker{font-family:var(--mono);font-size:10px;font-weight:700;letter-spacing:.2em;
  color:var(--ink-2);text-transform:uppercase}

/* 标题层级（路书：封面 34 / 章节 24 / 卡片 14.5 / 正文 12.5 / 小标 10） */
.lui-title-xl{font-size:34px;font-weight:800;line-height:1.2;color:var(--ink-strong)}
.lui-title{font-size:24px;font-weight:800;line-height:1.32;letter-spacing:.01em;color:var(--ink-strong)}
.lui-title-sm{font-size:17px;font-weight:800;letter-spacing:.04em;color:var(--ink-strong)}
.lui-card-t{font-size:14.5px;font-weight:800;color:var(--ink-strong)}
.lui-body{font-size:12.5px;line-height:1.95;color:var(--ink-2)}
.lui-sub{font-size:12px;line-height:1.8;color:var(--ink-2)}
.lui-cap{font-size:10.5px;letter-spacing:.08em;color:var(--ink-2)}

/* ============================ 1. 纸感卡片 ============================ */
/* 路书 `.infocard` / `.cta-acts` 的等价物：白纸 + 暖光晕 + 发丝线 + 大圆角 + 一级阴影 */
.lui-card{background:var(--glow-gold),var(--paper-card);border:1px solid var(--line);
  border-radius:16px;box-shadow:var(--sh-1);padding:18px}
.lui-card--plain{background:var(--paper-card)}
.lui-card--flat{box-shadow:none}
/* 无内边距变体：卡内是整幅内容（画布 / 表格 / 全出血图片）时用 */
.lui-card--flush{padding:0;overflow:hidden}
.lui-card--raise{box-shadow:var(--sh-2)}
/* 深色卡（路书 `.pr-mech`：暖光晕 + 近黑渐变 + 白字 + 金字小标） */
.lui-card--dark{background:var(--glow-gold),linear-gradient(135deg,#232325,#131315);
  border:0;color:#FFFFFF}
.lui-card--dark .lui-card-t{color:var(--gold-lit)}
.lui-card--dark .lui-body{color:rgba(255,255,255,.85)}
/* 左描边卡（路书 `.pr-card`：承诺卡形态） */
.lui-card--quote{border-left:2px solid var(--ink-strong)}

/* ============================ 2. 虚线分隔 ============================ */
.lui-rule{border:0;border-top:1px dashed var(--line-2);margin:0}
.lui-rule--hair{border-top:1px solid var(--line)}
/* 模块之间带圆点的发丝线（路书 `.mod-rule`） */
.lui-rule--dot{position:relative;height:1px;margin:0;border:0;
  background:linear-gradient(90deg,transparent 0,var(--line-2) 14%,var(--line-2) 86%,transparent 100%)}
.lui-rule--dot::after{content:"";position:absolute;left:50%;top:-2px;width:5px;height:5px;
  border-radius:50%;background:#BFBAB1;transform:translateX(-50%)}

/* ============================ 3. 按钮 ============================ */
/* 基准 = 路书 `.cta-btn`（胶囊 + 深色 + 白字）；金色/幽灵/小号是变体 */
.lui-btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;
  width:100%;text-align:center;text-decoration:none;border:0;cursor:pointer;
  border-radius:999px;padding:13px 18px;font-family:inherit;font-size:14px;font-weight:700;
  background:var(--ink-strong);color:#FFFDF8;-webkit-appearance:none;appearance:none}
/* 金色主按钮：路书哑金实底（`.lang-toggle button.active` / `.st-chip` 同一支金） */
.lui-btn--gold{background:var(--gold);color:#FFFDF8}
.lui-btn--gold:active{background:var(--gold-ink)}
/* 幽灵按钮：路书 `.cta-btn.sec`（透明底 + 发丝描边） */
.lui-btn--ghost{background:transparent;border:1px solid var(--line);color:var(--ink-strong)}
/* 深色渐变：路书底部咨询条按钮 */
.lui-btn--ink{background:linear-gradient(135deg,#262628,#111112);color:#FFFFFF}
/* 金色描边胶囊：路书 `.letter-back`（深底上的次要动作） */
.lui-btn--outline-gold{background:transparent;border:1px solid rgba(217,197,140,.72);color:var(--gold-ink)}
.lui-btn--sm{width:auto;padding:8px 15px;font-size:12px;font-weight:700}
.lui-btn--xs{width:auto;padding:6px 12px;font-size:11.5px;font-weight:700}
.lui-btn:disabled,.lui-btn[disabled]{opacity:.55;cursor:default}
.lui-btn:focus-visible{outline:1.5px solid var(--ink-strong);outline-offset:2px}

/* ============================ 4. 胶囊标签 ============================ */
.lui-pill{display:inline-flex;align-items:center;gap:5px;min-height:22px;padding:0 10px;
  border-radius:999px;background:var(--paper-sub);border:1px solid var(--line-2);
  color:var(--ink-2);font-size:10.5px;font-weight:700;letter-spacing:.06em;white-space:nowrap}
/* 实底状态胶囊：路书 `.st-chip` 五态（待办金 / 进行陶土 / 完成绿 / 在线蓝 / 作废灰） */
.lui-pill--solid{background:var(--ink-strong);border-color:transparent;color:#FFFDF8;
  min-height:24px;padding:5px 11px;font-size:11.5px;letter-spacing:0}
.lui-pill--pending{background:var(--gold-ink)}
.lui-pill--active{background:var(--clay)}
.lui-pill--done{background:var(--ok)}
.lui-pill--live{background:var(--info)}
.lui-pill--void{background:var(--muted)}
.lui-pill--gold{background:var(--gold);border-color:transparent;color:#FFFDF8}
.lui-pill--ghost{background:transparent}

/* ============================ 5. 印章角标 ============================ */
/* 路书 `.letter-stamp`：哑金实底 + 近黑虚线框 + 3° 倾斜（信件情绪元素） */
.lui-stamp{display:inline-flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;
  width:44px;height:50px;background:var(--gold-lit);border:1.5px dashed #1A1A1A;
  transform:rotate(3deg);color:#1A1A1A;flex:0 0 auto}
.lui-stamp .st{font-size:13px;font-weight:900;line-height:1}
.lui-stamp .sb{font-family:var(--mono);font-size:6.5px;font-weight:800;letter-spacing:.1em;line-height:1}
.lui-stamp--plain{transform:none}
/* 落款角标：小号金色描边角章（深色底用 --lit 变体） */
.lui-seal{display:inline-flex;align-items:center;justify-content:center;min-width:52px;min-height:52px;
  padding:6px;border:1.5px solid var(--gold);border-radius:50%;color:var(--gold-ink);
  font-family:var(--serif);font-size:12px;font-weight:700;line-height:1.15;text-align:center;
  letter-spacing:.06em;transform:rotate(-4deg)}
.lui-seal--lit{border-color:var(--gold-lit);color:var(--gold-lit)}

/* ============================ 6. 说明区 ============================ */
/* 路书 `.stay-note` / `.exc-note`：浅内嵌面 + 虚线框 + 小字说明 */
.lui-note{background:var(--paper-sub);border:1px dashed var(--line-2);border-radius:12px;
  padding:12px 14px;font-size:12px;line-height:1.95;color:var(--ink-2)}
.lui-note b{color:var(--ink-strong);font-weight:700}
.lui-note--warn{background:#FDF6E3;border-color:#F0E6C8;color:#8A6D00}
.lui-note--warn b{color:#8A6D00}
.lui-note--tight{padding:9px 12px;font-size:11.5px;line-height:1.85}
/* 提示条（带左侧色条） */
.lui-callout{border-left:2px solid var(--gold);background:var(--paper-sub);border-radius:0 12px 12px 0;
  padding:11px 14px;font-size:12px;line-height:1.85;color:var(--ink-2)}
.lui-callout b{color:var(--ink-strong)}

/* ============================ 7. 品牌行（顶栏） ============================ */
/* 纸感品牌行：路书页脚 `.foot` 的等价物（logo 图直接落在暖白纸上） */
.lui-topbar{background:var(--glow-gold),var(--paper);text-align:center}
.lui-topbar .lui-logo{display:block;margin:0 auto;height:40px;width:auto;max-width:86%;
  object-fit:contain;-webkit-user-drag:none;user-select:none}
.lui-topbar--edge{border-bottom:1px solid var(--line)}

/* ============================ 8. 键值网格（信息卡） ============================ */
.lui-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px 12px}
.lui-grid .k{font-size:10.5px;color:var(--ink-2);letter-spacing:.08em}
.lui-grid .v{font-size:15px;font-weight:700;margin-top:6px;color:var(--ink-strong)}

/* ============================ 9. 打印 / 存 PDF ============================ */
/* 打印一律去浮夸：阴影/光晕不进纸（页脚 sticky、按钮等由各页面自己决定去留） */
@media print{
  .lui-card,.lui-shell{box-shadow:none}
  .lui-card{background:var(--paper-card)}
  .lui-stamp{transform:none}
}

/* ============================================================================
   T53b（2026-09-18 晚 钦阳：「我们公司内部的页面也可以设置成一样风格的页面，要不然总感觉
   怪怪的，至少交互上和视觉上应该要保持风格一致。」）

   内部控制台皮肤 = **同一份共享样式里的第二层**（不是第二套样式）：
     · 复用上面的 22 个 token 与 `lui-*` 组件语言（哑金 / 陶土 / 纸感 / 虚线 / 胶囊 / 发丝线）；
     · 本层只做一件事：把内部页**既有的类名**（`.header` / `.tab-bar` / `.act-btn` / `.card`…）
       重新表述成上面那套语言 —— ⛔ 不改布局、不改信息密度、不改 DOM 结构。

   ⛔ 作用域纪律：本层全部规则都挂在 `.lui-console` 下（五个内部页的 `<body class="lui-console">`）。
      客户面（`contract.html` / `quote.html`）**没有**这个类 → T53a 的验收基线一字不受影响。
   ⛔ 落位纪律：五页的 `<link rel="stylesheet" href="/static/limao-ui.css?v=1">` 放在页面
      自己的 `<style>` **之后**（`</head>` 前一行）→ 同权重时本层在后，覆盖是确定的；
      需要压过**内联 style="…"** 的地方（顶栏入口胶囊、JS 拼进 innerHTML 的按钮/徽标）
      只能上 `!important` —— 那些内联值来自模板 JS，本轮**JS 一字未改**（见交付说明第 5 节）。
   ============================================================================ */

/* ---- T53b-0. 旧调色板 → 路书色板（同名 token 就地换值：页面里成百处 var(--x) 一处生效）---- */
body.lui-console{
  --gold:#AE8B4E; --gold-ink:#8A6E3C; --gold-lit:#D9C58C; --clay:#A65D3F;
  --ink:#1A1A1A; --ink-light:#5F5C56;
  --paper:#F5F3EE; --paper-warm:#EFEDE8; --line:#E6E3DC;
  --green:#2F6B4F; --red:#A3402F;
  /* 语义色：路书色板内**各给一档**（成功/警告/危险/信息/待办/进行/作废）——
     全部由上面的 token 派生（降饱和、同色相家族），不引新色板、不引新字体 */
  --ok:#2F6B4F;     --ok-bg:#EBF0EC;     --ok-line:#CFDCD3;
  --warn:#8A6D00;   --warn-bg:#FDF6E3;   --warn-line:#F0E6C8;
  --danger:#A3402F; --danger-bg:#F8EFED; --danger-line:#E4CFC9;
  --info:#1F5C8B;   --info-bg:#EDF1F4;   --info-line:#D3DDE4;
  --todo:#8A6E3C;   --todo-bg:#F3EEE4;   --todo-line:#E2D8C6;
  --live:#A65D3F;   --live-bg:#F6EFEB;   --live-line:#E3D2C9;
  --muted:#7A7A7A;  --muted-bg:#F0EFEC;  --muted-line:#E0DED9;
  --r-sm:10px; --r-md:14px; --r-lg:16px;
  --focus:0 0 0 3px rgba(174,139,78,.22);
  background:var(--desk); color:var(--ink);
  font-family:-apple-system,"PingFang SC","Noto Sans SC","Microsoft YaHei",sans-serif;
  font-variant-numeric:tabular-nums; -webkit-font-smoothing:antialiased;
}
body.lui-console.lui-plain{background:var(--paper)}   /* 登录/员工页：整页就是一张纸 */

/* ---- T53b-1. 顶栏 → 纸感品牌行（默认没有底部边框：用 inset 阴影画发丝线，不改高度）
        ⛔ 只认 `body.lui-console` 的**直接子元素** `.header`（= 页顶栏）。
           员工只读页的 `.header` 是 `.wrap` 里的**深色品牌卡**（不是页顶栏）→ 天然不吃这条，
           它走自己的深色面板语言（见 member.html 的 T53b 页面块）。---- */
.lui-console > .header{
  background:var(--glow-gold),var(--paper); color:var(--ink);
  box-shadow:inset 0 -1px 0 var(--line);
}
.lui-console > .header .brand{color:var(--ink);font-weight:800;letter-spacing:.02em}
.lui-console > .header .brand span{color:var(--gold-ink)}
.lui-console > .header .user,
.lui-console > .header .right{color:var(--ink-2)}
.lui-console > .header .hdr-link,
.lui-console > .header .right a{
  color:var(--ink-strong)!important; background:var(--paper-card)!important;
  border:1px solid var(--line-2)!important; border-radius:999px!important;
}
.lui-console > .header .hdr-link:active,
.lui-console > .header .right a:active{background:var(--paper-warm)!important}
.lui-console > .header .city-picker{background:var(--paper-sub);border:1px solid var(--line);border-radius:999px}
.lui-console > .header .city-picker select{color:var(--gold-ink)}
.lui-console > .header .city-picker select option{color:var(--ink-strong)}

/* ---- T53b-2. 导航条 → 纸面 + 哑金短下划线 ---- */
.lui-console .tab-bar{background:var(--paper);border-bottom:1px solid var(--line)}
.lui-console .tab-btn{color:var(--ink-2);letter-spacing:.04em}
.lui-console .tab-btn.active{color:var(--ink-strong);font-weight:800}
.lui-console .tab-btn.active::after{
  background:var(--gold);height:2px;border-radius:2px;left:30%;right:30%}

/* ---- T53b-3. 纸感卡片（路书 `.lui-card` 的等价物：白纸 + 暖光晕 + 发丝线 + 16 圆角 + 一级阴影）---- */
.lui-console .quote-card,
.lui-console .res-card,
.lui-console .section,
.lui-console .day-editor,
.lui-console .price-card,
.lui-console .dept-row,
.lui-console .perm-group,
.lui-console .tpl-item,
.lui-console .res-list-item,
.lui-console .stat-card,
.lui-console .card{
  background:var(--glow-gold),var(--paper-card);
  border:1px solid var(--line); border-radius:var(--r-lg); box-shadow:var(--sh-1);
}
.lui-console .section h2,
.lui-console .modal h2,
.lui-console .sheet h3,
.lui-console .card h2{color:var(--ink-strong);font-weight:800}
.lui-console .section h2{border-bottom:1px solid var(--line);padding-bottom:10px}
.lui-console .day-header{background:var(--paper-sub);border-bottom:1px solid var(--line)}
.lui-console .dept-body{border-top:1px dashed var(--line-2)}
.lui-console .perm-group.final{background:var(--ok-bg);border-color:var(--ok-line)}
.lui-console .stat-card{background:var(--paper-sub);box-shadow:none}
.lui-console .stat-card .num{color:var(--ink-strong);font-weight:800}
.lui-console .stat-card .label{color:var(--ink-3)}
/* 小节标题：等宽眉标 + 一小段哑金下划线（路书 `.sec-kicker` 的语言，纯伪元素不加 DOM） */
.lui-console .section-title{
  color:var(--ink-strong);font-weight:800;border-bottom:1px solid var(--line);
  position:relative;padding-bottom:8px}
.lui-console .section-title::after{
  content:"";position:absolute;left:0;bottom:-1px;width:34px;height:2px;
  background:var(--gold);border-radius:2px}
.lui-console .step-title{color:var(--ink-2);font-weight:700}

/* ---- T53b-4. 按钮体系：主=哑金 / 正向=完成绿 / 次=幽灵胶囊 / 危险=降饱和红 ---- */
.lui-console .act-btn,
.lui-console .btn-small,
.lui-console .mode-btn,
.lui-console .add-btn,
.lui-console .res-type-tab,
.lui-console .tpl-chip,
.lui-console .pk-chip,
.lui-console .day-range-btn,
.lui-console .region-pick button,
.lui-console .thumb-act,
.lui-console .btn,
.lui-console .btn-cancel{
  background:transparent;border:1px solid var(--line-2);border-radius:999px;
  color:var(--ink-2);font-weight:700;font-family:inherit;
}
/* ⛔ 变体一律写在**基准之后**：同权重时后写的赢（`body.lui-console` 的 link 在页面 <style> 之后，
   但同一文件内仍然按源序比）—— 上一轮把 `.btn` 写在 `.btn-primary` 后面，登录页主按钮会被改成幽灵。 */
.lui-console .act-btn.primary,
.lui-console .btn.btn-primary,
.lui-console .btn-save{
  background:var(--gold);border:1px solid var(--gold);color:#FFFDF8;
}
.lui-console .act-btn.green{background:var(--ok);border-color:var(--ok);color:#FFFDF8}
.lui-console .act-btn.danger{
  background:var(--danger-bg);border-color:var(--danger-line);color:var(--danger)}
.lui-console .act-btn:disabled,.lui-console .btn:disabled,
.lui-console .btn-small:disabled{opacity:.5}
/* 选中/激活态：深入近黑（路书 `.lang-toggle button.active` 同一支墨） */
.lui-console .mode-btn.on,
.lui-console .res-type-tab.active,
.lui-console .tpl-chip.on{
  background:var(--ink-strong);border-color:var(--ink-strong);color:var(--gold-lit)}
.lui-console .day-range-btn.on,
.lui-console .region-pick button.on{background:var(--gold);border-color:var(--gold);color:#FFFDF8}
.lui-console .add-btn{border-style:dashed}
.lui-console .fab{
  background:linear-gradient(135deg,#262628,#111112);color:var(--gold-lit);
  box-shadow:var(--sh-2)}
/* 底部价格条：路书深色面语言（近黑渐变 + 哑金字 + 哑金胶囊） */
.lui-console .price-bar{
  background:var(--glow-gold),linear-gradient(135deg,#232325,#131315);
  color:#FFFFFF;box-shadow:var(--sh-up)}
.lui-console .price-bar .total-label{color:rgba(255,255,255,.62)}
.lui-console .price-bar .total-amount{color:var(--gold-lit);font-weight:800;letter-spacing:-.01em}
.lui-console .price-bar .btn-save{background:var(--gold);color:#FFFDF8;border-radius:999px}
.lui-console .price-bar #btn-back-new{
  background:transparent;border:1px solid rgba(217,197,140,.72);color:var(--gold-lit);
  border-radius:999px}

/* ---- T53b-5. 状态徽标：语义保留、整体降饱和（草稿灰 / 已发出·已完成蓝 / 已查看金 /
        已确认·已付绿 / 出行中陶土 / 作废灰）---- */
.lui-console .quote-card .status,
.lui-console .status-badge,
.lui-console .rb-badge,
.lui-console .exp-badge,
.lui-console .type-badge,
.lui-console .badge,
.lui-console .pill{
  border-radius:999px;font-weight:700;letter-spacing:.02em;border:1px solid transparent}
.lui-console .status-draft,.lui-console .s-draft,
.lui-console .status-replaced,.lui-console .s-replaced{
  background:var(--muted-bg);color:var(--muted);border-color:var(--muted-line)}
.lui-console .status-sent,.lui-console .s-sent,
.lui-console .status-completed,.lui-console .s-completed{
  background:var(--info-bg);color:var(--info);border-color:var(--info-line)}
.lui-console .status-viewed,.lui-console .s-viewed{
  background:var(--todo-bg);color:var(--todo);border-color:var(--todo-line)}
.lui-console .status-confirmed,.lui-console .s-confirmed,
.lui-console .status-deposit,.lui-console .s-deposit,
.lui-console .status-contract,.lui-console .s-contract,
.lui-console .status-insurance,.lui-console .s-insurance{
  background:var(--ok-bg);color:var(--ok);border-color:var(--ok-line)}
.lui-console .status-traveling,.lui-console .s-traveling{
  background:var(--live-bg);color:var(--live);border-color:var(--live-line)}
.lui-console .rb-badge.ok{background:var(--ok-bg);color:var(--ok)}
.lui-console .rb-badge.miss{background:var(--todo-bg);color:var(--todo)}
.lui-console .rb-line{border-radius:var(--r-sm);border:1px solid transparent}
.lui-console .rb-line.idle{background:var(--paper-sub);color:var(--ink-2);border-color:var(--line)}
.lui-console .rb-line.run{background:var(--info-bg);color:var(--info);border-color:var(--info-line)}
.lui-console .rb-line.ok{background:var(--ok-bg);color:var(--ok);border-color:var(--ok-line)}
.lui-console .rb-line.warn{background:var(--warn-bg);color:var(--warn);border-color:var(--warn-line)}
.lui-console .rb-line.err{background:var(--danger-bg);color:var(--danger);border-color:var(--danger-line)}
.lui-console .perm-chip{background:var(--paper-sub);border-color:var(--line);border-radius:999px}
.lui-console .perm-chip.on,
.lui-console .perm-chip.on span,
.lui-console .perm-chip input:checked+span{color:var(--info)}
.lui-console .perm-chip.on{background:var(--info-bg);border-color:var(--info-line)}
.lui-console .src-tag{border-radius:999px;border:1px solid transparent;font-weight:700}
.lui-console .src-tag-in{color:var(--todo);background:var(--todo-bg);border-color:var(--todo-line)}
.lui-console .src-tag-tpl{color:var(--ok);background:var(--ok-bg);border-color:var(--ok-line)}
/* 提示条 / 折叠行 / 匹配结果 */
.lui-console .match-summary{border-radius:var(--r-sm)}
.lui-console .match-summary.hit{background:var(--ok-bg);border-color:var(--ok-line);color:var(--ok)}
.lui-console .match-summary.miss{background:var(--warn-bg);border-color:var(--warn-line);color:var(--warn)}
.lui-console .exp-fold-head{background:var(--paper-sub);border-color:var(--line);border-radius:var(--r-md)}
.lui-console .void-fold-head{background:var(--warn-bg);border-color:var(--warn-line)}
.lui-console .res-pill,.lui-console .city-tag{
  background:var(--paper-sub);border:1px solid var(--line-2);border-radius:999px;color:var(--ink-2)}
.lui-console .res-pill .remove,.lui-console .city-tag .rm{color:var(--danger)}

/* ---- T53b-6. 表单控件：统一圆角/边框/聚焦态（路书 `--line` + 哑金聚焦环）---- */
.lui-console .form-group input,.lui-console .form-group select,.lui-console .form-group textarea,
.lui-console .city-search input,.lui-console .city-pick input,.lui-console .tpl-search,
.lui-console .tpl-search input,.lui-console .filter-select,.lui-console .room-row input,
.lui-console .city-search-dd{
  background:var(--paper-card);border:1px solid var(--line);color:var(--ink-strong);
  font-family:inherit;border-radius:var(--r-sm)}
.lui-console .city-search-dd{box-shadow:var(--sh-2)}
.lui-console .city-search-dd .cs-item{border-bottom:1px dashed var(--line)}
.lui-console .city-search-dd .cs-item:hover,
.lui-console .city-search-dd .cs-item.active{background:var(--paper-sub)}
.lui-console input:not([type="checkbox"]):not([type="radio"]),
.lui-console select,.lui-console textarea{border-radius:var(--r-sm)!important}
.lui-console input:focus,.lui-console select:focus,.lui-console textarea:focus{
  outline:none;border-color:var(--gold);box-shadow:var(--focus)}
.lui-console input[type="checkbox"],.lui-console input[type="radio"]{accent-color:var(--gold)}
.lui-console #fx-rate[readonly],
.lui-console input[readonly]{background:var(--paper-sub);color:var(--ink-3);cursor:default}
.lui-console .fx-note,.lui-console .hint{color:var(--ink-3)}

/* ---- T53b-7. 弹窗 / 遮罩 ---- */
.lui-console .modal-overlay,.lui-console .overlay{background:rgba(24,24,26,.42)}
.lui-console .modal,.lui-console .sheet{
  background:var(--paper-card);border:1px solid var(--line);border-radius:20px;
  box-shadow:var(--sh-3)}

/* ---- T53b-8. 表格（管理端）：发丝线 + 等宽小表头，不用斑马纹 ---- */
.lui-console th{color:var(--ink-2);font-weight:700;letter-spacing:.06em;
  border-bottom:1px solid var(--line-2);background:transparent}
.lui-console td{border-bottom:1px solid var(--line);color:var(--ink)}
.lui-console tbody tr:hover td{background:var(--paper-sub)}

/* ---- T53b-9. 空态 / 加载态：一条居中的「发丝线 + 圆点」（路书 `.mod-rule` 语言）---- */
.lui-console .empty,.lui-console .tpl-empty{
  color:var(--ink-3);font-size:13px;text-align:center}
.lui-console .empty::before,.lui-console .tpl-empty::before{
  content:"";display:block;width:120px;height:1px;margin:0 auto 14px;position:relative;
  background:linear-gradient(90deg,transparent 0,var(--line-2) 16%,var(--line-2) 84%,transparent 100%)}
.lui-console .empty::after,.lui-console .tpl-empty::after{content:none}

/* ---- T53b-10. 极小字/次要文字的暖灰统一（旧皮是冷灰 #999/#666/#888/#bbb）---- */
.lui-console [style*="color:#999"],.lui-console [style*="color: #999"],
.lui-console [style*="color:#bbb"],.lui-console [style*="color: #bbb"],
.lui-console [style*="color:#888"],.lui-console [style*="color: #888"]{color:var(--ink-3)!important}
.lui-console [style*="color:#666"],.lui-console [style*="color: #666"]{color:var(--ink-2)!important}

/* ---- T53b-11. JS 内联色收口（⛔ 模板 JS 本轮一字未改 → 只能从 CSS 侧按"内联值"精确命中）。
        每一对「内联值 → 语义档」都被 `scripts/t53b_verify.py ⑤` 反向钉住：
        内联值一旦在模板 JS 里消失，断言立刻红（防"改了 JS 而这条规则静默失效"）。---- */
.lui-console .act-btn[style*="#2d8659"]{
  background:var(--ok)!important;border-color:var(--ok)!important;color:#FFFDF8!important}
.lui-console .act-btn[style*="#3b82f6"]{
  background:var(--info)!important;border-color:var(--info)!important;color:#FFFDF8!important}
/* 管家端「收尾款」= 收钱的主操作（JS 里写的是 #d97706）→ 提到哑金一档；
   同一个 #d97706 用在**徽标**上（⏳退款审核中 / ⚠️跟进）时仍是待办档 —— 见下面那条通用规则。 */
.lui-console .act-btn[style*="#d97706"],.lui-console .btn[style*="#d97706"]{
  background:var(--gold)!important;border-color:var(--gold)!important;color:#FFFDF8!important}
.lui-console .act-btn[style*="#15803d"],
.lui-console .act-btn[style*="#0f766e"]{
  background:var(--ok)!important;border-color:var(--ok)!important;color:#FFFDF8!important}
.lui-console [style*="background:#d97706"],.lui-console [style*="background: #d97706"]{
  background:var(--todo)!important;color:#FFFDF8!important;border-color:transparent!important}
.lui-console [style*="background:#3b82f6"],.lui-console [style*="background: #3b82f6"]{
  background:var(--info)!important;color:#FFFDF8!important;border-color:transparent!important}
.lui-console [style*="background:#0f766e"],.lui-console [style*="background: #0f766e"],
.lui-console [style*="background:#1a7f5a"],.lui-console [style*="background: #1a7f5a"]{
  background:var(--ok)!important;color:#FFFDF8!important}
.lui-console [style*="background:#eef2ff"],.lui-console [style*="background: #eef2ff"]{
  background:var(--info-bg)!important;color:var(--info)!important;border-color:var(--info-line)!important}
.lui-console [style*="#3730a3"]{color:var(--info)!important}
.lui-console [style*="background:#fff8e6"],.lui-console [style*="background: #fff8e6"],
.lui-console [style*="background:#fffbeb"],.lui-console [style*="background: #fffbeb"],
.lui-console [style*="background:#fff7ed"],.lui-console [style*="background: #fff7ed"],
.lui-console [style*="background:#fdf6ec"],.lui-console [style*="background: #fdf6ec"],
.lui-console [style*="background:#fef9e7"],.lui-console [style*="background: #fef9e7"]{
  background:var(--warn-bg)!important;border-color:var(--warn-line)!important}
.lui-console [style*="background:#f0fdf4"],.lui-console [style*="background: #f0fdf4"],
.lui-console [style*="background:#f7fbf8"],.lui-console [style*="background: #f7fbf8"]{
  background:var(--ok-bg)!important;border-color:var(--ok-line)!important}
.lui-console [style*="background:#fef2f2"],.lui-console [style*="background: #fef2f2"]{
  background:var(--danger-bg)!important;border-color:var(--danger-line)!important}
.lui-console [style*="#fcd34d"],.lui-console [style*="#f0d778"],.lui-console [style*="#f0d48a"],
.lui-console [style*="#eee6d8"]{border-color:var(--warn-line)!important}
.lui-console [style*="#86efac"]{border-color:var(--ok-line)!important}
.lui-console [style*="#fca5a5"]{border-color:var(--danger-line)!important}
.lui-console [style*="color:#d97706"],.lui-console [style*="color: #d97706"],
.lui-console [style*="color:#b45309"],.lui-console [style*="color: #b45309"],
.lui-console [style*="color:#92400e"],.lui-console [style*="color: #92400e"]{color:var(--warn)!important}
.lui-console [style*="color:#dc2626"],.lui-console [style*="color: #dc2626"],
.lui-console [style*="color:#c0392b"],.lui-console [style*="color: #c0392b"],
.lui-console [style*="color:#c62828"],.lui-console [style*="color: #c62828"]{color:var(--danger)!important}
.lui-console [style*="color:#15803d"],.lui-console [style*="color: #15803d"],
.lui-console [style*="color:#16a34a"],.lui-console [style*="color: #16a34a"],
.lui-console [style*="color:#2e7d32"],.lui-console [style*="color: #2e7d32"],
.lui-console [style*="color:#1a7f5a"],.lui-console [style*="color: #1a7f5a"]{color:var(--ok)!important}
.lui-console [style*="color:#e67e22"],.lui-console [style*="color: #e67e22"]{color:var(--todo)!important}
.lui-console [style*="color:#2563eb"],.lui-console [style*="color: #2563eb"]{color:var(--info)!important}
.lui-console [style*="color:#8a6d1f"],.lui-console [style*="color: #8a6d1f"]{color:var(--warn)!important}
.lui-console [style*="color:#5b7a67"],.lui-console [style*="color: #5b7a67"]{color:var(--ink-2)!important}
/* 分类徽标（管理端资源定价：5A/4A/全国通用/标准/简称）——各有语义，统一到色板内一档 */
.lui-console [style*="#d4af37"]{background:var(--gold-ink)!important;color:#FFFDF8!important}
.lui-console [style*="#8b9dc3"]{background:var(--muted)!important;color:#FFFDF8!important}
.lui-console [style*="background:#7c5cbf"],.lui-console [style*="background: #7c5cbf"],
.lui-console [style*="background:#2563eb"],.lui-console [style*="background: #2563eb"]{
  background:var(--info)!important;color:#FFFDF8!important}
.lui-console [style*="background:#dc2626"],.lui-console [style*="background: #dc2626"]{
  background:var(--danger)!important;color:#FFFDF8!important}
/* 零散暖色提示（管家端「建议售价/价格浮动」小黄条、管理端「待审批」计数） */
.lui-console [style*="color:#b8860b"],.lui-console [style*="color: #b8860b"],
.lui-console [style*="color:#b35800"],.lui-console [style*="color: #b35800"]{color:var(--warn)!important}
.lui-console [style*="background:#fef5e7"],.lui-console [style*="background: #fef5e7"]{
  background:var(--warn-bg)!important;border-color:var(--warn-line)!important}
.lui-console [style*="#e67e22"]{border-color:var(--warn-line)!important;color:var(--warn)!important}
.lui-console [style*="color:#b3aca0"],.lui-console [style*="color: #b3aca0"]{color:var(--ink-3)!important}
.lui-console [style*="color:#c9a227"],.lui-console [style*="color: #c9a227"]{color:var(--gold-lit)!important}
.lui-console [style*="color:#1a2236"],.lui-console [style*="color: #1a2236"]{color:var(--ink-strong)!important}

/* ---- T53b-12. 无障碍：键盘聚焦环（路书 `.lui-btn:focus-visible` 同一支墨）---- */
.lui-console a:focus-visible,.lui-console button:focus-visible,
.lui-console [role="button"]:focus-visible{outline:1.5px solid var(--ink-strong);outline-offset:2px}

/* ---- T53b-13. 打印：内部页一般不进纸，但打了也别带阴影/深底 ---- */
@media print{
  .lui-console .header,.lui-console .tab-bar{position:static}
  .lui-console .header{background:#fff!important;color:#000}
  .lui-console .price-bar,.lui-console .fab{display:none!important}
}

/* ---- T53b-14. `static/notify.js` 注入的品牌 toast / 确认框（六页共用，T53a 未动它）。
        它把样式表 append 到 `<head>`、把节点 append 到 `<body>`：
          · 样式表在本文件**之后** → 同权重它会赢 → 本层一律用 `.lui-console .lm-*` 的更高权重收口；
          · 节点在 `body.lui-console` 之内 → 选择器命中。
        ⛔ `notify.js` 本身一字未改（客户面 contract/quote 没有 `.lui-console` → T53a 基线不受影响）。---- */
.lui-console .lm-toast{
  background:var(--glow-gold),var(--paper-card);color:var(--ink);
  border:1px solid var(--line);border-left:4px solid var(--gold);
  border-radius:var(--r-md);box-shadow:var(--sh-2)}
.lui-console .lm-toast.lm-success{border-left-color:var(--ok)}
.lui-console .lm-toast.lm-error{border-left-color:var(--danger)}
.lui-console .lm-toast.lm-warn{border-left-color:var(--warn)}
.lui-console .lm-toast.lm-info{border-left-color:var(--gold)}
.lui-console .lm-toast .lm-toast-ic{color:#FFFDF8}
.lui-console .lm-toast.lm-success .lm-toast-ic{background:var(--ok)}
.lui-console .lm-toast.lm-error .lm-toast-ic{background:var(--danger)}
.lui-console .lm-toast.lm-warn .lm-toast-ic{background:var(--warn)}
.lui-console .lm-toast.lm-info .lm-toast-ic{background:var(--gold)}
.lui-console .lm-overlay{background:rgba(24,24,26,.42)}
.lui-console .lm-modal{
  background:var(--paper-card);border:1px solid var(--line);border-radius:20px;
  box-shadow:var(--sh-3)}
.lui-console .lm-modal-hd .lm-modal-ic{background:var(--paper-sub);color:var(--gold-ink)}
.lui-console .lm-modal-hd .lm-modal-ic.warn{background:var(--warn-bg);color:var(--warn)}
.lui-console .lm-modal-title{color:var(--ink-strong)}
.lui-console .lm-modal-body{color:var(--ink-2)}
.lui-console .lm-modal-ft button{border-radius:999px;font-weight:700}
.lui-console .lm-modal-ft .lm-cancel{background:transparent;border:1px solid var(--line-2);color:var(--ink-2)}
.lui-console .lm-modal-ft .lm-ok{background:var(--gold);color:#FFFDF8}
.lui-console .lm-modal-ft .lm-ok.danger{background:var(--danger)}
.lui-console .lm-modal-input{
  background:var(--paper-card);border:1px solid var(--line);color:var(--ink-strong);border-radius:var(--r-sm)}
.lui-console .lm-modal-input:focus{border-color:var(--gold);box-shadow:var(--focus)}
