/* =====================================================================
 * portal-mobile.css — 门户（客人路径）移动端覆盖层        2026-09-20 · design 岗
 * =====================================================================
 * 定位：**只覆盖，不改原文件**。pico.min.css / portal.css / 任何页面 HTML 都不动，
 *       本文件靠「加载顺序在后 + 必要时 !important」生效。
 *
 * 挂载方式（全部 12 页：index / catalog / box / checkout / done + login / orders / proofing /
 *           statements / statement / share + workbench）：
 *       放在 <head> 里**最后一个** <link rel="stylesheet">，即排在页面自带 <style> 之后：
 *         <link rel="stylesheet" href="assets/portal.css">
 *         <style> ...页面私有...</style>          ← box.html / catalog.html 有
 *         <link rel="stylesheet" href="assets/portal-mobile.css">   ← 本文件（必须在最后）
 *
 * 断点（与卡内口径一致，不与旧的 max-width:390px 打架 —— 本文件不使用 390）：
 *       >900px   电脑端：本文件全部不生效（工作台/员工端不受影响）
 *       481–900  平板  ：只修「结构性溢出 + 触控尺寸」（§8）
 *       ≤480px   手机  ：主战场（§1–§7 客人路径 5 页 / §10 其余 6 页）
 *
 * 第一轮（卡 t_19067cb7）= 客人下单路径 5 页：§1–§9；
 * 第二轮（卡 t_0ccba5f2）= 其余 6 页（登录/订单/打样/账单×2/分享）：§10，
 *          页面级用各自 Alpine 根 `[x-data="…App()"]` 锚定，绝不回头动第一轮验收过的 5 页。
 *
 * 硬口径（逐条可复测）：
 *   R1 正文 ≥16px；说明性小字 ≥14px（原 .pt-muted 12.5px / 页脚 12px 均不达标）
 *   R2 可点元素 ≥44×44px（button / a.btn / input / select / 复选框所在 label / 芯片）
 *   R3 整页不横向滚动：documentElement.scrollWidth - clientWidth = 0
 *   R4 3D 画布：容器自适应 + 单指旋转 / 双指缩放 + 全屏进出后按容器重算
 *   R5 画质不变：低面数 + 纯色材质照旧（老板 2026-09-20 裁定：不做手机降级）
 *
 * 已知耦合（改 wb3d.js 时必须同步，详见逐页清单文档 §7）：
 *   - wb3d.js 的 CSS 兜底全屏会给 #p3dCanvas 写 dataset.fsPrevStyle；
 *     本文件用 :not([data-fs-prev-style]):not(:fullscreen) 把「手机上的画布高度」
 *     让位给全屏态，避免 !important 把 iOS 兜底全屏顶掉。
 * ===================================================================== */

/* =====================================================================
 * §0 全局基座（≤480 手机）
 * ===================================================================== */
