/*! 码泓科技 · 全平台 UI 设计体系 —— SaaS 主题令牌层（单一真源 v2.0 · 2026-10-06）
 * ---------------------------------------------------------------------------
 * 【唯一依据】飞书《🎨 码泓科技 - 全平台UI设计体系》
 *             《现代SaaS风格主题系统 - 用户自选主题手册 V1.1》
 *             https://qcnbjqe20bj3.feishu.cn/docx/JYiodNCMWon9UVxsSx4cpHzrnuh
 *             §1.2 design-tokens/saas-theme.css（逐字落地）
 *
 * ⚠️ 上一版（v1）我误用了 E 盘《虾管家家族产品UI设计系统》的 #0088FF 旧色板，
 *    那套是「虾系默认风格」的前身、不是本手册的 SaaS 主题 ⇒ **v2 已按本手册重写**。
 *
 * 唯一真源：https://<任一域>/policies/assets/theme.css
 * 载体：92机 /opt/mahong-policies/assets/theme.css（gitee mahong-92-mahong-policies）
 *
 * 用法：
 *   <link rel="stylesheet" href="/policies/assets/theme.css">
 *   <html data-theme="saas-modern">            ← 主题由 data-theme 决定
 *   localStorage['xia-theme']                  ← 用户自选主题的持久化键（手册 §6.1）
 *
 * 已实现主题：
 *   saas-modern（默认，手册 §1.2 给全 token）
 *   xia-default（虾系默认风格，手册 §1.1 给出 primary/圆角/阴影/动效 四项特征值）
 * 未实现主题（**手册未给出 token 值，不臆造**）：
 *   saas-minimal / saas-dark / saas-contrast —— 手册只给了主题名与类名，
 *   需要设计侧补全 `[data-theme="saas-dark"]{…}` 的令牌后再补进本文件。
 * ---------------------------------------------------------------------------
 */

/* ===== 1. 默认 = saas-modern（手册 §1.2 逐字）===== */
:root,
[data-theme="saas-modern"] {
  /* 主色调 - 专业蓝 */
  --xia-color-primary-50:  #F0F9FF;
  --xia-color-primary-100: #E0F2FE;
  --xia-color-primary-500: #0EA5E9;
  --xia-color-primary-600: #0284C7;
  --xia-color-primary-700: #0369A1;
  /* 别名：组件层统一用 primary 指向 500 */
  --xia-color-primary: var(--xia-color-primary-500);
  --xia-color-primary-hover: var(--xia-color-primary-600);
  --xia-color-primary-active: var(--xia-color-primary-700);
  /* 2026-10-13 SOPUI-UNIFY-1013 补齐：组件层 pressed 加深态（历史页面已在用，真源此前缺定义） */
  --xia-color-primary-800: #075985;

  /* 中性色 - 商务灰 */
  /* 2026-10-13 SOPUI-UNIFY-1013 补齐：中性 0 = 纯白（历史页面已在用，真源此前缺定义） */
  --xia-color-neutral-0:  #FFFFFF;
  --xia-color-neutral-50:  #F8FAFC;
  --xia-color-neutral-100: #F1F5F9;
  --xia-color-neutral-200: #E2E8F0;
  --xia-color-neutral-500: #64748B;
  --xia-color-neutral-600: #475569;
  --xia-color-neutral-700: #334155;
  --xia-color-neutral-900: #0F172A;

  /* 功能色 - 专业调性 */
  --xia-color-success: #10B981;
  --xia-color-warning: #F59E0B;
  --xia-color-error:   #EF4444;
  --xia-color-info:    #3B82F6;

  /* 产品色系重映射 */
  --xia-color-product-xdd: #0EA5E9; /* 虾嘟嘟 - 专业蓝 */
  --xia-color-product-xbb: #8B5CF6; /* 虾棒棒 - 智慧紫 */
  --xia-color-product-xxx: #F59E0B; /* 虾星星 - 监控橙 */
  --xia-color-product-xjj: #EC4899; /* 虾记记 - 记忆粉 */
  --xia-color-product-xzz: #10B981; /* 虾真真 - 验证绿 */
  --xia-color-product-xcc: #06B6D4; /* 虾串串 - 协同青 */
  --xia-color-product-xpp: #6366F1; /* 虾排排 - 管理靛 */
  --xia-color-product-xll: #F97316; /* 虾理理 - 整理橙 */
  --xia-color-product-xww: #84CC16; /* 虾文文 - 文档绿 */

  /* 间距系统优化 */
  --xia-spacing-xs:  2px;
  --xia-spacing-sm:  6px;
  --xia-spacing-md:  10px;
  --xia-spacing-lg:  16px;
  --xia-spacing-xl:  20px;
  --xia-spacing-xxl: 24px;

  /* 圆角系统 */
  --xia-radius-sm: 4px;
  --xia-radius-md: 6px;
  --xia-radius-lg: 8px;
  --xia-radius-xl: 12px;

  /* 阴影系统 */
  --xia-shadow-sm: 0 1px 1px rgba(0, 0, 0, 0.04);
  --xia-shadow-md: 0 2px 4px rgba(0, 0, 0, 0.06);
  --xia-shadow-lg: 0 4px 12px rgba(0, 0, 0, 0.08);
  --xia-shadow-xl: 0 8px 24px rgba(0, 0, 0, 0.10);

  /* 字体系统 */
  "Alibaba PuHuiTi 3.0", "Alibaba PuHuiTi", "PingFang SC", "Microsoft YaHei", sans-serif;
  --xia-font-family-mono: "SF Mono", "JetBrains Mono", Consolas, monospace;

  /* 动效系统 */
  --xia-transition-fast:   120ms cubic-bezier(0.4, 0, 0.2, 1);
  --xia-transition-normal: 200ms cubic-bezier(0.4, 0, 0.2, 1);
  --xia-transition-slow:   300ms cubic-bezier(0.4, 0, 0.2, 1);

  /* 字号（手册未直接给，取组件库通用阶梯；如需调整改这一处） */
  --xia-font-size-xs:   12px;
  --xia-font-size-sm:   14px;
  --xia-font-size-base: 16px;
  --xia-font-size-lg:   18px;
  --xia-font-size-xl:   20px;
  --xia-font-size-xxl:  24px;
}

