/* ===========================================================
   One Spa Warm Spring · 结账壳（温泉暖玉 v2.0 tokens，与 packages.css 同源）
   作用对象：WooCommerce Blocks 结账。所有按钮/输入覆盖一律带 body.onespa-checkout
   前缀（压过 Elementor kit 的 .elementor-kit-419 button 全局样式，同 packages 防坑）。
   =========================================================== */
:root{
  --cream:#FFF2E9; --paper:#FFFBF6;
  --peach:#FFE8DA; --rose:#EFD2C0;
  --clay:#914032; --clay-deep:#6E2A1C;
  --terra:#C2724E; --taupe:#B47F74;
  --ink:#3A2A22; --ink-soft:#7A6457;
  --line:rgba(145,64,50,.16); --line-soft:rgba(145,64,50,.09);
  --shadow:0 10px 30px rgba(110,42,28,.10);
}
body.onespa-checkout{
  margin:0;font-family:"Noto Sans SC",system-ui,sans-serif;
  color:var(--ink);background:var(--cream);
  -webkit-font-smoothing:antialiased;line-height:1.65;
}
body.onespa-checkout #wpadminbar{display:none;}
.osw-co{max-width:460px;margin:0 auto;background:var(--cream);min-height:100vh;
  box-shadow:0 0 60px rgba(110,42,28,.12);display:flex;flex-direction:column;}
