/* =====================================================================
   Oxymph UI v2 · 组件层（加载顺序：tokens → ios → watch → ui → motion）
   1) 覆盖 v1 基础组件，让全部页面先吃到 v2 token
   2) 新增 v2 组件：大符号 Hero / 封面 Hero / 动作行 / KPI 条 / 文字切换 / 固定底 CTA …
   只作用于 iPhone（选择器都在 #screen 或 iOS 专属类上），不影响手表。
   ===================================================================== */

/* ───────── 页面底：氛围渐变 + 噪点 ───────── */
.layer.root,.scr{background:var(--ambient)}
.layer.sheet .scr{background:linear-gradient(180deg,#E6F6FD 0,var(--c-bg) 320px)}
.noise{opacity:.28}

/* ───────── 卡片：实色白 + 冷调软阴影 ───────── */
.card,.mc,.stat,.metric,.ex,.lrow,.group{box-shadow:var(--e-1)}
.metric{border-radius:var(--r-lg)}
.stat{border-radius:var(--r-lg)}

/* ───────── 文字层级 ───────── */
.lt h2{font-weight:700;letter-spacing:-.7px;color:var(--t1)}
.sec,.lbl{color:var(--t1)}
.cap{color:var(--t3);font-weight:700;letter-spacing:.5px}

/* ───────── 主按钮：纯平实色（Figma Done 按钮），无渐变、无彩色辉光、无顶部高光 ───────── */
.cta{background:var(--c-action);box-shadow:none;font-weight:600;letter-spacing:-.1px}
.cta:active{filter:brightness(.92)}
.cta.orange{background:var(--c-market);box-shadow:none}
.cta.ghost{background:var(--c-surface);color:var(--t1);box-shadow:var(--e-1)}
.cta.line{background:transparent;box-shadow:inset 0 0 0 1.5px currentColor;border:0;color:var(--c-action-ink)}
.cta.red{background:var(--c-err-tint);box-shadow:none;border:0;color:var(--c-err-ink)}
.cta.dis{background:var(--c-hist);color:var(--t3);box-shadow:none}
.pbtn{background:var(--c-action);box-shadow:none}

/* ───────── 选中态：实色青（Figma Tab 选中），无辉光 ───────── */
.chip.on,.seg.pill button.on{background:var(--c-select);box-shadow:none}
.wsel{background:var(--c-select);box-shadow:none}
.chip{box-shadow:var(--e-1)}
/* 动作胶囊（加入 / 关注 / 邀请）：蓝 = 动作；青 .on 只表示「选中」，两者不再混用 */
.chip.go{background:var(--c-action);color:#fff;box-shadow:none}
.seg{background:rgba(18,40,60,.07)}
.seg button.on{box-shadow:0 1px 3px rgba(18,40,60,.12)}

/* ───────── Tab bar：液态玻璃（iOS 26）───────── */
.tabbar.glass{background:var(--lg-fill);backdrop-filter:var(--lg-blur);-webkit-backdrop-filter:var(--lg-blur);
  box-shadow:var(--lg-shadow),var(--lg-rim);border:0}
.tabbar.glass::before{content:"";position:absolute;inset:0;border-radius:inherit;pointer-events:none;
  background:linear-gradient(105deg,rgba(255,255,255,.42) 0%,rgba(255,255,255,0) 22%,rgba(255,255,255,0) 78%,rgba(255,255,255,.22) 100%)}
.tab{z-index:1;color:var(--t1)}
.tab span{font-weight:600}
.tab.on{background:transparent;color:var(--c-action);box-shadow:none}
.tab.on span{font-weight:700}
/* 选中 = 一枚液态玻璃透镜（iOS 26 系统做法），图标与文字用强调色；不是蓝色实心块 */
.tabsel{position:absolute;z-index:0;top:7px;height:52px;border-radius:26px;pointer-events:none;
  width:calc((100% - 14px) / 4);left:calc(7px + (100% - 14px) / 4 * var(--i));
  background:linear-gradient(180deg,rgba(255,255,255,.55),rgba(255,255,255,.18)),rgba(18,40,60,.06);
  backdrop-filter:blur(3px) saturate(180%) brightness(1.04);-webkit-backdrop-filter:blur(3px) saturate(180%) brightness(1.04);
  box-shadow:inset 0 1px 1px rgba(255,255,255,.95),inset 0 0 0 .5px rgba(255,255,255,.75),inset 0 -1.5px 3px rgba(18,40,60,.08),0 4px 12px -6px rgba(18,40,60,.22)}
/* 导航玻璃按钮同一套材质 */
.gbtn.glass,.gtxt.glass{background:var(--lg-fill);backdrop-filter:var(--lg-blur);-webkit-backdrop-filter:var(--lg-blur);box-shadow:var(--lg-shadow),var(--lg-rim)}

/* 开关 */
.tg{background:#E1E6EB}
.tg.on{background:var(--c-select)}

/* ───────── P2：设置类分组 → 单色图标（彩虹瓷贴退场） ───────── */
.group .gr .ri{background:none!important;color:var(--t2)!important;width:24px;margin-left:-2px}
.group .gr .ri svg{width:20px;height:20px}
.gr+.gr::before{left:38px;background:var(--t5)}
.gr .t{color:var(--t1)}
.gr .v{color:var(--t3)}
.sh{color:var(--t3);font-weight:700;font-size:12px;letter-spacing:.6px;text-transform:uppercase;padding:var(--sec-top) 28px var(--s-2)}

/* 列表行 */
.ex,.lrow{border-radius:var(--r-md)}
.tag{background:var(--c-surface-2);color:var(--t2)}

/* 浮层与机身同心 */
.half{border-radius:var(--r-sheet)}
.alert{border-radius:var(--r-xl)}
.toast svg{color:var(--c-good)}

/* =====================================================================
   v2 新组件
   ===================================================================== */

/* 文字切换（≤3 项的筛选，替代分段控件） */
.tsw{display:flex;gap:18px;align-items:center}
.tsw button{position:relative;font-size:var(--fs-call);font-weight:600;color:var(--t3);padding:4px 0;transition:color .2s}
.tsw button.on{color:var(--t1)}
/* 选中圆点：切换时长出来（之前是凭空出现，硬跳一下）。
   曲线不带过冲 —— 1.32 会先胀到 1.05 再缩回去，一个 5px 的点抖一下很显眼 */
.tsw button::after{content:"";position:absolute;left:50%;bottom:-5px;width:5px;height:5px;border-radius:50%;background:var(--c-select);transform:translateX(-50%) scale(.4);opacity:0;transition:opacity .18s,transform .22s cubic-bezier(.2,.9,.3,1)}
.tsw button.on::after{opacity:1;transform:translateX(-50%) scale(1)}

/* 区块标题 */
.sech{display:flex;align-items:baseline;justify-content:space-between;padding:var(--sec-top) var(--gutter) var(--s-3)}
.sech b{font-size:var(--fs-head);font-weight:600;letter-spacing:-.3px;color:var(--t1)}
.sech a,.sech .a{font-size:var(--fs-call);font-weight:500;color:var(--t3);display:flex;align-items:center;gap:2px;cursor:pointer}

/* KPI 条：3 个关键数，数字大、单位小、标签在下 */
.kpis{display:grid;grid-template-columns:repeat(3,1fr);margin:0 var(--gutter);padding:16px 4px;border-radius:var(--r-lg);background:var(--c-surface);box-shadow:var(--e-1)}
.kpi{display:flex;flex-direction:column;align-items:center;gap:3px;position:relative}
.kpi+.kpi::before{content:"";position:absolute;left:0;top:6px;bottom:6px;width:1px;background:var(--t5)}
.kpi b{font-size:var(--fs-title);font-weight:500;letter-spacing:-.5px;font-variant-numeric:tabular-nums;color:var(--t1);line-height:1.1}
.kpi b i{font-style:normal;font-size:13px;font-weight:500;color:var(--t2);margin-left:2px;letter-spacing:0}
.kpi span{font-size:12px;font-weight:600;color:var(--t3)}

/* 封面 Hero（详情页 / 圈子 / 小结）：身份色渐变 + 大字 + 剪影 */
.hcover{position:relative;margin:0 var(--gutter);border-radius:var(--r-xl);padding:20px;overflow:hidden;color:#fff;min-height:168px;display:flex;flex-direction:column;justify-content:flex-end;
  box-shadow:0 18px 40px -18px var(--cv-sh,rgba(0,115,217,.55))}
.hcover::before{content:"";position:absolute;inset:0;background:radial-gradient(120% 90% at 100% 0%,rgba(255,255,255,.35),transparent 55%);pointer-events:none}
.hcover .art{position:absolute;right:-18px;top:-10px;width:170px;height:170px;opacity:.22;color:#fff}
.hcover .art svg{width:100%;height:100%}
.hcover .eyebrow{font-size:12px;font-weight:700;letter-spacing:.5px;opacity:.82}
.hcover h3{font-size:28px;font-weight:700;letter-spacing:-.5px;line-height:1.15;margin-top:4px;position:relative}
.hcover .meta{font-size:13px;font-weight:500;opacity:.85;margin-top:6px;position:relative}
.hcover .chips2{display:flex;gap:6px;margin-top:12px;position:relative;flex-wrap:wrap}
.hcover .chips2 span{height:24px;padding:0 10px;border-radius:12px;background:rgba(255,255,255,.22);font-size:12px;font-weight:600;display:inline-flex;align-items:center;gap:4px;backdrop-filter:blur(6px)}

/* ───────── 消息通知（第 45 轮）─────────
   一行 = 瓷贴图标 + 两行文字 + 时间。未读 = 行动蓝瓷贴 + 主文字 600；
   已读 = 中性瓷贴 + 文字降一级 —— 用「字重 + 透明度」说"只亮现在"，不再加第二套颜色（彩色圆点） */
.ntcard{margin:0 var(--gutter);border-radius:var(--r-lg);background:var(--c-surface);box-shadow:var(--e-1);padding:4px 0;overflow:hidden}
.ntf{display:flex;align-items:flex-start;gap:12px;width:100%;padding:11px 16px;text-align:left;position:relative}
.ntf+.ntf::before{content:"";position:absolute;top:0;left:16px;right:16px;height:1px;background:var(--t5)}
.ntf .ic{flex:0 0 auto;width:36px;height:36px;border-radius:var(--r-sm);display:flex;align-items:center;justify-content:center;background:var(--c-surface-2);color:var(--t2)}
.ntf .ic svg{width:19px;height:19px}
.ntf .bd{flex:1;min-width:0}
.ntf .bd .nm{display:block;font-size:var(--fs-call);font-weight:600;line-height:1.35;color:var(--t1)}
.ntf .bd .sb{display:block;font-size:12px;font-weight:500;line-height:1.35;color:var(--t3);margin-top:3px}
.ntf time{flex:0 0 auto;font-size:12px;font-weight:600;color:var(--t3);margin-top:2px}
.ntf.read .bd .nm{font-weight:500;color:var(--t2)}
/* 待处理：操作内联在卡里（不用点进去再决定） */
.ntodo{margin:0 var(--gutter) 12px;padding:14px 16px;border-radius:var(--r-lg);background:var(--c-surface);box-shadow:var(--e-1)}
.ntodo .ntf{padding:0}
.ntodo .ntf+.ntf::before{display:none}
.ntodo .acts{display:flex;gap:8px;margin-top:12px}

/* 巨大结果数 */
/* 训练详情抬头：这一场是谁（两行小字，训练日色只在圆点上）—— 主角让给下面的 .bignum */
.shd{display:flex;flex-direction:column;align-items:center;text-align:center;margin-top:4px}
.shd b{display:flex;align-items:center;gap:8px;font-size:20px;font-weight:600;letter-spacing:-.3px;color:var(--t1)}
.shd b i{width:10px;height:10px;border-radius:50%;flex:0 0 auto}
.shd b span{font-size:15px;font-weight:500;color:var(--t3);letter-spacing:0}
.shd small{font-size:13px;font-weight:500;color:var(--t3);margin-top:4px}
.bignum{display:flex;flex-direction:column;align-items:center;text-align:center}
.bignum .k{font-size:var(--fs-foot);font-weight:600;color:var(--t3);letter-spacing:.2px}
.bignum b{font-size:var(--fs-hero);font-weight:500;letter-spacing:-1.4px;line-height:1.05;font-variant-numeric:tabular-nums;color:var(--t1)}
.bignum b i{font-style:normal;font-size:18px;font-weight:500;color:var(--t2);margin-left:4px;letter-spacing:0}
.bignum.xl b{font-size:var(--fs-display);font-weight:400;letter-spacing:-2px}

/* 动作行（训练详情 / 小结 / 创作者模板） */
.tracks{margin:0 var(--gutter);border-radius:var(--r-lg);background:var(--c-surface);box-shadow:var(--e-1);padding:6px 0;overflow:hidden}
.trk{display:flex;align-items:center;gap:12px;width:100%;padding:11px 16px;text-align:left;position:relative}
.trk+.trk::before{content:"";position:absolute;top:0;left:52px;right:16px;height:1px;background:var(--t5)}
.trk .no{width:24px;font-size:13px;font-weight:700;color:var(--t4);font-variant-numeric:tabular-nums;text-align:center;flex:0 0 auto}
.trk .fig{width:26px;height:26px;flex:0 0 auto}
.trk .nm{font-size:var(--fs-body);font-weight:500;color:var(--t1);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.trk .sub{font-size:12px;font-weight:500;color:var(--t3);margin-top:2px}
.trk .best{margin-left:auto;text-align:right;flex:0 0 auto}
.trk .best b{font-size:17px;font-weight:600;letter-spacing:-.3px;font-variant-numeric:tabular-nums;color:var(--t1)}
.trk .best b i{font-style:normal;font-size:12px;font-weight:500;color:var(--t2);margin:0 2px}
.trk .best span{display:block;font-size:11px;font-weight:600;color:var(--t3);margin-top:1px}
.trk.pr .no{color:var(--c-orm)}
.trk.pb+.trk.pb::before{left:16px}
.trk .prb{display:inline-flex;align-items:center;gap:3px;height:18px;padding:0 6px;border-radius:9px;background:var(--c-orm-tint);color:var(--c-orm);font-size:10px;font-weight:800;margin-left:6px;vertical-align:2px}

/* 胶囊徽记 */
.pill2{display:inline-flex;align-items:center;gap:5px;height:28px;padding:0 12px;border-radius:14px;font-size:13px;font-weight:600;background:var(--c-surface);box-shadow:var(--e-1);color:var(--t1)}
.pill2 svg{width:15px;height:15px}

/* 特性卡（设置页的会员卡 / 创作者卡） */
.feat{display:flex;align-items:center;gap:14px;margin:12px var(--gutter) 0;padding:16px;border-radius:var(--r-xl);width:calc(100% - 40px);text-align:left;position:relative;overflow:hidden}
.feat .fi{width:44px;height:44px;border-radius:var(--r-sm);display:flex;align-items:center;justify-content:center;flex:0 0 auto}
.feat .fi svg{width:22px;height:22px}
.feat b{font-size:var(--fs-body);font-weight:600;display:block}
.feat small{display:block;font-size:12px;font-weight:500;margin-top:2px}

/* 大符号 Hero（Figma Plan / Template 的 72pt 剪贴板范式：符号颜色 = 状态） */
.symhero{display:flex;flex-direction:column;align-items:center;text-align:center;padding:8px 32px 0}
.symhero .sym{width:76px;height:76px;color:var(--c-action-hi)}
.symhero .sym svg{width:100%;height:100%}
.symhero h3{font-size:28px;font-weight:700;letter-spacing:-.5px;margin-top:14px;color:var(--t1)}
.symhero p{font-size:15px;font-weight:500;color:var(--t2);margin-top:6px;line-height:1.5}
.symhero .st{display:inline-flex;align-items:center;gap:5px;height:26px;padding:0 11px;border-radius:13px;margin-top:12px;font-size:12px;font-weight:700}

/* 价格卡 */
.plans2{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin:0 var(--gutter)}
.price{position:relative;border-radius:var(--r-lg);background:var(--c-surface);padding:16px;text-align:left;box-shadow:var(--e-1);transition:box-shadow .2s,transform .16s}
.price.on{box-shadow:inset 0 0 0 2px var(--c-action),var(--e-1)}
.price .pn{font-size:13px;font-weight:600;color:var(--t2)}
.price .pp{font-size:26px;font-weight:600;letter-spacing:-.6px;margin-top:6px;font-variant-numeric:tabular-nums;color:var(--t1)}
.price .pp i{font-style:normal;font-size:13px;font-weight:500;color:var(--t2);margin-left:2px}
.price .pd{font-size:12px;font-weight:500;color:var(--t3);margin-top:2px}
.price .save{position:absolute;top:-9px;right:12px;height:20px;padding:0 8px;border-radius:10px;background:var(--c-market);color:#fff;font-size:11px;font-weight:800;display:flex;align-items:center}
.price .rd{position:absolute;top:16px;right:16px;width:20px;height:20px;border-radius:50%;box-shadow:inset 0 0 0 1.5px var(--t4)}
.price.on .rd{box-shadow:inset 0 0 0 6px var(--c-action)}

/* 权益行：图形用对应身份色 */
.perk{display:flex;gap:14px;align-items:flex-start;padding:14px 0}
.perk+.perk{border-top:1px solid var(--t5)}
.perk .pi{width:40px;height:40px;border-radius:var(--r-sm);display:flex;align-items:center;justify-content:center;flex:0 0 auto}
.perk .pi svg{width:21px;height:21px}
.perk b{font-size:var(--fs-body);font-weight:600;color:var(--t1);display:block}
.perk span{font-size:13px;font-weight:500;color:var(--t2);line-height:1.45;display:block;margin-top:2px}

/* 固定底 CTA（背后白色渐隐） */
.dock{position:absolute;left:0;right:0;bottom:0;z-index:60;padding:28px var(--gutter) 34px;display:flex;gap:10px;
  background:linear-gradient(180deg,rgba(240,250,254,0),rgba(240,250,254,.92) 38%,var(--c-bg))}
.dock .cta{flex:1}
.dock .cta.ghost{flex:0 0 auto;padding:0 22px;width:auto}

/* 反馈胶囊组（短了 / 刚好 / 长了） */
.fb3{display:flex;gap:6px}
.fb3 button{height:30px;padding:0 12px;border-radius:15px;background:var(--c-surface-2);font-size:13px;font-weight:600;color:var(--t2);transition:.18s}
.fb3 button.on{background:var(--c-select-tint);color:var(--c-select);box-shadow:inset 0 0 0 1.5px var(--c-select)}
.fb3 button.on.ok{background:var(--c-good-tint);color:var(--c-good-ink);box-shadow:inset 0 0 0 1.5px var(--c-good)}

/* 搭子圈卡（横滑）：白卡；颜色只在本周进度条 */
.ccov{flex:0 0 auto;width:220px;height:152px;border-radius:var(--r-xl);padding:16px;position:relative;text-align:left;display:flex;flex-direction:column;justify-content:space-between;background:var(--c-surface);box-shadow:var(--e-1)}
.ccov b{font-size:17px;font-weight:600;letter-spacing:-.2px;line-height:1.25;color:var(--t1);display:block}
.ccov small{font-size:12px;font-weight:500;color:var(--t3);display:block;margin-top:3px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ccov .ft{display:flex;align-items:center;justify-content:space-between}
.ccov .rk{font-size:15px;font-weight:700;color:var(--c-action-ink);font-variant-numeric:tabular-nums}
.ccov .wk{display:flex;align-items:center;gap:4px;margin-top:10px}
.ccov .wk i{flex:1;height:5px;border-radius:3px;background:var(--c-hist)}
.ccov .wk i.on{background:var(--c-action-hi)}
.ccov .wk span{font-size:11px;font-weight:600;color:var(--t3);margin-left:6px;white-space:nowrap}
.ccov.add{width:120px;background:transparent;box-shadow:none;border:1.5px dashed rgba(18,40,60,.16);color:var(--t2);align-items:center;justify-content:center;gap:8px}

/* 头像叠 */
.stack{display:flex}
.stack .avatar{box-shadow:0 0 0 2px var(--stk-ring,#fff)}
.stack .avatar+.avatar,.stack>span+span,.stack>.avatar+span{margin-left:-9px}
.stack>span>.avatar{box-shadow:0 0 0 2px var(--stk-ring,#fff)}

/* 动态卡（Feed） */
.feed{margin:0 var(--gutter) 12px;padding:16px;border-radius:var(--r-lg);background:var(--c-surface);box-shadow:var(--e-1)}
.feed .hd{display:flex;align-items:center;gap:10px}
.feed .hd b{font-size:var(--fs-body);font-weight:600;color:var(--t1)}
.feed .hd small{display:block;font-size:12px;font-weight:500;color:var(--t3);margin-top:1px}
.feed .hd time{margin-left:auto;font-size:12px;font-weight:600;color:var(--t4)}
.feed .mx{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-top:12px}
.feed .mx div{background:var(--c-surface-2);border-radius:var(--r-sm);padding:10px 12px}
.feed .mx span{display:block;font-size:10.5px;font-weight:700;color:var(--t3);letter-spacing:.4px}
.feed .mx b{font-size:20px;font-weight:500;letter-spacing:-.4px;font-variant-numeric:tabular-nums;color:var(--t1)}
.feed .mx b i{font-style:normal;font-size:12px;color:var(--t2);margin-left:1px}
.feed .acts{display:flex;gap:8px;margin-top:12px}
.feed .acts button{height:34px;padding:0 14px;border-radius:17px;background:var(--c-surface-2);font-size:14px;font-weight:600;color:var(--t1);display:flex;align-items:center;gap:6px}
.feed .acts button svg{width:15px;height:15px}
.feed .acts button.on{background:var(--c-pink-tint);color:var(--c-pink-deep)}
.feed .acts button.sel{background:var(--c-action-tint);color:var(--c-action-ink)}
.feed .msg{font-size:15px;line-height:1.5;color:var(--t1);margin-top:12px}
.feed .cap{display:block;width:100%;margin-top:12px;padding:10px 12px;border-radius:var(--r-sm);background:var(--c-surface-2);font-size:14px;color:var(--t3);text-align:left}
.feed .cmts{margin-top:12px;padding-top:12px;border-top:1px solid var(--t5)}

/* 实时卡（正在练） */
/* 第 29 轮（用户：改成 1:1 后波形被挤扁，还不如之前的高比例）→ 卡整体放大到 156（仍 1:1），
   波形 22 高、满宽铺开，上方保证 ≥14 的留白：头像 / 名字 / 状态是一组，波形是另一组，中间要有呼吸 */
.lvc{flex:0 0 auto;width:156px;aspect-ratio:1/1;padding:16px;display:flex;flex-direction:column;border-radius:var(--r-lg);background:var(--c-surface);box-shadow:var(--e-1);text-align:left}
.lvc b{display:block;font-size:15px;font-weight:600;margin-top:10px;color:var(--t1)}
.lvc small{display:block;font-size:12px;font-weight:500;color:var(--t3);margin-top:1px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.lvc .dot{position:absolute;right:-1px;bottom:-1px;width:13px;height:13px;border-radius:50%;background:var(--c-good);box-shadow:0 0 0 2.5px #fff}
.lvc .wave{display:flex;align-items:center;justify-content:space-between;height:22px;margin-top:auto;flex:none}
.lvc>small{margin-bottom:14px}
.lvc .wave i{width:3px;border-radius:2px;background:var(--c-drift);animation:wv 1.1s ease-in-out infinite}
@keyframes wv{0%,100%{transform:scaleY(.45)}50%{transform:scaleY(1)}}
/* 「开始练」排尾卡：与人物卡同宽同高，但读作按钮 —— 浅蓝实底、无投影、无头像位，▶ 裸字形居中（N5 纯平）
   没人在练时 .wide：整宽横条，左文案右 ▶（▶ 在右侧，不会被读成头像） */
.lvgo{flex:0 0 auto;width:156px;aspect-ratio:1/1;border-radius:var(--r-lg);background:var(--c-action-tint);color:var(--c-action-ink);
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;text-align:center;padding:14px}
.lvgo .gi{width:28px;height:28px;margin-bottom:8px}
.lvgo b{font-size:var(--fs-body);font-weight:600}
.lvgo small{font-size:12px;font-weight:500;color:var(--t3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}
.lvgo.wide{flex:1 1 auto;width:auto;flex-direction:row;justify-content:space-between;text-align:left;padding:16px 16px 16px 20px;gap:12px}
.lvgo.wide b{color:var(--t1)}
.lvgo.wide .gp{width:48px;height:48px;flex:0 0 auto;border-radius:50%;background:var(--blue);color:#fff;display:flex;align-items:center;justify-content:center}

/* 区块里的细标签 */
.eyebrow{font-size:var(--fs-cap);font-weight:700;letter-spacing:.5px;color:var(--t3);text-transform:uppercase}

/* 设置 Hero 柔光 */
.halo{position:relative}
.halo::before{content:"";position:absolute;left:50%;top:50%;width:190px;height:190px;transform:translate(-50%,-52%);border-radius:50%;
  background:radial-gradient(circle,rgba(255,119,162,.32),rgba(255,119,162,0) 68%);pointer-events:none;z-index:-1}

/* Recap 卡 */
.recap{margin:0 var(--gutter);padding:18px 20px;border-radius:var(--r-xl);background:var(--c-surface);box-shadow:var(--e-1)}
.recap .rbar{display:flex;justify-content:space-between;align-items:flex-end;height:48px;margin-top:16px}
.recap .rbar i{width:12px;border-radius:6px;background:var(--c-hist)}
.recap .rbar i.on{background:var(--c-volume)}
.recap .ln{display:flex;gap:14px;margin-top:12px;font-size:13px;font-weight:600;color:var(--t2)}
.recap .ln b{color:var(--t1);font-weight:600;font-variant-numeric:tabular-nums}

/* 应用图标（白底图标需要一圈细描边才能在浅底上立住） */
.appicon{display:block;flex:0 0 auto;object-fit:cover;background:#fff;box-shadow:0 0 0 .5px rgba(18,40,60,.14),0 10px 24px -12px rgba(18,40,60,.28)}

/* 搭子圈本周看板：成员 × 7 天打卡点阵（Figma 个人页 Activity 绿点语言），今天一列高亮 */
.cboard{position:relative;background:var(--c-surface);border-radius:var(--r-xl);box-shadow:var(--e-1);padding:14px 0 8px;overflow:hidden;
  --cb-who:112px;--cb-n:44px;--cb-cell:26px}
.cb-h{display:flex;justify-content:space-between;align-items:baseline;padding:0 18px 6px}
.cb-r{position:relative;z-index:1;display:grid;grid-template-columns:var(--cb-who) 1fr var(--cb-n);align-items:center;width:100%;padding:7px 14px 7px 16px;text-align:left}
.cb-r.me{background:rgba(0,115,217,.06)}
.cb-cols{padding-top:2px;padding-bottom:2px}
.cb-who{display:flex;align-items:center;gap:8px;min-width:0}
.cb-who .nm{font-size:14px;font-weight:600;color:var(--t1);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.cb-g{display:grid;grid-template-columns:repeat(7,1fr);justify-items:center}
.cb-g b{font-size:11px;font-weight:600;color:var(--t3)}
.cb-g b.now{color:var(--c-select);font-weight:800}
.cb-d{width:18px;height:18px;border-radius:50%;background:var(--c-heat-0);display:block}
.cb-d.on{background:var(--c-heat-3)}
.cb-d.fut{background:transparent;box-shadow:inset 0 0 0 1.5px var(--c-heat-0)}
.cb-d.live{background:var(--c-heat-3);box-shadow:0 0 0 0 rgba(32,196,95,.5);animation:cbLive 1.6s ease-out infinite}
@keyframes cbLive{0%{box-shadow:0 0 0 0 rgba(32,196,95,.45)}100%{box-shadow:0 0 0 9px rgba(32,196,95,0)}}
.cb-n{text-align:right;font-size:12px;font-weight:600;color:var(--t3);font-variant-numeric:tabular-nums}
.cb-n b{font-size:17px;font-weight:600;color:var(--t1)}
/* 今天这一列的竖向浅带 */
.cb-col{position:absolute;z-index:0;top:30px;bottom:6px;border-radius:12px;background:var(--c-select-tint);opacity:.7;pointer-events:none;
  width:calc((100% - var(--cb-who) - var(--cb-n) - 30px) / 7);left:calc(16px + var(--cb-who) + (100% - var(--cb-who) - var(--cb-n) - 30px) / 7 * var(--k))}

/* ---------- 训练卡 .sesc（最近训练横滑 / 训练记录网格共用） ----------
   一张卡 = 一次训练的缩略图：名字 + 日期 / 波形（每一组）/ 主数字 / 注脚
   只亮现在：.lit 的波形用训练日身份色 --dc，其余历史灰 */
.sesh{padding-bottom:6px;scroll-snap-type:x mandatory;scroll-padding:0 20px}
.sesh .sesc{width:152px;scroll-snap-align:start}
.sesg{display:grid;grid-template-columns:1fr 1fr;gap:12px;padding:0 var(--gutter)}
.sesc{flex:0 0 auto;display:flex;flex-direction:column;align-items:stretch;text-align:left;padding:14px 14px 13px;border-radius:var(--r-lg);background:var(--c-surface);box-shadow:var(--e-1);min-width:0}
.sesc .sc-h{display:flex;align-items:baseline;justify-content:space-between;gap:6px}
.sesc .sc-h b{font-size:15px;font-weight:600;letter-spacing:-.2px;color:var(--t1);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sesc .sc-h time{font-size:12px;font-weight:600;color:var(--t3);white-space:nowrap;flex:0 0 auto}
.sesc.lit .sc-h time{color:var(--c-action-ink)}
.sesc small{font-size:11px;font-weight:500;color:var(--t3);margin-top:1px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sesc .swv{display:flex;align-items:flex-end;gap:5px;height:34px;margin:auto 0 12px;padding-top:14px;box-sizing:content-box}
.sesc .swv .g{display:flex;align-items:flex-end;gap:2px;height:100%}
.sesc .swv i{width:4px;border-radius:2px;background:var(--c-hist)}
.sesc.lit .swv i{background:var(--dc)}
.sesc .sc-n{font-size:24px;font-weight:600;letter-spacing:-.6px;line-height:1.05;font-variant-numeric:tabular-nums;color:var(--t1)}
.sesc .sc-n i{font-style:normal;font-size:13px;font-weight:500;color:var(--t3);margin-left:2px;letter-spacing:0}
.sesc .sc-f{display:flex;align-items:center;gap:6px;margin-top:5px;font-size:12px;font-weight:500;color:var(--t3);white-space:nowrap}
.sesc .sc-f em{margin-left:auto;display:inline-flex;align-items:center;gap:1px;font-style:normal;font-weight:700;color:var(--c-orm)}
.sesc .sc-f em svg{width:14px;height:14px}

/* ---------- 模板行 .trow（搜索结果 / 我的模板） ---------- */
.trow{display:flex;align-items:center;gap:12px;width:calc(100% - 40px);margin:0 var(--gutter) 10px;min-height:64px;padding:10px 14px;border-radius:var(--r-md);background:var(--c-surface);box-shadow:var(--e-1);text-align:left}
.trow .cv{width:48px;height:48px;border-radius:14px;flex:0 0 auto}
.trow b{font-size:16px;font-weight:600;letter-spacing:-.2px;color:var(--t1);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block}
.trow small{display:block;font-size:12px;font-weight:500;color:var(--t3);margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.trow .rt,.trow .pend{margin-left:auto;flex:0 0 auto;text-align:right;font-size:14px;font-weight:700;color:var(--c-market-hi);font-variant-numeric:tabular-nums}
.trow .rt i{display:block;font-style:normal;font-size:11px;font-weight:600;color:var(--t3);margin-top:2px}
.trow .pend{font-size:11px;font-weight:700;color:var(--c-warn);background:var(--c-warn-tint);border-radius:var(--r-xs);padding:4px 8px}
.chips .shl{font-size:13px;font-weight:600;color:var(--t2);margin-left:var(--gutter);align-self:center;flex:0 0 auto}

/* ---------- 计划卡 .plc（Schedules · 我的计划，两列网格） ----------
   Figma 514:1934：白卡 r30 + 描边胶囊 + 封面大字 + ▶ 圆钮，标题注脚在卡下方 */
.plg{display:grid;grid-template-columns:1fr 1fr;gap:18px 12px;padding:0 var(--gutter)}
.plc{position:relative;min-width:0;container-type:inline-size}
.plc .cov{position:relative;display:flex;flex-direction:column;width:100%;aspect-ratio:1/1;padding:14px;border-radius:var(--r-xl);background:var(--c-surface);box-shadow:var(--e-1);text-align:left;overflow:hidden}
.plc .cov .goal{align-self:flex-start;height:22px;padding:0 9px;border-radius:11px;box-shadow:inset 0 0 0 1px var(--t4);font-size:11px;font-weight:600;color:var(--t2);display:flex;align-items:center;white-space:nowrap}
.plc .cov b{margin-top:auto;margin-bottom:12px;padding-right:46px;font-size:22px;font-weight:700;letter-spacing:-.6px;line-height:1.08;color:var(--t1);display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden;word-break:break-word}
.plc .cov .segs{display:flex;gap:3px;height:6px}
.plc .cov .segs i{flex:1;border-radius:3px}
.plc .pp{position:absolute;right:12px;top:calc(100cqw - 72px);width:40px;height:40px;border-radius:50%;display:flex;align-items:center;justify-content:center;background:var(--c-surface-2);color:var(--t1);box-shadow:none}
.plc .pp svg{width:16px;height:16px;margin-left:2px}
.plc .pp.on{background:var(--c-action);color:#fff}
.plc .pcap{display:flex;align-items:flex-start;gap:4px;margin-top:10px;padding:0 4px}
.plc .pcap b{display:block;font-size:14px;font-weight:600;color:var(--t1);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.plc .pcap small em{font-style:normal;font-weight:700;color:var(--c-action-ink)}
.plc .pcap small{display:block;font-size:12px;font-weight:500;color:var(--t3);margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.plc .pcap .mo{flex:0 0 auto;width:28px;height:28px;margin:-4px -6px 0 0;display:flex;align-items:center;justify-content:center;color:var(--t3)}
.plc .pcap .mo svg{width:18px;height:18px}
.plc .cov.add{align-items:center;justify-content:center;gap:8px;background:transparent;box-shadow:none;border:1.5px dashed rgba(18,40,60,.16);color:var(--t2);font-size:14px;font-weight:600}

/* ---------- 我的 v2（.pfh 身份 / .pff 关注行 / .pfa 操作 / .bdg 徽章 / .pact 活跃度） ----------
   与其他 Tab 同调：冰蓝氛围底 + 白卡；身份色只剩头像后一圈柔光（同设置页 Hero） */
.pfh{display:flex;align-items:center;gap:18px;padding:6px var(--gutter) 0}
.pfh .av{position:relative;isolation:isolate;flex:0 0 auto;border-radius:50%}
.pfh .av::before{content:"";position:absolute;left:50%;top:50%;width:156px;height:156px;transform:translate(-50%,-50%);border-radius:50%;background:radial-gradient(circle,var(--hc),transparent 66%);z-index:-1;pointer-events:none}
.pfh .av .avatar{box-shadow:0 0 0 4px #fff,0 12px 26px -12px rgba(18,40,60,.32)}
.pfh .pnm{font-size:30px;font-weight:700;letter-spacing:-.6px;line-height:1.1;color:var(--t1);max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.pfh .idt{display:inline-flex;align-items:center;gap:4px;height:24px;padding:0 10px 0 8px;margin-top:8px;border-radius:12px;background:var(--c-surface);box-shadow:inset 0 0 0 1px var(--t5);font-size:12px;font-weight:600;color:var(--t2);white-space:nowrap}
.pfh .idt svg{width:13px;height:13px;color:var(--ic)}
.pff{display:flex;gap:20px;padding:18px var(--gutter) 0;font-size:13px;font-weight:500;color:var(--t3)}
.pff > *{display:flex;align-items:baseline}
.pff b{font-size:17px;font-weight:600;color:var(--t1);margin-right:4px;font-variant-numeric:tabular-nums}
.pfa{display:flex;gap:10px;padding:16px var(--gutter) 0}
.pfa button{flex:1;height:42px;border-radius:21px;background:var(--c-surface);box-shadow:var(--e-1);font-size:14px;font-weight:600;color:var(--t1);display:flex;align-items:center;justify-content:center;gap:6px}
.pfa button svg{width:15px;height:15px;color:var(--t2)}
.pfa button.pri{background:var(--c-action);color:#fff;box-shadow:none}
.pfa button.pri svg{color:#fff}
.bdg{margin:0 var(--gutter);padding:16px 4px 14px;border-radius:var(--r-lg);background:var(--c-surface);box-shadow:var(--e-1);display:grid;grid-template-columns:repeat(4,1fr)}
.bdg .bi{display:flex;flex-direction:column;align-items:center;gap:8px;min-width:0;font-size:11px;font-weight:600;color:var(--t2);text-align:center}
.bdg .bi > span:last-child{max-width:100%;padding:0 4px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.bdg .more{width:56px;height:56px;border-radius:50%;border:1.5px dashed rgba(18,40,60,.16);display:flex;align-items:center;justify-content:center;font-size:14px;font-weight:700;color:var(--t3)}
.pact{margin:0 var(--gutter);padding:16px 18px 16px 16px;border-radius:var(--r-lg);background:var(--c-surface);box-shadow:var(--e-1);display:flex;gap:14px;align-items:stretch}
.pact .hm{display:grid}
.pact .hm i{display:block;border-radius:50%}
.pact .hwd{display:grid;grid-template-columns:repeat(7,18px);gap:5px;margin-top:6px}
.pact .hwd span{font-size:9px;font-weight:600;color:var(--t3);text-align:center}
.pact .pst{flex:1;min-width:0;display:flex;flex-direction:column;align-items:flex-end;text-align:right}
.pact .pst .k{font-size:12px;font-weight:600;color:var(--t3)}
.pact .pst b{font-size:36px;font-weight:600;letter-spacing:-1px;line-height:1.05;margin-top:4px;color:var(--t1);font-variant-numeric:tabular-nums}
.pact .pst b i{font-style:normal;font-size:14px;font-weight:500;color:var(--t3);margin-left:3px;letter-spacing:0}
.pact .pst small{font-size:12px;font-weight:600;color:var(--c-good-ink);margin-top:4px;white-space:nowrap}
.pact .pst .lg{margin-top:auto;display:flex;align-items:center;gap:4px;font-size:10px;font-weight:600;color:var(--t3)}
.pact .pst .lg i{width:10px;height:10px;border-radius:50%}

/* ===== 训练页心率（照代码 OHeartRateBadge：0.6s easeInOut 往返脉动；节点常驻，不随秒重启） ===== */
.hglow{position:absolute;inset:0;border-radius:50%;background:radial-gradient(circle,color-mix(in srgb,var(--c-hr) 26%,transparent),transparent 70%);animation:hglow 1.2s ease-in-out infinite}
svg.hbeat{animation:hbeat .6s ease-in-out infinite alternate;transform-origin:50% 55%}
@keyframes hbeat{from{transform:scale(.85)}to{transform:scale(1)}}
@keyframes hglow{0%,100%{opacity:.55;transform:scale(.92)}50%{opacity:1;transform:scale(1.04)}}
/* 无手表热身：呼吸节奏引导圈（代码 WarmupPacer，9s 一个周期，纯引导不是数据） */
.pacer{position:relative;height:220px;display:flex;align-items:center;justify-content:center;margin:20px 0 8px}
.pacer i{position:absolute;border-radius:50%;border:1.5px solid var(--c-action);animation:pacer 9s ease-in-out infinite}
.pacer i:nth-child(1){width:96px;height:96px;opacity:.3}
.pacer i:nth-child(2){width:130px;height:130px;opacity:.21}
.pacer i:nth-child(3){width:164px;height:164px;opacity:.12}
.pacer span{position:relative;display:flex;flex-direction:column;align-items:center;gap:5px}
.pacer b{font-size:15px;font-weight:600;color:var(--c-action)}
.pacer small{font-size:11px;color:var(--t3)}
@keyframes pacer{0%,100%{transform:scale(1)}50%{transform:scale(1.36)}}

/* ===== 数据分析页（间歇漂移 / 动作质量）通用 ===== */
.card.an{margin:0 20px;padding:16px}
.an-p{font-size:12.5px;line-height:1.6;color:var(--t2);margin-top:10px}
.an-p b{color:var(--t1);font-weight:600}
.an-lg{font-size:12px;font-weight:600;color:var(--t3)}
.an-x{justify-content:space-between;padding:4px 8px 0;font-size:10px;font-weight:600;color:var(--t3)}
.an-x span.on{color:var(--c-quality)}
/* 横向瀑布 */
.wf{display:flex;flex-direction:column;gap:9px}
.wf-r{display:grid;grid-template-columns:104px 1fr 50px;align-items:center;gap:10px}
.wf-t{font-size:12.5px;font-weight:600;color:var(--t2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.wf-k{position:relative;height:14px;border-radius:7px;background:var(--c-surface-2)}
.wf-b{position:absolute;top:0;bottom:0;border-radius:7px}
.wf-b.base{background:var(--c-hist-ink)}
.wf-b.up{background:var(--c-drift);opacity:.85}
.wf-b.dn{background:var(--c-hist-ink);opacity:.7}
.wf-b.rec{background:var(--c-ink);opacity:.72}
.wf-b.act{background:var(--c-drift)}
.wf-v{font-size:13px;font-weight:600;text-align:right;font-variant-numeric:tabular-nums;color:var(--t1)}
.wf-sum{padding-top:9px;border-top:1px solid var(--c-line)}
.wf-sum + .wf-sum{padding-top:0;border-top:0}
.wf-sum .wf-t{color:var(--t1)}
/* 评价条 */
.rt-s{display:grid;grid-template-columns:repeat(8,1fr);gap:4px}
.rt-c{display:flex;flex-direction:column;align-items:center;gap:5px}
.rt-c b{width:100%;height:28px;border-radius:9px;background:var(--c-surface-2);display:flex;align-items:center;justify-content:center;font-size:11px;font-weight:600;color:var(--t3)}
.rt-c.ok b{background:var(--c-drift-tint);color:var(--c-drift)}
.rt-c i{font-style:normal;font-size:9.5px;font-weight:600;color:var(--t3)}
/* 两种力竭仪表 */
.mtr + .mtr{margin-top:18px}
.mtr-h{display:flex;align-items:flex-end;justify-content:space-between;gap:10px}
.mtr-h span{display:flex;flex-direction:column;gap:2px}
.mtr-h span b{font-size:15px;font-weight:600}
.mtr-h span i{font-style:normal;font-size:12px;color:var(--t3)}
.mtr-v{font-size:26px;font-weight:600;letter-spacing:-.5px;font-variant-numeric:tabular-nums;line-height:1}
.mtr-v small{font-size:13px;font-weight:600;margin-left:1px}
.mtr-k{position:relative;height:10px;border-radius:5px;background:var(--c-surface-2);margin:10px 0 22px}
.mtr-k > i{position:absolute;left:0;top:0;bottom:0;border-radius:5px}
.mtr-k em{position:absolute;top:-3px;bottom:-3px;width:2px;margin-left:-1px;background:rgba(18,28,38,.25);border-radius:1px}
.mtr-k em span{position:absolute;top:18px;left:50%;transform:translateX(-50%);font-style:normal;font-size:10px;font-weight:600;color:var(--t3);white-space:nowrap}
/* 按动作 */
.qx{display:flex;align-items:center;gap:10px;padding:11px 0}
.qx + .qx{border-top:1px solid var(--c-line)}
.qx-f{width:26px;height:26px;flex:0 0 auto}
.qx-n{flex:1;min-width:0;display:flex;flex-direction:column;font-size:15px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.qx-n i{font-style:normal;font-size:12px;font-weight:500;color:var(--t3)}
.qx-c{width:90px;flex:0 0 auto}
.qx-v{width:30px;text-align:right;font-size:18px;font-weight:600;font-variant-numeric:tabular-nums}
/* 训练详情 · 质量节 */
.qh{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.qh-n{font-size:34px;font-weight:600;letter-spacing:-.8px;line-height:1;font-variant-numeric:tabular-nums}
.qh-n i{font-style:normal;font-size:14px;font-weight:600;margin-left:2px}
.qh-l{flex-basis:100%;font-size:12.5px;font-weight:500;color:var(--t2);margin-top:2px}
.qs{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-top:12px;padding-top:12px;border-top:1px solid var(--c-line)}
.qs span{display:flex;flex-direction:column;gap:2px;font-size:11.5px;font-weight:500;color:var(--t3)}
.qs b{font-size:19px;font-weight:600;color:var(--t1);font-variant-numeric:tabular-nums}
.qs b i{font-style:normal;font-size:12px;font-weight:600;color:var(--t3);margin-left:1px}
/* 训练卡里的质量曲线 */
.sesc .swq{display:flex;align-items:flex-end;gap:6px;height:36px;margin:auto 0 12px;padding-top:14px;box-sizing:content-box}
.sesc .swq svg{flex:1;min-width:0;height:36px}
.sesc .swq b{font-size:13px;font-weight:700;color:var(--t3);font-variant-numeric:tabular-nums;line-height:1;margin-bottom:-1px}
.sesc.lit .swq b{color:var(--dc)}

/* ===== 训练中 v5（liz 的语言：冰蓝底 · 留白 · 常规字重大数字 · 白卡细线数据 · 灰玻璃播放器）.np ===== */
.scr.np{background:var(--ambient),var(--c-bg)}
.np .tb .ttl{max-width:200px}
.np-hp{display:inline-flex;align-items:center;gap:5px;height:32px;padding:0 13px;border-radius:16px;background:rgba(255,255,255,.72);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);box-shadow:var(--lg-rim),0 4px 14px rgba(18,40,60,.08);color:var(--t1);font-variant-numeric:tabular-nums}
.np-hp svg{width:13px;height:13px;color:var(--c-hr)}
.np-hp b{font-size:16px;font-weight:600}
.np-pz{display:inline-flex;align-items:center;gap:5px;height:32px;padding:0 13px;border-radius:16px;background:var(--c-warn-tint);color:var(--c-warn-ink);font-size:14px;font-weight:600}
.np-pz svg{width:12px;height:12px}
.np-body{position:absolute;left:0;right:0;top:122px;bottom:252px;padding:0 20px;display:flex;flex-direction:column;gap:10px}
.np-fill{flex:1;min-height:0}
/* 白卡（Wave Form 页同款） */
.np-card{background:#fff;border-radius:24px;box-shadow:var(--e-1);padding:14px 16px 12px}
.np-ch{display:flex;justify-content:space-between;align-items:center;font-size:14px;font-weight:600;color:var(--t1)}
.np-ch span + span{font-size:12px;font-weight:500;color:var(--t3);font-variant-numeric:tabular-nums}
.np-ch .dn{font-size:13px;font-weight:600;color:var(--c-good-ink)}
.np-rc{display:flex;align-items:baseline;gap:5px;margin:2px 0 4px;font-variant-numeric:tabular-nums}
.np-rc b{font-size:30px;font-weight:500;letter-spacing:-.5px;color:var(--c-quality)}
.np-rc i{font-style:normal;font-size:18px;font-weight:500;color:var(--t3)}
.np-rc em{font-style:normal;margin-left:auto;font-size:12px;font-weight:600;color:var(--t3)}
.np-vl{font-size:12px!important;font-weight:600!important;color:var(--c-quality)!important}
.np-vl.warn{color:var(--c-warn)!important} .np-vl.bad{color:var(--c-err)!important}
.np-wsv{display:block}
.np-wsv .wl{fill:none;stroke:var(--c-quality);stroke-width:2;stroke-linejoin:round;stroke-linecap:round;vector-effect:non-scaling-stroke}
.np-wsv .ref{stroke:rgba(18,28,38,.18);stroke-dasharray:3 4;vector-effect:non-scaling-stroke}
.np-wsv .rl,.np-hrs .rl{font-size:10px;font-weight:600;fill:rgba(18,28,38,.4);font-family:var(--fs)}
.np-wsv .pk{fill:#C9D1D7;stroke:#fff;stroke-width:1.5}
.np-wsv .pk.on{fill:var(--c-quality)}
.np-wsv .pk.lo{fill:var(--c-warn)}
.np-wsv .hd{fill:var(--c-quality);opacity:.5}
.np-wsv .rn{font-size:9.5px;font-weight:600;fill:rgba(18,28,38,.35);font-family:var(--fs)}
.np-wsv .rn.on{fill:var(--t1)}
/* 心率：红色细竖条 */
.np-hn{display:flex;align-items:baseline;gap:5px;margin:2px 0 2px;color:var(--c-hr);font-variant-numeric:tabular-nums}
.np-hn svg{width:16px;height:16px;align-self:center}
.np-hn b{font-size:30px;font-weight:500;letter-spacing:-.5px}
.np-hn i{font-style:normal;font-size:14px;font-weight:600}
.np-hrs{display:block}
.np-hrs .tk{stroke:color-mix(in srgb,var(--c-hr) 45%,#fff);stroke-width:3;stroke-linecap:round;fill:none;vector-effect:non-scaling-stroke}
.np-hrs .tk.on{stroke:var(--c-hr)}
.np-tl{height:4px;border-radius:2px;background:var(--c-surface-2);margin-top:8px;overflow:hidden}
.np-tl i{display:block;height:100%;border-radius:2px;background:var(--c-select);transition:width 1s linear}
.np-ax{display:flex;justify-content:space-between;margin-top:5px;font-size:10.5px;font-weight:600;color:var(--t3)}
.np-cap{padding-bottom:10px}
/* 大数字（设计稿 32 kg / 15 reps：常规字重、左对齐） */
.np-k{font-size:14px;font-weight:600;color:var(--t3);padding-left:4px}
.np-row{display:flex;align-items:center;justify-content:space-between;padding-left:2px}
.np-n{display:flex;align-items:baseline;gap:8px;font-variant-numeric:tabular-nums;color:var(--t1)}
.np-n b{font-size:64px;font-weight:400;letter-spacing:-1.5px;line-height:1.05}
.np-n i{font-style:normal;font-size:30px;font-weight:400;letter-spacing:-.3px}
.np-n.xl b{font-size:96px;font-weight:300}
.np-n.w{color:var(--c-warn)}
.np-pm{display:flex;gap:10px}
.np-pm .gbtn{width:44px;height:44px}
.np-pm .gbtn svg{width:18px;height:18px}
.np-sub{font-size:13px;font-weight:500;color:var(--t3);padding-left:4px;font-variant-numeric:tabular-nums}
.np-sub b{color:var(--t1)}
.np-why{font-size:13px;font-weight:600;color:var(--c-warn-ink);padding-left:4px}
.np-nx{display:flex;align-items:center;gap:14px;padding:16px}
.np-nx > svg{width:44px;height:44px;flex:0 0 auto}
.np-nx span{display:flex;flex-direction:column;gap:2px;min-width:0}
.np-nx small{font-size:12px;font-weight:600;color:var(--t3)}
.np-nx b{font-size:20px;font-weight:600}
.np-nx i{font-style:normal;font-size:13px;color:var(--t2);font-variant-numeric:tabular-nums}
svg.hbeat{animation:npBeat 1s cubic-bezier(.3,0,.3,1) infinite;transform-origin:50% 55%}
@keyframes npBeat{0%,100%{transform:scale(.86)}14%{transform:scale(1.06)}28%{transform:scale(.92)}42%{transform:scale(1)}}
/* 播放器：设计稿 362×250 灰色半透明玻璃（#5F5F5F@30%，圆角 40），白字 */
.np-con{position:absolute;left:20px;right:20px;bottom:28px;z-index:20;border-radius:40px;padding:10px 24px 18px;color:#fff;
  background:rgba(95,95,95,.30);backdrop-filter:blur(30px) saturate(140%);-webkit-backdrop-filter:blur(30px) saturate(140%);
  box-shadow:inset 0 0 0 .5px rgba(255,255,255,.35),0 18px 40px rgba(18,40,60,.08)}
.np-grab{display:block;width:44px;height:5px;border-radius:3px;background:rgba(255,255,255,.55);margin:0 auto 12px}
.np-tt{display:flex;align-items:baseline;justify-content:space-between;gap:12px}
.np-tt b{font-size:20px;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.np-tt span{font-size:14px;font-weight:600;color:rgba(255,255,255,.8);font-variant-numeric:tabular-nums}
.np-pr{display:flex;align-items:center;justify-content:space-between;margin-top:12px;height:40px}
.np-pg{display:flex;align-items:center}
.np-pg > b{width:40px;height:40px;border-radius:50%;background:#34C759;display:flex;align-items:center;justify-content:center;font-size:14px;font-weight:600;font-variant-numeric:tabular-nums}
.np-pg > i{width:18px;height:18px;border-radius:50%;background:rgba(255,255,255,.55)}
.np-pg > i.d{background:rgba(52,199,89,.75)}
.np-pg > u{width:14px;height:7px;background:rgba(255,255,255,.4);margin:0 -2px}
.np-wu{font-size:14px;font-weight:600;color:rgba(255,255,255,.85);font-variant-numeric:tabular-nums}
.np-tot{font-size:13px;font-weight:600;color:rgba(255,255,255,.75);font-variant-numeric:tabular-nums}
.np-tp{display:flex;align-items:center;justify-content:space-between;padding:12px 4px 0}
.np-tp button{width:60px;height:60px;display:flex;align-items:center;justify-content:center;color:#fff;transition:opacity .2s,color .2s}
.np-tp button svg{width:40px;height:40px}
.np-tp button.c{width:84px;height:84px;border-radius:50%;background:rgba(255,255,255,.22)}
.np-tp button.c svg{width:36px;height:36px}
.np-tp button.dis{opacity:.4;pointer-events:none}
.np-tp button.warn{color:#FFD08A}

/* ===== 单次训练动作质量 / 总结整场回顾 ===== */
.sq-pick{display:flex;flex-direction:column;gap:10px;padding:18px 20px 12px}
.sq-ex{align-self:flex-start;display:flex;align-items:center;gap:8px;height:44px;padding:0 14px 0 10px;border-radius:22px;background:#fff;box-shadow:var(--e-1);font-size:16px}
.sq-ex > svg:first-child{width:26px;height:26px}
.sq-ex > svg:last-child{width:14px;height:14px;color:var(--t3)}
.sq-ex b{font-weight:600}
.sq-seg{display:flex;gap:4px;padding:4px;border-radius:22px;background:#fff;box-shadow:var(--e-1);overflow-x:auto;scrollbar-width:none}
.sq-seg button{flex:1 0 auto;min-width:64px;height:34px;border-radius:17px;font-size:13.5px;font-weight:600;color:var(--t2);text-align:center;transition:background .2s,color .2s}
.sq-seg button.on{background:var(--c-select-hi);color:#fff}
.qs-r{display:flex;align-items:center;gap:10px;width:100%;padding:11px 0;text-align:left}
.qs-r + .qs-r{border-top:1px solid var(--c-line)}
.qs-d{flex:1;min-width:0;display:flex;flex-direction:column}
.qs-d b{font-size:15px;font-weight:600}
.qs-d i{font-style:normal;font-size:12px;color:var(--t3)}
.qs-c{width:120px;flex:0 0 auto}
.np-hrs.sum .bd{fill:rgba(18,28,38,.05)}
.np-hrs.sum .tk{stroke-width:2}
.np-hrs .pkd{fill:var(--c-hr);stroke:#fff;stroke-width:1.5}
.np-ax span:nth-child(2):not(:last-child){color:var(--t4,rgba(18,28,38,.32))}
.hz{display:flex;gap:3px;height:8px;margin-top:14px}
.hz i{border-radius:4px}
.hz-l{display:flex;justify-content:space-between;margin-top:8px;font-size:12px;font-weight:500;color:var(--t3)}
.hz-l span{display:flex;align-items:center;gap:5px}
.hz-l span i{width:7px;height:7px;border-radius:50%}
.hz-l b{color:var(--t1);font-weight:600;margin-left:2px;font-variant-numeric:tabular-nums}

/* ---------- 第 19 轮：容量 / 市场 / 模板 —— 一页一种身份色 ---------- */
.vcmp{padding:16px 18px;display:flex;flex-direction:column;gap:14px}
.vcmp div{display:grid;grid-template-columns:92px 1fr 62px;align-items:center;gap:10px}
.vcmp span{font-size:12px;font-weight:600;color:var(--t3);font-variant-numeric:tabular-nums}
.vcmp i{display:block;height:10px;border-radius:5px;background:var(--c-hist)}
.vcmp b{font-size:15px;font-weight:600;text-align:right;font-variant-numeric:tabular-nums;color:var(--t1)}
.vstk{display:flex;gap:3px;height:10px;margin-bottom:6px}
.vstk i{border-radius:5px}
.vrow{display:flex;align-items:center;gap:12px;padding:10px 0}
.vrow+.vrow{border-top:1px solid var(--t5)}
.vrow>i{width:10px;height:10px;border-radius:3px;flex:0 0 auto}
.vrow b{font-size:15px;font-weight:600;color:var(--t1)}
.vrow small{font-size:12px;font-weight:500;color:var(--t3);margin-top:1px}
.vrow em{font-style:normal;font-size:17px;font-weight:600;font-variant-numeric:tabular-nums;color:var(--t1)}
.vrow em small{font-size:12px;margin-left:2px}
.vbars{margin-top:16px;display:flex;flex-direction:column;gap:8px}
.vbars div{display:grid;grid-template-columns:52px 1fr 46px;align-items:center;gap:10px;font-size:12px;font-weight:500;color:var(--t2)}
.vbars i{display:block;height:8px;border-radius:4px;background:var(--c-surface-2)}
.vbars i b{display:block;height:100%;border-radius:4px}
.vbars em{font-style:normal;text-align:right;font-variant-numeric:tabular-nums;color:var(--t3)}
.vnote{font-size:13px;line-height:1.55;color:var(--t2);margin-top:14px}
.trk .vbar{display:block;height:4px;border-radius:2px;background:var(--c-surface-2);margin-top:7px;max-width:180px}
.trk .vbar b{display:block;height:100%;border-radius:2px}

/* 模板小封面：浅灰方块 + 底部训练日色条（与 .plc 大卡同一语言） */
.mcov{width:40px;height:40px;flex:0 0 auto;border-radius:12px;background:var(--c-surface-2);display:flex;align-items:flex-end;padding:6px}
.mcov i{display:flex;gap:2px;width:100%;height:4px}
.mcov i em{flex:1;border-radius:2px}
.trow .mcov{width:48px;height:48px;border-radius:14px}
.mks .plc{flex:0 0 150px}
.mks .plc .cov b{font-size:19px}

/* 评分分布（替代彩纸） */
.rdist{display:flex;align-items:center;gap:20px;padding:18px 20px}
.rd-n{display:flex;flex-direction:column;align-items:center;gap:4px;flex:0 0 auto}
.rd-n b{font-size:48px;font-weight:500;letter-spacing:-1.4px;line-height:1;font-variant-numeric:tabular-nums;color:var(--t1)}
.rd-n span{font-size:12px;font-weight:500;color:var(--t3);margin-top:2px}
.rd-b{flex:1;display:flex;flex-direction:column;gap:6px}
.rd-b div{display:grid;grid-template-columns:10px 1fr;gap:8px;align-items:center;font-size:11px;font-weight:600;color:var(--t3);font-variant-numeric:tabular-nums}
.rd-b i{display:block;height:6px;border-radius:3px;background:var(--c-surface-2)}
.rd-b i b{display:block;height:100%;border-radius:3px;background:var(--c-market-hi)}
.rvc{flex:0 0 268px;padding:16px;display:flex;flex-direction:column}
.rvc b{font-size:15px;font-weight:600;color:var(--t1)}
.rvc small{font-size:12px;font-weight:500;color:var(--t3)}
.rvc p{font-size:14px;line-height:1.55;color:var(--t1);margin-top:12px;flex:1}
.rvc time{font-size:12px;font-weight:500;color:var(--t3);margin-top:12px}

/* ---------- 市场轮播 · 运营位（第 20 轮）：白卡 + 一个主角，圆点只亮当前页 ---------- */
.mkb{margin:6px 0 4px}
.mkb-s{display:flex;overflow-x:auto;scroll-snap-type:x mandatory;scrollbar-width:none;padding:0 var(--gutter);gap:10px;scroll-padding:0 var(--gutter)}
.mkb-s::-webkit-scrollbar{display:none}
.mkb-c{flex:0 0 100%;height:150px;scroll-snap-align:start;border-radius:var(--r-xl);background:var(--c-surface);box-shadow:var(--e-1);padding:14px 18px;display:flex;flex-direction:column;overflow:hidden}
.mkb-k{display:flex;align-items:baseline;gap:8px;font-size:12px;font-weight:700;letter-spacing:.3px;color:var(--t3)}
.mkb-k span{font-weight:500;letter-spacing:0}
.mkb-r{display:flex;align-items:center;gap:12px;width:100%;flex:1;text-align:left}
.mkb-r+.mkb-r{border-top:1px solid var(--t5)}
.mkb-r b{width:14px;font-size:15px;font-weight:700;color:var(--t4);font-variant-numeric:tabular-nums}
.mkb-r b.one{color:var(--c-market)}
.mkb-r span{font-size:15px;font-weight:600;color:var(--t1);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.mkb-r em{font-style:normal;font-size:13px;font-weight:600;color:var(--t3);font-variant-numeric:tabular-nums}
.mkb-f{position:relative;display:flex;flex-direction:column;width:100%;height:100%;text-align:left}
.mkb-f>b{font-size:22px;font-weight:700;letter-spacing:-.4px;color:var(--t1);margin-top:auto;padding-right:84px}
.mkb-f small{font-size:13px;font-weight:500;color:var(--t3);margin-top:4px;padding-right:84px}
.mkb-f .mcov.lg{position:absolute;right:0;top:22px;width:72px;height:72px;border-radius:20px;padding:10px}
.mkb-f .mcov.lg i{height:6px}
.mkb-go{position:absolute;right:0;top:-2px;display:flex;align-items:center;gap:2px;font-size:13px;font-weight:600;color:var(--c-market-ink)}
.mkb-d{display:flex;justify-content:center;gap:5px;margin-top:10px}
.mkb-d i{width:6px;height:6px;border-radius:3px;background:var(--c-hist);transition:width .25s,background .25s}
.mkb-d i.on{width:16px;background:var(--t2)}

/* ---------- 第 22 轮：1RM / 间歇漂移按「数据页准则」重构 ---------- */
.qx.on{background:linear-gradient(90deg,transparent,var(--c-surface-2) 12%,var(--c-surface-2) 88%,transparent)}
.orm-t{display:grid;grid-template-columns:repeat(4,1fr);gap:6px}
.orm-t span{display:flex;flex-direction:column;align-items:center;gap:3px;padding:12px 0 10px;border-radius:var(--r-md);background:var(--c-surface-2);font-size:12px;font-weight:600;color:var(--t3)}
.orm-t span.on{background:var(--c-orm-tint);color:var(--c-orm)}
.orm-t b{font-size:19px;font-weight:600;color:var(--t1);font-variant-numeric:tabular-nums;letter-spacing:-.3px}
.orm-t span.on b{color:var(--c-orm)}
.orm-t b i{font-style:normal;font-size:11px;font-weight:600;color:var(--t3);margin-left:1px}
.orm-rg{display:grid;grid-template-columns:auto 1fr auto;align-items:center;gap:10px;font-size:13px;font-weight:600;color:var(--t2);font-variant-numeric:tabular-nums}
.orm-rg i{position:relative;height:10px;border-radius:5px;background:linear-gradient(90deg,var(--c-orm-tint),color-mix(in srgb,var(--c-orm) 40%,#fff) 50%,var(--c-orm-tint))}
.orm-rg em{position:absolute;top:-5px;width:4px;height:20px;margin-left:-2px;border-radius:2px;background:var(--c-orm);box-shadow:0 0 0 2px #fff}
/* 间歇：一行 = 一个因素，右边写「多 / 少歇几秒」，条从中线往两边长 */
.dr-st{display:grid;grid-template-columns:1fr 92px 52px;align-items:center;gap:10px;padding:9px 0}
.dr-st + .dr-st{border-top:1px solid var(--c-line)}
.dr-st span{display:flex;flex-direction:column;min-width:0}
.dr-st span b{font-size:14px;font-weight:600;color:var(--t1)}
.dr-st span i{font-style:normal;font-size:12px;font-weight:500;color:var(--t3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.dr-st .k{position:relative;height:8px}
.dr-st .k::before{content:"";position:absolute;left:50%;top:-3px;bottom:-3px;width:1px;background:rgba(18,28,38,.18)}
.dr-st .k i{position:absolute;top:0;bottom:0;border-radius:4px}
.dr-st em{font-style:normal;text-align:right;font-size:15px;font-weight:600;font-variant-numeric:tabular-nums;color:var(--t2)}
.dr-st.sum{padding-top:12px}
.dr-st.sum em{font-size:17px;color:var(--t1)}
/* 歇多久：一行一个区间（替代竖柱图） */
.rq{display:grid;grid-template-columns:86px 1fr 34px;align-items:center;gap:10px;padding:7px 0;font-size:13px;font-weight:600;color:var(--t2)}
.rq i{display:block;height:8px;border-radius:4px;background:var(--c-surface-2);overflow:hidden}
.rq i b{display:block;height:100%;border-radius:4px;background:var(--c-hist-ink)}
.rq em{font-style:normal;text-align:right;font-size:15px;font-variant-numeric:tabular-nums;color:var(--t1)}
.rq.on{color:var(--c-quality)} .rq.on i b{background:var(--c-quality)} .rq.on em{color:var(--c-quality)}
.rq.few{opacity:.45}

/* AI 间歇归因（第 25 轮）：起点行 + 因素行 + 合计；动作库行尾的 AI 秒数 */
.dr-st.base{padding:4px 0 8px}
.dr-st.base em{color:var(--t3)}
.lrest{display:flex;align-items:center;gap:3px;flex:0 0 auto;font-size:14px;font-weight:600;color:var(--t2);font-variant-numeric:tabular-nums}
.lrest svg{width:13px;height:13px}
.lrest small{font-size:11px;margin-left:1px}
/* 列表里每行都有：数字用中性色，只有 AI 图标带间歇身份色（一屏不刷满颜色） */
.lrest.ai svg,.ex .rest.ai svg{color:var(--c-drift)}
.ex .rest.ai{color:var(--t2)}

/* ---------- 第 27 轮：计划编辑 v2 ---------- */
.peh{padding:4px var(--gutter) 0}
.peh button{display:block;text-align:left;max-width:100%}
.peh b{display:block;font-size:30px;font-weight:700;letter-spacing:-.6px;line-height:1.12;color:var(--t1);word-break:break-word}
.peh b.ph{color:var(--t4)}
.peh span{display:block;font-size:14px;font-weight:500;color:var(--t3);margin-top:6px}
/* 训练日卡 v2（第 29 轮，用户：选择方式好，但卡片紧凑 / 怪）
   - 去掉卡内顶部色条（贴着圆角像一个书签页签，和全站卡片都不一样）→ 身份色收成「第 N 天」前的小圆点，
     和下方当天标题「● 推日」是同一个点，选中哪张、下面就是哪天，一眼对上
   - ≤3 天时三张等分铺满一行（.fit），不再有被屏幕边切掉半张的虚线卡；「添加」挪到区头右侧
   - 未选中 = 半透明白、无投影（同全站「历史灰」），选中 = 白卡 + 投影；字号拉开层级：12 / 17 / 12 */
.pdys{display:flex;gap:10px;overflow-x:auto;scrollbar-width:none;padding:2px var(--gutter) 8px}
.pdys::-webkit-scrollbar{display:none}
.pdy{flex:0 0 auto;width:120px;min-height:104px;padding:14px 14px 13px;border-radius:var(--r-lg);background:rgba(255,255,255,.5);display:flex;flex-direction:column;align-items:flex-start;text-align:left;transition:background .2s,box-shadow .2s}
.pdys.fit .pdy{flex:1 1 0;width:auto;min-width:0}
.pdy small{display:flex;align-items:center;gap:6px;font-size:12px;font-weight:600;color:var(--t3)}
.pdy small i{width:8px;height:8px;border-radius:50%;background:var(--c-hist);flex:none}
.pdy b{font-size:17px;font-weight:600;letter-spacing:-.2px;color:var(--t2);margin-top:8px;max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.pdy span{font-size:12px;font-weight:500;color:var(--t3);margin-top:auto;padding-top:10px}
.pdy.on{background:var(--c-surface);box-shadow:var(--e-1)}
.pdy.on small i{background:var(--dc)}
.pdy.on b{color:var(--t1)}
.sech .a.go{color:var(--blue);font-weight:600}
.sech .a.go svg{width:15px;height:15px}
.trk.add{color:var(--c-action-ink)}
.trk.add .no svg{width:16px;height:16px;margin:0 auto}
.trk.add .nm{color:var(--c-action-ink);font-weight:600}
.trk .best .prest{display:flex;align-items:center;justify-content:flex-end;gap:3px;font-variant-numeric:tabular-nums}
.trk .best .prest svg{width:12px;height:12px}
.trk .best .prest.ai svg{color:var(--c-drift)}
/* 发布模板 */
.pub-ck{width:24px;height:24px;flex:0 0 auto;border-radius:50%;box-shadow:inset 0 0 0 1.5px var(--t4);display:flex;align-items:center;justify-content:center;color:#fff}
.pub-ck.on{background:var(--c-action);box-shadow:none}
.pub-ck svg{width:14px;height:14px}
.pub-pv{display:flex;justify-content:center;padding:0 var(--gutter)}
.pub-pv .plc{width:170px;pointer-events:none}
.pub-in{display:block;width:100%;border:0;background:transparent;font:inherit;font-size:16px;font-weight:500;color:var(--t1);padding:4px 0 0;outline:none}
.pub-in::placeholder{color:var(--t4)}

/* 训练活跃度 · 周 / 年（第 27 轮） */
.actv{margin:0 var(--gutter);padding:16px}
.actv .k{font-size:12px;font-weight:600;color:var(--t3)}
.actv .big{font-size:34px;font-weight:600;letter-spacing:-1px;line-height:1.05;color:var(--t1);font-variant-numeric:tabular-nums}
.actv .big i{font-style:normal;font-size:14px;font-weight:500;color:var(--t3);margin-left:6px;letter-spacing:0}
.actv small{font-size:12px;font-weight:500;color:var(--t3)}
.asg{display:flex;gap:4px;margin-top:12px}
.asg i{flex:1;height:6px;border-radius:3px;background:var(--c-heat-0)}
.asg i.on{background:var(--c-heat-3)}
.awks{display:grid;grid-template-columns:repeat(7,1fr);gap:5px;margin-top:14px}
.awk{display:flex;flex-direction:column;align-items:center;gap:3px;padding:8px 2px 9px;border-radius:12px;background:var(--c-surface-2);min-width:0}
.awk small{font-size:10px;font-weight:600;color:var(--t3)}
.awk .d{font-size:15px;font-weight:600;color:var(--t2);font-variant-numeric:tabular-nums}
.awk b{display:flex;align-items:center;gap:3px;max-width:100%;font-size:10.5px;font-weight:600;color:var(--t1);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-top:2px;min-height:14px}
.awk b i{width:5px;height:5px;border-radius:50%;flex:0 0 auto}
.awk b.rest{color:var(--t4);font-weight:500}
.awk em{font-style:normal;font-size:10px;font-weight:600;color:var(--t3);font-variant-numeric:tabular-nums;min-height:12px}
.awk.on{background:var(--c-heat-1)}
.awk.on .d{color:var(--t1)}
.awk.now{box-shadow:inset 0 0 0 1.5px var(--c-heat-3)}
.awk.fut{background:transparent;box-shadow:inset 0 0 0 1px var(--t5)}
.awk.fut .d{color:var(--t4)}
.ayr{display:grid;grid-template-columns:repeat(12,1fr);gap:5px;height:130px;margin-top:16px}
.ayr div{display:flex;flex-direction:column;align-items:center;justify-content:flex-end;gap:4px;min-width:0}
.ayr span{font-size:10px;font-weight:600;color:var(--t3);font-variant-numeric:tabular-nums}
.ayr i{width:100%;max-width:18px;border-radius:5px;background:var(--c-heat-2)}
.ayr small{font-size:10px;font-weight:600;color:var(--t3)}
.ayr .now i{background:var(--c-heat-3)}
.ayr .now span,.ayr .now small{color:var(--c-good-ink)}
.ayr .fut i{background:transparent;box-shadow:inset 0 0 0 1px var(--t5)}
.ayr .fut small{color:var(--t4)}

/* ===== 首页主视觉（第 31 轮）：这一场的质量曲线 + 时间轴 —— 只用质量色 ===== */
.hq{display:flex;flex-direction:column;align-items:center;text-align:center;margin:22px 0 2px;padding:0 20px;cursor:pointer;-webkit-tap-highlight-color:transparent;outline:none}
.hq:not([data-hq]){cursor:default}
.hq-k{font-size:var(--fs-foot);font-weight:600;color:var(--t3);letter-spacing:.2px}
.hq-n{font-size:60px;font-weight:500;letter-spacing:-1.8px;line-height:1.02;font-variant-numeric:tabular-nums;color:var(--c-quality);margin-top:4px}
.hq-n i{font-style:normal;font-size:18px;font-weight:500;color:var(--t2);margin-left:4px;letter-spacing:0}
.hq-t{font-size:40px;font-weight:600;letter-spacing:-.8px;color:var(--t1);line-height:1.2;margin-top:6px}
.hq-t.mute{color:var(--t3)}
.hq-d{font-size:14px;font-weight:500;color:var(--t2);margin-top:6px;transition:opacity .18s}
.hq-d em{font-style:normal;font-weight:600;color:var(--c-good-ink)}
.hq-d em.dn{color:var(--t2)}
.hq-w{position:relative;width:100%;margin-top:12px;touch-action:pan-y;text-align:left}
.hq-sv{display:block;overflow:visible}
.hq-bar{position:relative;height:4px;margin:6px 6px 0;border-radius:2px;background:var(--c-surface-2)}
.hq-bar i{position:absolute;top:0;bottom:0;border-radius:2px;background:var(--c-quality);opacity:.32;transition:opacity .18s}
.hq-bar i.on{opacity:1}
.hq-bar.g i{background:var(--c-hist-ink)}
.hq-ax{position:relative;height:16px;margin:6px 6px 0;font-size:11px;font-weight:600;color:var(--t3);font-variant-numeric:tabular-nums}
.hq-ax time{position:absolute;top:0;left:0}
.hq-ax time:last-child{left:auto;right:0}
.hq-ax span{position:absolute;top:0;transform:translateX(-50%);color:var(--t4)}
.hq-ph{position:absolute;top:-4px;height:130px;left:0;width:2px;margin-left:-1px;border-radius:1px;background:var(--t1);opacity:0;transition:opacity .18s;pointer-events:none}
.hq-tip{position:absolute;left:0;bottom:calc(100% + 8px);white-space:nowrap;font-size:12px;font-weight:500;color:var(--t2);background:#fff;border-radius:10px;padding:6px 10px;box-shadow:var(--e-1),0 0 0 .5px var(--t5);opacity:0;transition:opacity .18s;pointer-events:none}
.hq-tip time{font-variant-numeric:tabular-nums;color:var(--t3);margin-right:8px}
.hq-tip b{color:var(--t1);font-weight:600;margin-right:2px}
.hq-tip em{font-style:normal;font-weight:700;margin-left:8px;font-variant-numeric:tabular-nums}
.hq.scrub .hq-ph,.hq.scrub .hq-tip{opacity:1}
.hq.scrub .hq-d{opacity:0}
/* 曲线下方这一格：平时 = 就绪度（第 36 轮融入，不再单独一张卡）；拖动曲线 = 换成那一组的波形 */
/* 这一格要用 flex 居中：button 即使 display:flex 也只按内容宽度排（fit-content），不撑满 → 会靠左 */
.hq-f{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;width:100%;min-height:74px;margin-top:4px}
.hq-f.nw{min-height:0}
/* 主视觉下面紧接着的第一个区块：28px 是给「区块与区块」用的，这里主角与趋势是一组，收紧到 12 */
.hq+.sech{padding-top:12px}
.hq-rd{display:flex;flex-direction:column;align-items:center;gap:3px;margin-top:4px;padding:7px 10px;border-radius:14px;transition:opacity .18s}
.hq-rd:active{opacity:.55}
.hq-rd .l1{display:flex;align-items:center;gap:6px;font-size:var(--fs-foot);font-weight:500;color:var(--t2)}
.hq-rd .l1 b{font-size:14px;font-weight:700;color:var(--t1);font-variant-numeric:tabular-nums}
.hq-rd .l2{font-size:var(--fs-foot);font-weight:500;color:var(--t3);line-height:1.45;text-align:center}
.hq-rd .l2 b{color:var(--t1);font-weight:600}
.hq.scrub .hq-rd{opacity:0;pointer-events:none}
.hq-sw{position:absolute;inset:0;display:flex;flex-direction:column;align-items:stretch;opacity:0;transition:opacity .18s;pointer-events:none}
.hq-sw>span{font-size:12px;font-weight:500;color:var(--t2);margin-top:2px}
.hq.scrub .hq-sw{opacity:1}
.hq:focus-visible .hq-n{text-decoration:underline;text-decoration-thickness:2px;text-underline-offset:6px}
.hq-w.flat{margin-top:26px;margin-bottom:6px}

/* ===== 日期条（第 31 轮重做）=====
   旧版：42×62 的青色长胶囊，整个首页最饱和的一块，和主视觉抢；练过的点用了容量蓝。
   新版：只在日期数字上放一个 38 的圆（选中 = 青，「选中」语义不变）；星期是小字不参与选中；
   今天没被选中时数字用青色字提示；练过 = 数字下一颗行动蓝小点（完成度语义）；未来 = 淡字。 */
.week{display:flex;justify-content:space-between;padding:16px 18px 0;position:relative}
.wd{width:44px;height:auto;padding:0 0 10px;border-radius:0;gap:5px;color:var(--t1);background:none}
.wd span{font-size:12px;font-weight:600;opacity:1;color:var(--t3);line-height:16px;letter-spacing:.3px}
.wd b{width:38px;height:38px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:17px;font-weight:500;font-variant-numeric:tabular-nums;position:relative;z-index:1;transition:color .2s}
.wd.on{color:var(--t1)}
.wd.on span{opacity:1;color:var(--t1)}
.wd.on b{color:#fff;font-weight:600}
.wd.today:not(.on) b{color:var(--c-select);font-weight:700}
.wd.fut b{color:var(--t4)}
.wd.on.fut b{color:#fff}
.wd.done b::after{content:none}
.wd::after{content:"";position:absolute;left:50%;bottom:2px;width:4px;height:4px;margin-left:-2px;border-radius:2px;background:transparent}
.wd.done::after{background:var(--c-action-hi)}
.wsel{top:37px;width:38px;height:38px;border-radius:19px;margin-left:3px;background:var(--c-select);box-shadow:none}

/* 就绪度小环（融入主视觉那一格；数字不进环里，环只做身份色提示） */
.rdy-r{position:relative;width:18px;height:18px;flex:none;display:inline-flex}
.rdy-r svg{display:block}

/* 首页：今天还没练 / 从没练过（第 32 轮；第 33 轮把「开始」融进时间轴） */
.hq-start{position:absolute;left:-10px;top:-12px;display:inline-flex;align-items:center;gap:5px;padding:12px 10px;font-size:13px;font-weight:600;color:var(--c-action);line-height:16px;-webkit-tap-highlight-color:transparent}
.hq-start svg{width:11px;height:11px}
.hq-start:active{opacity:.55}
.hq-p0{position:absolute;top:-4px;left:6px;width:2px;height:130px;margin-left:-1px;border-radius:1px;background:var(--c-action);opacity:.9;pointer-events:none;transition:opacity .18s}
.hq.scrub .hq-p0{opacity:0}
.hq-empty{height:112px;display:flex;align-items:center;justify-content:center;border-top:1px dashed var(--t5);border-bottom:1px dashed var(--t5);margin:0 6px}
.hq-empty span{font-size:var(--fs-foot);font-weight:500;color:var(--t3)}
.st-first{margin:28px 36px 0;text-align:center;font-size:var(--fs-foot);font-weight:500;line-height:1.55;color:var(--t3)}

/* ===== 新手引导（含资料补全）（第 37 轮重做 · 第 39 轮重排 · 第 40 轮合并）=====
   一条 6 步流程：动作质量 → AI 间歇 → 1RM → 性别 → 身体数据 → 开始训练。
   终点是「把人送进第一次训练」，不是讲完功能；资料补全不再是另一套表单页，
   而是「为了给你前面那些图，需要这两个数据」—— 所以共用同一个 hero / 标题 / 副标 / 主动作骨架。
   主角 = 产品自己的真实画面（图表 / 性别卡 / 三个数字 / 模板卡），不是「每屏一个大号彩色图标 + 三段长文案」；
   每屏只有一个小身份色元素（--obc = 这一屏讲的那个指标 / 市场橙；填资料两屏是行动蓝 = UI 色）。 */
.ob-main{flex:1;width:100%;display:flex;flex-direction:column;align-items:center;justify-content:center}
/* 固定高度：四屏的 hero 高矮不一，但标题必须落在同一条线上 */
.ob-hero{width:100%;height:280px;flex:none;display:flex;align-items:center;justify-content:center}
.ob-hero>.ob-card,.ob-hero>.ps-grid,.ob-hero>.col{width:100%}
.ob-card{width:100%;background:var(--c-surface);border-radius:var(--r-xl);box-shadow:var(--e-1);padding:16px 18px;text-align:left}
.ob-ch{display:flex;align-items:center;gap:7px;font-size:13px;font-weight:600;color:var(--t2);margin-bottom:4px}
.ob-ch span{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ob-ch b{font-size:16px;font-weight:700;color:var(--obc,var(--t1));font-variant-numeric:tabular-nums}
.ob-row{display:flex;align-items:baseline;gap:10px;padding:13px 0;border-top:.5px solid var(--c-line)}
.ob-row:first-of-type{border-top:0}
.ob-row span{font-size:14px;font-weight:500;color:var(--t2);flex:1}
.ob-row b{font-size:24px;font-weight:500;color:var(--t1);font-variant-numeric:tabular-nums}
.ob-row b.hl{color:var(--obc,var(--t1))}
.ob-row em{font-style:normal;font-size:13px;font-weight:700;color:var(--obc,var(--t2));margin-left:4px}
.ob-note{display:block;font-size:12px;font-weight:500;color:var(--t3);line-height:1.5;margin-top:8px}
/* 模板的训练日清单（开始训练那屏）：训练日色只出现在小圆点上 —— 身份色属于「那一天」，不是装饰 */
.ob-days{display:flex;flex-direction:column;gap:2px;margin-top:10px}
.ob-dy{display:flex;align-items:center;gap:9px;padding:7px 0;border-top:.5px solid var(--c-line)}
.ob-dy:first-child{border-top:0}
.ob-dy i{width:9px;height:9px;border-radius:5px;flex:none}
.ob-dy span{font-size:14px;font-weight:600;color:var(--t1)}
.ob-dy em{font-style:normal;font-size:12px;font-weight:500;color:var(--t3)}
.ob-t{font-size:30px;font-weight:700;letter-spacing:-.6px;color:var(--t1);margin-top:24px}
/* 固定两行的高度：副标 1 行 / 2 行都会让整块内容等高，六屏的标题才落在同一条线上（居中排版会被副标行数带偏） */
.ob-s{font-size:15px;font-weight:500;color:var(--t2);line-height:1.5;margin-top:8px;max-width:306px;min-height:45px}
/* 末屏把刚填的资料收口成一句（原「准备好了」那屏的作用），再加一句隐私说明 */
.ob-set{margin-top:10px;padding-top:10px;border-top:.5px solid var(--c-line);font-size:12px;font-weight:500;color:var(--t3);line-height:1.5}
.ob-set b{font-weight:600;color:var(--t2)}
.ob-priv{display:flex;gap:6px;align-items:flex-start;margin-top:8px;font-size:12px;font-weight:500;color:var(--t3);line-height:1.5}
.ob-priv svg{flex:none;margin-top:2px;color:var(--t4)}

/* 填资料两步的控件（性别卡 / 三个数字） */
.ps-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px}
/* 摇一下：只动 transform、不带 fill both，避免内容被动画卡住 */
@keyframes shk{0%,100%{transform:translateX(0)}20%{transform:translateX(-6px)}40%{transform:translateX(5px)}60%{transform:translateX(-3px)}80%{transform:translateX(2px)}}
.shk{animation:shk .4s cubic-bezier(.36,.07,.19,.97)}
.ps-g{height:112px;border-radius:var(--r-xl);background:var(--c-surface);box-shadow:var(--e-1);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:9px;font-size:15px;font-weight:600;color:var(--t2)}
.ps-g svg{color:var(--t4)}
.ps-g.on{color:var(--c-action-ink);box-shadow:inset 0 0 0 2px var(--c-action),var(--e-1)}
.ps-g.on svg{color:var(--c-action-hi)}
.ps-row{display:flex;align-items:center;gap:12px;padding:14px 16px;border-radius:var(--r-lg)}
.ps-row .f1{font-size:16px;font-weight:500;color:var(--t1)}
.ps-ic{width:34px;height:34px;border-radius:11px;display:flex;align-items:center;justify-content:center;background:var(--c-surface-2);color:var(--t2);flex:none}
.ps-st{width:38px;height:38px;border-radius:19px;background:var(--c-surface-2);color:var(--t1);display:flex;align-items:center;justify-content:center;flex:none}
.ps-st:active{filter:brightness(.94)}
.ps-n{min-width:86px;text-align:center;font-size:26px;font-weight:500;font-variant-numeric:tabular-nums;color:var(--t1)}
.ps-n i{font-style:normal;font-size:13px;font-weight:500;color:var(--t3);margin-left:3px}
.ps-back{width:56px;height:56px;border-radius:28px;background:var(--c-surface);box-shadow:var(--e-1);color:var(--t1);display:flex;align-items:center;justify-content:center;flex:none}
/* 未满足前置条件的主动作：只是淡下去，但仍然可点（点了会说明原因，不做静默失败） */
.cta.off{opacity:.5}

/* 手表产品图：代码 Assets 位图（含表带、透明底）；未配对 = 去色 + 压暗（同 AppleWatchDeviceView） */
.wdev{display:block;height:auto;filter:drop-shadow(0 12px 24px rgba(10,20,30,.16))}
.wdev.off{filter:grayscale(1);opacity:.45}
