:root{
  --bg:#F6F3EE; --card:#FFFFFF; --ink:#1E1B18; --ink2:#4A423B; --mute:#9A9186;
  --line:#E8E2D8; --brand:#E2603C; --brand-soft:#FCEDE7;
  --teal:#3E8E7E; --teal-soft:#E7F2EF; --purple:#6B5B95; --purple-soft:#EEEBF5;
  --ok:#2F7D5C; --ok-soft:#E6F2EC; --warn:#B8860B; --warn-soft:#FDF4E0;
  --dark:#191614;
}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
body{
  margin:0;background:#E9E3DA;color:var(--ink);
  font-family:-apple-system,BlinkMacSystemFont,"PingFang SC","Hiragino Sans GB","Microsoft YaHei",sans-serif;
  display:flex;justify-content:center;align-items:flex-start;padding:12px 16px 16px;
}
.stage{width:390px;flex:0 0 auto}
.hint{
  text-align:center;font-size:11.5px;color:#8B8175;margin-bottom:8px;line-height:1.5;
}
.hint b{color:var(--brand)}

/* ---------- 手机外框 ---------- */
.phone{
  width:390px;height:844px;background:var(--bg);border-radius:42px;position:relative;
  overflow:hidden;box-shadow:0 26px 70px rgba(60,40,25,.22),0 0 0 10px #1c1a18,0 0 0 11px #2e2a26;
  display:flex;flex-direction:column;
}
.statusbar{
  height:46px;flex:0 0 46px;display:flex;align-items:flex-end;justify-content:space-between;
  padding:0 22px 6px;font-size:12px;font-weight:600;color:var(--ink2);position:relative;z-index:60;
  transition:color .2s;
}
.statusbar.light{color:#fff}
.statusbg{
  position:absolute;top:0;left:0;right:0;height:46px;background:var(--dark);z-index:1;
  opacity:0;transition:opacity .22s;pointer-events:none;
}
.statusbg.on{opacity:1}
.app{flex:1;overflow-y:auto;overflow-x:hidden;position:relative;scroll-behavior:smooth;-webkit-overflow-scrolling:touch}
.app::-webkit-scrollbar{width:0}

/* ---------- 通用 ---------- */
.view{display:none;padding:0 16px 110px}
.view.on{display:block;animation:fade .22s ease}
@keyframes fade{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}
.card{background:var(--card);border-radius:18px;padding:16px;margin-bottom:12px}
.sec-title{font-size:13px;font-weight:700;color:var(--mute);letter-spacing:.06em;margin:22px 2px 10px}
.btn{border:none;font-family:inherit;font-size:15px;font-weight:600;border-radius:14px;padding:14px;width:100%;
  background:var(--brand);color:#fff;cursor:pointer;transition:.15s}
.btn:active{transform:scale(.98);opacity:.92}
.btn.ghost{background:#fff;color:var(--ink);border:1px solid var(--line)}
.btn.dark{background:var(--dark)}

/* ---------- 首页 ---------- */
.top-pad{padding-top:4px}
.page-head{display:flex;align-items:baseline;justify-content:space-between;margin:6px 2px 16px}
.page-head h1{font-size:24px;margin:0;letter-spacing:-.4px}
.page-head .sub{font-size:12px;color:var(--mute)}

.cycle{display:flex;align-items:center;gap:10px;margin-bottom:14px;padding:0 2px}
.cycle .bar{flex:1;height:5px;background:#E5DED2;border-radius:3px;overflow:hidden}
.cycle .bar i{display:block;height:100%;background:var(--brand);border-radius:3px;width:7%}
.cycle span{font-size:11px;color:var(--mute);white-space:nowrap}

.hero{
  background:var(--dark);color:#fff;border-radius:22px;padding:20px;margin-bottom:14px;position:relative;overflow:hidden;
}
.hero::after{content:"";position:absolute;right:-40px;top:-40px;width:150px;height:150px;border-radius:50%;
  background:radial-gradient(circle,rgba(226,96,60,.35),transparent 70%)}
.hero .tag{display:inline-block;font-size:11px;font-weight:700;padding:4px 9px;border-radius:6px;background:rgba(226,96,60,.9);margin-bottom:12px}
.hero h2{font-size:21px;margin:0 0 4px;letter-spacing:-.3px}
.hero .meta{font-size:12.5px;color:rgba(255,255,255,.55);margin-bottom:16px}
.hero .list{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:18px}
.hero .list span{font-size:11.5px;padding:5px 9px;border-radius:7px;background:rgba(255,255,255,.1);color:rgba(255,255,255,.8)}
.hero button{position:relative;z-index:2}

.coach{background:#fff;border-radius:18px;padding:16px 16px 14px;margin-bottom:14px;border-left:3px solid var(--brand)}
.coach .who{display:flex;align-items:center;gap:7px;font-size:11.5px;color:var(--mute);margin-bottom:9px}
.coach .who b{color:var(--brand);font-weight:700}
.coach p{margin:0;font-size:14.5px;line-height:1.62;color:var(--ink2)}
.coach p strong{color:var(--ink);font-weight:700}
.coach .why{margin-top:10px;font-size:11.5px;color:var(--mute)}

.stats{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-bottom:14px}
.stat{background:#fff;border-radius:15px;padding:13px 12px;text-align:center}
.stat b{display:block;font-size:22px;letter-spacing:-.5px;line-height:1.1}
.stat span{font-size:11px;color:var(--mute)}

.quick{display:flex;gap:10px;margin-bottom:14px}
.quick div{flex:1;background:#fff;border-radius:15px;padding:14px;text-align:center;cursor:pointer;border:1px solid transparent;transition:.15s}
.quick div:active{background:var(--brand-soft);border-color:#F3C9BA}
.quick .ico{font-size:19px;margin-bottom:5px}
.quick .t{font-size:13px;font-weight:600}
.quick .d{font-size:10.5px;color:var(--mute);margin-top:2px}

.recent .row{display:flex;align-items:center;gap:11px;padding:12px 0;border-bottom:1px solid #F2EDE4}
.recent .row:last-child{border-bottom:none}
.dot{width:8px;height:8px;border-radius:50%;flex:0 0 8px}
.dot.la,.dot.ua,.dot.lb,.dot.ub{background:var(--brand)}
.dot.full3{background:var(--purple)}
.dot.cardio{background:var(--teal)}
.recent .t{font-size:14px;font-weight:600;flex:1}
.recent .m{font-size:11.5px;color:var(--mute);text-align:right;line-height:1.5}

/* ---------- 训练页 ---------- */
#v-train{padding:0 0 130px}
.train-top{
  background:var(--dark);color:#fff;padding:0 16px 16px;position:sticky;top:0;z-index:20;
  border-radius:0 0 20px 20px;
}
.train-top .row1{display:flex;justify-content:space-between;align-items:center;font-size:12px;color:rgba(255,255,255,.55);padding-top:6px}
.train-top .timer{font-variant-numeric:tabular-nums;font-weight:700;color:#fff;font-size:13px}
.train-top h2{margin:10px 0 3px;font-size:19px;letter-spacing:-.3px}
.train-top .law{font-size:11.5px;color:rgba(255,255,255,.42);line-height:1.5}
.train-top .law b{color:#FFB59E;font-weight:600}
.train-body{padding:14px 16px 0}
#v-train.resting .train-body{padding-bottom:210px;transition:padding .25s}

.ex-card{background:#fff;border-radius:18px;padding:14px;margin-bottom:11px;transition:.18s}
.ex-card.pulse{box-shadow:0 0 0 3px rgba(226,96,60,.22)}
.ex-head{display:flex;justify-content:space-between;align-items:flex-start;gap:8px;margin-bottom:4px}
.ex-name{font-size:15.5px;font-weight:700;letter-spacing:-.2px;display:flex;align-items:center;gap:6px}
.side-tag{font-size:9.5px;font-weight:700;padding:2px 5px;border-radius:4px;background:var(--purple-soft);color:var(--purple)}
.bump{font-size:9.5px;font-weight:700;padding:2px 6px;border-radius:4px;background:var(--ok-soft);color:var(--ok)}
.ex-last{font-size:11px;color:var(--mute);text-align:right;white-space:nowrap;line-height:1.45}
.ex-last b{color:var(--ink2);font-weight:600}
.ex-tip{font-size:11.5px;color:var(--mute);line-height:1.5;margin-bottom:11px;padding-right:8px}

.sets{display:flex;flex-direction:column;gap:7px}
.set-row{
  display:flex;align-items:center;gap:7px;padding:6px 7px 6px 4px;border-radius:12px;
  background:#FBF9F5;transition:.16s;border:1.5px solid transparent;
}
.set-row.done{background:var(--ok-soft);border-color:#CFE6DB}
.set-row.done .stepper em{color:var(--ok)}
.set-idx{
  width:22px;flex:0 0 22px;text-align:center;font-size:11.5px;font-weight:700;color:var(--mute);
  font-variant-numeric:tabular-nums;
}
.set-row.done .set-idx{color:var(--ok)}

.stepper{
  display:flex;align-items:center;background:#fff;border:1px solid var(--line);border-radius:10px;
  height:38px;overflow:hidden;flex:0 0 auto;
}
.stepper b{
  width:34px;height:100%;display:flex;align-items:center;justify-content:center;
  font-size:17px;font-weight:400;color:var(--brand);cursor:pointer;user-select:none;
}
.stepper b:active{background:var(--brand-soft)}
.stepper em{
  min-width:42px;text-align:center;font-style:normal;font-size:15.5px;font-weight:700;
  font-variant-numeric:tabular-nums;letter-spacing:-.3px;
}
.stepper.w{flex:1}
.stepper.r{flex:1}
.unit{font-size:10.5px;color:var(--mute);flex:0 0 auto;margin-left:-3px}

.check{
  width:38px;height:38px;flex:0 0 38px;border-radius:50%;border:2px solid #DCD5C8;background:#fff;
  display:flex;align-items:center;justify-content:center;font-size:17px;color:transparent;
  cursor:pointer;transition:.16s;
}
.check:active{transform:scale(.92)}
.set-row.done .check{background:var(--ok);border-color:var(--ok);color:#fff}

/* 训练进度条 + 完成 */
.train-dock{
  position:absolute;left:0;right:0;bottom:64px;padding:10px 16px 12px;
  background:linear-gradient(to top,var(--bg) 62%,rgba(246,243,238,0));z-index:30;
}
.dock-inner{background:#fff;border-radius:16px;padding:11px 13px;box-shadow:0 6px 20px rgba(80,60,40,.1);display:flex;align-items:center;gap:12px}
.dock-inner .prog{flex:1}
.dock-inner .pt{font-size:12px;color:var(--mute);margin-bottom:6px}
.dock-inner .pt b{color:var(--ink);font-size:14px;font-variant-numeric:tabular-nums}
.dock-inner .pb{height:5px;background:#EDE7DB;border-radius:3px;overflow:hidden}
.dock-inner .pb i{display:block;height:100%;background:var(--brand);border-radius:3px;transition:width .3s;width:0}
.dock-btn{
  border:none;font-family:inherit;font-size:14px;font-weight:700;border-radius:12px;padding:12px 16px;
  background:#E5DFD3;color:#A79C8C;cursor:pointer;white-space:nowrap;
}
.dock-btn.ready{background:var(--brand);color:#fff}

/* 休息条 */
.restbar{
  position:absolute;left:12px;right:12px;bottom:76px;z-index:40;
  background:var(--dark);color:#fff;border-radius:18px;padding:13px 14px;
  box-shadow:0 14px 34px rgba(25,22,20,.34);
  transform:translateY(260%);opacity:0;pointer-events:none;
  transition:transform .32s cubic-bezier(.34,1.4,.64,1),opacity .18s;
}
.restbar.on{transform:none;opacity:1;pointer-events:auto}
.restbar .r1{display:flex;align-items:center;justify-content:space-between;margin-bottom:9px}
.restbar .rt{font-size:11.5px;color:rgba(255,255,255,.5)}
.restbar .rc{font-size:26px;font-weight:700;font-variant-numeric:tabular-nums;letter-spacing:-1px;line-height:1}
.restbar .rc small{font-size:12px;font-weight:500;color:rgba(255,255,255,.4);margin-left:6px;letter-spacing:0}
.restbar .acts{display:flex;gap:7px}
.restbar .acts button{
  border:none;font-family:inherit;font-size:12px;font-weight:600;padding:8px 12px;border-radius:9px;
  background:rgba(255,255,255,.13);color:#fff;cursor:pointer;
}
.restbar .acts button:active{background:rgba(255,255,255,.24)}
.restbar .rp{height:4px;background:rgba(255,255,255,.14);border-radius:2px;overflow:hidden;margin-top:11px}
.restbar .rp i{display:block;height:100%;background:var(--brand);border-radius:2px;transition:width .95s linear}

/* ---------- 记录页 ---------- */
.nav-back{display:flex;align-items:center;gap:6px;padding:12px 0 8px;font-size:14px;color:var(--mute);cursor:pointer}
.rec-input{
  width:100%;min-height:112px;border:1.5px solid var(--line);background:#fff;border-radius:18px;
  padding:15px;font-size:16px;line-height:1.6;font-family:inherit;color:var(--ink);resize:none;outline:none;
  transition:.16s;
}
.rec-input:focus{border-color:#F0BBA8;box-shadow:0 0 0 3px rgba(226,96,60,.09)}
.rec-input::placeholder{color:#B8AEA0}
.mic-row{display:flex;align-items:center;justify-content:space-between;margin:9px 2px 14px;font-size:11.5px;color:var(--mute)}
.mic-row .mic{display:flex;align-items:center;gap:5px;color:var(--brand);font-weight:600;cursor:pointer}
.samples{display:flex;flex-direction:column;gap:7px;margin-bottom:18px}
.samples .s{
  font-size:12.5px;color:var(--ink2);background:#fff;border:1px dashed #DDD5C7;border-radius:11px;
  padding:10px 12px;cursor:pointer;line-height:1.5;transition:.15s;
}
.samples .s:active{border-color:var(--brand);background:var(--brand-soft)}

.skel{background:#fff;border-radius:18px;padding:16px;margin-bottom:12px}
.skel .b{height:13px;border-radius:6px;background:linear-gradient(90deg,#F0EBE1 25%,#F7F3EC 50%,#F0EBE1 75%);
  background-size:200% 100%;animation:sh 1.1s infinite;margin-bottom:9px}
@keyframes sh{from{background-position:200% 0}to{background-position:-200% 0}}
.skel .cap{font-size:12px;color:var(--brand);font-weight:600;margin-bottom:12px;display:flex;align-items:center;gap:6px}
.spin{width:12px;height:12px;border:2px solid #F3C9BA;border-top-color:var(--brand);border-radius:50%;
  animation:sp .7s linear infinite;display:inline-block}
@keyframes sp{to{transform:rotate(360deg)}}

.res-card{background:#fff;border-radius:18px;padding:0;margin-bottom:12px;overflow:hidden;
  border:1.5px solid #F0D9CE}
.res-card .rh{display:flex;align-items:center;gap:8px;padding:13px 15px 11px;background:#FEF8F5;border-bottom:1px solid #F6E6DE}
.res-card .rh .t{font-size:14.5px;font-weight:700;flex:1}
.res-card .rh .del{font-size:12px;color:var(--mute);cursor:pointer;padding:4px 6px}
.res-card .fields{padding:6px 15px 14px}
.f-row{display:flex;align-items:center;justify-content:space-between;padding:9px 0;border-bottom:1px solid #F6F2EA}
.f-row:last-child{border-bottom:none}
.f-row .k{font-size:12.5px;color:var(--mute);flex:0 0 auto;width:62px}
.f-row .v{flex:1;text-align:right;display:flex;align-items:center;justify-content:flex-end;gap:6px}
.chip{
  display:inline-flex;align-items:center;gap:4px;font-size:13.5px;font-weight:700;color:var(--ink);
  background:var(--brand-soft);border-radius:8px;padding:5px 9px;cursor:pointer;
}
.chip.soft{background:#F5F1E9;color:var(--ink2);font-weight:600}
.chip.empty{background:#fff;border:1.5px dashed #D6CDBD;color:#B0A697;font-weight:500;font-size:12.5px}
.chip .mini{font-size:11px;font-weight:700;color:var(--brand);padding:0 3px}
.chip-row{display:flex;gap:5px}
.rawline{font-size:10.5px;color:#B5AB9C;padding:9px 15px 12px;border-top:1px dashed #EDE6DA;line-height:1.5}
.rawline b{color:var(--mute);font-weight:600}
.conf{font-size:9.5px;font-weight:700;padding:2px 5px;border-radius:4px;letter-spacing:.02em}
.conf.hi{background:var(--brand-soft);color:var(--brand)}
.conf.lo{background:var(--warn-soft);color:var(--warn)}

/* ---------- 动作库 ---------- */
.search{
  display:flex;align-items:center;gap:8px;background:#fff;border-radius:13px;padding:11px 13px;margin-bottom:12px;
  border:1px solid var(--line);
}
.search input{border:none;outline:none;font-size:14px;font-family:inherit;flex:1;background:transparent;color:var(--ink)}
.search input::placeholder{color:#B8AEA0}
.chips{display:flex;gap:6px;overflow-x:auto;padding-bottom:12px;margin:0 -16px;padding-left:16px;padding-right:16px}
.chips::-webkit-scrollbar{display:none}
.chip-t{
  flex:0 0 auto;font-size:12.5px;font-weight:600;padding:8px 13px;border-radius:10px;background:#fff;
  color:var(--ink2);border:1px solid var(--line);cursor:pointer;white-space:nowrap;
}
.chip-t.on{background:var(--dark);color:#fff;border-color:var(--dark)}

.ex-item{background:#fff;border-radius:15px;padding:13px 14px;margin-bottom:9px;cursor:pointer;transition:.15s}
.ex-item:active{background:#FDFAF6}
.ex-item .l1{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:4px}
.ex-item .n{font-size:14.5px;font-weight:700}
.ex-item .en{font-size:10.5px;color:#B5AB9C;font-weight:400;margin-left:5px}
.ex-item .r{font-size:11px;color:var(--mute);white-space:nowrap}
.ex-item .note{
  font-size:11.5px;color:#8A6A55;background:#FDF5F0;border-left:2px solid #F0C4B3;
  padding:7px 9px;border-radius:0 7px 7px 0;line-height:1.5;margin-top:7px;
}
.ex-item .note b{color:var(--brand);font-weight:700}

/* 动作详情 */
.detail-hero{background:var(--dark);color:#fff;border-radius:0 0 24px 24px;padding:0 18px 22px;margin:0 -16px 16px}
.detail-hero h1{margin:8px 0 4px;font-size:23px;letter-spacing:-.5px}
.detail-hero .en{font-size:11.5px;color:rgba(255,255,255,.4);margin-bottom:16px}
.detail-hero .grid{display:flex;gap:8px}
.detail-hero .grid div{flex:1;background:rgba(255,255,255,.09);border-radius:11px;padding:10px;text-align:center}
.detail-hero .grid b{display:block;font-size:17px;letter-spacing:-.3px}
.detail-hero .grid span{font-size:10px;color:rgba(255,255,255,.45)}
.tipbox{background:#FDF5F0;border:1px solid #F5DCD0;border-radius:16px;padding:15px;margin-bottom:14px}
.tipbox .h{font-size:11.5px;font-weight:700;color:var(--brand);margin-bottom:8px;display:flex;align-items:center;gap:5px}
.tipbox p{margin:0;font-size:14px;line-height:1.68;color:#5C4438}
.hist-row{display:flex;align-items:center;gap:9px;padding:9px 0;border-bottom:1px solid #F5F0E7;font-size:12.5px}
.hist-row:last-child{border-bottom:none}
.hist-row .d{color:var(--mute);width:52px;flex:0 0 52px;font-variant-numeric:tabular-nums}
.hist-row .w{font-weight:700;font-variant-numeric:tabular-nums;width:64px}
.hist-row .bar{flex:1;height:6px;background:#F0EBE1;border-radius:3px;overflow:hidden}
.hist-row .bar i{display:block;height:100%;background:var(--brand);border-radius:3px}
.hist-row .up{font-size:10px;color:var(--ok);font-weight:700}

/* ---------- 进度 ---------- */
.timeline{background:#fff;border-radius:18px;padding:16px;margin-bottom:14px}
.tl-bar{display:flex;gap:3px;height:9px;border-radius:5px;overflow:hidden;margin-bottom:10px}
.tl-bar i{display:block;height:100%}
.tl-legend{display:flex;flex-wrap:wrap;gap:10px;font-size:10.5px;color:var(--mute)}
.tl-legend span{display:flex;align-items:center;gap:4px}
.tl-legend em{width:7px;height:7px;border-radius:2px;display:block}
.now-dot{display:inline-block;width:7px;height:7px;background:var(--brand);border-radius:50%;margin-right:4px;
  animation:pulse 1.6s infinite}
@keyframes pulse{0%,100%{opacity:1;transform:scale(1)}50%{opacity:.45;transform:scale(.8)}}

.chart-card{background:#fff;border-radius:18px;padding:15px 14px 10px;margin-bottom:14px}
.chart-card .ch{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:14px;padding:0 2px}
.chart-card .ch b{font-size:13.5px}
.chart-card .ch span{font-size:11px;color:var(--mute)}
.legend{display:flex;gap:12px;flex-wrap:wrap;font-size:10.5px;color:var(--mute);padding:0 2px 8px}
.legend span{display:flex;align-items:center;gap:4px}
.legend em{width:8px;height:3px;border-radius:2px;display:block}
svg{display:block;width:100%;height:auto;overflow:visible}

.marker{display:flex;gap:10px;padding:12px 0;border-bottom:1px solid #F5F0E7}
.marker:last-child{border-bottom:none}
.marker .dt{font-size:11px;font-weight:700;color:var(--brand);width:44px;flex:0 0 44px;padding-top:1px}
.marker .tx{font-size:13px;line-height:1.5;color:var(--ink2)}
.marker .tx b{display:block;color:var(--ink);font-size:13.5px;margin-bottom:2px}

/* ---------- 我的 ---------- */
.profile{background:var(--dark);color:#fff;border-radius:22px;padding:20px;margin-bottom:14px;display:flex;align-items:center;gap:14px}
.avatar{width:52px;height:52px;border-radius:50%;background:linear-gradient(135deg,#E2603C,#C04828);
  display:flex;align-items:center;justify-content:center;font-size:20px;font-weight:700;flex:0 0 52px}
.profile .n{font-size:17px;font-weight:700;margin-bottom:3px}
.profile .s{font-size:11.5px;color:rgba(255,255,255,.45)}
.menu{background:#fff;border-radius:16px;overflow:hidden;margin-bottom:12px}
.menu-item{display:flex;align-items:center;gap:12px;padding:15px 15px;border-bottom:1px solid #F5F0E7;cursor:pointer}
.menu-item:last-child{border-bottom:none}
.menu-item:active{background:#FDFAF6}
.menu-item .ic{font-size:16px;width:22px;text-align:center}
.menu-item .t{flex:1;font-size:14px}
.menu-item .v{font-size:12.5px;color:var(--mute)}
.seg{display:flex;background:#F2EDE4;border-radius:11px;padding:3px;gap:3px}
.seg div{flex:1;text-align:center;font-size:12.5px;font-weight:600;padding:8px;border-radius:9px;color:var(--mute);cursor:pointer;transition:.15s}
.seg div.on{background:#fff;color:var(--ink);box-shadow:0 1px 4px rgba(0,0,0,.07)}

/* ---------- tabbar ---------- */
.tabbar{
  position:absolute;left:0;right:0;bottom:0;height:64px;background:rgba(255,255,255,.96);
  backdrop-filter:blur(12px);border-top:1px solid #EFE9DE;display:flex;padding-bottom:6px;z-index:50;
}
.tabbar.hide{display:none}
.tabbar div{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;
  font-size:10px;color:#B0A697;cursor:pointer;transition:.15s}
.tabbar div .ti{font-size:17px;line-height:1}
.tabbar div.on{color:var(--brand);font-weight:700}

/* ---------- 浮层 ---------- */
.mask{
  position:absolute;inset:0;background:rgba(25,22,20,.5);z-index:100;opacity:0;pointer-events:none;
  transition:opacity .22s;backdrop-filter:blur(2px);
}
.mask.on{opacity:1;pointer-events:auto}
.sheet{
  position:absolute;left:0;right:0;bottom:0;background:var(--bg);border-radius:26px 26px 0 0;z-index:101;
  max-height:82%;overflow-y:auto;transform:translateY(102%);transition:transform .32s cubic-bezier(.3,1.2,.6,1);
  padding:8px 16px 28px;
}
.sheet.on{transform:none}
.sheet .grab{width:36px;height:4px;background:#DDD5C7;border-radius:2px;margin:0 auto 14px}

.fb-head{text-align:center;padding:10px 0 18px}
.fb-head .tt{font-size:11.5px;font-weight:700;color:var(--brand);letter-spacing:.08em;margin-bottom:9px}
.fb-head h2{font-size:22px;margin:0 0 6px;letter-spacing:-.4px}
.fb-head .sm{font-size:12.5px;color:var(--mute)}
.fb-item{display:flex;gap:11px;background:#fff;border-radius:15px;padding:14px;margin-bottom:9px}
.fb-item .ico{width:28px;height:28px;border-radius:9px;flex:0 0 28px;display:flex;align-items:center;justify-content:center;font-size:14px}
.fb-item .ico.up{background:var(--ok-soft)}
.fb-item .ico.form{background:var(--warn-soft)}
.fb-item .ico.rest{background:var(--purple-soft)}
.fb-item .tx{font-size:13.5px;line-height:1.6;color:var(--ink2)}
.fb-item .tx b{color:var(--ink);font-weight:700}

.toast{
  position:absolute;left:50%;top:186px;transform:translate(-50%,-6px) scale(.96);background:rgba(25,22,20,.94);
  box-shadow:0 10px 26px rgba(25,22,20,.28),0 0 0 1px rgba(255,255,255,.06);
  color:#fff;font-size:13.5px;padding:13px 20px;border-radius:13px;z-index:200;opacity:0;pointer-events:none;
  transition:.2s;text-align:center;line-height:1.5;max-width:70%;
}
.toast.on{opacity:1;transform:translate(-50%,0) scale(1)}

/* ===== 单侧动作：左右两条 ===== */
.set-idx .sd{font-style:normal;font-size:9px;font-weight:800;margin-left:1px;color:var(--brand)}
.set-row.sep{margin-top:5px;padding-top:9px;border-top:1px dashed #EFE7DA}
.set-row.done .set-idx .sd{color:#5AAE7A}

/* ===== 续练提示条 ===== */
.resume{display:none;align-items:center;justify-content:space-between;gap:10px;
  background:#fff;border:1px dashed #F0D3C4;border-radius:14px;padding:11px 13px;margin-bottom:12px;cursor:pointer}
.resume b{font-size:13.5px}
.resume .rt>span{display:block;font-size:11px;color:var(--mute);margin-top:3px}
.resume .rt b{white-space:nowrap}
.resume .go{font-size:12.5px;font-weight:700;color:var(--brand);flex:0 0 auto}

/* ===== 休息条补下一组数值 ===== */
.restbar .rc small{font-size:11.5px;color:rgba(255,255,255,.62);margin-left:9px;font-weight:500}

/* ===== 逐条保存 ===== */
.res-sum{display:flex;justify-content:space-between;align-items:center;font-size:11.5px;color:var(--mute);padding:2px 4px 9px}
.res-card.saved{opacity:.6}
.res-card.saved .rh{background:#F1F7F2;border-bottom-color:#E2EFE5}
.save-row{display:flex;justify-content:flex-end;padding:10px 15px 12px}
.save-row button{border:0;background:var(--brand);color:#fff;font-size:12.5px;font-weight:700;padding:8px 16px;border-radius:10px}
.save-row button.done{background:#EDF5EE;color:#4E9B6A}

/* ============================================================
   真机 / 浏览器全屏适配 —— 覆盖原型的外框样式
   原则：不改原有布局，只把 390×844 的手机外框换成真实视口
   ============================================================ */
/* 老内核/微信内置浏览器兜底：不支持 dvh、max() 时用前一条声明 */
html,body{height:100%;overscroll-behavior-y:none}
html{
  /* 安卓 Chrome / 微信 / 国产内核：禁止「文字自动放大」把字号顶大 */
  -webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%;
  /* 安卓点击输入框不缩放 */
  touch-action:manipulation;
}
body{
  padding:0!important;display:block!important;background:var(--bg);
  -webkit-user-select:none;user-select:none;
  -webkit-font-smoothing:antialiased;
  -webkit-text-size-adjust:100%;text-size-adjust:100%;
  max-width:100vw;overflow-x:hidden;
}
input,textarea{-webkit-user-select:text;user-select:text}

.stage{width:100%!important;max-width:none!important}
.hint{display:none!important}

.phone{
  width:100%!important;max-width:none!important;
  height:100vh!important;
  height:-webkit-fill-available!important;
  height:100dvh!important;
  border-radius:0!important;box-shadow:none!important;
}
@supports not (height:100dvh){
  .phone{height:100vh!important}
}

/* 假状态栏 → 真实安全区占位（至少 10px，桌面浏览器也不贴顶） */
.statusbar{
  height:12px!important;
  height:max(env(safe-area-inset-top,0px),12px)!important;
  flex:0 0 12px!important;
  flex:0 0 max(env(safe-area-inset-top,0px),12px)!important;
  padding:0!important;overflow:hidden;
}
.statusbar span{display:none}
.statusbg{height:12px!important;height:max(env(safe-area-inset-top,0px),12px)!important}

/* 底部 Home 指示条 */
.tabbar{
  height:64px!important;
  height:calc(64px + env(safe-area-inset-bottom,0px))!important;
  padding-bottom:6px!important;
  padding-bottom:calc(6px + env(safe-area-inset-bottom,0px))!important;
}
.train-dock{bottom:64px!important;bottom:calc(64px + env(safe-area-inset-bottom,0px))!important}
.restbar{bottom:76px!important;bottom:calc(76px + env(safe-area-inset-bottom,0px))!important}
.view{padding-bottom:110px!important;padding-bottom:calc(110px + env(safe-area-inset-bottom,0px))!important}

/* 桌面上仍显示成手机宽度，居中 */
@media (min-width:560px){
  body{background:#E9E3DA}
  .phone{
    max-width:420px!important;margin:0 auto!important;
    box-shadow:0 0 0 1px var(--line),0 20px 60px rgba(60,40,25,.13)!important;
  }
}

/* ---------- 启动遮罩 ---------- */
#boot{
  position:fixed;inset:0;background:var(--bg);z-index:9999;
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:14px;
  transition:opacity .28s;
}
#boot.off{opacity:0;pointer-events:none}
#boot .sp{
  width:26px;height:26px;border:2.5px solid var(--line);border-top-color:var(--brand);
  border-radius:50%;animation:bspin .8s linear infinite;
}
@keyframes bspin{to{transform:rotate(360deg)}}
#boot .tx{font-size:13px;color:var(--mute);letter-spacing:.02em}
#boot .err{
  font-size:13px;color:var(--brand);text-align:center;line-height:1.7;
  max-width:290px;padding:0 20px;
}
#boot .retry{
  margin-top:4px;border:none;background:var(--brand);color:#fff;font-family:inherit;
  font-size:13.5px;font-weight:600;padding:9px 22px;border-radius:11px;
}

/* ---------- 身体数据录入 ---------- */
.body-input{
  display:flex;align-items:baseline;gap:8px;justify-content:center;
  background:#fff;border:1px solid var(--line);border-radius:16px;
  padding:18px 16px;margin:0 0 16px;
}
.body-input input{
  border:none;outline:none;background:transparent;font-family:inherit;
  font-size:34px;font-weight:700;letter-spacing:-1px;color:var(--ink);
  width:5.5em;flex:0 0 auto;text-align:right;padding:0;min-width:0;
}
.body-input input::placeholder{color:#D6CDBF;font-weight:600}
.body-input span{font-size:15px;font-weight:600;color:var(--mute);flex:0 0 auto}

/* ---------- 最近记录可点 ---------- */
.recent .row.tap{cursor:pointer;border-radius:10px;transition:background .12s}
.recent .row.tap:active{background:#F7F2E9}
.recent .row .rgo{color:#CFC5B6;font-size:15px;margin-left:2px;flex:0 0 auto}

/* ---------- 记录详情 ---------- */
.dt-hint{font-size:11.5px;color:var(--mute);margin:-6px 2px 12px;line-height:1.5}
.dt-hint2{font-size:11.5px;color:var(--mute);margin:12px 2px;line-height:1.6}
.dt-card{padding:14px 15px 6px}
.dt-ex{font-size:13.5px;font-weight:700;letter-spacing:-.2px;margin-bottom:2px}
.dt-row{display:flex;align-items:center;gap:6px;padding:7px 0;border-bottom:1px solid #F7F2E9}
.dt-row:last-child{border-bottom:none;padding-bottom:8px}
.dt-i{width:20px;flex:0 0 20px;font-size:12px;color:var(--mute);font-variant-numeric:tabular-nums}
.dt-n{
  -webkit-appearance:none;appearance:none;-moz-appearance:textfield;
  border:none;outline:none;background:#F7F3EC;border-radius:9px;
  font-family:inherit;font-size:16px;font-weight:700;color:var(--ink);
  text-align:center;padding:7px 4px;min-width:0;font-variant-numeric:tabular-nums;
}
.dt-n:focus{background:#fff;box-shadow:0 0 0 2px rgba(226,96,60,.22)}
.dt-n::-webkit-outer-spin-button,.dt-n::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}
.dt-w{width:64px}
.dt-r{width:48px}
.dt-u{font-size:11.5px;color:var(--mute)}
.dt-x{font-size:12px;color:#C9BFB0}
.dt-side{
  margin-left:auto;font-size:10.5px;font-weight:700;color:#fff;
  background:var(--brand);border-radius:6px;padding:2px 7px;flex:0 0 auto;
}
.dt-kv{display:flex;justify-content:space-between;align-items:center;padding:11px 0;border-bottom:1px solid #F7F2E9;font-size:13px}
.dt-kv:last-child{border-bottom:none}
.dt-kv span{color:var(--mute)}
.dt-kv b{font-weight:700;font-variant-numeric:tabular-nums}
.dt-actions{margin:18px 0 8px;display:flex;flex-direction:column;gap:9px}

/* ============================================================
   训练页：预览态 + 分段计时
   ============================================================ */
@keyframes pulseDot{0%,100%{opacity:1}50%{opacity:.22}}

.train-top .tstart{font-size:11px;color:rgba(255,255,255,.5);margin-top:5px;font-variant-numeric:tabular-nums;display:none}
.train-top .tstart span{color:rgba(255,255,255,.36)}
.train-top .timer.live::before{
  content:'';display:inline-block;width:5px;height:5px;border-radius:50%;
  background:#7BD3A8;margin-right:5px;vertical-align:1px;animation:pulseDot 1.6s infinite;
}

/* ---- 预览态 ---- */
#trainPreview{padding:12px 16px 0}
#trainPreview .btn{margin-top:12px}
.pv-list{background:#fff;border-radius:18px;padding:14px 15px}
.pv-sum{font-size:12.5px;color:var(--mute);padding-bottom:10px;border-bottom:1px solid #F5F0E7;font-variant-numeric:tabular-nums}
.pv-part{font-size:11px;font-weight:700;color:var(--brand);letter-spacing:.04em;margin:13px 0 3px}
.pv-row{display:flex;align-items:center;gap:9px;padding:10px 0;border-bottom:1px solid #F7F2E9;font-size:13.5px}
.pv-row:last-child{border-bottom:none}
.pv-i{width:17px;flex:0 0 17px;font-size:11.5px;color:#C9BFB0;font-variant-numeric:tabular-nums}
.pv-t{flex:1;font-weight:600;letter-spacing:-.2px;min-width:0}
.pv-m{font-size:11.5px;color:var(--mute);white-space:nowrap;font-variant-numeric:tabular-nums}
.pv-row.pv-sub{padding:8px 0;font-size:12.5px;color:var(--ink2)}
.pv-row.pv-sub .pv-t{font-weight:500}
.pv-dot{width:17px;flex:0 0 17px;display:flex;align-items:center;justify-content:center}
.pv-dot::before{content:"";width:4px;height:4px;border-radius:50%;background:#D8CEBE}

/* ---- 热身 / 拉伸 板块 ---- */
.blk{background:#fff;border-radius:18px;padding:14px;margin:14px 16px 0}
.blk.isdone{background:#F7FAF8;box-shadow:inset 0 0 0 1.5px #DCEADF}
.blk-head{display:flex;justify-content:space-between;align-items:flex-start;gap:10px;margin-bottom:8px}
.blk-tt{font-size:15px;font-weight:700;letter-spacing:-.2px;display:flex;align-items:center;gap:7px;flex-wrap:wrap}
.blk-sub{font-size:10.5px;font-weight:600;color:var(--mute);background:#F5F1E9;padding:2px 7px;border-radius:5px}
.blk-timer{font-size:15px;font-weight:700;font-variant-numeric:tabular-nums;color:#B8AEA0;flex:0 0 auto}
.blk-timer.live{color:var(--brand)}
.blk-timer.live::before{
  content:'';display:inline-block;width:5px;height:5px;border-radius:50%;
  background:var(--brand);margin-right:5px;vertical-align:2px;animation:pulseDot 1.6s infinite;
}
.blk-list{display:flex;flex-direction:column}
.blk-item{display:flex;gap:9px;padding:8px 0;border-bottom:1px solid #F7F2E9;align-items:flex-start}
.blk-item:last-child{border-bottom:none}
.bi-n{width:16px;flex:0 0 16px;font-size:11px;color:#C9BFB0;padding-top:2px;font-variant-numeric:tabular-nums}
.bi-b{flex:1;min-width:0}
.bi-t{font-size:13px;font-weight:600;letter-spacing:-.1px;display:flex;align-items:center;gap:5px;flex-wrap:wrap}
.bi-flag{font-size:9px;font-weight:700;color:#B4633A;background:#FDF0E8;padding:1.5px 5px;border-radius:4px}
.bi-d{font-size:11px;color:var(--mute);line-height:1.5;margin-top:1px}
.bi-s{font-size:11px;color:#B8AEA0;font-variant-numeric:tabular-nums;flex:0 0 auto;padding-top:2px}
.blk-act{display:flex;gap:8px;margin-top:11px}
.blk-btn{
  flex:1;border:none;background:#F5F1E9;color:var(--ink2);font-family:inherit;
  font-size:12.5px;font-weight:700;padding:9px;border-radius:10px;cursor:pointer;transition:.14s;
}
.blk-btn:active{opacity:.65}
.blk-btn.ok{background:var(--ok-soft);color:var(--ok)}
.blk.isdone .blk-btn.ok{opacity:.55}

/* ---- 动作卡片计时 ---- */
.ex-titlerow{flex:1;display:flex;align-items:center;justify-content:space-between;gap:8px;min-width:0}
.ex-timer{font-size:11.5px;font-weight:700;font-variant-numeric:tabular-nums;color:#CFC5B6;flex:0 0 auto}
.ex-timer.live{color:var(--brand)}
.ex-timer.live::before{
  content:'';display:inline-block;width:5px;height:5px;border-radius:50%;
  background:var(--brand);margin-right:4px;vertical-align:1px;animation:pulseDot 1.6s infinite;
}

/* ---- 结束弹窗的时间三格 ---- */
.fb-time{display:flex;gap:8px;margin:0 0 9px}
.fb-time>div{flex:1;background:#fff;border-radius:14px;padding:12px 8px;text-align:center}
.fb-time b{display:block;font-size:17px;letter-spacing:-.4px;font-variant-numeric:tabular-nums}
.fb-time span{font-size:10px;color:var(--mute);margin-top:2px;display:block}
.fb-time>div.hi{background:#FFF4EF}
.fb-time>div.hi b{color:var(--brand)}
.fb-detail{
  text-align:center;font-size:11px;color:var(--mute);margin-bottom:12px;
  font-variant-numeric:tabular-nums;
}

/* ---- 详情页时间段 ---- */
.dt-span{font-size:11.5px;color:rgba(255,255,255,.5);margin:-9px 0 13px;font-variant-numeric:tabular-nums;min-height:0}
.dt-span:empty{display:none}

/* 动作卡右侧：计时在上、上次成绩在下 */
.ex-right{display:flex;flex-direction:column;align-items:flex-end;gap:2px;flex:0 0 auto}
.ex-name{flex-wrap:wrap}

/* 训练态内容变长，底部要给固定条让位，否则最后几个按钮点不到 */
#trainRun{padding-bottom:96px}
#trainPreview{padding-bottom:8px}
