/* =====================================================================
   app-v2.css —— 会员端 UI v2 覆盖层（2026-10-18 从 web/ui-v2 合并进主系统）
   ---------------------------------------------------------------------
   定位：**覆盖层**。在 12 个会员端页面里，用 <link> 挂在 /assets/app.css 之后、
   页面私有 <style> **之后**（同特异度靠「后写覆盖」生效），不改 app.css 一个字节。

   覆盖范围（12 页）：login / index / screening / capture / result / booking /
   robot-session / robot-live / feedback / profile / appointments / daily。
   其余页面（后台 admin、chat、masters、shop 等）不引用本文件，视觉保持原样。

   ⚠️ 令牌口径：本节只保留与 app.css :root **不同**的 6 个变量。
      --r-lg 18→16 / --r-md 14→12 / --r-sm 10→8（v2 收小一档，更「工具感」）；
      --shadow / --shadow-lg 换成贴纸卡片式轻阴影；
      --sans 多挂 HarmonyOS Sans SC / MiSans（国产屏显体，命中即用）。
      22 个颜色/字号变量与 app.css 逐值相同，**不再重复定义** —— 重复会让以后
      改色板时出现「改了一处、另一处盖着」的隐形冲突。
   ===================================================================== */

/* ---------------------------------------------------------------------
   1. 设计令牌（仅保留与 app.css 不同的部分）
   --------------------------------------------------------------------- */
:root {
  --r-lg: 16px;
  --r-md: 12px;
  --r-sm: 8px;
  --shadow: 0 1px 2px rgba(46, 43, 38, .04), 0 6px 16px -12px rgba(46, 43, 38, .18);
  --shadow-lg: 0 16px 40px -22px rgba(46, 43, 38, .35);
  --sans: "HarmonyOS Sans SC", "MiSans", "Inter", "PingFang SC", "Noto Sans SC", "Microsoft YaHei", "Hiragino Sans GB", sans-serif;
}

/* ---------------------------------------------------------------------
   2. 骨架：外层 / 内容区
   --------------------------------------------------------------------- */
body {
  background: var(--bg-alt);
  color: var(--text);
  /* 数字等宽：灸量、时长、次数都是要纵向对齐的数字列 */
  font-variant-numeric: tabular-nums;
}

.app {
  background: var(--bg);
  box-shadow: 0 0 0 1px rgba(46, 43, 38, .04), 0 24px 60px -40px rgba(46, 43, 38, .5);
}

.content { padding: 16px 16px 132px; }

/* ---------------------------------------------------------------------
   3. 顶栏：米杏半透明毛玻璃 + 常驻细线（v1 只有滚动后才出现线）
   --------------------------------------------------------------------- */
.topbar {
  background: rgba(245, 242, 237, .92);
  backdrop-filter: saturate(180%) blur(14px);
  -webkit-backdrop-filter: saturate(180%) blur(14px);
  border-bottom: 1px solid var(--line);
}