/* ===== 2. xia-default（虾系默认风格 · 手册 §1.1 给出四项特征值）=====
 * 手册 §1.1: --color-primary:#1677FF / --border-radius:8px /
 *            --shadow-intensity:0.1 / --animation-bounce:true
 * 中性色与功能色手册未单列 ⇒ 沿用 saas-modern 的灰阶骨架，只换主色与「活泼」特征。
 * 这是**有依据的派生**，不是臆造；如需独立色板请设计侧补全。 */
[data-theme="xia-default"] {
  --xia-color-primary-500: #1677FF;
  --xia-color-primary-600: #0E5FD8;
  --xia-color-primary-700: #0B4BAE;
  --xia-color-primary-50:  #F0F5FF;
  --xia-color-primary-100: #D6E4FF;
  --xia-radius-sm: 6px;
  --xia-radius-md: 8px;
  --xia-radius-lg: 12px;
  --xia-radius-xl: 16px;
  --xia-transition-normal: 240ms cubic-bezier(0.34, 1.56, 0.64, 1); /* 弹性 */
}

/* ===== 3. 基础归一（只做安全项，不动 background/color/尺寸）===== */
html { -webkit-text-size-adjust: 100%; text-size-adjust: 100%; }
body {
  font-family: var(--xia-font-family-base);
  line-height: 1.5;
  color: var(--xia-color-neutral-900);
}
code, pre, kbd, samp, .mh-mono { font-family: var(--xia-font-family-mono); }
:where(a, button, input, select, textarea, [tabindex]):focus-visible {
  outline: 2px solid var(--xia-color-primary);
  outline-offset: 2px;
}