@media (max-width: 480px) {
  html { -webkit-text-size-adjust: 100%; }

  /* R1：正文 16px —— 同时是 iOS「输入框 <16px 自动放大」的根治点 */
  :root { --pico-font-size: 16px; }
  body { font-size: 16px; }
  .pt-lead { font-size: 16px; line-height: 1.75; }

  /* 左右留白 22 → 14（375 宽多出 16px 给内容），卡片内边距同步收 */
  .pt-shell { padding: 0 14px; }
  .pt-card { padding: 16px; border-radius: 14px; }
  .pt-card.hoverable:hover { transform: none; }        /* 手机上无 hover，避免点击后残留位移 */

  /* 说明性小字下限 14px（页面里还有 inline 的 11.5/12/12.5px，必须 !important 才压得住） */
  .pt-muted { font-size: 14px !important; line-height: 1.65; }
  .eyebrow { font-size: 14px !important; letter-spacing: 1.2px; }
  .pt-section { margin: 30px 0 8px; }
  .pt-section-h { font-size: 20px; line-height: 1.35; }
  .pt-section-sub { font-size: 14px !important; margin-bottom: 16px; }
  .pt-banner { font-size: 14px !important; padding: 12px 14px; line-height: 1.7; }
  .pt-banner .b-ic { font-size: 17px; }
  .pt-loading, .pt-empty { font-size: 14px !important; }
  .pt-empty { padding: 34px 8px; }
  .pt-muted code, p code, .pt-price code { font-size: 13.5px; word-break: break-all; }

  /* 正文里夹的链接（面包屑 / 横幅里的「清除筛选」/ 卡片里的「登录注册」/ 页脚备案号）
     —— 都是真实可点目标，一律撑到 44px 高 */
  nav[aria-label="breadcrumb"] a,
  .pt-banner a,
  .pt-card .pt-muted a[href],
  #site-footer a {
    display: inline-flex; align-items: center; min-height: 44px; padding: 0 4px;
  }

  /* 页面级 h1 在 HTML 里写了 inline font-size（27/30/32px）→ 只能 !important 压 */
  main h1 { font-size: 22px !important; line-height: 1.32 !important; }

  /* R2：可点元素 ≥44×44 ------------------------------------------------- */
  button:not([type="checkbox"]):not([type="radio"]),
  a.pt-btn, label.pt-btn, [role="button"],
  .pt-filter-chip, .chip-multi,
  input:not([type="checkbox"]):not([type="radio"]):not([type="hidden"]),
  select, textarea {
    min-height: 44px !important;
  }
  .pt-btn, .pt-filter-chip, .chip-multi, button { min-width: 44px; }
  .pt-btn { font-size: 15px; padding: 11px 18px; }
  .pt-btn.sm { font-size: 14px !important; padding: 10px 14px !important; }

  /* 芯片（工艺路线 / 盒型族 / 数量 / 表面工艺 / 价格口径 / 3D 颜色）统一 44 高 */
  .pt-filter-chip, .chip-multi {
    display: inline-flex; align-items: center; justify-content: center;
    padding: 10px 16px !important; font-size: 14px !important; line-height: 1.35;
  }
  .pt-filter-chip small { font-size: 14px !important; }
  .pt-filters { gap: 8px; }

  /* 复选框：放大方框 + 让整行 label 成为 44px 高的可点区 */
  input[type="checkbox"], input[type="radio"] { width: 22px !important; height: 22px !important; }
  label:has(> input[type="checkbox"]), label:has(> input[type="radio"]) {
    min-height: 44px; display: flex; align-items: flex-start; gap: 10px; font-size: 14px !important;
  }

  /* 表单：字号 16px 起（阻止 iOS 聚焦放大），控件加高并给足两侧留白 */
  input, select, textarea { font-size: 16px !important; padding: 11px 12px !important; }
  textarea { min-height: 76px; }
  label { font-size: 15px; }
  label.pt-lbl { font-size: 15px !important; }
  .pt-grid2, .pt-grid3, .dim-grid { gap: 12px; }

  /* 表格：字号抬到 14px，只在**表格容器**内部允许横向滑动（见 §4 表格口径） */
  .pt-table { font-size: 14px; }
  .pt-table th, .pt-table td { padding: 9px 10px; }

  /* 金额：窄屏收一档，避免大字把卡片撑破 */
  .pt-price-big { font-size: clamp(22px, 7.2vw, 30px); }
  .pt-kv { gap: 14px 18px; }
  .pt-kv .v { font-size: 16px; }
}

/* =====================================================================
 * §1 顶栏（≤480）—— 两行式：① 品牌 + 订单/登录  ② 导航条（可横滑）
 * 现状：品牌 62px 宽被挤成多行、右侧块右边界 461px → 单页 71–86px 横向溢出的唯一真因
 * （导航 min-content 实测 484px）。手机上不再并排挤，改为两行。
 * ===================================================================== */
