/* IronM：手机优先；桌面上整页是居中的一列。白底圆角卡片风（spec [2026-10-23] §175，照项目负责人给的参照图，取代 §131 的像素农场风）：
   浅灰紫底、白色大圆角卡片、珊瑚红主色、浅绿小标签、图标放在浅紫圆底里、系统字体。最后一节统一覆盖上面的组件 */
:root {
  --bg: #f6f4fa; --surface: #ffffff; --sunken: #f6f5fa; --ink: #1d1d26; --ink-2: #474757; --muted: #757588;
  --line: #ebebf2; --line-hi: rgb(242 96 63 / 40%);
  --accent: #f2603f; --accent-ink: #ffffff; --accent-text: #cc4125; --accent-soft: #fdece7; --accent-glow: rgb(242 96 63 / 25%);
  --fire: #d2452a; --fire-2: #c13a20; --amber: #ffb547; --rose: #c2410c;
  --heat: #d63b40; --heat-soft: #fdecec;
  --load-hot: #f2603f; --load-mid: #ffa37f; --load-low: #ffd9c9; --load-ready: #34c46b; --load-none: #e6e6ef;  /* 人体图（§94） */
  --good: #1e8a47; --good-soft: #dff5e6; --warn: #b45309; --warn-soft: #fff3dc; --neutral-soft: #f4f2f8;
  --gold: #b45309; --gold-2: #7c3a00; --gold-soft: #fff6e5; --gold-line: #f5d49a; --violet: #6e56cf;  /* IronM 的话、脂肪 */
  --wood: #ebebf2; --wood-dark: #e2e2ec; --wood-light: #f1f1f6; --plank: #f6f5fa;  /* §131 木框的变量，现在是细线和浅底 */
  --hero: #ffffff; --hero-ink: #1d1d26; --hero-muted: #757588; --hero-line: #ebebf2; --hero-accent: #f2603f;
  --icon-bg: #eeebfa;  /* 图标的浅紫圆底 */
  --shadow: 0 1px 2px rgb(40 30 60 / 4%), 0 6px 20px rgb(40 30 60 / 5%);
  --shadow-lg: 0 10px 40px rgb(40 30 60 / 12%);
  --radius: 22px; --radius-sm: 14px; --max: 720px; --tabs-h: 64px;
  --font: -apple-system, BlinkMacSystemFont, "PingFang SC", "Microsoft YaHei", sans-serif;
  --pixel: var(--font);  /* §131 的像素字不再用（§175） */
  --mono: ui-monospace, Menlo, monospace;
  --digits: var(--font);
  --figs: var(--font);
  --slant: none;
  color-scheme: light;
}

* { box-sizing: border-box; }
html { -webkit-text-size-adjust: 100%; }
body {
  margin: 0; background: var(--bg); color: var(--ink); font: 15px/1.6 var(--font);
  -webkit-font-smoothing: antialiased; text-rendering: optimizeLegibility;
}
body.locked { overflow: hidden; }
a { color: inherit; }
svg.i { width: 22px; height: 22px; fill: none; stroke: currentColor; stroke-width: 1.8; stroke-linecap: round; stroke-linejoin: round; flex: none; }
svg.i.sm { width: 16px; height: 16px; } svg.i.xs { width: 14px; height: 14px; }
:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; border-radius: 8px; }
[hidden] { display: none !important; }

/* ---- 外框：一列居中 ---- */
.app {
  max-width: var(--max); margin: 0 auto;
  padding: 0 max(16px, env(safe-area-inset-right, 0px)) calc(var(--tabs-h) + 28px + env(safe-area-inset-bottom, 0px)) max(16px, env(safe-area-inset-left, 0px));
}
.bar {
  position: sticky; top: 0; z-index: 5; display: flex; align-items: flex-end; gap: 12px;
  padding: calc(14px + env(safe-area-inset-top, 0px)) 0 12px;
  background: color-mix(in srgb, var(--bg) 90%, transparent); backdrop-filter: saturate(1.4) blur(12px);
}
.bar-text { flex: 1; min-width: 0; }
.bar-kicker { font-size: 13px; color: var(--muted); line-height: 1.3; min-height: 1px; }
.bar-title { margin: 0; font-size: 28px; line-height: 1.2; font-weight: 750; letter-spacing: -.01em; }
.avatar {
  width: 38px; height: 38px; border-radius: 50%; display: grid; place-items: center; text-decoration: none; flex: none;
  background: var(--ink); color: var(--bg); font-weight: 700; font-size: 15px; margin-bottom: 2px;
}
.view { display: flex; flex-direction: column; gap: 16px; }

/* ---- 底部导航：和内容同宽对齐 ---- */
.tabs {
  position: fixed; left: 0; right: 0; bottom: 0; z-index: 6;
  background: color-mix(in srgb, var(--surface) 94%, transparent); backdrop-filter: saturate(1.4) blur(12px);
  border-top: 1px solid var(--line); padding-bottom: env(safe-area-inset-bottom, 0px);
}
.tabs-inner {
  max-width: var(--max); margin: 0 auto; height: var(--tabs-h); display: grid; grid-template-columns: repeat(4, 1fr);
  padding: 0 max(8px, env(safe-area-inset-right, 0px)) 0 max(8px, env(safe-area-inset-left, 0px));
}
.tabs a {
  display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 3px;
  font-size: 11px; color: var(--muted); text-decoration: none; font-weight: 500;
}
.tabs a.on { color: var(--ink); font-weight: 650; }
.tabs a.on .ti { color: var(--accent); }
.tabs .ti { display: grid; place-items: center; height: 24px; }

/* ---- 通用 ---- */
.section { display: flex; flex-direction: column; gap: 10px; }
.section-head { display: flex; align-items: baseline; justify-content: space-between; gap: 12px; padding: 0 2px; }
.section-head h2 { margin: 0; font-size: 18px; font-weight: 700; letter-spacing: -.005em; }
.section-head a, .link {
  color: var(--accent); font-size: 14px; font-weight: 600; text-decoration: none; display: inline-flex; align-items: center; gap: 2px;
  background: none; border: 0; padding: 0; cursor: pointer; font-family: inherit;
}
.card {
  background: var(--surface); border-radius: var(--radius); padding: 16px; box-shadow: var(--shadow);
  display: flex; flex-direction: column; gap: 10px; min-width: 0; border: 1px solid transparent;
}
@media all { .card { border-color: var(--line); } }
.muted { color: var(--muted); font-size: 13px; }
.caption { color: var(--muted); font-size: 12.5px; line-height: 1.5; }
.lede { color: var(--ink-2); margin: 0; }
p { margin: 0; }

.chip {
  display: inline-flex; align-items: center; gap: 4px; font-size: 12px; font-weight: 600; line-height: 1;
  padding: 5px 9px; border-radius: 999px; background: var(--neutral-soft); color: var(--ink-2); white-space: nowrap;
}
.chip.good { background: var(--good-soft); color: var(--good); }
.chip.attention { background: var(--warn-soft); color: var(--warn); }

.btn {
  font: inherit; font-weight: 650; border: 0; border-radius: 14px; padding: 12px 18px; cursor: pointer; text-decoration: none;
  display: inline-flex; align-items: center; justify-content: center; gap: 6px; background: var(--accent); color: var(--accent-ink);
}
.btn.block { width: 100%; }
.btn.ghost { background: var(--sunken); color: var(--ink); font-weight: 600; }
.btn.quiet { background: transparent; color: var(--ink-2); font-weight: 500; }
.btn.danger { background: transparent; color: var(--warn); border: 1px solid var(--line); }
.btn:disabled { opacity: .45; cursor: default; }
.btn.small { padding: 8px 14px; font-size: 14px; border-radius: 12px; }

.pills { display: flex; gap: 8px; overflow-x: auto; scrollbar-width: none; margin: 0 -16px; padding: 2px 16px; }
.pills::-webkit-scrollbar { display: none; }
.pill {
  flex: none; font: inherit; font-size: 14px; border: 1px solid var(--line); background: var(--surface); color: var(--ink-2);
  padding: 7px 14px; border-radius: 999px; cursor: pointer; white-space: nowrap;
}
.pill.on { background: var(--ink); color: var(--bg); border-color: var(--ink); font-weight: 600; }
.asks { display: flex; flex-wrap: wrap; gap: 8px; }
.ask-chip {
  font: inherit; font-size: 14px; border: 1px solid var(--line); background: var(--surface); color: var(--ink);
  padding: 8px 14px; border-radius: 999px; cursor: pointer; text-align: left;
}