.osw-co img{max-width:100%;}
@media (min-width:521px){
  body.onespa-checkout{background:linear-gradient(170deg,#F4E3D7,#EFD2C0);}
  .osw-co{margin:28px auto;border-radius:24px;overflow:hidden;min-height:auto;
    box-shadow:0 24px 80px rgba(110,42,28,.22);}
}

/* 顶栏（logo 规则带 body+bar 前缀：旧站全局 img 规则特异性 0,1,1 会把 38px 顶掉，实测放大到 168px） */
.osw-co-bar{position:sticky;top:0;z-index:40;display:flex;align-items:center;justify-content:space-between;
  padding:12px 20px;background:rgba(255,242,233,.92);backdrop-filter:blur(12px);border-bottom:1px solid var(--line);}
body.onespa-checkout .osw-co-bar .osw-co-logo{height:38px;width:auto;max-width:none;display:block;}
.osw-co-bar .trp-shortcode-switcher__wrapper{font-size:12px;}
/* 0.9.8：390px 手机实测 sticky 顶栏高 81px；原 72px 留白仍让 email
   输入框顶部被压住 9px。统一留 96px，让校验字段和错误完整出现在顶栏下方。 */
html{scroll-padding-top:96px;}
body.onespa-checkout .wc-block-components-notices,
body.onespa-checkout .wc-block-components-notice-banner,
body.onespa-checkout .wc-block-components-validation-error,
body.onespa-checkout input[aria-invalid="true"]{scroll-margin-top:96px;}

/* 加购入口（文案表 v2 §5：结账加购位 / 结账按摩位） */
.osw-co-upsell{display:flex;gap:8px;padding:12px 16px 0;}
.osw-co-up{flex:1;display:flex;align-items:center;justify-content:space-between;gap:6px;
  font-size:12px;line-height:1.4;color:var(--clay);text-decoration:none;
  background:var(--paper);border:1px solid var(--line);border-radius:12px;padding:9px 12px;}
.osw-co-up.hot{background:linear-gradient(160deg,var(--peach),var(--rose));color:var(--clay-deep);font-weight:600;}
.osw-co-up span{font-size:16px;opacity:.7;}

/* P1.5 种子#1：入口话术按购物车状态切换（服务端渲染初态，JS 跟随 blocks cart store 只切 class）
   默认 = pk-more + m0（中性按摩入口）；车内有 B1F1 = m8（8 折承诺）；空车 = 只剩 pk-empty */
.osw-co-up.pk-empty,.osw-co-up.m8{display:none;}
.osw-co-upsell.has-b1f1 .m8{display:flex;}
.osw-co-upsell.has-b1f1 .m0{display:none;}
.osw-co-upsell.cart-empty .pk-more,.osw-co-upsell.cart-empty .m0,.osw-co-upsell.cart-empty .m8{display:none;}
.osw-co-upsell.cart-empty .pk-empty{display:flex;}

/* P1.5 种子#6 补充：blocks 空车态自带的"Browse store"按钮指向旧 shop 页(/spapackages/ 旧 UI)，
   藏掉；去配套页的路径 = 顶部 pk-empty 入口（新前台） */
/* 0.9.5 修（Codex 审出）：原规则无条件隐藏 blocks 自带的「Browse store」按钮，
   而我们自己的空车恢复链默认也是隐藏的（靠 JS 加 .cart-empty 才显示）。
   若那段 JS 因任何原因没跑（弱网/脚本错误/wp.data 未就绪），空车客户会**两个出口都没有**、
   困死在结账页。改为只有当我们的入口确认可见时，才隐藏 blocks 原生按钮。 */
body.onespa-checkout .osw-co-upsell.cart-empty ~ * .wc-block-checkout-empty .wp-block-button,
body.onespa-checkout .osw-co-upsell.cart-empty + * .wc-block-checkout-empty .wp-block-button{display:none !important;}

/* P1.5 拍板项③：到店日期不一致软提醒 */
.osw-co-datewarn{margin:10px 16px 0;padding:10px 12px;border-radius:10px;font-size:12.5px;line-height:1.6;
  background:#FCF3DC;border:1px solid rgba(170,120,30,.25);color:#7A5A18;}
.osw-co-datewarn b{font-weight:700;}

/* 0.9.24 F-06b：明确的全车恢复出口。按钮只在 cart store 有项目时由 cart-actions.js 显示；
   二次确认后逐项调用 Woo 官方 remove API，不直写 session、不绕预约引擎。 */
.osw-cart-tools{display:flex;justify-content:flex-end;margin:8px 16px 0;}
body.onespa-checkout .osw-clear-cart{
  appearance:none;-webkit-appearance:none;min-height:44px;padding:8px 2px 8px 12px;
  border:0;background:transparent;box-shadow:none;color:var(--ink-soft);cursor:pointer;
  font-family:"Noto Sans SC",system-ui,sans-serif;font-size:12.5px;line-height:1.4;text-decoration:underline;
  text-underline-offset:3px;text-transform:none;letter-spacing:0;}
body.onespa-checkout .osw-clear-cart:hover{color:var(--clay);}
body.onespa-checkout .osw-clear-cart:disabled{opacity:.5;cursor:default;}
body.onespa-checkout .osw-clear-cart[hidden]{display:none !important;}

/* 0.9.25 T-1：Cart block 的历史 cross-sell / New in store 内容来自 page ID 26 的旧 block 内容，
   不是主题商品卡。配置器已经是唯一加购入口，cart 不再渲染这两套无出口长块。 */
body.onespa-cart .wp-block-woocommerce-product-collection,
body.onespa-cart .wp-block-woocommerce-empty-cart-block > .wp-block-separator,
body.onespa-cart .wp-block-woocommerce-empty-cart-block > .wp-block-heading,
body.onespa-cart .wp-block-woocommerce-empty-cart-block > .wp-block-product-new,
body.onespa-cart .wp-block-woocommerce-empty-cart-block > p:empty,
body.onespa-cart .wp-block-woocommerce-empty-cart-block > p:has(a[href*="/spapackages/"]){display:none !important;}

/* Woo Appointments 明确禁止直接改 Blocks quantity（editable=false），因为预约 qty 在预订时锁定。
   把无标签 readonly 数字换成清楚的数量标签；“修改”回到配置器整单重建，避免只改 cart 数字却不改预约容量。 */
body.onespa-cart .osw-appointment-qty{display:flex;align-items:center;flex-wrap:wrap;gap:0 10px;}
body.onespa-cart .osw-appointment-qty .wc-block-components-quantity-selector{display:none !important;}
body.onespa-cart .osw-cart-qty-label{font-size:12.5px;font-weight:700;color:var(--clay-deep);}
body.onespa-cart .osw-cart-qty-edit{display:inline-flex;align-items:center;min-height:44px;padding:0 4px;
  color:var(--clay);font-size:12.5px;text-decoration:underline;text-underline-offset:3px;}

/* P1.5 到店凭证卡（order-received）：大字订单号 = 前台核销凭据（散客群"报名字查无此单"对策） */
.osw-co-voucher{margin:14px 16px 0;padding:18px 18px 14px;border-radius:14px;color:var(--clay-deep);
  background:linear-gradient(160deg,var(--peach),var(--rose));box-shadow:var(--shadow);}
.osw-co-voucher .osw-vc-k{font-size:11.5px;letter-spacing:.16em;text-transform:uppercase;opacity:.75;}
.osw-co-voucher .osw-vc-num{font-family:"Noto Serif SC",serif;font-size:40px;font-weight:800;line-height:1.15;letter-spacing:.02em;}
.osw-co-voucher .osw-vc-hint{font-size:13px;margin-top:2px;opacity:.85;}
.osw-co-voucher .osw-vc-items{list-style:none;margin:10px 0 0;padding:10px 0 0;border-top:1px dashed rgba(110,42,28,.3);}
.osw-co-voucher .osw-vc-items li{display:flex;flex-wrap:wrap;gap:4px 10px;align-items:baseline;font-size:14px;padding:2px 0;}
.osw-co-voucher .osw-vc-items b{font-weight:600;}
.osw-co-voucher .osw-vc-items em{font-style:normal;opacity:.8;}
.osw-co-voucher .osw-vc-items span{margin-left:auto;font-weight:700;white-space:nowrap;font-family:"Noto Serif SC",serif;}

/* 主体（标题加固：旧站 inline 全局样式会注入 Abhaya 大字号，统一 !important 钉死） */
.osw-co-main{padding:14px 16px 26px;flex:1;}
body.onespa-checkout .osw-co-main h1,body.onespa-checkout .osw-co-main h2,
body.onespa-checkout .osw-co-main h3,body.onespa-checkout .osw-co-main h4,
body.onespa-checkout .osw-co-main .wc-block-components-title,
body.onespa-checkout .osw-co-main .wc-block-components-checkout-step__title{
  font-family:"Noto Serif SC",serif !important;color:var(--ink);
  font-size:16.5px !important;line-height:1.4 !important;}
body.onespa-checkout .wc-block-components-checkout-order-summary__title-text{
  font-family:"Noto Serif SC",serif !important;font-size:16.5px !important;}
body.onespa-checkout a{color:var(--clay);}

/* Blocks 结账整容 */
body.onespa-checkout .wc-block-checkout{margin:0;}
body.onespa-checkout .wc-block-components-checkout-step{
  background:var(--paper);border:1px solid var(--line);border-radius:14px;
  padding:14px 14px 16px;margin-bottom:12px;box-shadow:var(--shadow);}
body.onespa-checkout .wc-block-components-checkout-step__heading{margin:0 0 4px;}
body.onespa-checkout .wc-block-components-checkout-step__title{font-size:16.5px;}
body.onespa-checkout .wc-block-components-text-input input,
body.onespa-checkout .wc-block-components-combobox .components-combobox-control__suggestions-container input,
body.onespa-checkout select,
body.onespa-checkout textarea{
  background:#fff;border:1px solid var(--line);border-radius:10px;color:var(--ink);
  font-family:inherit;box-shadow:none;}
body.onespa-checkout .wc-block-components-text-input input:focus,
body.onespa-checkout select:focus,
body.onespa-checkout textarea:focus{border-color:var(--clay);box-shadow:0 0 0 1px var(--clay);outline:none;}
body.onespa-checkout .wc-block-components-checkbox .wc-block-components-checkbox__input[type="checkbox"]{accent-color:var(--clay);}
body.onespa-checkout .wc-block-components-radio-control__input{accent-color:var(--clay);}

/* 下单主按钮（压 kit 的 button 样式） */
body.onespa-checkout button.wc-block-components-checkout-place-order-button,
body.onespa-checkout .wc-block-components-button{
  appearance:none;-webkit-appearance:none;border:none;cursor:pointer;font-family:inherit;
  display:inline-flex;align-items:center;justify-content:center;min-height:48px;
  background:var(--clay-deep);color:var(--cream);white-space:normal;
  border-radius:999px;font-size:16px;font-weight:600;letter-spacing:.04em;
  padding:10px 24px;box-shadow:var(--shadow);text-transform:none;
  transition:background-color .18s ease,color .18s ease,transform .12s ease,opacity .18s ease;}
body.onespa-checkout .wc-block-components-button:hover{background:var(--ink);color:var(--cream);filter:none;}
body.onespa-checkout .wc-block-components-button:active{background:var(--clay);transform:translateY(1px);}
body.onespa-checkout .wc-block-components-button:focus-visible{outline:2px solid var(--terra);outline-offset:2px;}
body.onespa-checkout .wc-block-components-button:disabled{opacity:.5;transform:none;}
/* 次级小按钮（优惠码 Apply 等）不抢戏 */
body.onespa-checkout .wc-block-components-totals-coupon__button{
  min-height:44px;background:var(--peach);color:var(--clay-deep);box-shadow:none;font-size:13px;font-weight:500;}

/* 订单摘要 */
body.onespa-checkout .wc-block-components-order-summary,
body.onespa-checkout .wp-block-woocommerce-checkout-totals-block{
  background:var(--paper);border:1px solid var(--line);border-radius:14px;box-shadow:var(--shadow);}
body.onespa-checkout .wp-block-woocommerce-checkout-totals-block{padding:6px 14px 10px;}
body.onespa-checkout .wc-block-components-order-summary{border:none;box-shadow:none;padding:0;}
/* 0.9.5：侧栏副本的订单摘要默认展开 + 隐藏折叠箭头。
   ⚠️ **注释已按终验实测更正**（原先写的「客户一个数字都看不到」是测量伪影，见下方 166 行那段的更正说明）。
   事实：这两条只作用于**侧栏那份副本**，而侧栏在当前主题下恒被隐藏（结账壳被 responsive.css 的
   `max-width:620px` 钉在 588px，容器永远进不了 is-large，fill 副本恒存在 → 166 行的 :has() 恒命中）。
   实测 390 / 1280 / 1920 三档下 `__content` 的 box 都是 0×0 —— 也就是说**这两条当前是死代码**。
   把 .osw-co-main 的上限临时放宽到 1200px、容器进入 is-large 后，规则才真正可见地生效
   （__content 376.8×308.6、箭头隐藏、四行金额可见、单摘要）——说明写法是对的，只是当前够不着。
   保留作防御：日后若放宽壳宽或 WC 改布局，这两条能让摘要直接展开而不是折叠。
   ⚠️ 别把 WC 的折叠阈值和 slot/fill 阈值当成同一个：折叠是 `@media (max-width:699px)` 视口媒体查询，
   slot/fill 是基于**容器宽度**的 JS class（is-mobile/is-medium/is-large），两套不同源。 */
body.onespa-checkout .wc-block-components-checkout-order-summary__content{display:block !important;}
body.onespa-checkout .wc-block-components-checkout-order-summary__title-icon{display:none !important;}

/* 商品名是 H3，会被旧站全局 h3（Abhaya Libre 48px）劫持——显式钉死字号字体 */
body.onespa-checkout .wc-block-components-order-summary-item h3.wc-block-components-product-name,
body.onespa-checkout .wc-block-components-product-name{
  color:var(--ink);font-weight:500;font-family:"Noto Sans SC",system-ui,sans-serif;
  font-size:14.5px;line-height:1.5;margin:0;letter-spacing:normal;}
/* 商品缩略图隐藏：极简结账 + 本地快照缺图会露烂图标和 alt 实体字符；名称足够识别 */
body.onespa-checkout .wc-block-components-order-summary-item__image{display:none !important;}
body.onespa-checkout .wc-block-components-order-summary-item__description{padding-left:0;}
body.onespa-checkout .wc-block-components-order-summary-item__description,
body.onespa-checkout .wc-block-cart-items__row .wc-block-components-product-name{padding-right:12px;}
body.onespa-checkout .wc-block-cart-item__total-price-and-sale-badge-wrapper,
body.onespa-checkout .wc-block-components-order-summary-item__total-price{margin-left:12px;}
/* 折叠头总额。原注释（6/14）称「TRP 会把 CN 页这个数字冻结成 RM0.00，EN 正常」，据此无条件隐藏。
   ⚠️ **0.9.5 终验实测未能复现该现象**：在 /cn/checkout/ 全新加载时强制显示该元素，
   连续采样 8 次跨 4.9 秒，文本恒为正确金额（RM199.42 / RM303.26），一次都没出现 RM0.00。
   同时确认这条规则在当前主题下**也是死代码**：它只作用于恒被隐藏的侧栏副本；且 WC 自带 CSS 在
   `@media (min-width:700px)` 下本来就会隐藏 __title-price。真正让客户看见总额的是 fill 副本里的
   Total 行（实测可见 RM199.42），折叠头这个数字并非必需。
   处置：**保留但收窄到 CN 页**，作为防御 —— 生产是更早的 WC 版本、TRP 缓存状态也与本地不同，
   本地一次未复现不足以断定生产也没有。🔴 不要再把「CN 会冻结成 RM0.00」当成实测结论引用，
   它现在的状态是「本地 2026-07-29 未复现，留作防御」。 */
html[lang="zh-CN"] body.onespa-checkout .wc-block-components-checkout-order-summary__title-price{display:none !important;}
/* 双摘要去重（叶伟 6/12 深夜报）：窄屏下 blocks 用 slot/fill 同时渲染"侧栏折叠摘要(slot)"+"内联完整摘要(fill，紧贴下单按钮)"。
   #1（6/14 页面检查）：原先只隐藏侧栏内的 order-summary-block，但侧栏容器 totals-block 仍带 paper 底+边框+padding（见下方
   订单摘要规则），渲染成结账顶部那个空盒。改为直接隐藏整个侧栏容器；真摘要在 fill（checkout-order-summary-block-fill-wrapper），不受影响。 */
/* 0.9.5：把原来的无条件隐藏改成 :has() 条件隐藏。
   原意（6/14）：blocks 用 slot/fill 同时渲染「侧栏折叠摘要」+「内联完整摘要」两份，隐藏侧栏那份去重。

   🔴🔴 **重要更正（0.9.5 终验，2026-07-29）—— 别再引用被推翻的那版说法**：
   施工中途我一度判定「WC 10.4.3 已不做 slot/fill 双渲染、fill wrapper=0、客户看不到任何金额」，
   并据此把这条规则称为「定时炸弹」。**那是测量伪影，不是真实故障**：
   · WC 10.4.3 **仍然**做双渲染。fill 由 checkout-frontend.js 依 `(isMedium||isSmall||isMobile)` 条件渲染，
     三个标志来自 useResizeObserver；**浏览器面板未出帧时 width 初值为 0 → 三者全 false → fill 不渲染**。
     实测：面板隐藏时 fill 恒为 0（等 30s+ 仍 0）；一旦强制截图出帧，同一次加载立刻 fill=1、四行金额可见。
   · 且本主题的结账壳被 responsive.css 的 `max-width:620px` 钉在 588px，容器**永远进不了 is-large**
     → fill 恒存在 → 新旧规则在所有可达视口下**行为完全一致**，旧的无条件隐藏同样能看到全部金额。
   ⚠️ 教训：验收 ResizeObserver / IntersectionObserver 驱动的组件时，**先 screenshot 强制出帧再取 rect**，
     否则会测出假的「元素不存在／不可见」。本轮就是这样误报了一个 P0。

   保留 :has() 条件化的理由（真实但有限的收益）：首帧空窗期（fill 尚未渲染）也不会把唯一的摘要藏掉。
   反证实验：把这条规则整个中和掉，立刻变成两份**完全展开**的摘要（可见 totals-item 4→8，
   四行金额各出现两遍，页面高度 1632→2067）——所以规则本身必须留着。

   🔴 已知潜伏陷阱（当前安全，改壳宽前必看）：WC 用 `@container (min-width:700px)` 隐藏 fill，
   而 JS 判 is-large 的阈值是 `width>700`。容器宽度**恰为 700px** 时：CSS 已隐藏 fill，JS 仍渲染 fill 节点，
   而 :has() 只看 DOM 存在不看可见性 → 侧栏也被隐藏 → **两份摘要同时不可见**。
   现在被 620px 壳宽挡住（容器恒 588px）永远碰不到；**一旦放宽 .osw-co-main 到 ≥700px 必须同步改这条规则**
   （例如把它绑进 `@container (max-width:699px)`，与 WC 自己的断点同源）。
   :has() 不支持的老浏览器（Chrome<105 / Safari<15.4 / Firefox<121）上规则失效 → 退化为双份展开摘要，
   难看但不挡钱。 */
body.onespa-checkout .wc-block-checkout:has(.checkout-order-summary-block-fill-wrapper) .wc-block-components-sidebar.wp-block-woocommerce-checkout-totals-block{display:none !important;}
body.onespa-checkout .wc-block-components-product-price,
body.onespa-checkout .wc-block-components-totals-item__value{
  font-family:"Noto Serif SC",serif;color:var(--clay);font-weight:700;}
body.onespa-checkout .wc-block-components-totals-footer-item .wc-block-components-totals-item__value{font-size:19px;}
body.onespa-checkout .wc-block-components-product-details__name{color:var(--ink-soft);}
/* B1：订单摘要不展示商品长描述——access 类商品短描述为英文会在付款前泄漏（弃单诱因），
   且交易层不需要在摘要里堆段落。中英文一律隐藏，保留商品名+预约日期/时间+价格即可。 */
body.onespa-checkout .wc-block-components-product-metadata__description{display:none !important;}

/* Fix #1（结账修复批 2026-06-14）：订单摘要每项「×移除」按钮（JS 注入，调官方 removeItemFromCart）。 */
/* 0.9.5 修（Codex 审出）：原 padding:2px 0 + 12.5px 字号 → 实测触点仅约 19px 高，
   远低于 44px 的手机可点击标准（85% 流量是手机）。加大到 44×44 的最小命中区，
   视觉上仍是一行小字：用 padding 撑高、负 margin 抵消多出来的行高，不改变排版观感。 */
body.onespa-checkout .wc-block-components-order-summary-item__description .osw-rm{
  display:inline-flex;align-items:center;gap:3px;margin-top:0;
  min-height:44px;min-width:44px;
  background:none;border:none;padding:11px 8px 11px 0;cursor:pointer;
  font-family:"Noto Sans SC",system-ui,sans-serif;font-size:12.5px;line-height:1.2;
  color:var(--ink-soft);}
body.onespa-checkout .wc-block-components-order-summary-item__description .osw-rm:hover{
  color:var(--clay);text-decoration:underline;}
body.onespa-checkout .wc-block-components-order-summary-item__description .osw-rm:disabled{
  opacity:.5;cursor:default;text-decoration:none;}
body.onespa-checkout .wc-block-components-order-summary-item__description .osw-rm span{font-size:14.5px;line-height:1;}

/* 数量 × N（6/14）：WC 数量角标在被隐藏的缩略图里看不到，故在描述区补一个小 pill。 */
body.onespa-checkout .wc-block-components-order-summary-item__description .osw-qty{
  display:inline-block;margin:4px 0 0;padding:1px 8px;border-radius:6px;
  background:var(--peach);color:var(--clay-deep);font-size:12.5px;font-weight:700;line-height:1.55;letter-spacing:.02em;}

/* 地址字段隐藏的 CSS 保险层（主逻辑在 functions.php 的 default_address_fields 过滤；
   决议：姓名+手机+邮箱，国家默认 MY，地址隐藏） */
body.onespa-checkout .wc-block-components-address-form__company,
body.onespa-checkout .wc-block-components-address-form__address_1,
body.onespa-checkout .wc-block-components-address-form__address_2,
body.onespa-checkout .wc-block-components-address-form__city,
body.onespa-checkout .wc-block-components-address-form__state,
body.onespa-checkout .wc-block-components-address-form__postcode,
body.onespa-checkout .wc-block-components-address-form__country{display:none !important;}

/* 页脚一行 */
.osw-co-foot{text-align:center;font-size:11.5px;color:var(--ink-soft);
  padding:6px 20px calc(20px + env(safe-area-inset-bottom));line-height:1.9;}
.osw-co-foot b{display:block;color:var(--clay-deep);}

/* 0.9.4：支付方式标签排版 —— logo 条与标题各占一行。
   问题：senangPay 的 blocks 标签把「标题文字 + 八枚 logo 图」塞进同一个 flex 行，手机 375px 下
   281px 的可用宽被 194px 的 logo 图挤掉大半，标题被迫折成三行，中文还会断在词中间
   （实测「电子钱包」被拆成「电子钱 / 包」）。85% 流量是手机，这一处正好在支付决策点上。
   修法：把标签内层容器改成纵向排列 —— DOM 顺序是 img 在前，故渲染为「logo 条一排 → 标题一行」，
   付款通道先入眼，标题不再断行。只动这一个支付方式标签的排版，不碰 blocks 结构与任何金额显示。 */
/* 0.9.5 修（Codex 审出）：限定到**带图标条的** senangPay 标签。
   原规则对所有支付方式标签生效，Stripe 那个只有短标题+单卡图标，纵排反而多占一行高度。
   用 :has(img) 精确命中「标题 + 图标条」这种结构。 */
body.onespa-checkout .wc-block-components-radio-control__label > div:has(img){
  display:flex;flex-direction:column;align-items:flex-start;gap:6px;}
body.onespa-checkout .wc-block-components-radio-control__label img{max-width:100%;height:auto;margin:0;}

/* 0.9.4：结账/购物车壳的 WhatsApp 求助入口 —— 从 fixed 悬浮球改为壳内静态链接。
   原 fixed 球（right:16px / 56×56 / z-index:90）左边固定在 x=318，而订单摘要金额右对齐 x=357、
   Place Order 右边 x=374 → 水平方向恒定重叠；实测 390×844 全行程扫描，四行金额 + 下单按钮合计
   292px/897px = **32.6% 的滚动行程被绿球压住**，"RM16.90" 被吃掉 67.4% 只剩 "RM"（与真机截图吻合）。
   坑点：页面停最底部时反而不重叠 → 静态截图验收看不出来，这才让它带着 0.9.3 一路上线。
   🔴 这里**不再定义 .osw-wa-float**：该 class 由 inc/site-parts.php + site.css + packages.css 共用于
      首页/配套页/设施页等 P2 页面，结账壳单独用新 class .osw-co-help，互不干扰。
   🔴 checkout.css 同时服务 checkout 壳与 cart 壳（functions.php 同一个 enqueue 分支），
      两个模板必须同批改，否则没改的那个会变成裸 <a> 绿字链接。 */
.osw-co-help{display:flex;align-items:center;justify-content:center;gap:8px;
  margin:4px 16px 0;padding:12px;border-radius:12px;
  background:var(--paper);border:1px solid var(--line);
  color:var(--clay);font-size:13px;line-height:1.4;text-decoration:none;}
.osw-co-help:hover{border-color:var(--clay);}
.osw-co-help svg{width:18px;height:18px;flex:none;color:#25D366;}
body.onespa-checkout .trp-floating-switcher{display:none !important;}

/* 0.7 壳最小干预：logo 放大（7/5 反馈）+ 语言切换文字链胶囊；blocks 交易区零碰 */
.osw-co-logo{height:56px !important;width:auto;}
.osw-co-lang{display:inline-flex;align-items:center;border:1px solid #EAD3C6;border-radius:999px;overflow:hidden;font-size:12px;}
.osw-co-lang a,.osw-co-lang b{padding:9px 13px;font-weight:400;color:#3A2A22;text-decoration:none;}
.osw-co-lang b{background:#914032;color:#FFF2E9;font-weight:500;}