@media (max-width: 480px) {
  .pt-navbar .pt-shell {
    flex-wrap: wrap;              /* 结构性根治：以后再多一对按钮也只会换行，不会溢出 */
    height: auto !important;      /* 原 62px 固定高会把第二行挤出可视区 */
    align-items: center;
    gap: 6px 10px;
    padding: 6px 14px 4px;
  }
  .pt-brand { flex: 0 1 auto; min-width: 0; }
  .pt-brand b, .pt-brand small { overflow-wrap: anywhere; }
  /* 品牌标：与桌面同口径 —— 无白框，图占满原框（32px） */
  /* 品牌标口径（老板 2026-09-22 18:05）：手机端同规格 白底 40 + 商标 35 */
  .pt-logo { width: 41px; height: 41px; }
  .pt-logo svg { width: 35px; height: 35px; display: block; }
  .pt-brand b { font-size: 16.5px; }
  .pt-brand small { display: none; }   /* 10px 副标题：手机上过小且抢宽度（信息在首页已有） */

  /* 右侧块：结构上不允许撑宽 —— 自身可换行、可缩、长店名可断行（门店名/姓名再长也不会溢出） */
  .pt-nav-right { margin-left: auto; flex: 0 1 auto; min-width: 0; max-width: 100%; gap: 8px; }
  .pt-nav-right .pt-btn, .pt-nav-user .pt-btn, .pt-user-btn {
    display: inline-flex; align-items: center; justify-content: center;
    min-height: 44px !important; padding: 10px 13px !important; font-size: 14px !important;
  }
  /* 账号下拉的菜单项：手机上同样按 ≥44px 触控尺寸（老板口径：可点元素 ≥44×44） */
  .pt-user-menu { min-width: 200px; }
  .pt-user-menu a, .pt-user-menu button { min-height: 44px; display: flex; align-items: center; font-size: 14px; }
  .pt-nav-user {
    font-size: 14px !important; gap: 8px; min-width: 0; max-width: 100%;
    flex-wrap: wrap; justify-content: flex-end; overflow-wrap: anywhere;
  }
  .pt-nav-user > * { min-width: 0; }
  .pt-nav-user .pt-avatar { width: 32px; height: 32px; font-size: 14px; flex: 0 0 auto; }
  /* 已登录态：「我的订单 / 我的账单」与下方导航条重复 → 手机上收起，省 1 行宽度。
     2026-09-24 起这条口径**统一到全断点**，唯一实现处 = portal.js 的 navHtml()（右侧不再生成这两个链接）
     → 本文件的 CSS 隐藏规则已删，别再往这里加回来。 */

  /* 导航条：第二行通栏。唯一允许横向滑动的局部容器（滑动条隐藏，仅手势；不产生整页滚动） */
  .pt-navlinks {
    order: 3; flex: 1 1 100%; margin-left: 0; gap: 2px;
    overflow-x: auto; -webkit-overflow-scrolling: touch;
    scrollbar-width: none; padding: 0 0 2px;
  }
  .pt-navlinks::-webkit-scrollbar { display: none; }
  .pt-navlinks a {
    flex: 0 0 auto; white-space: nowrap; font-size: 15px;
    padding: 10px 8px; min-height: 44px;
    display: inline-flex; align-items: center;
  }
  /* 品牌链接本体的点按高度（logo 32px 高 → 撑到 44） */
  .pt-brand { min-height: 44px; align-items: center; }
}

/* =====================================================================
 * §2 首页 index.html（≤900 修装饰块，≤480 排版）
 * 现状：portal.css 第 198 行的 @media(max-width:900px){.pt-hero-visual{display:none}}
 *       被第 204 行的 .pt-hero-visual{display:grid}（同特异性、位置在后）**反覆盖**，
 *       于是 340px 高的装饰区（含 3 个 absolute 装饰块）在手机上仍然显示 → 多出 90px 溢出。
 *       原文件不改 → 这里用 !important 把「原意」恢复。
 * ===================================================================== */
@media (max-width: 900px) {
  .pt-hero-visual { display: none !important; }
  .pt-hero .pt-shell { grid-template-columns: 1fr; }
}
@media (max-width: 480px) {
  .pt-hero { padding: 22px 0 16px; }
  h1.pt-hero-h { font-size: clamp(23px, 7.6vw, 32px); margin: 8px 0 12px; }
  .pt-hero-trust { font-size: 14px; gap: 8px 16px; margin-top: 18px; }
  /* 两个主 CTA 各占一行（窄屏并排会互相挤，也便于拇指点） */
  .pt-hero a.pt-btn { display: flex; width: 100%; align-items: center; justify-content: center; font-size: 15.5px !important; }
  .pt-route-strip { gap: 12px; }
  .pt-route-card { padding: 16px; }
  .pt-route-card h4 { font-size: 16px; }
  .pt-card[style*="padding:38px"] { padding: 24px 16px !important; }
  .pt-mini-card h4, .pt-box-card .top div[style*="font-size:16.5px"] { font-size: 16px !important; }
}

/* =====================================================================
 * §3 选盒型 catalog.html（≤480）
 * ===================================================================== */
@media (max-width: 480px) {
  .pt-grid-cards { grid-template-columns: 1fr !important; gap: 14px; }   /* 定死单列，避免 minmax(262px) 在 415–480 之间摇摆 */
  .pt-box-card .desc { min-height: 0; -webkit-line-clamp: 4; }
  .catalog-toolbar { gap: 8px; }
  .catalog-toolbar input { max-width: 100% !important; flex: 1 1 100%; }
  .catalog-toolbar .pt-btn { flex: 0 0 auto; }
  .catalog-toolbar .pt-muted { flex: 1 1 100%; margin-left: 0 !important; }
}

/* =====================================================================
 * §4 试盒 box.html（≤480）—— 参数表单 + 报价面板 + 3D
 * 表格口径：本页 .pt-table 均为 2 列（明细/取值），单元格默认换行，不需要横向滚动。
 *          以后若出现 ≥3 列宽表，套 .ptm-table-scroll（见 §9）——那是**唯一**允许横向滚动的容器。
 * ===================================================================== */
