/* ==========================================================================
   宜宇优选 · 独立皮肤（mall.css）
   --------------------------------------------------------------------------
   只在 <html data-zone="shop"> 下加载。目标：进去就相当于另一个系统。
   做法：
     1) 覆盖主站的设计变量（主色由「户外绿」换成「商城玫红」）
     2) 换掉整套 chrome：顶栏、底部栏、卡片圆角/阴影语言全部重来
     3) 把主站的 fab / 主 tabbar 关掉，改用商城自己的 ym-tb
   主站样式一行不改，避免互相影响。
   ========================================================================== */

/* ---------- 1. 变量覆写：品牌色 → 薄荷（2026-09-20 换肤） ----------
     旧值 --grad-brand 是一段 玫红→绿→玫红 的渐变（#d14575/#a01242），
     顶栏 ym-hd、CTA、选中态全都吃它 —— 用户看到「商城还是红的」就是这个。
     现在与主站 app.css 的 --grad-brand 完全同值，全站一套品牌渐变。 */
html[data-zone="shop"] {
  /* 品牌色阶：色相 H340 (玫红) 不变，S/L 与主站绿对齐 —— 三套色阶同档位明度/饱和完全一致 */
  --brand-50: #eefdf3;
  --brand-100: #d5f9e2;
  --brand-200: #aef0c8;
  --brand-300: #7ce4a8;
  --brand-400: #45d183;
  --brand-500: #1fbe66;
  --brand-600: #12a054;
  --brand-700: #0d7f43;
  --brand-800: #0b6438;
  --brand-900: #08512e;

  --accent-50: #eefaf4;
  --accent-100: #d3f2e4;
  --accent-200: #aee5cd;
  --accent-300: #7dd2ae;
  --accent-400: #46ba8b;
  --accent-500: #1f9a6d;
  --accent-600: #16805a;
  --accent-700: #116648;
  --accent-800: #0d513a;
  --accent-900: #0a4230;


  /* 商城专属语义色 */
  --ym-hot:    #ff2d55;   /* 促销红（中国习惯：红=热卖/降价） */
  --ym-price:  #0d7a5f;
  --ym-gold:   #c9a227;   /* 正品保障金 */
  --ym-ink:    #1f1a1c;   /* 商城主文字，略偏暖 */
  --ym-ink-2:  #6b6165;
  --ym-ink-3:  #9c949a;
  --ym-line:   #e0eee8;
  --ym-bg:     #f3f9f6;   /* 微粉底，与主站的冷白区分 */

  --bg-base:    var(--ym-bg);
  --bg-raise-2: #ffffff;
  --border-1:   var(--ym-line);
  --text-primary: var(--ym-ink);
  --text-second:  var(--ym-ink-2);
  --text-third:   var(--ym-ink-3);

  --grad-brand:      linear-gradient(128deg, #45d183 0%, #1fbe66 52%, #12a054 100%);
  --grad-brand-soft: linear-gradient(128deg, rgba(69,209,131,.16), rgba(31,190,102,.10));

  /* 主色阴影也要跟着换 —— 旧值来自玫红族，换色不换影 = 按钮发光发粉 */
  --sh-brand: 0 6px 18px rgba(31,190,102,.28);

  /* 商城语言：更大的圆角、更柔的阴影 */
  --r-md: 16px;
  --r-lg: 20px;
  --r-xl: 26px;
}

html[data-zone="shop"][data-theme="dark"] {
  --ym-ink:   #f6eef2;
  --ym-ink-2: #c3b6bc;
  --ym-ink-3: #8d8189;
  --ym-line:  #33272d;
  --ym-bg:    #171114;
  --bg-base:    var(--ym-bg);
  --bg-raise-2: #221a1e;
}

/* 商城底色与主站分隔 */
html[data-zone="shop"] body.is-shop { background: var(--ym-bg); }

/* ---------- 2. 关掉主站 chrome ---------- */
html[data-zone="shop"] .yq-tb,
html[data-zone="shop"] .yq-fab { display: none !important; }

/* 主站 header 已被替换，但保险起见再关一次 */
html[data-zone="shop"] .yq-hd { display: none !important; }

/* 主站 main 的下内边距需为商城底栏让位（底栏含隆起 CTA，更高） */
html[data-zone="shop"] .yq-main {
  padding-top: 0;
  padding-bottom: calc(84px + env(safe-area-inset-bottom, 0px));
}

/* ==========================================================================
   3. 商城顶栏 ym-hd
   ========================================================================== */
.ym-hd {
  position: sticky; top: 0; z-index: 40;
  background: var(--grad-brand);
  padding-top: env(safe-area-inset-top, 0px);
  box-shadow: 0 2px 14px rgba(194, 24, 91, .18);
}
.ym-hd__bar {
  display: flex; align-items: center; gap: 10px;
  height: 52px;
  padding: 0 var(--sp-3);
  max-width: var(--page-max, 680px);
  margin: 0 auto;
}
.ym-hd__ico {
  flex: 0 0 auto;
  width: 34px; height: 34px;
  display: inline-flex; align-items: center; justify-content: center;
  border: 0; border-radius: 50%;
  background: rgba(255,255,255,.16);
  color: #fff;
  cursor: pointer;
  position: relative;
  -webkit-tap-highlight-color: transparent;
}
.ym-hd__ico:active { background: rgba(255,255,255,.3); }
.ym-hd__ico--cs { position: relative; }
.ym-hd__csdot {
  position: absolute; top: 3px; right: 3px;
  width: 8px; height: 8px; border-radius: 50%;
  background: #ffd400; border: 1.5px solid #0d7a5f;
}

.ym-hd__brand {
  display: inline-flex; align-items: baseline; gap: 3px;
  flex: 0 0 auto;
  text-decoration: none;
  padding-right: 2px;
}
.ym-hd__mark {
  font-size: 17px; font-weight: 800; letter-spacing: .04em;
  color: #fff;
  text-shadow: 0 1px 2px rgba(0,0,0,.12);
}
.ym-hd__sub {
  font-size: 10.5px; font-weight: 700;
  color: #fff;
  background: rgba(255,255,255,.24);
  padding: 1px 5px; border-radius: 5px;
}

.ym-hd__search {
  flex: 1 1 auto; min-width: 0;
  display: inline-flex; align-items: center; gap: 6px;
  height: 34px; padding: 0 12px;
  border-radius: 999px;
  background: #fff;
  color: var(--ym-ink-3);
  text-decoration: none;
  font-size: 12.5px;
  box-shadow: inset 0 0 0 1px rgba(255,255,255,.6);
}
.ym-hd__ph {
  flex: 1; min-width: 0;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}

/* 【2026-09-19】搜索升级为常驻输入框（form 版）：input 吃掉剩余宽度，
   清除键只在已有搜索词时出现（由模板控制）。 */
.ym-hd__search input {
  flex: 1; min-width: 0;
  border: 0; outline: 0; background: none;
  font-size: 12.5px; color: var(--ym-ink);
  -webkit-appearance: none; appearance: none;
}
.ym-hd__search input::placeholder { color: var(--ym-ink-3); }
.ym-hd__search input::-webkit-search-cancel-button { -webkit-appearance: none; }
.ym-hd__clr {
  flex: 0 0 auto;
  display: grid; place-items: center;
  width: 18px; height: 18px; border-radius: 50%;
  background: var(--ym-ink-3); color: #fff;
  font-size: 12px; line-height: 1; text-decoration: none;
  font-style: normal;
}
/* 顶栏购物车角标（底栏中央 CTA 之外的第二个常驻入口） */
.ym-hd__cartn {
  position: absolute; top: -1px; right: -3px;
  min-width: 15px; height: 15px; padding: 0 4px;
  border-radius: 999px;
  background: #fff; color: #0d7a5f;
  border: 1.5px solid #0d7a5f;
  font-size: 9px; font-weight: 700; font-style: normal;
  display: grid; place-items: center; line-height: 1;
}

/* ==========================================================================
   4. 商城底部栏 ym-tb（隆起购物车）
   ========================================================================== */
.ym-tb {
  position: fixed; left: 0; right: 0; bottom: 0; z-index: 45;
  background: rgba(255,255,255,.96);
  -webkit-backdrop-filter: blur(14px); backdrop-filter: blur(14px);
  border-top: 1px solid var(--ym-line);
  padding-bottom: env(safe-area-inset-bottom, 0px);
}
html[data-theme="dark"] .ym-tb { background: rgba(34,26,30,.96); }

.ym-tb__row {
  display: flex; align-items: flex-end; justify-content: space-around;
  height: 62px;
  max-width: var(--page-max, 680px);
  margin: 0 auto;
  padding: 0 4px;
}

.ym-tb__i {
  flex: 1 1 0; min-width: 0;
  display: flex; flex-direction: column;
  align-items: center; justify-content: center; gap: 2px;
  height: 100%;
  text-decoration: none;
  color: var(--ym-ink-3);
  -webkit-tap-highlight-color: transparent;
  transition: color .16s var(--ease-out, ease);
}
.ym-tb__i.is-on { color: var(--brand-500); }
.ym-tb__ico { position: relative; display: inline-flex; }
.ym-tb__t { font-size: 10px; font-weight: 600; letter-spacing: .02em; }
.ym-tb__dot {
  position: absolute; top: -4px; right: -8px;
  min-width: 16px; height: 16px; padding: 0 4px;
  border-radius: 999px;
  background: #0d7a5f; color: #fff;
  font-size: 9.5px; font-weight: 700; font-style: normal;
  display: inline-flex; align-items: center; justify-content: center;
  line-height: 1;
}

/* 中心隆起购物车 */
.ym-tb__cart {
  flex: 0 0 auto;
  width: 78px;
  display: flex; flex-direction: column;
  align-items: center; gap: 2px;
  text-decoration: none;
  -webkit-tap-highlight-color: transparent;
}
.ym-tb__cart__btn {
  position: relative;
  width: 54px; height: 54px;
  margin-top: -22px;                /* 隆起 */
  border-radius: 50%;
  background: var(--grad-brand);
  display: inline-flex; align-items: center; justify-content: center;
  box-shadow: 0 6px 18px rgba(233, 30, 99, .42), 0 0 0 4px #fff;
  transition: transform .18s var(--ease-out, ease);
}
html[data-theme="dark"] .ym-tb__cart__btn { box-shadow: 0 6px 18px rgba(190,31,85,.42), 0 0 0 4px var(--ym-bg); }
.ym-tb__cart:active .ym-tb__cart__btn { transform: scale(.94); }
.ym-tb__cart__n {
  position: absolute; top: -2px; right: -2px;
  min-width: 19px; height: 19px; padding: 0 5px;
  border-radius: 999px;
  background: #fff; color: var(--accent-600);
  border: 2px solid var(--accent-500);
  font-size: 10px; font-weight: 800; font-style: normal;
  display: inline-flex; align-items: center; justify-content: center;
  line-height: 1;
}
.ym-tb__cart__t {
  font-size: 10px; font-weight: 700;
  color: var(--accent-500);
  margin-top: 1px;
}

/* ==========================================================================
   5. 商城通用组件（跨页复用）
   ========================================================================== */

/* 区块标题：左侧竖条 + 更重的字重（得物/唯品会常见） */
.ym-sec {
  padding: var(--sp-4) var(--sp-3) 0;
}
.ym-sec__hd {
  display: flex; align-items: center; gap: 8px;
  margin-bottom: var(--sp-3);
}
.ym-sec__bar {
  width: 3px; height: 15px; border-radius: 2px;
  background: var(--grad-brand);
}
.ym-sec__t {
  font-size: 15px; font-weight: 800;
  color: var(--ym-ink);
  letter-spacing: .01em;
}
.ym-sec__more {
  margin-left: auto;
  display: inline-flex; align-items: center; gap: 2px;
  font-size: 12px; color: var(--ym-ink-3);
  text-decoration: none;
}

/* 正品保障条 */
.ym-trust {
  display: flex; align-items: center; justify-content: space-around;
  margin: 0 var(--sp-3);
  padding: 10px 0;
  background: #fff;
  border: 1px solid var(--ym-line);
  border-radius: var(--r-md);
}
html[data-theme="dark"] .ym-trust { background: var(--bg-raise-2); }
.ym-trust__i {
  display: inline-flex; align-items: center; gap: 5px;
  font-size: 11px; font-weight: 600;
  color: var(--ym-ink-2);
}
.ym-trust__i svg { color: var(--ym-gold); flex: 0 0 auto; }

/* 价格：商城主色 + 人民币符号更小（电商惯例） */
.ym-price {
  color: var(--ym-price);
  font-weight: 800;
  display: inline-flex; align-items: baseline; gap: 1px;
  font-variant-numeric: tabular-nums;
}
.ym-price__cur { font-size: .68em; font-weight: 700; }
.ym-price__int { font-size: 1.16em; letter-spacing: -.01em; }
.ym-price__dec { font-size: .72em; }
.ym-price--old {
  color: var(--ym-ink-3);
  font-weight: 500;
  text-decoration: line-through;
  font-size: 11px;
}

/* 促销角标 */
.ym-badge {
  display: inline-flex; align-items: center; gap: 3px;
  height: 18px; padding: 0 6px;
  border-radius: 5px;
  font-size: 10px; font-weight: 800; color: #fff;
  background: var(--ym-hot);
  line-height: 1;
}
.ym-badge--gold { background: var(--ym-gold); }
.ym-badge--soft {
  background: var(--brand-50); color: var(--brand-600);
  border: 1px solid var(--brand-100);
}
html[data-theme="dark"] .ym-badge--soft { background: rgba(190,31,85,.16); border-color: rgba(190,31,85,.3); }

/* 已抢进度条 */
.ym-bar {
  height: 11px; border-radius: 999px;
  background: var(--brand-100);
  overflow: hidden; position: relative;
}
html[data-theme="dark"] .ym-bar { background: rgba(190,31,85,.18); }
.ym-bar__in {
  height: 100%;
  background: var(--grad-brand);
  border-radius: 999px;
  transition: width .5s var(--ease-out, ease);
}
.ym-bar__txt {
  position: absolute; inset: 0;
  display: flex; align-items: center; justify-content: center;
  font-size: 8.5px; font-weight: 700; color: #fff;
  text-shadow: 0 1px 1px rgba(0,0,0,.18);
}

/* 主按钮（玫红实心胶囊） */
.ym-btn {
  display: inline-flex; align-items: center; justify-content: center; gap: 6px;
  height: 44px; padding: 0 22px;
  border: 0; border-radius: 999px;
  background: var(--grad-brand);
  color: #fff; font-size: 14px; font-weight: 700;
  text-decoration: none; cursor: pointer;
  box-shadow: 0 4px 14px rgba(190,31,85,.3);
  -webkit-tap-highlight-color: transparent;
  transition: transform .16s var(--ease-out, ease);
}
.ym-btn:active { transform: scale(.97); }
.ym-btn--ghost {
  background: transparent; color: var(--brand-500);
  box-shadow: none; border: 1.5px solid var(--brand-300);
}
.ym-btn--block { width: 100%; }

/* 商城卡片：比主站更圆更立体 */
.ym-card {
  background: #fff;
  border: 1px solid var(--ym-line);
  border-radius: var(--r-lg);
  overflow: hidden;
}
html[data-theme="dark"] .ym-card { background: var(--bg-raise-2); }

/* ==========================================================================
   6. 客服会话 ysv（用户端）
   ========================================================================== */
.ysv {
  min-height: calc(100vh - 52px);
  padding-bottom: 84px;              /* 给输入条让位 */
  background: var(--ym-bg);
}

/* 客服名片 */
.ysv__hd {
  display: flex; align-items: center; gap: 11px;
  padding: 14px var(--sp-3);
  background: #fff;
  border-bottom: 1px solid var(--ym-line);
}
html[data-theme="dark"] .ysv__hd { background: var(--bg-raise-2); }
.ysv__ava {
  width: 42px; height: 42px; flex: 0 0 auto;
  border-radius: 14px;
  background: var(--grad-brand);
  color: #fff;
  display: inline-flex; align-items: center; justify-content: center;
  box-shadow: 0 4px 12px rgba(190,31,85,.26);
}
.ysv__hd__t { font-size: 14.5px; font-weight: 800; color: var(--ym-ink); }
.ysv__hd__s {
  display: flex; align-items: center; gap: 5px;
  font-size: 11.5px; color: var(--ym-ink-3); margin-top: 2px;
}
.ysv__on {
  width: 6px; height: 6px; border-radius: 50%;
  background: #22c55e; flex: 0 0 auto;
  box-shadow: 0 0 0 3px rgba(34,197,94,.18);
}

/* 商品上下文条 */
.ysv__gd {
  display: flex; align-items: center; gap: 10px;
  margin: 10px var(--sp-3) 0;
  padding: 9px 11px;
  background: #fff;
  border: 1px solid var(--ym-line);
  border-radius: var(--r-md);
  text-decoration: none;
}
html[data-theme="dark"] .ysv__gd { background: var(--bg-raise-2); }
.ysv__gd img { width: 46px; height: 46px; border-radius: 9px; object-fit: cover; flex: 0 0 auto; background: #f2f2f4; }
.ysv__gd__tx { flex: 1; min-width: 0; }
.ysv__gd__t {
  font-size: 12.5px; font-weight: 600; color: var(--ym-ink);
  display: -webkit-box; -webkit-line-clamp: 1; -webkit-box-orient: vertical; overflow: hidden;
}
.ysv__gd__p { font-size: 12.5px; font-weight: 800; color: var(--ym-price); margin-top: 2px; }
.ysv__gd__x {
  flex: 0 0 auto;
  font-size: 11px; font-weight: 700; color: var(--brand-600);
  background: var(--brand-50); border: 1px solid var(--brand-100);
  padding: 4px 9px; border-radius: 999px;
}
html[data-theme="dark"] .ysv__gd__x { background: rgba(190,31,85,.16); border-color: rgba(190,31,85,.3); }

/* 会话流 */
.ysv__flow { padding: 14px var(--sp-3) 4px; }

.ysv__empty { text-align: center; padding: 46px 20px 30px; color: var(--ym-ink-3); }
.ysv__empty__i {
  width: 60px; height: 60px; margin: 0 auto 14px;
  border-radius: 20px;
  background: var(--grad-brand-soft);
  color: var(--brand-500);
  display: flex; align-items: center; justify-content: center;
}
.ysv__empty__t { font-size: 14px; font-weight: 700; color: var(--ym-ink-2); margin: 0 0 4px; }
.ysv__empty__s { font-size: 12px; margin: 0; }

.ysv__msg { display: flex; gap: 8px; margin-bottom: 14px; align-items: flex-start; }
.ysv__msg.is-me { flex-direction: row-reverse; }
.ysv__msg__ava {
  width: 28px; height: 28px; flex: 0 0 auto;
  border-radius: 9px;
  background: var(--grad-brand);
  color: #fff;
  display: inline-flex; align-items: center; justify-content: center;
  margin-top: 2px;
}
.ysv__msg__wrap { max-width: 76%; min-width: 0; }
.ysv__msg.is-me .ysv__msg__wrap { display: flex; flex-direction: column; align-items: flex-end; }

.ysv__msg__b {
  background: #fff;
  border: 1px solid var(--ym-line);
  border-radius: 14px 14px 14px 4px;
  padding: 9px 12px;
  font-size: 13.5px; line-height: 1.62;
  color: var(--ym-ink);
  word-break: break-word;
}
html[data-theme="dark"] .ysv__msg__b { background: var(--bg-raise-2); }
.ysv__msg.is-me .ysv__msg__b {
  background: var(--grad-brand);
  border-color: transparent;
  color: #fff;
  border-radius: 14px 14px 4px 14px;
}
.ysv__msg__imgs { display: flex; flex-wrap: wrap; gap: 5px; margin-top: 6px; }
.ysv__msg__imgs img {
  width: 108px; height: 108px; object-fit: cover;
  border-radius: 10px; cursor: zoom-in;
  background: rgba(0,0,0,.04);
}
.ysv__msg__t {
  font-size: 10px; color: var(--ym-ink-3);
  margin-top: 4px; padding: 0 3px;
}

/* FAQ */
.ysv__faq { padding: 8px var(--sp-3) 14px; }
.ysv__faq__t { font-size: 12px; color: var(--ym-ink-3); margin-bottom: 8px; }
.ysv__faq__list { display: flex; flex-wrap: wrap; gap: 7px; }
.ysv__faq__i {
  border: 1px solid var(--ym-line);
  background: #fff; color: var(--ym-ink-2);
  font-size: 12.5px; padding: 7px 13px;
  border-radius: 999px; cursor: pointer;
  -webkit-tap-highlight-color: transparent;
  transition: all .16s var(--ease-out, ease);
}
html[data-theme="dark"] .ysv__faq__i { background: var(--bg-raise-2); }
.ysv__faq__i:active { border-color: var(--brand-300); color: var(--brand-600); background: var(--brand-50); }

/* 待发图片 */
.ysv__picks {
  position: fixed; left: 0; right: 0;
  bottom: calc(60px + env(safe-area-inset-bottom, 0px));
  z-index: 46;
  display: flex; gap: 7px;
  padding: 9px var(--sp-3);
  background: rgba(255,255,255,.97);
  border-top: 1px solid var(--ym-line);
  overflow-x: auto;
}
html[data-theme="dark"] .ysv__picks { background: rgba(34,26,30,.97); }
.ysv__pick { position: relative; flex: 0 0 auto; }
.ysv__pick img { width: 54px; height: 54px; border-radius: 9px; object-fit: cover; display: block; }
.ysv__pick i {
  position: absolute; top: -5px; right: -5px;
  width: 17px; height: 17px; border-radius: 50%;
  background: rgba(0,0,0,.72); color: #fff;
  font-size: 12px; font-style: normal; line-height: 17px;
  text-align: center; cursor: pointer;
}

/* 输入条 */
.ysv__bar {
  position: fixed; left: 0; right: 0; bottom: 0; z-index: 47;
  display: flex; align-items: flex-end; gap: 8px;
  padding: 8px var(--sp-3) calc(8px + env(safe-area-inset-bottom, 0px));
  background: rgba(255,255,255,.98);
  -webkit-backdrop-filter: blur(14px); backdrop-filter: blur(14px);
  border-top: 1px solid var(--ym-line);
}
html[data-theme="dark"] .ysv__bar { background: rgba(34,26,30,.98); }
.ysv__bar__plus {
  width: 36px; height: 36px; flex: 0 0 auto;
  border: 0; border-radius: 50%;
  background: var(--brand-50); color: var(--brand-500);
  display: inline-flex; align-items: center; justify-content: center;
  cursor: pointer;
}
html[data-theme="dark"] .ysv__bar__plus { background: rgba(190,31,85,.16); }
.ysv__bar__in {
  flex: 1; min-width: 0;
  background: var(--ym-bg);
  border: 1px solid var(--ym-line);
  border-radius: 18px;
  padding: 7px 13px;
}
.ysv__bar__in textarea {
  width: 100%; border: 0; outline: 0; background: none;
  font-size: 14px; line-height: 1.5; color: var(--ym-ink);
  resize: none; max-height: 110px;
  font-family: inherit;
}
.ysv__bar__send {
  width: 36px; height: 36px; flex: 0 0 auto;
  border: 0; border-radius: 50%;
  background: var(--grad-brand); color: #fff;
  display: inline-flex; align-items: center; justify-content: center;
  cursor: pointer;
  box-shadow: 0 3px 10px rgba(190,31,85,.32);
}
.ysv__bar__send:disabled { opacity: .5; box-shadow: none; }

/* ===== 我的收藏 /shop/fav（20260921fv1）=====
   从 tpl/t_shop_fav.php 的内联样式抽到这里，PHP 端与 Nuxt 端共用同一份真源
   （Nuxt 侧由 layout 按 zone=shop 自动挂本文件）。改一处两端生效。 */
.fv{--m:#0d7a5f;--m2:#12a37c;--r:#e5484d;--ink:#0f1720;--t2:#5a6b78;--t3:#93a2ad;--ln:#e8eef0;background:#f5f7f8;min-height:100vh;padding-bottom:30px}
.fv-hd{position:sticky;top:0;z-index:30;height:48px;background:#fff;display:flex;align-items:center;gap:10px;padding:0 12px;border-bottom:1px solid var(--ln)}
.fv-hd__b{width:32px;height:32px;border-radius:50%;display:grid;place-items:center;text-decoration:none}
.fv-hd__b svg{width:19px;height:19px;stroke:var(--ink)}
.fv-hd__t{flex:1;font-size:15.5px;font-weight:600;color:var(--ink)}
.fv-hd__n{font-size:11.5px;color:var(--t3)}
.fv-w{padding:10px 14px 0;display:grid;grid-template-columns:repeat(2,1fr);gap:10px}
.fv-c{background:#fff;border-radius:13px;overflow:hidden;position:relative}
.fv-c__p{display:block;width:100%;aspect-ratio:1/1;background:#f2f5f6 center/cover no-repeat}
.fv-c__b{padding:9px 10px 11px}
.fv-c__n{font-size:12.5px;color:var(--ink);line-height:1.42;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;min-height:35px}
.fv-c__r{display:flex;align-items:baseline;justify-content:space-between;margin-top:7px}
.fv-c__pr{font-size:14px;font-weight:800;color:var(--r);font-variant-numeric:tabular-nums}
.fv-c__pr em{font-size:10.5px;font-style:normal}
.fv-c__sc{font-size:11.5px;font-weight:700;color:var(--m);font-variant-numeric:tabular-nums}
.fv-c__x{position:absolute;top:7px;right:7px;width:26px;height:26px;border-radius:50%;border:0;background:rgba(15,23,32,.5);color:#fff;display:grid;place-items:center;cursor:pointer;backdrop-filter:blur(3px)}
.fv-c__x svg{width:13px;height:13px;stroke:#fff;stroke-width:2.2;fill:none}
.fv-c__x.on svg{fill:#ff5a7a;stroke:#ff5a7a}
.fv-c__t{position:absolute;top:7px;left:7px;font-size:10px;font-weight:700;color:#fff;background:rgba(233,30,99,.9);padding:2px 7px;border-radius:6px}
.fv-empty{padding:72px 20px;text-align:center}
.fv-empty svg{width:58px;height:58px;stroke:#cfd9de;margin-bottom:14px}
.fv-empty__t{font-size:14px;color:var(--t2)}
.fv-empty a{display:inline-block;margin-top:16px;font-size:13px;font-weight:600;color:#fff;background:linear-gradient(100deg,#0d7a5f,#12a37c);padding:10px 24px;border-radius:999px;text-decoration:none}
.fv-pg{display:flex;justify-content:center;gap:7px;padding:16px 14px}
.fv-pg a,.fv-pg span{min-width:34px;height:34px;padding:0 10px;border-radius:9px;background:#fff;border:1px solid var(--ln);display:grid;place-items:center;font-size:12.5px;color:var(--t2);text-decoration:none}
.fv-pg a.on{background:var(--m);border-color:var(--m);color:#fff;font-weight:700}


/* ===== 购物车 /shop/cart（20260921ct1 · 增量迁移第 15 批）=====
   从 tpl/t_shop_cart.php 的内联样式抽到这里：mall.css 是 zone=shop 的皮肤真源，
   由 layout 自动挂在 /shop/* 下（PHP 与 Nuxt 同一份），改一处两端生效。 */

.ct{--m:#0d7a5f;--m2:#12a37c;--r:#e5484d;--ink:#0f1720;--t2:#5a6b78;--t3:#93a2ad;--ln:#e8eef0;background:#f5f7f8;min-height:100vh;padding-bottom:88px}

.ct-hd{position:sticky;top:0;z-index:30;height:48px;background:#fff;display:flex;align-items:center;gap:10px;padding:0 12px;border-bottom:1px solid var(--ln)}

.ct-hd__b{width:32px;height:32px;border-radius:50%;display:grid;place-items:center;text-decoration:none}

.ct-hd__b svg{width:19px;height:19px;stroke:var(--ink)}

.ct-hd__t{flex:1;font-size:15.5px;font-weight:600;color:var(--ink)}

.ct-hd__t em{font-style:normal;font-size:12px;color:var(--t3);font-weight:400;margin-left:6px}

.ct-hd__a{font-size:12.5px;color:var(--m2);text-decoration:none}

.ct-bal{margin:10px 14px 0;background:linear-gradient(120deg,#0b6a52,#12a37c);border-radius:14px;padding:13px 15px;color:#fff;display:flex;align-items:center;justify-content:space-between}

.ct-bal__k{font-size:11px;opacity:.85}

.ct-bal__v{font-size:22px;font-weight:800;margin-top:2px;font-variant-numeric:tabular-nums}

.ct-bal__v em{font-size:11.5px;font-style:normal;font-weight:500;margin-left:3px;opacity:.85}

.ct-bal a{font-size:11.5px;font-weight:600;color:#0b6a52;background:#fff;padding:7px 13px;border-radius:999px;text-decoration:none}

.ct-w{padding:10px 14px 0}

.ct-c{background:#fff;border-radius:13px;padding:11px;display:flex;gap:10px;margin-bottom:9px;position:relative}

.ct-c__ck{position:absolute;left:11px;top:11px;z-index:2}

.ct-c__bx{display:flex;gap:10px;width:100%;padding-left:22px;box-sizing:border-box}

.ct-c__p{width:82px;height:82px;border-radius:10px;background:#f2f5f6 center/cover no-repeat;flex:none}

.ct-c__b{flex:1;min-width:0;display:flex;flex-direction:column}

.ct-c__n{font-size:13px;color:var(--ink);line-height:1.42;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}

.ct-c__sp{font-size:11px;color:var(--t3);margin-top:4px}

.ct-c__ft{display:flex;align-items:flex-end;justify-content:space-between;margin-top:auto;padding-top:8px}

.ct-c__pr{color:var(--r);font-size:15.5px;font-weight:800;font-variant-numeric:tabular-nums}

.ct-c__pr i{font-size:11px;font-style:normal}

.ct-c__sc{font-size:11px;color:var(--m);margin-top:2px}

.ct-qty{display:flex;align-items:center;border:1px solid var(--ln);border-radius:8px;overflow:hidden}

.ct-qty button{width:28px;height:28px;border:0;background:#f7f9fa;font-size:15px;color:var(--t2);cursor:pointer;line-height:1}

.ct-qty input{width:36px;height:28px;border:0;text-align:center;font-size:12.5px;font-weight:600;color:var(--ink);outline:0}

.ct-c__del{position:absolute;right:10px;bottom:10px;border:0;background:none;font-size:11px;color:var(--t3);cursor:pointer;padding:3px 5px}

.ct-fab{position:fixed;left:0;right:0;bottom:0;z-index:40;background:#fff;border-top:1px solid var(--ln);display:flex;align-items:center;gap:10px;padding:9px 14px calc(9px + env(safe-area-inset-bottom));max-width:var(--page-max,680px);margin:0 auto}

.ct-fab__l{flex:1;font-size:11.5px;color:var(--t2);line-height:1.5}

.ct-fab__l b{color:var(--r);font-size:16px;font-weight:800}

.ct-fab__r{display:flex;gap:8px}

.ct-fab__b{height:40px;border-radius:999px;border:0;font-size:13.5px;font-weight:700;padding:0 17px;cursor:pointer}

.ct-fab__b--d{background:#f5f7f8;color:var(--t2)}

.ct-fab__b--p{background:linear-gradient(100deg,#0d7a5f,#12a37c);color:#fff}

.ct-ck{width:17px;height:17px;accent-color:#12a37c;cursor:pointer;flex:none}

.ct-empty{padding:70px 20px;text-align:center}

.ct-empty svg{width:60px;height:60px;stroke:#cfd9de;margin-bottom:14px}

.ct-empty__t{font-size:14px;color:var(--t2)}

.ct-empty a{display:inline-block;margin-top:16px;font-size:13px;font-weight:600;color:#fff;background:linear-gradient(100deg,#0d7a5f,#12a37c);padding:10px 24px;border-radius:999px;text-decoration:none}

.ct-tip{margin:12px 14px 0;background:#fff;border-radius:12px;padding:12px 14px;font-size:11.5px;color:var(--t3);line-height:1.7}

/* === /shop/orders 我的订单（20260921or1 · 从 t_shop_orders.php 内联样式抽来，PHP 与 Nuxt 同一份真源）=== */
.od-toast{position:fixed;left:50%;top:50%;transform:translate(-50%,-50%);z-index:999;background:rgba(15,23,32,.9);color:#fff;font-size:13.5px;padding:11px 20px;border-radius:11px;max-width:76vw;text-align:center;line-height:1.5;pointer-events:none}
.od-toast.is-bad{background:rgba(200,40,60,.92)}
.od{--m:#0d7a5f;--m2:#12a37c;--r:#e91e63;--ink:#0f1720;--t2:#5a6b78;--t3:#93a2ad;--ln:#e8eef0;background:#f5f7f8;min-height:100vh;padding-bottom:30px}
.od-hd{position:sticky;top:0;z-index:30;height:48px;background:#fff;display:flex;align-items:center;gap:10px;padding:0 12px;border-bottom:1px solid var(--ln)}
.od-hd__b{width:32px;height:32px;border-radius:50%;display:grid;place-items:center;text-decoration:none}
.od-hd__b svg{width:19px;height:19px;stroke:var(--ink)}
.od-hd__t{flex:1;font-size:15.5px;font-weight:600;color:var(--ink)}
.od-tabs{display:flex;background:#fff;border-bottom:1px solid var(--ln);position:sticky;top:48px;z-index:29}
.od-tabs a{flex:1;text-align:center;padding:12px 0;font-size:13px;color:var(--t2);text-decoration:none;position:relative}
.od-tabs a.on{color:var(--m);font-weight:700}
.od-tabs a.on::after{content:"";position:absolute;left:50%;transform:translateX(-50%);bottom:0;width:24px;height:2.5px;border-radius:2px;background:var(--m)}
.od-w{padding:10px 14px 0}
.od-c{background:#fff;border-radius:13px;margin-bottom:10px;overflow:hidden}
.od-c__h{display:flex;align-items:center;justify-content:space-between;padding:11px 13px;border-bottom:1px solid #f4f7f8}
.od-c__no{font-size:11.5px;color:var(--t3);font-variant-numeric:tabular-nums}
.od-c__st{font-size:12px;font-weight:700}
.od-c__st--ok{color:#0d7a5f}.od-c__st--warn{color:#f5a623}.od-c__st--info{color:#2d8fd5}.od-c__st--bad{color:#93a2ad}
.od-c__b{display:flex;gap:10px;padding:11px 13px}
.od-c__p{width:74px;height:74px;border-radius:10px;background:#f2f5f6 center/cover no-repeat;flex:none}
.od-c__i{flex:1;min-width:0}
.od-c__n{font-size:13px;color:var(--ink);line-height:1.42;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.od-c__m{font-size:11px;color:var(--t3);margin-top:5px}
.od-c__pr{text-align:right;flex:none;font-size:13.5px;font-weight:700;color:var(--r);font-variant-numeric:tabular-nums}
.od-c__pr em{font-size:11px;font-style:normal}
.od-c__f{display:flex;align-items:center;justify-content:space-between;padding:9px 13px;border-top:1px solid #f4f7f8;background:#fafcfc}
.od-c__tm{font-size:11px;color:var(--t3)}
.od-c__ac{display:flex;gap:7px}
.od-btn{font-size:11.5px;font-weight:600;padding:6px 13px;border-radius:999px;border:1px solid var(--ln);background:#fff;color:var(--t2);text-decoration:none;cursor:pointer}
.od-btn--p{background:linear-gradient(100deg,#0d7a5f,#12a37c);border:0;color:#fff}
.od-btn--w{background:#fff8e9;border-color:#ffe2b0;color:#c07d00}
.od-btn--g{background:#f5f7f8;color:var(--t2)}
.od-btn:disabled{opacity:.5;cursor:default}
.od-mk{position:fixed;inset:0;z-index:80;background:rgba(15,23,32,.5);display:none;align-items:flex-end;justify-content:center}
.od-mk.on{display:flex}
.od-mk__b{width:100%;max-width:var(--page-max,680px);background:#fff;border-radius:18px 18px 0 0;padding:16px 16px calc(18px + env(safe-area-inset-bottom));max-height:76vh;overflow:auto}
.od-mk__t{font-size:15px;font-weight:700;color:var(--ink);margin-bottom:12px}
.od-mk__r{display:flex;justify-content:space-between;font-size:12.5px;color:var(--t2);padding:7px 0;border-bottom:1px dashed #eef3f4}
.od-mk__r b{color:var(--ink);font-weight:600;text-align:right;max-width:60%;word-break:break-all}
.od-mk__x{width:100%;height:42px;margin-top:14px;border:0;border-radius:999px;background:linear-gradient(100deg,#0d7a5f,#12a37c);color:#fff;font-size:14.5px;font-weight:700;cursor:pointer}
.od-tip{font-size:11.5px;color:var(--t3);text-align:center;padding:4px 0 0}
.od-empty{padding:70px 20px;text-align:center}
.od-empty svg{width:58px;height:58px;stroke:#cfd9de;margin-bottom:14px}
.od-empty__t{font-size:14px;color:var(--t2)}
.od-empty a{display:inline-block;margin-top:16px;font-size:13px;font-weight:600;color:#fff;background:linear-gradient(100deg,#0d7a5f,#12a37c);padding:10px 24px;border-radius:999px;text-decoration:none}
.od-pg{display:flex;justify-content:center;gap:7px;padding:16px 14px}
.od-pg a,.od-pg span{min-width:34px;height:34px;padding:0 10px;border-radius:9px;background:#fff;border:1px solid var(--ln);display:grid;place-items:center;font-size:12.5px;color:var(--t2);text-decoration:none}
.od-pg a.on{background:var(--m);border-color:var(--m);color:#fff;font-weight:700}
.od-kd{margin:10px 14px 0;background:linear-gradient(120deg,#0b6a52,#12a37c);border-radius:14px;padding:13px 15px;color:#fff;display:flex;align-items:center;justify-content:space-between}
.od-kd__k{font-size:11px;opacity:.85}
.od-kd__v{font-size:21px;font-weight:800;margin-top:2px;font-variant-numeric:tabular-nums}
.od-kd__v em{font-size:11.5px;font-style:normal;font-weight:500;margin-left:3px;opacity:.85}
.od-kd a{font-size:11.5px;font-weight:600;color:#0b6a52;background:#fff;padding:7px 13px;border-radius:999px;text-decoration:none}



/* ==================== 20260921sm1 · /shop/mine（我的商城） ====================
 * 真源说明：这两段原是 t_shop_mine.php / t_shop_addr.php 的内联 <style>，
 * 迁移 Nuxt 时抽到这里 —— mall.css 是 zone=shop 的皮肤真源，
 * PHP 端（View.php 按 tpl 名 t_shop* 自动挂）与 Nuxt 端（layout 的 ZONE_SKIN）用同一份，
 * 改一处两端生效，不会再出现「PHP 一版、Nuxt 一版」。
 * ========================================================================== */
.sm{--m:#0d7a5f;--m2:#12a37c;--r:#e5484d;--ink:#0f1720;--t2:#5a6b78;--t3:#93a2ad;--ln:#e8eef0;background:#f5f7f8;min-height:100vh;padding-bottom:30px}
.sm-hd{position:sticky;top:0;z-index:30;height:48px;background:#fff;display:flex;align-items:center;gap:10px;padding:0 12px;border-bottom:1px solid var(--ln)}
.sm-hd__b{width:32px;height:32px;border-radius:50%;display:grid;place-items:center;text-decoration:none}
.sm-hd__b svg{width:19px;height:19px;stroke:var(--ink)}
.sm-hd__t{flex:1;font-size:15.5px;font-weight:600;color:var(--ink)}
/* 积分横幅 —— 得物式深绿主视觉 */
.sm-top{margin:11px 14px 0;border-radius:16px;padding:15px 17px;color:#fff;
  background:linear-gradient(118deg,#0a5c47,#0d7a5f 46%,#12a37c);position:relative;overflow:hidden}
.sm-top::after{content:"";position:absolute;right:-38px;top:-46px;width:132px;height:132px;border-radius:50%;background:rgba(255,255,255,.09)}
.sm-top::before{content:"";position:absolute;right:14px;bottom:-56px;width:96px;height:96px;border-radius:50%;background:rgba(255,255,255,.07)}
.sm-top__k{font-size:11px;opacity:.86}
.sm-top__v{font-size:27px;font-weight:800;margin-top:3px;font-variant-numeric:tabular-nums;letter-spacing:-.4px}
.sm-top__v em{font-size:12px;font-style:normal;font-weight:500;margin-left:4px;opacity:.85}
.sm-top__a{position:relative;display:inline-block;margin-top:11px;font-size:11.5px;font-weight:600;color:#0a5c47;background:#fff;padding:6px 14px;border-radius:999px;text-decoration:none}
/* 订单四宫格 */
.sm-cd{background:#fff;margin:10px 14px 0;border-radius:13px;overflow:hidden}
.sm-cd__h{display:flex;align-items:center;justify-content:space-between;padding:12px 14px 4px}
.sm-cd__t{font-size:13.5px;font-weight:700;color:var(--ink)}
.sm-cd__m{font-size:11.5px;color:var(--t3);text-decoration:none}
.sm-g4{display:grid;grid-template-columns:repeat(4,1fr);padding:6px 6px 14px}
.sm-g4 a{display:block;text-align:center;text-decoration:none;padding:8px 0;position:relative}
.sm-g4 em{display:grid;place-items:center;width:34px;height:34px;margin:0 auto 6px;border-radius:11px;background:#eef7f4}
.sm-g4 em svg{width:17px;height:17px;stroke:#0d7a5f;fill:none;stroke-width:1.85;stroke-linecap:round;stroke-linejoin:round}
.sm-g4 span{font-size:11.5px;color:var(--t2)}
.sm-g4 b{position:absolute;top:2px;right:calc(50% - 26px);min-width:16px;height:16px;padding:0 4px;border-radius:999px;
  background:var(--r);color:#fff;font-size:10px;font-weight:700;display:grid;place-items:center;line-height:1}
/* 通用行 */
.sm-rows{padding:2px 0 6px}
.sm-row{display:flex;align-items:center;gap:11px;padding:12px 14px;text-decoration:none;border-bottom:1px solid #f5f8f9}
.sm-row:last-child{border-bottom:0}
.sm-row__i{width:31px;height:31px;border-radius:9px;background:#eef7f4;display:grid;place-items:center;flex:none}
.sm-row__i svg{width:16px;height:16px;stroke:#0d7a5f;fill:none;stroke-width:1.85;stroke-linecap:round;stroke-linejoin:round}
.sm-row__t{flex:1;font-size:13.5px;color:var(--ink)}
.sm-row__x{font-size:11.5px;color:var(--t3)}
.sm-row__a{width:7px;height:7px;border-right:1.6px solid #c8d4da;border-top:1.6px solid #c8d4da;transform:rotate(45deg);flex:none;margin-left:2px}
/* 最近订单 */
.sm-od{display:flex;gap:10px;padding:10px 14px;text-decoration:none;border-bottom:1px solid #f5f8f9}
.sm-od:last-child{border-bottom:0}
.sm-od__p{width:52px;height:52px;border-radius:9px;background:#f2f5f6 center/cover no-repeat;flex:none}
.sm-od__b{flex:1;min-width:0}
.sm-od__n{font-size:12.5px;color:var(--ink);line-height:1.4;display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;overflow:hidden}
.sm-od__m{font-size:11px;color:var(--t3);margin-top:4px}
.sm-od__s{font-size:11.5px;font-weight:700;flex:none;align-self:center}
.sm-od__s--ok{color:#0d7a5f}.sm-od__s--warn{color:#f5a623}.sm-od__s--info{color:#2d8fd5}.sm-od__s--bad{color:#93a2ad}
/* 推荐 */
.sm-rec{padding:8px 14px 0;display:grid;grid-template-columns:repeat(2,1fr);gap:10px}
.sm-rc{background:#fff;border-radius:13px;overflow:hidden}
.sm-rc__p{display:block;width:100%;aspect-ratio:1/1;background:#f2f5f6 center/cover no-repeat}
.sm-rc__b{padding:9px 10px 11px}
.sm-rc__n{font-size:12.5px;color:var(--ink);line-height:1.42;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;min-height:35px}
.sm-rc__pr{font-size:14px;font-weight:800;color:var(--r);margin-top:7px;font-variant-numeric:tabular-nums}
.sm-rc__pr em{font-size:10.5px;font-style:normal}
.sm-rc__sc{font-size:12.5px;font-weight:800;color:var(--m);margin-top:7px;font-variant-numeric:tabular-nums}
.sm-ti{padding:16px 14px 8px;font-size:13.5px;font-weight:700;color:var(--ink)}

/* ==================== 20260921sm1 · /shop/addr（收货地址） ==================== */
.ad2{--m:#0d7a5f;--m2:#12a37c;--r:#e5484d;--ink:#0f1720;--t2:#5a6b78;--t3:#93a2ad;--ln:#e8eef0;background:#f5f7f8;min-height:100vh;padding-bottom:80px}
.ad2-hd{position:sticky;top:0;z-index:30;height:48px;background:#fff;display:flex;align-items:center;gap:10px;padding:0 12px;border-bottom:1px solid var(--ln)}
.ad2-hd__b{width:32px;height:32px;border-radius:50%;display:grid;place-items:center;text-decoration:none}
.ad2-hd__b svg{width:19px;height:19px;stroke:var(--ink)}
.ad2-hd__t{flex:1;font-size:15.5px;font-weight:600;color:var(--ink)}
.ad2-w{padding:10px 14px 0}
.ad2-c{background:#fff;border-radius:13px;padding:13px;margin-bottom:10px;position:relative}
.ad2-c__h{display:flex;align-items:center;gap:8px}
.ad2-c__n{font-size:14px;font-weight:600;color:var(--ink)}
.ad2-c__p{font-size:13px;color:var(--t2);font-variant-numeric:tabular-nums}
.ad2-c__d{font-size:12.5px;color:var(--t2);margin-top:6px;line-height:1.55}
.ad2-c__bg{font-size:10px;color:#fff;background:var(--m2);padding:1.5px 6px;border-radius:4px}
.ad2-c__ac{display:flex;gap:8px;margin-top:11px;padding-top:10px;border-top:1px solid #f4f7f8}
.ad2-btn{font-size:11.5px;font-weight:600;padding:6px 14px;border-radius:999px;border:1px solid var(--ln);background:#fff;color:var(--t2);cursor:pointer}
.ad2-btn--d{color:#c82846;border-color:#ffdde3;background:#fff5f7}
.ad2-fab{position:fixed;left:0;right:0;bottom:0;z-index:40;background:#fff;border-top:1px solid var(--ln);padding:10px 14px calc(10px + env(safe-area-inset-bottom));max-width:var(--page-max,680px);margin:0 auto}
.ad2-fab button{width:100%;height:44px;border-radius:999px;border:0;background:linear-gradient(100deg,#0d7a5f,#12a37c);color:#fff;font-size:15px;font-weight:700;cursor:pointer}
.ad2-msk{position:fixed;inset:0;background:rgba(15,23,32,.5);z-index:60;opacity:0;pointer-events:none;transition:opacity .2s}
.ad2-msk.on{opacity:1;pointer-events:auto}
.ad2-sh{position:fixed;left:0;right:0;bottom:0;z-index:61;background:#fff;border-radius:18px 18px 0 0;transform:translateY(101%);transition:transform .26s cubic-bezier(.3,.9,.3,1);max-width:var(--page-max,680px);margin:0 auto}
.ad2-sh.on{transform:translateY(0)}
.ad2-sh__h{display:flex;align-items:center;justify-content:space-between;padding:14px 16px 10px}
.ad2-sh__t{font-size:15.5px;font-weight:700;color:var(--ink)}
.ad2-sh__x{width:30px;height:30px;border-radius:50%;background:#f5f7f8;border:0;display:grid;place-items:center;cursor:pointer}
.ad2-sh__x svg{width:15px;height:15px;stroke:var(--t2)}
.ad2-sh__b{padding:0 16px 8px;max-height:58vh;overflow-y:auto}
.ad2-sh__f{padding:11px 16px calc(11px + env(safe-area-inset-bottom));border-top:1px solid var(--ln)}
.ad2-sh__ok{width:100%;height:44px;border-radius:999px;border:0;background:linear-gradient(100deg,#0d7a5f,#12a37c);color:#fff;font-size:15px;font-weight:700;cursor:pointer}
.ad2-sh__ok:disabled{opacity:.6}
.ad2-f{margin-bottom:11px}
.ad2-f__k{font-size:12px;color:var(--t2);margin-bottom:5px}
.ad2-in{width:100%;height:42px;border:1px solid var(--ln);border-radius:10px;padding:0 12px;font-size:14px;color:var(--ink);outline:0;box-sizing:border-box}
.ad2-in:focus{border-color:var(--m2)}
.ad2-sw{display:flex;align-items:center;gap:8px;font-size:13px;color:var(--t2);padding:4px 0 0}
.ad2-sw input{width:17px;height:17px;accent-color:#12a37c}
.ad2-empty{padding:66px 20px;text-align:center}
.ad2-empty svg{width:56px;height:56px;stroke:#cfd9de;margin-bottom:13px}
.ad2-empty__t{font-size:14px;color:var(--t2)}
.ad2-tip{margin:12px 14px 0;font-size:11.5px;color:var(--t2);line-height:1.7}
/* Nuxt 版新增的轻提示（PHP 版用的是全站 toast，站中站页这里自带一份） */
.ad2-toast{position:fixed;left:50%;bottom:96px;transform:translateX(-50%);z-index:90;max-width:78vw;
  background:rgba(15,23,32,.9);color:#fff;font-size:13px;padding:9px 16px;border-radius:999px;
  box-shadow:0 6px 20px rgba(0,0,0,.18)}
.ad2-toast.bad{background:rgba(200,40,70,.94)}

/* ===== 结算 / 确认订单 .ck （20260921ck1 从 t_shop_checkout.php 内联样式迁入） ===== */
.ck{--m:#0d7a5f;--m2:#12a37c;--r:#e5484d;--ink:#0f1720;--t2:#5a6b78;--t3:#93a2ad;--ln:#e8eef0;background:#f5f7f8;min-height:100vh;padding-bottom:86px}
.ck-hd{position:sticky;top:0;z-index:30;height:48px;background:#fff;display:flex;align-items:center;gap:10px;padding:0 12px;border-bottom:1px solid var(--ln)}
.ck-hd__b{width:32px;height:32px;border-radius:50%;display:grid;place-items:center;text-decoration:none}
.ck-hd__b svg{width:19px;height:19px;stroke:var(--ink)}
.ck-hd__t{flex:1;font-size:15.5px;font-weight:600;color:var(--ink)}
.ck-cd{background:#fff;margin-bottom:9px;padding:13px 14px}
.ck-cd__t{font-size:13.5px;font-weight:700;color:var(--ink);margin-bottom:10px}
.ck-ad{display:flex;gap:10px;align-items:flex-start;padding:10px 11px;border:1px solid var(--ln);border-radius:11px;margin-bottom:8px;cursor:pointer}
.ck-ad.on{border-color:var(--m2);background:#f4fbf9}
.ck-ad__i{width:18px;height:18px;border-radius:50%;border:1.5px solid #d3dde2;flex:none;margin-top:1px;display:grid;place-items:center}
.ck-ad.on .ck-ad__i{border-color:var(--m2);background:var(--m2)}
.ck-ad.on .ck-ad__i::after{content:"";width:7px;height:7px;border-radius:50%;background:#fff}
.ck-ad__b{flex:1;min-width:0}
.ck-ad__h{display:flex;align-items:center;gap:8px}
.ck-ad__n{font-size:13.5px;font-weight:600;color:var(--ink)}
.ck-ad__p{font-size:12.5px;color:var(--t2)}
.ck-ad__d{font-size:12px;color:var(--t2);margin-top:4px;line-height:1.5}
.ck-g{display:flex;gap:10px;padding:10px 0;border-bottom:1px solid #f4f7f8}
.ck-g:last-child{border-bottom:0}
.ck-g__p{width:66px;height:66px;border-radius:9px;background:#f2f5f6 center/cover no-repeat;flex:none}
.ck-g__b{flex:1;min-width:0}
.ck-g__n{font-size:12.5px;color:var(--ink);line-height:1.42;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.ck-g__m{font-size:11px;color:var(--t3);margin-top:4px}
.ck-g__r{text-align:right;flex:none}
.ck-g__pr{font-size:13.5px;font-weight:700;color:var(--r);font-variant-numeric:tabular-nums}
.ck-g__pr i{font-size:10.5px;font-style:normal}
.ck-g__sc{font-size:11px;color:var(--m);margin-top:3px}
.ck-in{width:100%;height:42px;border:1px solid var(--ln);border-radius:10px;padding:0 12px;font-size:13.5px;color:var(--ink);outline:0;box-sizing:border-box}
.ck-in:focus{border-color:var(--m2)}
.ck-fl{margin-bottom:10px}
.ck-fl__k{font-size:12px;color:var(--t2);margin-bottom:5px}
.ck-sm{display:flex;align-items:center;gap:9px;padding:9px 0}
.ck-sm__p{width:52px;height:52px;border-radius:9px;background:#f2f5f6 center/cover no-repeat;flex:none}
.ck-sm__n{flex:1;font-size:12.5px;color:var(--ink);line-height:1.4;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.ck-sm__pr{font-size:12px;font-weight:700;color:var(--r);flex:none}
.ck-row{display:flex;justify-content:space-between;font-size:12.5px;color:var(--t2);padding:5px 0}
.ck-row--t{font-size:15px;font-weight:800;color:var(--ink);padding-top:9px;margin-top:5px;border-top:1px dashed #e2e9ec}
.ck-row--t b{color:var(--r);font-size:19px}
.ck-fab{position:fixed;left:0;right:0;bottom:0;z-index:40;background:#fff;border-top:1px solid var(--ln);display:flex;align-items:center;gap:10px;padding:9px 14px calc(9px + env(safe-area-inset-bottom));max-width:var(--page-max,680px);margin:0 auto}
.ck-fab__l{flex:1;font-size:11.5px;color:var(--t2);line-height:1.5}
.ck-fab__l b{color:var(--r);font-size:17px;font-weight:800}
.ck-fab__b{height:42px;border-radius:999px;border:0;font-size:14.5px;font-weight:700;padding:0 26px;cursor:pointer;background:linear-gradient(100deg,#0d7a5f,#12a37c);color:#fff}
.ck-fab__b:disabled{opacity:.5}
.ck-pt{display:flex;gap:8px;margin-top:2px}
.ck-pt span{flex:1;text-align:center;font-size:12.5px;color:var(--t2);background:#f5f7f8;border:1px solid var(--ln);padding:9px 0;border-radius:9px;cursor:pointer}
.ck-pt span.on{color:var(--m);border-color:var(--m2);background:#eefaf5;font-weight:600}
.ck-tp{font-size:11px;color:var(--t3);margin-top:8px;line-height:1.6}


/* ==================================================================
 *  商品详情 /shop/g/<id>（20260922gd1）—— 从 tpl/t_shop_good.php 内联样式迁入
 *  ⚠️ 真源在此（zone=shop 皮肤文件），PHP 与 Nuxt 共用同一份，改一处两端生效。
 * ================================================================== */
.gd{--m:#0d7a5f;--m2:#12a37c;--r:#e91e63;--ink:#0f1720;--t2:#5a6b78;--t3:#93a2ad;--ln:#e8eef0;background:#f5f7f8;min-height:100vh;padding-bottom:78px}

/* 顶部条 */
.gd-hd{position:sticky;top:0;z-index:30;height:48px;background:#fff;display:flex;align-items:center;gap:10px;padding:0 12px;border-bottom:1px solid var(--ln)}
.gd-hd__b{width:32px;height:32px;border-radius:50%;display:grid;place-items:center;text-decoration:none;flex:none}
.gd-hd__b svg{width:19px;height:19px;stroke:var(--ink)}
.gd-hd__t{flex:1;font-size:15px;font-weight:600;color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}

/* 图集 */
.gd-gal{background:#fff;position:relative}
.gd-gal__w{display:flex;overflow-x:auto;scroll-snap-type:x mandatory;scrollbar-width:none;aspect-ratio:1/1}
.gd-gal__w::-webkit-scrollbar{display:none}
.gd-gal__i{flex:none;width:100%;height:100%;scroll-snap-align:start;background:#f2f5f6 center/cover no-repeat}
.gd-gal__d{position:absolute;right:11px;bottom:11px;background:rgba(15,23,32,.55);color:#fff;font-size:11px;padding:3px 9px;border-radius:999px;font-variant-numeric:tabular-nums}
.gd-gal__n{position:absolute;left:0;top:0;background:linear-gradient(100deg,#0b6a52,#12a37c);color:#fff;font-size:11px;font-weight:700;padding:5px 12px;border-bottom-right-radius:12px}

/* 价格区 */
.gd-pr{background:#fff;padding:13px 14px 15px}
.gd-pr__r{display:flex;align-items:flex-end;justify-content:space-between;gap:10px}
.gd-pr__l{display:flex;align-items:baseline;gap:7px;flex-wrap:wrap}
.gd-pr__v{color:var(--r);font-size:27px;font-weight:800;font-variant-numeric:tabular-nums;letter-spacing:-.5px}
.gd-pr__v i{font-size:15px;font-style:normal;font-weight:700}
.gd-pr__o{color:var(--t3);font-size:13px;text-decoration:line-through}
.gd-pr__sc{display:inline-flex;align-items:baseline;gap:3px;color:var(--m);font-size:20px;font-weight:800}
.gd-pr__sc i{font-size:11px;font-style:normal;font-weight:600}
.gd-pr__off{background:linear-gradient(100deg,#e91e63,#ff5c8a);color:#fff;font-size:11px;font-weight:700;padding:3px 8px;border-radius:6px}
.gd-pr__sl{font-size:11.5px;color:var(--t3);text-align:right;line-height:1.6}
.gd-pr__t{font-size:16px;font-weight:700;color:var(--ink);line-height:1.42;margin-top:10px}
.gd-pr__tg{display:flex;gap:5px;flex-wrap:wrap;margin-top:8px}
.gd-pr__tg span{font-size:10.5px;color:var(--m);background:#eefaf5;border:1px solid #d8f0e7;padding:2px 7px;border-radius:5px}

/* 保障行 */
.gd-trust{display:flex;gap:14px;padding:10px 14px;background:#fff;border-top:1px solid var(--ln);font-size:11.5px;color:var(--t2);flex-wrap:wrap}
.gd-trust span{display:flex;align-items:center;gap:4px}
.gd-trust svg{width:13px;height:13px;stroke:var(--m2);flex:none}

/* 卡片 */
.gd-cd{background:#fff;margin-top:9px;border-radius:0}
.gd-cd__h{display:flex;align-items:center;justify-content:space-between;padding:13px 14px 9px}
.gd-cd__t{font-size:14px;font-weight:700;color:var(--ink)}
.gd-cd__m{font-size:11.5px;color:var(--t3)}

/* 规格 */
.gd-sp{padding:0 14px 14px}
.gd-sp__g{margin-bottom:11px}
.gd-sp__k{font-size:11.5px;color:var(--t2);margin-bottom:7px}
.gd-sp__vs{display:flex;gap:8px;flex-wrap:wrap}
.gd-sp__v{font-size:12.5px;color:var(--ink);background:#f5f7f8;border:1px solid var(--ln);padding:7px 14px;border-radius:9px;cursor:pointer;user-select:none}
.gd-sp__v.on{color:var(--m);border-color:var(--m2);background:#eefaf5;font-weight:600}

/* 信息行 */
.gd-row{display:flex;align-items:center;gap:10px;padding:11px 14px;border-top:1px solid #f4f7f8}
.gd-row__k{font-size:12.5px;color:var(--t2);flex:none;width:52px}
.gd-row__v{font-size:12.5px;color:var(--ink);flex:1}
.gd-row__a{font-size:11.5px;color:var(--m2);text-decoration:none;flex:none}

/* 评价 */
.gd-rt{display:flex;gap:14px;align-items:center;padding:0 14px 12px}
.gd-rt__s{text-align:center;flex:none}
.gd-rt__n{font-size:30px;font-weight:800;color:var(--m);line-height:1;font-variant-numeric:tabular-nums}
.gd-rt__k{font-size:10.5px;color:var(--t3);margin-top:4px}
.gd-rt__b{flex:1}
.gd-rt__bar{height:6px;border-radius:3px;background:#f0f3f4;overflow:hidden}
.gd-rt__bar i{display:block;height:100%;background:linear-gradient(90deg,#12a37c,#0d7a5f);border-radius:3px}
.gd-rt__l{font-size:11px;color:var(--t3);margin-top:5px}
.gd-rv{padding:11px 14px;border-top:1px solid #f4f7f8;display:flex;gap:9px}
.gd-rv__av{width:30px;height:30px;border-radius:50%;background:#e8eef0 center/cover no-repeat;flex:none}
.gd-rv__b{flex:1;min-width:0}
.gd-rv__h{display:flex;align-items:center;justify-content:space-between;gap:8px}
.gd-rv__n{font-size:12px;color:var(--t2)}
.gd-rv__st{display:flex;gap:1.5px}
.gd-rv__st svg{width:11px;height:11px;fill:#f5a623;stroke:none}
.gd-rv__st svg.off{fill:#e4e9ec}
.gd-rv__x{font-size:13px;color:var(--ink);line-height:1.55;margin-top:5px;word-break:break-word}
.gd-rv__im{display:flex;gap:6px;margin-top:7px;flex-wrap:wrap}
.gd-rv__im span{width:66px;height:66px;border-radius:8px;background:#f2f5f6 center/cover no-repeat}
.gd-rv__d{font-size:10.5px;color:var(--t3);margin-top:5px}

/* 详情 */
.gd-dt{padding:6px 14px 20px;font-size:14px;line-height:1.78;color:#22303a;word-break:break-word}
.gd-dt img{max-width:100%;height:auto;border-radius:10px;display:block;margin:10px 0}
.gd-dt p{margin:0 0 10px}

/* 商品描述 */
.gd-ds{padding:0 14px 14px;font-size:13px;line-height:1.7;color:var(--t2)}

/* 推荐横滑 */
.gd-rc{display:flex;gap:10px;overflow-x:auto;padding:0 14px 14px;scrollbar-width:none}
.gd-rc::-webkit-scrollbar{display:none}
.gd-rc a{flex:none;width:112px;text-decoration:none;color:inherit}
.gd-rc__p{width:112px;height:112px;border-radius:11px;background:#f2f5f6 center/cover no-repeat}
.gd-rc__n{font-size:11.5px;color:var(--ink);margin-top:6px;line-height:1.35;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.gd-rc__p2{font-size:13px;font-weight:700;color:var(--r);margin-top:3px}

/* 底部操作 */
.gd-bt{position:fixed;left:0;right:0;bottom:0;z-index:40;background:#fff;border-top:1px solid var(--ln);display:flex;align-items:center;gap:8px;padding:8px 12px calc(8px + env(safe-area-inset-bottom));max-width:var(--page-max,680px);margin:0 auto}
.gd-bt__i{display:flex;flex-direction:column;align-items:center;gap:2px;text-decoration:none;color:var(--t2);font-size:10px;min-width:42px;background:none;border:0;cursor:pointer;padding:0}
.gd-bt__i svg{width:20px;height:20px;stroke:var(--t2);fill:none}
.gd-bt__i.on svg{stroke:var(--r);fill:var(--r)}
.gd-bt__b{flex:1;height:43px;border-radius:999px;border:0;font-size:14.5px;font-weight:700;cursor:pointer;display:grid;place-items:center}
.gd-bt__b--cart{background:#eefaf5;color:var(--m)}
.gd-bt__b--buy{background:linear-gradient(100deg,#0d7a5f,#12a37c);color:#fff}
.gd-bt__b:disabled{opacity:.5;cursor:not-allowed}

/* 数量 */
.gd-qty{display:flex;align-items:center;gap:0;border:1px solid var(--ln);border-radius:9px;overflow:hidden}
.gd-qty button{width:34px;height:34px;border:0;background:#f7f9fa;font-size:17px;color:var(--t2);cursor:pointer;line-height:1}
.gd-qty input{width:44px;height:34px;border:0;text-align:center;font-size:14px;font-weight:600;color:var(--ink);outline:0;background:#fff}

/* 弹层 */
.gd-msk{position:fixed;inset:0;background:rgba(15,23,32,.5);z-index:60;opacity:0;pointer-events:none;transition:opacity .2s}
.gd-msk.on{opacity:1;pointer-events:auto}
.gd-sh{position:fixed;left:0;right:0;bottom:0;z-index:61;background:#fff;border-radius:18px 18px 0 0;transform:translateY(101%);transition:transform .26s cubic-bezier(.3,.9,.3,1);max-width:var(--page-max,680px);margin:0 auto;max-height:82vh;display:flex;flex-direction:column}
.gd-sh.on{transform:translateY(0)}
.gd-sh__h{display:flex;align-items:center;justify-content:space-between;padding:14px 16px 10px;flex:none}
.gd-sh__t{font-size:15.5px;font-weight:700;color:var(--ink)}
.gd-sh__x{width:30px;height:30px;border-radius:50%;background:#f5f7f8;border:0;display:grid;place-items:center;cursor:pointer}
.gd-sh__x svg{width:15px;height:15px;stroke:var(--t2)}
.gd-sh__b{padding:0 16px 16px;overflow-y:auto;flex:1}
.gd-sh__f{padding:11px 16px calc(11px + env(safe-area-inset-bottom));border-top:1px solid var(--ln);flex:none}
.gd-sh__ok{width:100%;height:44px;border-radius:999px;border:0;background:linear-gradient(100deg,#0d7a5f,#12a37c);color:#fff;font-size:15px;font-weight:700;cursor:pointer}
.gd-sh__sm{display:flex;gap:10px;padding:12px 0 0}
.gd-sh__pp{width:80px;height:80px;border-radius:11px;background:#f2f5f6 center/cover no-repeat;flex:none}
.gd-sh__pv{flex:1;min-width:0}
.gd-sh__pn{font-size:13px;color:var(--ink);line-height:1.4}
.gd-sh__pr{color:var(--r);font-size:19px;font-weight:800;margin-top:6px}
.gd-sh__pr i{font-size:12px;font-style:normal}
.gd-sh__r{display:flex;align-items:center;justify-content:space-between;padding:12px 0;border-top:1px solid #f4f7f8}
.gd-sh__k{font-size:13.5px;color:var(--t2)}
.gd-in{width:100%;height:40px;border:1px solid var(--ln);border-radius:9px;padding:0 12px;font-size:13.5px;color:var(--ink);outline:0;box-sizing:border-box}
.gd-in:focus{border-color:var(--m2)}
.gd-fld{margin-bottom:10px}
.gd-fld__k{font-size:12px;color:var(--t2);margin-bottom:5px}
.gd-fl{display:flex;gap:8px;margin-bottom:10px;flex-wrap:wrap}
.gd-fl__i{flex:1;min-width:calc(50% - 4px)}
.gd-ad{padding:10px 12px;border:1px solid var(--ln);border-radius:10px;margin-bottom:8px;cursor:pointer}
.gd-ad.on{border-color:var(--m2);background:#f4fbf9}
.gd-ad__h{display:flex;align-items:center;gap:8px}
.gd-ad__n{font-size:13.5px;font-weight:600;color:var(--ink)}
.gd-ad__p{font-size:12.5px;color:var(--t2);font-variant-numeric:tabular-nums}
.gd-ad__a{font-size:11px;color:#fff;background:var(--m2);padding:1px 6px;border-radius:4px}
.gd-ad__d{font-size:12px;color:var(--t2);margin-top:5px;line-height:1.5}
.gd-tp{display:inline-block;font-size:11.5px;color:var(--m2);text-decoration:none;margin-top:2px}
.gd-ok{width:100%;height:44px;border-radius:999px;border:0;background:linear-gradient(100deg,#0d7a5f,#12a37c);color:#fff;font-size:15px;font-weight:700;cursor:pointer}
.gd-ok--w{background:#f5a623}

/* 商品不存在（t_shop_404.php） */
.nf{min-height:70vh;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:40px 24px;text-align:center}
.nf svg{width:76px;height:76px;stroke:#cfd9de;margin-bottom:18px}
.nf__t{font-size:17px;font-weight:700;color:#0f1720}
.nf__s{font-size:13px;color:#93a2ad;margin-top:8px;line-height:1.7}
.nf a{display:inline-block;margin-top:22px;font-size:13.5px;font-weight:600;color:#fff;background:linear-gradient(100deg,#0d7a5f,#12a37c);padding:11px 26px;border-radius:999px;text-decoration:none}