.rows { display: flex; flex-direction: column; }
.row-item {
  display: flex; align-items: center; gap: 12px; padding: 12px 0; border-top: 1px solid var(--line);
  text-decoration: none; color: inherit; background: none; border-left: 0; border-right: 0; border-bottom: 0;
  font: inherit; text-align: left; cursor: pointer; width: 100%;
}
.rows > .row-item:first-child { border-top: 0; padding-top: 2px; }
.rows > .row-item:last-child { padding-bottom: 2px; }
.row-main { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 2px; }
.row-title { font-weight: 600; overflow-wrap: anywhere; }
.row-sub { color: var(--muted); font-size: 13px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.row-end { color: var(--muted); display: flex; align-items: center; gap: 6px; font-size: 14px; flex: none; white-space: nowrap; }

.empty { display: flex; gap: 12px; align-items: center; color: var(--muted); font-size: 14px; }
.empty .i { color: var(--muted); }
.note { background: var(--warn-soft); color: var(--warn); border-radius: var(--radius-sm); padding: 10px 12px; font-size: 13px; }
.error-card { display: flex; gap: 10px; align-items: flex-start; color: var(--warn); }
.fresh { display: inline-flex; align-items: center; gap: 6px; color: var(--muted); font-size: 12.5px; }

/* ---- 首页：今天的状态 ---- */
.hero {
  background: var(--hero); color: var(--hero-ink); border-radius: 24px; padding: 20px; display: flex; flex-direction: column; gap: 16px;
  position: relative; overflow: hidden;
}
.hero::after {
  content: ""; position: absolute; right: -70px; top: -90px; width: 190px; height: 190px; border-radius: 50%;
  border: 22px solid color-mix(in srgb, var(--hero-accent) 9%, transparent); pointer-events: none;
}
.hero > * { position: relative; z-index: 1; }
.hero-kicker { display: flex; align-items: center; gap: 8px; font-size: 13px; color: var(--hero-muted); }
.hero-dot { width: 8px; height: 8px; border-radius: 50%; background: var(--hero-muted); }
.hero-dot.good { background: var(--good); } .hero-dot.attention { background: var(--warn); }
.hero h2 { margin: 0; font-size: 24px; line-height: 1.3; font-weight: 750; letter-spacing: -.01em; text-wrap: balance; }
.hero p { color: var(--hero-muted); font-size: 14px; }
.hero-stats { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); border-top: 1px solid var(--hero-line); padding-top: 14px; gap: 8px; }
.hero-stat { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.hero-stat .k { font-size: 12px; color: var(--hero-muted); display: flex; align-items: center; gap: 5px; }
.hero-stat .v { font-size: 20px; font-weight: 700; font-variant-numeric: tabular-nums; line-height: 1.25; }
.hero-stat .v small { font-size: 12px; font-weight: 500; color: var(--hero-muted); margin-left: 2px; }
.hero-stat .s { font-size: 12px; color: var(--hero-accent); }
.hero-stat .s.attention { color: var(--warn); } .hero-stat .s.none { color: var(--hero-muted); }

.plan-card { gap: 14px; }
.plan-top { display: flex; gap: 14px; align-items: flex-start; }
.plan-icon { width: 44px; height: 44px; border-radius: 14px; background: var(--accent-soft); color: var(--accent); display: grid; place-items: center; flex: none; }
.plan-top h3 { margin: 0 0 2px; font-size: 17px; }

.duo { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; }
.stat { display: flex; flex-direction: column; gap: 4px; min-width: 0; }
.stat .k { font-size: 13px; color: var(--muted); display: flex; align-items: center; gap: 6px; }
.stat .v { font-size: 26px; font-weight: 750; letter-spacing: -.01em; font-variant-numeric: tabular-nums; line-height: 1.15; }
.stat .v small { font-size: 13px; font-weight: 500; color: var(--muted); margin-left: 3px; letter-spacing: 0; }
.divider-v { border-left: 1px solid var(--line); padding-left: 14px; }

/* ---- 指标卡 ---- */
.tiles { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; }
.tile {
  font: inherit; color: inherit; text-align: left; cursor: pointer; border: 1px solid transparent;
  background: var(--surface); border-radius: var(--radius); padding: 14px 14px 12px; box-shadow: var(--shadow);
  display: flex; flex-direction: column; gap: 6px; min-width: 0;
}
@media all { .tile { border-color: var(--line); } }
.tile.wide { grid-column: 1 / -1; }
.tile-head { display: flex; align-items: center; justify-content: space-between; gap: 8px; min-height: 24px; }
.tile-name { font-size: 13.5px; color: var(--muted); font-weight: 500; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.tile-value { font-size: 28px; font-weight: 750; letter-spacing: -.015em; font-variant-numeric: tabular-nums; line-height: 1.1; }
.tile-value small { font-size: 13px; font-weight: 500; color: var(--muted); margin-left: 3px; letter-spacing: 0; }
.tile-foot { display: flex; justify-content: space-between; gap: 8px; color: var(--muted); font-size: 12px; }
.tile.wide .tile-value { font-size: 32px; }
.tile-value.long { font-size: 24px; }
.tile:hover { border-color: var(--line); }
.missing-list .row-item { cursor: default; }

/* 趋势图 */
.spark { position: relative; height: 54px; }
.tile.wide .spark { height: 72px; }
.spark svg { display: block; width: 100%; height: 100%; overflow: visible; }
.spark .line { fill: none; stroke: var(--accent); stroke-width: 2; vector-effect: non-scaling-stroke; }
.spark .area { fill: color-mix(in srgb, var(--accent) 14%, transparent); stroke: none; }
.spark .bar { fill: color-mix(in srgb, var(--accent) 55%, transparent); }
.spark .bar.last { fill: var(--accent); }
.spark .end { position: absolute; width: 9px; height: 9px; border-radius: 50%; background: var(--accent); border: 2px solid var(--surface); transform: translate(-50%, -50%); }
.chart { display: grid; grid-template-columns: auto 1fr; grid-template-rows: 1fr auto; gap: 4px 8px; }
.chart .y { display: flex; flex-direction: column; justify-content: space-between; font-size: 11px; color: var(--muted); text-align: right; font-variant-numeric: tabular-nums; }
.chart .x { grid-column: 2; display: flex; justify-content: space-between; font-size: 11px; color: var(--muted); }
.chart .spark { height: 140px; border-bottom: 1px dashed var(--line); border-top: 1px dashed var(--line); }

/* ---- 详情：底部弹出 ---- */
.sheet-overlay { position: fixed; inset: 0; z-index: 20; background: rgb(255 255 255 / 45%); animation: fade .18s ease-out; }
.sheet {
  position: fixed; z-index: 21; left: 0; right: 0; bottom: 0; max-height: 88dvh; display: flex; flex-direction: column;
  background: var(--surface); border-radius: 24px 24px 0 0; animation: rise .22s cubic-bezier(.2, .8, .2, 1);
  padding-bottom: env(safe-area-inset-bottom, 0px); max-width: var(--max); margin: 0 auto;
}
.sheet-grip { width: 40px; height: 4px; border-radius: 4px; background: var(--line); margin: 10px auto 0; flex: none; }
.sheet-head { display: flex; align-items: flex-start; gap: 12px; padding: 12px 20px 8px; }
.sheet-head h2 { flex: 1; margin: 0; font-size: 20px; line-height: 1.3; }
.icon-btn {
  width: 36px; height: 36px; border-radius: 50%; border: 0; background: var(--sunken); color: var(--ink);
  display: grid; place-items: center; cursor: pointer; flex: none;
}
.sheet-body { overflow-y: auto; padding: 4px 20px 24px; display: flex; flex-direction: column; gap: 18px; }
.sheet-body h3 { margin: 0 0 6px; font-size: 13px; color: var(--muted); font-weight: 600; letter-spacing: .02em; }
.sheet-big { display: flex; align-items: baseline; gap: 10px; flex-wrap: wrap; }
.sheet-big .v { font-size: 38px; font-weight: 750; letter-spacing: -.02em; font-variant-numeric: tabular-nums; line-height: 1.1; }
.sheet-big .v small { font-size: 15px; color: var(--muted); font-weight: 500; margin-left: 4px; letter-spacing: 0; }
.facts { display: flex; flex-direction: column; gap: 14px; margin: 0; }
.facts dt { font-size: 13px; color: var(--muted); font-weight: 600; margin-bottom: 2px; }
.facts dd { margin: 0; }
.steps-ol { margin: 0; padding: 0; list-style: none; counter-reset: s; display: flex; flex-direction: column; gap: 10px; }
.steps-ol li { counter-increment: s; display: flex; gap: 10px; }
.steps-ol li::before {
  content: counter(s); flex: none; width: 24px; height: 24px; border-radius: 50%; background: var(--accent-soft); color: var(--accent);
  font-size: 13px; font-weight: 700; display: grid; place-items: center; margin-top: 1px;
}
.marks { margin: 0; padding: 0; list-style: none; display: flex; flex-direction: column; gap: 8px; }
.marks li { display: flex; gap: 8px; }
.marks .i { margin-top: 3px; }
.marks.ok .i { color: var(--good); } .marks.bad .i { color: var(--warn); }
.swap { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; }
.swap div { background: var(--sunken); border-radius: var(--radius-sm); padding: 10px 12px; display: flex; flex-direction: column; gap: 2px; }
.swap b { font-size: 12px; color: var(--muted); font-weight: 600; }
.tags { display: flex; flex-wrap: wrap; gap: 6px; }

/* ---- 动作 ---- */
.search {
  display: flex; flex-direction: row; align-items: center; gap: 8px; background: var(--surface); border: 1px solid var(--line);
  border-radius: 14px; padding: 0 12px; font-size: 15px; color: var(--ink);
}
.search input { border: 0; background: transparent; padding: 11px 0; flex: 1; min-width: 0; font: inherit; color: var(--ink); outline: none; }
.search .i { color: var(--muted); }
.mark {
  width: 44px; height: 44px; border-radius: 14px; flex: none; display: grid; place-items: center; font-weight: 750; font-size: 16px;
  background: var(--sunken); color: var(--ink-2);
}
.mark.p-腿臀 { background: rgb(18 183 106 / 13%); color: #2c4236; } .mark.p-胸 { background: rgb(255 77 58 / 13%); color: #b5361f; }
.mark.p-背 { background: rgb(255 154 31 / 13%); color: #9a5a00; } .mark.p-肩 { background: rgb(180 140 255 / 13%); color: #6b46c1; }
.mark.p-手臂 { background: rgb(226 184 102 / 13%); color: #8a6a1f; } .mark.p-核心 { background: rgb(200 220 90 / 13%); color: #5f7a12; }
.mark.p-全身 { background: rgb(255 120 90 / 13%); color: #b2452c; } .mark.p-有氧 { background: rgb(220 210 230 / 13%); color: #6b5f78; }
}
.level { font-size: 12px; color: var(--muted); }
.callout { display: flex; gap: 10px; background: var(--warn-soft); color: var(--warn); border-radius: var(--radius-sm); padding: 12px; font-size: 14px; }
.callout .i { margin-top: 2px; }

/* ---- 饮食 ---- */
.meals { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 8px; }
.meal { background: var(--sunken); border-radius: var(--radius-sm); padding: 10px 6px; text-align: center; display: flex; flex-direction: column; gap: 2px; }
.meal b { font-size: 16px; font-variant-numeric: tabular-nums; white-space: nowrap; }
.meal b small { font-size: 11px; font-weight: 500; color: var(--muted); margin-left: 1px; }
.meal span { font-size: 12px; color: var(--muted); }
.target-big { display: flex; align-items: baseline; gap: 8px; flex-wrap: wrap; }
.target-big .v { font-size: 40px; font-weight: 800; letter-spacing: -.02em; font-variant-numeric: tabular-nums; line-height: 1; }
.target-big .u { color: var(--muted); font-size: 15px; }
.meter { height: 8px; border-radius: 8px; background: var(--sunken); overflow: hidden; display: flex; }
.meter span { display: block; height: 100%; }

/* ---- 我的 ---- */
.profile-head { display: flex; align-items: center; gap: 14px; }
.profile-head .avatar { width: 52px; height: 52px; font-size: 20px; margin: 0; }
.kv { display: flex; justify-content: space-between; gap: 16px; padding: 12px 0; border-top: 1px solid var(--line); }
.kv:first-child { border-top: 0; padding-top: 0; }
.kv:last-child { padding-bottom: 0; }
.kv span:first-child { color: var(--muted); }
.kv span:last-child { text-align: right; font-weight: 550; }
.kv .hint { color: var(--muted); font-weight: 400; font-size: 12px; }
form { display: flex; flex-direction: column; gap: 14px; margin: 0; }
label { display: flex; flex-direction: column; gap: 6px; font-size: 13px; color: var(--muted); font-weight: 500; }
input, select, textarea {
  font: inherit; color: var(--ink); background: var(--bg); border: 1px solid var(--line); border-radius: 12px;
  padding: 11px 12px; min-width: 0; width: 100%;
}
.form-actions { display: flex; gap: 10px; }
.form-actions .btn { flex: 1; }
.error { color: var(--warn); font-size: 13px; }

/* ---- 登录 ---- */
.login { max-width: 400px; margin: 12dvh auto 0; display: flex; flex-direction: column; gap: 22px; }
.wordmark { font-size: 40px; font-weight: 850; letter-spacing: -.03em; line-height: 1; }
.wordmark b { color: var(--accent); }
.row { display: flex; gap: 10px; align-items: center; }
.row > input { flex: 1; }

/* ---- 对话：整屏 ---- */
body.chatting .app { padding-bottom: 0; }
.chat { height: 100dvh; display: flex; flex-direction: column; }
.chat-bar {
  display: flex; align-items: center; gap: 10px; padding: calc(10px + env(safe-area-inset-top, 0px)) 0 10px;
  border-bottom: 1px solid var(--line);
}
.chat-bar .who { flex: 1; min-width: 0; display: flex; flex-direction: column; }
.chat-bar .who b { font-size: 17px; }
.chat-bar .who span { font-size: 12px; color: var(--muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.thread { flex: 1; overflow-y: auto; display: flex; flex-direction: column; gap: 14px; padding: 16px 0 12px; overscroll-behavior: contain; }
.msg-user {
  align-self: flex-end; max-width: 82%; background: var(--ink); color: var(--bg); padding: 10px 14px; border-radius: 18px 18px 4px 18px;
  white-space: pre-wrap; overflow-wrap: anywhere;
}
.msg-coach { display: flex; flex-direction: column; gap: 10px; background: var(--surface); border-radius: 18px 18px 18px 4px; padding: 14px 16px; box-shadow: var(--shadow); max-width: 100%; }
@media all { .msg-coach { border: 1px solid var(--line); } }
.answer { display: flex; flex-direction: column; gap: 10px; overflow-wrap: anywhere; }
.answer p { line-height: 1.75; }
.prog { display: flex; flex-direction: column; gap: 8px; }
.prog-head {
  display: flex; align-items: center; gap: 8px; font: inherit; font-size: 13px; color: var(--muted); background: none; border: 0; padding: 0; cursor: pointer; text-align: left;
}
.prog-list { margin: 0; padding: 0; list-style: none; display: flex; flex-direction: column; gap: 8px; border-left: 2px solid var(--line); padding-left: 12px; }
.prog-list li { display: flex; flex-direction: column; gap: 2px; font-size: 13px; }
.prog-list .who { display: flex; align-items: center; gap: 6px; font-weight: 600; color: var(--ink-2); }
.prog-list .what { color: var(--muted); }
.prog-list .res { color: var(--ink-2); white-space: pre-wrap; background: var(--sunken); border-radius: 10px; padding: 8px 10px; margin-top: 4px; }
.spin { width: 14px; height: 14px; border-radius: 50%; border: 2px solid var(--line); border-top-color: var(--accent); animation: spin .8s linear infinite; flex: none; }
.ok-dot { width: 14px; height: 14px; border-radius: 50%; background: var(--good); color: var(--accent-ink); display: grid; place-items: center; flex: none; }
.ok-dot svg { width: 10px; height: 10px; stroke-width: 3; }
.typing { display: inline-flex; gap: 4px; padding: 4px 0; }
.typing i { width: 6px; height: 6px; border-radius: 50%; background: var(--muted); animation: blink 1.2s infinite ease-in-out; }
.typing i:nth-child(2) { animation-delay: .2s; } .typing i:nth-child(3) { animation-delay: .4s; }
.msg-note { font-size: 13px; color: var(--warn); background: var(--warn-soft); border-radius: 10px; padding: 8px 10px; }
.sources { border-top: 1px solid var(--line); padding-top: 8px; }
.sources summary { cursor: pointer; font-size: 13px; color: var(--accent); font-weight: 600; list-style: none; display: inline-flex; align-items: center; gap: 4px; }
.sources summary::-webkit-details-marker { display: none; }
.sources[open] summary .i { transform: rotate(90deg); }
.sources .src { white-space: pre-wrap; font-size: 13px; color: var(--ink-2); margin-top: 8px; line-height: 1.65; }
.rate { display: flex; gap: 6px; }
.rate button {
  font: inherit; font-size: 12.5px; display: inline-flex; align-items: center; gap: 4px; border: 1px solid var(--line); background: transparent;
  color: var(--muted); border-radius: 999px; padding: 5px 10px; cursor: pointer;
}
.rate button.on { background: var(--accent-soft); color: var(--accent); border-color: transparent; font-weight: 600; }
.welcome { margin: auto 0; display: flex; flex-direction: column; gap: 16px; padding: 12px 0; }
.welcome .mark-big { width: 56px; height: 56px; border-radius: 18px; background: var(--ink); color: var(--bg); display: grid; place-items: center; }
.welcome h2 { margin: 0; font-size: 24px; }
.starters { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; }
.starter {
  font: inherit; text-align: left; background: var(--surface); border: 1px solid var(--line); border-radius: 16px; padding: 12px 14px; cursor: pointer;
  color: var(--ink); display: flex; flex-direction: column; gap: 4px;
}
.starter span { font-size: 12px; color: var(--muted); }
.composer {
  display: flex; flex-direction: row; align-items: flex-end; gap: 8px; padding: 10px 0 calc(10px + env(safe-area-inset-bottom, 0px));
  border-top: 1px solid var(--line); background: var(--bg);
}
.composer textarea {
  resize: none; max-height: 140px; line-height: 1.5; border-radius: 20px; padding: 10px 14px; background: var(--surface);
}
.send {
  width: 42px; height: 42px; border-radius: 50%; border: 0; background: var(--accent); color: var(--accent-ink); display: grid; place-items: center; cursor: pointer; flex: none;
}
.send:disabled { background: var(--sunken); color: var(--muted); cursor: default; }
.send.stop { background: var(--ink); color: var(--bg); }

@keyframes spin { to { transform: rotate(360deg); } }
@keyframes blink { 0%, 80%, 100% { opacity: .25; } 40% { opacity: 1; } }
@keyframes fade { from { opacity: 0; } }
@keyframes rise { from { transform: translateY(40px); opacity: .4; } }
.skeleton { background: linear-gradient(90deg, var(--sunken), var(--surface), var(--sunken)); background-size: 200% 100%; animation: shimmer 1.2s infinite; border-radius: var(--radius); }
@keyframes shimmer { to { background-position: -200% 0; } }
@media (prefers-reduced-motion: reduce) { *, *::before, *::after { animation: none !important; } .hero .scan { display: none; } }

/* 桌面：内容更宽松一些，详情改成居中的对话框 */
@media (min-width: 760px) {
  .sheet { bottom: auto; top: 50%; transform: translateY(-50%); border-radius: 24px; max-height: 80dvh; animation: fade .18s ease-out; width: min(560px, calc(100% - 48px)); left: 0; right: 0; }
  .sheet-grip { display: none; }
  .hero { padding: 24px; }
}
input:focus, select:focus, textarea:focus { outline: none; border-color: var(--accent); box-shadow: 0 0 0 3px var(--accent-soft); }
.search:focus-within { border-color: var(--accent); box-shadow: 0 0 0 3px var(--accent-soft); }
.search input:focus { box-shadow: none; }

/* ---- 添加数据：上传报告、随手记、导入苹果健康、基因数据、连接设备 ---- */
.adds { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; }
.add {
  background: var(--surface); border: 1px solid transparent; border-radius: var(--radius-sm); padding: 12px; box-shadow: var(--shadow);
  display: flex; gap: 10px; align-items: flex-start; cursor: pointer; min-width: 0;
}
.add:last-child:nth-child(odd) { grid-column: 1 / -1; }
.add:hover, .add-mini:hover { border-color: var(--line); }
.add-icon { width: 36px; height: 36px; border-radius: 11px; background: var(--accent-soft); color: var(--accent); display: grid; place-items: center; flex: none; }
.add-icon .i { width: 20px; height: 20px; }
.add-text { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.add-text b { font-size: 14.5px; }
.add-text span { font-size: 12px; color: var(--muted); line-height: 1.45; }
.add-row { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 8px; }
.add-mini {
  font: inherit; font-size: 12.5px; color: var(--ink-2); background: var(--surface); border: 1px solid transparent; border-radius: var(--radius-sm);
  padding: 12px 4px 10px; display: flex; flex-direction: column; align-items: center; gap: 6px; cursor: pointer; box-shadow: var(--shadow); white-space: nowrap;
}
@media all { .add, .add-mini { border-color: var(--line); } }
.drop {
  display: flex; flex-direction: column; align-items: center; justify-content: center; text-align: center; gap: 6px;
  padding: 22px 16px; border: 1.5px dashed var(--line); border-radius: var(--radius-sm); background: var(--bg); color: var(--ink); cursor: pointer; font-size: 14px;
}
.drop .i { color: var(--accent); width: 28px; height: 28px; }
.drop b { font-weight: 650; }
.drop span { color: var(--muted); font-size: 12.5px; line-height: 1.5; }
.drop.over, .drop:focus-within { border-color: var(--accent); background: var(--accent-soft); }
.sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0; }
.progress { height: 6px; border-radius: 6px; background: var(--sunken); overflow: hidden; }
.progress span { display: block; height: 100%; width: 0; background: var(--accent); transition: width .2s; }
.row-item .mark { width: 36px; height: 36px; border-radius: 11px; }

/* ---- 今日简报、今天的训练、每周复盘 ---- */
.hero-alert { display: flex; gap: 8px; align-items: flex-start; margin: 0; padding: 10px 12px; border-radius: 12px; background: rgb(242 193 78 / 14%); color: var(--hero-ink, inherit); font-size: 13.5px; line-height: 1.5; }
.hero-alert .i { color: var(--warn); flex: none; margin-top: 2px; }
.notice-line { display: flex; gap: 8px; align-items: flex-start; font-size: 14px; color: var(--warn); background: var(--warn-soft); border-radius: 12px; padding: 10px 12px; }
.notice-line .i { flex: none; margin-top: 2px; }
.plan-items { margin: 0; padding-left: 20px; display: flex; flex-direction: column; gap: 6px; font-size: 14.5px; line-height: 1.5; }
.plan-items li::marker { color: var(--muted); }
.btn-row { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; }
.tips { margin: 4px 0 0; padding-left: 20px; display: flex; flex-direction: column; gap: 6px; font-size: 14px; line-height: 1.55; }
.rpe { display: grid; grid-template-columns: repeat(10, minmax(0, 1fr)); gap: 6px; }
.rpe button { padding: 10px 0; border-radius: 10px; border: 1px solid var(--line); background: var(--surface); color: var(--ink); font: inherit; font-weight: 600; cursor: pointer; }
.rpe button.on { background: var(--ink); color: var(--bg); border-color: var(--ink); }
.sheet-body input[type="text"] { width: 100%; padding: 12px 14px; border-radius: 12px; border: 1px solid var(--line); background: var(--surface); color: var(--ink); font: inherit; }

/* ---- 对话里的预览卡片 ---- */
.preview { margin-top: 10px; border: 1px solid var(--line); border-radius: 16px; padding: 14px; display: flex; flex-direction: column; gap: 10px; background: var(--surface); }
.preview.confirmed { border-color: var(--good); }
.preview.cancelled, .preview.undone { opacity: .7; }
.pv-title { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.pv-title .muted { flex-basis: 100%; }
.pv-session { border-top: 1px solid var(--line); padding-top: 10px; }
.pv-session.changed .pv-head b { color: var(--accent); }
.pv-head { display: flex; justify-content: space-between; gap: 8px; }
.preview ul { margin: 6px 0 0; padding-left: 18px; display: flex; flex-direction: column; gap: 4px; font-size: 14px; line-height: 1.5; }
.card-changes { margin: 0; font-size: 14px; color: var(--ink-2); }
.pv-actions { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; }

/* ---- 对话附件 ---- */
.clip { width: 40px; height: 40px; border-radius: 50%; display: grid; place-items: center; color: var(--ink-2); background: var(--sunken); cursor: pointer; flex: none; align-self: flex-end; }
.clip:focus-within { outline: 2px solid var(--accent); }
.attach-row { display: flex; flex-wrap: wrap; gap: 6px; padding: 0 2px 8px; }
.attach { display: inline-flex; align-items: center; gap: 6px; max-width: 100%; padding: 6px 8px 6px 10px; border-radius: 999px; background: var(--sunken); font-size: 13px; }
.attach.bad { color: var(--warn); }
.attach-name { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; max-width: 160px; }
.attach small { color: var(--muted); }
.attach button { border: 0; background: transparent; color: inherit; padding: 2px; cursor: pointer; display: grid; place-items: center; }
.msg-files { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 6px; font-size: 12.5px; opacity: .85; }
.msg-files span { display: inline-flex; align-items: center; gap: 4px; }

/* ---- 前端改版（spec [2026-10-23] §13）---- */
/* 状态卡里的天气 */
.wx, .wx-row { border-top: 1px solid var(--hero-line); padding-top: 14px; display: flex; flex-direction: column; gap: 6px; cursor: pointer; }
.wx-row { flex-direction: row; align-items: center; gap: 8px; color: var(--hero-muted); font-size: 14px; text-decoration: none; }
.wx-row span { flex: 1; }
.wx-main { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.wx-main b { font-size: 22px; font-weight: 700; font-variant-numeric: tabular-nums; }
.wx-text { color: var(--hero-muted); font-size: 13.5px; }
.aqi { font-size: 12px; font-weight: 650; padding: 3px 8px; border-radius: 999px; background: var(--good-soft); color: var(--good); }
.aqi.mid { background: var(--warn-soft); color: var(--warn); } .aqi.bad { background: var(--heat-soft); color: var(--heat); }
.hero .wx-advice { color: var(--hero-ink); font-size: 13.5px; }
.hero .wx-advice.indoor, .hero .wx-advice.avoid { color: var(--warn); }
/* 计划表 */
.pt-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 12px; }
.pt-head h3 { margin: 0 0 2px; font-size: 17px; }
.pt { display: flex; flex-direction: column; border-radius: var(--radius-sm); overflow: hidden; border: 1px solid var(--line); }
.pt-row { display: grid; grid-template-columns: 44px 1fr auto 16px; align-items: center; gap: 10px; padding: 10px 12px; border-top: 1px solid var(--line); font-size: 14.5px; }
.pt-row:first-child { border-top: 0; }
.pt-row[role="button"] { cursor: pointer; }
.pt-row.rest { color: var(--muted); }
.pt-row.today { background: var(--accent-soft); font-weight: 650; }
.pt-row.today .pt-day { color: var(--accent); }
.pt-day { color: var(--muted); font-size: 13px; }
.pt-min { color: var(--muted); font-size: 12.5px; }
/* 训练日历 */
.cal-head { display: flex; align-items: center; justify-content: space-between; }
.cal-head b { font-size: 16px; }
.cal-grid { display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)); gap: 6px; text-align: center; }
.cal-week span { font-size: 12px; color: var(--muted); }
.cal-cell { aspect-ratio: 1; display: grid; place-items: center; border-radius: 50%; font-size: 14px; font-variant-numeric: tabular-nums; color: var(--ink-2); }
.cal-cell.blank { visibility: hidden; }
.cal-cell.lit { background: var(--accent); color: var(--accent-ink); font-weight: 700; }
.cal-cell.has:not(.lit) { background: var(--sunken); }
.cal-cell.today { box-shadow: inset 0 0 0 2px var(--accent); }
.cal-cell[role="button"] { cursor: pointer; }
.dot-state { width: 10px; height: 10px; border-radius: 50%; background: var(--line); flex: none; }
.dot-state.on { background: var(--accent); }
/* 动作卡片 */
.move-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; }
@media (min-width: 560px) { .move-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); } }
.move-card { background: var(--surface); border-radius: var(--radius); overflow: hidden; box-shadow: var(--shadow); cursor: pointer; display: flex; flex-direction: column; border: 1px solid transparent; }
@media all { .move-card { border-color: var(--line); } }
.move-cover { position: relative; aspect-ratio: 4 / 3; display: grid; place-items: center; background: var(--sunken); }
.move-cover video { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }
.cover-mark { font-size: 34px; font-weight: 800; opacity: .85; }
.move-cover .play { position: absolute; width: 34px; height: 34px; border-radius: 50%; display: grid; place-items: center; background: rgb(15 42 29 / 45%); color: #fff; }
.cover-level { position: absolute; left: 8px; top: 8px; font-size: 11px; font-weight: 650; padding: 3px 7px; border-radius: 999px; background: color-mix(in srgb, var(--surface) 85%, transparent); color: var(--ink-2); }
.move-info { padding: 10px 12px 12px; display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.move-info b { font-size: 15px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.move-info span { font-size: 12.5px; color: var(--muted); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.move-cover.p-腿臀, .empty-video.p-腿臀 { background: rgb(18 183 106 / 10%); color: #2c4236; } .move-cover.p-胸, .empty-video.p-胸 { background: rgb(255 77 58 / 10%); color: #b5361f; }
.move-cover.p-背, .empty-video.p-背 { background: rgb(255 154 31 / 10%); color: #9a5a00; } .move-cover.p-肩, .empty-video.p-肩 { background: rgb(180 140 255 / 10%); color: #6b46c1; }
.move-cover.p-手臂, .empty-video.p-手臂 { background: rgb(226 184 102 / 10%); color: #8a6a1f; } .move-cover.p-核心, .empty-video.p-核心 { background: rgb(200 220 90 / 10%); color: #5f7a12; }
.move-cover.p-全身, .empty-video.p-全身 { background: rgb(255 120 90 / 10%); color: #b2452c; } .move-cover.p-有氧, .empty-video.p-有氧 { background: rgb(220 210 230 / 10%); color: #6b5f78; }
.move-video { width: 100%; aspect-ratio: 16 / 9; border-radius: var(--radius-sm); background: #000; }
.empty-video { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 6px; background: var(--sunken); text-align: center; padding: 12px; }
.admin-box { border-top: 1px dashed var(--line); padding-top: 14px; display: flex; flex-direction: column; gap: 10px; }
/* 饮食 */
.fmeter { display: flex; flex-direction: column; gap: 6px; }
.fmeter-top { display: flex; justify-content: space-between; font-size: 14px; color: var(--muted); }
.fmeter-top b { color: var(--ink); font-size: 20px; font-variant-numeric: tabular-nums; }
.meter span { background: var(--accent); border-radius: 8px; }
.meter span.over { background: var(--warn); }
.photo-row { display: flex; gap: 10px; align-items: stretch; }
.photo-pick { flex: 1; flex-direction: row; align-items: center; justify-content: center; gap: 8px; border: 1.5px dashed var(--line); border-radius: var(--radius-sm); padding: 14px; color: var(--ink-2); cursor: pointer; font-size: 14px; }
.photo-pick .i { color: var(--accent); }
.photo-preview { position: relative; width: 84px; flex: none; }
.photo-preview img { width: 84px; height: 84px; object-fit: cover; border-radius: var(--radius-sm); display: block; }
.photo-preview .icon-btn { position: absolute; top: -8px; right: -8px; width: 28px; height: 28px; }
.meal-thumb { width: 44px; height: 44px; border-radius: 12px; background: var(--sunken); display: grid; place-items: center; overflow: hidden; flex: none; color: var(--muted); }
.meal-thumb img, .meal-photo img { width: 100%; height: 100%; object-fit: cover; display: block; }
.meal-photo { border-radius: var(--radius-sm); overflow: hidden; max-height: 260px; }
.macro-grid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 8px; }
.macro-grid div { background: var(--sunken); border-radius: var(--radius-sm); padding: 10px 6px; text-align: center; display: flex; flex-direction: column; gap: 2px; }
.macro-grid b { font-size: 17px; font-variant-numeric: tabular-nums; }
.macro-grid b small { font-size: 11px; color: var(--muted); font-weight: 500; margin-left: 1px; }
.macro-grid span { font-size: 12px; color: var(--muted); }
.rec { display: flex; flex-direction: column; gap: 10px; border-top: 1px solid var(--line); padding-top: 12px; }
.rec h3 { margin: 0; font-size: 17px; }
.preset .row-title { display: flex; align-items: center; gap: 6px; }
.scene { font-size: 11px; font-weight: 600; color: var(--muted); background: var(--sunken); padding: 2px 6px; border-radius: 6px; }
.preset .row-sub { white-space: normal; }
/* 肌肉人体图 */
/* 平面人体图（§57 修改：openGym 那种，MuscleMap 原图）：没练的深灰、练了的从深绿、亮绿到黄绿（§58） */
.flat-body { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 6px; min-height: 260px; align-items: start; }
.flat-body > .muted, .flat-body > .part-list { grid-column: 1 / -1; }
.flat-body figure { margin: 0; display: flex; flex-direction: column; align-items: center; gap: 4px; min-width: 0; }
.flat-body figcaption { font-size: 12px; color: var(--muted); }
.flat-svg { width: 100%; max-width: 230px; height: auto; display: block; }
.flat-svg .mm-base path { fill: #e1ebe5; }
.flat-svg .mm-hair path { fill: #dbe7e0; }
.flat-svg .mm { cursor: pointer; outline: none; }
.flat-svg .mm path { transition: opacity .15s; }
.flat-svg .mm:hover path, .flat-svg .mm:focus-visible path { opacity: .72; }
/* 人体图改粗（spec [2026-10-23] §70）：练过亮、没练灰、说还酸红；选中描轮廓 */
/* 恢复度（§70 修改、§94 配色）：刚练过亮橙发光，恢复中琥珀由深到浅，可以练淡绿，最近没练灰 */
.flat-svg .mm.t-high path, i.t-high { fill: var(--load-hot); background: var(--load-hot); }
.flat-svg .mm.t-high { filter: drop-shadow(0 0 3px var(--load-hot)); }
.flat-svg .mm.t-mid path, i.t-mid { fill: var(--load-mid); background: var(--load-mid); }
.flat-svg .mm.t-low path, i.t-low { fill: var(--load-low); background: var(--load-low); }
.flat-svg .mm.t-ready path, i.t-ready { fill: var(--load-ready); background: var(--load-ready); }
.flat-svg .mm.t-none path, i.t-none { fill: var(--load-none); background: var(--load-none); }
.mr-sets.t-high { color: var(--load-hot); } .mr-sets.t-mid, .mr-sets.t-low { color: var(--load-mid); }
.mr-sets.t-ready { color: var(--accent); } .mr-sets.t-none { color: var(--muted); } .mr-sets.sore { color: var(--heat); }
.sheet-big .v.t-high { color: var(--load-hot); } .sheet-big .v.t-mid, .sheet-big .v.t-low { color: var(--load-mid); }
.sheet-big .v.t-ready { color: var(--accent); } .sheet-big .v.sore { color: var(--heat); }
.mm-hint { grid-column: 1 / -1; margin: 0; display: flex; align-items: center; gap: 6px; font-size: 12.5px; color: var(--muted); }
.flat-body { position: relative; }
.mm-pick.bubble {
  position: absolute; z-index: 5; width: max-content; max-width: 220px; transform: translate(-50%, calc(-100% - 12px));
  box-shadow: 0 10px 24px rgb(15 42 29 / 45%); animation: fade .15s ease;
}
.mm-pick.bubble::after {
  content: ""; position: absolute; left: 50%; bottom: -6px; width: 10px; height: 10px; transform: translateX(-50%) rotate(45deg);
  background: var(--sunken); border-right: 1px solid var(--line-hi); border-bottom: 1px solid var(--line-hi);
}
.flat-svg .mm.sore path { fill: var(--heat); }
.flat-svg .mm.sel path { stroke: var(--ink); stroke-width: 3; vector-effect: non-scaling-stroke; paint-order: stroke; }
.flat-body.picking .mm:not(.sel) path, .flat-body.picking .mm-base path { opacity: .38; }  /* 选中后其余变暗，轮廓范围一眼看出 */
.flat-svg .mm.t-none.sel path { fill: #7c8f85; }
.mm-pick { grid-column: 1 / -1; display: flex; align-items: center; justify-content: space-between; gap: 10px; padding: 8px 12px; border-radius: var(--radius-sm); background: var(--sunken); border: 1px solid var(--line-hi); }
.mm-pick > span { display: flex; flex-direction: column; min-width: 0; }
.mm-pick small { color: var(--muted); font-size: 12.5px; }
.legend i.mm-sore { background: var(--heat); }
.recover-box.sore { background: var(--heat-soft); }
.recover-box.sore b { color: var(--heat); }
.part-list { display: flex; flex-direction: column; gap: 10px; }
.part-group h3 { margin: 6px 0 2px; font-size: 13px; color: var(--muted); font-weight: 600; }
.all-muscles summary { cursor: pointer; font-size: 14px; color: var(--ink-2); padding: 6px 0; }
.legend { display: flex; flex-wrap: wrap; gap: 12px; font-size: 12.5px; color: var(--muted); justify-content: center; }
.legend span { display: inline-flex; align-items: center; gap: 6px; }
.legend i { width: 12px; height: 12px; border-radius: 4px; display: inline-block; }
/* 更多指标折叠 */
.pt-head .link { white-space: nowrap; flex: none; }
.cal-cell { width: 100%; max-width: 44px; justify-self: center; }
.sheet-stack { display: flex; flex-direction: column; gap: 12px; }

/* 今天的版本（spec [2026-10-23] §18 需求 3） */
.tv { display: flex; flex-direction: column; gap: 10px; border-top: 1px solid var(--line); padding-top: 12px; }
.tv-head { display: flex; flex-direction: column; gap: 8px; }
.tv-why { margin: 0; padding-left: 18px; font-size: 14px; }
.tv-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; font-size: 13px; }
.tv-grid .plan-items { padding-left: 16px; margin: 4px 0 0; }

/* 每组的重量和次数、下次目标（spec [2026-10-23] §18 需求 4） */
.sets-form { border: 1px solid var(--line); border-radius: 12px; padding: 10px 12px; }
.sets-form summary { cursor: pointer; font-size: 14px; color: var(--ink-2); }
.sets-ex { display: flex; flex-direction: column; gap: 6px; margin-top: 12px; }
.sets-name { display: flex; justify-content: space-between; gap: 8px; font-size: 14px; flex-wrap: wrap; }
.sets-grid { display: flex; flex-direction: column; gap: 6px; }
.sets-grid label { display: grid; grid-template-columns: 44px 1fr 14px 1fr; align-items: center; gap: 6px; font-size: 13px; }
.sets-grid input { min-width: 0; padding: 8px; }
.next-target { font-size: 13px; margin-top: 2px; color: var(--ink); }
.next-target.up { color: var(--good, var(--ink)); font-weight: 600; }
.next-target.down { color: var(--warn); }

/* 触发型调整的提醒（spec [2026-10-23] §18 需求 5） */
.triggers { display: flex; flex-direction: column; gap: 12px; }
.triggers:empty { display: none; }
.trigger { display: flex; flex-direction: column; gap: 10px; }
.trigger p { margin: 2px 0 0; }

/* 目标进度（spec [2026-10-23] §18 需求 6） */
.goal-box:empty { display: none; }
.goal { display: flex; flex-direction: column; gap: 10px; }
.goal p { margin: 0; }
.goal-head { display: flex; justify-content: space-between; align-items: baseline; gap: 8px; flex-wrap: wrap; }
.goal-nums { display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; text-align: center; }
.goal-nums div { display: flex; flex-direction: column; gap: 2px; background: var(--neutral-soft); border-radius: 12px; padding: 8px 4px; }
.goal-nums b { font-size: 20px; }
.tone-good { color: var(--good); }
.tone-warn { color: var(--warn); }

/* ==== 白色基调的赛博风、运动橙红主色（spec [2026-10-23] §28，取代 §27 的颜色；版式沿用 §27）：放在最后，统一覆盖上面的组件 ==== */
svg.i { stroke-width: 1.7; }
body {
  background:
    radial-gradient(55% 35% at 100% -6%, rgb(18 183 106 / 9%), transparent 65%),
    radial-gradient(50% 35% at -12% 106%, rgb(226 184 102 / 5%), transparent 65%),
    linear-gradient(rgb(15 42 29 / 3.2%) 1px, transparent 1px) 0 0 / 28px 28px,
    linear-gradient(90deg, rgb(15 42 29 / 3.2%) 1px, transparent 1px) 0 0 / 28px 28px,
    var(--bg);
  background-attachment: fixed;
}
.bar { background: color-mix(in srgb, var(--bg) 84%, transparent); }
.bar-kicker { font-family: var(--mono); letter-spacing: .1em; font-size: 11.5px; color: var(--muted); }
.bar-title { font-weight: 750; letter-spacing: .02em; color: var(--ink); }
.avatar { background: var(--surface); color: var(--accent); font-weight: 700; font-family: var(--mono); box-shadow: inset 0 0 0 1px var(--line-hi), var(--shadow); }

/* 标题前的小标记：琥珀到橙的渐变菱形 */
.section-head h2 { font-weight: 750; letter-spacing: .02em; display: inline-flex; align-items: center; gap: 10px; }
.section-head h2::before { content: ""; width: 7px; height: 7px; transform: rotate(45deg); flex: none; background: linear-gradient(135deg, var(--amber), var(--fire)); border-radius: 1px; }

/* 白色面板 */
.card, .tile, .move-card, .add, .add-mini, .msg-coach {
  background: var(--surface); border: 1px solid var(--line); border-radius: var(--radius); box-shadow: var(--shadow);
}
.tile:hover, .add:hover, .add-mini:hover, .move-card:hover { border-color: var(--line-hi); }
/* 关键面板四角的仪表角标 */
.hero, .plan-card, .goal, .msg-coach.inbox { position: relative; }
.hero::before, .hero::after, .plan-card::before, .plan-card::after,
.goal::before, .goal::after, .msg-coach.inbox::before, .msg-coach.inbox::after {
  content: ""; position: absolute; width: 12px; height: 12px; border: 0 solid rgb(18 183 106 / 55%); pointer-events: none; z-index: 2; display: block;
}
.hero::before, .plan-card::before, .goal::before, .msg-coach.inbox::before { top: -1px; left: -1px; right: auto; bottom: auto; border-width: 1.5px 0 0 1.5px; border-radius: var(--radius) 0 0 0; }
.hero::after, .plan-card::after, .goal::after, .msg-coach.inbox::after { bottom: -1px; right: -1px; top: auto; left: auto; border-width: 0 1.5px 1.5px 0; border-radius: 0 0 var(--radius) 0; }

/* 按钮：切角，橙到红的渐变 */
.btn {
  font-weight: 700; letter-spacing: .05em; border-radius: 0; padding: 13px 22px;
  clip-path: polygon(10px 0, 100% 0, 100% calc(100% - 10px), calc(100% - 10px) 100%, 0 100%, 0 10px);
  background: linear-gradient(120deg, var(--fire), var(--fire-2)); color: var(--accent-ink);
  transition: transform .08s ease, filter .15s ease;
}
.btn:not(:disabled):hover { filter: brightness(1.06) saturate(1.05); }
.btn:not(:disabled):active { transform: scale(.97); }
.btn.ghost { background: var(--surface); color: var(--ink); font-weight: 650; box-shadow: inset 0 0 0 1px rgb(15 42 29 / 14%); }
.btn.small { padding: 9px 16px; clip-path: polygon(7px 0, 100% 0, 100% calc(100% - 7px), calc(100% - 7px) 100%, 0 100%, 0 7px); }
.btn.danger { clip-path: none; border-radius: var(--radius-sm); background: transparent; color: var(--heat); }
.btn.quiet { clip-path: none; background: transparent; }
.link, .section-head a { color: var(--accent); font-weight: 650; }

/* 选中态：淡描边加浅底 */
.pill { background: var(--surface); border-color: var(--line); font-weight: 550; border-radius: 6px; color: var(--ink-2); }
.pill.on { background: var(--accent-soft); color: var(--accent); border-color: var(--line-hi); font-weight: 700; }
.ask-chip { background: var(--surface); border-color: var(--line); border-radius: 6px; }
.chip { background: var(--sunken); font-family: var(--mono); letter-spacing: .02em; border-radius: 4px; color: var(--ink-2); }
.chip.good { background: var(--good-soft); color: var(--good); }
.chip.attention { background: var(--heat-soft); color: var(--heat); }
.notice-line, .callout, .note { background: var(--warn-soft); color: var(--ink-2); border-left: 2px solid var(--warn); border-radius: 2px var(--radius-sm) var(--radius-sm) 2px; }
.notice-line .i, .callout .i { color: var(--warn); }

/* 今日战报：顶部一条琥珀、橙、玫红的渐变细线 */
.hero {
  border: 1px solid var(--line); border-radius: var(--radius); gap: 18px; overflow: hidden; box-shadow: var(--shadow-lg);
  background:
    linear-gradient(90deg, var(--amber), var(--fire) 45%, var(--rose)) top / 100% 2px no-repeat,
    linear-gradient(rgb(15 42 29 / 3%) 1px, transparent 1px) 0 0 / 22px 22px,
    linear-gradient(90deg, rgb(15 42 29 / 3%) 1px, transparent 1px) 0 0 / 22px 22px,
    radial-gradient(80% 90% at 100% 0%, rgb(18 183 106 / 7%), transparent 62%),
    var(--hero);
}
.hero .scan { position: absolute; inset: 0; pointer-events: none; z-index: 0;
  background: linear-gradient(180deg, transparent, rgb(18 183 106 / 4%) 50%, transparent); height: 40%; animation: scan 8s linear infinite; }
@keyframes scan { from { transform: translateY(-110%); } to { transform: translateY(260%); } }
.hero-kicker { gap: 10px; }
.hero-tag {
  display: inline-block; background: var(--accent-soft); color: var(--accent); font-weight: 600; font-size: 11.5px; letter-spacing: .16em;
  padding: 3px 9px; border: 1px solid var(--line-hi); border-radius: 3px; font-family: var(--mono);
}
.hero-main { display: flex; align-items: center; justify-content: space-between; gap: 14px; }
.hero-text { min-width: 0; display: flex; flex-direction: column; gap: 8px; }
.hero .hero-title { margin: 0; font-size: 31px; line-height: 1.18; font-weight: 750; letter-spacing: .02em; overflow-wrap: anywhere; color: var(--ink); }
.hero .hero-push { color: var(--ink-2); font-size: 15px; font-weight: 500; line-height: 1.55; }
.hero .hero-why { color: var(--muted); font-size: 13px; margin-top: -6px; }
.hero p { color: var(--ink-2); }
.hero-stats { padding-top: 16px; border-top: 1px solid var(--hero-line); }
.hero-stat .k { font-size: 11.5px; letter-spacing: .06em; color: var(--muted); }
.hero-stat .v { font-size: 23px; font-weight: 600; font-family: var(--mono); white-space: nowrap; color: var(--ink); }
.hero-stat .v small { color: var(--muted); }
.hero-stat .v.state-good { color: var(--good); } .hero-stat .v.state-attention { color: var(--heat); }
.hero .wx, .hero .wx-row { border-top-color: var(--hero-line); color: var(--ink-2); }
.hero-alert { background: var(--warn-soft); color: var(--ink-2); }

/* 本周进度环：带刻度的仪表盘 */
.ring { --p: 0; width: 108px; height: 108px; border-radius: 50%; flex: none; display: grid; place-items: center; position: relative; background: none; }
.ring::before {
  content: ""; position: absolute; inset: 0; border-radius: 50%;
  background: conic-gradient(from 0deg, var(--amber), var(--fire) calc(var(--p) * 360deg), rgb(15 42 29 / 9%) 0);
  -webkit-mask: repeating-conic-gradient(#000 0 5deg, transparent 5deg 7.5deg), radial-gradient(farthest-side, transparent calc(100% - 10px), #000 calc(100% - 9px));
  -webkit-mask-composite: source-in; mask-composite: intersect;
  mask: repeating-conic-gradient(#000 0 5deg, transparent 5deg 7.5deg), radial-gradient(farthest-side, transparent calc(100% - 10px), #000 calc(100% - 9px));
}
.ring-in {
  width: 78px; height: 78px; border-radius: 50%; background: var(--surface); border: 1px solid var(--line); display: flex; flex-direction: column;
  align-items: center; justify-content: center; line-height: 1; position: relative; box-shadow: inset 0 0 0 4px var(--sunken);
}
.ring-in b { font-size: 30px; font-weight: 600; font-family: var(--mono); font-variant-numeric: tabular-nums; color: var(--ink); }
.ring-in span { font-size: 11.5px; color: var(--muted); margin-top: 2px; font-family: var(--mono); }
.ring-in small { font-size: 10.5px; color: var(--accent); font-weight: 600; letter-spacing: .14em; margin-top: 4px; }

/* 数字：等宽 */
.tile-value, .stat .v, .sheet-big .v, .target-big .v, .fmeter-top b, .goal-nums b, .macro-grid b, .wx-main b, .meal b {
  font-family: var(--mono); font-weight: 600; font-variant-numeric: tabular-nums; letter-spacing: -.01em; color: var(--ink);
}
.tile-value small, .sheet-big .v small, .target-big .u { font-family: var(--font); color: var(--muted); }
.tile-name { letter-spacing: .03em; }
.goal-nums div { background: var(--sunken); border: 1px solid transparent; }
.goal-nums b { font-size: 24px; }
.goal-nums div:nth-child(2) { border-color: var(--line-hi); background: var(--accent-soft); }
.goal-nums div:nth-child(2) b { color: var(--accent); }
.tone-good { color: var(--good); } .tone-warn { color: var(--warn); }
.spark .line { stroke: var(--accent); stroke-width: 1.6; }
.spark .area { fill: rgb(18 183 106 / 8%); }
.spark .bar { fill: rgb(18 183 106 / 28%); } .spark .bar.last { fill: var(--accent); }
.spark .end { background: var(--accent); box-shadow: 0 0 0 3px var(--accent-soft); border-color: var(--surface); }

/* 计划表与今天的版本 */
.pt { border-color: var(--line); border-radius: var(--radius-sm); }
.pt-row { font-variant-numeric: tabular-nums; }
.pt-day, .pt-min { font-family: var(--mono); }
.pt-row.today { background: linear-gradient(90deg, var(--accent-soft), transparent 80%); box-shadow: inset 2px 0 0 var(--accent); font-weight: 650; }
.pt-row.today .pt-day { color: var(--accent); font-weight: 700; }
.plan-items li::marker { color: var(--accent); font-family: var(--mono); }
.next-target.up { color: var(--good); }
.tv-grid > div:last-child .plan-items { color: var(--ink); }
.tv-grid > div:last-child > .muted { color: var(--accent); font-weight: 700; }

/* 日历 */
.cal-cell { font-family: var(--mono); border-radius: 8px; }
.cal-cell.lit { background: var(--accent-soft); color: var(--accent); font-weight: 700; box-shadow: inset 0 0 0 1px rgb(18 183 106 / 40%); }
.cal-cell.today { box-shadow: inset 0 0 0 1px rgb(15 42 29 / 25%); color: var(--ink); }
.cal-cell.lit.today { box-shadow: inset 0 0 0 1.5px var(--accent); }
.cal-cell.has:not(.lit) { background: var(--sunken); }
.dot-state.on { background: var(--accent); }

/* 底部导航 */
.tabs { background: rgb(255 255 255 / 90%); border-top: 1px solid var(--line); -webkit-backdrop-filter: blur(14px); backdrop-filter: blur(14px); }
.tabs a { color: var(--muted); }
.tabs a.on { color: var(--accent); font-weight: 650; }
.tabs a.on .ti { color: var(--accent); }

/* 表单、弹层、对话 */
input, select, textarea { background: var(--surface); border-color: rgb(15 42 29 / 13%); border-radius: var(--radius-sm); color: var(--ink); }
input:focus, select:focus, textarea:focus { border-color: var(--accent); box-shadow: 0 0 0 3px var(--accent-soft); }
.search { background: var(--surface); border-color: rgb(15 42 29 / 13%); }
.sheet { border-top: 1px solid var(--line); background: var(--surface); box-shadow: 0 -12px 40px rgb(15 42 29 / 50%); }
.sheet-overlay { background: rgb(15 42 29 / 55%); }
.sheet-head h2 { font-weight: 750; letter-spacing: .02em; }
.icon-btn { background: var(--sunken); color: var(--ink); }
.rpe button { background: var(--surface); border-color: var(--line); font-weight: 600; font-family: var(--mono); border-radius: 6px; }
.rpe button.on { background: var(--accent-soft); color: var(--accent); border-color: var(--line-hi); }
.msg-user { background: linear-gradient(120deg, var(--fire), var(--fire-2)); color: var(--accent-ink); border: 0; font-weight: 500; }
.send { background: linear-gradient(120deg, var(--fire), var(--fire-2)); color: var(--accent-ink); }
.send:disabled { background: var(--sunken); color: var(--muted); }
.welcome .mark-big { background: var(--accent-soft); color: var(--accent); box-shadow: inset 0 0 0 1px var(--line-hi); }
.starter { background: var(--surface); box-shadow: var(--shadow); }
.move-cover { background: linear-gradient(rgb(15 42 29 / 3.5%) 1px, transparent 1px) 0 0 / 16px 16px, linear-gradient(90deg, rgb(15 42 29 / 3.5%) 1px, transparent 1px) 0 0 / 16px 16px, var(--sunken); }
.cover-mark { font-weight: 600; font-family: var(--mono); color: rgb(18 183 106 / 70%); }
.cover-level { background: rgb(255 255 255 / 85%); }
.wordmark { font-weight: 800; letter-spacing: .02em; }
.wordmark b { color: var(--accent); }
.meter { background: var(--sunken); }
.meter span, .progress span { background: linear-gradient(90deg, var(--amber), var(--fire)); }
.meter span.over { background: var(--heat); }
.add-icon, .plan-icon { background: var(--accent-soft); color: var(--accent); }

/* 打卡成功的庆祝画面 */
.cheer {
  position: fixed; inset: 0; z-index: 40; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 12px;
  background: radial-gradient(circle at 50% 45%, rgb(18 183 106 / 12%), rgb(255 255 255 / 94%) 60%); text-align: center; padding: 24px;
  animation: cheer-out 2.4s ease forwards; cursor: pointer;
}
.cheer-burst {
  width: 128px; height: 128px; border-radius: 50%; background: linear-gradient(135deg, var(--amber), var(--fire) 50%, var(--fire-2)); color: var(--accent-ink); display: grid; place-items: center;
  box-shadow: 0 0 0 10px rgb(18 183 106 / 8%), 0 18px 50px rgb(18 183 106 / 30%); animation: cheer-pop .5s cubic-bezier(.2, 1.6, .4, 1);
}
.cheer-burst .i { width: 64px; height: 64px; stroke-width: 2.2; }
.cheer-title { font-size: 32px; font-weight: 750; color: var(--ink); letter-spacing: .08em; }
.cheer p { font-size: 15px; color: var(--accent); font-weight: 600; font-family: var(--mono); }
@keyframes cheer-pop { from { transform: scale(.3); opacity: 0; } }
@keyframes cheer-out { 0%, 80% { opacity: 1; } 100% { opacity: 0; } }

/* 完成反馈（spec [2026-10-23] §92）：减少动态效果时上面的全局规则会关掉这些动画 */
@property --p { syntax: "<number>"; inherits: true; initial-value: 0; }
.ring { transition: --p .9s cubic-bezier(.2, .8, .2, 1); }
.confetti { position: fixed; inset: 0; width: 100%; height: 100%; z-index: 60; pointer-events: none; }
.flash {
  position: fixed; left: 50%; top: calc(16px + env(safe-area-inset-top, 0px)); z-index: 55; transform: translateX(-50%);
  width: min(92vw, 380px); padding: 10px 14px; border-radius: 14px; background: var(--surface); color: var(--ink);
  border: 1px solid var(--accent); box-shadow: 0 10px 30px var(--accent-glow); font-size: 14px;
  animation: flash-in .35s cubic-bezier(.2, 1.4, .4, 1), cheer-out 2.4s ease forwards;
}
.flash span { display: inline-flex; align-items: center; gap: 6px; flex-wrap: wrap; }
.flash b { color: var(--accent); }
@keyframes flash-in { from { transform: translate(-50%, -24px); opacity: 0; } }
.set-row { position: relative; }
.set-row.pop { animation: row-pop .6s ease; }
.set-row.pop .live-done { animation: check-pop .45s cubic-bezier(.2, 1.8, .4, 1); }
@keyframes row-pop { 0% { background: var(--accent-glow); } 100% { background: var(--accent-soft); } }
@keyframes check-pop { 0% { transform: scale(.6); } 60% { transform: scale(1.25); } 100% { transform: scale(1); } }
.pr-tag {
  position: absolute; top: -7px; right: 30px; padding: 0 6px; border-radius: 6px; font-size: 10.5px; font-weight: 700; line-height: 16px;
  background: var(--warn); color: var(--accent-ink); letter-spacing: .04em;
}
.live-card.all-done { opacity: .78; }
.live-card.all-done .live-head b { color: var(--accent); }
.done-mark { display: inline-grid; place-items: center; width: 18px; height: 18px; margin-left: 6px; border-radius: 50%; background: var(--accent); color: var(--accent-ink); vertical-align: -2px; }
.done-hero { display: flex; flex-direction: column; align-items: center; gap: 8px; text-align: center; padding-top: 4px; }
.done-hero .cheer-burst { width: 88px; height: 88px; }
.done-hero .cheer-burst .i { width: 44px; height: 44px; }
.done-title { font-size: 26px; font-weight: 750; letter-spacing: .06em; color: var(--ink); }
.live-sum.done-sum { grid-template-columns: repeat(3, minmax(0, 1fr)); }
.done-sum b { font-size: 22px; }
.pr-list { display: flex; flex-direction: column; gap: 8px; }
.pr-item { display: flex; gap: 10px; align-items: center; padding: 10px 12px; border-radius: var(--radius-sm); background: var(--warn-soft); color: var(--warn); }
.pr-item b { color: var(--ink); display: block; }
.done-week { display: flex; align-items: center; gap: 14px; }
.done-week p { margin: 0; color: var(--ink-2); }
/* 个人中心目标进度（§93） */
.goal-progress { display: flex; flex-direction: column; gap: 8px; }
.goal-progress p { margin: 0; color: var(--ink-2); font-size: 13.5px; }
.goal-progress b { color: var(--accent); }
.goal-bar { position: relative; height: 10px; border-radius: 6px; background: var(--sunken); margin: 6px 4px 2px; }
.goal-fill { height: 100%; border-radius: 6px; background: linear-gradient(90deg, var(--amber), var(--fire)); transition: width 1s cubic-bezier(.2, .8, .2, 1); box-shadow: 0 0 12px var(--accent-glow); }
.goal-dot { position: absolute; top: 50%; width: 12px; height: 12px; border-radius: 50%; transform: translate(-50%, -50%); background: var(--surface); border: 2px solid var(--line-hi); }
.goal-dot.on { background: var(--accent); border-color: var(--accent); box-shadow: 0 0 8px var(--accent-glow); }
.goal-won .done-hero p { color: var(--ink-2); margin: 0; }

/* 对话里的管家消息、今日战报里的入口（spec [2026-10-23] §26） */
.hero .hero-inbox { display: flex; align-items: center; gap: 8px; padding: 10px 12px; border-radius: 10px; background: var(--accent-soft); color: var(--accent); font-weight: 750; text-decoration: none; font-size: 14px; }
.hero .hero-inbox span { flex: 1; }
.msg-coach.inbox { border-color: color-mix(in srgb, var(--accent) 40%, var(--line)); gap: 12px; }
.inbox-head { display: flex; align-items: center; gap: 8px; }
.inbox-head .i { color: var(--accent); }
.inbox-list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 10px; }
.inbox-list li { display: grid; grid-template-columns: 40px 1fr; gap: 10px; align-items: start; font-size: 14px; }
.cc-tag { font-size: 11px; font-weight: 850; text-align: center; padding: 3px 0; border-radius: 4px; transform: var(--slant); background: var(--accent-soft); color: var(--accent); }
.cc-tag.changed { background: var(--heat-soft); color: var(--heat); }
.cc-tag.removed { background: var(--sunken); color: var(--muted); }
.cc-main { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.inbox-pending { display: flex; flex-direction: column; gap: 12px; border-top: 1px solid var(--line); padding-top: 12px; }
.inbox-item { display: flex; flex-direction: column; gap: 6px; }
.inbox-item p { margin: 0; }
.inbox-result { display: flex; flex-direction: column; gap: 8px; }

/* 数据页：重要指标没数据时、自己记一条、计算类怎么改（spec [2026-10-23] §26） */
.tile.empty { cursor: default; gap: 8px; justify-content: space-between; align-items: stretch; text-align: left; }
.tile.empty .btn { align-self: flex-start; }
.record-box { display: flex; flex-direction: column; gap: 12px; }
.record-form { display: grid; grid-template-columns: repeat(auto-fit, minmax(130px, 1fr)); gap: 10px; align-items: end; }
.record-form .btn { grid-column: 1 / -1; }
.row-item.reading { cursor: default; }
.row-item.reading input { padding: 8px 10px; }
.danger-link { color: var(--heat); }
.calc-from { display: flex; flex-direction: column; gap: 6px; border-top: 1px solid var(--line); padding-top: 12px; }
.calc-from p { margin: 0; }
.tile.empty .btn .i { color: currentColor; }
.move-cover[class*="p-"], .empty-video[class*="p-"] { background: linear-gradient(rgb(15 42 29 / 3.5%) 1px, transparent 1px) 0 0 / 16px 16px, linear-gradient(90deg, rgb(15 42 29 / 3.5%) 1px, transparent 1px) 0 0 / 16px 16px, linear-gradient(160deg, #eff6f2, #f8fbf9); color: var(--ink-2); }

/* ==== 精简（spec [2026-10-23] §29）：本周一条、今天的训练一张卡、还缺的指标合成一行 ==== */
.tv { display: flex; flex-direction: column; gap: 14px; border-top: 0; padding-top: 0; }
.tv .tv-head { display: flex; flex-direction: row; align-items: flex-start; justify-content: space-between; gap: 12px; }
.tv .tv-head h3 { margin: 0; font-size: 19px; }
.tv .tv-head p { margin: 2px 0 0; }
.tv-adjusted { border-radius: 10px; background: var(--warn-soft); padding: 9px 12px; font-size: 13.5px; }
.tv-adjusted summary { display: flex; align-items: center; gap: 6px; list-style: none; cursor: pointer; color: var(--warn); font-weight: 650; }
.tv-adjusted summary::-webkit-details-marker { display: none; }
.tv-adjusted summary span { flex: 1; }
.tv-adjusted summary em { font-style: normal; font-weight: 500; font-size: 12.5px; }
.tv-adjusted[open] summary .i:last-child { transform: rotate(90deg); }
.tv-adjusted p { margin: 8px 0 0; line-height: 1.6; }
.tv-list { margin: 0; padding-left: 22px; display: flex; flex-direction: column; gap: 9px; font-size: 15px; }
.tv-list li small { display: block; font-size: 12px; margin-top: 1px; }
.lack-row { display: flex; align-items: center; gap: 12px; padding: 13px 14px; margin-top: 10px; cursor: pointer; }
.lack-row .row-end { color: var(--accent); font-weight: 650; display: flex; align-items: center; gap: 2px; white-space: nowrap; }
.inbox-why summary { display: flex; align-items: center; gap: 6px; list-style: none; cursor: pointer; }
.inbox-why summary::-webkit-details-marker { display: none; }
.inbox-why summary b { flex: 1; }
.inbox-why[open] summary .i { transform: rotate(90deg); }
.inbox-why p { margin: 6px 0 0; }
.lack-row { flex-wrap: nowrap; } .lack-row .row-main { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 3px; }

/* ==== 人体图按近 7 天组数分四档深浅（§30） ==== */
i.lv-none { background: #c9d8cf; }
i.lv-low { background: #1f7a47; }
i.lv-mid { background: var(--fire); }
i.lv-high { background: var(--fire-2); }
.muscle-rows { display: flex; flex-direction: column; gap: 2px; }
.muscle-row { display: grid; grid-template-columns: 136px 1fr 52px; align-items: center; gap: 10px; padding: 7px 2px; cursor: pointer; font-size: 14px; }
.muscle-row .mr-name { display: flex; align-items: center; gap: 6px; white-space: nowrap; }
.muscle-row .mr-name em { font-style: normal; font-size: 11px; color: var(--heat); background: var(--heat-soft); padding: 1px 6px; border-radius: 6px; }
.muscle-row .mr-bar { height: 8px; border-radius: 4px; background: var(--sunken); overflow: hidden; }
.muscle-row .mr-bar i { display: block; height: 100%; border-radius: 4px; }
.muscle-row .mr-sets { text-align: right; font-family: var(--mono); font-size: 13px; color: var(--ink-2); }
.legend i.glow { background: var(--fire); box-shadow: 0 0 6px var(--fire); animation: glow 1.3s ease-in-out infinite alternate; }
@keyframes glow { from { opacity: .45; } to { opacity: 1; } }
@media (prefers-reduced-motion: reduce) { .legend i.glow { animation: none; } }
.recover-box { display: flex; flex-direction: column; gap: 8px; padding: 12px 14px; border-radius: 10px; background: var(--good-soft); }
.recover-box b { font-size: 15.5px; color: var(--good); }
.recover-box.recovering, .recover-box.today { background: var(--warn-soft); }
.recover-box.recovering b, .recover-box.today b { color: var(--warn); }
.recover-box.sore { background: var(--heat-soft); }
.recover-box.sore b { color: var(--heat); }
.recover-box p { margin: 0; line-height: 1.6; }
.rest-list { display: flex; flex-wrap: wrap; gap: 8px; }
.rest-chip { display: inline-flex; align-items: baseline; gap: 6px; padding: 6px 10px; border-radius: 8px; background: var(--warn-soft); cursor: pointer; font-size: 13.5px; }
.rest-chip small { color: var(--warn); font-size: 12px; }
.rest-chip.sore { background: var(--heat-soft); } .rest-chip.sore small { color: var(--heat); }

/* ==== 动作页按部位收纳、配图（spec [2026-10-23] §32） ==== */
.move-groups { display: flex; flex-direction: column; gap: 22px; }
.move-group { display: flex; flex-direction: column; gap: 10px; }
.move-group-head { display: flex; align-items: baseline; justify-content: space-between; gap: 12px; padding: 0 2px; }
.move-group-head h2 { margin: 0; font-size: 17px; display: flex; align-items: baseline; gap: 8px; }
.move-group-head h2 small { font-size: 12.5px; font-weight: 500; color: var(--muted); font-family: var(--mono); }
.move-group-head .link.open .i { transform: rotate(-90deg); }
.move-cover .move-img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: contain; background: #fff; padding: 8px; }
.move-figure { margin: 0; display: flex; flex-direction: column; gap: 6px; }
.move-frames { display: grid; gap: 8px; grid-template-columns: 1fr; }
.move-frames.n2 { grid-template-columns: 1fr 1fr; }
.move-frames img { width: 100%; aspect-ratio: 4 / 3; object-fit: contain; background: #fff; border-radius: var(--radius-sm); border: 1px solid var(--line); }
.move-figure figcaption a { color: var(--muted); text-decoration: underline; text-underline-offset: 2px; }
.move-cover.p-拉伸放松, .empty-video.p-拉伸放松 { color: var(--ink-2); }


/* ==== 首页：鼓励的话、今日任务、战报、本周计划、日历（spec [2026-10-23] §33、§34） ==== */
.home-cheer { margin: -4px 2px 2px; font-size: 17px; font-weight: 650; line-height: 1.5; background: linear-gradient(100deg, var(--fire), var(--fire-2)); -webkit-background-clip: text; background-clip: text; color: transparent; }
.home-card { display: flex; flex-direction: column; gap: 12px; }
.home-head { display: flex; align-items: baseline; justify-content: space-between; gap: 10px; }
.home-head h3 { margin: 0; font-size: 17px; }
.mono { font-family: var(--mono); }
.task { display: grid; grid-template-columns: 26px minmax(0, 1fr) auto; align-items: center; gap: 10px; padding: 10px 2px; border-top: 1px solid var(--line); }
.home-head + .task { border-top: 0; padding-top: 2px; }
.task[role="button"] { cursor: pointer; }
.task-check { width: 22px; height: 22px; border-radius: 50%; border: 1.5px solid var(--line-hi); display: grid; place-items: center; color: var(--accent-ink); }
.task.done .task-check { background: linear-gradient(135deg, var(--amber), var(--fire)); border-color: transparent; }
.task-main { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.task-main b { font-size: 15.5px; }
.task.done .task-main b { color: var(--muted); }
.task-main span { font-size: 13px; color: var(--muted); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.task-detail { padding: 4px 0 6px 36px; }
.report { display: flex; align-items: center; gap: 18px; }
.report .ring { flex: none; width: 104px; height: 104px; }
.rep-stats { display: grid; grid-template-columns: 1fr; gap: 8px; flex: 1; min-width: 0; }
.rep-stat { display: flex; align-items: baseline; justify-content: space-between; gap: 8px; border-bottom: 1px dashed var(--line); padding-bottom: 6px; }
.rep-stat:last-child { border-bottom: 0; padding-bottom: 0; }
.rep-stat span { font-size: 13px; color: var(--muted); }
.rep-stat b { font-family: var(--mono); font-size: 20px; font-weight: 650; }
.rep-stat b small { font-family: var(--font); font-size: 12px; color: var(--muted); font-weight: 500; }
.wc-row { display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)); gap: 5px; }
.wc-day { position: relative; display: flex; flex-direction: column; align-items: center; gap: 3px; padding: 7px 0 8px; border-radius: 10px; background: var(--sunken); color: var(--muted); cursor: pointer; min-width: 0; }
.wc-day i { font-style: normal; font-size: 11px; }
.wc-day b { font-size: 12.5px; font-weight: 600; white-space: nowrap; }
.wc-wx { display: flex; flex-direction: column; align-items: center; gap: 1px; height: 30px; justify-content: center; color: var(--ink-2); }
.wc-wx small { font-size: 11px; font-family: var(--mono); }
.wc-wx.none { color: transparent; }
.wc-day.plan { background: var(--surface); box-shadow: inset 0 0 0 1px var(--line-hi); color: var(--ink-2); }
.wc-day.past { opacity: .75; }
.wc-day.done { background: linear-gradient(135deg, var(--amber), var(--fire)); color: var(--accent-ink); box-shadow: none; opacity: 1; }
.wc-day.done .wc-wx { color: var(--accent-ink); }
.wc-day.today { box-shadow: inset 0 0 0 2px var(--fire); color: var(--accent); }
.wc-day.today.done { color: var(--accent-ink); }
.wc-warn { position: absolute; top: 5px; right: 5px; width: 7px; height: 7px; border-radius: 50%; background: var(--warn); }
.wc-warn.bad { background: var(--heat); }
.wc-notes { margin: 0; padding: 0; list-style: none; display: flex; flex-direction: column; gap: 6px; font-size: 13.5px; color: var(--ink-2); }
.wc-notes li { padding: 8px 10px; border-radius: 9px; background: var(--warn-soft); line-height: 1.55; }
.wc-notes b { color: var(--ink); }
.wc-note { display: flex; align-items: center; gap: 6px; margin: 0; padding: 8px 10px; border-radius: 9px; font-size: 13px; text-decoration: none; }
.wc-note.link { background: var(--sunken); color: var(--muted); }
.small { font-size: 13px; }
.cal-cell { position: relative; }
.day-wx { display: flex; flex-direction: column; gap: 6px; padding: 12px 14px; border-radius: 10px; background: var(--good-soft); }
.day-wx.caution { background: var(--warn-soft); } .day-wx.indoor, .day-wx.avoid { background: var(--heat-soft); }
.day-wx-top { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.day-wx p { margin: 0; font-size: 14px; line-height: 1.6; color: var(--ink-2); }

/* ==== 对话历史（spec [2026-10-23] §36） ==== */
.chat-tools { display: flex; gap: 6px; }
.row-item.on .row-title { color: var(--accent); }
.row-item.on .row-end { color: var(--accent); font-size: 12.5px; }

/* 战报最上面的安全提醒（spec [2026-10-23] §42） */
.rep-alert { margin: 0 0 10px; border-radius: 10px; background: var(--warn-soft); box-shadow: inset 0 0 0 1px rgb(242 193 78 / 28%); padding: 8px 12px; }
.rep-alert summary .i { color: var(--warn); }
.rep-alert summary { cursor: pointer; font-weight: 650; display: flex; align-items: center; gap: 6px; list-style: none; }
.rep-alert summary::-webkit-details-marker { display: none; }
.rep-alert p { margin: 6px 0 0; font-size: 14px; line-height: 1.6; }

/* 饮食页：拍 / 填两个入口，吃了什么（含两周复盘），spec [2026-10-23] §43 */
.meal-entry { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; margin-block: 16px; }
.meal-entry [role="status"] { grid-column: 1 / -1; }
.entry-btn { display: grid; justify-items: center; gap: 4px; padding: 18px 8px; border-radius: var(--radius);
  background: var(--surface); border: 1px solid var(--line); color: var(--ink); font: inherit; cursor: pointer; }
.entry-btn b { font-size: 20px; }
.entry-btn span { font-size: 12px; color: var(--muted); }
.entry-btn.primary { background: linear-gradient(120deg, var(--fire), var(--fire-2)); color: var(--accent-ink); border: 0; }
.entry-btn.primary span { color: var(--accent-ink); opacity: .85; }
.kind-pick { display: grid; gap: 6px; margin-block: 12px; }
.sheet textarea { width: 100%; box-sizing: border-box; font: inherit; padding: 10px 12px; border-radius: 12px; border: 1px solid var(--line); background: var(--surface); color: inherit; resize: none; }
.meal-record { display: grid; gap: 4px; }
.diet-review { display: grid; gap: 4px; padding-bottom: 12px; margin-bottom: 4px; border-bottom: 1px dashed var(--line); }
.review-head { display: flex; justify-content: space-between; align-items: center; gap: 8px; }
.review-act { display: flex; gap: 12px; align-items: center; }
.meal-group { padding-block: 8px; }
.meal-group + .meal-group { border-top: 1px solid var(--line); }
.meal-group-head { display: flex; justify-content: space-between; font-weight: 600; margin-bottom: 4px; }
.meal-group.empty .meal-group-head { font-weight: 400; color: var(--muted); margin: 0; }
.meal-record > *, .meal-group > * { min-width: 0; }
.meal-group .row-item { min-width: 0; }
.kind-pick .pills { flex-wrap: wrap; overflow: visible; }
.meal-entry { margin-block: 16px 4px; }
.replace-hint { color: var(--accent); margin: 0; }

/* 按操作改计划的预览：只列变化的行（spec [2026-10-23] §45） */
.pv-rows { margin: 6px 0; padding-left: 1.1em; display: grid; gap: 4px; }

/* 生病追问（spec [2026-10-23] §46） */
.checkin { display: grid; gap: 8px; padding: 12px; margin: 0 0 10px; border-radius: 10px; background: color-mix(in srgb, var(--fire) 8%, transparent); }
.checkin .btn-row { display: flex; flex-wrap: wrap; gap: 8px; }
.checkin p { margin: 0; }

/* 提问和回答的时间（spec [2026-10-23] §50） */
.msg-time { display: block; font-size: 11px; line-height: 1.4; opacity: .7; font-variant-numeric: tabular-nums; }
.msg-user .msg-time { margin-top: 4px; text-align: right; }
.msg-coach .msg-time { color: var(--muted); opacity: 1; }

/* ==== 底部四个标签；首页问教练、其他页悬浮教练按钮、"我的"分三段（spec [2026-10-23] §59） ==== */
.ask-wrap { display: flex; flex-direction: column; gap: 6px; }
.ask-box {
  display: flex; flex-direction: row; align-items: center; gap: 10px; padding: 6px 6px 6px 14px; border-radius: 16px;
  background: var(--surface); border: 1px solid var(--line-hi); box-shadow: 0 0 0 4px var(--accent-soft), var(--shadow);
}
.ask-box .ask-icon { color: var(--accent); display: grid; place-items: center; }
.ask-box input { flex: 1; width: auto; min-width: 0; border: 0; box-shadow: none; background: transparent; color: var(--ink); font: inherit; font-size: 15.5px; padding: 10px 0; outline: none; }
.ask-box input::placeholder { color: var(--muted); }
.ask-box input:focus { box-shadow: none; }
.ask-box:focus-within { border-color: var(--accent); }
.ask-box .send { width: 40px; height: 40px; border-radius: 12px; border: 0; display: grid; place-items: center; cursor: pointer; flex: none; }
.ask-past { align-self: flex-end; display: inline-flex; align-items: center; gap: 4px; font-size: 13px; background: none; border: 0; cursor: pointer; padding: 2px 4px; }
.seg { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 4px; padding: 4px; border-radius: 12px; background: var(--sunken); border: 1px solid var(--line); }
.seg a { text-align: center; padding: 8px 0; border-radius: 9px; text-decoration: none; color: var(--muted); font-weight: 600; font-size: 14.5px; }
.seg a.on { background: var(--surface); color: var(--accent); box-shadow: inset 0 0 0 1px var(--line-hi); }
.fab {
  position: fixed; z-index: 15; right: max(16px, calc((100vw - var(--max)) / 2 + 16px), env(safe-area-inset-right, 0px));
  bottom: calc(var(--tabs-h) + env(safe-area-inset-bottom, 0px) + 14px);
  display: inline-flex; align-items: center; gap: 6px; padding: 10px 16px 10px 12px; border-radius: 999px; text-decoration: none;
  background: linear-gradient(120deg, var(--fire), var(--fire-2)); color: var(--accent-ink); font-weight: 700; font-size: 14.5px;
  box-shadow: 0 8px 24px rgb(15 42 29 / 45%), 0 0 0 1px rgb(18 183 106 / 30%);
}
.fab[hidden] { display: none; }
.fab .ti { display: grid; place-items: center; }
.fab .ti svg.i { width: 20px; height: 20px; }
body.locked .fab { display: none; }
body:has(.fab:not([hidden])) .app { padding-bottom: calc(var(--tabs-h) + 84px + env(safe-area-inset-bottom, 0px)); }

/* ==== 夯：个人的从夯到拉榜单（spec [2026-10-23] §60） ==== */
a.pill { text-decoration: none; display: inline-flex; align-items: center; gap: 4px; }
.tier-board { display: flex; flex-direction: column; gap: 6px; }
.tier-row { display: grid; grid-template-columns: 64px minmax(0, 1fr); gap: 6px; min-height: 56px; }
.tier-label { display: grid; place-items: center; border-radius: 10px; font-weight: 800; font-size: 16px; letter-spacing: .04em; text-align: center; padding: 4px; }
.t-hang { background: var(--fire-2); color: var(--accent-ink); }
.t-top { background: var(--accent); color: var(--accent-ink); }
.t-elite { background: #12b76a; color: var(--accent-ink); }
.t-npc { background: #c9d8cf; color: var(--ink); }
.t-la { background: #e1ebe5; color: var(--muted); }
.t-rest { background: transparent; color: var(--muted); font-size: 13px; font-weight: 600; box-shadow: inset 0 0 0 1px var(--line); }
.tier-items { display: flex; flex-wrap: wrap; gap: 6px; align-content: flex-start; padding: 6px; border-radius: 10px; background: var(--surface); border: 1px solid var(--line); min-width: 0; }
.tier-item { display: inline-flex; align-items: center; gap: 6px; padding: 4px 10px 4px 4px; border-radius: 8px; background: var(--sunken); border: 1px solid var(--line); font-size: 13.5px; cursor: pointer; max-width: 100%; }
.tier-item span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.tier-item:not(:has(img)) { padding-left: 10px; }
.tier-item img { width: 30px; height: 30px; border-radius: 6px; object-fit: contain; background: #fff; flex: none; }
.tier-empty { color: var(--muted); font-size: 12.5px; align-self: center; padding: 0 4px; }
.tier-pick { display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: 6px; margin-bottom: 10px; }
.tier-btn { border: 0; border-radius: 10px; padding: 12px 0; font: inherit; font-weight: 800; cursor: pointer; }
.tier-btn.on { outline: 2px solid var(--ink); outline-offset: 2px; }
.tier-add { flex-direction: row; gap: 8px; }
.tier-add input { flex: 1; min-width: 0; }
.tier-add-card { display: flex; flex-direction: column; gap: 8px; }
.tier-link { margin-left: 10px; font-size: 12.5px; font-weight: 650; color: var(--accent); text-decoration: none; display: inline-flex; align-items: center; gap: 3px; vertical-align: middle; }
.tier-entry { display: flex; gap: 8px; flex-wrap: wrap; }

/* 战报和月历合成一张卡（spec [2026-10-23] §64） */
.rep-seg { grid-template-columns: repeat(2, minmax(0, 1fr)); width: 124px; padding: 3px; border-radius: 10px; }
.rep-seg button { border: 0; background: none; padding: 5px 0; border-radius: 8px; color: var(--muted); font: inherit; font-weight: 600; font-size: 13px; cursor: pointer; }
.rep-seg button.on { background: var(--surface); color: var(--accent); box-shadow: inset 0 0 0 1px var(--line-hi); }
.rep-body { display: grid; gap: 16px; }
.cal-cell.wk:not(.lit) { background: color-mix(in srgb, var(--accent) 9%, transparent); }
.home-alerts { display: grid; gap: 8px; }
.home-alerts .rep-alert { margin: 0; }

/* 夯拉榜（spec [2026-10-23] §66）和个人中心（§65） */
.seg.seg-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.tier-item small { font-family: var(--mono); font-size: 11px; color: var(--muted); white-space: nowrap; }
.tier-item.voted { box-shadow: inset 0 0 0 1px var(--accent); }
.tier-dist { display: grid; gap: 6px; margin: 4px 0 12px; }
.td-row { display: grid; grid-template-columns: 52px minmax(0, 1fr) 28px; align-items: center; gap: 8px; font-size: 13px; }
.td-bar { height: 10px; border-radius: 5px; background: var(--sunken); overflow: hidden; }
.td-bar i { display: block; height: 100%; border-radius: 5px; }
.td-n { font-family: var(--mono); text-align: right; color: var(--muted); }
.tier-similar:empty { display: none; }
.tier-similar { display: grid; gap: 8px; justify-items: start; }
.me-head { display: grid; gap: 10px; }
.me-head .profile-head .link { margin-left: auto; align-self: center; }
.me-line { margin: 0; font-weight: 600; }
.me-sum .caption { margin: 2px 0 0; }
.me-more { border: 1px solid var(--line); border-radius: var(--radius); background: var(--surface); }
.me-more > summary { cursor: pointer; list-style: none; display: flex; align-items: center; justify-content: space-between; gap: 8px; padding: 14px 16px; font-weight: 650; }
.me-more > summary::-webkit-details-marker { display: none; }
.me-more > summary .i { transition: transform .2s; transform: rotate(90deg); }
.me-more[open] > summary .i { transform: rotate(-90deg); }
.me-more-body { display: flex; flex-direction: column; gap: 16px; padding: 0 12px 14px; }

/* 训练记录器（spec [2026-10-23] §71） */
.live { display: flex; flex-direction: column; gap: 12px; padding-bottom: calc(110px + env(safe-area-inset-bottom, 0px)); }
.live-bar .who span { font-size: 12.5px; }
.live-total { font-family: var(--mono); font-variant-numeric: tabular-nums; font-size: 22px; letter-spacing: .02em; color: var(--accent); }
.live-status:empty { display: none; }
.live-status { color: var(--heat); font-size: 13px; }
.live-list { display: flex; flex-direction: column; gap: 12px; }
.live-coach { display: flex; flex-direction: column; gap: 6px; border-left: 3px solid var(--accent); }
.live-coach-head { display: flex; align-items: center; gap: 6px; color: var(--accent); }
.live-coach p { margin: 0; }
.live-actions { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
.live-quick { flex-wrap: wrap; }
.live-say { display: flex; gap: 8px; }
.live-say input { flex: 1; min-width: 0; }
.live-card { display: flex; flex-direction: column; gap: 10px; }
.live-head { display: flex; align-items: center; gap: 4px; }
.live-head .row-main { flex: 1; min-width: 0; }
.live-head b { font-size: 16px; }
.set-list { display: flex; flex-direction: column; gap: 6px; }
.set-row { display: grid; grid-template-columns: 22px minmax(0, 1fr) 14px minmax(0, 0.8fr) 66px 40px 26px; align-items: center; gap: 6px; padding: 4px 6px; border-radius: var(--radius-sm); }
.live-card:has(.live-timed) .set-row { grid-template-columns: 22px minmax(0, 1fr) 22px 40px 26px; }
.set-row.done { background: var(--accent-soft); }
.set-n { font-family: var(--mono); color: var(--muted); text-align: center; }
.unit { color: var(--muted); font-size: 13px; text-align: center; }
.live-in { width: 100%; min-width: 0; padding: 8px 6px; text-align: center; font-family: var(--mono); font-variant-numeric: tabular-nums; font-size: 16px; }
.set-row.done .live-in { color: var(--accent); }
.live-time { display: inline-flex; align-items: center; justify-content: center; gap: 3px; width: 100%; border: 1px solid var(--line); background: var(--sunken); color: var(--muted); border-radius: 8px; padding: 7px 7px; font: inherit; font-size: 12px; font-family: var(--mono); cursor: pointer; white-space: nowrap; }
.live-time.running { color: var(--accent-ink); background: var(--accent); border-color: var(--accent); }
.live-time.has { color: var(--ink-2); }
.live-time:disabled { opacity: .55; cursor: default; }
.live-done { width: 40px; height: 36px; border-radius: 10px; border: 1px solid var(--line-hi); background: var(--sunken); color: var(--muted); display: grid; place-items: center; cursor: pointer; }
.live-done[aria-pressed="true"] { background: var(--accent); color: var(--accent-ink); border-color: var(--accent); }
.live-x { width: 26px; height: 26px; border: 0; background: none; color: var(--muted); display: grid; place-items: center; cursor: pointer; padding: 0; }
.live-timed { display: flex; }
.live-rest { position: fixed; left: 0; right: 0; bottom: 0; z-index: 8; display: flex; align-items: center; justify-content: space-between; gap: 10px;
  padding: 12px max(16px, env(safe-area-inset-right, 0px)) calc(12px + env(safe-area-inset-bottom, 0px)) max(16px, env(safe-area-inset-left, 0px));
  background: var(--surface); border-top: 1px solid var(--line-hi); box-shadow: var(--shadow-lg); }
.live-rest > div:first-child { display: flex; flex-direction: column; }
.live-rest b { font-family: var(--mono); font-size: 26px; color: var(--accent); font-variant-numeric: tabular-nums; }
.live-rest-btns { display: flex; gap: 6px; flex-wrap: wrap; justify-content: flex-end; }
.live-entry { display: flex; align-items: center; gap: 12px; }
.live-entry.on { box-shadow: inset 0 0 0 1px var(--line-hi); }
.live-entry .row-main { flex: 1; min-width: 0; }
.live-none { display: flex; flex-direction: column; gap: 12px; }
.live-sum { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; }
.live-sum > div { display: flex; flex-direction: column; gap: 2px; padding: 10px 12px; border-radius: var(--radius-sm); background: var(--sunken); }
.live-sum b { font-family: var(--mono); font-size: 20px; }
.rpe-pick { display: grid; grid-template-columns: repeat(10, minmax(0, 1fr)); gap: 4px; }
.rpe-pick button { border: 1px solid var(--line); background: var(--sunken); color: var(--ink-2); border-radius: 8px; padding: 8px 0; font: inherit; font-family: var(--mono); cursor: pointer; }
.rpe-pick button.on { background: var(--accent); color: var(--accent-ink); border-color: var(--accent); }

/* ---- 夯榜（spec [2026-10-23] §72）：搜索热点、转盘、榜单页、条目详情 ---- */
.rk-search { display: flex; align-items: center; gap: 8px; padding: 0 14px; border-radius: var(--radius); background: var(--surface); border: 1px solid var(--line); color: var(--muted); }
.rk-search:focus-within { border-color: var(--line-hi); }
.rk-search input { flex: 1; min-width: 0; border: 0; background: transparent; color: var(--ink); font: inherit; font-size: 15px; padding: 12px 0; outline: none; }
.rk-hot { display: flex; flex-wrap: wrap; gap: 6px; align-items: center; }
.rk-hot-label { font-size: 12px; font-weight: 700; color: var(--muted); letter-spacing: .06em; margin-right: 2px; }
.rk-chip { display: inline-flex; align-items: center; gap: 5px; border: 1px solid var(--line); background: var(--surface); color: var(--ink-2); border-radius: 999px; padding: 5px 10px; font: inherit; font-size: 13px; cursor: pointer; }
.rk-chip b { font-family: var(--mono); font-size: 11.5px; color: var(--muted); }
.rk-chip b.hi { color: var(--fire-2); }
.rk-flag { font-style: normal; font-size: 10.5px; font-weight: 800; padding: 0 4px; border-radius: 4px; }
.rk-flag.f-hot { background: var(--heat-soft); color: var(--heat); }
.rk-flag.f-new { background: var(--accent-soft); color: var(--accent); }
.rk-flag.f-up { background: var(--warn-soft); color: var(--warn); }
.rk-results { display: grid; gap: 6px; }
.rk-hit { display: flex; align-items: center; gap: 8px; padding: 11px 14px; border-radius: var(--radius-sm); background: var(--surface); border: 1px solid var(--line); color: var(--ink); text-decoration: none; min-width: 0; }
.rk-hit-name { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-weight: 600; }
.rk-hit small { color: var(--muted); font-size: 12px; white-space: nowrap; }
.rk-none { color: var(--muted); font-size: 13px; padding: 12px 2px; }

.rk-ring-wrap { display: grid; gap: 10px; }
.rk-ring { position: relative; height: 470px; perspective: 1100px; touch-action: pan-y; user-select: none; -webkit-user-select: none; outline: none; overflow: hidden; margin: 0 -16px; }
.rk-ring:focus-visible { box-shadow: inset 0 0 0 2px var(--line-hi); border-radius: var(--radius); }
.rk-card { position: absolute; top: 4px; left: 50%; width: min(78%, 360px); margin-left: calc(min(78%, 360px) / -2); height: 456px; box-sizing: border-box; padding: 14px 14px 10px; border-radius: 16px; background: var(--surface); border: 1px solid var(--line); box-shadow: var(--shadow); display: flex; flex-direction: column; gap: 8px; will-change: transform; transform-style: preserve-3d; backface-visibility: hidden; cursor: grab; }
.rk-card.on { border-color: var(--line-hi); box-shadow: var(--shadow-lg); }
.rk-card-head { display: flex; align-items: center; gap: 10px; }
.rk-card-head > div { flex: 1; min-width: 0; }
.rk-card-head h2 { margin: 0; font-size: 17px; text-wrap: balance; }
.rk-card-head small { color: var(--muted); font-size: 12px; }
.rk-ic { width: 34px; height: 34px; border-radius: 10px; background: var(--sunken); display: grid; place-items: center; font-size: 18px; flex: none; }
.rk-all { display: inline-flex; align-items: center; gap: 2px; color: var(--accent); font-size: 13px; font-weight: 650; text-decoration: none; }
.rk-rows { display: flex; flex-direction: column; min-height: 0; overflow: hidden; flex: 1; justify-content: space-evenly; }
.rk-row { display: grid; grid-template-columns: 22px 56px minmax(0, 1fr) auto auto 30px; align-items: center; gap: 8px; padding: 7px 2px; border-bottom: 1px solid var(--line); color: var(--ink); text-decoration: none; font-size: 14px; }
.rk-row.wait { color: var(--ink-2); }
.rk-name { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; min-width: 0; }
/* 配图和说明（§80） */
.rk-pic { width: 44px; height: 44px; border-radius: 10px; object-fit: cover; background: var(--sunken); display: block; }
img.rk-pic, .rk-hero-pic { background-color: #fff; } /* 透明底的图在深色页面上也看得见 */
.rk-pic.none { display: grid; place-items: center; font-size: 20px; }
.rk-pic.sm { width: 32px; height: 32px; border-radius: 8px; font-size: 15px; flex: none; }
.rk-label { display: grid; gap: 1px; min-width: 0; }
.rk-row .rk-pic { width: 56px; height: 56px; border-radius: 12px; }
.rk-row .rk-name, .rk-line .rk-name { white-space: normal; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; line-height: 1.3; }
.rk-desc { color: var(--muted); font-size: 12px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.rk-kind { font-style: normal; font-size: 10.5px; font-weight: 700; color: var(--accent); background: var(--accent-soft); border-radius: 4px; padding: 0 4px; margin-left: 6px; vertical-align: 1px; }
.rk-no { font-family: var(--mono); font-weight: 800; font-size: 13px; color: var(--muted); text-align: center; }
.rk-no.r1 { color: var(--fire-2); }
.rk-no.r2 { color: var(--accent); }
.rk-no.r3 { color: var(--rose); }
.rk-sc { font-family: var(--mono); font-weight: 700; font-size: 13px; text-align: right; font-variant-numeric: tabular-nums; }
.rk-tr { font-family: var(--mono); font-size: 11px; color: var(--muted); white-space: nowrap; }
.rk-tr.up { color: var(--accent); }
.rk-tr.down { color: var(--heat); }
.rk-tr.new { color: var(--warn); }
.rk-tag { font-size: 11px; font-weight: 800; padding: 2px 6px; border-radius: 5px; white-space: nowrap; }
.rk-tag.big { font-size: 14px; padding: 3px 10px; border-radius: 7px; }
.rk-tag.t-wait { background: transparent; color: var(--muted); box-shadow: inset 0 0 0 1px var(--line); font-weight: 600; }
.rk-quote { font-size: 12.5px; color: var(--ink-2); background: var(--sunken); border-radius: 8px; padding: 6px 10px; margin: 4px 0 2px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.rk-quote b { color: var(--muted); font-weight: 600; }
.rk-ctl { display: flex; align-items: center; justify-content: space-between; gap: 10px; flex-wrap: wrap; }
.rk-dots { display: flex; gap: 6px; }
.rk-dots button { width: 8px; height: 8px; padding: 0; border: 0; border-radius: 4px; background: var(--line-hi); opacity: .5; cursor: pointer; transition: width .2s; }
.rk-dots button.on { width: 22px; background: var(--accent); opacity: 1; }

.rk-bar { display: flex; align-items: center; gap: 10px; }
.rk-bar h2 { flex: 1; margin: 0; font-size: 18px; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.rk-list { display: grid; gap: 6px; }
.rk-line { display: grid; grid-template-columns: 26px 44px minmax(0, 1fr) auto auto; grid-template-rows: auto auto; column-gap: 10px; row-gap: 2px; align-items: center; padding: 10px 12px; border-radius: var(--radius-sm); background: var(--surface); border: 1px solid var(--line); color: var(--ink); text-decoration: none; }
.rk-line .rk-name { font-weight: 600; }
.rk-right { display: grid; justify-items: end; }
.rk-meta { grid-column: 3 / -1; color: var(--muted); font-size: 12px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.rk-pending { display: grid; gap: 6px; }
.rk-pending h3 { margin: 6px 0 0; font-size: 14px; color: var(--ink-2); }
.rk-pending a { display: flex; align-items: center; gap: 10px; padding: 9px 12px; border-radius: var(--radius-sm); border: 1px dashed var(--line); color: var(--ink-2); text-decoration: none; font-size: 14px; }
.rk-pending a .rk-label { flex: 1; }
.rk-pending small { color: var(--muted); white-space: nowrap; }

.rk-item { display: flex; flex-direction: column; gap: 14px; }
.rk-hero h1 { margin: 0 0 8px; font-size: 24px; text-wrap: balance; }
.rk-hero-pic { width: 100%; max-height: 220px; object-fit: contain; border-radius: var(--radius); margin-bottom: 12px; display: block; background: var(--sunken); }
.rk-hero-desc { margin: -2px 0 10px; color: var(--ink-2); font-size: 14.5px; }
.rk-credit { margin: -6px 0 10px; }
.rk-plan { display: grid; gap: 8px; }
.rk-plan h3 { margin: 6px 0 0; font-size: 15px; }
.rk-plan p { margin: 0; font-size: 14px; line-height: 1.6; }
.rk-plan ul { margin: 4px 0 0; padding-left: 18px; font-size: 13.5px; line-height: 1.6; }
.rk-plan-day { padding: 8px 10px; border-radius: var(--radius-sm); background: var(--sunken); }
.rk-plan .btn { justify-self: start; margin-top: 6px; }
.rk-score { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.rk-big { font-family: var(--mono); font-size: 34px; font-weight: 800; font-variant-numeric: tabular-nums; }
.rk-score small { color: var(--muted); font-size: 13px; }
.td-name { font-weight: 700; }
.rk-vote-head { display: flex; align-items: center; justify-content: space-between; gap: 10px; }
.rk-act { border: 0; background: transparent; color: var(--muted); font: inherit; font-size: 12.5px; padding: 4px 6px; border-radius: 6px; cursor: pointer; }
.rk-act:hover { color: var(--ink-2); background: var(--sunken); }
.rk-act.on { color: var(--accent); }
.rk-act:disabled { cursor: default; opacity: .7; }
.rk-disclaim { font-size: 12.5px; color: var(--muted); margin: 0; }
.rk-disclaim.warn { color: var(--warn); }
.rk-comments { display: grid; gap: 10px; }
.rk-cm-head { display: flex; align-items: center; justify-content: space-between; gap: 10px; }
.rk-cm-head h3 { margin: 0; font-size: 16px; }
.rk-cm-head .pills { margin: 0; padding: 0; }
.rk-compose { display: flex; gap: 8px; align-items: flex-end; }
.rk-compose textarea { flex: 1; min-width: 0; resize: vertical; }
.rk-cm-sub { display: flex; justify-content: space-between; align-items: center; gap: 8px; }
.rk-count { font-family: var(--mono); font-size: 11.5px; color: var(--muted); }
.rk-cm { padding: 10px 0; border-top: 1px solid var(--line); display: grid; gap: 4px; }
.rk-cm p { margin: 0; font-size: 14.5px; line-height: 1.55; overflow-wrap: anywhere; }
.rk-who { display: flex; align-items: baseline; gap: 8px; }
.rk-who b { font-size: 13px; color: var(--ink-2); }
.rk-who small { color: var(--muted); font-size: 12px; }
.rk-who em { font-style: normal; font-size: 11px; color: var(--accent); background: var(--accent-soft); padding: 0 5px; border-radius: 4px; }
.rk-acts { display: flex; gap: 4px; margin-left: -6px; }
.rk-foot { display: flex; justify-content: center; }
@media (max-width: 420px) { .rk-ring { height: 450px; } .rk-card { height: 436px; width: 82%; margin-left: -41%; } }
@media (prefers-reduced-motion: reduce) { .rk-dots button { transition: none; } }
/* 指标解读的自动调整（§84）：原因和"不用这样调" */
.cc-extra { display: grid; gap: 6px; margin-top: 4px; }
.cc-extra p { margin: 0; font-size: 12.5px; line-height: 1.5; }
.cc-extra .btn { justify-self: start; }

/* ==== 界面改版（spec [2026-10-23] §104）：放在最后统一覆盖。正文区不要网格背景；卡片靠明暗和柔和阴影分层、不描边；
   大数字细字重；小标题小字号加字距；绿色只留给主按钮和关键数字 ==== */
body {
  background:
    radial-gradient(55% 35% at 100% -6%, rgb(18 183 106 / 6%), transparent 65%),
    var(--bg);
  background-attachment: fixed;
}
.card { border-color: transparent; border-radius: 18px; box-shadow: inset 0 1px 0 rgb(15 42 29 / 4.5%), 0 10px 30px rgb(15 42 29 / 35%); }
.label { font-size: 11px; letter-spacing: .14em; color: var(--muted); font-weight: 500; }
.num { font-variant-numeric: tabular-nums; font-family: var(--mono); }
.accent, .accent-text { color: var(--accent); }
.thin-bar { height: 3px; border-radius: 2px; background: rgb(15 42 29 / 6%); overflow: hidden; }
.thin-bar span { display: block; height: 100%; background: var(--accent); border-radius: 2px; transition: width .4s cubic-bezier(.2, .8, .2, 1); }

/* 顶栏：夯榜入口在头像左边 */
.bar-icon { width: 38px; height: 38px; border-radius: 50%; display: grid; place-items: center; background: rgb(15 42 29 / 5%); color: var(--ink-2); flex: none; }
.bar-icon .ti { display: grid; place-items: center; }
.bar-icon svg.i { width: 18px; height: 18px; }

/* 首页三块 */
.hc { gap: 12px; padding: 18px; }
.hc-head { display: flex; justify-content: space-between; align-items: center; }
.hc-tag { font-size: 11px; color: var(--warn); letter-spacing: .04em; }
.hc-title { font-size: 21px; font-weight: 650; }
.hc-meta { font-size: 13px; color: var(--ink-2); margin-top: -6px; }
.hc-thumbs { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 10px; }
.hc-move { display: flex; flex-direction: column; gap: 6px; min-width: 0; font-size: 12px; color: var(--ink-2); }
.hc-move span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.thumb { width: 100%; aspect-ratio: 1; border-radius: 14px; object-fit: cover; background: var(--sunken); }
.thumb.none, .lf-img.none { display: grid; place-items: center; color: var(--muted); }
.hc-toggle { align-self: center; font-size: 12.5px; color: var(--muted); letter-spacing: .06em; }
.hc-detail { display: flex; flex-direction: column; gap: 10px; }
.hc-more { align-self: flex-end; font-size: 13px; }
.hc-nums { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; }
.hc-nums div { display: flex; flex-direction: column; gap: 2px; }
.hc-nums b { font-size: 32px; font-weight: 300; line-height: 1.1; }
.hc-nums span { font-size: 12px; color: var(--muted); }
.hc-coach { display: flex; flex-direction: column; gap: 10px; }
.hc-label { padding: 2px 4px 0; }
.hc-msg { gap: 10px; padding: 14px 16px; }
.hc-msg p { font-size: 15px; line-height: 1.6; }

/* "＋"快捷记录 */
.fab { width: 54px; height: 54px; padding: 0; border: 0; border-radius: 50%; justify-content: center; background: var(--accent); cursor: pointer;
  box-shadow: 0 10px 24px rgb(18 183 106 / 25%); }
.fab .ti svg.i { width: 22px; height: 22px; stroke-width: 2; }
.qa-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; }
.qa-tile { display: flex; flex-direction: column; align-items: flex-start; justify-content: space-between; gap: 14px; min-height: 100px; padding: 14px;
  border: 0; border-radius: 16px; background: var(--sunken); color: var(--ink); text-align: left; font: inherit; cursor: pointer; }
.qa-icon { width: 36px; height: 36px; border-radius: 12px; display: grid; place-items: center; background: var(--accent-soft); color: var(--accent); }
.qa-text { display: flex; flex-direction: column; gap: 2px; }
.qa-text small { font-size: 11.5px; color: var(--muted); }
.qa-weight { display: flex; flex-direction: column; gap: 10px; margin-top: 4px; padding: 14px; border-radius: 16px; background: var(--sunken); }
.qa-row { display: flex; align-items: center; gap: 10px; }
.qa-row .icon-btn { font-size: 20px; }
.qa-val { flex: 1; text-align: center; }
.qa-w { font-size: 32px; font-weight: 300; }
.qa-val small { font-size: 12px; color: var(--muted); margin-left: 4px; }

/* 训练页：计划 / 轨迹 / 动作库 */
.page-seg { margin-bottom: 4px; }
.day-strip { display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)); gap: 6px; }
.ds-day { height: 56px; border: 0; border-radius: 14px; background: transparent; color: var(--muted); display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 2px; font: inherit; cursor: pointer; }
.ds-day i { font-style: normal; font-size: 11px; opacity: .75; }
.ds-day b { font-size: 12px; font-weight: 500; }
.ds-day.plan { background: var(--surface); color: var(--ink); }
.ds-day.done b::after { content: " ✓"; color: var(--accent); }
.ds-day.on { background: var(--accent); color: var(--accent-ink); }
.ds-day.on.done b::after { color: var(--accent-ink); }
.pd-head { display: flex; justify-content: space-between; align-items: flex-end; gap: 12px; margin: 10px 2px 2px; }
.pd-head h2 { margin: 0; font-size: 21px; font-weight: 650; }
.pd-list { padding: 4px 16px; gap: 0; }
.pd-item { display: flex; align-items: center; gap: 14px; padding: 12px 0; }
.pd-item + .pd-item { border-top: 1px solid rgb(15 42 29 / 5%); }
.pd-item .thumb { width: 48px; height: 48px; flex: none; border-radius: 12px; }
.pd-item .row-main { display: flex; flex-direction: column; gap: 2px; min-width: 0; flex: 1; }
.pd-go { margin-top: 4px; }
.log-list { padding: 4px 16px; gap: 0; }
.log-row { display: flex; gap: 14px; align-items: center; padding: 12px 0; }
.log-row + .log-row { border-top: 1px solid rgb(15 42 29 / 5%); }
.log-day { width: 52px; flex: none; color: var(--ink-2); font-size: 13px; }
.log-row .row-main { display: flex; flex-direction: column; gap: 2px; min-width: 0; flex: 1; }

/* 训练中：总进度、当前这一组 */
.live-prog { display: flex; flex-direction: column; gap: 6px; font-size: 12.5px; color: var(--muted); margin: 2px 2px 4px; }
.live-card.cur { box-shadow: inset 0 0 0 1px rgb(18 183 106 / 28%), 0 10px 30px rgb(15 42 29 / 35%); }
.set-row.cur { background: rgb(18 183 106 / 6%); border-radius: 10px; }
.live-focus { display: flex; flex-direction: column; gap: 12px; padding: 4px 0 6px; }
.lf-top { display: flex; gap: 12px; align-items: center; }
.lf-top .row-main { display: flex; flex-direction: column; gap: 3px; min-width: 0; }
.lf-img { width: 72px; height: 72px; flex: none; border-radius: 14px; object-fit: cover; background: var(--sunken); }
.lf-steps { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; }
.stepper { display: flex; align-items: center; justify-content: space-between; padding: 6px; border-radius: 16px; background: var(--sunken); }
.step-btn { width: 44px; height: 44px; border: 0; border-radius: 12px; background: rgb(15 42 29 / 5%); color: var(--ink); font-size: 20px; font-weight: 300; cursor: pointer; }
.step-val { display: flex; flex-direction: column; align-items: center; line-height: 1.1; }
.step-val b { font-size: 24px; font-weight: 300; }
.step-val b.hot { color: var(--warn); }
.step-val small { font-size: 10.5px; color: var(--muted); letter-spacing: .1em; }
.lf-warn { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; padding: 10px 12px; border-radius: 12px; background: var(--warn-soft); color: var(--warn); font-size: 13px; line-height: 1.5; }
.lf-warn > span { flex: 1 1 180px; }
.warn-ok { background: var(--warn); color: #ffffff; }
.warn-back { color: var(--warn); }
.lf-done { height: 54px; font-size: 17px; }

/* "还缺 N 项"卡片：.card 默认竖排，这一行要横排，名字太长时换行（§104 需求 1：原来两头被裁） */
.card.lack-row { flex-direction: row; }
.lack-row .row-sub { overflow-wrap: anywhere; }
/* 首页右下角的"＋"不能挡住最下面的内容 */
body:has(#fab:not([hidden])) .app { padding-bottom: calc(var(--tabs-h) + 96px + env(safe-area-inset-bottom, 0px)); }

/* §105 打卡记状态、没练也能打卡、轨迹 */
.state-pick > summary { cursor: pointer; color: var(--ink-2); font-size: 13px; padding: 4px 0; }
.st-body { display: flex; flex-direction: column; gap: 12px; padding-top: 10px; }
.st-row { display: flex; flex-direction: column; gap: 6px; }
.st-chips { display: flex; flex-wrap: wrap; gap: 6px; }
.st-chips .pill { min-height: 36px; padding: 0 14px; border-radius: 18px; }
.log-stats { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 8px; padding: 16px; }
.log-stats > div { display: flex; flex-direction: column; gap: 4px; }
.log-stats b { font-size: 22px; font-weight: 300; }
.log-stats small { font-size: 12px; color: var(--muted); }
.log-row.rest .row-title { color: var(--muted); }
.cal-cell.lit.lv1 { background: color-mix(in srgb, var(--accent) 24%, transparent); }
.cal-cell.lit.lv2 { background: color-mix(in srgb, var(--accent) 45%, transparent); color: var(--ink); }
.cal-cell.lit.lv3 { background: var(--accent); color: var(--accent-ink); }
.log-row .log-day { white-space: nowrap; width: 64px; }
.cal-cell.rest:not(.lit) { background: rgb(15 42 29 / 6%); color: var(--muted); box-shadow: inset 0 0 0 1px rgb(15 42 29 / 12%); }
.pd-go .link, .pd-go .pd-rest { grid-column: 1 / -1; justify-self: center; color: var(--muted); padding: 6px 12px; font-size: 13px; }

/* §106 计划页直接改 */
.pd-tools { display: flex; gap: 6px; flex: none; }
.pd-item[role="button"] { cursor: pointer; }
.pd-edit { color: var(--muted); flex: none; display: grid; place-items: center; width: 28px; }
.pd-edited { display: flex; gap: 10px; align-items: center; justify-content: space-between; padding: 10px 14px; border-radius: 12px; background: var(--accent-soft); color: var(--ink-2); font-size: 13px; }
.pd-edited .link { flex: none; }
.pd-burn { font: inherit; font-size: 13px; color: var(--muted); padding: 0; text-decoration: underline dotted; text-underline-offset: 3px; }
.pd-head p { margin: 2px 0 0; }
.pd-burn-how { margin: 0 2px; }
.pd-warmup { border-radius: 12px; background: var(--surface); padding: 11px 14px; font-size: 14px; }
.pd-warmup summary { display: flex; align-items: center; gap: 6px; list-style: none; cursor: pointer; font-weight: 600; }
.pd-warmup summary::-webkit-details-marker { display: none; }
.pd-warmup summary span { flex: 1; }
.pd-warmup summary em { font-style: normal; font-weight: 500; font-size: 12.5px; color: var(--ink-2); }
.pd-warmup[open] summary .i:last-child { transform: rotate(90deg); }
.pd-warmup ol { margin: 10px 0 6px; padding-left: 20px; display: flex; flex-direction: column; gap: 6px; line-height: 1.55; }
.pd-warmup .caption { margin: 0; }
.scope-seg { width: 100%; }
.ie-head { display: flex; gap: 12px; align-items: center; }
.ie-steps { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; }
.ie-steps .caption { align-self: center; }
.alt-list { display: flex; flex-direction: column; }
.alt-row { display: flex; gap: 12px; align-items: center; padding: 12px 0; }
.alt-row + .alt-row { border-top: 1px solid rgb(15 42 29 / 5%); }
.alt-row .row-main { display: flex; flex-direction: column; gap: 2px; min-width: 0; flex: 1; }
.danger-text { color: var(--heat); }
.flash-row { display: flex; gap: 12px; align-items: center; justify-content: space-between; }
.ie-head .thumb, .alt-row .thumb { width: 56px; height: 56px; flex: none; border-radius: 14px; }
.ie-head p { margin: 0; min-width: 0; }
.icon-btn:disabled { opacity: .3; cursor: default; }

/* §107 场所与器材 */
.gear-form { display: flex; flex-direction: column; gap: 14px; }
.gear-later { align-self: center; color: var(--muted); }
.gear-row { display: flex; flex-direction: column; gap: 12px; }
.gear-row .row-main { display: flex; flex-direction: column; gap: 4px; min-width: 0; }
.gear-lack { display: flex; flex-direction: column; gap: 10px; padding: 12px 14px; border-radius: 12px; background: var(--warn-soft); }
.gear-lack p { margin: 0; color: var(--ink-2); font-size: 13.5px; }
.gear-row .row-sub { white-space: normal; }
.gear-tag { display: inline-flex; align-items: center; gap: 4px; min-height: 36px; padding: 0 6px 0 14px; border-radius: 18px; background: var(--accent-soft); color: var(--accent); font-size: 14px; box-shadow: inset 0 0 0 1px var(--line-hi); }
.gear-tag button { border: 0; background: none; color: inherit; width: 28px; height: 28px; display: grid; place-items: center; cursor: pointer; }
.gear-add { display: flex; gap: 8px; }
.gear-add input { flex: 1; min-width: 0; }

/* 打卡照片（§117） */
.photo-slot { display: flex; flex-direction: column; align-items: center; gap: 4px; cursor: pointer; text-align: center; min-width: 0; }
.photo-slot b { font-size: 13px; font-weight: 600; }
.ps-msg { font-size: 11.5px; color: var(--muted); }
.ps-msg.error { color: var(--heat); }
.ps-view { position: relative; display: grid; place-items: center; width: 72px; aspect-ratio: 1; border: 1.5px dashed var(--line); border-radius: var(--radius-sm); background: var(--sunken); color: var(--accent); overflow: hidden; }
.ps-view img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }
.log-photo { flex: none; padding: 0; border: 0; background: none; cursor: pointer; }
.log-thumb { display: block; width: 44px; height: 44px; border-radius: 10px; overflow: hidden; background: var(--sunken); }
.log-thumb img { width: 100%; height: 100%; object-fit: cover; }

/* 饮食（§118、§119 重排）：图、横向滑动、按顿一行 */
.hscroll { display: flex; gap: 10px; overflow-x: auto; scroll-snap-type: x proximity; scroll-padding-inline: 16px; margin-inline: -16px; padding: 2px 16px 4px; scrollbar-width: none; }
.hscroll::-webkit-scrollbar { display: none; }
.hscroll > * { flex: none; scroll-snap-align: start; }
.food-tile { --hue: 150; position: relative; display: grid; place-items: center; flex: none; overflow: hidden; border-radius: 12px;
  background: linear-gradient(145deg, hsl(var(--hue) 38% 22%), hsl(var(--hue) 30% 13%)); color: hsl(var(--hue) 70% 78%); }
.food-tile img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }
.food-tile b { font-size: 1.05em; font-weight: 600; }
.food-tile.sm { width: 40px; height: 40px; border-radius: 10px; font-size: 15px; }
.food-tile.md { width: 52px; height: 52px; font-size: 19px; }
.food-tile.cover { width: 100%; aspect-ratio: 4 / 3; max-width: 100%; border-radius: 14px 14px 0 0; font-size: 34px; }
.food-tile.hero { width: 100%; aspect-ratio: 16 / 9; max-width: 100%; border-radius: 14px; font-size: 48px; }
.food-tile.add { background: var(--sunken); color: var(--muted); border: 1.5px dashed var(--line); }
.img-credit { margin: -6px 0 0; font-size: 11.5px; }
.img-credit a { color: inherit; }

.meal-entry-wrap { display: flex; flex-direction: column; gap: 10px; }
.entry-bar { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 8px; }
.entry-chip { display: flex; flex-direction: row; align-items: center; justify-content: center; gap: 6px; height: 44px; padding: 0 8px;
  border: 1px solid var(--line); border-radius: 12px; background: var(--surface); color: var(--ink); font: inherit; font-size: 14px; font-weight: 600; cursor: pointer; white-space: nowrap; }
.entry-chip.primary { background: var(--accent); color: var(--accent-ink); border-color: transparent; }
.entry-chip .i { flex: none; }
.usual-wrap { display: flex; flex-direction: column; gap: 6px; min-width: 0; }
.usual-label { margin: 0; }
.usual-card { display: flex; align-items: center; gap: 10px; max-width: 220px; padding: 8px 12px 8px 8px; border: 1px solid var(--line); border-radius: 14px;
  background: var(--surface); color: var(--ink); font: inherit; text-align: left; cursor: pointer; }
.uc-text, .rc-text, .fh-text { display: flex; flex-direction: column; gap: 1px; min-width: 0; }
.uc-text b { font-size: 14px; font-weight: 600; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.uc-text small, .rc-text small { font-size: 12px; color: var(--muted); }

.meal-record { display: flex; flex-direction: column; gap: 0; padding-block: 6px; }
.diet-review { display: flex; align-items: center; gap: 12px; padding: 10px 12px; margin: 6px 0 8px; border: 0; border-radius: 12px; background: var(--accent-soft); }
.dr-text { display: flex; flex-direction: column; gap: 2px; flex: 1; min-width: 0; }
.dr-text b { font-size: 14px; color: var(--accent); }
.dr-text small { font-size: 12.5px; color: var(--ink-2); line-height: 1.45; }
.day-meals { display: flex; flex-direction: column; }
.dm-slot { display: flex; flex-direction: column; }
.dm-row { display: flex; align-items: center; gap: 12px; padding: 10px 0; width: 100%; border: 0; background: none; color: var(--ink); font: inherit; text-align: left; }
.day-meals > * + * { border-top: 1px solid var(--line); }
.dm-row .row-main { display: flex; flex-direction: column; gap: 1px; flex: 1; min-width: 0; }
.dm-row .row-title { font-weight: 600; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.dm-kind { font-size: 11.5px; letter-spacing: .08em; color: var(--muted); }
.dm-row.planned .food-tile { opacity: .55; }
.dm-row.planned .row-title { color: var(--ink-2); }
.dm-row.empty { cursor: pointer; }
.dm-row .btn { flex: none; }

.recipes { display: flex; flex-direction: column; gap: 10px; }
.tag-row .pill { padding-inline: 14px; }
.recipe-card { display: flex; flex-direction: column; width: 152px; padding: 0; border: 0; border-radius: 14px; background: var(--surface);
  box-shadow: var(--shadow); color: var(--ink); font: inherit; text-align: left; cursor: pointer; overflow: hidden; }
.recipe-card .rc-text { padding: 9px 11px 11px; }
.rc-text b { font-size: 14px; font-weight: 600; line-height: 1.35; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; min-height: 2.7em; }
.recipe-card.new .food-tile { border-radius: 14px 14px 0 0; border: 0; }
.more-row { margin-top: 4px; }
.more-row .pill, .more-row .ask-chip { white-space: nowrap; }

.food-lines { display: flex; flex-direction: column; gap: 10px; }
.fl-list { display: flex; flex-direction: column; gap: 8px; }
.fl-row { display: flex; align-items: center; gap: 8px; }
.fl-name { display: flex; flex-direction: column; flex: 1; min-width: 0; font-size: 14px; }
.fl-name b { font-weight: 600; overflow-wrap: anywhere; }
.fl-name small { font-size: 11.5px; }
.fl-row select { width: 76px; flex: none; }
.fl-g { display: flex; flex-direction: row; align-items: center; gap: 4px; flex: none; color: var(--muted); }
.fl-g input { width: 72px; }
.fl-total { margin: 0; font-size: 13px; }
.fl-hits { display: flex; flex-direction: column; gap: 4px; }
.fl-hit { display: flex; flex-direction: row; align-items: center; gap: 10px; padding: 6px 10px 6px 6px; border: 1px solid var(--line); border-radius: var(--radius-sm); background: var(--sunken); color: var(--ink); font: inherit; font-size: 14px; text-align: left; cursor: pointer; }
.fl-hit small { font-size: 12px; }
.edit-foods { display: flex; flex-direction: column; gap: 8px; }
.edit-foods h3 { margin: 0; }
.pm-title { margin: 6px 0 0; font-size: 15px; }
.pm-row { display: flex; flex-direction: row; align-items: center; justify-content: space-between; gap: 12px; color: var(--ink); font-size: 14px; }
.pm-row > span { display: flex; flex-direction: column; min-width: 0; }
.pm-row small { font-size: 12px; }
.pm-row input { width: 108px; flex: none; }
.pm-row select { max-width: 62%; flex: none; }
.sheet-body > .pills, .sheet-body > textarea, .sheet-body > .qa-row { flex-shrink: 0; }

/* ==== 机甲 HUD（spec [2026-10-23] §121，取代 §104 的风格）：放在最后统一覆盖。黑绿底加 5% 六边形底纹；面板切角、左上绿色角标；
   一个颜色只管一件事：荧光绿主色、白完成、红强度、钛金搭子、紫脂肪（11-03 项目负责人看过橙、紫红后选了"夜视绿"）；数字用系统窄体；动效只有面罩呼吸、在线灯闪、破 PR 金边 ==== */
body {
  background:
    radial-gradient(70% 40% at 50% -8%, rgb(15 42 29 / 70%), transparent 70%),
    url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='18' height='31.2'%3E%3Cpath d='M9 0L18 5.2V15.6L9 20.8L0 15.6V5.2ZM9 20.8V31.2' fill='none' stroke='%23D4FF3A' stroke-width='.5' opacity='.05'/%3E%3C/svg%3E"),
    var(--bg);
  background-attachment: fixed;
}
.bar { background: color-mix(in srgb, var(--bg) 86%, transparent); }
.bar-kicker { font-family: var(--digits); font-weight: 700; letter-spacing: .18em; font-size: 11px; color: var(--muted); text-transform: uppercase; }
.bar-title {
  font-weight: 900; letter-spacing: .08em; background: linear-gradient(180deg, var(--ink), var(--gold-2));
  -webkit-background-clip: text; background-clip: text; color: transparent;
}
.num, .hero-stat .v, .goal-nums b, .hc-nums b { font-family: var(--digits); font-variant-numeric: tabular-nums; }

/* 面板：小圆角、细边、渐变底，左上橙色角标（用背景画，不占伪元素） */
.card {
  border: 1px solid #e1ebe5; border-radius: 4px; box-shadow: 0 10px 30px rgb(15 42 29 / 35%);
  background:
    linear-gradient(var(--accent), var(--accent)) 5px 5px / 12px 2px no-repeat,
    linear-gradient(var(--accent), var(--accent)) 5px 5px / 2px 12px no-repeat,
    linear-gradient(165deg, rgb(236 236 236 / 95%), rgb(250 250 250 / 95%));
}
.cut { clip-path: polygon(16px 0, 100% 0, 100% calc(100% - 16px), calc(100% - 16px) 100%, 0 100%, 0 16px); }
.section-head h2::before { background: var(--accent); box-shadow: 0 0 8px var(--accent-glow); }
.btn { background: linear-gradient(180deg, var(--fire-2), var(--fire)); color: var(--accent-ink); letter-spacing: .12em; box-shadow: 0 0 16px rgb(18 183 106 / 30%); }
.btn:focus-visible { outline-offset: -4px; outline-color: var(--accent-ink); }
.btn.ghost { background: transparent; box-shadow: inset 0 0 0 1px #b5c6bc; }
.pill, .ask-chip { border-radius: 2px; }
.thin-bar { border-radius: 0; background: #e1ebe5; }
.thin-bar span { border-radius: 0; background: repeating-linear-gradient(90deg, var(--accent) 0 9px, transparent 9px 11px); }

/* 底部导航：选中的标签上方一条发光橙线 */
.tabs { background: linear-gradient(180deg, #f8fbf9, #ffffff); border-top: 1px solid #e1ebe5; }
.tabs a { position: relative; color: #5b6b62; font-size: 12px; }
.tabs a.on { color: var(--accent); font-weight: 700; }
.tabs a.on::before { content: ""; position: absolute; top: 0; left: 50%; width: 40px; height: 2px; margin-left: -20px; background: var(--accent); box-shadow: 0 0 10px var(--accent); }

/* 分段：切角，选中的橙底 */
.seg { border-radius: 0; background: transparent; border: 0; padding: 0; gap: 6px; }
.seg a {
  border-radius: 0; border: 1px solid #d6e3db; background: #eff6f2; color: #4f5f56;
  clip-path: polygon(8px 0, 100% 0, 100% calc(100% - 8px), calc(100% - 8px) 100%, 0 100%, 0 8px);
}
.seg a.on { background: linear-gradient(180deg, rgb(18 183 106 / 30%), rgb(18 183 106 / 8%)); border-color: var(--accent); color: var(--ink); box-shadow: inset 0 0 10px rgb(18 183 106 / 40%); }

/* "＋"快捷记录：六边形 */
.fab { border-radius: 0; clip-path: polygon(25% 3%, 75% 3%, 100% 50%, 75% 97%, 25% 97%, 0 50%); box-shadow: none; color: var(--accent-ink);
  background: linear-gradient(180deg, var(--fire-2), var(--fire)); }

/* 搭子说：钛金条（§121 需求 4） */
.buddy-say { display: flex; flex-direction: column; gap: 10px; padding: 12px 14px; border: 1px solid var(--gold-line); background: var(--gold-soft); border-radius: 2px; }
.buddy-say-head { display: flex; align-items: center; gap: 8px; font-family: var(--digits); font-size: 11px; font-weight: 700; letter-spacing: .15em; color: var(--gold); }
.buddy-say p { margin: 0; color: var(--gold-2); font-size: 14.5px; line-height: 1.6; }
.buddy-say .hc-msg { background: transparent; border: 0; box-shadow: none; padding: 0; }
.buddy-say .hc-msg + .hc-msg { padding-top: 10px; border-top: 1px solid var(--gold-line); }

/* 搭子头盔（§121 需求 5） */
.mech { flex: none; display: block; }
.mech .visor { animation: visor 2.6s ease-in-out infinite; }
@keyframes visor { 0%, 100% { opacity: .72; } 50% { opacity: 1; } }
.online-dot { display: inline-block; width: 7px; height: 7px; border-radius: 50%; background: var(--accent); box-shadow: 0 0 8px var(--accent); animation: blink 1.6s steps(2, end) infinite; }
@keyframes blink { 50% { opacity: .35; } }
.pr-new { animation: pr-sweep 1.2s ease-out 1; }
@keyframes pr-sweep { from { box-shadow: inset 0 0 0 1px var(--gold), 0 0 22px rgb(226 184 102 / 55%); } to { box-shadow: inset 2px 0 0 var(--gold); } }

/* 首页·练（§121 需求 4） */
.hc-kicker { font-family: var(--digits); font-size: 11px; font-weight: 700; letter-spacing: .18em; color: var(--accent); }
.hc-top { display: flex; align-items: center; gap: 12px; }
.hc-text { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 6px; }
.hc .hc-title { font-size: 24px; font-weight: 900; letter-spacing: .02em; line-height: 1.25; }
.hc-parts { display: flex; flex-wrap: wrap; gap: 5px; }
.hc-parts span { font-size: 11.5px; padding: 1px 7px; border: 1px solid #4a5a51; color: var(--fire-2); background: rgb(18 183 106 / 8%); }
.hc-stats { display: flex; gap: 8px; }
.hc-stat { flex: 1; min-width: 0; display: flex; flex-direction: column; padding: 7px 9px; border: 1px solid #e1ebe5; background: rgb(255 255 255 / 60%); }
.hc-stat span { font-size: 10.5px; color: var(--muted); }
.hc-stat b { font-size: 19px; font-weight: 700; white-space: nowrap; }
.hc-stat small { font-size: 10.5px; color: var(--muted); font-weight: 400; }
.wk { flex: none; display: flex; flex-direction: column; align-items: center; gap: 2px; font-size: 10.5px; color: var(--muted); }
.wk-ring { width: 76px; height: 76px; }
.wk-num { font-family: var(--digits); font-size: 15px; font-weight: 700; fill: var(--ink); }
.vitals { display: grid; grid-template-columns: repeat(var(--n), minmax(0, 1fr)); gap: 8px; }
.vt { display: flex; flex-direction: column; gap: 1px; padding: 9px 10px; border: 1px solid #e1ebe5; background: rgb(245 245 245 / 90%); border-top: 2px solid var(--gold); min-width: 0; }
.vt.hr { border-top-color: var(--heat); } .vt.wx { border-top-color: var(--muted); }
.vt-k { font-size: 10.5px; color: var(--muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.vt b { font-size: 19px; font-weight: 700; } .vt small { font-size: 10.5px; color: var(--muted); font-weight: 400; }
.vt.sleep b { color: var(--gold-2); } .vt.hr b { color: #b5361f; }
.vt-sub { font-size: 11px; color: var(--ink-2); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.mv-list { gap: 12px; }
.mv-group { display: flex; flex-direction: column; gap: 6px; }
.mv-head { font-size: 13px; font-weight: 800; letter-spacing: .08em; padding-left: 8px; border-left: 3px solid var(--gold); color: var(--gold-2); }
.mv-head.main { border-left-color: var(--heat); color: #b5361f; }
.mv-warm { margin: 0; font-size: 13px; color: var(--ink-2); line-height: 1.55; }
.mv-row { display: flex; align-items: center; gap: 10px; padding: 8px 10px; border: 1px solid #e1ebe5; background: rgb(255 255 255 / 55%); }
.mv-thumb { width: 38px; height: 38px; object-fit: cover; flex: none; background: var(--sunken); display: grid; place-items: center; color: var(--muted); }
.mv-cut { flex: none; font-family: var(--digits); font-size: 12px; font-weight: 700; color: var(--heat); padding: 2px 6px; border: 1px dashed var(--heat); }
.btn.go { letter-spacing: .3em; font-size: 16px; }

/* 对话页（§121 需求 5）：顶上三段，页头和搭子每条消息旁是头盔 */
.chat > .page-seg { margin-top: calc(10px + env(safe-area-inset-top, 0px)); }
.chat-bar { gap: 10px; align-items: center; }
.chat-bar .who span { display: inline-flex; align-items: center; gap: 4px; }
.msg-row { display: flex; gap: 8px; align-items: flex-start; }
.msg-row > .mech { margin-top: 2px; border: 1px solid #b5c6bc; background: #eff6f2; padding: 2px; box-sizing: content-box; }
.msg-row > .msg-coach { flex: 1; min-width: 0; border-radius: 2px; border-left: 2px solid var(--accent); }
.welcome > .mech { align-self: flex-start; }

/* 图鉴·食物（§121 需求 7） */
.fa-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; }
.fa-card { display: flex; flex-direction: column; align-items: flex-start; gap: 4px; padding: 10px; text-align: left; font: inherit; color: var(--ink); cursor: pointer;
  border: 1px solid #e1ebe5; background: linear-gradient(165deg, rgb(236 236 236 / 95%), rgb(250 250 250 / 95%));
  clip-path: polygon(10px 0, 100% 0, 100% calc(100% - 10px), calc(100% - 10px) 100%, 0 100%, 0 10px); min-width: 0; }
.fa-card .food-tile { width: 100%; height: auto; aspect-ratio: 4 / 3; max-width: 100%; border-radius: 2px; }
.fa-card b { font-size: 14.5px; }
.fa-card .num { font-size: 13px; color: var(--fire-2); } .fa-card .num small { color: var(--muted); }
.fa-head { display: flex; gap: 14px; align-items: center; }
.fa-head > div { min-width: 0; }
.fa-kcal { font-size: 30px; font-weight: 700; color: var(--fire-2); } .fa-kcal small { font-size: 12px; color: var(--muted); font-weight: 400; }
.fa-macros { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 8px; }
.fa-macro { display: flex; flex-direction: column; padding: 8px 10px; border: 1px solid #e1ebe5; background: var(--sunken); }
.fa-macro span { font-size: 11px; color: var(--muted); }
.fa-macro b { font-size: 17px; } .fa-macro .p { color: var(--accent); } .fa-macro .c { color: var(--gold-2); } .fa-macro .f { color: var(--violet); }

/* 战绩·本周小结（§121 需求 6） */
.ws { gap: 12px; }
.ws-cells { display: grid; grid-template-columns: repeat(auto-fit, minmax(90px, 1fr)); gap: 6px; }
.ws-cell { display: flex; flex-direction: column; padding: 7px 9px; border: 1px solid #e1ebe5; background: rgb(255 255 255 / 60%); min-width: 0; }
.ws-cell b { font-size: 19px; font-weight: 700; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.ws-cell.done b { color: var(--good); }
.ws-cell span { font-size: 10.5px; color: var(--muted); }
.ws-cell small { font-size: 11px; color: var(--ink-2); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.ws-bars { display: flex; align-items: flex-end; gap: 4px; height: 58px; }
.ws-bar { flex: 1; display: flex; flex-direction: column; align-items: center; justify-content: flex-end; gap: 3px; height: 100%; }
.ws-bar span { display: block; width: 100%; background: #d6e3db; }
.ws-bar span.on { background: var(--good); }
.ws-bar.today span.on { background: var(--accent); box-shadow: 0 0 8px rgb(18 183 106 / 60%); }
.ws-bar i { font-style: normal; font-size: 10px; color: var(--muted); }
.ws-bar.today i { color: var(--accent); }
.pr-list { display: flex; flex-direction: column; gap: 5px; }
.pr-row { display: flex; align-items: center; gap: 10px; padding: 9px 12px; border: 1px solid #e1ebe5; background: rgb(245 245 245 / 90%); }
.pr-row.broke { border-color: var(--gold); background: linear-gradient(90deg, rgb(226 184 102 / 16%), rgb(245 245 245 / 90%)); box-shadow: inset 2px 0 0 var(--gold); }
.pr-name { flex: 1; min-width: 0; font-size: 14px; font-weight: 600; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.pr-row b { font-size: 15px; } .pr-row.broke b { color: var(--gold-2); }
.pr-badge { flex: none; font-size: 11px; font-weight: 800; padding: 1px 6px; background: var(--gold); color: #ffffff; }
.pr-day { font-size: 11px; color: var(--muted); }
.ws-photos { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 6px; }
.ws-photos .log-photo, .ws-photos .log-thumb { width: 100%; height: auto; aspect-ratio: 1; max-width: 100%; border-radius: 2px; }

/* 我（§121 需求 1、8） */
.me-rows { padding: 0; gap: 0; }
.me-row { display: flex; align-items: center; gap: 10px; padding: 13px 14px; text-decoration: none; color: var(--ink); font: inherit; background: none; border: 0; cursor: pointer; text-align: left; width: 100%; }
.me-row + .me-row { border-top: 1px solid #e1ebe5; }
.me-row span { font-size: 15px; } .me-row small { margin-left: auto; font-size: 12px; color: var(--muted); }
.me-row .i { color: var(--muted); }
.me-dot { width: 3px; height: 15px; flex: none; background: var(--accent); }
.me-dot.violet { background: var(--violet); } .me-dot.gold { background: var(--gold); }
.mem-list { display: flex; flex-direction: column; gap: 14px; }
.mem-group { display: flex; flex-direction: column; gap: 6px; }
.mem-row { display: flex; align-items: flex-start; gap: 10px; padding: 9px 11px; border: 1px solid #e1ebe5; background: var(--sunken); }
.mem-row p { flex: 1; min-width: 0; margin: 0; font-size: 14px; line-height: 1.55; }
.mem-del { flex: none; color: var(--heat); font-size: 13px; }
.chat > .page-seg + .chat-bar { padding-top: 8px; }
/* 其余组件跟上机甲风：搜索框、弹出页小圆角；旧的四角标记让给面板背景里的角标 */
.search { border-radius: 2px; border-color: #d6e3db; }
.sheet { border-radius: 6px 6px 0 0; border-top: 1px solid rgb(18 183 106 / 45%); }
.hero::before, .hero::after, .plan-card::before, .plan-card::after, .goal::before, .goal::after { display: none; }
.food-tile.lg { width: 72px; height: 72px; border-radius: 2px; }
.food-tile.lg b { font-size: 26px; }

/* ==== 运动海报（spec [2026-10-23] §124，取代 §121 的机甲风格）：放在最后统一覆盖。黑底白字、大粗字、少卡片，
   内容区不铺面板、不画角标、不切角、不发光、不要底纹，靠大字、留白和细线分层；荧光黄绿只点关键处 ==== */
body { background: var(--bg); }
.bar { background: color-mix(in srgb, var(--bg) 92%, transparent); }
.bar-kicker { font-family: var(--font); font-weight: 600; letter-spacing: .2em; font-size: 11px; color: var(--muted); }
.bar-title { font-size: 34px; font-weight: 900; letter-spacing: -.02em; line-height: 1.1; background: none; color: var(--ink); -webkit-text-fill-color: currentColor; }
.num, .hero-stat .v, .goal-nums b, .hc-nums b { font-family: var(--font); font-weight: 800; letter-spacing: -.02em; }
.section-head h2 { font-size: 20px; font-weight: 900; letter-spacing: -.01em; }
.section-head h2::before { display: none; }

/* 面板：不铺底色、不画角标，上面一根细线分开 */
.card { background: transparent; border: 0; border-top: 1px solid #e1ebe5; border-radius: 0; box-shadow: none; padding: 16px 0; }
.cut, .seg a, .fa-card, .fab, .btn, .btn.small { clip-path: none; }
.hero::before, .hero::after, .plan-card::before, .plan-card::after, .goal::before, .goal::after { display: none; }

/* 按钮：直角色块 */
.btn { border-radius: 0; background: var(--accent); color: var(--accent-ink); font-weight: 800; letter-spacing: .12em; box-shadow: none; }
.btn.ghost { background: transparent; color: var(--ink); box-shadow: inset 0 0 0 1px #b5c6bc; }
.btn.quiet { background: transparent; color: var(--ink-2); }
.btn.go { font-size: 17px; letter-spacing: .4em; padding: 16px 0; }
.pill, .ask-chip, .chip { border-radius: 0; }
.pill.on { background: var(--accent); color: var(--accent-ink); border-color: var(--accent); }
.thin-bar span { background: var(--accent); }
.search { border-radius: 0; border: 0; border-bottom: 1px solid #b5c6bc; background: transparent; }
.sheet { border-radius: 0; border-top: 2px solid var(--accent); }

/* 分段：下划线 */
.seg { gap: 18px; display: flex; border-bottom: 1px solid #e1ebe5; }
.seg a { flex: none; border: 0; background: transparent; color: var(--muted); padding: 8px 0 10px; font-size: 16px; font-weight: 800; box-shadow: none; margin-bottom: -1px; border-bottom: 3px solid transparent; }
.seg a.on { background: transparent; color: var(--ink); border-bottom-color: var(--accent); box-shadow: none; }

/* 底部导航 */
.tabs { background: #ffffff; border-top: 1px solid #e1ebe5; }
.tabs a.on { color: var(--accent); }
.tabs a.on::before { box-shadow: none; height: 3px; }

/* "＋"快捷记录：方块 */
.fab { border-radius: 0; background: var(--accent); color: var(--accent-ink); }

/* 首页·练：大标题、大数字，不画框 */
.hc-kicker { font-family: var(--font); font-weight: 700; letter-spacing: .2em; color: var(--accent); }
.hc .hc-title { font-size: 34px; font-weight: 900; letter-spacing: -.03em; line-height: 1.08; }
.hc-parts span { border: 0; background: transparent; color: var(--ink-2); padding: 0; font-size: 13px; }
.hc-parts span + span::before { content: "/ "; color: #8fa298; }
.hc-stats { gap: 22px; }
.hc-stat { flex: none; padding: 0; border: 0; background: transparent; }
.hc-stat b { font-size: 26px; }
.hc-stat:first-child b { color: var(--accent); }
.wk-num { font-family: var(--font); font-weight: 800; }
.vitals { gap: 0; border-top: 1px solid #e1ebe5; }
.vt { border: 0; border-top: 0; background: transparent; padding: 12px 10px 12px 0; }
.vt + .vt { border-left: 1px solid #e1ebe5; padding-left: 12px; }
.vt b { font-size: 22px; } .vt.sleep b { color: var(--ink); } .vt.hr b { color: var(--heat); }
.mv-head { border-left: 0; padding-left: 0; font-size: 12px; letter-spacing: .2em; color: var(--muted); }
.mv-head.main { color: var(--heat); }
.mv-row { border: 0; border-top: 1px solid #e4eee8; background: transparent; padding: 12px 0; }
.mv-row .row-title { font-size: 17px; font-weight: 800; }
.mv-thumb { background: #ebf3ee; }

/* IronM 的话：白字、左边一根黄绿线 */
.buddy-say { border: 0; border-left: 3px solid var(--accent); background: transparent; padding: 4px 0 4px 14px; border-radius: 0; }
.buddy-say-head { color: var(--accent); font-family: var(--font); }
.buddy-say p { color: var(--ink); }
.buddy-say .hc-msg + .hc-msg { border-top-color: #e1ebe5; }

/* 对话 */
.msg-row > .mech { border: 0; background: #f2f8f5; }
.msg-row > .msg-coach { border: 0; border-left: 2px solid var(--accent); border-radius: 0; background: #f4f9f6; box-shadow: none; }
.msg-user { background: var(--ink); color: #ffffff; border-radius: 0; }
.online-dot { box-shadow: none; }

/* 图鉴·食物、战绩、我 */
.fa-card { background: transparent; border: 0; border-top: 1px solid #e1ebe5; padding: 10px 0; }
.fa-card .num { color: var(--accent); }
.fa-macro { border: 0; background: transparent; padding: 0; }
.ws-cell { border: 0; background: transparent; padding: 0; }
.ws-cell b { font-size: 28px; } .ws-cell.done b { color: var(--accent); }
.ws-bar span.on { background: var(--ink); } .ws-bar.today span.on { background: var(--accent); box-shadow: none; }
.pr-row { border: 0; border-top: 1px solid #e4eee8; background: transparent; padding: 12px 0; }
.pr-row.broke { border-color: #e4eee8; background: transparent; box-shadow: none; }
.pr-row b { font-size: 18px; } .pr-row.broke b { color: var(--accent); }
.pr-badge { background: var(--accent); color: #ffffff; }
.pr-new { animation: none; }
.me-rows { border-top: 1px solid #e1ebe5; }
.me-row + .me-row { border-top-color: #e4eee8; }
.me-dot { display: none; }
.mem-row { border: 0; border-top: 1px solid #e4eee8; background: transparent; padding: 10px 0; }
.live-entry, .live-entry.on { border: 0; border-left: 3px solid var(--accent); background: transparent; box-shadow: none; }
/* §124 把圆角统一收成直角的那条已去掉（§175 回到圆角） */

/* 首页·干饭（§125）：今日余额大字、今天的饮食计划逐样列数量；图鉴·食谱两列卡片 */
.budget { display: flex; flex-direction: column; gap: 6px; padding-top: 6px; }
.bg-big { font-size: 64px; font-weight: 900; letter-spacing: -.04em; line-height: 1; color: var(--accent); }
.bg-big small { font-size: 16px; font-weight: 700; color: var(--ink-2); letter-spacing: 0; }
.budget .thin-bar { height: 4px; margin-top: 4px; }
.bg-macros { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 12px; margin-top: 10px; }
.bg-macro { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.bg-macro span { font-size: 12px; color: var(--muted); letter-spacing: .1em; }
.bg-macro b { font-size: 24px; } .bg-macro small { font-size: 12px; color: var(--muted); font-weight: 600; }
.bg-macro.p b { color: var(--ink); } .bg-macro.f b { color: var(--violet); }
.bg-how { align-self: flex-start; font-size: 13px; margin-top: 4px; }
.tp-meta { margin: -4px 0 0; }
.today-plan { display: flex; flex-direction: column; }
.today-plan .diet-review { margin-bottom: 8px; }
.tp-list { display: flex; flex-direction: column; }
.tp-meal { display: flex; flex-direction: column; gap: 6px; padding: 14px 0; border-top: 1px solid #e1ebe5; }
.tp-head { display: flex; align-items: center; gap: 10px; }
.tp-head b { font-size: 20px; font-weight: 900; }
.tp-kcal { font-size: 15px; font-weight: 800; color: var(--ink-2); }
.tp-head > :last-child { margin-left: auto; }
.tp-tag { font-size: 12px; font-weight: 800; letter-spacing: .1em; color: var(--accent); }
.tp-name { display: flex; align-items: center; gap: 4px; font-size: 13px; color: var(--muted); }
.tp-eaten { display: flex; flex-direction: column; gap: 4px; cursor: pointer; }
.tp-foods { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; }
.tp-foods li { display: grid; grid-template-columns: minmax(0, 1fr) 64px 72px; gap: 8px; padding: 5px 0; font-size: 15px; }
.tp-foods li + li { border-top: 1px dashed #e4eee8; }
.tp-food { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.tp-foods .num { text-align: right; font-weight: 700; color: var(--ink-2); }
.tp-meal.planned .tp-head b, .tp-meal.planned .tp-foods { color: var(--muted); }
.tp-meal.planned .tp-foods .num { color: var(--muted); }
.tp-none { font-size: 13px; color: var(--muted); }
.recipe-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; }
.recipe-grid .recipe-card { width: auto; min-width: 0; }
.recipe-grid .food-tile.cover { width: 100%; max-width: 100%; }

/* ==== 照 Nike Training Club 的感觉（spec [2026-10-23] §126，取代 §124 的黑底荧光）：放在最后统一覆盖。
   白底黑字、浅灰分隔线、黑色胶囊主按钮、浅灰胶囊标签；颜色留给照片；照片没下好之前是浅灰底，不用彩色色块加字 ==== */
body { background: var(--bg); color: var(--ink); }
.bar { background: rgb(255 255 255 / 94%); }
.bar-kicker { color: var(--muted); letter-spacing: .04em; font-weight: 600; }
.hc-kicker { color: var(--muted); letter-spacing: .02em; font-weight: 600; }
.card { border-top-color: #e1ebe5; }
.btn { border-radius: 999px; padding: 14px 24px; letter-spacing: .02em; font-weight: 700; background: var(--ink); color: var(--bg); }
.btn.small { border-radius: 999px; padding: 9px 16px; }
.btn.go { letter-spacing: .08em; }
.btn.ghost { background: transparent; color: var(--ink); box-shadow: inset 0 0 0 1.5px var(--ink); }
.btn.quiet { background: transparent; color: var(--ink); }
.btn.danger { background: transparent; color: var(--heat); }
.pill, .ask-chip, .chip, .entry-chip { border-radius: 999px; background: #eef6f1; border-color: transparent; color: var(--ink); }
.pill.on, .entry-chip.primary { background: var(--ink); color: var(--bg); }
.fab { border-radius: 50%; background: var(--ink); color: var(--bg); box-shadow: 0 6px 20px rgb(15 42 29 / 18%); }
.tabs { background: rgb(255 255 255 / 96%); border-top: 1px solid #e1ebe5; }
.tabs a { color: #8fa298; } .tabs a.on { color: var(--ink); }
.tabs a.on::before { display: none; }
.seg a { color: #8fa298; } .seg a.on { color: var(--ink); border-bottom-color: var(--ink); }
.search { border-bottom: 1.5px solid #dbe7e0; }
.sheet { border-top: 0; border-radius: 16px 16px 0 0; box-shadow: 0 -10px 40px rgb(15 42 29 / 12%); }
.sheet-overlay { background: rgb(15 42 29 / 35%); }
.food-tile { background: #ebf3ee !important; color: transparent; }
.food-tile b { visibility: hidden; }
.food-tile.add { color: var(--ink); }
.msg-user { background: #eef6f1; color: var(--ink); border-radius: 18px 18px 4px 18px; }
.msg-row > .msg-coach { background: transparent; border-left: 0; padding: 2px 0; }
.msg-row > .mech { background: #eef6f1; border-radius: 50%; }
.starter { background: #f2f8f5; border: 0; }
.composer textarea { background: #eef6f1; border: 0; border-radius: 22px; }
.buddy-say { border-left-color: var(--ink); }
.buddy-say-head { color: var(--ink); }
.live-entry, .live-entry.on { border-left-color: var(--ink); }
.thin-bar { background: #e4eee8; }
.pr-badge { background: var(--ink); color: var(--bg); }
.wk-ring circle:first-child { stroke: #e4eee8; }

/* ==== 白底运动绿（spec [2026-10-23] §128，取代 §126 的黑白灰）：放在最后统一覆盖。主色翠绿做按钮、进度、选中的底，
   按钮上的字用深墨绿（白字在翠绿上看不清）；文字链接和选中的字用深一点的绿 ==== */
.link, .section-head a, .hc-more, .tp-tag, .bg-how { color: var(--accent-text); }
.tabs a.on, .seg a.on { color: var(--accent-text); }
.seg a.on { border-bottom-color: var(--accent); }
.btn { background: var(--accent); color: var(--accent-ink); }
.btn.ghost { box-shadow: inset 0 0 0 1.5px var(--accent); color: var(--accent-text); background: transparent; }
.btn.quiet { color: var(--accent-text); }
.pill.on, .entry-chip.primary { background: var(--accent); color: var(--accent-ink); }
.pill, .ask-chip, .chip, .entry-chip { background: var(--surface); }
.fab { background: var(--accent); color: var(--accent-ink); box-shadow: 0 6px 20px rgb(18 183 106 / 35%); }
.thin-bar { background: var(--accent-soft); } .thin-bar span { background: var(--accent); }
.food-tile { background: var(--accent-soft) !important; }
.msg-user { background: var(--accent-soft); }
.msg-row > .mech { background: var(--accent-soft); }
.starter { background: var(--surface); }
.composer textarea { background: var(--surface); }
.buddy-say { border-left-color: var(--accent); background: var(--accent-soft); padding: 12px 14px; border-radius: 12px; border-left-width: 0; }
.buddy-say-head { color: var(--accent-text); }
.pr-badge { background: var(--accent); color: var(--accent-ink); }
.live-entry, .live-entry.on { border-left-color: var(--accent); }
.bg-big { color: var(--ink); }
.hc-stat:first-child b { color: var(--ink); }
.ws-cell.done b { color: var(--accent-text); }
.ws-bar span.on { background: var(--accent-soft); } .ws-bar.today span.on, .ws-bar span.on { background: var(--accent); }

/* 首页·练、干饭的新排法（§127、§128）：左对齐、靠留白分块；数字用系统窄体特粗，是整页唯一的记忆点 */
.fig-n { font-family: var(--figs); font-weight: 800; font-stretch: condensed; letter-spacing: 0; line-height: .95; font-variant-numeric: tabular-nums; }
section.today { display: flex; flex-direction: column; gap: 10px; padding: 8px 0 4px; }
.today-title { margin: 0; font-size: 36px; line-height: 1.1; font-weight: 800; letter-spacing: -.01em; color: var(--ink); text-wrap: balance; }
.today-sub { margin: 0; font-size: 16px; line-height: 1.6; color: var(--ink-2); }
.figs { display: flex; gap: 28px; margin-top: 6px; flex-wrap: wrap; }
.fig { display: flex; flex-direction: column; gap: 2px; }
.fig .fig-n { font-size: 44px; color: var(--ink); }
.fig span { font-size: 13px; color: var(--muted); }
.week-line { display: flex; align-items: center; gap: 10px; margin-top: 8px; font-size: 14px; color: var(--ink-2); }
.week-dots { display: flex; gap: 6px; }
.week-dots i { width: 22px; height: 6px; border-radius: 3px; background: var(--accent-soft); box-shadow: inset 0 0 0 1px #c6ecd8; }
.week-dots i.on { background: var(--accent); box-shadow: none; }
.moves { display: flex; flex-direction: column; padding-top: 18px; }
.moves-head { margin: 18px 0 4px; font-size: 18px; font-weight: 800; color: var(--ink); }
.warm { background: var(--surface); border-radius: 14px; padding: 12px 14px; }
.warm summary { display: flex; align-items: center; justify-content: space-between; font-size: 15px; font-weight: 700; color: var(--ink); cursor: pointer; list-style: none; }
.warm summary::-webkit-details-marker { display: none; }
.warm[open] summary .i { transform: rotate(90deg); }
.warm ol { margin: 8px 0 0; padding-left: 20px; color: var(--ink-2); font-size: 14px; line-height: 1.65; }
.move { display: flex; align-items: center; gap: 14px; padding: 12px 0; border-top: 1px solid var(--line); }
.move:first-of-type { border-top: 0; }
.move-pic { width: 56px; height: 56px; flex: none; border-radius: 12px; object-fit: contain; background: var(--surface); display: grid; place-items: center; color: var(--muted); }
.move-text { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 2px; }
.move-text b { font-size: 17px; font-weight: 700; color: var(--ink); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.move-text span { font-size: 13px; color: var(--muted); }
.move-text .move-cut { color: var(--heat); }
.move-sets { flex: none; font-family: var(--figs); font-weight: 800; font-stretch: condensed; font-size: 26px; color: var(--ink); }
.moves .btn.go { margin-top: 18px; padding: 16px 0; font-size: 17px; letter-spacing: .1em; }
.bg-big.fig-n { font-size: 84px; color: var(--ink); }
.bg-big small { font-family: var(--font); font-size: 16px; margin-left: 6px; }
.bg-macro b.fig-n { font-size: 30px; }
.tp-kcal { display: inline-flex; align-items: baseline; gap: 3px; font-size: 13px; color: var(--muted); }
.tp-kcal .fig-n { font-size: 22px; color: var(--ink-2); }
/* 切页淡入（§130）：系统设了减少动态效果时由上面的全局规则停掉 */
.view.enter { animation: view-in .2s ease-out; }
@keyframes view-in { from { opacity: 0; transform: translateY(6px); } }
.set-row .unit { white-space: nowrap; }


/* ==== 像素农场风（spec [2026-10-23] §131，参照星露谷的感觉；素材都是自己画的）：放在最后统一覆盖。
   草地格子底；木框面板（深木边、浅木内衬）配羊皮纸底；木板按钮有厚度；像素字（缝合像素字体，OFL） ==== */
html { -webkit-font-smoothing: none; font-smooth: never; }
body {
  font-family: var(--font); color: var(--ink); background-color: var(--bg);
  background-image: linear-gradient(45deg, rgb(0 0 0 / 5%) 25%, transparent 25%, transparent 75%, rgb(0 0 0 / 5%) 75%),
    linear-gradient(45deg, rgb(0 0 0 / 5%) 25%, transparent 25%, transparent 75%, rgb(0 0 0 / 5%) 75%);
  background-size: 16px 16px; background-position: 0 0, 8px 8px; background-attachment: scroll;
}
.bar { background: transparent; backdrop-filter: none; -webkit-backdrop-filter: none; }
.bar-kicker { font-family: var(--font); color: var(--wood-dark); letter-spacing: .02em; font-size: 12px; }
.bar-title { font-size: 32px; font-weight: 400; color: #fff6d8; text-shadow: 3px 3px 0 var(--wood-dark), -2px -2px 0 var(--wood-dark), 2px -2px 0 var(--wood-dark), -2px 2px 0 var(--wood-dark); letter-spacing: .02em; }
h1, h2, h3, b, strong, .num, .fig-n { font-weight: 400; }
.fig-n, .num { font-family: var(--figs); font-stretch: normal; letter-spacing: 0; }
.section-head h2 { display: inline-block; font-size: 16px; padding: 4px 10px; color: #fff2cc; background: var(--plank); border: 3px solid var(--wood-dark);
  box-shadow: inset 0 -4px 0 #7a3e12, inset 0 3px 0 #d88a44; text-shadow: 2px 2px 0 var(--wood-dark); }
.section-head h2::before { display: none; }
.section-head a, .link { color: var(--accent-text); }

/* 木框面板 */
.card, section.today, .moves, .budget, .today-plan, .buddy-say, .ws, .me-rows, .pr-list, .vitals {
  background: var(--surface); border: 4px solid var(--wood); border-radius: 0;
  box-shadow: 0 0 0 2px var(--wood-dark), inset 0 0 0 3px var(--wood-light), 4px 4px 0 2px rgb(60 30 8 / 35%);
  padding: 14px; margin: 2px;
}
.card .card { box-shadow: inset 0 0 0 2px var(--wood-light); border-width: 2px; }
section.today { gap: 10px; }
.moves { padding-top: 14px; }
.move { border-top: 2px dashed var(--wood-light); }
.move-pic, .thumb, .mv-thumb { border-radius: 0; border: 3px solid var(--wood); background: #e9c784; }
.move-sets, .tp-kcal .fig-n { color: var(--ink); }

/* 按钮：木板，有厚度 */
.btn { border-radius: 0; background: var(--fire); color: var(--accent-ink); border: 3px solid #2e5410; font-weight: 400; letter-spacing: .06em;
  box-shadow: inset 0 -5px 0 #2e5a12, inset 0 4px 0 #6fb83c, 3px 3px 0 #2e5410; text-shadow: 2px 2px 0 #2e5410; clip-path: none; }
.btn.ghost { background: var(--plank); color: #fff2cc; border-color: var(--wood-dark); box-shadow: inset 0 -5px 0 var(--wood), inset 0 4px 0 #e8a55e, 3px 3px 0 var(--wood-dark); text-shadow: 2px 2px 0 var(--wood-dark); }
.btn.quiet { background: transparent; color: var(--accent-text); border-color: transparent; box-shadow: none; text-shadow: none; }
.btn.danger { background: transparent; color: var(--heat); border-color: transparent; box-shadow: none; text-shadow: none; }
.btn.small { border-radius: 0; }
.btn:not(:disabled):active { transform: translate(2px, 2px); box-shadow: inset 0 -3px 0 #2e5a12, 1px 1px 0 #2e5410; }

/* 小牌子：胶囊换成方框标签 */
.pill, .ask-chip, .chip, .entry-chip, .tp-tag, .pr-badge, .starter {
  border-radius: 0; background: var(--sunken); border: 2px solid var(--wood); color: var(--wood-dark); box-shadow: none; }
.pill.on, .entry-chip.primary, .pr-badge { background: var(--amber); border-color: #8a5a10; color: var(--wood-dark); }
.seg { border: 0; gap: 6px; display: flex; flex-wrap: wrap; }
.seg a { border: 2px solid var(--wood); background: var(--sunken); color: var(--wood-dark); padding: 4px 12px; margin: 0; font-size: 15px; border-radius: 0; }
.seg a.on { background: var(--amber); border-color: #8a5a10; color: var(--wood-dark); }
.search { border: 3px solid var(--wood); background: var(--sunken); border-radius: 0; }
input, select, textarea { border-radius: 0; border: 2px solid var(--wood); background: var(--sunken); color: var(--ink); font-family: var(--font); }

/* 底部导航：木头底、木板标签 */
.tabs { background: var(--wood); border-top: 4px solid var(--wood-dark); box-shadow: inset 0 3px 0 var(--plank); }
.tabs-inner { gap: 6px; padding-top: 6px; padding-bottom: 6px; }
.tabs a { background: #a65a22; border: 2px solid var(--wood-dark); color: #f7e2a8; font-size: 13px; }
.tabs a.on { background: var(--amber); color: var(--wood-dark); }
.tabs a .ti svg.i { stroke: currentColor; }

/* 体力条、委托板、游戏日历（§131 需求 2） */
.quest-head { display: flex; justify-content: space-between; align-items: center; }
.plank-label { display: inline-block; padding: 4px 10px; font-size: 15px; color: #fff2cc; background: var(--plank); border: 3px solid var(--wood-dark);
  box-shadow: inset 0 -4px 0 #7a3e12, inset 0 3px 0 #d88a44; text-shadow: 2px 2px 0 var(--wood-dark); }
.quest-pic { position: relative; height: 150px; border: 3px solid var(--wood-dark); background: #9bd45e; overflow: hidden; }
.quest-pic img { width: 100%; height: 100%; object-fit: cover; display: block; }
.credit { position: absolute; right: 4px; bottom: 4px; font-size: 10px; padding: 1px 5px; background: rgb(255 246 216 / 85%); color: var(--wood-dark); text-decoration: none; }
.today-title { font-size: 28px; color: var(--ink); font-weight: 400; }
.today-sub { color: var(--ink-2); font-size: 15px; }
.fig .fig-n { font-size: 32px; color: var(--ink); }
.reward { font-size: 13px; color: var(--ink-2); }
.week-dots { gap: 4px; }
.week-dots i { width: 26px; height: 26px; border-radius: 0; background: var(--sunken); border: 2px solid #c99a52; box-shadow: none; }
.week-dots i.on { background: #9bd45e; border-color: #3e7a1c; }
.energy { width: 30px; flex: none; align-self: stretch; min-height: 140px; background: #3a1e08; border: 3px solid var(--wood); box-shadow: 0 0 0 2px var(--wood-dark);
  display: flex; flex-direction: column; justify-content: flex-end; padding: 3px; box-sizing: border-box; }
.energy i { display: block; background: linear-gradient(180deg, #b7e86a, #5da130); border: 1px solid #2e5410; }
.budget.with-energy { flex-direction: row; gap: 14px; }
.budget-main { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 6px; }
.bg-big.fig-n { font-size: 48px; color: var(--ink); }
.thin-bar { background: #3a1e08; border: 2px solid var(--wood); height: 10px; }
.thin-bar span { background: var(--accent); }
.tp-meal { border-top: 2px dashed var(--wood-light); }
.tp-thumb { width: 48px; height: 48px; flex: none; border: 3px solid var(--wood); background: #e9c784; object-fit: cover; }
.food-tile { border-radius: 0 !important; border: 3px solid var(--wood); background: #e9c784 !important; }
.food-tile b { visibility: visible; color: var(--wood-dark); }
.food-tile img { image-rendering: auto; }

/* IronM 对话框：村民对话框，像素头盔头像；用户的话是羊皮纸便签 */
.buddy-say { flex-direction: column; }
.buddy-say-head { color: var(--wood-dark); font-family: var(--font); }
.buddy-say p { color: var(--ink); }
.msg-row > .mech { width: 44px; height: 44px; padding: 4px; background: #e9c784; border: 3px solid var(--wood); border-radius: 0; box-sizing: border-box; }
.msg-row > .msg-coach { background: var(--sunken); border: 4px solid var(--wood); border-radius: 0; box-shadow: 0 0 0 2px var(--wood-dark), inset 0 0 0 3px var(--wood-light); padding: 10px 12px; }
.msg-user { background: #fff6d8; color: var(--ink); border: 3px solid var(--wood); border-radius: 0; box-shadow: 3px 3px 0 var(--wood-dark); }
.chat-bar { border-bottom: 3px solid var(--wood); }
.composer textarea { border-radius: 0; background: var(--sunken); border: 3px solid var(--wood); }
.welcome h2 { color: var(--ink); }
.sheet { background: var(--surface); border-radius: 0; border-top: 4px solid var(--wood); box-shadow: 0 -4px 0 var(--wood-dark); }

.fab { border-radius: 0; background: var(--plank); color: #fff2cc; border: 3px solid var(--wood-dark); box-shadow: 3px 3px 0 var(--wood-dark);
  }
.view.enter { animation: none; }
/* 顶栏铺草地，滚动时盖住下面的内容；草地上的链接、按钮做成小木牌，看得清（§131） */
.bar { background-color: var(--bg);
  background-image: linear-gradient(45deg, rgb(0 0 0 / 5%) 25%, transparent 25%, transparent 75%, rgb(0 0 0 / 5%) 75%),
    linear-gradient(45deg, rgb(0 0 0 / 5%) 25%, transparent 25%, transparent 75%, rgb(0 0 0 / 5%) 75%);
  background-size: 16px 16px; background-position: 0 0, 8px 8px; }
.section-head a, .section-head .link { background: var(--sunken); border: 2px solid var(--wood); padding: 2px 8px; color: var(--wood-dark); }
.icon-btn { border-radius: 0; background: var(--sunken); border: 2px solid var(--wood); color: var(--wood-dark); }
.chat-bar .mech { width: 44px; height: 44px; padding: 4px; background: #e9c784; border: 3px solid var(--wood); box-sizing: border-box; }
.chat-bar .who b { color: #fff6d8; text-shadow: 2px 2px 0 var(--wood-dark), -1px -1px 0 var(--wood-dark); font-size: 20px; }
.welcome h2, .welcome p { background: var(--sunken); border: 3px solid var(--wood); padding: 4px 10px; display: inline-block; }
.tp-meta { margin: 0 0 6px; color: var(--muted); }
/* 页头跟着内容滚走，不粘在顶上（§134） */
.bar { position: static; }

/* 小字看不清（§135）：正文换回系统字体、正常平滑；像素字只给大字，字号只用 12 的整数倍 */
html { -webkit-font-smoothing: antialiased; font-smooth: auto; }
.bar-title, .today-title, .plank-label, .section-head h2, .fig-n, .num, .bg-big, .move-sets, .tp-head b, .tp-kcal .fig-n,
.ws-cell b, .pr-row b, .live-bar .who b, .step-val b, .welcome h2 {
  font-family: var(--pixel); -webkit-font-smoothing: none; font-smooth: never; font-weight: 400; letter-spacing: 0; }
.bar-title { font-size: 36px; }
.today-title { font-size: 36px; line-height: 1.15; }
.plank-label, .section-head h2 { font-size: 24px; line-height: 1; padding: 6px 10px; }
.fig .fig-n, .ws-cell b { font-size: 36px; }
.bg-big.fig-n { font-size: 48px; }
.move-sets, .tp-head b, .tp-kcal .fig-n, .pr-row b, .bg-macro b.fig-n { font-size: 24px; }
.num { font-size: 24px; }
.row-sub.num, .log-day.num, .pr-day.num { font-family: var(--font); font-size: 13px; -webkit-font-smoothing: antialiased; }
.btn, .tabs a, .seg a, .pill, .chip, .entry-chip, .tp-tag { font-family: var(--font); font-weight: 600; }
.btn { text-shadow: 1px 1px 0 #2e5410; }
.btn.ghost { text-shadow: 1px 1px 0 var(--wood-dark); }
.today-sub, .reward, .muted, .caption, .tp-foods, .move-text span { font-size: 14px; }
/* 榜单放进图鉴后（§136）：列表、待评也用木框面板；直接写在草地上的说明配羊皮纸底，看得清 */
.rk-list, .rk-pending { background: var(--surface); border: 4px solid var(--wood); box-shadow: 0 0 0 2px var(--wood-dark), inset 0 0 0 3px var(--wood-light);
  padding: 10px 12px; margin: 2px; border-radius: 0; }
.rk-pending h3 { margin: 0 0 6px; font-size: 15px; color: var(--ink); }
.rk-pending a, .rk-list a { color: var(--ink); }
.view > .caption, .view > p.muted, .view > .rk-none { align-self: flex-start; background: var(--sunken); border: 2px solid var(--wood); padding: 4px 10px; color: var(--ink-2); }
.rk-embedded { justify-content: flex-end; }
/* 训练时间线（§139）：一条竖线串起每次训练，每次一张配图卡片 */
.tl-entry { display: flex; align-items: center; gap: 10px; text-decoration: none; color: var(--ink); }
.tl-entry-text { flex: 1; min-width: 0; font-size: 14px; color: var(--ink-2); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.tl-back { align-self: flex-start; background: var(--sunken); border: 2px solid var(--wood); padding: 3px 10px; color: var(--wood-dark); }
.tl-head { display: flex; justify-content: space-between; align-items: center; }
.tl-head .muted { background: var(--sunken); border: 2px solid var(--wood); padding: 2px 8px; }
.timeline { list-style: none; margin: 0; padding: 0 0 0 18px; position: relative; display: flex; flex-direction: column; gap: 16px; }
.timeline::before { content: ""; position: absolute; left: 6px; top: 6px; bottom: 6px; width: 4px; background: var(--wood); box-shadow: 0 0 0 2px var(--wood-dark); }
.tl-item { position: relative; display: flex; flex-direction: column; gap: 6px; }
.tl-item::before { content: ""; position: absolute; left: -18px; top: 4px; width: 16px; height: 16px; background: var(--amber); border: 3px solid var(--wood-dark); box-sizing: border-box; }
.tl-item.rest::before { background: var(--sunken); }
.tl-date { align-self: flex-start; font-size: 13px; background: var(--sunken); border: 2px solid var(--wood); padding: 1px 8px; color: var(--wood-dark); }
.tl-card { display: flex; flex-direction: column; gap: 6px; padding: 10px; }
.tl-pic { position: relative; height: 160px; border: 3px solid var(--wood-dark); background: #e9c784; overflow: hidden; }
.tl-pic img { width: 100%; height: 100%; object-fit: cover; display: block; }
.tl-title { font-family: var(--pixel); font-size: 24px; -webkit-font-smoothing: none; font-weight: 400; }
.tl-moves { margin: 0; font-size: 13px; color: var(--muted); }
.tl-rest { align-self: flex-start; font-size: 13px; color: var(--muted); background: var(--sunken); border: 2px dashed var(--wood-light); padding: 4px 10px; }
.card.tl-entry { flex-direction: row; align-items: center; }

/* §146 身体数据只看三项：体重一整行（带每周变化和趋势），BMI、体脂率并排 */
.tile-sub { font-size: 13px; color: var(--muted); }
.body-three .tile.wide .spark { height: 96px; }
.body-fold > summary .row-main { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.body-fold > summary .row-sub { font-weight: 400; }
.raw-fold > summary { cursor: pointer; list-style: none; display: flex; align-items: center; gap: 4px; font-size: 13px; color: var(--muted); padding: 4px 2px; }
.raw-fold > summary::-webkit-details-marker { display: none; }
.raw-fold[open] > summary { margin-bottom: 8px; }
.raw-fold .section-head { display: none; }

/* §147 分享卡和周报 */
.share-box { display: flex; flex-direction: column; gap: 12px; }
.share-img { width: 100%; max-width: 420px; align-self: center; height: auto; border: 3px solid var(--wood-dark); background: var(--bg); }
.tl-share { align-self: flex-start; font-size: 13px; }
.week-report .btn { margin-top: 4px; }
.week-msg .inbox-head .icon-btn { margin-left: auto; }
.week-msg > p { margin: 6px 0 10px; }
.check-row { display: flex; align-items: center; gap: 8px; font-size: 14px; }

/* §149 认器械 */
.machine-shot { display: flex; flex-direction: row; align-items: center; gap: 14px; cursor: pointer; }
.machine-shot .row-main { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.machine-msg:empty { display: none; }
.machine-msg { font-size: 14px; display: flex; flex-direction: column; gap: 8px; }
.machine-groups { display: flex; flex-direction: column; gap: 18px; }
.machine-shot b { font-size: 16px; color: var(--ink); }
.sheet .row-item .thumb { width: 48px; height: 48px; flex: none; object-fit: contain; background: #fff; }

/* §153 模型和 API */
.good-text { color: var(--good); font-weight: 600; }
.model-form .field[hidden] { display: none; }
.model-form .kv .error { font-size: 13px; text-align: right; }

/* §155 注册和登录 */
.login-seg { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.login-seg button { text-align: center; padding: 8px 0; border: 0; background: transparent; color: var(--muted); font-weight: 600; font-size: 15px; cursor: pointer; font-family: var(--font); }
.login-seg button.on { background: var(--surface); color: var(--accent-text); box-shadow: inset 0 0 0 2px var(--wood); }
.login-form { display: flex; flex-direction: column; gap: 10px; }
.login-links { display: flex; justify-content: space-between; gap: 12px; flex-wrap: wrap; }
.login .login-seg { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; padding: 0; background: none; border: 0; }
.login .login-seg button { padding: 10px 0; background: var(--surface); border: 2px solid var(--wood); color: var(--muted); }
.login .login-seg button.on { background: var(--plank); border-color: var(--wood-dark); color: var(--accent-ink); }

/* §161 首页最上面的今日热搜、方案库 */
.hot-strip { display: flex; align-items: center; gap: 10px; padding: 10px 12px; margin-bottom: 12px; background: var(--surface); border: 2px solid var(--wood); color: var(--ink); text-decoration: none; min-width: 0; }
.hot-label { flex: none; font-family: var(--pixel); font-size: 12px; color: var(--accent-ink); background: var(--heat); padding: 3px 6px; }
.hot-rows { display: flex; gap: 12px; min-width: 0; overflow: hidden; white-space: nowrap; flex: 1; font-size: 14px; }
.hot-row { display: inline-flex; align-items: center; gap: 4px; min-width: 0; }
.hot-row b { color: var(--heat); font-family: var(--digits); }
.hot-strip > .i { flex: none; color: var(--muted); }
.plan-lib { display: flex; flex-direction: column; gap: 10px; }
.plan-lib-card { display: flex; flex-direction: column; gap: 4px; cursor: pointer; }
.plan-lib-card .chip { align-self: flex-start; }
/* §184 饮食方案库：卡片上的每天热量、详情里一天吃什么 */
.diet-lib-kcal { font-size: 13px; color: var(--ink-2); }
.plan-lib-card .tags .chip { align-self: auto; }
.diet-day { display: flex; flex-direction: column; gap: 8px; min-width: 0; }
.diet-day .row-sub { white-space: normal; }
.diet-day-total { margin: 0; font-weight: 600; font-size: 14px; overflow-wrap: anywhere; }
.diet-refs summary { cursor: pointer; color: var(--muted); font-size: 13px; }

/* §163 管家看今天：正在看、出错了（能重试）、定了休息；临时调整的预览 */
.today-coach { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; padding: 8px 10px; font-size: 14px; line-height: 1.5;
  background: var(--sunken); border: 2px solid var(--wood); color: var(--ink); }
.today-coach[hidden] { display: none; }
.today-coach > span:not(.typing) { flex: 1; min-width: 0; }
.today-coach .typing { flex: none; }
.today-coach.err { background: var(--heat-soft); border-color: var(--heat); }
.today-coach.err .i { color: var(--heat); flex: none; }
.today-coach.adj, .today-coach.rest { background: var(--gold-soft); border-color: var(--gold-line); }
.tv-coach { display: flex; align-items: flex-start; gap: 10px; padding: 10px 12px; background: var(--sunken); border: 2px solid var(--wood); }
.tv-coach > div:not(.typing) { flex: 1; min-width: 0; }
.tv-coach b { display: block; font-size: 15px; }
.tv-coach p { margin: 2px 0 0; font-size: 13.5px; }
.tv-coach .i { flex: none; margin-top: 2px; color: var(--wood-dark); }
.tv-coach.err { background: var(--heat-soft); border-color: var(--heat); }
.tv-coach.err .i { color: var(--heat); }
.tv-orig { display: flex; flex-direction: column; gap: 4px; }
.tv-orig .label { color: var(--muted); font-size: 13px; }
.tv-orig .plan-items { color: var(--ink-2); }
.temp-box, .hc-draft { display: flex; flex-direction: column; gap: 6px; }
.hc-draft:empty { display: none; }
.temp-span { margin: 0; font-size: 14.5px; }
.temp-lines { margin: 0; padding-left: 18px; display: flex; flex-direction: column; gap: 4px; font-size: 14px; line-height: 1.5; }
.buddy-say .hc-draft p { font-size: 13.5px; }

/* ==== 白底圆角卡片风（spec [2026-10-23] §175，取代 §131 的像素农场风）：放在最后统一覆盖。
   去掉草地底、木框、木板按钮、像素字；白色大圆角卡片、淡阴影；珊瑚红主色；浅绿小标签；图标放浅紫圆底 ==== */
html, body { -webkit-font-smoothing: antialiased; font-smooth: auto; }
body { background: var(--bg); background-image: none; color: var(--ink); font-family: var(--font); }
h1, h2, h3, b, strong { font-weight: 650; }
.bar-title, .today-title, .plank-label, .section-head h2, .fig-n, .num, .bg-big, .move-sets, .tp-head b, .tp-kcal .fig-n,
.ws-cell b, .pr-row b, .live-bar .who b, .step-val b, .welcome h2, .tl-title {
  font-family: var(--font); -webkit-font-smoothing: antialiased; font-smooth: auto; letter-spacing: -.01em; text-shadow: none; }
.fig-n, .num, .bg-big, .move-sets, .ws-cell b, .pr-row b, .step-val b { font-weight: 750; font-variant-numeric: tabular-nums; }

/* 顶栏：左边企鹅标志和 IronM，中间页名，右边"我" */
.bar { position: sticky; top: 0; z-index: 5; display: grid; grid-template-columns: 1fr auto 1fr; align-items: center; gap: 8px;
  padding: calc(10px + env(safe-area-inset-top, 0px)) 0 10px; background: color-mix(in srgb, var(--bg) 88%, transparent); background-image: none;
  backdrop-filter: saturate(1.4) blur(14px); -webkit-backdrop-filter: saturate(1.4) blur(14px); }
.bar-brand { display: inline-flex; align-items: center; gap: 8px; text-decoration: none; color: var(--ink); justify-self: start; }
.bar-brand b { font-size: 19px; font-weight: 750; letter-spacing: -.01em; }
.bar-logo { width: 36px; height: 36px; border-radius: 11px; background: #fff3c4; display: grid; place-items: center; box-shadow: var(--shadow); }
.bar-text { text-align: center; min-width: 0; }
.bar-title { font-size: 16px; font-weight: 600; color: var(--ink-2); margin: 0; line-height: 1.2; }
.bar-kicker { font-size: 11px; color: var(--muted); letter-spacing: 0; }
.bar-kicker:empty { display: none; }
.bar-me { justify-self: end; width: 38px; height: 38px; border-radius: 50%; display: grid; place-items: center; background: var(--surface);
  color: var(--ink-2); box-shadow: var(--shadow); text-decoration: none; }

/* 卡片 */
.card, section.today, .moves, .budget, .today-plan, .buddy-say, .ws, .me-rows, .pr-list, .vitals, .rk-list, .rk-pending {
  background: var(--surface); border: 0; border-radius: var(--radius); box-shadow: var(--shadow); padding: 16px; margin: 0; }
.card .card { box-shadow: none; border: 0; background: var(--sunken); border-radius: var(--radius-sm); }
@media all { .card { border-color: transparent; } }
.move { border-top: 1px solid var(--line); }
.tp-meal { border-top: 1px solid var(--line); }
.move-pic, .thumb, .mv-thumb, .tp-thumb { border: 0; border-radius: 12px; background: var(--sunken); }
.quest-pic, .tl-pic { border: 0; border-radius: 16px; background: var(--sunken); }
.share-img { border: 0; border-radius: 16px; }
.food-tile { border: 0; border-radius: 16px !important; background: var(--sunken) !important; }
.food-tile b { color: var(--ink); }

/* 小节标题：普通粗体，不再是木牌 */
.section-head h2, .plank-label { display: inline-flex; align-items: center; gap: 6px; font-size: 18px; font-weight: 700; color: var(--ink);
  background: none; border: 0; box-shadow: none; padding: 0; line-height: 1.3; }
.section-head a, .section-head .link, .link { background: none; border: 0; padding: 0; color: var(--accent-text); font-weight: 600; }

/* 按钮：珊瑚红大圆角；次要按钮浅紫底 */
.btn { border: 0; border-radius: 16px; background: var(--fire); color: var(--accent-ink); font-weight: 650; letter-spacing: .02em;
  box-shadow: 0 6px 16px rgb(242 96 63 / 28%); text-shadow: none; clip-path: none; }
.btn.ghost { background: var(--icon-bg); color: #2d2d4a; box-shadow: none; text-shadow: none; border: 0; }
.btn.quiet { background: transparent; color: var(--accent-text); box-shadow: none; text-shadow: none; }
.btn.danger { background: transparent; color: var(--heat); box-shadow: none; text-shadow: none; border: 1px solid var(--line); }
.btn.small { border-radius: 12px; }
.btn:disabled { box-shadow: none; }
.btn:not(:disabled):active { transform: scale(.98); box-shadow: none; }

/* 小标签、胶囊 */
.pill, .ask-chip, .chip, .entry-chip, .tp-tag, .starter { border-radius: 999px; border: 0; background: var(--neutral-soft); color: var(--ink-2); box-shadow: none; }
.pr-badge { border-radius: 999px; border: 0; background: var(--accent-soft); color: var(--accent-text); }
.chip.good { background: var(--good-soft); color: var(--good); }
.chip.attention { background: var(--warn-soft); color: var(--warn); }
.pill.on, .entry-chip.primary { background: var(--fire); color: #fff; }
.seg { display: flex; gap: 4px; padding: 4px; background: var(--icon-bg); border-radius: 999px; border: 0; flex-wrap: nowrap; }
.seg a, .seg button { flex: 1; text-align: center; border: 0; background: transparent; color: var(--ink-2); padding: 8px 12px; border-radius: 999px; font-size: 15px; font-weight: 600; }
.seg a.on, .seg button.on { background: var(--fire); color: #fff; box-shadow: 0 4px 12px rgb(242 96 63 / 25%); border: 0; }
.search { border: 0; background: var(--surface); border-radius: 999px; box-shadow: var(--shadow); }
input, select, textarea { border-radius: 12px; border: 1px solid var(--line); background: var(--surface); color: var(--ink); font-family: var(--font); }
.icon-btn { border-radius: 50%; border: 0; background: var(--icon-bg); color: #3b3b5c; }

/* 底栏五格：白底，选中珊瑚红 */
.tabs { background: color-mix(in srgb, var(--surface) 96%, transparent); border-top: 1px solid var(--line); box-shadow: 0 -4px 20px rgb(40 30 60 / 4%); }
.tabs-inner { grid-template-columns: repeat(5, 1fr); gap: 0; padding-top: 4px; padding-bottom: 4px; }
.tabs a { background: none; border: 0; color: #4a4a5c; font-size: 11px; font-weight: 600; }
.tabs a.on { background: none; color: var(--accent-text); }
.tabs a.on .ti { color: var(--accent); }

/* 快捷记录：圆形珊瑚红 */
.fab { border-radius: 50%; border: 0; background: var(--accent); color: #fff; box-shadow: 0 8px 22px rgb(242 96 63 / 35%); }

/* 进度条、体力条 */
.thin-bar { background: #ececf3; border: 0; border-radius: 999px; height: 8px; overflow: hidden; }
.thin-bar span { background: var(--accent); border-radius: 999px; }
.energy { background: #ececf3; border: 0; box-shadow: none; border-radius: 999px; padding: 3px; }
.energy i { background: var(--accent); border: 0; border-radius: 999px; }
.week-dots i { width: 22px; height: 8px; border-radius: 999px; background: #ececf3; border: 0; }
.week-dots i.on { background: var(--accent); }

/* 今日热搜 */
.hot-strip { border: 0; border-radius: 999px; box-shadow: var(--shadow); background: var(--surface); padding: 8px 14px 8px 8px; }
.hot-label { font-family: var(--font); font-size: 12px; font-weight: 650; color: var(--accent-text); background: var(--accent-soft); padding: 4px 10px; border-radius: 999px; }
.hot-row b { color: var(--accent-text); }

/* IronM 说的话：企鹅头像 + 浅紫气泡；用户的话：珊瑚红气泡 */
.buddy-say { background: var(--surface); }
.buddy-say-head { color: var(--ink); font-weight: 650; }
.mech { flex: none; display: block; }
.msg-row > .mech, .chat-bar .mech { width: 40px; height: 40px; padding: 3px; border: 0; border-radius: 50%; background: #fff3c4; box-sizing: border-box; }
.msg-row > .msg-coach { background: var(--surface); border: 0; border-radius: 6px 20px 20px 20px; box-shadow: var(--shadow); padding: 12px 14px; }
.msg-user { background: var(--fire); color: #fff; border: 0; border-radius: 20px 6px 20px 20px; box-shadow: none; }
.chat-bar { border-bottom: 1px solid var(--line); }
.chat-bar .who b { color: var(--ink); text-shadow: none; font-size: 18px; }
.composer textarea { border-radius: 999px; background: var(--surface); border: 1px solid var(--line); box-shadow: var(--shadow); }
.welcome h2, .welcome p { background: none; border: 0; padding: 0; display: block; }
body.chatting.with-tabs .chat { height: calc(100dvh - var(--tabs-h) - env(safe-area-inset-bottom, 0px)); }
.send { background: var(--accent); color: #fff; border-radius: 50%; }

/* 底部弹出 */
.sheet { background: var(--surface); border: 0; border-radius: 24px 24px 0 0; box-shadow: var(--shadow-lg); }

/* §131 之后各节里用木框、羊皮纸的地方：换成浅底圆角 */
.view > .caption, .view > p.muted, .view > .rk-none { background: none; border: 0; padding: 0 2px; }
.tl-back, .tl-head .muted, .tl-date, .tl-rest { background: var(--surface); border: 0; border-radius: 999px; box-shadow: var(--shadow); padding: 3px 10px; color: var(--ink-2); }
.timeline::before { width: 2px; background: #e3e3ec; box-shadow: none; left: 7px; }
.tl-item::before { width: 14px; height: 14px; border-radius: 50%; background: var(--accent); border: 3px solid #fde3db; }
.tl-item.rest::before { background: #d6d6e2; border-color: #eeeef4; }
.today-coach, .tv-coach { background: var(--sunken); border: 0; border-radius: var(--radius-sm); }
.today-coach.err, .tv-coach.err { background: var(--heat-soft); }
.today-coach.adj, .today-coach.rest { background: var(--gold-soft); }
.login .login-seg button { border: 0; border-radius: 999px; background: var(--surface); color: var(--muted); }
.login .login-seg button.on { background: var(--fire); color: #fff; }
.login-seg button.on { box-shadow: none; }
.credit { border-radius: 6px; background: rgb(255 255 255 / 85%); color: var(--ink-2); }
.view.enter { animation: view-in .2s ease-out; }
/* 前几轮风格留下的角标折线、描边：去掉 */
.hero::before, .hero::after, .plan-card::before, .plan-card::after, .goal::before, .goal::after,
.msg-coach.inbox::before, .msg-coach.inbox::after { display: none; }
.msg-coach, .msg-coach.inbox { border: 0; border-radius: 20px; box-shadow: var(--shadow); background: var(--surface); }
.inbox-head .i { color: var(--accent); }
.st-chips .pill { border-radius: 999px; }
.st-chips .pill.on { background: var(--fire); color: #fff; }
/* 字号：标题粗一点、数字收小一点，跟参照图一样以卡片为主角 */
.today-title { font-size: 28px; font-weight: 750; line-height: 1.2; }
.fig .fig-n, .ws-cell b { font-size: 30px; }
.move-sets, .tp-head b, .tp-kcal .fig-n, .pr-row b, .bg-macro b.fig-n { font-size: 18px; font-weight: 700; white-space: nowrap; }
.move-text b { font-size: 16px; font-weight: 650; }
.bg-big.fig-n { font-size: 44px; }
.buddy-say-head .mech { width: 22px; height: 22px; }
/* 训练中（§175 需求 4）：重量、次数各占一行，大号数字配左右圆按钮；"完成这一组"珊瑚红长按钮 */
.live-card, .live-card.cur { border: 0; box-shadow: var(--shadow); border-radius: 24px; background: var(--surface); }
.live-card.cur { box-shadow: 0 0 0 2px var(--accent-soft), var(--shadow); }
.lf-steps { display: flex; flex-direction: column; gap: 10px; }
.lf-steps .stepper { display: flex; align-items: center; justify-content: space-between; gap: 10px; width: 100%;
  background: var(--sunken); border: 0; border-radius: 20px; padding: 12px 14px; }
.lf-steps .step-btn { width: 52px; height: 52px; flex: none; border-radius: 50%; border: 0; font-size: 26px; line-height: 1;
  background: var(--icon-bg); color: #3b3b5c; cursor: pointer; }
.lf-steps .step-btn:last-child { background: var(--accent); color: #fff; box-shadow: 0 6px 14px rgb(242 96 63 / 30%); }
.lf-steps .step-val { display: flex; align-items: baseline; gap: 4px; }
.lf-steps .step-val b { font-size: 40px; font-weight: 800; color: var(--ink); }
.lf-steps .step-val small { font-size: 14px; color: var(--muted); }
.live-bar { border-bottom: 0; }
.live-bar .live-total { display: inline-block; font-size: 20px; font-weight: 750; font-variant-numeric: tabular-nums; }
.live-bar .btn.quiet { background: var(--accent-soft); color: var(--accent-text); border-radius: 999px; padding: 8px 16px; }
.set-row.cur { background: var(--good-soft); border-radius: 14px; }
.lf-steps .step-val { flex-direction: row; }
/* 页头照 §134 跟着内容滚走，不粘在顶上 */
.bar { position: static; }

/* ==== 首页照参照图（§175）：日期一行和 IronM 入口、热搜标签、提醒横条、今日委托、今天吃 ==== */
.page-h { margin: 0; font-size: 22px; font-weight: 750; }
.home-top { display: flex; align-items: center; justify-content: space-between; gap: 10px; }
.day-line { display: inline-flex; align-items: center; gap: 8px; font-size: 15px; font-weight: 650; color: var(--ink); }
.day-line .dot { width: 8px; height: 8px; border-radius: 50%; background: #1e8a47; }
.buddy-pill { display: inline-flex; align-items: center; gap: 8px; padding: 6px 14px 6px 6px; border-radius: 999px; background: var(--surface);
  box-shadow: var(--shadow); text-decoration: none; color: var(--ink); }
.buddy-pill .mech { width: 36px; height: 36px; border-radius: 50%; background: #fff3c4; padding: 2px; box-sizing: border-box; }
.bp-text { display: flex; flex-direction: column; line-height: 1.25; }
.bp-text b { font-size: 14px; }
.bp-text small { display: inline-flex; align-items: center; font-size: 12px; color: var(--accent-text); font-weight: 600; }
.hot-strip { border-radius: 18px; padding: 8px; gap: 8px; }
.hot-rows { gap: 8px; }
.hot-row { background: var(--sunken); border-radius: 999px; padding: 4px 10px; font-size: 13px; font-weight: 600; }
.hot-row b { display: none; }
.hot-row::before { content: "#"; color: var(--ink-2); }
.home-alerts { display: flex; flex-direction: column; gap: 8px; }
.rep-alert { background: var(--heat-soft); border-radius: 16px; padding: 12px 14px; color: #8f1d22; }
.rep-alert summary { display: flex; align-items: center; gap: 8px; font-weight: 700; cursor: pointer; list-style: none; }
.rep-alert summary::-webkit-details-marker { display: none; }
.rep-alert .i { color: var(--heat); }
.rep-alert p { margin: 6px 0 0 30px; font-size: 14px; line-height: 1.6; color: #6b1d20; }
.tag { display: inline-flex; align-items: center; gap: 4px; font-size: 12px; font-weight: 700; padding: 4px 10px; border-radius: 999px;
  background: var(--neutral-soft); color: var(--ink-2); white-space: nowrap; }
.tag.coral { background: var(--accent-soft); color: var(--accent-text); }
.tag.green { background: var(--good-soft); color: var(--good); }
.tag.warn { background: var(--warn-soft); color: var(--warn); }
.card.quest, .card.eat { padding: 20px 18px; gap: 14px; border-radius: 26px; }
.quest-top { display: flex; align-items: flex-start; justify-content: space-between; gap: 10px; }
.quest-title { margin: 0; font-size: 24px; font-weight: 800; line-height: 1.25; color: var(--ink); }
.quest-sub { margin: 0; color: var(--ink-2); font-size: 15px; }
.quest-tags { display: flex; flex-direction: column; align-items: flex-end; gap: 6px; flex: none; }
.week-bar { display: flex; align-items: center; gap: 10px; font-size: 13px; font-weight: 650; color: var(--ink); }
.week-bar i { width: 100px; height: 6px; border-radius: 999px; background: #ececf3; overflow: hidden; display: block; }
.week-bar i b { display: block; height: 100%; background: var(--accent); border-radius: 999px; }
.quest-list { list-style: none; margin: 0; padding: 6px 16px; background: var(--sunken); border-radius: 18px; }
.quest-list li { display: flex; align-items: center; gap: 12px; padding: 12px 0; }
.quest-list li + li { border-top: 1px solid #ecebf3; }
.q-no { width: 26px; height: 26px; flex: none; border-radius: 50%; background: var(--surface); display: grid; place-items: center; font-size: 13px; font-weight: 700; color: var(--ink); }
.q-name { flex: 1; min-width: 0; display: flex; flex-direction: column; font-size: 16px; font-weight: 600; color: var(--ink); }
.q-name small { font-size: 12px; font-weight: 400; color: var(--muted); }
.q-name small.move-cut { color: var(--heat); }
.q-sets { flex: none; font-size: 15px; font-weight: 750; color: var(--ink-2); white-space: nowrap; }
.q-sets.hot { color: var(--accent-text); }
.card.quest .btn.go { padding: 16px 0; font-size: 17px; border-radius: 999px; }
.card.quest .btn.ghost.block { padding: 14px 0; border-radius: 999px; font-size: 15px; }
.quest-foot { display: flex; justify-content: space-between; align-items: center; }
.eat-head { display: flex; align-items: center; gap: 10px; }
.eat-head h2 { margin: 0; font-size: 24px; font-weight: 800; }
.eat-more { margin-left: auto; font-size: 13px; }
.eat-main { display: flex; align-items: center; gap: 16px; background: var(--sunken); border-radius: 18px; padding: 16px; }
.eat-main.empty { flex-direction: column; align-items: flex-start; gap: 10px; font-size: 14px; color: var(--ink-2); }
.eat-ring-box { position: relative; width: 96px; height: 96px; flex: none; }
.eat-ring { width: 96px; height: 96px; }
.er-track { fill: none; stroke: #e6e3ef; stroke-width: 9; }
.er-fill { fill: none; stroke: var(--accent); stroke-width: 9; stroke-linecap: round; }
.er-text { position: absolute; inset: 0; display: flex; flex-direction: column; align-items: center; justify-content: center; line-height: 1.1; }
.er-text b { font-size: 22px; font-weight: 800; }
.er-text small { font-size: 11px; color: var(--muted); }
.eat-text { display: flex; flex-direction: column; gap: 4px; min-width: 0; font-size: 13px; color: var(--ink-2); }
.eat-text > b { font-size: 19px; font-weight: 800; color: var(--ink); }
.eat-ok { display: inline-flex; align-items: center; gap: 4px; color: var(--good); font-weight: 650; }
.eat-macros { display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; }
.eat-macro { background: var(--sunken); border-radius: 14px; padding: 10px; display: flex; flex-direction: column; gap: 6px; min-width: 0; }
.em-head { display: flex; justify-content: space-between; gap: 4px; font-size: 13px; }
.em-head span { color: var(--muted); font-size: 12px; }
.eat-macro > i { display: block; height: 5px; border-radius: 999px; background: #e6e3ef; overflow: hidden; }
.eat-macro > i b { display: block; height: 100%; border-radius: 999px; }
.eat-macro.c > i b { background: #2f9e68; } .eat-macro.p > i b { background: var(--accent); } .eat-macro.f > i b { background: #8a6fd6; }
.em-num { font-size: 13px; color: var(--ink-2); }
.eat-actions { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
.eat-act { display: flex; align-items: center; gap: 10px; padding: 14px; border-radius: 999px; background: var(--icon-bg); border: 0; cursor: pointer;
  font: inherit; color: var(--ink); text-align: left; }
.eat-act b { display: block; font-size: 15px; }
.eat-act small { display: block; font-size: 11px; color: var(--muted); }
.ea-ic { width: 36px; height: 36px; border-radius: 50%; background: var(--surface); display: grid; place-items: center; color: var(--accent-text); flex: none; }
.card.eat > .error:empty { display: none; }
/* 首页细节（§175）：大按钮用参照图那样的亮珊瑚红，字放大加粗（大字 3:1 够看清）；小按钮仍用深一点的珊瑚红 */
.btn.block, .btn.go { background: var(--accent); font-size: 19px; font-weight: 750; }
.eat-ring-box, .eat-ring { width: 100px; height: 100px; }
.er-text b { font-size: 19px; }
.em-head { flex-direction: column; gap: 0; }
.em-head b { white-space: nowrap; }
.em-head span { font-size: 11px; }
.eat-act { flex-direction: row; border-radius: 22px; padding: 12px; min-width: 0; }
.eat-act > span:last-child { min-width: 0; }
.eat-act b, .eat-act small { white-space: nowrap; }
.live-entry, .live-entry.on { display: flex; flex-direction: row; align-items: center; gap: 12px; border: 0; border-radius: 20px;
  background: var(--accent-soft); box-shadow: none; padding: 14px 16px; text-align: left; }
.live-entry .row-main { flex: 1; display: flex; flex-direction: column; gap: 2px; }
.live-entry .row-title { font-weight: 750; color: var(--accent-text); }
.live-entry .row-end { display: inline-flex; align-items: center; color: var(--accent-text); font-weight: 650; }
.live-entry > .i { color: var(--accent); }
.btn.ghost.block, .card.quest .btn.ghost.block { background: var(--icon-bg); color: #2d2d4a; font-size: 16px; font-weight: 700; box-shadow: none; }

/* ==== IronM、图鉴、记录、我 照参照图（§175） ==== */
.card-title { display: flex; align-items: center; justify-content: space-between; gap: 10px; }
.card-title h2 { margin: 0; display: inline-flex; align-items: center; gap: 8px; font-size: 20px; font-weight: 800; color: var(--ink); }
.card-title h2 .i { color: var(--accent); }
.dot.coral { display: inline-block; width: 8px; height: 8px; border-radius: 50%; background: var(--accent); }
button.tag { border: 0; cursor: pointer; font: inherit; font-size: 12px; font-weight: 700; }

/* IronM：顶上的企鹅卡 */
.chat-bar.buddy-card { margin-top: 8px; padding: 14px; gap: 12px; border: 0; border-radius: 24px; background: var(--surface); box-shadow: var(--shadow); align-items: flex-start; }
.chat-bar.buddy-card > .mech { width: 64px; height: 64px; padding: 4px; }
.buddy-card .who { gap: 2px; }
.buddy-card .who b { font-size: 22px; font-weight: 800; }
.buddy-card .who > span { font-size: 12px; color: var(--muted); }
.who-facts { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 6px; }
.who-facts .tag { font-size: 11px; padding: 3px 8px; }
.chat .thread { padding-top: 14px; }

/* 图鉴：四个大标签、自由训练横幅、动作卡 */
.free-banner { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 16px 18px; border-radius: 24px;
  background: var(--icon-bg); cursor: pointer; }
.free-banner b { display: flex; align-items: center; gap: 6px; font-size: 20px; font-weight: 800; color: var(--ink); }
.free-banner b .i { color: var(--accent); }
.free-banner span { font-size: 13px; color: var(--ink-2); }
.fb-go { flex: none; display: inline-flex; align-items: center; gap: 2px; padding: 8px 14px; border-radius: 999px; background: var(--fire); color: #fff !important; font-weight: 700; }
.lib-head { display: flex; align-items: baseline; gap: 8px; }
.lib-head h2 { margin: 0; font-size: 22px; font-weight: 800; }
.lib-head .muted { background: var(--neutral-soft); border-radius: 999px; padding: 2px 10px; font-size: 12px; font-weight: 700; color: var(--ink-2); }
.pills .pill { background: var(--surface); box-shadow: var(--shadow); font-weight: 650; }
.pills .pill.on { background: #1d1d26; color: #fff; }
.move-card { background: var(--surface); border-radius: 22px; box-shadow: var(--shadow); overflow: hidden; border: 0; padding: 0; }
.move-cover { border-radius: 18px; margin: 8px 8px 0; overflow: hidden; background: var(--sunken); }
.cover-level { border-radius: 999px; font-weight: 700; background: var(--good-soft); color: var(--good); }
.cover-level.lv-进阶 { background: var(--accent-soft); color: var(--accent-text); }
.cover-level.lv-中级 { background: var(--good-soft); color: var(--good); }
.move-info { padding: 10px 12px 4px; }
.move-info b { font-size: 16px; font-weight: 750; }
.move-best { display: flex; align-items: center; justify-content: space-between; margin: 6px 8px 8px; padding: 8px 10px; border-radius: 14px; background: var(--sunken); }
.move-best span { font-size: 12px; color: var(--ink-2); font-weight: 600; }
.move-best b { font-size: 20px; font-weight: 800; color: var(--accent-text); }

/* 记录：这周表现、身体数据 */
.week-perf { gap: 14px; }
.wp-cells { display: grid; grid-template-columns: repeat(3, 1fr); gap: 6px; background: var(--sunken); border-radius: 18px; padding: 14px 10px; text-align: center; }
.wp-cell span { display: block; font-size: 12px; color: var(--ink-2); font-weight: 600; }
.wp-cell b { font-size: 26px; font-weight: 800; color: var(--ink); }
.wp-cell b small { font-size: 12px; font-weight: 600; color: var(--muted); margin-left: 2px; }
.wp-cell.hot b { color: var(--accent-text); }
.wp-goal-head { display: flex; justify-content: space-between; font-size: 13px; font-weight: 650; }
.wp-goal-head b { color: var(--accent-text); }
.wp-goal > i { display: block; height: 8px; margin-top: 6px; border-radius: 999px; background: #ececf3; overflow: hidden; }
.wp-goal > i b { display: block; height: 100%; background: var(--accent); border-radius: 999px; }
.body-card .tiles { gap: 10px; }
.body-card .tile { background: var(--sunken); box-shadow: none; border-radius: 18px; }

/* 我：资料卡、分组设置带图标 */
.me-head .avatar { width: 64px; height: 64px; font-size: 24px; background: var(--accent-soft); color: var(--accent-text); border: 3px solid #fff; box-shadow: var(--shadow); }
.me-head .row-main { display: flex; flex-direction: column; align-items: flex-start; gap: 6px; }
.me-head .row-title { font-size: 18px; font-weight: 800; }
.me-head .tag .mech { width: 16px; height: 16px; }
.me-stats { display: grid; grid-template-columns: repeat(2, 1fr); gap: 6px; background: var(--icon-bg); border-radius: 16px; padding: 12px; text-align: center; }
.me-stats span { display: block; font-size: 12px; color: var(--ink-2); font-weight: 600; }
.me-stats b { font-size: 24px; font-weight: 800; }
.me-stats b small { font-size: 12px; margin-left: 2px; color: var(--muted); }
.me-group { display: flex; flex-direction: column; gap: 8px; }
.me-group-h { margin: 0; display: inline-flex; align-items: center; gap: 8px; font-size: 17px; font-weight: 800; color: var(--ink); padding: 0 2px; }
.me-group-h .i { color: var(--accent); }
.me-rows { padding: 6px 14px; gap: 0; }
.me-row { display: flex; align-items: center; gap: 12px; padding: 12px 0; width: 100%; background: none; border: 0; font: inherit; color: var(--ink); text-decoration: none; cursor: pointer; text-align: left; }
.me-row + .me-row { border-top: 1px solid var(--line); }
.me-ic { width: 40px; height: 40px; flex: none; border-radius: 50%; background: var(--icon-bg); display: grid; place-items: center; color: #3b3b5c; }
.me-name { flex: 1; min-width: 0; font-size: 16px; font-weight: 600; }
.me-row small { color: var(--muted); font-size: 12px; }
.btn.danger.block { background: var(--surface); color: var(--heat); font-size: 16px; box-shadow: var(--shadow); border: 0; }
.tile .num, .tile b, .cal-card, .cal-card * { font-family: var(--font); }

/* ==== 训练中照参照图（§175 需求 4） ==== */
.live-bar { gap: 8px; }
.live-bar .who { flex-direction: column; align-items: flex-start; gap: 2px; }
.live-clock { display: inline-flex; align-items: center; gap: 6px; padding: 6px 14px; border-radius: 999px; background: var(--icon-bg); color: var(--ink); }
.live-clock .i { color: var(--accent); }
.live-bar .who > span:last-child { font-size: 12px; color: var(--muted); padding-left: 4px; }
.live-bar .btn.live-end { background: var(--accent-soft); color: var(--accent-text); border-radius: 999px; padding: 10px 16px; font-weight: 700; }
.live-prog { background: var(--surface); border-radius: 20px; box-shadow: var(--shadow); padding: 14px 16px; display: flex; flex-direction: column; gap: 8px; }
.lp-head { display: flex; justify-content: space-between; gap: 8px; font-size: 13px; color: var(--ink-2); font-weight: 600; }
.lp-head b { color: var(--accent-text); }
.live-rest { position: static; display: flex; flex-direction: column; align-items: stretch; gap: 10px; padding: 16px; border-radius: 22px;
  background: var(--icon-bg); box-shadow: none; border: 0; }
.live-rest .lr-head { display: flex; flex-direction: row; justify-content: space-between; align-items: center; }
.lr-head > span { display: inline-flex; align-items: center; gap: 8px; font-weight: 700; color: var(--ink); }
.dot.green { display: inline-block; width: 8px; height: 8px; border-radius: 50%; background: #1e8a47; }
.live-rest .lr-head b { font-family: var(--font); font-size: 28px; font-weight: 800; color: #1e8a47; }
.live-rest .lr-head b small { font-size: 14px; color: var(--muted); font-weight: 600; }
.lr-bar { display: block; height: 6px; border-radius: 999px; background: #dcdbe9; overflow: hidden; }
.lr-bar b { display: block; height: 100%; background: #1e8a47; border-radius: 999px; }
.live-rest-btns { display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; }
.live-rest-btns .btn { background: var(--surface); color: var(--ink); box-shadow: none; border-radius: 14px; font-size: 14px; }
.live-head .row-main b { font-size: 24px; font-weight: 800; }
.lf-now { align-self: flex-start; }
.live-focus { display: flex; flex-direction: column; gap: 12px; }
.lf-cue { display: inline-flex; align-items: center; gap: 6px; padding: 6px 12px; border-radius: 999px; background: var(--icon-bg); font-size: 13px; font-weight: 600; color: var(--ink); }
.lf-cue .i { color: var(--accent); flex: none; }
.lf-steps .stepper { display: grid; grid-template-columns: auto 1fr auto; grid-template-areas: "label label label" "down val up"; row-gap: 8px; padding: 14px 16px; border-radius: 22px; }
.step-label { grid-area: label; display: flex; justify-content: space-between; align-items: center; font-size: 13px; color: var(--ink-2); font-weight: 600; }
.lf-steps .step-btn:first-of-type { grid-area: down; }
.lf-steps .step-val { grid-area: val; justify-content: center; }
.lf-steps .step-btn:last-child { grid-area: up; }
.lf-steps .step-val b { font-size: 48px; }
.btn.lf-done { border-radius: 999px; padding: 16px 0; }
.live-rest > div.lr-head { flex-direction: row; justify-content: space-between; align-items: center; }

/* §178 训练中大数字点一下自己填：看着和原来的大数字一样，底下一条虚线提示能点 */
.step-in { width: 3.6em; min-width: 0; padding: 0 2px; border: 0; border-bottom: 2px dashed var(--line-hi); border-radius: 0;
  background: transparent; color: var(--ink); text-align: center; font-family: inherit; font-size: 24px; font-weight: 750; font-variant-numeric: tabular-nums; }
.step-in:focus { outline: none; border-bottom-color: var(--accent); }
.step-in.hot { color: var(--warn); }
.lf-steps .step-in { width: 3.2em; font-size: 40px; font-weight: 800; }
.lf-steps .step-val small { white-space: nowrap; }

/* §174 完善资料：必填项的星号 */
.req { color: var(--accent-text); font-weight: 700; }

/* §180 隐私政策、用户协议 */
.legal { max-width: 640px; margin: 0 auto; padding: 24px 16px 48px; color: var(--ink); line-height: 1.7; }
.legal h1 { font-size: 26px; margin: 12px 0 4px; }
.legal h2 { font-size: 16px; margin: 20px 0 4px; }
.legal p { margin: 0 0 6px; }
.legal-draft { padding: 8px 12px; border-radius: var(--radius-sm); background: var(--warn-soft); color: var(--ink); font-size: 13px; }
.legal-line { text-align: center; margin-top: 4px; }
.legal-list { margin: 0; padding-left: 1.2em; line-height: 1.7; }

/* 饮食账单"今天还能吃"的数字小一点（项目负责人 11-06："卡路里字太大了"）：44 → 32 */
.bg-big.fig-n { font-size: 32px; }

/* 今天吃什么每顿一行（11-06："字体太大了，不要移到下一行"）：顿名和热量小一点、整行不换行；"记实际吃的"小链接 */
.tp-head { flex-wrap: nowrap; min-width: 0; }
.tp-head b { font-size: 16px; white-space: nowrap; }
.tp-kcal { white-space: nowrap; flex-shrink: 0; }
.tp-kcal .fig-n { font-size: 16px; }
.tp-head .btn, .tp-head .link, .tp-tag { white-space: nowrap; flex-shrink: 0; }
.tp-other { align-self: flex-start; font-size: 13px; margin-top: 2px; }
/* 每顿吃什么的克数、千卡：14 号、不折行（前面的样式把 .num 放大到 24 号，"152 千卡"被挤成两行） */
.tp-foods .num { font-size: 14px; line-height: 1.4; white-space: nowrap; }
.tp-foods li { font-size: 14px; }