@media (max-width: 480px) {
  .pt-layout2 { margin-top: 16px !important; gap: 16px !important; }
  .qty-quick .pt-filter-chip { padding: 10px 14px !important; font-size: 14px !important; }
  .cost-row { font-size: 14px; }
  .big-num { font-size: clamp(22px, 7.2vw, 26px) !important; }
  #pf-items, #pf-items td, #pf-items th { font-size: 14px !important; }
  .hs-box { padding: 12px; }
  .pf-card { font-size: 14px !important; line-height: 1.7; }
  .pf-card ul { padding-left: 16px; }
  .pf-h { font-size: 15px !important; margin: 14px 0 6px; }
  #p-box-type, .hs-box input[type="text"] { width: 100% !important; }
}

/* =====================================================================
 * §5 3D 画布（≤900 平板起，≤480 单独调高）+ 全屏
 * 现状（实测 375）：容器 263×250，canvas 100% 宽、DPR 2 —— 尺寸本身没问题，
 *                   但 canvas 的 touch-action = auto → 单指拖动会**滚页面**、双指会**缩放页面**，
 *                   OrbitControls 收不到手势（本仓 r128 版 OrbitControls 不自己设 touch-action）。
 *                   → 纯 CSS 修：canvas{touch-action:none}，手势全部交给 3D。
 * 全屏（老板 2026-09-20 裁定）由 wb3d.js 的 toggleFullscreen 负责，本文件只保证：
 *   ① 全屏按钮 ≥44px（它在 wb3d.js 里写的是 inline min-height:36px → 需 !important）
 *   ② 手机上的画布高度让位于全屏态（:not([data-fs-prev-style]):not(:fullscreen)）
 *   ③ 全屏内工具条/提示可读（14px）
 * 画质：低面数 + 纯色材质照旧，本文件不做任何降质/降面数处理。
 * ===================================================================== */
#p3dCanvas canvas { touch-action: none; }        /* 手势归 3D：单指旋转 / 双指缩放；不在画布上滚页面 */
#p3dCanvas > button {                            /* wb3d.js 注入的「全屏 / ⤡ 退出全屏」 */
  min-height: 44px !important; min-width: 64px !important;
  padding: 9px 12px !important; font-size: 14px !important; line-height: 1.2 !important;
  border-radius: 10px !important;
}

@media (max-width: 480px) {
  #p3dCard { padding: 10px !important; margin-bottom: 14px !important; }
  /* 画布高度跟视口走（58vw ≈ 375 下 218px / 414 下 240px），全屏态不参与 */
  #p3dCanvas:not([data-fs-prev-style]):not(:fullscreen) { height: min(58vw, 300px) !important; }
  #p3dCard .pt-filters { gap: 8px; }
}

/* 平板 + 手机共同：3D 卡片内的控件与说明小字（≤480 已另有更强的芯片规则，此处不冲突）
   画布高度只在 ≤480 覆盖（平板/电脑保留 box.html 的 inline 250px，实测 250px 在平板上比例正常） */
@media (max-width: 900px) {
  #p3dCard .pt-muted { font-size: 14px !important; }
  #p3dCard select { font-size: 16px !important; min-height: 44px !important; padding: 10px !important; }
  #p3dCard .pt-filter-chip, #p3dCard .pt-btn { font-size: 14px !important; padding: 9px 14px !important; }
}

/* 全屏态（原生 Fullscreen API 或 wb3d.js 的 CSS 兜底）：画布吃满、不滚页面 */
#p3dCanvas:fullscreen, #p3dCanvas[data-fs-prev-style] {
  border-radius: 0 !important; margin: 0 !important; height: 100% !important; width: 100% !important;
}
#p3dCanvas:fullscreen canvas, #p3dCanvas[data-fs-prev-style] canvas { width: 100% !important; height: 100% !important; }

/* =====================================================================
 * §6 在线测价 checkout.html + 下单完成 done.html（≤480）
 * ===================================================================== */
@media (max-width: 480px) {
  .pt-stepper { gap: 4px; margin: 2px 0 16px; }
  .pt-step { font-size: 13.5px; }
  .pt-step .ln { width: 14px; }
  .pt-step .n { width: 24px; height: 24px; font-size: 13px; }
  .pt-layout2 { gap: 16px !important; }
  #taxSwitch { gap: 8px; }

  /* 成功页 */
  .pt-success-hero { padding: 20px 6px 6px; }
  .pt-big-check { width: 68px; height: 68px; font-size: 34px; margin-bottom: 12px; }
  .pt-success-hero a.pt-btn { display: flex; width: 100%; align-items: center; justify-content: center; }
  .pt-big-check + .eyebrow { letter-spacing: 2px !important; }
}

/* 页脚（site-footer.js 用 inline 12px 写死 → 只能 !important） */
@media (max-width: 480px) {
  #site-footer { font-size: 14px !important; line-height: 1.9 !important; padding: 16px 12px 22px !important; margin-top: 32px !important; }
}

