/*
Theme Name: ULISE
Theme URI: https://uliseoven.com
Description: ULISE child theme for Kadence. v3.1: v3 design system + mobile menu, wired inquiry form (CPT + mail), Partner page, SEO/meta stack. No jQuery, no animation libs.
Author: ULISE
Template: kadence
Version: 3.7.0
Requires at least: 6.5
Requires PHP: 8.0
Text Domain: ulise
*/

/* ==========================================================================
   ULISE v3 版面系统 —— 依据 2026-11-11 外部会诊规范重做视觉层
   铁律：
     · 文案、结构、语序一律不变，只改视觉层
     · 字重只有两个：Display 600 / 正文 400
     · 主色 #E8582A 每屏 ≤ 2 处（CTA / 关键数字 / hover / 统计带下划线）
     · 动效只有三种：进场 reveal（IO 触发，500ms，cubic-bezier(.22,1,.36,1)）、
       占位块 shimmer 扫光（1.6s，仅占位态）、hero 滚动提示
     · 全部规则挂 body.ulise 下，不污染 Kadence 渲染的页面
   ========================================================================== */

/* ---------- 0. 自托管可变字体（wght 100–900，fontTools 已验证） ---------- */
@font-face {
  font-family: 'Archivo';
  font-style: normal;
  font-weight: 100 900;
  font-display: swap;
  src: url('assets/fonts/archivo-var.woff2') format('woff2');
}
@font-face {
  font-family: 'Inter';
  font-style: normal;
  font-weight: 100 900;
  font-display: swap;
  src: url('assets/fonts/inter-var.woff2') format('woff2');
}

/* ---------- 1. 设计令牌 ---------- */
:root {
  --paper:     #FAF9F7;   /* 暖白主底（禁纯白） */
  --paper-2:   #F2EFEA;   /* 暖灰（表行 hover / 图像底） */
  --plate:     #F0EDE8;   /* 产品图占位底 */
  --line:      #E7E3DC;
  --line-2:    #CFC9BF;
  --ink:       #1A1A1A;   /* 深炭（禁纯黑） */
  --ink-2:     #242424;
  --body-c:    #3D3D3D;   /* 正文灰 */
  --muted:     #8A8A8A;   /* 辅助灰 */
  --dark:      #1A1A1A;   /* 深色版块底 */
  --dark-2:    #242424;
  --inv:       #FFFFFF;
  --inv-muted: #B5B0A8;   /* 深底上的暖灰 */
  --accent:    #E8582A;   /* 焰橙（全站唯一主色；只用于线、点、序号，不再作按钮底） */
  --accent-2:  #C44A22;   /* hover 加深，同色相 */
  --btn:       #C44A22;   /* 按钮底（D53：原 #E8582A 上白字仅 3.58:1，深一档到 4.83:1） */
  --btn-hover: #A83E1C;   /* 按钮 hover：同色相再深一档，白字 6.3:1 */

  --font-display: "Archivo", "Helvetica Neue", Arial, sans-serif;
  --font-body:    "Inter", -apple-system, "Segoe UI", Roboto, sans-serif;

  --fs-d1:    clamp(3.5rem, 7.5vw, 7rem);      /* 56 → 112：1440 下「One control panel.」恰好一行 */
  --fs-h2:    clamp(2.25rem, 4.5vw, 4rem);     /* 36 → 64 */
  --fs-h3:    clamp(1.375rem, 1.8vw, 1.75rem); /* 22 → 28 */
  --fs-body:  1.0625rem;                       /* 17 / 1.65 */
  --fs-lede:  clamp(1.0625rem, 1.3vw, 1.125rem);
  --fs-sm:    0.875rem;                        /* 14 */
  --fs-xs:    0.8125rem;                       /* 13 辅助/标签 */
  --fs-label: 0.8125rem;                       /* 13 全大写 +0.08em */

  --sec:      clamp(4.5rem, 9vw, 9.5rem);      /* 72 → 152：桌面 120–160 档 */
  --content:  1280px;
  --textw:    720px;
  --gutter:   24px;
  --gap:      16px;
  --nav-h:    84px;
  --ease-out: cubic-bezier(0.22, 1, 0.36, 1);
}
@media (min-width: 800px)  { :root { --gutter: 40px; } }
@media (min-width: 1100px) { :root { --gutter: 56px; } }

/* ---------- 2. 重置与基座（限定 body.ulise） ---------- */
body.ulise *, body.ulise *::before, body.ulise *::after { box-sizing: border-box; }
body.ulise h1, body.ulise h2, body.ulise h3, body.ulise h4,
body.ulise p, body.ulise dl, body.ulise dd, body.ulise figure,
body.ulise blockquote, body.ulise table { margin: 0; }
body.ulise ul, body.ulise ol { margin: 0; padding: 0; list-style: none; }
body.ulise img { display: block; max-width: 100%; height: auto; }
body.ulise button, body.ulise input, body.ulise select, body.ulise textarea { font: inherit; color: inherit; }
body.ulise a { color: inherit; text-decoration: none; }

body.ulise {
  background: var(--paper);
  color: var(--body-c);
  font-family: var(--font-body);
  font-size: var(--fs-body);
  font-weight: 400;
  line-height: 1.65;
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
  overflow-x: clip;
}

body.ulise .skip { position: absolute; left: -9999px; }
body.ulise .skip:focus { left: 8px; top: 8px; z-index: 100; background: var(--paper); color: var(--ink); padding: 10px 14px; outline: 2px solid var(--accent); }

/* ---------- 3. 版式骨架 ---------- */
body.ulise .wrap {
  width: 100%;
  max-width: calc(var(--content) + var(--gutter) * 2);
  margin-inline: auto;
  padding-inline: var(--gutter);
}
body.ulise .section { padding-block: var(--sec); }
body.ulise .section--tint  { background: var(--paper-2); }
body.ulise .section--ink   { background: var(--dark); color: var(--inv); }
body.ulise .section--tight { padding-block: calc(var(--sec) * 0.62); }
body.ulise .rule { height: 1px; background: var(--line); border: 0; }