/* 顶部渐变：回到 v1 的「墨绿 → 铜金」，只把 4px 收到 3px 弱化装饰感 */
.accentbar {
  height: 3px;
  background: linear-gradient(90deg, var(--primary) 0%, #7FA593 55%, var(--accent) 100%);
}

.nav { padding: 11px 16px; border-bottom: none; }

/* 顶栏已有常驻下边框，滚动时不再重复加线，只做背景加深 */
.nav.scrolled {
  border-bottom-color: transparent;
  background: rgba(245, 242, 237, .78);
}

.brand { font-size: 15.5px; font-weight: 650; letter-spacing: .1px; }

/* 字标：回到 v1 的「浅绿底 + 墨绿字」（v2 曾做成实心青 + 白字） */
.brand .logo {
  width: 27px; height: 27px; border-radius: 8px;
  background: var(--primary-soft); color: var(--primary);
  font-size: 14.5px;
}

.nav .back {
  width: 34px; height: 34px; border-radius: 10px;
  background: var(--card); border: 1px solid var(--line);
  color: var(--text-sub);
}

.nav .back:active { background: var(--bg-alt); }

.nav .who {
  background: var(--bg-alt); border: 1px solid transparent;
  color: var(--text-sub); padding: 4px 10px;
}

/* 顶栏「退出登录」（2026-10-18 第四轮：从首页底部搬到页面最右上方）。
   ⚠️ renderNav 把 opts.right 渲染在 .who **之前**，而 .brand 是 flex:1，
   所以只按 DOM 顺序它会落在姓名胶囊左边。要视觉上真正「最右」，
   用 flex order 把它排到最后（.who / .brand 都是默认 order 0）。 */
.nav .nav-logout {
  order: 2; flex: none;
  padding: 5px 11px; border-radius: 999px;
  border: 1px solid var(--line); background: var(--card);
  color: var(--text-sub);
  font-size: 11.5px; font-family: var(--sans);
  white-space: nowrap; cursor: pointer;
  transition: background .15s, color .15s;
}

.nav .nav-logout:active { background: var(--bg-alt); color: var(--text); }

/* 家庭账号入口（2026-10-19）：与「退出登录」同栏，排在它前面（order 1 < 2） */
.nav .nav-family {
  order: 1; flex: none;
  padding: 5px 11px; border-radius: 999px;
  border: 1px solid var(--line); background: var(--primary-soft);
  color: var(--primary-deep);
  font-size: 11.5px; font-family: var(--sans); font-weight: 600;
  white-space: nowrap; cursor: pointer;
  transition: background .15s, color .15s;
}
.nav .nav-family:active { background: var(--primary); color: #fff; }

/* ---------------------------------------------------------------------
   4. 底栏 / 底部导航
   --------------------------------------------------------------------- */
.bottombar {
  background: rgba(245, 242, 237, .94);
  backdrop-filter: saturate(180%) blur(14px);
  -webkit-backdrop-filter: saturate(180%) blur(14px);
  border-top: 1px solid var(--line);
}

.tabbar button {
  color: var(--text-faint);
  border-radius: 10px;
  transition: color .16s, background .16s;
}

.tabbar button.on {
  color: var(--primary-deep);
  background: var(--primary-soft);
  font-weight: 700;
}

.tabbar button svg { width: 20px; height: 20px; }

/* ---------------------------------------------------------------------
   4-b. 底栏四个图标 + 文字**加粗放大**（2026-10-18 用户口径：
        「首页 / 养护卡商城 / 我的预约 / 我的档案 这四个图标标识突出清晰一些」）

       原来：图标 20px、线宽 1.6、文字 10.5px、未选中色 #A39C92（浅米灰），
       在米杏底上偏淡，中老年会员看着费劲。
       现在：图标 23px、线宽 1.9（**线宽能用 CSS 覆盖**，SVG 上是 presentation
       attribute，优先级低于 CSS）、文字 11.5px / 600、未选中色提到 --text-sub
       （#7D766D），选中态用墨绿加粗 + 浅青底胶囊。
       ⚠️ 「养护卡商城」5 个字，app.css 会给它.t-long 降到 9px，这里一并抬到 10px，
          否则同一排里它明显比别的字小一号。 */
.tabbar button {
  gap: 4px;
  padding: 7px 2px 6px;
  font-size: 11.5px;
  font-weight: 600;
  letter-spacing: .2px;
  color: var(--text-sub);
}

.tabbar button svg {
  width: 23px;
  height: 23px;
  stroke-width: 1.9;
}

.tabbar button.on { color: var(--primary-deep); font-weight: 700; }

.tabbar button.on svg { stroke-width: 2.1; }

.tabbar button.t-long { font-size: 10px; }

/* ---------------------------------------------------------------------
   5. 首页 Hero：去掉衬线大字与渐变底盘，换成「应用图标 + 无衬线标题」
   --------------------------------------------------------------------- */
.hero h1 {
  font-family: var(--sans);
  font-size: 24px; font-weight: 700; letter-spacing: .2px;
  color: var(--text); margin-bottom: 6px;
}

.hero .sub { font-size: 13px; color: var(--text-sub); }

.hero .mark {
  width: 72px; height: 72px; border-radius: 22px;
  background: var(--card);
  border: 1px solid var(--line);
  box-shadow: var(--shadow);
}

/* ---------------------------------------------------------------------
   6. 卡片 / 面板：细边框 + 极轻阴影（本套视觉的主基调）
   --------------------------------------------------------------------- */
.card,
.panel,
.qcard,
.badge,
.remind-card,
.tbl-wrap {
  border: 1px solid var(--line);
  border-radius: var(--r-md);
  box-shadow: var(--shadow);
}

.card { padding: 16px; margin-bottom: 10px; }

.card-title {
  font-size: 14px; font-weight: 700; margin-bottom: 9px;
  color: var(--text);
}

.card ul li::before { color: var(--primary); }

/* 区块标题：竖条从 4px×16px 收成 3px×14px，更像临床文档小标题 */
.section { margin: 20px 0 10px; }

.section .bar { width: 3px; height: 14px; border-radius: 2px; }

.section h2 { font-size: 15.5px; font-weight: 700; letter-spacing: .1px; }

.sec-t {
  font-size: 12px; font-weight: 700; color: var(--text-faint);
  letter-spacing: 1.2px; margin: 18px 0 8px 2px;
}

/* ---------------------------------------------------------------------
   7. 按钮：去字距、加高度、主按钮实心墨绿
   --------------------------------------------------------------------- */
.btn {
  border-radius: 12px; padding: 14px;
  font-size: 15px; font-weight: 700; letter-spacing: 0;
  transition: transform .15s, box-shadow .15s, background .15s;
}

.btn-primary {
  background: var(--primary);
  box-shadow: 0 6px 16px -10px rgba(107, 142, 127, .85);
}

.btn-primary:active { background: var(--primary-deep); transform: scale(.99); }

.btn-primary:disabled {
  background: #D9D3C9; color: #F7F4EF;
  box-shadow: none;
}

.btn-accent {
  background: var(--accent);
  box-shadow: 0 6px 16px -10px rgba(212, 145, 92, .85);
}

.btn-ghost {
  background: var(--card); color: var(--text-sub);
  border: 1px solid var(--line);
}

.btn-ghost:active { background: var(--bg-alt); }

.btn-sm { padding: 11px; font-size: 13.5px; }

.btn-xs {
  border-radius: 8px; border: 1px solid var(--line);
  background: var(--card); color: var(--text-sub);
  font-weight: 600;
}

.btn-xs.primary { background: var(--primary); border-color: var(--primary); }

.btn-xs.accent { background: var(--accent); border-color: var(--accent); }

/* ---------------------------------------------------------------------
   8. 首页功能入口：主入口实心墨绿，其余白底细边 —— 2026-10-18 第九轮改 3D 立体块
   ---------------------------------------------------------------------
   用户口径「四个功能栏设计成 3d 显示」。做法是**纯 CSS 立体块**，不用图片：
     · 父级 `.entry-grid` 给 `perspective`，子级在 3D 空间里**统一俯仰**
       （四块朝向完全相同），一眼能看出「有厚度」；
     · 「厚度」用一条 5px 实心暗边画出来（box-shadow 第 3 层）—— 比 border-bottom 好：
       不受圆角裁切、按下时可压缩，而且不占盒模型、不影响 grid 行高；
     · 顶面加左上→右下的高光渐变，全卡光源统一在左上；
     · 按下：抬升归零 → 厚度压到 2px → 落地阴影收紧，手感像真按在桌上。
   🔴 2026-10-18 用户口径（第十轮）：「3d 立体块要保持水平对称」。
      → **`--tiltY` 恒为 0、四块倾斜值完全一致**，水平方向是镜像自对称的。
      ⚠️ 别再写回 `.entry:nth-child(even){--tiltY:-5deg}` 那种左右反向倾斜：
         反向旋转时左右两列的透视缩短量、边缘反光、内阴影方向全都不同，
         眼睛会读成「一高一低、往中间塌」，恰好是不对称。对称的前提是四块同参。
      ⚠️ 立体感改由**垂直方向**承载：rotateX 俯仰 + 5px 暗边厚度 + 落地阴影，
         三者对四块一视同仁，所以左右必然一致。
   ⚠️ 倾斜量压得很小（X 6°）：再大文字就发虚、相邻卡片边缘会互相蹭到。
   ⚠️ transform 只用 CSS 变量拼一次（--tiltX/--tiltY/--lift/--sc），
      :hover 与 :active 只改变量值，避免三处各写一套 transform 互相覆盖。
   --------------------------------------------------------------------- */
.entry-grid {
  perspective: 1000px;
  perspective-origin: 50% 35%;
}

.entry {
  --tiltX: 6deg;
  --tiltY: 0deg;   /* 🔴 恒 0：左右对称的唯一保证，见上方说明 */
  --lift: 0px;
  --sc: 1;
  border: 1px solid rgba(46, 43, 38, .07);
  border-radius: var(--r-md);
  padding: 15px 14px;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  text-align: center;
  background: linear-gradient(155deg, #FFFFFF 0%, #FCF9F4 52%, #F4EFE7 100%);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, .95),
    inset -3px 0 0 rgba(46, 43, 38, .045),
    0 5px 0 #E6DFD3,
    0 16px 22px -14px rgba(46, 43, 38, .42);
  transform: rotateX(var(--tiltX)) rotateY(var(--tiltY)) translateZ(var(--lift)) scale(var(--sc));
  transition: transform .22s cubic-bezier(.2, .7, .3, 1), box-shadow .22s, border-color .15s;
}

/* 2026-10-18 第十轮：**左列右转 / 右列左转**的反向倾角已删（用户要水平对称）。
   四块现在同一套 transform 参数，左右像素级一致；立体感靠俯仰 + 厚度 + 阴影撑。
   ⚠️ 不要再加 nth-child 单独改 tilt/lift —— 任何一格参数不同都会立刻被看成歪的。 */

@media (hover: hover) {
  .entry:hover { --lift: 10px; --tiltX: 3deg; border-color: var(--primary); }
}

/* 按下：抬升归零 + 厚度压缩 + 阴影收紧 = 「按进去」 */
.entry:active {
  --lift: -2px;
  --tiltX: 1deg;
  --sc: .985;
  border-color: var(--primary);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, .7),
    inset -2px 0 0 rgba(46, 43, 38, .05),
    0 2px 0 #DED6C8,
    0 6px 10px -8px rgba(46, 43, 38, .45);
  transition-duration: .06s;
}

/* 主入口（实心墨绿）：厚度用更深一档墨绿、落地阴影带色，否则绿块会「浮在纸上」 */
.entry.primary {
  background: linear-gradient(155deg, #93B6A4 0%, var(--primary) 40%, var(--primary-deep) 100%);
  border-color: rgba(255, 255, 255, .18);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, .34),
    inset -3px 0 0 rgba(0, 0, 0, .1),
    0 5px 0 #3D5649,
    0 16px 24px -14px rgba(61, 86, 73, .8);
}

.entry.primary:active {
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, .22),
    inset -2px 0 0 rgba(0, 0, 0, .12),
    0 2px 0 #38503F,
    0 6px 12px -8px rgba(61, 86, 73, .8);
}

/* 主次拉开（2026-10-18 用户口径）：功能名要「跳出来」，释义要「退回去」。
   v1 是 14 / 11.5 两级只差 2.5px，扫一眼分不出主次。现在 16 / 10.5 差 5.5px，
   再叠一层字重（700 → 800）与色阶（正文色 → 弱化色）。
   ⚠️ 居中后 margin-top: 6px 原为「图标下方留白」（v1 有 .e-ico），现无图标，
   留着会把整块文字压偏下 → 归零，靠 justify-content 居中。 */
.entry .e-t {
  font-size: 16px; font-weight: 800; letter-spacing: .2px;
  line-height: 1.35;
}

.entry .e-s {
  font-size: 10.5px; line-height: 1.5; color: var(--text-faint);
  margin-top: 5px; letter-spacing: .1px;
}

.entry.primary .e-s { opacity: .82; }

/* ---------------------------------------------------------------------
   9. 表单：浅底输入框 + 聚焦光环（比 v1 的纯白 + 边框切换更清楚）
   --------------------------------------------------------------------- */
.field label { font-size: 13px; font-weight: 650; color: var(--text); margin-bottom: 6px; }

.field .hint { font-size: 11.5px; color: var(--text-faint); }

.field input,
.field textarea,
.field select {
  background: var(--bg);
  border: 1px solid var(--line);
  border-radius: 10px;
  padding: 12px 13px;
  font-size: 14.5px;
  transition: border-color .16s, background .16s, box-shadow .16s;
}

.field input:focus,
.field textarea:focus,
.field select:focus {
  background: var(--card);
  border-color: var(--primary);
  box-shadow: 0 0 0 3px rgba(107, 142, 127, .16);
}

.field input::placeholder,
.field textarea::placeholder { color: var(--text-faint); }

/* 原生勾选/单选统一成主色，省掉自绘控件 */
input[type="checkbox"],
input[type="radio"],
input[type="range"] { accent-color: var(--primary); }

/* ---------------------------------------------------------------------
   10. 分段切换（登录/注册、后台标签）
   --------------------------------------------------------------------- */
.seg {
  background: var(--bg-alt);
  border: 1px solid var(--line);
  border-radius: 11px;
  padding: 3px;
  gap: 3px;
}

.seg button {
  border-radius: 8px; font-size: 13px; font-weight: 600;
  color: var(--text-sub);
}

.seg button.on {
  background: var(--card);
  color: var(--primary-deep);
  box-shadow: 0 1px 2px rgba(46, 43, 38, .06);
}

/* ---------------------------------------------------------------------
   11. 标签 chip
   --------------------------------------------------------------------- */
.chip {
  background: var(--bg-alt); color: var(--text-sub);
  border-radius: 6px; padding: 3px 8px;
  font-weight: 600;
}

.chip.green { background: var(--primary-soft); color: var(--primary-deep); }

.chip.orange { background: var(--accent-soft); color: var(--accent-deep); }

.chip.pick {
  border: 1px solid var(--line); background: var(--card);
  border-radius: 999px; padding: 7px 12px; font-size: 12px;
  color: var(--text-sub); font-weight: 500;
}

.chip.pick.on {
  background: var(--primary-soft);
  border-color: var(--primary);
  color: var(--primary-deep);
  font-weight: 700;
}

/* ---------------------------------------------------------------------
   12. 提示块：左侧 3px 色条取代整圈边框
   ⚠️ 这里的 .info/.warn/.danger 三个变体必须**连同 border 一起重写**。
      app.css 里 `.alert.danger { border: 1px solid … }` 特异度（0,2,0）高于
      裸 `.alert`（0,1,0），只写 `.alert { border: none }` 压不住它 ——
      结果是三种提示块长得不一样。
   --------------------------------------------------------------------- */
.alert {
  border-radius: 10px;
  padding: 12px 14px;
  border: none;
  border-left: 3px solid var(--accent);
  background: var(--accent-soft);
  color: var(--accent-deep);
  font-size: 12.5px;
}

.alert.info,
.alert.warn,
.alert.danger {
  border: none;
  border-left: 3px solid var(--accent);
}

.alert.info { background: var(--primary-soft); color: var(--primary-deep); border-left-color: var(--primary); }

.alert.warn { background: var(--warn-soft); color: var(--warn-text); border-left-color: var(--accent); }

.alert.danger { background: var(--danger-soft); color: var(--danger); border-left-color: var(--danger); }

.alert strong { font-size: 12.5px; letter-spacing: .2px; }

/* ---------------------------------------------------------------------
   13. 结果页：结论卡
   --------------------------------------------------------------------- */
.verdict {
  background: linear-gradient(150deg, #7FA593 0%, var(--primary) 40%, var(--primary-deep) 100%);
  border-radius: var(--r-lg);
  padding: 24px 18px;
  box-shadow: 0 20px 40px -28px rgba(79, 110, 96, .95);
}

.verdict .lab { font-size: 10.5px; letter-spacing: 4px; opacity: .8; }

.verdict .who {
  font-family: var(--sans);
  font-size: 24px; font-weight: 700; letter-spacing: .5px;
}

.verdict .pct { font-size: 12.5px; opacity: .92; }

.verdict.danger {
  background: linear-gradient(150deg, #D0745F 0%, var(--danger) 45%, #A8503F 100%);
  box-shadow: 0 20px 40px -28px rgba(168, 80, 63, .9);
}

/* ---------------------------------------------------------------------
   14. 表格（方案执行表）：表头改浅灰底，行分隔更轻
   --------------------------------------------------------------------- */
.tbl-wrap { border-radius: var(--r-md); }

table.tbl th {
  background: var(--bg-alt);
  color: var(--text-sub);
  font-size: 11px;
  letter-spacing: .3px;
  padding: 9px 10px;
  border-bottom: 1px solid var(--line);
}

table.tbl td { border-bottom: 1px solid var(--line-soft); padding: 10px; }

table.tbl tr:nth-child(even) td { background: #FBF9F5; }

table.tbl tr:last-child td { background: transparent; }

/* 档案页「完整时间线」折叠后的内边距（2026-10-18 第四轮）
   .tl 自带 26px 左缩进（留给竖线），套进 .acc .body 会变成双重缩进，
   这里压到 18px；最后一条不再留 margin-bottom，免得折叠块底部空一块。 */
.acc .body.tl-fold { padding-top: 2px; }

.acc .body.tl-fold .tl { padding-left: 18px; }

.acc .body.tl-fold .tl-item:last-child { margin-bottom: 0; }

/* ---------------------------------------------------------------------
   15. 信息行 / 时间线 / 方案分段
   --------------------------------------------------------------------- */
.info-row { border-bottom: 1px solid var(--line-soft); padding: 11px 0; font-size: 13px; }

.info-row .k { color: var(--text-sub); }

.info-row .v { color: var(--text); font-weight: 600; }

.tl::before { width: 1px; background: var(--line); }

.plan-sec { border-left: 2px solid var(--accent); border-radius: 0; padding-left: 12px; }

.plan-sec-title { font-family: var(--sans); font-size: 15px; font-weight: 700; }

.plan-sec-step { color: var(--accent); font-weight: 700; }

.point-item { border-bottom: 1px solid var(--line-soft); }

.rank-row .track { height: 6px; background: var(--bg-alt); }

.rank-row .nm { font-size: 12.5px; }

.rank-row .pc { font-weight: 700; }

/* ---------------------------------------------------------------------
   16. 首页横幅 / 提醒卡 / 找回卡
   --------------------------------------------------------------------- */
/* 横幅回到 v1 的「铜金浅底 + 暖色描边」（v2 曾做成青底） */
.notice-bar {
  background: var(--accent-soft);
  border-bottom: 1px solid #F0E1D2;
}

.notice-bar .nb-text {
  font-family: var(--sans);
  font-size: 12.5px;
  color: var(--accent-deep);
  font-weight: 500;
}

/* ---------------------------------------------------------------------
   10-b. 倡导横幅：文字滚动播放（2026-10-18 第九轮用户口径）
   ---------------------------------------------------------------------
   结构：`.nb-marquee`（裁切窗口）> `.nb-track`（轨道）> **两份** `.nb-text`。
   为什么要两份：只有 `translateX(-50%)` 才能**无缝**，一份滚完第二份刚好顶上来，
   否则每圈结尾都会「闪一下空档」。第二份带 aria-hidden，读屏不会念两遍。
   间距用每个 `.nb-text` 的 padding-right、**不用** track 的 gap：
   这样轨道总宽正好是 `2 ×（文案 + 间距）`，-50% 恰好等于「一份 + 间距」，长期不漂移。
   速度：文案 27 字 ≈ 338px，11s 走完 ≈ 394px ≈ 36px/s —— 比人眼扫读稍快一点，不催。
   ⚠️ 全局 `prefers-reduced-motion` 会把时长压到 .01ms（等于停在终点）：对动效敏感的用户
      该看到静止的文案，这是有意为之，别为它开特例。
   ⚠️ 条幅整体被小开关隐藏时（display:none）动画自动停，不必额外处理。
   --------------------------------------------------------------------- */
.notice-bar .nb-marquee {
  flex: 1;
  min-width: 0;
  overflow: hidden;
  position: relative;
  -webkit-mask-image: linear-gradient(90deg, transparent 0, #000 14px, #000 calc(100% - 14px), transparent 100%);
  mask-image: linear-gradient(90deg, transparent 0, #000 14px, #000 calc(100% - 14px), transparent 100%);
}

.notice-bar .nb-track {
  display: inline-flex;
  white-space: nowrap;
  animation: nb-scroll 11s linear infinite;
}

.notice-bar .nb-track .nb-text {
  flex: none;
  padding-right: 56px;
}

@keyframes nb-scroll {
  from { transform: translateX(0); }
  to { transform: translateX(-50%); }
}

/* 2026-10-18 第二轮：条幅右上角 ✕ 已删（改由「提醒与横幅」里的小开关控制显隐），
   原来的 `.nb-close` 覆盖规则一并去掉，免得以后有人照着它把按钮加回来。 */

.remind-card { border-left: 3px solid var(--accent); }

.remind-card .rc-time { background: var(--accent-soft); color: var(--accent-deep); }

/* 找回流卡（首页内联样式在 v2 副本里已改成主色，这里兜一层圆角与阴影） */
.live-card {
  border-radius: var(--r-lg);
  box-shadow: 0 18px 36px -26px rgba(79, 110, 96, .95);
}

/* ---------------------------------------------------------------------
   17. 时段 / 拍照格 / 空态 / 免责声明
   --------------------------------------------------------------------- */
.slot {
  border: 1px solid var(--line);
  border-radius: 10px;
  font-weight: 600;
}

.slot.on { background: var(--primary); border-color: var(--primary); }

.slot:disabled { background: var(--bg); border-color: var(--line-soft); }

.shot { border: 1px dashed #DDD3C4; border-radius: var(--r-md); }

.shot:active { border-color: var(--primary); background: var(--primary-soft); }

.shot.filled { border-style: solid; border-color: var(--primary); }

.empty { color: var(--text-faint); }

.empty .big { opacity: .3; }

.disclaimer {
  background: var(--bg-alt);
  border-radius: 10px;
  color: var(--text-faint);
  font-size: 11.5px;
}

/* ---------------------------------------------------------------------
   18. 细节：选中色、滚动条、动效收敛
   --------------------------------------------------------------------- */
::selection { background: rgba(107, 142, 127, .22); }

/* ---------------------------------------------------------------------
   19. 单行开关（2026-10-18 第二轮 · 艾灸服务页「首页倡导横幅」）
   ---------------------------------------------------------------------
   app.css 里没有任何「开关」控件，`.rp-switch` 只是 16px 原生 checkbox + 文字。
   这里给一个独立的小拨动开关：**不改 app.css**，只在本覆盖层里新增类名，
   主系统不引用 theme-v2.css，因此不受影响（合并时随覆盖层一起搬走）。
   结构固定为 `<label class="mini-sw"><input type="checkbox"><i></i></label>`，
   input 视觉隐藏但仍可点击（label 包裹）、仍接收键盘焦点。
   --------------------------------------------------------------------- */
.sw-card { padding: 13px 15px; }

.sw-row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  min-height: 24px;
}

.sw-row .sw-label {
  font-family: var(--sans);
  font-size: 14px;
  font-weight: 700;
  color: var(--text);
  letter-spacing: .2px;
}

.mini-sw {
  position: relative;
  flex: none;
  display: inline-flex;
  align-items: center;
  cursor: pointer;
  -webkit-tap-highlight-color: transparent;
}

.mini-sw input {
  position: absolute;
  opacity: 0;
  width: 100%;
  height: 100%;
  margin: 0;
  cursor: pointer;
}

.mini-sw i {
  position: relative;
  display: block;
  width: 40px;
  height: 23px;
  border-radius: 12px;
  background: #DCD5C9;
  transition: background .2s;
}

.mini-sw i::after {
  content: '';
  position: absolute;
  top: 2.5px;
  left: 2.5px;
  width: 18px;
  height: 18px;
  border-radius: 50%;
  background: #fff;
  box-shadow: 0 1px 3px rgba(46, 43, 38, .22);
  transition: transform .2s;
}

.mini-sw input:checked + i { background: var(--primary); }

.mini-sw input:checked + i::after { transform: translateX(17px); }

.mini-sw input:focus-visible + i { box-shadow: 0 0 0 3px rgba(107, 142, 127, .3); }

@media (prefers-reduced-motion: reduce) {
  * { animation-duration: .01ms !important; transition-duration: .01ms !important; }
}
