/* xunjia 主站样式（由 index.html 内联 <style> 外置，2026-10-14 C 档·问题 4）
   唯一版本源＝config/settings.py APP_VERSION；serve_index 注入 ?v=，与 JS 外链同机制 */
/* ══════════════ 方向A 设计令牌（2026-10-21 UI 改版：主橙 #FF6A00 + 中性灰阶，浅色默认、深色跟随系统） ══════════════ */
:root {
  /* 品牌色（方向A 原型 --orange，仅主 CTA / 强调） */
  --accent: #FF6A00;            /* 主橙 */
  --accent-dark: #E65F00;       /* hover 加深 */
  --accent-fill: rgba(255,106,0,.12);
  --success: #34C759;
  --success-light: rgba(52,199,89,.14);
  --success-dark: #248A3D;
  --danger: #FF3B30;
  --danger-light: rgba(255,59,48,.1);
  --danger-dark: #D70015;
  --warning: #FF9500;
  --blue: #2563EB;             /* 地域链接蓝（💭-14 审查整改：统一引用，跨页一致） */
  --blue-dark: #1D4ED8;

  /* 背景 / 文字 / 边框（方向A：白底 + 中性灰阶，正文 #333 / 辅文 #666 / 弱化 #999） */
  --bg-page: #F7F7F7;
  --bg-card: #FFFFFF;
  --bg-fill: rgba(0,0,0,.05);
  --bg-fill-strong: rgba(0,0,0,.09);
  --text-primary: #333333;
  --text-secondary: #666666;
  --text-muted: #999999;
  --border-subtle: #E0E0E0;
  --border-strong: #CCCCCC;
  --separator: #EEEEEE;
  --row-stripe: rgba(0,0,0,.03);
  --header-bg: rgba(255,255,255,.85);
  --header-border: #E0E0E0;
  /* 方向A：cd 导航区对齐营销站新壳（白底/灰描边/深字/橙强调），暗色块在下方同步 */
  --cd-header-bg: #FFFFFF;
  --cd-header-border: #E0E0E0;
  --cd-nav-text: #333333;
  --cd-nav-hover-text: #FF6A00;
  --cd-nav-hover-bg: #FFF1E5;
  --table-head: #EEEEEE; /* 进度表头实色底（方向A --gray-100） */

  /* 圆角 / 阴影（方向A：小圆角 6px 体系；阴影走中性灰，去橙味） */
  --radius-card: 6px;
  --radius-btn: 4px;
  --radius-input: 4px;
  --radius-pill: 9999px;
  --shadow-card: 0 1px 2px rgba(0,0,0,.05), 0 4px 12px rgba(0,0,0,.05);
  --shadow-pop: 0 4px 16px rgba(0,0,0,.10);

  /* 字体（方向A：苹方/雅黑系统栈） */
  --font: "PingFang SC", "Microsoft YaHei", "Noto Sans SC", system-ui, sans-serif;

  /* 动效 */
  --ease: cubic-bezier(.25,.1,.25,1);
  --spring: cubic-bezier(.34,1.56,.64,1);
}
@media (prefers-color-scheme: dark) {
  :root {
    /* 方向A（艾总拍板）：暗色模式保留，橙相切新主色 FF6A00 系的暗色适配 */
    --accent: #FF8533;
    --accent-dark: #FFA066;
    --accent-fill: rgba(255,133,51,.16);
    --success: #30D158;
    --success-light: rgba(48,209,88,.24);
    --success-dark: #30D158;
    --danger: #FF453A;
    --danger-light: rgba(255,69,58,.14);
    --danger-dark: #FF6961;
    --warning: #FF9F0A;

    --bg-page: #000000;
    --bg-card: #1C1C1E;
    --bg-fill: rgba(120,120,128,.2);
    --bg-fill-strong: rgba(120,120,128,.28);
    --text-primary: #FFFFFF;
    --text-secondary: rgba(235,235,245,.6);
    --text-muted: rgba(235,235,245,.35);
    --border-subtle: rgba(84,84,88,.45);
    --border-strong: rgba(84,84,88,.7);
    --separator: rgba(84,84,88,.35);
    --row-stripe: rgba(255,255,255,.04);
    --header-bg: rgba(20,20,22,.72);
    --header-border: rgba(255,255,255,.1);
    /* v2.9.81 方案A（艾总拍板）：移植头跟随页面暗色——与询价工具自身 .header 同语言（方向A：橙相切 FF8533） */
    --cd-header-bg: rgba(28,28,30,.85);
    --cd-header-border: rgba(255,255,255,.12);
    --cd-nav-text: rgba(235,235,245,.92);
    --cd-nav-hover-text: #FF8533;
    --cd-nav-hover-bg: rgba(255,133,51,.16);
  --table-head: #2C2C2E; /* 进度表头实色底，比卡片浅一档以凸显 */
    --shadow-card: 0 1px 2px rgba(0,0,0,.4), 0 4px 14px rgba(0,0,0,.35);
    --shadow-pop: 0 4px 16px rgba(0,0,0,.5);
  }
}

*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
body{font-family:var(--font);background:var(--bg-page);color:var(--text-primary);line-height:1.5;min-height:100vh;-webkit-font-smoothing:antialiased;transition:background .3s var(--ease)}