/* ---------- 4. 排版 ---------- */
body.ulise .d1, body.ulise .h2, body.ulise .h3,
body.ulise .wordmark, body.ulise .stat__num, body.ulise .range__count b {
  font-family: var(--font-display);
  font-weight: 600;
  text-wrap: balance;
}
body.ulise .d1 { font-size: var(--fs-d1); line-height: 1.03; letter-spacing: -0.03em; }
body.ulise .h2 { font-size: var(--fs-h2); line-height: 1.08; letter-spacing: -0.02em; color: var(--ink); }
body.ulise .h3 { font-size: var(--fs-h3); line-height: 1.25; letter-spacing: -0.01em; font-weight: 600; color: var(--ink); }
/* Kadence 内联 CSS 有 h1-h6{color:var(--global-palette3)}（元素选择器），
   继承色必输——深底区标题会被写成深蓝灰几乎隐形，故 .h2/.h3 必须直接声明颜色 */

body.ulise .lede { font-size: var(--fs-lede); line-height: 1.6; color: var(--body-c); max-width: 34em; }
body.ulise .body { color: var(--body-c); max-width: 62ch; }
body.ulise .body--inv { color: var(--inv-muted); }

body.ulise .label {
  font-family: var(--font-body);
  font-size: var(--fs-label);
  font-weight: 600;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--muted);
  line-height: 1.3;
}
body.ulise .section--ink .label { color: var(--inv-muted); }

body.ulise .sm { font-size: var(--fs-sm); line-height: 1.55; }
body.ulise .xs { font-size: var(--fs-xs); line-height: 1.5; }

/* ---------- 5. 按钮（主色只在此出现） ----------
   D53（2026-11-12）：按钮底从 --accent #E8582A 改为 --btn #C44A22。
   原因：白字压 #E8582A 实测 3.58:1，未达 WCAG AA 4.5:1（上轮 Lighthouse
   已标出，当时记在 09 待确认）。只改按钮，焰橙仍用于序号、短线、active 指示线
   ——那些是图形/大字号，不适用 4.5 的要求，且换了会让整套版式失掉焰橙味。 */
body.ulise .btn {
  display: inline-flex; align-items: center; justify-content: center; gap: 0.6em;
  padding: 1em 1.8em;
  border: 1px solid var(--btn);
  background: var(--btn);
  color: #FFFFFF;
  font-size: var(--fs-xs); font-weight: 600;
  letter-spacing: 0.05em; text-transform: uppercase;
  border-radius: 0;
  cursor: pointer;
  transition: background .25s ease, border-color .25s ease, transform .3s var(--ease-out);
}
body.ulise .btn:hover { background: var(--btn-hover); border-color: var(--btn-hover); }

/* WhatsApp 按钮（工作单 B1，全站唯一新增色）。
   ⚠️ 品牌规范是 #25D366 底 + 白字，实测白字对比度只有 1.95:1（远低于 AA 4.5）。
   这里保留品牌绿底，但文字改用深炭 #1A1A1A → 8.93:1 达标；hover #1DA851 下 5.89:1。
   观感与品牌一致（绿底深字也是 WhatsApp 官方浅色版的做法），可读性合格。 */