/* =====================================================================
 * §7 平板 481–900px：只修「结构性溢出 + 触控尺寸」，排版交给原 portal.css
 * （原文件已有 820/900/920 三档；这里只补 R2 与画布手势，触控同样按 ≥44 统一，不另立标准）
 * ===================================================================== */
@media (min-width: 481px) and (max-width: 900px) {
  .pt-navbar .pt-shell { flex-wrap: wrap; height: auto !important; padding: 8px 18px; row-gap: 4px; }
  .pt-navlinks { flex-wrap: wrap; }                       /* 平板上换行，不出横向滚动 */
  button:not([type="checkbox"]):not([type="radio"]),
  a.pt-btn, label.pt-btn, [role="button"],
  .pt-filter-chip, .chip-multi,
  input:not([type="checkbox"]):not([type="radio"]):not([type="hidden"]),
  select, textarea {
    min-height: 44px;
  }
  .pt-navlinks a, .pt-nav-right .pt-btn, .pt-nav-user .pt-btn, .pt-user-btn {
    min-height: 44px; display: inline-flex; align-items: center;
  }
  .pt-user-menu a, .pt-user-menu button { min-height: 44px; display: flex; align-items: center; font-size: 14px; }
  .pt-filter-chip, .chip-multi, a.pt-btn, button { min-width: 44px; }
  .pt-filter-chip, .chip-multi { display: inline-flex; align-items: center; justify-content: center; }
  input, select, textarea { font-size: 16px; }            /* iPad Safari 同样有「<16px 聚焦放大」 */
  .pt-layout2 { gap: 18px; }
}

/* =====================================================================
 * §8 结构加固（全断点 ≤900）：让「撑宽」在结构上不可能发生
 * ===================================================================== */
@media (max-width: 900px) {
  .pt-navbar, .pt-navbar .pt-shell, .pt-navlinks, .pt-nav-right, .pt-nav-user, .pt-brand { min-width: 0; }
  .pt-navbar .pt-shell { max-width: 100%; }
  .pt-shell { max-width: 100%; }
  .pt-layout2, .pt-layout2 > * { min-width: 0; }
  .pt-sticky { position: static; top: auto; }     /* 单列布局下 sticky 无意义（会挡住下方内容） */
  .pt-hero { overflow-x: clip; }                  /* 装饰块兜底裁剪（原文件已是 overflow:hidden） */
  img, svg, canvas, video { max-width: 100%; }    /* 图片/二维码/3D 不撑破卡片 */
  .pt-table { width: 100%; }
  .pt-table th, .pt-table td { word-break: break-word; }
}

/* =====================================================================
 * §9 备用工具类（默认不生效，页面显式加类才用）
 *  .ptm-table-scroll —— ≥3 列宽表的**唯一**许可横向滚动容器（本次 5 页均未使用）
 * ===================================================================== */
.ptm-table-scroll { width: 100%; overflow-x: auto; -webkit-overflow-scrolling: touch; }
.ptm-table-scroll > .pt-table { min-width: 520px; }

/* =====================================================================
 * §10 门户其余 6 页（登录 / 我的订单 / 我的打样 / 账单列表 / 账单详情 / 分享页）
 *      2026-09-20 第二轮逐页核对（卡 t_0ccba5f2）· design 岗
 *
 * 作用域：本段全部包在 @media (max-width:480px) 内 —— 电脑端（>900）与平板（481–900）
 *         一个字都不动。页面级用各自 Alpine 根 `[x-data="…App()"]` 锚定，
 *         绝不波及其他页面（第一轮已验收的 index/catalog/box/checkout/done 不受影响）。
 * 逐页「现有问题 → 改法 → 用哪条 CSS」+ 375/390/414 三档验收点：
 *         设计文档/6x-门户其余页移动端核对-20260920.md
 *
 * 口径 R1/R2 与第一轮一致（正文 ≥16px、说明小字 ≥14px、可点元素 ≥44×44、整页不横向滚动）。
 * ===================================================================== */