/* ── 内联 SVG 线条图标（替代 Remix 字体图标：跨浏览器/系统稳定渲染，不依赖字体文件、不受 MIME/CORS/隐私策略影响） ── */
.ico{width:1em;height:1em;display:inline-block;flex-shrink:0;vertical-align:-.15em;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.ico-fill{fill:currentColor;stroke:none}
.ico-spin{animation:ico-spin .9s linear infinite;transform-origin:center}
@keyframes ico-spin{to{transform:rotate(360deg)}}
.header-accent .ico{width:18px;height:18px}
.step-icon .ico{width:18px;height:18px}
.btn-remove .ico{width:15px;height:15px}
.btn-add .ico{width:15px;height:15px}
.btn-download .ico{width:16px;height:16px}
.config-icon.ico{width:17px;height:17px}

/* ── Header（毛玻璃） ── */
.header{background:var(--header-bg);-webkit-backdrop-filter:saturate(180%) blur(20px);backdrop-filter:saturate(180%) blur(20px);height:56px;display:flex;align-items:center;padding:0 28px;gap:12px;box-shadow:inset 0 -0.5px 0 var(--header-border);position:sticky;top:0;z-index:10}
.header-accent{width:28px;height:28px;border-radius:8px;background:var(--accent);display:flex;align-items:center;justify-content:center;color:#fff;font-size:16px;flex-shrink:0}
.header h1{font-size:17px;font-weight:600;white-space:nowrap;letter-spacing:-.2px}
.header-subtitle{font-size:13px;color:var(--text-muted);white-space:nowrap}
.header-nav{margin-left:auto;font-size:14px;font-weight:500;color:var(--accent);text-decoration:none;white-space:nowrap;padding:6px 12px;border-radius:8px;transition:background .2s}
.header-nav:hover{background:var(--accent-fill)}

/* ── Layout ── */
.page{display:flex;gap:24px;padding:32px;max-width:1440px;margin:0 auto;justify-content:center}
.sidebar{width:600px;flex-shrink:0}
.main{flex:0 0 0;width:0;overflow:hidden;opacity:0;transform:translateX(30px);pointer-events:none}
.page--queried .main{flex:1;width:auto;overflow:visible;opacity:1;transform:translateX(0);pointer-events:auto;transition:opacity .5s ease .2s,transform .6s cubic-bezier(.22,.61,.36,1) .2s}

/* ── Cards ── */
.card{background:var(--bg-card);border:1px solid var(--border-subtle);border-radius:var(--radius-card);box-shadow:none;overflow:hidden}
.filter-card{padding:24px;display:flex;flex-direction:column;gap:18px;height:100%}
.table-card{padding:24px}

/* ── Form ── */
.filter-title{font-size:18px;font-weight:700;letter-spacing:-.3px;margin:0}
.field-label{font-size:14px;font-weight:700;color:var(--text);display:block;margin-bottom:6px;padding-left:10px;border-left:3px solid var(--accent);letter-spacing:-.1px}
.select-wrap,.input-wrap{position:relative;width:100%}
select,input[type=number]{width:100%;height:44px;border:0;border-radius:var(--radius-input);padding:0 12px;font-size:15px;font-family:var(--font);color:var(--text-primary);background:var(--bg-fill);appearance:none;-webkit-appearance:none;transition:box-shadow .15s var(--ease),background .15s var(--ease)}
select:hover,input[type=number]:hover{background:var(--bg-fill-strong)}
select:focus,input[type=number]:focus{outline:none;background:var(--bg-card);box-shadow:0 0 0 2px var(--accent)}
.select-wrap::after{content:'';position:absolute;right:14px;top:50%;width:8px;height:8px;border-right:1.8px solid var(--text-muted);border-bottom:1.8px solid var(--text-muted);transform:translateY(-70%) rotate(45deg);pointer-events:none;border-radius:1px}
/* 磁盘行：容量 → 类型 → PL，每项带小标题 */
.disk-row{display:flex;flex-wrap:nowrap;gap:8px;align-items:flex-end;position:relative}
.disk-field{display:flex;flex-direction:column;gap:4px}
.disk-field-name{font-size:11px;color:var(--text-muted);line-height:1;white-space:nowrap}
.disk-row .disk-type-field{width:165px;flex-shrink:0}
.disk-row .disk-type-field select{width:100%;font-size:14px}
.disk-row .disk-size-field{flex-shrink:0}
.disk-row .disk-size-field input{width:175px}
.disk-row .perf-field{width:166px;flex-shrink:0}
.disk-row .perf-field select{width:100%;font-size:14px}
.disk-size-wrap{position:relative;display:flex;align-items:center;gap:6px;flex-shrink:0}
.disk-size-wrap .unit{font-size:13px;color:var(--text-secondary)}
.hint{font-size:12px;color:var(--text-muted);line-height:1.5}

/* ── 数据盘卡片分组（多盘一眼区分，iOS 分组卡风格） ── */
.disk-card{border:1px solid var(--border-subtle);border-radius:14px;background:var(--bg-fill);padding:14px 16px;margin-bottom:12px}
.disk-card:last-child{margin-bottom:0}
.disk-card__head{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}
.disk-card__title{display:flex;align-items:center;gap:8px;font-size:14px;font-weight:700;color:var(--text-secondary)}
.disk-card__num{flex-shrink:0;width:20px;height:20px;border-radius:50%;background:var(--accent);color:#fff;font-size:12px;font-weight:600;display:flex;align-items:center;justify-content:center;line-height:1}
.disk-card .btn-remove{width:30px;height:30px}

/* ── 选项分组卡片（CPU/内存、系统与带宽）── */
.opt-card{border:1px solid var(--border-subtle);border-radius:14px;background:var(--bg-fill);padding:14px 16px;margin-bottom:0}
.opt-card__head{display:flex;align-items:center;gap:8px;margin-bottom:12px}
.opt-card__title{display:flex;align-items:center;gap:8px;font-size:14px;font-weight:700;color:var(--text-secondary)}
.opt-card__num{display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;border-radius:7px;background:var(--accent);color:#fff;font-size:12px;font-weight:700;flex-shrink:0}
.opt-row{display:flex;gap:12px}
.spec-hint{margin-top:10px;font-size:12px;line-height:1.5;color:#8a5a00;background:rgba(255,149,0,.12);border:1px solid rgba(255,149,0,.45);border-radius:10px;padding:8px 10px}
/* ── v2.9.26：冲突自动调整的显著性提示（艾总拍板「方案 A」）────────────────
   ① toast 用琥珀警示色（绿色=成功，会把「系统改了你的输入」说成喜讯）；
   ② 被改控件加琥珀描边 + 轻抖 3 次（1.8s 自退）；③ 控件下方就地标注「原 X → 现 Y」。
   ⚠️ 描边只能用 ::before —— .select-wrap::after 已被下拉箭头占用（136~140 行）。 */
.toast-panel.warn{background:#FFF7E6;color:#8a5a00}
@media (prefers-color-scheme:dark){.toast-panel.warn{background:#3A2E12;color:#FAC775}}
.adj-flash{position:relative;animation:adjShake 1.8s var(--ease) both}
.adj-flash::before{content:"";position:absolute;inset:-4px;border:2px solid #F5A623;border-radius:12px;
  pointer-events:none;animation:adjRing 1.8s var(--ease) both}
@keyframes adjShake{0%{transform:translateX(0)}8%{transform:translateX(-4px)}16%{transform:translateX(4px)}
  24%{transform:translateX(-3px)}32%{transform:translateX(3px)}40%{transform:translateX(-2px)}
  48%{transform:translateX(2px)}60%,100%{transform:translateX(0)}}
@keyframes adjRing{0%,70%{opacity:1}100%{opacity:0}}
/* 系统开了「减少动效」→ 只保留描边与文字，绝不抖（否则会引起不适） */
@media (prefers-reduced-motion:reduce){.adj-flash{animation:none}.adj-flash::before{animation:none}}
.adj-note{margin-top:6px;font-size:12px;line-height:1.5;color:#8a5a00;background:rgba(255,149,0,.12);
  border:1px solid rgba(255,149,0,.45);border-radius:8px;padding:6px 9px}
/* ── v2.9.26：高级筛选（处理器型号/主频/睿频/架构）默认折叠 ──────────── */
.adv-head{display:flex;align-items:center;gap:10px;width:100%;padding:7px 10px;margin:0 0 2px;
  border:1px solid transparent;border-radius:10px;background:transparent;cursor:pointer;
  font-family:var(--font);font-size:13px;color:var(--text-secondary,#6E6E73);text-align:left}
.adv-head:hover{background:var(--bg-fill,#F5F5F7)}
.adv-head:focus-visible{outline:none;border-color:var(--accent,#FF6A00)}
/* v2.9.80 显隐治理：全站唯一隐藏工具类（替代 JS 行联 style.display，问题 11）；
   弹窗激活用 .modal-mask.open（原 JS 行联 display:flex 的等价类化）*/
.xj-hide{display:none!important}
.modal-mask.open{display:flex}
.adv-head__title{font-weight:600;white-space:nowrap;min-width:0;overflow:hidden;text-overflow:ellipsis}
.adv-summary{margin-left:auto;font-size:12px;color:var(--accent,#FF6A00);background:var(--accent-fill,#FFF1E5);
  border-radius:6px;padding:1px 7px;white-space:nowrap;max-width:56%;overflow:hidden;text-overflow:ellipsis}
.adv-summary.idle{color:var(--text-muted,#86868B);background:transparent;padding-left:0}
.adv-head[aria-expanded="true"] .type-card__caret{transform:rotate(180deg)}
.adv-body{padding-top:4px}
.opt-field{display:flex;flex-direction:column;gap:4px;flex:1;min-width:0}
.opt-field-name{font-size:11px;color:var(--text-muted);line-height:1;white-space:nowrap}
.bw-os-row .opt-field:first-child{flex:2}  /* 操作系统占 2/3 宽 */
.bw-os-row .opt-field:last-child{flex:1;min-width:0}   /* 带宽占 1/3 宽（减半） */

/* ── 进度步骤换行修复：地域成功标签独占一行，不再挤压步骤标题 ── */
.step-item{flex-wrap:wrap}
.step-label{white-space:nowrap;flex-shrink:0}
.step-info{width:100%}
.input-limit-hint{display:none;position:absolute;top:calc(100% + 6px);left:0;z-index:30;padding:6px 10px;font-size:12px;line-height:1.35;color:#fff;background:rgba(28,28,30,.95);border-radius:8px;white-space:nowrap;pointer-events:none;box-shadow:var(--shadow-pop)}
.input-limit-hint::before{content:'';position:absolute;bottom:100%;left:14px;border:5px solid transparent;border-bottom-color:rgba(28,28,30,.95)}
input[type=number]:focus ~ .input-limit-hint{display:block}
input[type=number].input-error,.input-error input[type=number]{box-shadow:0 0 0 2px var(--danger) !important;background:var(--danger-light) !important}

/* ── iOS 滑动开关 ── */
.ios-switch{display:flex;align-items:flex-start;gap:10px;cursor:pointer;user-select:none}
.ios-switch input{position:absolute;opacity:0;width:0;height:0}
.ios-switch .track{width:44px;height:27px;border-radius:var(--radius-pill);background:var(--bg-fill-strong);position:relative;flex-shrink:0;transition:background .25s var(--ease);margin-top:1px}
.ios-switch .track::after{content:'';position:absolute;top:2px;left:2px;width:23px;height:23px;border-radius:50%;background:#fff;box-shadow:0 2px 5px rgba(0,0,0,.2),0 0 1px rgba(0,0,0,.1);transition:transform .25s var(--spring)}
.ios-switch input:checked + .track{background:var(--success)}
.ios-switch input:checked + .track::after{transform:translateX(17px)}
.ios-switch input:focus-visible + .track{box-shadow:0 0 0 3px var(--accent-fill)}
.ios-switch .switch-text{font-size:13px;line-height:1.5;color:var(--danger)}
.ios-switch input:disabled + .track{opacity:.5}

/* ── Buttons ── */
.btn-add{display:inline-flex;align-items:center;gap:4px;margin-top:12px;padding:7px 14px;border-radius:var(--radius-pill);background:var(--accent-fill);color:var(--accent);font-size:13px;font-weight:600;border:0;cursor:pointer;transition:transform .15s var(--spring),opacity .15s}
.btn-add:hover{opacity:.85}
.btn-add:active{transform:scale(.95)}
.btn-add:disabled{opacity:.4;cursor:not-allowed;transform:none}
.btn-remove{width:32px;height:32px;border-radius:50%;border:0;background:var(--bg-fill);color:var(--text-muted);font-size:15px;cursor:pointer;display:flex;align-items:center;justify-content:center;flex-shrink:0;transition:all .15s var(--ease)}
.btn-remove:hover{background:var(--danger-light);color:var(--danger)}
.btn-primary{width:100%;height:50px;background:var(--accent);color:#fff;border:0;border-radius:var(--radius-btn);font-size:17px;font-weight:600;font-family:var(--font);cursor:pointer;transition:transform .15s var(--spring),background .15s var(--ease),opacity .15s;letter-spacing:-.2px}
.btn-primary:hover{background:var(--accent-dark)}
.btn-primary:active{transform:scale(.97)}
.btn-primary:disabled{opacity:.5;cursor:not-allowed;transform:none}
.btn-primary.is-stop{background:var(--danger)}
.btn-primary.is-stop:hover{background:var(--danger-dark)}
#btnQuery{margin-top:auto}

/* ── Results ── */
.results-header{display:flex;justify-content:space-between;align-items:center;padding-bottom:12px;gap:12px;flex-wrap:wrap}
.results-count{font-size:12px;color:var(--text-secondary)}
.btn-download{display:inline-flex;align-items:center;justify-content:center;gap:8px;width:580px;max-width:100%;height:50px;background:var(--accent);color:#fff;border:0;border-radius:var(--radius-btn);font-size:17px;font-weight:600;font-family:var(--font);cursor:pointer;transition:transform .15s var(--spring),background .15s var(--ease);letter-spacing:-.2px}
.btn-download:hover{background:var(--accent-dark)}
.btn-download:active{transform:scale(.97)}
.btn-download .ico{width:18px;height:18px}
.btn-download i{font-size:18px}
.config-bar{display:flex;align-items:center;gap:10px;padding:10px 14px;background:var(--bg-fill);border-radius:var(--radius-input);font-size:13px;color:var(--text-secondary);margin-bottom:16px;overflow-x:auto;line-height:1.5}
.config-icon{flex-shrink:0;font-size:17px;color:var(--text-secondary)}

/* ── Table ── */
/* 表头与表体分离：表头放在不滚动的 .thead-pane，滚动条只出现在 .tbody-pane，
   任何浏览器（含不支持 scrollbar-gutter 的旧 Safari）都不会让滚动条压到表头 */
.table-wrap{display:flex;flex-direction:column;overflow:hidden;background:var(--bg-card)}
.thead-pane{overflow-y:hidden;overflow-x:auto;flex:0 0 auto;scrollbar-gutter:stable}
.tbody-pane{overflow:auto;flex:1 1 auto;min-height:0;scrollbar-gutter:stable}
/* 表头面板隐藏横向滚动条（仅与表体 scrollLeft 同步用，避免双滚动条） */
.thead-pane{scrollbar-width:none}
.thead-pane::-webkit-scrollbar{display:none}
/* 两表固定布局，列宽由 CSS 统一约束，保证表头面板与表体面板列对齐 */
.rt{width:100%;border-collapse:collapse;table-layout:fixed}
.rt th:nth-child(1),.rt td:nth-child(1){width:44px}
.rt-region th:nth-child(1),.rt-region td:nth-child(1){width:34px}
/* 旧版 Safari(<18.3)不支持 scrollbar-gutter：手动给表头面板预留滚动条宽度，避免列错位、滚动条压表头 */
@supports not (scrollbar-gutter: stable){ .thead-pane{padding-right:15px} }
thead th{position:sticky;top:0;background:var(--bg-card);z-index:3;box-shadow:0 1px 0 var(--border-subtle)}
table{width:auto;min-width:100%;border-collapse:collapse;font-size:14px;table-layout:auto}
thead th{padding:12px 10px;text-align:center;font-weight:600;font-size:13px;color:var(--text-secondary);border-bottom:1px solid var(--border-subtle);white-space:nowrap}
tbody td{padding:13px 10px;text-align:center;border-bottom:1px solid var(--separator);font-variant-numeric:tabular-nums;white-space:nowrap}
/* 适配实例明细表：新增「处理器」(原第10列)/「处理器主频/睿频」(原第11列)。处理器型号可能很长，
   允许列内折行避免撑爆整表；主频/睿频内容短，定宽不换行。弹窗内容区 overflow:auto，
   列多时可横向滚动看全、不会丢列。
   ⚠️ v2.9.32：在「处理器」左侧插入「架构」列（新第10列），故下列编号整体 +1
   ——CSS 的 nth-child 是**硬编码列序**，插列不跟着改就会把宽度套到错列上。 */
/* v2.9.35：地域明细表「架构」列内容恒为 X86/ARM（≤3 字符），原 min-width:150px 把它撑得过宽；
   改为随内容宽度自适应（nowrap + 不加最小/最大宽），与「处理器」列(11)的折行宽区隔。 */
#regionDetailTable td:nth-child(10),#regionDetailTable th:nth-child(10){white-space:nowrap}
#regionDetailTable td:nth-child(11),#regionDetailTable th:nth-child(11){white-space:normal;word-break:break-word;min-width:150px;max-width:210px}
#regionDetailTable td:nth-child(12),#regionDetailTable th:nth-child(12){white-space:nowrap;min-width:120px}
/* 地域明细表：系统盘(第6列)/数据盘(第7列)列宽在前述「处理器」列(150/210px)基础上调大 8%，
   给磁盘「类型·容量·PL」长文本更宽展示空间（2026-08-20 用户要求）。min-width:162≈150×1.08；
   max-width:227≈210×1.08。两列允许折行避免撑爆整表（弹窗 overflow:auto 可横向滚动）。 */
#regionDetailTable td:nth-child(6),#regionDetailTable th:nth-child(6){white-space:normal;word-break:break-word;min-width:162px;max-width:227px}
#regionDetailTable td:nth-child(7),#regionDetailTable th:nth-child(7){white-space:normal;word-break:break-word;min-width:162px;max-width:227px}
/* 2026-08-20（价格明细弹窗）：1/3/5 年价格单元格可点开部件拆解。2.7.8 按艾总要求
   改为标准「蓝色链接字体、无下划线」样式；点击弹本地明细窗口（JS 已 preventDefault），
   非真实跳转链接，不会误触发文件下载（CSP/blob 下载机制）。 */
.price-link{color:#007AFF;cursor:pointer;font-weight:600;text-decoration:none;border-bottom:none;white-space:nowrap}
.price-link:hover{color:#0056b3;text-decoration:none}
.price-link:focus{outline:2px solid #007AFF;outline-offset:1px}
/* 明细弹窗（2026-08-20 2.7.9 苹果风 → 2.7.11 按艾总要求去毛玻璃）：遮罩只做轻微半透明、
   不再 backdrop blur，下层页面内容清晰可见；卡片圆角连续曲线、关闭按钮圆形填充、汇总区浮起。 */
#priceDetailModal{position:fixed;inset:0;z-index:1300;display:none;align-items:center;justify-content:center;background:rgba(0,0,0,.28);padding:20px}
#priceDetailModal.show{display:flex}
#priceDetailModal .pd-card{background:var(--bg-card);color:var(--text-primary);max-width:460px;width:100%;border-radius:22px;border:1px solid var(--border-subtle);box-shadow:0 24px 70px rgba(0,0,0,.28);overflow:hidden;animation:modalIn .34s var(--spring)}
#priceDetailModal .pd-head{display:flex;justify-content:space-between;align-items:center;padding:16px 20px;border-bottom:1px solid var(--separator);font-weight:600;font-size:15px;color:var(--text-primary);background:var(--bg-card)}
#priceDetailModal .pd-title{letter-spacing:-.2px}
#priceDetailModal .pd-close{cursor:pointer;border:none;width:28px;height:28px;border-radius:50%;background:var(--bg-fill-strong);color:var(--text-secondary);font-size:15px;line-height:1;display:flex;align-items:center;justify-content:center;transition:background .15s var(--ease),color .15s var(--ease)}
#priceDetailModal .pd-close:hover{background:var(--bg-fill);color:var(--text-primary)}
#priceDetailModal .pd-body{padding:8px 20px 20px}
#priceDetailModal .pd-row{display:flex;justify-content:space-between;align-items:center;padding:11px 0;border-bottom:1px solid var(--separator);font-variant-numeric:tabular-nums;font-size:14px}
#priceDetailModal .pd-row:last-of-type{border-bottom:none}
#priceDetailModal .pd-row .pd-comp{color:var(--text-secondary)}
#priceDetailModal .pd-row .pd-val{font-weight:600;color:var(--text-primary)}
#priceDetailModal .pd-total{display:flex;justify-content:space-between;align-items:center;margin-top:14px;padding:14px 16px;background:var(--accent-fill);border-radius:14px;font-weight:700;font-size:15px;color:var(--text-primary)}
#priceDetailModal .pd-total .pd-total-val{color:var(--accent);font-variant-numeric:tabular-nums}
#priceDetailModal .pd-avg{display:flex;justify-content:space-between;align-items:center;padding:10px 16px 0;color:var(--text-muted);font-size:12px}
#priceDetailModal .pd-avg .pd-avg-val{font-variant-numeric:tabular-nums}
#priceDetailModal .pd-empty{padding:24px;text-align:center;color:var(--text-muted)}
/* 2026-10-13：价格明细弹窗加原价/优惠价/折扣三列（数量>1 时明细与合计均按 N 台）。 */
#priceDetailModal .pd-grid4{display:grid;grid-template-columns:minmax(0,1.5fr) minmax(72px,max-content) minmax(72px,max-content) minmax(44px,max-content);align-items:center;gap:8px;font-variant-numeric:tabular-nums}
#priceDetailModal .pd-headrow{font-size:11px;color:var(--text-muted);padding:8px 0 4px;border-bottom:1px solid var(--separator)}
#priceDetailModal .pd-headrow .pd-h,#priceDetailModal .pd-grid4 .pd-orig,#priceDetailModal .pd-grid4 .pd-trade,#priceDetailModal .pd-grid4 .pd-zhe{text-align:right}
#priceDetailModal .pd-detail-row{border-bottom:1px solid var(--separator);padding:11px 0;font-size:14px}
#priceDetailModal .pd-detail-row .pd-orig,#priceDetailModal .pd-total .pd-orig{color:var(--text-muted);text-decoration:line-through}
#priceDetailModal .pd-detail-row .pd-trade{font-weight:600;color:var(--text-primary)}
#priceDetailModal .pd-detail-row .pd-zhe{color:var(--accent);font-weight:600;font-size:13px}
/* 2.9.82：无真实优惠的项原价不打删除线（pd-orig-plain），折扣列「无」用灰色弱显（pd-zhe-none）。 */
#priceDetailModal .pd-grid4 .pd-orig-plain{text-align:right;color:var(--text-muted)}
#priceDetailModal .pd-zhe-none{color:var(--text-muted);font-weight:400}
#priceDetailModal .pd-total.pd-grid4{margin-top:14px;padding:14px 16px;background:var(--accent-fill);border-radius:14px;font-weight:700;font-size:15px;color:var(--text-primary);border-bottom:none}
#priceDetailModal .pd-total .pd-trade{font-weight:700}
#priceDetailModal .pd-total .pd-total-trade{color:var(--accent)}
/* 2026-10-13：金额位数多（百万级）时右侧三列按内容自适应宽度，避免数字互相重叠；
   @supports subgrid 让表头/明细/合计共用同一套列宽，保持纵向对齐（旧浏览器退回上面的固定列宽布局）。 */
@supports (grid-template-columns: subgrid){
  #priceDetailModal .pd-body{display:grid;grid-template-columns:minmax(0,1fr) auto auto auto;column-gap:8px;align-items:center}
  #priceDetailModal .pd-grid4{display:grid;grid-column:1/-1;grid-template-columns:subgrid;gap:8px}
  #priceDetailModal .pd-avg{grid-column:1/-1}
  #priceDetailModal .pd-empty{grid-column:1/-1}
}
tbody td:nth-child(1),tbody td:nth-child(2),tbody td:nth-child(3),thead th:nth-child(1),thead th:nth-child(2),thead th:nth-child(3){text-align:left}
tbody tr:nth-child(even){background:var(--row-stripe)}
tbody tr.best-row{background:var(--success-light);box-shadow:inset 4px 0 0 var(--success)}
tbody tr{transition:background .15s var(--ease)}
tbody tr:hover,tbody tr:hover.best-row{background:var(--success-light)}
tbody tr:hover td{background:transparent}
.best-badge{display:inline-block;padding:3px 9px;background:var(--success);color:#fff;border-radius:var(--radius-pill);font-size:11px;font-weight:600;margin-left:8px;vertical-align:1px}
.price-accent{color:var(--success);font-weight:700;font-size:15px}
.price-bold{font-weight:600}
.price-avg{font-size:11px;color:var(--text-muted);font-weight:400;line-height:1.3;white-space:nowrap;margin-top:1px}
.text-muted{color:var(--text-muted)}
.text-warning{color:var(--warning)}

/* ── 状态组件 ── */
.spinner{width:26px;height:26px;border:3px solid var(--bg-fill-strong);border-top-color:var(--accent);border-radius:50%;animation:spin .8s linear infinite;margin:24px auto}
@keyframes spin{to{transform:rotate(360deg)}}
.error-box{background:var(--danger-light);color:var(--danger);padding:14px 16px;border-radius:var(--radius-input);font-size:14px;line-height:1.6}
.empty-state{text-align:center;padding:56px 24px;color:var(--text-muted)}
.empty-state i{font-size:44px;display:block;margin-bottom:12px;opacity:.5}

/* ── 进度步骤 ── */
.progress-track{background:var(--bg-fill-strong);border-radius:var(--radius-pill);height:6px;overflow:hidden;flex:1 0 0;min-width:0}
.progress-fill{background:var(--accent);height:100%;width:0%;border-radius:var(--radius-pill);transition:width .3s var(--ease)}
.progress-track-wrap{position:relative;display:flex;align-items:center;gap:10px;margin-bottom:20px}
.progress-percent{position:absolute;top:-16px;left:0;transform:translateX(-50%);font-size:11px;font-weight:700;color:var(--accent);white-space:nowrap;pointer-events:none}
.step-item{display:flex;align-items:center;gap:8px;font-size:13px;color:var(--text-secondary);padding:6px 0}
.step-item.active{color:var(--accent);font-weight:600}
.step-item.done{color:var(--text-secondary)}
.step-icon{width:22px;text-align:center;flex-shrink:0;font-size:15px;display:inline-flex;align-items:center;justify-content:center}
.step-item.done .step-icon{color:var(--success)}
/* 逐地域比价中 右侧状态文字：允许在固定宽度的左列内换行，避免把右侧两节点推得左右晃动 */
.step-detail{overflow-wrap:anywhere;min-width:0}

/* ── Footer note ── */
.fee-note{margin-top:16px;font-size:12px;color:var(--text-muted);line-height:1.6}

/* v3.2: 结果页布局 — 筛选:进度 = 480:720，结果卡片占满整行 */
.page.has-result{display:grid;grid-template-columns:600px 1200px;gap:16px;max-width:1880px;align-items:start}
.page.has-result .sidebar{width:600px;min-width:0;flex-shrink:0;align-self:stretch}
.page.has-result #loadingArea{width:1200px;min-width:0}
/* v3.2.1: 查询中立即固定 sidebar 和 loadingArea 宽度，不依赖 has-result 才生效 */
.page.loading .sidebar{width:600px;min-width:0;flex-shrink:0;align-self:stretch}
.page.loading #loadingArea{width:1200px;min-width:0}
.page.loading{display:grid;grid-template-columns:600px 1200px;gap:16px;max-width:1880px;align-items:start}
/* PDF 按钮居中 */
.results-header{display:flex;justify-content:center;align-items:center;margin-bottom:12px;scroll-margin-top:68px}
#resultsArea.has-result{grid-column:1/-1;display:flex;flex-direction:column;gap:12px;min-width:0;margin:0;width:100%;max-width:none}
#resultsArea.has-result .results-header{margin-bottom:0}
#resultsArea.has-result #loadingArea.compact .card{padding:14px}
#resultsArea.has-result #loadingArea.compact #progressText{font-size:13px;margin-bottom:8px}
#resultsArea.has-result #loadingArea.compact .progress-track{margin-bottom:0}
#resultsArea.has-result #loadingArea.compact .progress-track-wrap{margin-bottom:10px}
.page.has-result #loadingArea.compact .card{display:flex;flex-direction:column;min-height:100%}
#resultsArea.has-result #loadingArea.compact .step-item{font-size:11px;padding:3px 0}
/* 进度卡片撑到与 sidebar 同高 */
.page.has-result #loadingArea,.page.loading #loadingArea{align-self:stretch}
.page.has-result #loadingArea .card,.page.loading #loadingArea .card{display:flex;flex-direction:column;height:100%;overflow-y:auto}
/* regionResultsWrap：表头/表体分离（同结果卡），滚动条只在表体面板，绝不压表头；列宽按内容自适应(JS 同步两面板列宽) */
#regionResultsWrap{display:flex;flex-direction:column;border:0.5px solid var(--border-light);border-radius:0;overflow:hidden;background:var(--bg-card)}
/* 进度表：列宽按内容自适应（table-layout:auto）；表格 width:100%+min-width:100% 锁在卡片内、不超宽、无横向滚动条；
   短列(序号/地域/适配实例/结果)nowrap 不换行、按内容宽度自适应；长列(价格获胜实例/备注)自动换行吸收多余宽度 */
.rt-region{font-size:11px;border-collapse:separate;border-spacing:0;table-layout:auto;width:100%}
.rt-region thead th{position:sticky;top:0;z-index:3;padding:7px 8px;font-size:10px;font-weight:600;text-transform:none;letter-spacing:0;color:var(--text-secondary);background:var(--table-head);border-bottom:0.5px solid var(--border-light);white-space:nowrap;text-align:center;box-shadow:0 1px 0 var(--border-light)}
.rt-region tbody td{padding:8px 8px;font-size:11px;line-height:1.5;color:var(--text-primary);border-bottom:0.5px solid var(--separator);transition:background .15s var(--ease);white-space:normal;word-break:break-word;overflow-wrap:anywhere;vertical-align:middle}
/* 短内容列 */
.rt-region td:nth-child(1),.rt-region td:nth-child(2),.rt-region td:nth-child(3),.rt-region td:nth-child(5),.rt-region td:nth-child(6),.rt-region td:nth-child(7),.rt-region td:nth-child(11){white-space:nowrap}
/* 第4列「价格获胜实例」（v2.9.14 艾总要求）：机型名过长（如 ecs.ebmgn7ix-ant.8xlarge）
   原来被 nowrap 硬撑、把整表顶宽后右侧列被裁切；改为按内容自动换行——不超过 140px 的
   常规名（ecs.g7.xlarge）仍单行显示，超长名折成两行。min-width 防被压成逐字换行。 */
.rt-region td:nth-child(4){white-space:normal;word-break:break-word;overflow-wrap:anywhere;min-width:90px;max-width:140px}
/* 长内容列（备注） */
.rt-region td:nth-child(12){white-space:normal;word-break:break-word;overflow-wrap:anywhere;max-width:200px}
/* 居中列：适配实例数量(3)、获胜实例库存(5)、询价数量(6)、结果(10) */
.rt-region th:nth-child(3),.rt-region td:nth-child(3),.rt-region th:nth-child(6),.rt-region td:nth-child(6),.rt-region th:nth-child(7),.rt-region td:nth-child(7),.rt-region th:nth-child(11),.rt-region td:nth-child(11){text-align:center}
/* 价格列(7/8/9) */
.rt-region td:nth-child(8),.rt-region td:nth-child(9),.rt-region td:nth-child(10){text-align:right;white-space:nowrap;font-variant-numeric:tabular-nums}
.rt-region th:nth-child(8),.rt-region th:nth-child(9),.rt-region th:nth-child(10){text-align:right}
/* 最低价行高亮（_markBestRegion 标记）。背景跟随主题（深色模式自动用深绿淡底，白字清晰），左侧绿色竖条作强标识，深浅模式都醒目且不依赖底色对比度 */
.rt-region tbody tr.best-row{background:var(--success-light);box-shadow:inset 4px 0 0 var(--success)}

@media (prefers-color-scheme: dark) {
  /* 深色模式：最优惠行强制白字+浅绿价格，避免白字配浅绿看不清 */
  .rt-region tbody tr.best-row, tbody tr.best-row { color: #FFFFFF; }
  .rt-region tbody tr.best-row .price-accent, tbody tr.best-row .price-accent { color: #BFF0C9; }
}

.rt-region tbody tr:last-child td{border-bottom:none}
.rt-region tbody tr:hover{background:var(--row-stripe)}
/* 进度表格滚动条：查询中(loading)与结果并排(has-result)两种状态都生效；wrap 自身不滚动，滚动交给表体面板 */
#loadingArea.compact #regionResultsWrap{flex:1 1 auto;min-height:140px;overflow-x:auto}
#resultsArea.has-result #loadingArea.compact{position:static}
/* ── Mobile ── */
@media (max-width:900px){
  /* 单栏堆叠：筛选 / 进度 / 结果上下排列；用 flex 而非 block，确保 gap 间距生效（block 下 gap 无效会导致卡片贴在一起） */
  .page.has-result,.page.loading{display:flex}
  .page{flex-direction:column;padding:14px;gap:16px;justify-content:flex-start}
  /* 覆盖桌面固定列宽（480/720），移动端全部满宽；用同等特异性 + 靠后声明确保胜出 */
  .page.has-result .sidebar,.page.loading .sidebar{width:100%}
  .page.has-result #loadingArea,.page.loading #loadingArea{width:100%}
  #resultsArea.has-result #loadingArea.compact{position:static;margin-bottom:12px}

  .header{padding:0 16px}
  .header-subtitle{display:none}
  .header h1{font-size:16px}

  .sidebar{width:100%}
  .filter-card{padding:18px 14px}
  .table-card{padding:14px}

  /* 步骤行：移动端改 2 列网格（桌面端 3 列：第一行3个、第二行2个；窄屏自动折行） */
  #stepRow{grid-template-columns:repeat(2,1fr);gap:8px 12px;margin-bottom:6px}

  /* 进度卡片逐地域表格：仅在手机(≤600px)隐藏，平板/窄窗(601–900px)与电脑端均显示；
     手机隐藏规则见底部 @media(max-width:600px)（v2.9.80：JS 已改类切换，不再写行联 display） */

  /* 进度卡片：移动端不固定高度，表格限高后内部滚动 */
  .page.has-result #loadingArea .card,.page.loading #loadingArea .card{height:auto}
  #loadingArea.compact #regionResultsWrap{max-height:52vh}
  #loadingArea{scroll-margin-top:64px}

  /* 结果表格：缩小内边距/字号，横向滚动查看多列 */
  table{font-size:12px}
  .table-wrap td,.table-wrap th{padding:9px 7px}
  thead th{font-size:12px}
  .price-accent{font-size:13px}
  .price-avg{font-size:10px}

  /* 结果头部：下载按钮满宽 */
  .results-header{flex-direction:column;align-items:stretch;gap:8px;margin-bottom:10px}
  .btn-download{width:100%}

  /* 数据盘卡片移动端：卡片全宽纵向堆叠，内部 类型→容量→PL */
  .disk-card{padding:12px 14px}
  .disk-card .btn-remove{width:34px;height:34px}
  .disk-row{flex-wrap:wrap;row-gap:10px}
  .disk-row .disk-type-field{flex:1;min-width:0}
  .disk-row .disk-size-field{flex:1;min-width:0}
  .disk-row .disk-size-field input{width:100%}
  .disk-row .perf-field{width:100%;flex-basis:100%}
  .disk-row .region-scope-field{width:100%;flex-basis:100%}
  .disk-row .region-cities-field{width:100%;flex-basis:100%}
  .opt-row{flex-direction:row;flex-wrap:nowrap;gap:8px}
}
/* 仅手机(≤600px)隐藏进度卡片逐地域表格：屏幕太窄、6列表格易挤压成团；
   平板/窄窗(601–900px)与电脑端均正常显示。本规则与 .xj-hide 同向（都是 none），无对抗 */
@media (max-width:600px){
  #regionResultsWrap{display:none !important}
}
.page-footer{text-align:center;color:var(--text-muted);font-size:12px;padding:20px 16px;border-top:0.5px solid var(--border-subtle);margin-top:24px;line-height:1.7}
.page-footer .contact-line{margin-top:6px}
.page-footer a{color:inherit;text-decoration:underline}
/* 进度卡住安抚浮窗 */
.toast-panel{position:fixed;top:20px;right:20px;z-index:9999;max-width:360px;padding:14px 18px;border-radius:10px;background:#E8F5E9;color:#2E7D32;font-size:13px;line-height:1.6;box-shadow:0 3px 16px rgba(0,0,0,0.1);opacity:0;transform:translateY(-10px);transition:opacity .35s,transform .35s;pointer-events:none}
.toast-panel.show{opacity:1;transform:translateY(0)}
@media (prefers-color-scheme:dark){.toast-panel{background:#1B3A1B;color:#A5D6A7;box-shadow:0 3px 16px rgba(0,0,0,0.4)}}
/* 前端构建戳角标（诊断用）：跟随系统深浅自适应，深浅均清晰 */
#frontendBuildBadge{position:fixed;right:6px;bottom:6px;z-index:9999;font:11px/1.4 -apple-system,system-ui,sans-serif;color:#3c4043;background:rgba(0,0,0,.06);border:1px solid rgba(0,0,0,.12);padding:2px 6px;border-radius:4px;pointer-events:none;user-select:none}
@media (prefers-color-scheme:dark){#frontendBuildBadge{color:#e8eaed;background:rgba(255,255,255,.10);border-color:rgba(255,255,255,.18)}}

/* ── 动效偏好：用户系统开了"减少动态效果"则全部瞬切 ── */
@media (prefers-reduced-motion: reduce) {
  *,*::before,*::after{animation-duration:.01ms !important;transition-duration:.01ms !important}
}
/* ── 查询地域：两级联动（首级范围 select + 二级城市多选，外卡片 + 同行并排，对齐系统盘风格） ── */
/* 卡片内同行布局：范围 + 城市并排（与系统盘 类型 / 容量 / PL 一行一致） */
.disk-row .region-scope-field{flex:1 1 0;min-width:0}
.disk-row .region-scope-field select{width:100%;font-size:14px}
.disk-row .region-cities-field{flex:1 1 0;min-width:0}
.region-trigger{width:100%;height:44px;border:0;border-radius:var(--radius-input);padding:0 12px;font-size:14px;font-family:var(--font);color:var(--text-primary);background:var(--bg-fill);appearance:none;-webkit-appearance:none;text-align:left;cursor:pointer;transition:box-shadow .15s var(--ease),background .15s var(--ease)}
.region-trigger:hover{background:var(--bg-fill-strong)}
.region-trigger:focus{outline:none;background:var(--bg-card);box-shadow:0 0 0 2px var(--accent)}
.region-trigger:disabled{opacity:.5;cursor:not-allowed}
.region-trigger.placeholder{color:var(--text-muted)}
.region-wrap{position:relative}
.region-pop{position:absolute;top:calc(100% + 8px);left:0;right:0;background:var(--bg-card);border:1px solid var(--border-subtle);border-radius:14px;box-shadow:var(--shadow-pop);padding:14px 16px;z-index:30;max-height:min(60vh,400px);overflow-y:auto;opacity:0;transform:translateY(-6px) scale(.98);pointer-events:none;transition:opacity .22s var(--spring),transform .22s var(--spring)}
.region-wrap.open .region-pop{opacity:1;transform:none;pointer-events:auto}
/* 处理器型号文本较长，解除 right:0 锁定，让面板按内容自适应宽度，并设上下限兜底 */
#procMsPanel{left:0;right:auto;width:max-content;min-width:260px;max-width:min(460px,92vw)}
.rgroup{margin-bottom:10px}
.rgroup:last-of-type{margin-bottom:4px}
.rgroup__h{display:flex;align-items:center;justify-content:space-between;font-size:12.5px;font-weight:700;color:var(--text-secondary);margin-bottom:6px}
.rgroup__h .gall{font-size:12px;color:var(--accent);font-weight:600;cursor:pointer}
.ropt{display:flex;align-items:center;gap:10px;padding:9px 10px;border-radius:10px;cursor:pointer;user-select:none;transition:background .15s var(--ease)}
.ropt:hover{background:var(--bg-fill-strong)}
.ropt.on{background:var(--accent-fill)}
.ropt .cb{width:18px;height:18px;border-radius:5px;border:1.6px solid var(--border-strong);flex-shrink:0;display:flex;align-items:center;justify-content:center;transition:all .18s var(--spring)}
.ropt.on .cb{background:var(--accent);border-color:var(--accent)}
/* v2.9.24：卡内项「无货」标记（官网全量列出，但当前地域无在售机型 → 灰+禁用） */
.ropt .nodata{margin-left:auto;font-size:11px;color:var(--text-muted);background:var(--bg-fill);border-radius:6px;padding:1px 5px;flex-shrink:0}
.ropt .cb .ico{width:11px;height:11px;color:#fff;stroke-width:3;opacity:0;transform:scale(.4);transition:all .18s var(--spring)}
.ropt.on .cb .ico{opacity:1;transform:scale(1)}
.ropt .name{font-size:14px;color:var(--text-primary)}
/* 处理器型号联动置灰（recomputeGreys 给不匹配项加 .grey 类）：视觉变淡 + 禁点 */
.ropt.grey{opacity:.4;pointer-events:none}
.ropt.grey .name{color:var(--text-muted)}
/* CPU/内存 反向联动置灰（recomputeCpuMemGreys 给不匹配 option 加 disabled）：原生下拉禁用项醒目变灰 */
#cpu option:disabled, #memory option:disabled{color:#b5b5b5}
.ropt.grey:hover{background:transparent}
.region-done{width:100%;margin-top:12px;height:40px;border:0;border-radius:10px;background:var(--accent);color:#fff;font-size:14px;font-weight:700;font-family:var(--font);cursor:pointer;transition:background .15s}
.region-done:hover{background:var(--accent-dark)}
/* 地域明细弹窗 + 地域列蓝色链接（苹果风格：毛玻璃遮罩 / 大圆角卡片 / 细线分隔 / 弹簧动效） */
.region-link{color:var(--blue);text-decoration:none;font-weight:500;cursor:pointer;transition:color .15s var(--ease)}
.region-link:focus{outline:2px solid var(--blue);outline-offset:2px;border-radius:4px}
.region-link:hover{color:var(--blue-dark);text-decoration:underline}
.region-link:focus-visible{outline:2px solid var(--blue);outline-offset:2px;border-radius:4px}
.region-code{color:var(--text-muted);font-size:10px;font-weight:400;font-family:var(--font-mono,monospace)}
.modal-mask{position:fixed;inset:0;background:rgba(0,0,0,.4);backdrop-filter:saturate(180%) blur(20px);-webkit-backdrop-filter:saturate(180%) blur(20px);display:none;align-items:center;justify-content:center;z-index:1200;padding:20px}
.modal-box{background:var(--bg-card);border:1px solid var(--border-strong);border-radius:8px;max-width:94vw;max-height:88vh;display:flex;flex-direction:column;box-shadow:var(--shadow-pop);overflow:hidden;animation:modalIn .32s var(--spring)}
@keyframes modalIn{from{opacity:0;transform:scale(.96) translateY(8px)}to{opacity:1;transform:none}}
.modal-head{display:flex;justify-content:space-between;align-items:center;padding:16px 20px;border-bottom:1px solid var(--separator);font-weight:600;font-size:15px;color:var(--text-primary);flex-shrink:0}
.modal-head button{border:0;background:var(--bg-fill-strong);width:28px;height:28px;border-radius:50%;font-size:15px;line-height:1;cursor:pointer;color:var(--text-secondary);display:flex;align-items:center;justify-content:center;transition:background .15s var(--ease),color .15s var(--ease);flex-shrink:0}
.modal-head button:hover{background:var(--bg-fill);color:var(--text-primary)}
.modal-body{padding:0 14px 16px;overflow:auto}
#regionDetailTable{border-collapse:separate;border-spacing:0;width:100%;font-size:13px}
#regionDetailTable th,#regionDetailTable td{padding:10px 14px;white-space:nowrap;text-align:left;border-bottom:1px solid var(--separator)}
#regionDetailTable th{background:var(--table-head);position:sticky;top:0;z-index:1;font-weight:600;color:var(--text-secondary);font-size:12px}
#regionDetailTable tbody tr{transition:background .12s var(--ease)}
#regionDetailTable tbody tr:hover{background:var(--bg-fill)}
#regionDetailTable tbody tr:nth-child(even){background:var(--row-stripe)}
#regionDetailTable td[style*="text-align:right"]{color:var(--accent);font-weight:600;font-variant-numeric:tabular-nums}
/* 地域明细表磁盘列：每块磁盘（类型·容量·PL）作为整体占一行、行内不拆断；多块磁盘各自 .disk-line 垂直换行 */
#regionDetailTable .disk-line{white-space:nowrap;line-height:1.6}
/* 最低价行绿色底纹（按1年总价升序后首行即最低价） */
#regionDetailTable tbody tr.best-row{background:rgba(52,199,89,.14);box-shadow:inset 3px 0 0 #34C759}
#regionDetailTable tbody tr.best-row:hover{background:rgba(52,199,89,.20)}
/* 库存情况列颜色标识（苹果系统色） */
.stock-ok{color:#34C759;font-weight:600}
.stock-warn{color:#FF6A00;font-weight:600}
.stock-out{color:#FF3B30;font-weight:600}
.stock-dead{color:#8E8E93;font-weight:600}
/* 处理器多选下拉（#162） */
.ms{position:relative;width:100%}
.ms-btn{width:100%;height:38px;border:1px solid var(--border,#E5E5EA);border-radius:10px;background:var(--bg-section,#FAFAFA);color:var(--text,#1D1D1F);font-size:13px;font-family:var(--font);text-align:left;padding:0 12px;cursor:pointer;display:flex;align-items:center;justify-content:space-between}
.ms-btn::after{content:"";width:8px;height:8px;border-right:2px solid var(--text-secondary,#86868B);border-bottom:2px solid var(--text-secondary,#86868B);transform:rotate(45deg);margin-left:8px;opacity:.7}
.ms-btn.ms-active{border-color:var(--accent,#FF6A00);color:var(--accent,#FF6A00)}
.ms-panel{position:absolute;top:calc(100% + 6px);left:0;z-index:50;display:none;max-height:280px;overflow:auto;min-width:100%;max-width:min(220px,90vw);background:var(--bg-card,#fff);border:1px solid var(--border,#E5E5EA);border-radius:12px;box-shadow:0 8px 28px rgba(0,0,0,.16);padding:6px}
.ms-item{display:flex;align-items:center;gap:8px;padding:7px 10px;border-radius:8px;font-size:13px;cursor:pointer;white-space:normal;word-break:break-word}
.ms-item:hover{background:var(--bg-section,#FAFAFA)}
.ms-item input{accent-color:var(--accent,#FF6A00)}
.proc-filter-block{margin-top:14px;padding-top:14px;border-top:1px dashed var(--border-subtle,#E5E5EA)}
/* 实例类型多选（v1.3）：勾选色对齐型号下拉(.ms-item)主题橙，字号/灰度与卡内小字统一（暗色模式随 CSS 变量自适应） */
.cat-check-group{display:flex;flex-wrap:wrap;gap:8px 18px;padding-top:7px}
.cat-check{display:inline-flex;align-items:center;gap:6px;font-size:13px;line-height:1.4;color:var(--text-primary);cursor:pointer;-webkit-user-select:none;user-select:none}
.cat-check input{accent-color:var(--accent,#FF6A00);flex-shrink:0}
.cat-check-hint{font-weight:400;color:var(--text-muted)}
/* 查询中（disableFormInputs 给 label 挂 .cat-disabled）：文字随框同步置灰；用 color 继承而非 label
   opacity，避免与 input 行内 opacity:0.5 叠乘成 0.25；不依赖 :has()，老内核浏览器同样生效 */
.cat-check.cat-disabled{color:var(--text-muted);cursor:not-allowed}
.cat-check.cat-link-disabled{color:var(--text-muted);cursor:not-allowed}
.cat-check.cat-link-disabled input{pointer-events:none}
/* ── 实例类型卡片（v2.9.18 官网对齐）：5 张大卡 + 每卡「全部分类 ▾」下拉 ─────────────
   结构照阿里云官网（大卡横排 + 卡内分类下拉），配色/圆角/字号一律沿用本页既有变量，
   不引入官网蓝色，保证与原页面风格一致。 */
.type-cards{display:flex;gap:10px;flex-wrap:wrap;align-items:flex-start;padding-top:8px}
/* v2.9.24：卡片背景由白色改为**灰色**——它所在的「实例」卡本身就是灰底（--bg-fill），
   白卡浮在灰底上显得突兀（艾总 2026-09-21 指出不协调）。取比外框略深一档的灰
   （--bg-fill-strong）保证卡片仍有边界感，不会与外框糊成一片；深浅色主题自动跟随。 */
.type-card{flex:1 1 0;min-width:148px;position:relative;border:1px solid var(--border-subtle,#E5E5EA);border-radius:12px;background:var(--bg-fill-strong,rgba(120,120,128,.18));transition:border-color .18s var(--ease),box-shadow .18s var(--ease)}
.type-card.on{border-color:var(--accent,#FF6A00);box-shadow:0 0 0 1px var(--accent,#FF6A00)}
.type-card.grey{opacity:.45}
.type-card__head{display:flex;align-items:center;gap:8px;width:100%;padding:10px 12px;border:0;background:transparent;font-family:var(--font);font-size:13px;line-height:1.4;color:var(--text-primary);text-align:left;cursor:pointer;-webkit-user-select:none;user-select:none;border-radius:12px 12px 0 0;transition:background .15s var(--ease)}
.type-card.on .type-card__head{background:var(--accent-fill);color:var(--accent-dark,#C77800)}
.type-card__head:disabled{cursor:not-allowed}
/* v2.9.22：大卡不再用勾选框（原 .type-card__cb 整块移除）——默认"都不亮"表示不限，
   点哪张哪张亮（选中态=橙色描边+橙底）。勾选框会让人误以为"没打勾=不选这类"，
   与"默认不限"的语义正好相反。 */
.type-card__name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.type-card__sel{display:flex;align-items:center;justify-content:space-between;gap:6px;width:100%;padding:9px 12px;border:0;border-top:1px solid var(--border-subtle,#E5E5EA);background:transparent;font-family:var(--font);font-size:13px;color:var(--text-secondary);cursor:pointer;border-radius:0 0 12px 12px;transition:background .15s var(--ease)}
.type-card__sel:hover{background:var(--bg-fill)}
.type-card__sel:disabled{cursor:not-allowed}
.type-card__caret{width:0;height:0;border-left:4.5px solid transparent;border-right:4.5px solid transparent;border-top:5px solid var(--text-muted);flex-shrink:0;transition:transform .18s var(--ease)}
.type-card.open .type-card__caret{transform:rotate(180deg)}
.type-card__pop{position:absolute;top:calc(100% + 6px);left:0;min-width:200px;max-width:min(260px,86vw);max-height:266px;overflow:auto;z-index:60;display:none;padding:8px;background:var(--bg-card,#fff);border:1px solid var(--border-subtle,#E5E5EA);border-radius:12px;box-shadow:var(--shadow-pop)}
.type-card.open .type-card__pop{display:block}
.type-card__pop .ropt{padding:7px 9px}
.type-card__pop .ropt .name{font-size:13px}
.type-card__pop-hd{display:flex;align-items:center;justify-content:space-between;padding:2px 6px 6px;font-size:12px;color:var(--text-muted)}
.type-card__pop-hd .gall{cursor:pointer;color:var(--accent,#FF6A00)}
/* v2.9.25：用途分类 → 下钻「具体规格族」（带搜索框、可多选）。族面板比分类面板更高更宽，
   否则上百个族挤在 260px 里要点很久。max-height 用 vh 兜底，小屏也不会顶出视口。 */
.type-card__pop.fam-mode{max-width:min(340px,92vw);max-height:min(420px,72vh)}
.type-card__pop-hd .fam-back{cursor:pointer;color:var(--accent,#FF6A00);font-weight:600}
.type-card__pop-hd .fam-back:hover{text-decoration:underline}
.fam-title{padding:0 6px 6px;font-size:12px;color:var(--text-muted)}
.fam-search{width:100%;box-sizing:border-box;margin:0 0 6px;padding:7px 9px;font-size:13px;
  border:1px solid var(--border-subtle,#E5E5EA);border-radius:9px;background:var(--bg-fill,#F5F5F7);
  color:var(--text-primary,#1D1D1F);outline:none}
.fam-search:focus{border-color:var(--accent,#FF6A00)}
.fam-list{max-height:calc(min(420px,72vh) - 92px);overflow:auto}
.fam-empty{padding:14px 6px;font-size:12px;color:var(--text-muted);text-align:center}
.ropt .fam-arrow{margin-left:auto;font-size:12px;color:var(--text-muted);flex-shrink:0;
  padding:2px 6px;border-radius:6px;background:var(--bg-fill,#F5F5F7);cursor:pointer}
.ropt .fam-arrow:hover{background:var(--bg-fill-strong,#E9E9EC);color:var(--accent,#FF6A00)}
.ropt .fam-cnt{margin-left:auto;font-size:11px;color:var(--accent,#FF6A00);flex-shrink:0;
  background:var(--accent-fill,#FFF1E5);border-radius:6px;padding:1px 5px}
.ropt .fam-code{font-size:11px;color:var(--text-muted);margin-left:6px}

/* ── v2.9.65 SEO 文字内容块（2026-09-28 方案A：用户可见、百度可抓取，不影响工具交互） ── */
.seo-article{max-width:1440px;margin:24px auto;padding:0 32px}
.seo-inner{background:var(--bg-card);border:1px solid var(--border-subtle);border-radius:var(--radius-card);box-shadow:var(--shadow-card);padding:28px 32px}
.seo-article h2{font-size:20px;font-weight:700;letter-spacing:-.3px;margin-bottom:12px;color:var(--text-primary)}
.seo-article h3{font-size:16px;font-weight:700;margin:22px 0 8px;color:var(--text-primary);padding-left:10px;border-left:3px solid var(--accent)}
.seo-lead{font-size:15px;line-height:1.7;color:var(--text-secondary)}
.seo-article p{font-size:14px;line-height:1.75;color:var(--text-secondary);margin-top:8px}
.seo-steps{margin:8px 0 0 0;padding-left:22px}
.seo-steps li{font-size:14px;line-height:1.8;color:var(--text-secondary);margin-bottom:4px}
.seo-faq dt{font-size:14px;font-weight:700;color:var(--text-primary);margin-top:12px}
.seo-faq dd{font-size:14px;line-height:1.7;color:var(--text-secondary);margin-top:2px}
.seo-cta{font-size:14px;line-height:1.7;margin-top:18px;padding-top:14px;border-top:1px solid var(--border-subtle)}
.seo-cta a{color:var(--accent);font-weight:600;text-decoration:none}
.seo-cta a:hover{text-decoration:underline}
@media (max-width:768px){.seo-article{padding:0 16px}.seo-inner{padding:20px 18px}}


/* ===== 移植主页导航/页脚（作用域隔离 cd- 前缀，避免与询比价工具页原有样式冲突） ===== */
.cd-header{background:var(--cd-header-bg);border-bottom:1px solid var(--cd-header-border);box-shadow:none;position:relative;width:100%;z-index:1000}
@media (prefers-color-scheme:dark){
  .cd-header,.cd-nav-menu{-webkit-backdrop-filter:saturate(180%) blur(20px);backdrop-filter:saturate(180%) blur(20px)}
}
.cd-header .cd-container{display:flex;align-items:center;gap:20px;height:56px;max-width:1100px;margin:0 auto;padding:0 24px}
.cd-logo-link{display:block}
.cd-logo img{height:40px;width:auto;object-fit:contain}
.cd-nav-menu ul{display:flex;align-items:center;list-style:none;margin:0;padding:0;gap:4px}
.cd-nav-menu li a{display:block;padding:8px 14px;border-radius:4px;font-size:15px;font-weight:500;color:var(--cd-nav-text);text-decoration:none;transition:color .2s,background .2s}
.cd-nav-menu li a:hover{color:var(--cd-nav-hover-text);background:var(--cd-nav-hover-bg)}
.cd-nav-menu li.active a{color:#fff;background:var(--cd-nav-hover-text,#FF6A00)}
.cd-nav-toggle{display:none;flex-direction:column;justify-content:center;gap:5px;width:40px;height:40px;border:none;background:transparent;cursor:pointer;padding:0}
.cd-nav-toggle span{display:block;width:22px;height:2px;background:var(--cd-nav-text);border-radius:2px}
/* 横幅已移除：工具标题移入筛选卡片 H1（保留 H1 利于搜索引擎） */
/* 方向A（2026-10-21）：页脚转白底浅灰风（对齐营销站新壳 footer），暗色另覆 */
.cd-footer{background:#FFFFFF;border-top:1px solid #E0E0E0;padding:48px 0 32px;color:#666666;font-size:14px}
.cd-footer .cd-container{max-width:1100px;margin:0 auto;padding:0 24px}
.cd-footer-content{display:flex;flex-wrap:wrap;gap:32px}
.cd-footer-info{flex:1 1 260px}
.cd-footer-info h3{font-size:15px;margin:0 0 8px;color:#333333}
.cd-footer-info p{margin:0 0 6px;color:#666666;line-height:1.6}
.cd-footer-links{flex:1 1 160px}
.cd-footer-links h3{font-size:14px;margin:0 0 10px;color:#333333}
.cd-footer-links ul{list-style:none;margin:0;padding:0}
.cd-footer-links li{margin:0 0 8px}
.cd-footer-links a{color:#666666;text-decoration:none}
.cd-footer-links a:hover{color:#333333}
.cd-footer-info a{color:#666666;text-decoration:none;transition:color .2s}
.cd-footer-info a:hover{color:#FF6A00}
.cd-footer-copyright{margin-top:24px;padding-top:16px;border-top:1px solid #E0E0E0;color:#999999;font-size:13px;line-height:1.7;text-align:center}
.cd-footer-copyright p{margin:0}
.cd-footer-copyright a{color:#666666;text-decoration:none}
.cd-footer-copyright a:hover{color:#FF6A00}
@media (prefers-color-scheme: dark){
  .cd-footer{background:#1C1C1E;border-top-color:rgba(255,255,255,.12);color:rgba(235,235,245,.6)}
  .cd-footer-info h3,.cd-footer-links h3{color:rgba(235,235,245,.92)}
  .cd-footer-info p{color:rgba(235,235,245,.6)}
  .cd-footer-links a,.cd-footer-info a,.cd-footer-copyright a{color:rgba(235,235,245,.6)}
  .cd-footer-links a:hover,.cd-footer-copyright a:hover{color:#FF8533}
  .cd-footer-copyright{border-top-color:rgba(255,255,255,.12);color:rgba(235,235,245,.4)}
}
.cd-privacy{margin:0 0 10px}
.cd-footer-address{margin:6px 0 0}
@media(max-width:768px){
.cd-header .cd-container{height:56px;gap:12px}
.cd-logo{flex:1}
.cd-nav-toggle{display:flex}
.cd-nav-menu{position:absolute;top:56px;left:0;right:0;background:var(--cd-header-bg);box-shadow:0 8px 16px rgba(0,0,0,.08);display:none;z-index:1001}
.cd-nav-menu.open{display:block}
.cd-nav-menu ul{flex-direction:column;gap:0;padding:8px 0}
.cd-nav-menu li a{border-radius:0;padding:12px 24px}
}
/* 方向A：cd 产品 mega 下拉（桌面绝对面板 / 移动纵向折叠，同营销站壳） */
.cd-nav-parent{position:relative}
.cd-nav-caret{font:inherit;color:var(--cd-nav-text);background:none;border:none;cursor:pointer;padding:8px 14px;border-radius:4px;font-size:15px;font-weight:500;display:inline-flex;align-items:center;gap:4px;transition:color .2s,background .2s}
.cd-nav-caret:hover,.cd-nav-parent.open .cd-nav-caret{color:var(--cd-nav-hover-text);background:var(--cd-nav-hover-bg)}
.cd-nav-caret .cd-caret-ico{font-size:10px;opacity:.6}
.cd-mega{display:none;position:absolute;top:100%;left:0;min-width:280px;background:var(--bg-card);border:1px solid var(--border-subtle);border-radius:6px;box-shadow:0 8px 24px rgba(0,0,0,.08);padding:8px;z-index:1002}
.cd-mega.open{display:block}
.cd-mega a{display:block;padding:10px 12px;border-radius:4px;font-size:14px;color:var(--text-primary)}
.cd-mega a:hover{background:var(--bg-fill);color:var(--text-primary)}
.cd-mega a.active{color:#FF6A00;font-weight:600;background:var(--accent-fill)}
.cd-mega-desc{display:block;font-size:12px;color:var(--text-muted);margin-top:2px;font-weight:400}
@media(max-width:768px){
.cd-nav-parent{width:100%}
.cd-nav-caret{width:100%;text-align:left;padding:12px 24px;border-radius:0}
.cd-mega{position:static;display:none;box-shadow:none;border:none;border-radius:0;padding:0 12px;background:var(--bg-fill)}
.cd-mega.open{display:block}
.cd-mega a{border-radius:0;padding:10px 8px}
}
/* 方向A（2026-10-21）：cd 壳动作区（电话胶囊+咨询按钮）与移动底栏（对齐营销站新壳） */
.cd-header-actions{display:flex;align-items:center;gap:10px;flex-shrink:0;margin-left:auto}
.cd-phone-pill{font-size:13px;color:var(--cd-nav-text);white-space:nowrap;opacity:.85}
.cd-phone-pill strong{opacity:1}
.cd-header-cta{display:inline-flex;align-items:center;justify-content:center;padding:8px 16px;border-radius:4px;font-size:13px;font-weight:600;background:#FF6A00;color:#fff;text-decoration:none;white-space:nowrap;min-height:36px;transition:background .2s}
.cd-header-cta:hover{background:#E65F00;color:#fff}
.cd-mobile-bar{display:none}
@media(min-width:769px){.cd-header .cd-nav-toggle{display:none}}
@media(max-width:768px){
.cd-header-actions{display:none}
body{padding-bottom:56px}
.cd-mobile-bar{display:grid;grid-template-columns:1fr 1fr 1.2fr;position:fixed;left:0;right:0;bottom:0;height:56px;background:#fff;border-top:1px solid #E0E0E0;box-shadow:0 -4px 16px rgba(0,0,0,.06);z-index:1000}
.cd-mobile-bar a{display:flex;flex-direction:column;align-items:center;justify-content:center;font-size:12px;gap:2px;color:#333;text-decoration:none}
.cd-mobile-bar a.cd-mobile-cta{background:#FF6A00;color:#fff;font-weight:600}
.cd-mobile-bar .cd-bar-ico{font-size:16px;line-height:1}
}
@media (prefers-color-scheme: dark){
.cd-mobile-bar{background:#1C1C1E;border-top-color:rgba(255,255,255,.12)}
.cd-mobile-bar a{color:rgba(235,235,245,.92)}
.cd-mobile-bar a.cd-mobile-cta{color:#fff}
}


/* 页脚与全站统一（2026-10-22 艾总反馈）：移植营销站深色 td-footer 版式（作用域限定 .cd-footer 内，不碰工具样式），暗色模式同色系 */
.cd-footer{background:#111827;border-top:0;padding:56px 0 20px;color:#AEB7C4}
.cd-footer .td-container{max-width:1180px;margin:0 auto;padding:0 24px}
.cd-footer .td-footer-top{display:grid;grid-template-columns:minmax(240px,1.15fr) 2.4fr;gap:48px;padding-bottom:40px;border-bottom:1px solid rgba(255,255,255,.08)}
.cd-footer .td-logo-footer{display:inline-flex;align-items:center}
.cd-footer .td-logo-img{height:40px;width:auto;object-fit:contain}
.cd-footer .td-footer-pitch{margin:18px 0 20px;font-size:12.5px;line-height:1.75;color:#9AA3B2;max-width:320px}
.cd-footer .td-footer-contact{list-style:none;margin:0;padding:0;display:grid;gap:8px}
.cd-footer .td-footer-contact li{display:flex;gap:12px;font-size:12.5px;line-height:1.6}
.cd-footer .td-footer-contact span{color:#7C8695;flex-shrink:0;width:60px}
.cd-footer .td-footer-contact a,.cd-footer .td-footer-contact address{color:#D5DAE2;font-style:normal;text-decoration:none}
.cd-footer .td-footer-contact a:hover{color:#fff}
.cd-footer .td-footer-cols{display:grid;grid-template-columns:repeat(4,1fr);gap:28px}
.cd-footer .td-footer-col h2{font-size:12px;font-weight:600;letter-spacing:.08em;color:#fff;margin:0 0 12px}
.cd-footer .td-footer-col ul{list-style:none;margin:0;padding:0;display:grid;gap:8px}
.cd-footer .td-footer-col a{font-size:11.5px;color:#9AA3B2;text-decoration:none}
.cd-footer .td-footer-col a:hover{color:#fff}
.cd-footer .td-footer-trust{display:grid;grid-template-columns:repeat(4,1fr);gap:20px;padding:22px 0;border-bottom:1px solid rgba(255,255,255,.08)}
.cd-footer .td-footer-trust-item{display:flex;flex-direction:column;gap:2px}
.cd-footer .td-footer-trust-item strong{font-size:15px;font-weight:600;color:#fff}
.cd-footer .td-footer-trust-item span{font-size:11px;color:#7C8695}
.cd-footer .td-footer-bottom{display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap;padding-top:18px}
.cd-footer .td-footer-xj{flex-direction:column;align-items:flex-start;gap:8px}
.cd-footer .td-footer-bottom p,.cd-footer .cd-privacy,.cd-footer .cd-data-source{margin:0;font-size:11px;color:#7C8695;line-height:1.8;text-align:left}
.cd-footer .cd-data-source a{color:#9AA3B2;text-decoration:none}
.cd-footer .cd-data-source a:hover{color:#fff}
.cd-footer .td-footer-legal{display:flex;align-items:center;gap:7px;flex-wrap:wrap}
.cd-footer .td-footer-legal img{display:inline-block;opacity:.8;vertical-align:-3px}
.cd-footer .td-footer-legal a{color:#9AA3B2;text-decoration:none}
.cd-footer .td-footer-legal a:hover{color:#fff}
.cd-footer .td-footer-sep{color:#4A5464}
@media(prefers-color-scheme:dark){.cd-footer{background:#0B1220}}
@media(max-width:900px){.cd-footer .td-footer-top{grid-template-columns:1fr;gap:28px}.cd-footer .td-footer-cols{grid-template-columns:repeat(2,1fr)}.cd-footer .td-footer-trust{grid-template-columns:repeat(2,1fr)}}

/* 页脚公司名文字版式（全站统一：页脚不放 logo，艾总 2026-10-22） */
.cd-footer .td-footer-company{margin:0 0 6px;font-size:18px;font-weight:600;color:#fff;letter-spacing:.01em}
.cd-footer .td-footer-company small{display:block;font-size:11px;font-weight:400;color:#8E97A6;letter-spacing:.06em;margin-top:4px}

/* 顶部黑色公告条（全站统一 34px 墨条；2026-10-22 艾总：询价页缺少公告条） */
.xj-util{height:34px;background:#111827;color:#AEB7C4;font-size:11.5px;display:flex;align-items:center}
.xj-util .xj-util-in{display:flex;align-items:center;justify-content:space-between;gap:16px;width:100%;max-width:1100px;margin:0 auto;padding:0 24px}
.xj-util b{color:#fff;font-weight:500}
.xj-util .xj-dot{width:5px;height:5px;border-radius:50%;background:#FF6A00;display:inline-block;margin-right:7px}
.xj-util .xj-sep{color:#4B5563;margin:0 9px}
@media(max-width:768px){.xj-util .xj-util-right{display:none}.xj-util .xj-util-in{justify-content:flex-start}}

/* 全站统一留资弹窗（与营销站 wb-modal 同款视觉） */
.cd-lead-modal-open{overflow:hidden}
.cd-lead-modal-mask{position:fixed;inset:0;z-index:2200;background:rgba(17,24,39,.55);display:flex;align-items:center;justify-content:center;padding:24px;animation:xjFadeIn .18s ease}
.cd-lead-modal{position:relative;background:#fff;border-radius:14px;max-width:480px;width:100%;max-height:90vh;overflow:auto;padding:26px;box-shadow:0 30px 80px -20px rgba(17,24,39,.5);animation:xjPopIn .2s ease;color:#111827}
.cd-lead-modal-close{position:absolute;top:10px;right:12px;width:34px;height:34px;border:0;background:none;font-size:22px;line-height:1;color:#9CA3AF;cursor:pointer;border-radius:8px}
.cd-lead-modal-close:hover{background:#F7F8FA;color:#111827}
.cd-lead-modal-kicker{font-size:11px;font-weight:600;letter-spacing:.14em;color:#C94F00;margin:0 0 6px}
.cd-lead-modal-title{font-size:20px;font-weight:600;color:#111827;margin:0 0 6px;letter-spacing:-.01em}
.cd-lead-modal-sub{font-size:13px;color:#6B7280;margin:0 0 18px}
.cd-lead-field{margin-bottom:12px}
.cd-lead-field label{display:block;font-size:12px;font-weight:600;color:#111827;margin-bottom:4px}
.cd-lead-field label em{font-style:normal;font-weight:400;color:#9CA3AF}
.cd-lead-field input,.cd-lead-field textarea{width:100%;height:38px;border:1px solid #D1D5DB;border-radius:6px;padding:0 12px;font-size:13.5px;font-family:inherit;color:#111827;background:#fff}
.cd-lead-field textarea{height:56px;padding:8px 12px;resize:none}
.cd-lead-field.has-err input,.cd-lead-field.has-err textarea{border-color:#C0392B}
.cd-lead-err{display:block;font-size:11.5px;color:#C0392B;min-height:0;margin-top:3px}
.cd-lead-submit{width:100%;height:44px;border:0;border-radius:6px;background:#FF6A00;color:#fff;font-size:14px;font-weight:600;cursor:pointer;margin-top:4px;font-family:inherit}
.cd-lead-submit:hover{background:#E85F00}
.cd-lead-hint{font-size:10.5px;color:#9CA3AF;text-align:center;margin:8px 0 0}
.cd-lead-done{background:#EAF6F0;border:1px solid #CBE7DA;color:#0F7B5A;border-radius:8px;padding:16px;font-size:14px;font-weight:600;text-align:center}
@keyframes xjFadeIn{from{opacity:0}to{opacity:1}}
@keyframes xjPopIn{from{opacity:0;transform:translateY(12px) scale(.98)}to{opacity:1;transform:none}}
@media(max-width:520px){.cd-lead-modal-mask{padding:12px;align-items:flex-end}.cd-lead-modal{border-radius:16px 16px 0 0;max-width:none;max-height:86vh;padding:22px 18px 18px}}
@media(prefers-color-scheme:dark){.cd-lead-modal{background:#1C1C1E;color:#E5E7EB}.cd-lead-modal-title,.cd-lead-field label{color:#fff}.cd-lead-field input,.cd-lead-field textarea{background:#2C2C2E;border-color:#3A3A3C;color:#E5E7EB}.cd-lead-modal-close:hover{background:#2C2C2E}}

/* 顶栏吸顶（2026-10-22 艾总：滚动时公告条+导航固定不动）：util 34px 垫最上，header 跟随其下；
   结果表 thead 为独立不滚动容器（thead-pane），与视口吸顶无冲突 */
.xj-util{position:sticky;top:0;z-index:1002}
.cd-header{position:sticky;top:34px;z-index:1001}