body.ulise .btn--wa { background: #25D366; border-color: #25D366; color: #1A1A1A; }
body.ulise .btn--wa:hover { background: #1DA851; border-color: #1DA851; color: #1A1A1A; }

/* 描边白（深底上用） */
body.ulise .btn--ghost { background: transparent; color: #FFFFFF; border-color: rgba(255,255,255,.7); }
body.ulise .btn--ghost:hover { border-color: #FFFFFF; background: rgba(255,255,255,.08); }

body.ulise .link-arrow, body.ulise .link-dl {
  display: inline-flex; align-items: center; gap: 0.5em;
  font-size: var(--fs-sm); font-weight: 500;
  border-bottom: 1px solid var(--line-2);
  padding-bottom: 2px;
  transition: color .2s ease, border-color .2s ease;
}
body.ulise .link-arrow::after { content: "→"; font-size: 1em; }
body.ulise .link-dl::after { content: "↓"; font-size: 1em; }
body.ulise .link-arrow:hover, body.ulise .link-dl:hover { color: var(--accent); border-color: var(--accent); }

body.ulise :focus-visible { outline: 2px solid var(--accent); outline-offset: 3px; }

/* ---------- 6. 导航：固定深炭底（D49）；滚动只加阴影与底边线 ---------- */
body.ulise .nav {
  position: sticky; top: 0; z-index: 50;
  background: var(--dark);                 /* 不再透明：任何页面任何滚动位置都是深炭 */
  color: #FFFFFF;
  border-bottom: 1px solid transparent;
  transition: box-shadow .25s ease, border-color .25s ease;
}
body.ulise .nav.is-scrolled {
  border-bottom-color: rgba(255,255,255,.12);
  box-shadow: 0 4px 16px rgba(0,0,0,.25);
}
body.admin-bar .nav { top: 32px; }

body.ulise .nav__inner { display: flex; align-items: center; gap: 40px; height: var(--nav-h); }
body.ulise .wordmark { font-size: 1.0625rem; letter-spacing: 0.24em; font-weight: 600; padding-right: 4px; }
body.ulise .nav__links { display: flex; align-items: center; gap: 30px; margin-right: auto; }
body.ulise .nav__links a {
  font-size: var(--fs-xs);
  letter-spacing: 0.055em;
  text-transform: uppercase;
  opacity: .85;
  padding-block: 6px;
  border-bottom: 1px solid transparent;
  transition: opacity .2s ease, border-color .2s ease, color .2s ease;
}
/* hover：1px 暖灰细线（深底上比主色更安静，不跟 active 抢） */
body.ulise .nav__links a:hover { opacity: 1; border-bottom-color: var(--inv-muted); }
/* 当前页：2px 主色短线；补 1px padding 抵消边框加粗，避免这一项比邻居高 1px */
body.ulise .nav__links a.is-active {
  opacity: 1;
  color: #FFFFFF;
  border-bottom: 2px solid var(--accent);
  padding-bottom: 5px;
}
body.ulise .nav__cta { margin-left: auto; }
body.ulise .nav__cta .btn { padding: 0.72em 1.15em; font-size: 0.75rem; }

/* 900–1099：导航项 + CTA 在这个区间最紧（七项时代实测 1024 时刚好贴住右边界 984/984），
   只收字号与间距，不删项——导航项是信任结构，少一项比挤一点更贵。
   D57 起删掉 Models，只剩六项，实测 1024 下 navW 460 / CTA 起于 849（余量 155px）；
   规则**保留不动**：删字号调整属于版式变更，不在这一单范围内。 */
@media (min-width: 900px) and (max-width: 1099px) {
  body.ulise .nav__inner { gap: 24px; }
  body.ulise .nav__links { gap: 18px; }
  body.ulise .nav__links a { font-size: 0.75rem; letter-spacing: 0.03em; }
  body.ulise .nav__cta .btn { padding: 0.7em 0.95em; font-size: 0.6875rem; }
}

/* ---------- 7. Hero：深炭底 + 暗化产品图占位（视频位预留） ---------- */
body.ulise .hero {
  position: relative;
  margin-top: calc(var(--nav-h) * -1);   /* 导航悬浮于其上 */
  background: var(--dark);
  color: var(--inv);
  overflow: hidden;
}
body.ulise .hero__bg { position: absolute; inset: 0; background: var(--dark); }
body.ulise .hero__bg img {
  position: absolute; right: -4%; bottom: 0;
  width: min(58%, 860px); height: auto;
  mix-blend-mode: multiply;             /* 白底棚拍图在深炭底上消失底色 */
  opacity: 1;
}
body.ulise .hero__shade {
  position: absolute; inset: 0;
  /* 左重右轻：右侧产品图区域少压一层，图能看清；文字区照spec暗化 */
  background: linear-gradient(90deg, rgba(20,20,20,.72) 0%, rgba(20,20,20,.55) 55%, rgba(20,20,20,.38) 100%),
              linear-gradient(rgba(20,20,20,.25), rgba(20,20,20,.45));
}
body.ulise .hero__inner {
  position: relative; z-index: 1;
  display: flex; align-items: center;
  min-height: clamp(560px, 62vh, 720px);
  padding-top: var(--nav-h);
  padding-block-end: clamp(3rem, 5vw, 4.5rem);
}
body.ulise .hero__copy { max-width: 100%; display: flex; flex-direction: column; gap: 26px; }
body.ulise .hero__copy .label { color: var(--inv-muted); }
body.ulise .hero__copy .d1 { color: #FFFFFF; }
body.ulise .hero__copy .lede { color: rgba(255,255,255,.85); max-width: 34em; }
body.ulise .hero__actions { display: flex; flex-wrap: wrap; align-items: center; gap: 14px 20px; margin-top: 4px; }

/* 滚动提示：细线 + 缓动动画 */
body.ulise .hero__cue {
  position: absolute; left: 50%; bottom: 18px; z-index: 1;
  width: 1px; height: 44px; background: rgba(255,255,255,.35); overflow: hidden;
}
body.ulise .hero__cue span {
  position: absolute; left: 0; top: 0;
  width: 1px; height: 18px; background: #FFFFFF;
  animation: ulise-cue 2.2s var(--ease-out) infinite;
}
@keyframes ulise-cue {
  0%   { transform: translateY(-18px); }
  70%  { transform: translateY(44px); }
  100% { transform: translateY(44px); }
}

/* 首屏数据条（深底白字版） */
body.ulise .hero__meta { position: relative; z-index: 1; border-top: 1px solid rgba(255,255,255,.18); background: rgba(26,26,26,.35); }
body.ulise .hero__meta dl { display: grid; grid-template-columns: repeat(3, 1fr); }
body.ulise .hero__meta .cell { padding: 20px 24px 20px 0; border-right: 1px solid rgba(255,255,255,.18); }
body.ulise .hero__meta .cell:last-child { border-right: 0; }
body.ulise .hero__meta dt { font-size: var(--fs-label); letter-spacing: 0.08em; text-transform: uppercase; color: var(--inv-muted); }
body.ulise .hero__meta dd { font-family: var(--font-display); font-size: 1.375rem; font-weight: 600; letter-spacing: -0.01em; margin-top: 5px; color: #FFFFFF; }

/* ---------- 8. 区块头 ---------- */
body.ulise .head { display: grid; grid-template-columns: 1fr; gap: 14px; margin-bottom: clamp(2.5rem, 4vw, 3.5rem); }
body.ulise .head .label { margin-bottom: -2px; }
body.ulise .head__row { display: grid; grid-template-columns: minmax(0, 7fr) minmax(0, 5fr); gap: 18px 48px; align-items: start; }
body.ulise .head__row .body { padding-top: 7px; }

/* ---------- 9. RANGES：不等宽三卡，HEA 加宽 1.2 倍 + 深炭底 ---------- */
body.ulise .ranges { display: grid; grid-template-columns: 1fr 1.2fr 1fr; gap: var(--gap); align-items: stretch; }
body.ulise .range {
  display: flex; flex-direction: column; gap: 18px;
  background: var(--paper);
  padding: 18px;
  transition: transform .3s var(--ease-out), box-shadow .3s var(--ease-out);
}
body.ulise .range:hover { transform: translateY(-4px); box-shadow: 0 14px 32px rgba(26,26,26,.12); }
body.ulise .range--flag { background: var(--dark); color: var(--inv); }
/* ⚠️ 里程碑式 bug 修复（D53，实测才发现）：.h3 那条规则把颜色写死成 --ink，
   于是深炭卡（HEA 旗舰卡）上的标题一直是「#1A1A1A 字压 #1A1A1A 底」——
   从 v3 上线起就是隐形的，只是没人盯着那块看。深底卡片必须显式给白。 */
body.ulise .range--flag .h3,
body.ulise .range--flag .h3 a { color: #FFFFFF; }
body.ulise .range__plate { background: var(--plate); aspect-ratio: 4 / 3; display: grid; place-items: center; padding: 16px; overflow: hidden; }
body.ulise .range--flag .range__plate { background: var(--dark-2); }
body.ulise .range__plate img { max-height: 100%; width: auto; max-width: 100%; }
body.ulise .range__body { display: flex; flex-direction: column; gap: 10px; padding-inline: 6px; }
body.ulise .range__top { display: flex; align-items: baseline; justify-content: space-between; gap: 12px; padding-bottom: 10px; border-bottom: 1px solid var(--line); }
body.ulise .range--flag .range__top { border-bottom-color: rgba(255,255,255,.18); }
body.ulise .range__count { font-size: var(--fs-label); letter-spacing: 0.08em; text-transform: uppercase; color: var(--muted); white-space: nowrap; display: inline-flex; align-items: baseline; gap: 6px; }
body.ulise .range__count b { font-size: clamp(2.25rem, 3.4vw, 3rem); line-height: 1; color: var(--accent); letter-spacing: -0.02em; }
body.ulise .range--flag .range__count { color: var(--inv-muted); }
body.ulise .range__body .body { color: var(--body-c); }
body.ulise .range--flag .range__body .body { color: var(--inv-muted); }

/* ---------- 10. 四个约束：2×2，主色细竖线 + 1px 分割 ---------- */
body.ulise .constraints {
  display: grid; grid-template-columns: repeat(2, 1fr);
  border-top: 1px solid var(--line);
  border-bottom: 1px solid var(--line);
}
body.ulise .constraint {
  position: relative;
  padding: clamp(28px, 3vw, 42px) clamp(20px, 3vw, 40px) clamp(28px, 3vw, 42px) clamp(24px, 2.5vw, 32px);
  display: flex; flex-direction: column; gap: 12px;
}
body.ulise .constraint::before {
  content: ""; position: absolute; left: 0; top: clamp(28px, 3vw, 42px);
  width: 3px; height: 40px; background: var(--accent);
}
body.ulise .constraint:nth-child(even) { border-left: 1px solid var(--line); }
body.ulise .constraint:nth-child(n+3) { border-top: 1px solid var(--line); }
body.ulise .constraint q {
  font-family: var(--font-display);
  font-style: italic;
  font-size: clamp(1.375rem, 1.9vw, 1.625rem);   /* 22 → 26 */
  font-weight: 600; letter-spacing: -0.01em; line-height: 1.3;
  color: var(--ink);
  quotes: "“" "”";
}
body.ulise .constraint p { font-size: var(--fs-sm); color: var(--body-c); line-height: 1.6; max-width: 42ch; }

/* ---------- 11. 统计带：深炭全宽，96px 数字 + 主色短线 ---------- */
body.ulise .stats { display: grid; grid-template-columns: repeat(3, 1fr); gap: var(--gap); }
body.ulise .stat { padding-top: 28px; border-top: 1px solid rgba(255,255,255,.18); display: flex; flex-direction: column; gap: 16px; }
body.ulise .stat__num {
  position: relative;
  font-size: clamp(4rem, 6.7vw, 6rem);            /* 64 → 96 */
  line-height: 1; letter-spacing: -0.03em;
  color: #FFFFFF;
  padding-bottom: 14px;
  font-variant-numeric: tabular-nums;
}
body.ulise .stat__num::after {
  content: ""; position: absolute; left: 2px; bottom: 0;
  width: 48px; height: 4px; background: var(--accent);
}
body.ulise .stat .label { max-width: 32ch; color: var(--inv-muted); }

/* ---------- 12. 型号表 ---------- */
body.ulise .table-wrap { overflow-x: auto; }
body.ulise table.models { width: 100%; border-collapse: collapse; font-size: var(--fs-sm); }
body.ulise table.models th, body.ulise table.models td { text-align: left; padding: 18px 20px 18px 0; border-bottom: 1px solid var(--line); vertical-align: top; }
body.ulise table.models thead th {
  font-size: var(--fs-xs); letter-spacing: 0.08em; text-transform: uppercase;
  color: var(--muted); font-weight: 600; padding-bottom: 12px;
  border-bottom: 2px solid var(--ink);
}
body.ulise table.models tbody tr { transition: background .2s ease; }
body.ulise table.models tbody tr:hover { background: var(--paper-2); }
body.ulise table.models th:first-child { padding-left: 0; }
body.ulise table.models td:first-child { font-family: var(--font-display); font-weight: 600; font-size: 1rem; letter-spacing: -0.01em; white-space: nowrap; color: var(--ink); }
body.ulise table.models .codes { color: var(--muted); font-variant-numeric: tabular-nums; }
body.ulise table.models td:nth-child(3) { font-variant-numeric: tabular-nums; }
body.ulise table.models th:last-child, body.ulise table.models td:last-child { text-align: right; padding-right: 0; }
body.ulise table.models tr:last-child td { border-bottom: 0; }

/* ---------- 13. 应用：3×2 图像卡，未到位用深炭占位 ---------- */
body.ulise .apps { display: grid; grid-template-columns: repeat(3, 1fr); gap: var(--gap); }
body.ulise .app { display: flex; flex-direction: column; gap: 12px; }
body.ulise .app__fig {
  position: relative;
  aspect-ratio: 3 / 2;
  background: var(--dark-2);
  display: grid; place-content: center; justify-items: center; gap: 10px;
  padding: 20px; text-align: center;
}
body.ulise .app__fig .app__name {
  font-family: var(--font-display); font-weight: 600;
  font-size: clamp(1.375rem, 1.9vw, 1.75rem);
  color: #FFFFFF; letter-spacing: -0.01em;
}
body.ulise .app__fig .app__ph { font-size: 0.75rem; color: var(--inv-muted); letter-spacing: 0.04em; }
body.ulise .app > p { font-size: var(--fs-sm); color: var(--body-c); line-height: 1.55; max-width: 44ch; }

/* ---------- 14. 询盘：深炭全宽，左 40% 右 60%，底边线输入框 ---------- */
body.ulise .quote { display: grid; grid-template-columns: minmax(0, 2fr) minmax(0, 3fr); gap: clamp(40px, 6vw, 96px); align-items: start; }
body.ulise .quote .h2 { color: #FFFFFF; }
body.ulise .quote .body { color: var(--inv-muted); }
body.ulise .quote__list { display: flex; flex-direction: column; margin-top: 26px; }
body.ulise .quote__list li { display: grid; grid-template-columns: 30px 1fr; gap: 14px; padding-block: 14px; border-top: 1px solid rgba(255,255,255,.18); font-size: var(--fs-sm); color: var(--inv-muted); }
body.ulise .quote__list li:last-child { border-bottom: 1px solid rgba(255,255,255,.18); }
body.ulise .quote__list span:first-child { color: var(--accent); font-family: var(--font-display); font-weight: 600; font-size: 1rem; }

body.ulise .form { display: grid; grid-template-columns: 1fr 1fr; gap: 28px 16px; }
body.ulise .field { display: flex; flex-direction: column; gap: 8px; }
body.ulise .field--full { grid-column: 1 / -1; }
body.ulise .field label { font-size: var(--fs-label); letter-spacing: 0.08em; text-transform: uppercase; color: var(--inv-muted); font-weight: 600; }
body.ulise .field input, body.ulise .field select, body.ulise .field textarea {
  border: 0;
  border-bottom: 1px solid rgba(255,255,255,.35);
  background: transparent;
  padding: 12px 2px;
  font-size: var(--fs-sm);
  border-radius: 0;
  width: 100%;
  color: #FFFFFF;
  transition: border-color .2s ease;
}
body.ulise .field select { appearance: none; -webkit-appearance: none; }
body.ulise .field option { color: var(--ink); background: var(--paper); }
body.ulise .field textarea { min-height: 96px; resize: vertical; }
body.ulise .field input:focus, body.ulise .field select:focus, body.ulise .field textarea:focus { border-bottom-color: var(--accent); outline: none; }
body.ulise .field input::placeholder, body.ulise .field textarea::placeholder { color: rgba(255,255,255,.4); }
body.ulise .form__foot { grid-column: 1 / -1; display: flex; flex-direction: column; gap: 14px; margin-top: 4px; }
body.ulise .form__foot .btn { width: 100%; }
body.ulise .form__foot .xs { color: var(--inv-muted); }

/* ---------- 15. SUPPORT：左文右图占位 ---------- */
body.ulise .support { display: grid; grid-template-columns: minmax(0, 5fr) minmax(0, 6fr); gap: clamp(32px, 5vw, 80px); align-items: center; }
body.ulise .support__fig {
  aspect-ratio: 4 / 3;
  background: var(--plate);
  display: grid; place-content: center; gap: 8px; text-align: center;
  border: 1px solid var(--line);
}
body.ulise .support__fig .ph { font-size: 0.75rem; color: var(--muted); letter-spacing: 0.04em; }

/* ---------- 16. 页脚 ---------- */
body.ulise .foot { background: var(--dark); color: var(--inv); padding-block: clamp(3.5rem, 5vw, 5rem) 28px; }
body.ulise .foot__grid { display: grid; grid-template-columns: minmax(0, 4fr) repeat(3, minmax(0, 2fr)); gap: 40px 32px; }
body.ulise .foot__brand .wordmark { font-size: 1.5rem; letter-spacing: 0.26em; color: #FFFFFF; }
body.ulise .foot__since { margin-top: 10px; font-size: var(--fs-xs); color: var(--inv-muted); letter-spacing: 0.04em; }
body.ulise .foot__tag { color: var(--inv-muted); margin-top: 14px; max-width: 30ch; }
body.ulise .foot h4 { font-size: var(--fs-label); letter-spacing: 0.08em; text-transform: uppercase; color: var(--inv-muted); font-weight: 600; margin-bottom: 14px; }
body.ulise .foot ul { display: flex; flex-direction: column; gap: 9px; font-size: var(--fs-sm); }
body.ulise .foot a:hover { color: var(--accent); }
body.ulise .foot__bottom {
  margin-top: clamp(2.5rem, 4vw, 3.5rem); padding-top: 20px;
  border-top: 1px solid rgba(255,255,255,.18);
  display: flex; justify-content: space-between; gap: 16px; flex-wrap: wrap;
  font-size: var(--fs-xs); color: var(--inv-muted);
}

/* ---------- 17. 进场动效（全站唯一动效；JS 失效时不隐藏任何内容） ----------
   D49：600→500ms，触发点由 IO rootMargin 下沿外扩 140px 决定（见 ulise.js §2） */
body.ulise.has-js .reveal {
  opacity: 0;
  transform: translateY(24px);
  transition: opacity .5s var(--ease-out), transform .5s var(--ease-out);
  transition-delay: var(--d, 0ms);
  will-change: opacity, transform;
}
body.ulise.has-js .reveal.is-in { opacity: 1; transform: none; }

@media (prefers-reduced-motion: reduce) {
  body.ulise.has-js .reveal { opacity: 1 !important; transform: none !important; transition: none !important; }
  body.ulise .hero__cue span { animation: none; }
  body.ulise * { transition-duration: 0.01ms !important; }
  /* 注意：shimmer 的停止规则放不到这里——它定义在本文件更后面，
     同特异性下后者胜出，必须写在 §24 末尾（实测过一次才知道）。 */
}

/* ---------- 18. 响应式 ---------- */
@media (max-width: 1023px) {
  body.ulise .ranges { grid-template-columns: 1fr 1fr; }
  body.ulise .range--flag { grid-column: 1 / -1; }
}
@media (max-width: 799px) {
  body.ulise .ranges { grid-template-columns: 1fr; }
  body.ulise .range--flag { grid-column: auto; }
  body.ulise .constraints { grid-template-columns: 1fr; }
  body.ulise .constraint:nth-child(even) { border-left: 0; }
  body.ulise .stats { grid-template-columns: 1fr; gap: 0; }
  body.ulise .stat { padding-block: 22px; }
  body.ulise .apps { grid-template-columns: 1fr; }
  body.ulise .quote { grid-template-columns: 1fr; }
  body.ulise .form { grid-template-columns: 1fr; }
  body.ulise .support { grid-template-columns: 1fr; }
  body.ulise .head__row { grid-template-columns: 1fr; gap: 18px; }
  body.ulise .nav__links { display: none; }
  body.ulise .hero__copy { max-width: 100%; }
  body.ulise .hero__inner { min-height: 0; padding-block: 7rem 4rem; }
  body.ulise .hero__bg img { position: static; width: 78%; margin: 0 auto; }
  body.ulise .hero__meta dl { grid-template-columns: 1fr; }
  body.ulise .hero__meta .cell { border-right: 0; border-bottom: 1px solid rgba(255,255,255,.18); padding-right: 0; }
  body.ulise .hero__meta .cell:last-child { border-bottom: 0; }
  body.ulise .foot__grid { grid-template-columns: 1fr 1fr; }
}

@media (max-width: 640px) {
  body.ulise table.models { font-size: 13px; }
  body.ulise table.models th, body.ulise table.models td { padding: 14px 10px 14px 0; }
  body.ulise table.models th:nth-child(2), body.ulise table.models td:nth-child(2) { display: none; }
  body.ulise table.models td:first-child { font-size: 15px; }
}

/* ---------- 19. WP 适配 ---------- */
body.ulise .entry-content { font-size: var(--fs-body); }
body.ulise .site-container { max-width: 100%; }

/* ---------- 20. 移动端全屏菜单（工作单 A1） ---------- */
body.no-scroll { overflow: hidden !important; }
body.ulise .nav__burger {
  display: none;
  width: 44px; height: 44px;
  background: none; border: 0; padding: 0;
  cursor: pointer;
  flex-direction: column; align-items: center; justify-content: center; gap: 7px;
}
body.ulise .nav__burger span {
  display: block; width: 22px; height: 2px;
  background: currentColor;                       /* 暖白/深底自适应：跟随 .nav color */
  transition: transform .3s var(--ease-out);
}
body.ulise .nav__burger[aria-expanded="true"] span:first-child { transform: translateY(4.5px) rotate(45deg); }
body.ulise .nav__burger[aria-expanded="true"] span:last-child  { transform: translateY(-4.5px) rotate(-45deg); }

body.ulise .m-menu {
  position: fixed; inset: 0; z-index: 40;         /* 低于 .nav(50)，汉堡可点击关闭 */
  background: var(--paper);
  padding: calc(var(--nav-h) + 40px) var(--gutter) clamp(24px, 5vh, 48px);
  display: flex; flex-direction: column;
  visibility: hidden; opacity: 0; transform: translateY(24px);
  transition: opacity .6s var(--ease-out), transform .6s var(--ease-out), visibility 0s linear .6s;
}
body.ulise .m-menu.is-open { visibility: visible; opacity: 1; transform: none; transition-delay: 0s; }
body.ulise .m-menu ul { display: flex; flex-direction: column; gap: 6px; }
body.ulise .m-menu a:not(.btn) {
  display: block; padding-block: 12px;
  font-family: var(--font-display); font-weight: 600;
  font-size: clamp(2.25rem, 9vw, 2.75rem);        /* 36 → 44 */
  line-height: 1.15; letter-spacing: -0.02em;
  color: var(--ink);
}
body.ulise .m-menu .m-menu__cta { margin-top: auto; }
body.ulise .m-menu .m-menu__cta .btn { width: 100%; }
/* 移动菜单里的当前页：文字下方一条 2px 主色短线（宽度跟文字块走，不铺满整行） */
body.ulise .m-menu a.is-active::after {
  content: ""; display: block; width: 46px; height: 2px;
  background: var(--accent); margin-top: 8px;
}
/* 深炭导航固定后，菜单展开时不再把导航刷成暖白——保持一条深色顶栏压在浅色菜单上 */
body.menu-open .nav { box-shadow: none; border-bottom-color: transparent; }
body.admin-bar .m-menu { top: 32px; }

/* 全屏菜单只在 ≥900px 隐掉。800–899 是手机横屏（844 × 390）常见档，
   七项 + CTA 在那里排不进一行（实测 800 时整行超宽 11px），改走汉堡。 */
@media (min-width: 900px) {
  body.ulise .m-menu { display: none; }
}
@media (min-width: 800px) and (max-width: 899px) {
  body.ulise .nav__links { display: none; }
  body.ulise .nav__cta { display: none; }
  body.ulise .nav__burger { display: inline-flex; margin-left: auto; }
}
@media (max-width: 799px) {
  body.ulise .nav__burger { display: inline-flex; margin-left: auto; }
  body.ulise .nav__cta { display: none; }         /* CTA 在全屏菜单底部，导航腾出空间 */
}

/* ---------- 21. Partner 页（工作包 B） ---------- */
body.ulise .hero--sub .hero__inner { min-height: 50vh; }
body.ulise .hero--sub .d1 { font-size: clamp(2.75rem, 5.2vw, 5.25rem); }  /* 50vh hero 按 1:0.47 收敛主标 */

/* 数字条浅底深字版（Section 1） */
body.ulise .hero__meta--light { background: transparent; border-top: 1px solid var(--line); }
body.ulise .hero__meta--light dl { grid-template-columns: repeat(4, 1fr); }
body.ulise .hero__meta--light .cell { border-right-color: var(--line); }
body.ulise .hero__meta--light dt { color: var(--muted); }
body.ulise .hero__meta--light dd { color: var(--ink); }

/* 深炭统计带嵌在浅色版块内（Section 4） */
body.ulise .stats--panel {
  background: var(--dark);
  padding: clamp(2rem, 4vw, 3.25rem) clamp(1.5rem, 3vw, 3rem);
}
body.ulise .stats--panel .stat__num { font-size: clamp(2.5rem, 5vw, 4.5rem); }  /* 1 YEAR/AIR 文字型，防溢出 */

/* 深底区标题强制白（对抗 Kadence h2 元素选择器的 palette3 色） */
body.ulise .section--ink .h2 { color: #FFFFFF; }

/* 表单提示条 + 蜜罐 */
body.ulise .form__note {
  grid-column: 1 / -1;
  font-size: var(--fs-sm); color: #FFFFFF;
  border: 1px solid rgba(255,255,255,.3);
  padding: 12px 16px;
}
body.ulise .form__note--err { border-color: var(--accent); }
body.ulise .hp-field {
  position: absolute !important; left: -9999px !important;
  width: 1px; height: 1px; overflow: hidden; border: 0; padding: 0;
}

@media (max-width: 799px) {
  body.ulise .hero__meta--light dl { grid-template-columns: 1fr; }
  body.ulise .hero__meta--light .cell { border-right: 0; border-bottom: 1px solid var(--line); }
  body.ulise .hero__meta--light .cell:last-child { border-bottom: 0; }
}

/* ---------- 22. Support 页（工作单 C，2026-11-11） ---------- */

/* 浅底版块内的深炭面板：装「三步流程 + 统计带」。
   .quote__list 与 .stats 的样式本来就是深底配色（白字 / 白细线 / 焰橙序号），
   所以放进面板即成立，不再复制一套浅底变体。 */
body.ulise .ink-panel {
  background: var(--dark);
  color: var(--inv);
  padding: clamp(2rem, 4vw, 3.25rem) clamp(1.5rem, 3vw, 3rem);
}
body.ulise .ink-panel .quote__list { margin-top: 0; }
body.ulise .ink-panel .quote__list li:first-child { border-top: 0; padding-top: 0; }
body.ulise .ink-panel .stats { margin-top: clamp(2rem, 4vw, 2.75rem); }
body.ulise .ink-panel .stat__num { font-size: clamp(2.5rem, 5vw, 4.5rem); }  /* 48H / AIR / 1 YEAR 文字型 */

/* 文档语义占位（不可点击——真实 PDF 备齐前不做假下载链接） */
body.ulise .dl-list { display: grid; gap: 12px; margin-top: 28px; }
body.ulise .dl-ph {
  display: flex; align-items: baseline; gap: 12px;
  border: 1px dashed var(--line-2);
  padding: 14px 16px;
  font-size: var(--fs-xs); color: var(--muted); letter-spacing: 0.04em;
}
body.ulise .dl-ph::before { content: "↓"; color: var(--accent); font-size: 0.9375rem; }

@media (max-width: 799px) {
  body.ulise .ink-panel { padding: 24px 20px; }
  body.ulise .ink-panel .stat { padding-top: 20px; gap: 10px; }
}

/* ---------- 23. 询盘表单 v2（D48，2026-11-12） ---------- */

/* 产品上下文条：客户从产品页点进来时告诉他「你正在问的是这个型号」，
   可一键移除（移除后回到 General，隐藏字段同步清空，JS 见 ulise.js §5）。
   深底区，所以配色走 inv 系；不加背景块，只用上下细线，避免和输入框抢视觉。 */
body.ulise .ctx {
  grid-column: 1 / -1;
  display: flex; align-items: center; gap: 10px; flex-wrap: wrap;
  border-top: 1px solid rgba(255,255,255,.18);
  border-bottom: 1px solid rgba(255,255,255,.18);
  padding-block: 12px;
  margin-top: -4px;
}
body.ulise .ctx[hidden] { display: none; }          /* 无产品上下文时整条不出现 */
body.ulise .ctx__label {
  font-size: var(--fs-label); letter-spacing: 0.08em; text-transform: uppercase;
  color: var(--inv-muted); font-weight: 600;
}
body.ulise .ctx__val { font-size: var(--fs-sm); color: #FFFFFF; min-width: 0; overflow-wrap: anywhere; }
body.ulise .ctx__x {
  margin-left: auto;
  border: 0; background: transparent; padding: 0 4px;
  color: var(--inv-muted); font-size: 1.125rem; line-height: 1;
  cursor: pointer;
}
body.ulise .ctx__x:hover, body.ulise .ctx__x:focus-visible { color: var(--accent); }

/* 必填星号：焰橙，与 label 同字号，不额外撑高行高 */
body.ulise .field .req { color: var(--accent); }

/* 字段解释：只在电话那格用一次（要国家码，否则打不通） */
body.ulise .field__hint { font-size: var(--fs-xs); color: var(--inv-muted); line-height: 1.4; }

/* 原生校验失败提示：Chrome 会把气泡画在输入框旁；这里只保证无效态可辨认。
   只用 :user-invalid（用户交互过才算），否则空表单一加载就全线标红。 */
body.ulise .field input:user-invalid { border-bottom-color: var(--accent); }

@media (max-width: 799px) {
  body.ulise .ctx { padding-block: 10px; row-gap: 2px; }
  /* 窄屏：第一行 ABOUT + ×，第二行整行放型号名（否则 × 会被挤到单独一行） */
  body.ulise .ctx__x { order: 2; }
  body.ulise .ctx__val { order: 3; flex: 1 1 100%; }
}

/* ---------- 24. 占位块掃光（shimmer skeleton，D50，2026-11-12） ----------
   用途：实拍素材未到位的语义占位块（首页 6 张场景卡 / 备件细节 / About 工厂图 /
   Support 文档位）给一个「这里会填内容」的活体提示。
   ⚠️ 真实素材替换后删除对应占位块的 shimmer 类。
   纪律：纯 CSS，无 JS 无额外请求；只动 background-position，不动盒模型 → 无 CLS；
       光带是 ::after 伪元素，z-index 低于子元素，语义标注文字（IMAGE: …）始终在光带之上；
       prefers-reduced-motion 下 animation:none，光带停在画外（等于不显示）。 */
body.ulise .shimmer { position: relative; overflow: hidden; isolation: isolate; }
body.ulise .shimmer::after {
  content: "";
  position: absolute; inset: 0;
  z-index: -1;              /* 负层：压在容器底色之上、文字之下（文字含裸文本节点） */
  pointer-events: none;
  background-image: linear-gradient(100deg,
    rgba(255,255,255,0) 40%,
    rgba(255,255,255,.30) 50%,
    rgba(255,255,255,0) 60%);
  background-repeat: no-repeat;
  background-size: 300% 100%;
  background-position: 200% 0;
  animation: ulise-shimmer 1.6s linear infinite;
}
body.ulise .shimmer > * { position: relative; z-index: 1; }
@keyframes ulise-shimmer {
  from { background-position: 200% 0; }
  to   { background-position: -100% 0; }
}

/* 文档占位条本身没有底色，光带扫过会看不见 → 用现有占位灰打底（不引新色） */
body.ulise .dl-ph { background: var(--plate); }

/* 减动效：光带停在画外（同特异性规则必须排在上面的 .shimmer::after 之后才生效） */
@media (prefers-reduced-motion: reduce) {
  body.ulise .shimmer::after {
    animation: none !important;
    background-position: 200% 0 !important;
  }
}

/* ---------- 25. 表单 v3 · 系列页 · 型号页（D53，2026-11-12） ---------- */

/* 25a. quote__list 的浅底变体。
   原 .quote__list 是给深炭区写死的（白字 + 白 18% 细线 + 焰橙序号），
   搬到浅底上会整段看不见。这里只换颜色，结构/间距/字号全部继承。 */
body.ulise .quote__list--light li {
  color: var(--body-c);
  border-top-color: var(--line);
}
body.ulise .quote__list--light li:last-child { border-bottom-color: var(--line); }
body.ulise .quote__list--light b { color: var(--ink); font-weight: 600; }
/* 浅底上焰橙 #E8582A 只有 3.6:1（16px 粗体不算 large text），改用同色相的
   --accent-2 #C44A22 → 4.6:1。深底那份（.quote__list）保持焰橙，5.7:1 达标。 */
body.ulise .quote__list--light span:first-child { color: var(--accent-2); }

/* 25b. 整卡可点（系列卡 → 系列页）。
   ::before 铺满 .range--link，点击落在卡片任意位置都进链接；
   只给有目标页的卡加（HEO / UMO 暂无子页，不加，避免空页）。 */
body.ulise .range--link { position: relative; }
body.ulise .range--link h3 a::before { content: ""; position: absolute; inset: 0; z-index: 1; }
body.ulise .range--link h3 a { transition: color .2s ease; }
body.ulise .range--link h3 a:hover { color: var(--accent); }

/* 25c. 系列页型号表：640 以下不隐藏第 2 列。
   首页 .models 是五列，窄屏砍掉「Format」列才放得下；系列页只有三列，
   砍掉「Trays」正好把这张表唯一的信息砍了。 */
body.ulise table.models td a { border-bottom: 1px solid var(--line-2); }
body.ulise table.models td a:hover { color: var(--accent); border-color: var(--accent); }
@media (max-width: 640px) {
  body.ulise table.models--series th:nth-child(2),
  body.ulise table.models--series td:nth-child(2) { display: table-cell; }
}

/* 25d. 型号页图位：1:1 暖灰底 + shimmer（与首页场景卡同一套占位语汇）。
   2×2 排布；375 下仍是 2 列——单列会把四张图拉成一屏长的滚动。 */
body.ulise .model-gallery {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: var(--gap);
}
body.ulise .model-fig {
  aspect-ratio: 1 / 1;
  background: var(--plate);
  border: 1px solid var(--line);
  display: grid; place-content: center; gap: 8px; text-align: center;
  padding: 12px;
}
body.ulise .model-fig .ph {
  font-size: 0.75rem; color: var(--muted); letter-spacing: 0.04em;
  line-height: 1.5;
}

/* 25e. 规格表：字段骨架固定，值是占位灰字。
   为什么不用 .models：那张表是横向多列对照，这张是「字段 / 值」两列，
   窄屏下换行行为完全相反（这里必须整行可读，不能横向滚）。 */
body.ulise table.spec { width: 100%; border-collapse: collapse; font-size: var(--fs-sm); }
body.ulise table.spec th,
body.ulise table.spec td {
  text-align: left; padding: 16px 20px 16px 0;
  border-bottom: 1px solid var(--line); vertical-align: baseline;
}
body.ulise table.spec th { width: 40%; font-weight: 400; color: var(--body-c); }
body.ulise table.spec td { color: var(--ink); }
body.ulise table.spec tr:last-child th,
body.ulise table.spec tr:last-child td { border-bottom: 0; }
body.ulise .spec-ph { color: var(--muted); font-size: var(--fs-xs); letter-spacing: 0.02em; }
@media (max-width: 640px) {
  body.ulise table.spec th { width: 46%; }
  body.ulise table.spec th, body.ulise table.spec td { padding: 13px 12px 13px 0; }
}

/* 25f. GDPR 勾选（工作单 A3）。
   ⚠️ label 会被 `.field label` 那条「全大写 + 0.08em」命中，这里必须逐项覆盖，
      否则同意书会变成一片大写字母，客户读不下去——同意书读不下去等于没同意。 */
body.ulise .field--check { margin-top: 2px; }
/* ⚠️ 选择器必须是 body.ulise .field .check：写成 body.ulise .check 会被
   body.ulise .field label（同层级但多一个元素选择器）压过去，同意书会变成
   一整片大写——第一次实测就是这样，截图里才看出来。 */
body.ulise .field .check {
  display: flex; gap: 12px; align-items: flex-start; cursor: pointer;
  font-size: var(--fs-xs); line-height: 1.55; font-weight: 400;
  letter-spacing: 0; text-transform: none;
  color: var(--inv-muted);
}
body.ulise .field .check input[type="checkbox"] {
  flex: 0 0 auto;
  width: 17px; height: 17px; margin: 2px 0 0;
  padding: 0;
  border: 1px solid rgba(255,255,255,.55);
  background: transparent;
  accent-color: var(--accent);
  cursor: pointer;
}
body.ulise .field .check a { color: #FFFFFF; border-bottom: 1px solid rgba(255,255,255,.45); }
body.ulise .field .check a:hover { border-bottom-color: var(--accent); }

/* 25g. 表单底部两按钮并排（工作单 B3）：主按钮在左，WhatsApp 在右。
   只有传了 wa_text 的页面才出现第二颗（系列页 / 型号页）；首页保持单按钮 + 文案。 */
body.ulise .form__foot--split { flex-direction: row; align-items: stretch; gap: 12px; }
body.ulise .form__foot--split .btn { width: auto; flex: 1 1 0; }
@media (max-width: 599px) {
  /* 375 下两颗按钮各半宽会把 "SEND INQUIRY" 挤成两行，改回上下排列 */
  body.ulise .form__foot--split { flex-direction: column; }
  body.ulise .form__foot--split .btn { width: 100%; }
}

/* ---------- 26. 法务页窄栏（/privacy/，D58，2026-11-12） ----------
   背景：主题此前没有 page.php，新建页面会掉到 Kadence 的 page.php——
   宽容器 + 它的 entry-hero，和 v3 对不上。法务页只需要「一列字」，
   所以给 page-privacy.php 单独一套窄栏排版，列宽吃 --textw(720px)。
   正文全部来自 post_content，这里的规则只管「长文读起来不累」：
   行距 1.7、段距 16px、节标题前 40px 留白、粗体只做小标题不改色相。 */
body.ulise .legal { max-width: var(--textw); }
body.ulise .legal p { font-size: var(--fs-body); line-height: 1.7; color: var(--body-c); }
body.ulise .legal h2 {
  font-size: clamp(1.375rem, 2vw, 1.75rem);
  line-height: 1.2;
  letter-spacing: -0.01em;
  color: var(--ink);
  font-family: var(--font-display);
  font-weight: 600;
}
body.ulise .legal h2 + p { margin-top: 16px; }
body.ulise .legal p + p { margin-top: 16px; }
body.ulise .legal p + h2 { margin-top: 40px; }
/* 「Updated November 2026」这一行：全大写小字，跟正文拉开层级 */
body.ulise .legal .legal__meta {
  font-size: var(--fs-xs);
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--muted);
}
body.ulise .legal strong { font-weight: 600; color: var(--ink); }
body.ulise .legal a { border-bottom: 1px solid var(--line-2); }
body.ulise .legal a:hover { border-bottom-color: var(--accent); }