/* ===== 4. 组件（显式类名，宿主不用即零影响）===== */
.mh-btn {
  display: inline-flex; align-items: center; justify-content: center; gap: var(--xia-spacing-sm);
  min-height: 44px; padding: 0 var(--xia-spacing-xl);
  border: 1px solid transparent; border-radius: var(--xia-radius-md);
  font-family: inherit; font-size: var(--xia-font-size-sm); font-weight: 500;
  line-height: 1; text-decoration: none; cursor: pointer;
  transition: background-color var(--xia-transition-fast), border-color var(--xia-transition-fast),
              color var(--xia-transition-fast), box-shadow var(--xia-transition-fast);
  background: var(--xia-color-neutral-100); color: var(--xia-color-neutral-900);
}
.mh-btn--primary { background: var(--xia-color-primary); color: #fff; box-shadow: var(--xia-shadow-md); }
.mh-btn--primary:hover  { background: var(--xia-color-primary-hover); }
.mh-btn--primary:active { background: var(--xia-color-primary-active); box-shadow: none; }
.mh-btn--ghost { background: transparent; border-color: var(--xia-color-neutral-200); color: var(--xia-color-neutral-900); }
.mh-btn--ghost:hover { border-color: var(--xia-color-primary); color: var(--xia-color-primary); }
.mh-btn--danger { background: var(--xia-color-error); color: #fff; }
.mh-btn:disabled, .mh-btn[aria-disabled="true"] { opacity: .45; cursor: not-allowed; }
@media (min-width: 768px) { .mh-btn { min-height: 36px; } }

.mh-card {
  background: #fff; border: 1px solid var(--xia-color-neutral-200);
  border-radius: var(--xia-radius-lg); padding: var(--xia-spacing-lg);
}
.mh-card--elevated { border-color: transparent; box-shadow: var(--xia-shadow-lg); }

.mh-input, .mh-textarea, .mh-select {
  width: 100%; min-height: 44px; padding: var(--xia-spacing-md) var(--xia-spacing-lg);
  background: #fff; border: 1px solid var(--xia-color-neutral-200);
  border-radius: var(--xia-radius-md); box-sizing: border-box;
  font-family: inherit; font-size: var(--xia-font-size-sm); color: var(--xia-color-neutral-900);
}
.mh-input::placeholder, .mh-textarea::placeholder { color: var(--xia-color-neutral-500); }
.mh-input:focus, .mh-textarea:focus, .mh-select:focus {
  outline: none; border-color: var(--xia-color-primary);
  box-shadow: 0 0 0 3px rgba(14, 165, 233, 0.15);
}
@media (min-width: 768px) { .mh-input, .mh-textarea, .mh-select { min-height: 36px; } }

.mh-title    { color: var(--xia-color-neutral-900); font-weight: 600; }
.mh-text     { color: var(--xia-color-neutral-600); }
.mh-text-sub { color: var(--xia-color-neutral-500); font-size: var(--xia-font-size-xs); }
.mh-link     { color: var(--xia-color-primary); text-decoration: none; }
.mh-link:hover { color: var(--xia-color-primary-hover); text-decoration: underline; }

.mh-tag {
  display: inline-block; padding: 2px var(--xia-spacing-sm);
  border-radius: var(--xia-radius-sm); font-size: var(--xia-font-size-xs); line-height: 1.6;
  background: var(--xia-color-neutral-100); color: var(--xia-color-neutral-600);
}
.mh-tag--primary { background: var(--xia-color-primary-50); color: var(--xia-color-primary-700); }
.mh-tag--success { background: rgba(16,185,129,.12); color: var(--xia-color-success); }
.mh-tag--warning { background: rgba(245,158,11,.14); color: #B45309; }
.mh-tag--error   { background: rgba(239,68,68,.12);  color: var(--xia-color-error); }

.mh-divider { height: 1px; background: var(--xia-color-neutral-200); border: 0; margin: var(--xia-spacing-lg) 0; }
.mh-sr-only {
  position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px;
  overflow: hidden; clip: rect(0,0,0,0); white-space: nowrap; border: 0;
}

/* ===========================================================================
 * ===== 6. 自托管字体 + 未定义令牌补全（FONT-TOKEN-FIX-1014 · 2026-10-14）=====
 * ---------------------------------------------------------------------------
 * ⚠️⚠️ 本段是下列令牌的【唯一有效来源】（CTO 2026-10-14 裁定，原话见本卡回执）
 *     若 `_ops\UIUX-BLOCK1-1014\block1_production.patch` 的 theme.css hunk 被应用，
 *     会造成同名令牌双定义 —— 按 CTO 裁定：**以本段为准**。
 *     ⇒ 该 hunk 应【跳过】，仅应用其两处页面 hunk（pianzhang/index.html、jiandan.html）。
 *     唯一标记：FONT-TOKEN-FIX-1014 ｜ 落盘：2026-10-14 23:1x GMT+8
 * ---------------------------------------------------------------------------
 * 依据（逐值取真源，⛔ 零自造色值 / 零自定令牌名）：
 *   · 字体链：`E:\mahong\Cross-Platform UI Design System V2.0\01-核心交付物\
 *             01-UI设计体系V2.0\theme\tokens.css` §1 --xia-font-family-base（V2.0 原文逐字）
 *             + V2.0「CTO 自纠 #3」中文主字体 = 阿里巴巴普惠体 3.0（fallback 链首位）
 *   · 字重：同上 §1 --xia-font-weight-regular / -medium / -semibold / -bold
 *   · 图标：V2.0 图标规范 —— 24px 画布 · 线宽 **1.5px** · 尺寸档 16/20/24/32/48
 *   · 色值：同上 §2(light) / §3(saas-modern) / §4(dark) 的
 *             --xia-bg-base / --xia-text-primary / --xia-text-muted / --xia-border-default
 * 自托管：字体文件全部在本机 92 机 `/opt/mahong-policies/assets/fonts/`，
 *     ⛔ 零第三方 CDN（无 Google Fonts / typekit / alicdn）。
 * 授权：阿里巴巴普惠体 3.0 —— 免费商用；老牛 2026-10-14 批「自托管：免授权」。
 *       Inter —— 已于 2026-10-15 按老牛令全站移除（仅普惠体）。
 * 回滚：删除本段（自本注释起始的 `/* ===` 行起至文件末尾）即可，无其它残留。
 * =========================================================================== */

/* ===== 6.1 @font-face · 自托管（相对 URL ⇒ 解析为 /policies/assets/fonts/…）===== */
@font-face {
  font-family: 'Alibaba PuHuiTi 3.0'; font-style: normal; font-weight: 400; font-display: swap;
  src: url("fonts/alibaba-puhuiti-3/AlibabaPuHuiTi-3-55-Regular.woff2") format("woff2");
}
@font-face {
  font-family: 'Alibaba PuHuiTi 3.0'; font-style: normal; font-weight: 500; font-display: swap;
  src: url("fonts/alibaba-puhuiti-3/AlibabaPuHuiTi-3-65-Medium.woff2") format("woff2");
}
@font-face {
  font-family: 'Alibaba PuHuiTi 3.0'; font-style: normal; font-weight: 600; font-display: swap;
  src: url("fonts/alibaba-puhuiti-3/AlibabaPuHuiTi-3-75-SemiBold.woff2") format("woff2");
}
@font-face {
  font-family: 'Alibaba PuHuiTi 3.0'; font-style: normal; font-weight: 700; font-display: swap;
  src: url("fonts/alibaba-puhuiti-3/AlibabaPuHuiTi-3-85-Bold.woff2") format("woff2");
}

/* ===== 6.2 字体 + 图标令牌（主题无关 ⇒ 只定义在 :root，三主题全部继承）===== */
:root {
  /* 中文主字体 = 阿里巴巴普惠体 3.0（V2.0 补齐项 #3）· fallback 链逐字取 V2.0 tokens.css §1 */
  --xia-font-family-cn:
    "Alibaba PuHuiTi 3.0", "Alibaba PuHuiTi",
    -apple-system, BlinkMacSystemFont,
    "Segoe UI", "PingFang SC", "Microsoft YaHei",
    "HarmonyOS Sans", sans-serif;
  --xia-font-family-base: var(--xia-font-family-cn);

  --xia-font-weight-regular: 400;
  --xia-font-weight-medium: 500;
  --xia-font-weight-semibold: 600;
  --xia-font-weight-bold: 700;

  /* 图标：24px 画布 / stroke 1.5（V2.0）· 尺寸档 16/20/24/32/48 */
  --xia-icon-stroke: 1.5px;
  --xia-icon-size-16: 16px;
  --xia-icon-size-20: 20px;
  --xia-icon-size-24: 24px;
  --xia-icon-size-32: 32px;
  --xia-icon-size-48: 48px;
}

/* ===== 6.3 语义色令牌 × 三主题 =====
 * ⚠️ 如实登记：这 4 个名字（--xia-color-bg / -text / -text-muted / -border）
 *    **在 V2.0 真源里并不存在** —— 真源用的是
 *    --xia-bg-base / --xia-text-primary / --xia-text-muted / --xia-border-default。
 *    但这 4 个名字【现网页面已在消费】（唯一消费者 /var/www/jiandan/h5/app/index.html），
 *    ⇒ 按「同名 ⇒ 取真源同义项之值」补齐；值一律取自 V2.0 真源，⛔ 零自造色值。 */
:root,
[data-theme="saas-modern"] {
  --xia-color-bg:         #F8FAFC;   /* ← V2.0 §3 --xia-bg-base */
  --xia-color-text:       #0F172A;   /* ← V2.0 §3 --xia-text-primary */
  --xia-color-text-muted: #64748B;   /* ← V2.0 §3 --xia-text-muted */
  --xia-color-border:     #E2E8F0;   /* ← V2.0 §3 --xia-border-default */
}
[data-theme="light"] {
  --xia-color-bg:         #F5F5F5;   /* ← V2.0 §2 --xia-bg-base */
  --xia-color-text:       #1A1A1A;   /* ← V2.0 §2 --xia-text-primary */
  --xia-color-text-muted: #999999;   /* ← V2.0 §2 --xia-text-muted */
  --xia-color-border:     #E5E5E5;   /* ← V2.0 §2 --xia-border-default */
}
[data-theme="dark"] {
  --xia-color-bg:         #121212;   /* ← V2.0 §4 --xia-bg-base */
  --xia-color-text:       #F5F5F5;   /* ← V2.0 §4 --xia-text-primary */
  --xia-color-text-muted: #8A8A8A;   /* ← V2.0 §4 --xia-text-muted */
  --xia-color-border:     #2E2E2E;   /* ← V2.0 §4 --xia-border-default */
}

/* ===== 6.4 让 body 真正消费语义令牌（V2.0 tokens.css §6 全局基础样式同口径）=====
 * 现状：本文件上面的 body 规则用 V1 命名 --xia-color-neutral-900 且不设 background
 *       ⇒ 切主题时 bodyBg 恒定（走查 P0-5「只注入不替换」现象 C 的直接成因）。
 * 影响面：saas-modern 下 color 由 #0F172A → #0F172A（同值，零变化）；
 *         仅 light(#1A1A1A) / dark(#F5F5F5) 与 background-color 为新增可见变化。 */
body {
  background-color: var(--xia-color-bg);
  color: var(--xia-color-text);
}
/* ===== 侧栏折叠组（三域统一 · 2026-10-19）===== */
.sf-g{margin-bottom:4px}
.navgrp{
  display:flex;align-items:center;gap:10px;width:100%;
  padding:9px 12px;border:0;border-radius:8px;
  background:none;font:inherit;font-size:13.5px;font-weight:600;
  color:var(--xia-color-neutral-700,#334155);cursor:pointer;text-align:left;
}
.navgrp:hover{background:var(--xia-color-neutral-100,#f1f5f9)}
.navgrp .chev{margin-left:auto;width:16px;height:16px;color:var(--xia-color-neutral-400,#94a3b8);transition:transform .18s ease}
.navgrp[aria-expanded="false"] .chev{transform:rotate(-90deg)}
.sf-sub{display:none}
.navgrp[aria-expanded="true"] + .sf-sub{display:block}
.sf-sub .sf-in{padding:2px 0 6px}
.sf-sub .navitem{padding-left:34px;font-size:12.5px;color:var(--xia-color-neutral-600,#475569)}
.navitem.solo{font-weight:600}