@media (max-width: 480px) {
  /* ---------- 10.0 六页共同的字号缺口（原值都在 11–13.5px，低于 14px 下限） ---------- */
  /* 状态芯片 .pt-chip 12px（portal.css:124）→ 14px；芯片内嵌的 span（客户名/手机号）随之继承 */
  [x-data="ordersApp()"] .pt-chip,
  [x-data="proofingApp()"] .pt-chip,
  [x-data="statementsApp()"] .pt-chip,
  [x-data="statementApp()"] .pt-chip {
    font-size: 14px !important; padding: 4px 10px; line-height: 1.5;
  }
  /* 顶栏「已登录」块（portal.js navHtml 生成，12 页共用）：姓名是裸文本节点，13.5px → 14px */
  .pt-nav-user { font-size: 14px !important; }
  /* 说明性小字里的等宽代码（第一轮留了 13.5px 的口子）→ 14px */
  code, .pt-muted code, p code, .pt-price code { font-size: 14px !important; }

  /* 说明行里的文字链接：不在第一轮 4 类白名单里（面包屑 / 空态引导 / 提示条）→ 撑到 44px 高 */
  .eyebrow a[href], .pt-empty a[href], .pt-loading a[href],
  .pt-plan-due a[href], .pf-meta a[href], .bl-eq a[href] {
    display: inline-flex; align-items: center; min-height: 44px; padding: 0 4px;
  }

  /* ===================== 10.1 login.html（公众号引流第二个入口） ===================== */
  [x-data="authApp()"] .auth-wrap { gap: 18px; }
  [x-data="authApp()"] .auth-aside { padding: 4px 0 0; }
  [x-data="authApp()"] .auth-aside p { font-size: 16px !important; }      /* 正文 14.5px → 16px */
  [x-data="authApp()"] .auth-aside ul,
  [x-data="authApp()"] .auth-aside ul li,
  [x-data="authApp()"] .auth-aside ul b { font-size: 14px !important; }   /* 说明小字 13.5px */
  [x-data="authApp()"] .auth-aside .pt-banner { font-size: 14px !important; }
  [x-data="authApp()"] .pt-card[style*="padding:26px"] { padding: 16px !important; }  /* 登录卡内边距 */
  [x-data="authApp()"] .auth-tab button { font-size: 14px !important; }
  [x-data="authApp()"] .auth-sub button { font-size: 14px !important; }
  /* 微信扫码区：11–13px 全部抬到 14px（扫码卡/步骤/提示/模拟说明） */
  [x-data="authApp()"] .wx-chip,
  [x-data="authApp()"] .wx-chip.mode { font-size: 14px !important; padding: 4px 10px; }
  [x-data="authApp()"] .wx-qr .core { font-size: 14px !important; letter-spacing: .5px; }
  [x-data="authApp()"] .wx-btn-big { font-size: 15px !important; }
  [x-data="authApp()"] .wx-qr-card { gap: 12px; padding: 12px; }
  [x-data="authApp()"] .wx-step { min-width: 0; }   /* 手机上卡片更窄：步骤列可再窄一点也不换行挤出 */
  [x-data="authApp()"] .wx-sub,
  [x-data="authApp()"] .wx-step,
  [x-data="authApp()"] .wx-step b,
  [x-data="authApp()"] .wx-hint,
  [x-data="authApp()"] .wx-loading,
  [x-data="authApp()"] .wx-err { font-size: 14px !important; }
  [x-data="authApp()"] .wx-sub,
  [x-data="authApp()"] .wx-hint { line-height: 1.75; }
  [x-data="authApp()"] .wx-link { font-size: 14px !important; display: inline-flex; align-items: center; min-height: 44px; }
  /* 引流码提示条（?inv=）：12–12.5px → 14px */
  [x-data="authApp()"] .inv-banner b { font-size: 15px !important; }
  [x-data="authApp()"] .inv-banner .inv-sub,
  [x-data="authApp()"] .inv-chip,
  [x-data="authApp()"] .inv-mini { font-size: 14px !important; line-height: 1.75; }

  /* ===================== 10.2 orders.html（我的订单 · 生产进度） ===================== */
  [x-data="ordersApp()"] .pt-order-row { padding: 14px; }
  [x-data="ordersApp()"] .pt-order-row .h b { font-size: 16px !important; }
  /* 明细行 12.5px（portal.css:265）—— 数量/金额/交期/收货人都在这一行里 */
  [x-data="ordersApp()"] .pt-order-row .meta { font-size: 14px !important; line-height: 1.75; }
  [x-data="ordersApp()"] .pt-order-row .meta b { font-size: 15px !important; }
  [x-data="ordersApp()"] .pt-order-row .meta .pt-price { font-size: 16px !important; }   /* 金额 12.5px */
  /* 4 段进度条名称 12px（portal.css:275）→ 14px */
  [x-data="ordersApp()"] .pt-stage .lb,
  [x-data="ordersApp()"] .pt-stage .lb b { font-size: 14px !important; }
  /* 预计完成日 / 「新」徽标 / 提示条：11.5–13.6px → 14px */
  [x-data="ordersApp()"] .pt-plan-due,
  [x-data="ordersApp()"] .pt-plan-due b,
  [x-data="ordersApp()"] .pt-plan-due span[style*="11.8px"],
  [x-data="ordersApp()"] .pt-new-badge,
  [x-data="ordersApp()"] .pt-new-bar .go { font-size: 14px !important; }
  [x-data="ordersApp()"] .pt-new-bar .go { white-space: normal; }
  [x-data="ordersApp()"] .pt-order-detail .pt-table { font-size: 14px; }

  /* ===================== 10.3 proofing.html（我的打样） ===================== */
  [x-data="proofingApp()"] .pf-meta,
  [x-data="proofingApp()"] .pf-orders,
  [x-data="proofingApp()"] .pf-hint { font-size: 14px !important; }
  [x-data="proofingApp()"] .pf-step,
  [x-data="proofingApp()"] .pf-step b { font-size: 14px !important; }
  [x-data="proofingApp()"] .pf-step { padding: 9px 10px; }
  [x-data="proofingApp()"] .pf-body { gap: 14px; }

  /* ===================== 10.4 statements.html（账单列表） ===================== */
  /* ① 九列账单表：375 下最小内容宽 513px → 整页横向溢出 167px（本页唯一真溢出源）。
        改法：≤480 把这张表改成「堆叠式」——每个账单一行变一张小卡，列名由 CSS 生成
        （页面 HTML / portal.css 一行不动）。
        全程不加 !important：x-show 写在展开行上的 display:none 必须继续生效。 */
  [x-data="statementsApp()"] .pt-card > table.pt-table { display: block; width: 100%; }
  [x-data="statementsApp()"] .pt-card > table.pt-table > thead { display: none; }
  [x-data="statementsApp()"] .pt-card > table.pt-table > tbody { display: block; }
  [x-data="statementsApp()"] .pt-card > table.pt-table > tbody > tr {
    display: block; padding: 10px 0 12px; border-bottom: 1px solid var(--line);
  }
  [x-data="statementsApp()"] .pt-card > table.pt-table > tbody > tr > td {
    display: flex; flex-wrap: wrap; align-items: baseline; gap: 2px 8px;
    padding: 2px 0 !important; border: 0 !important; text-align: left !important;
    font-size: 15px; white-space: normal;
  }
  [x-data="statementsApp()"] .pt-card > table.pt-table > tbody > tr > td::before {
    content: ""; flex: 0 0 86px; font-size: 14px; color: var(--muted); font-weight: 400;
  }
  [x-data="statementsApp()"] .pt-card > table.pt-table > tbody > tr > td:nth-child(1)::before { content: "账期"; }
  [x-data="statementsApp()"] .pt-card > table.pt-table > tbody > tr > td:nth-child(2)::before { content: "账单号"; }
  [x-data="statementsApp()"] .pt-card > table.pt-table > tbody > tr > td:nth-child(3)::before { content: "期初未收"; }
  [x-data="statementsApp()"] .pt-card > table.pt-table > tbody > tr > td:nth-child(4)::before { content: "本期新增"; }
  [x-data="statementsApp()"] .pt-card > table.pt-table > tbody > tr > td:nth-child(5)::before { content: "本期已收"; }
  [x-data="statementsApp()"] .pt-card > table.pt-table > tbody > tr > td:nth-child(6)::before { content: "期末应收"; }
  [x-data="statementsApp()"] .pt-card > table.pt-table > tbody > tr > td:nth-child(7)::before { content: "到期日"; }
  [x-data="statementsApp()"] .pt-card > table.pt-table > tbody > tr > td:nth-child(8)::before { content: "状态"; }
  [x-data="statementsApp()"] .pt-card > table.pt-table > tbody > tr > td:nth-child(9)::before { content: "操作"; }
  /* 展开行（colspan=9 的整格）与「本期无新增单据」这类跨列表格：铺满、不加列名 */
  [x-data="statementsApp()"] .pt-card > table.pt-table > tbody > tr > td[colspan] {
    display: block !important; font-size: 14px;
  }
  [x-data="statementsApp()"] .pt-card > table.pt-table > tbody > tr > td[colspan]::before { content: none !important; }

  /* ② 展开行里的「单据明细」表（7 列，375 下最小内容宽 493px，同样撑宽）→ 同一套堆叠法 */
  [x-data="statementsApp()"] .bl-expand table.pt-table { display: block; width: 100%; }
  [x-data="statementsApp()"] .bl-expand table.pt-table > thead { display: none; }
  [x-data="statementsApp()"] .bl-expand table.pt-table > tbody { display: block; }
  [x-data="statementsApp()"] .bl-expand table.pt-table > tbody > tr {
    display: block; padding: 8px 0; border-bottom: 1px dashed var(--line);
  }
  [x-data="statementsApp()"] .bl-expand table.pt-table > tbody > tr > td {
    display: flex; flex-wrap: wrap; align-items: baseline; gap: 2px 8px;
    padding: 2px 0 !important; border: 0 !important; text-align: left !important;
    font-size: 14px; white-space: normal;
  }
  [x-data="statementsApp()"] .bl-expand table.pt-table > tbody > tr > td::before {
    content: ""; flex: 0 0 74px; font-size: 14px; color: var(--muted); font-weight: 400;
  }
  [x-data="statementsApp()"] .bl-expand table.pt-table > tbody > tr > td:nth-child(1)::before { content: "序"; }
  [x-data="statementsApp()"] .bl-expand table.pt-table > tbody > tr > td:nth-child(2)::before { content: "单据号"; }
  [x-data="statementsApp()"] .bl-expand table.pt-table > tbody > tr > td:nth-child(3)::before { content: "类型"; }
  [x-data="statementsApp()"] .bl-expand table.pt-table > tbody > tr > td:nth-child(4)::before { content: "品名/摘要"; }
  [x-data="statementsApp()"] .bl-expand table.pt-table > tbody > tr > td:nth-child(5)::before { content: "数量"; }
  [x-data="statementsApp()"] .bl-expand table.pt-table > tbody > tr > td:nth-child(6)::before { content: "计入时点"; }
  [x-data="statementsApp()"] .bl-expand table.pt-table > tbody > tr > td:nth-child(7)::before { content: "金额"; }
  [x-data="statementsApp()"] .bl-expand table.pt-table > tbody > tr > td[colspan] { display: block !important; }
  [x-data="statementsApp()"] .bl-expand table.pt-table > tbody > tr > td[colspan]::before { content: none !important; }

  /* ③ 卡片与四个数 */
  [x-data="statementsApp()"] .pt-card[style*="padding:12px 14px 6px"] { padding: 12px 14px 8px !important; }
  [x-data="statementsApp()"] .bl-sum { gap: 14px 22px; padding: 14px !important; }
  [x-data="statementsApp()"] .bl-mini { gap: 10px 20px; }
  [x-data="statementsApp()"] .bl-mini > div { min-width: 92px; }
  [x-data="statementsApp()"] .bl-mini .k { font-size: 14px !important; }
  [x-data="statementsApp()"] .bl-mini .v { font-size: 16px !important; }
  [x-data="statementsApp()"] .bl-mini .v[style*="13px"] { font-size: 14px !important; }
  [x-data="statementsApp()"] .bl-eq { font-size: 14px !important; line-height: 1.7; }
  [x-data="statementsApp()"] .bl-ops { gap: 8px; }
  [x-data="statementsApp()"] .bl-ops .pt-btn { flex: 1 1 auto; }

  /* ===================== 10.5 statement.html（账单详情） ===================== */
  [x-data="statementApp()"] .bl-sheet { padding: 14px; }
  [x-data="statementApp()"] .bl-four { gap: 10px; }
  [x-data="statementApp()"] .bl-four .k { font-size: 14px !important; }
  [x-data="statementApp()"] .bl-four .cell { padding: 9px 10px; }
  [x-data="statementApp()"] h2 { font-size: 16px !important; }          /* 明细/收款小标题 15px */
  [x-data="statementApp()"] .bl-eq,
  [x-data="statementApp()"] .bl-pay { font-size: 14px !important; line-height: 1.75; }
  [x-data="statementApp()"] table.bl-lines td,
  [x-data="statementApp()"] table.bl-lines th { padding: 7px 6px; }
  [x-data="statementApp()"] .bl-head { gap: 10px; }
  [x-data="statementApp()"] .bl-ops { gap: 8px; }
  [x-data="statementApp()"] .bl-ops .pt-btn { flex: 1 1 auto; }

  /* ===================== 10.6 share.html（报价分享页，无顶栏 / 无 Alpine） ===================== */
  .sh-wrap { padding: 18px 14px 44px; }
  .sh-card { padding: 16px; border-radius: 14px; }
  .sh-h { font-size: 19px; }
  .sh-sub { font-size: 14px; line-height: 1.75; }
  .sh-row { font-size: 15px; gap: 4px 10px; flex-wrap: wrap; }
  .sh-row b { font-size: 15px; }
  .sh-total { font-size: clamp(24px, 7.6vw, 30px); }
  .sh-badge { font-size: 14px; padding: 3px 10px; }
  .sh-note { font-size: 14px; line-height: 1.75; }
  #shFootLine { font-size: 14px !important; line-height: 1.7; }
  .sh-btn { font-size: 15px; display: block; width: 100%; text-align: center; }
  #shMsg { display: block !important; margin: 8px 0 0 !important; font-size: 14px !important; }
}

/* 打印：手机上打印报价单时保持可读 */
@media print {
  #p3dCanvas, .pt-navbar { display: none !important; }
}
