/* ============ 基础变量 ============ */
:root{
  --bg:#f4f6fa;
  --card:#ffffff;
  --line:#e6eaf1;
  --line2:#eef1f6;
  --t1:#1c2333;
  --t2:#5b6579;
  --t3:#98a1b3;
  --primary:#3b6cff;
  --ok:#16a34a;
  --warn:#f59e0b;
  --danger:#e5484d;
  --fit:#ff6b35;
  --supp:#12b3a8;
  --sch:#3b6cff;
  --diet:#f5a524;
  --travel:#8b5cf6;
  --r:16px;
  --sh:0 1px 6px rgba(28,35,51,.05);
  --sh2:0 8px 24px rgba(28,35,51,.11);
}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html,body{margin:0;padding:0}
body{
  background:var(--bg);
  color:var(--t1);
  font-family:-apple-system,BlinkMacSystemFont,"PingFang SC","Microsoft YaHei","Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;
  font-size:15px;line-height:1.5;
  -webkit-font-smoothing:antialiased;
}
button,input,select,textarea{font-family:inherit;font-size:inherit;color:inherit}
button{cursor:pointer;border:none;background:none}
h1,h2,h3,h4,p{margin:0}
ul{margin:0;padding:0;list-style:none}

.app{max-width:960px;margin:0 auto;padding:0 14px 40px;min-height:100vh}

/* ============ 顶部标题栏 ============ */
.hd{display:flex;align-items:center;gap:10px;padding:16px 2px 12px;position:sticky;top:0;background:var(--bg);z-index:20}
.hd::after{content:"";position:absolute;left:0;right:0;bottom:0;height:1px;background:linear-gradient(90deg,transparent,var(--line),transparent)}
.back{display:inline-flex;align-items:center;gap:2px;padding:7px 12px 7px 8px;border-radius:999px;background:#fff;border:1px solid var(--line);color:var(--t2);font-size:14px;font-weight:600;box-shadow:var(--sh);flex:none;transition:.15s}
.back:hover{color:var(--primary);border-color:#c9d6ff}
.back:active{transform:scale(.94)}
.hd-t{flex:1;min-width:0}
.hd-t h2{font-size:19px;font-weight:700;letter-spacing:.3px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.hd-t p{font-size:12px;color:var(--t3);margin-top:1px}
.hd-r{flex:none;display:flex;gap:6px}

/* 首页大字头 */
.home-hd{padding:18px 2px 6px}
.home-hd h1{font-size:22px;font-weight:800;letter-spacing:.5px}
.home-hd p{font-size:12.5px;color:var(--t3);margin-top:3px}
/* 今日概览：一行横向滚动，不再换行堆积 */
.home-hd .today-line{
  display:flex;align-items:center;gap:6px;margin-top:9px;
  flex-wrap:nowrap;overflow-x:auto;padding-bottom:2px;
  scrollbar-width:none;-webkit-overflow-scrolling:touch;
}
.home-hd .today-line::-webkit-scrollbar{display:none}
.pill{display:inline-flex;align-items:center;gap:5px;padding:4px 9px;border-radius:999px;background:#f5f7fb;border:1px solid transparent;font-size:11.5px;color:var(--t2);flex:none}
.pill b{color:var(--t1);font-weight:700}
.pill.fit b{color:var(--fit)} .pill.supp b{color:var(--supp)}
.pill.sch b{color:var(--sch)} .pill.diet b{color:var(--diet)} .pill.travel b{color:var(--travel)}

/* ============ 首页放射式布局 ============ */
.radial{
  display:grid;
  grid-template-columns:1fr 1.18fr 1fr;
  grid-template-rows:1fr 1.18fr 1fr;
  gap:14px;
  height:min(72vh,660px);
  min-height:480px;
  margin-top:6px;
}
.tile{
  position:relative;overflow:hidden;
  background:var(--card);border:1px solid var(--line);border-radius:22px;
  box-shadow:var(--sh);
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;
  text-align:center;padding:12px;
  transition:transform .18s cubic-bezier(.2,.9,.3,1.2), box-shadow .18s, border-color .18s;
}
.tile:hover{transform:translateY(-3px);box-shadow:var(--sh2)}
.tile:active{transform:scale(.97)}
.tile .ico{width:44px;height:44px;border-radius:14px;display:grid;place-items:center;font-size:23px}
.tile .nm{font-size:16px;font-weight:700;letter-spacing:.5px}
.tile .sub{font-size:11.5px;color:var(--t3);line-height:1.35;min-height:16px}
.tile .bg-ico{position:absolute;right:-14px;bottom:-18px;font-size:84px;opacity:.06;line-height:1}
.t-top{grid-area:1/2/2/3} .t-left{grid-area:2/1/3/2}
.t-right{grid-area:2/3/3/4} .t-bottom{grid-area:3/2/4/3}

/* 中心：健身大圆 + 身体记录小圆 */
.core-wrap{
  grid-area:2/2/3/3;
  display:flex;align-items:center;justify-content:center;gap:12px;min-width:0;
}
.core{
  position:relative;overflow:hidden;
  border-radius:50%;aspect-ratio:1/1;width:100%;align-self:center;justify-self:center;
  background:radial-gradient(circle at 50% 32%,#ff8f5e 0%,#ff6b35 48%,#ef4f22 100%);
  color:#fff;border:none;
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;
  box-shadow:0 12px 30px rgba(255,107,53,.36), inset 0 1px 0 rgba(255,255,255,.35);
  transition:transform .18s cubic-bezier(.2,.9,.3,1.2), box-shadow .18s;
}
.core:hover{transform:scale(1.03);box-shadow:0 16px 38px rgba(255,107,53,.45)}
.core:active{transform:scale(.97)}
.core .ico{width:62px;height:62px;border-radius:50%;background:rgba(255,255,255,.22);display:grid;place-items:center;font-size:32px;margin-bottom:2px}
.core .nm{font-size:24px;font-weight:800;letter-spacing:3px;text-shadow:0 2px 6px rgba(0,0,0,.15)}
.core .sub{font-size:12px;opacity:.92}
.core .ring{position:absolute;inset:10px;border:1px dashed rgba(255,255,255,.35);border-radius:50%;pointer-events:none}
/* 中心区里的大圆：占主要位置 */
.core-wrap .core{
  flex:1 1 auto;min-width:0;width:100%;max-width:100%;
  border-radius:50%;aspect-ratio:1/1;
}
/* 身体记录小圆：落在四个方框围出来的正中间，尺寸克制 */
.core.core2{
  grid-area:2/2/3/3;
  justify-self:end;align-self:end;
  width:30%;max-width:92px;margin:0 3% 3% 0;z-index:6;
  background:radial-gradient(circle at 50% 32%,#7aa8ff 0%,#3b6cff 52%,#2b52d6 100%);
  box-shadow:0 8px 20px rgba(59,108,255,.32), inset 0 1px 0 rgba(255,255,255,.35);
  gap:0;padding:6px;
}
.core.core2 .ico{width:30px;height:30px;font-size:17px;margin-bottom:0;background:rgba(255,255,255,.22)}
.core.core2 .nm{font-size:13.5px;font-weight:800;letter-spacing:1.5px}
.core.core2 .sub{font-size:10px}

/* 部位卡片：可删除 */
.cat-card.wrap-row{display:flex;align-items:center;gap:6px;padding:8px 8px 8px 0}
.cat-main{flex:1;min-width:0;display:flex;align-items:center;gap:12px;padding:6px;background:none}
.cat-del{flex:none}
/* 加减一行（补剂） */
.stepper{display:flex;align-items:center;gap:6px;flex:none}
.btn.sm.step{width:30px;padding:6px 0;font-size:15px;font-weight:800;justify-content:center}
.grid4{display:grid;grid-template-columns:repeat(4,1fr);gap:8px}
/* 弹窗里的可勾选列表 */
.picklist{max-height:46vh;overflow:auto;margin-bottom:4px}
/* 出行快捷标签（带删除） */
.chips-tag{gap:6px}
.tagchip{display:inline-flex;align-items:center;border:1px solid var(--line);border-radius:999px;background:#fff;overflow:hidden}
.tagchip button{font-size:12.5px;color:var(--t2);padding:5px 8px 5px 11px;background:none}
.tagchip.on{border-color:#cfe3d8;background:#f2fbf5}
.tagchip.on button{color:var(--ok)}
.tagchip .tagx{padding:5px 8px 5px 4px;font-size:11px;color:var(--t3);border-left:1px solid var(--line)}
.tagchip .tagx:hover{color:var(--danger)}
/* 每组序号 */
.setidx{font-size:13px;font-weight:700;color:var(--t2);flex:none;min-width:46px}
.chip.on{background:var(--primary);border-color:var(--primary);color:#fff}
.row.tap.sel{border-color:#c9d6ff;background:#f4f7ff}
.pill.body b{color:#3b6cff}

/* 角标 */
.badge{position:absolute;top:10px;right:10px;min-width:22px;height:22px;padding:0 7px;border-radius:999px;font-size:11.5px;font-weight:800;display:grid;place-items:center;color:#fff}
.badge.g{background:var(--ok)} .badge.r{background:var(--danger)} .badge.n{background:#c3cad8;color:#fff}

/* ============ 通用卡片/列表 ============ */
.card{background:var(--card);border:1px solid var(--line);border-radius:var(--r);box-shadow:var(--sh);padding:13px;margin-bottom:10px}
.card-t{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:9px}
.card-t h3{font-size:14.5px;font-weight:700}
.card-t .r{font-size:11.5px;color:var(--t3)}
.sect-t{font-size:11.5px;font-weight:700;color:var(--t3);letter-spacing:1px;margin:14px 2px 7px}

.row{display:flex;align-items:center;gap:10px;padding:11px 12px;border:1px solid var(--line2);border-radius:12px;background:#fcfdff;margin-bottom:8px;transition:.15s}
.row:active{background:#f4f7ff}
.row.done{opacity:.55}
.row.done .rt{text-decoration:line-through}
.row.warn{border-color:#ffc9cc;background:#fff6f6;box-shadow:0 0 0 3px rgba(229,72,77,.06)}
.row .rt{flex:1;min-width:0}
.row .rt b{display:block;font-size:14.5px;font-weight:650;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.row .rt small{display:block;font-size:11.5px;color:var(--t3);margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.row .rv{font-size:13px;font-weight:700;color:var(--t2);flex:none}

/* 复选框 */
.cbx{width:22px;height:22px;border-radius:7px;border:2px solid #cfd6e4;background:#fff;flex:none;display:grid;place-items:center;transition:.15s}
.cbx:hover{border-color:var(--primary)}
.cbx.on{background:var(--ok);border-color:var(--ok);color:#fff;font-size:13px;font-weight:900;line-height:1}
.cbx:active{transform:scale(.88)}

/* ============ 按钮 ============ */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:9px 14px;border-radius:11px;background:#fff;border:1px solid var(--line);color:var(--t2);font-size:13.5px;font-weight:600;box-shadow:var(--sh);transition:.15s}
.btn:hover{color:var(--primary);border-color:#c9d6ff}
.btn:active{transform:scale(.95)}
.btn.primary{background:var(--primary);border-color:var(--primary);color:#fff;box-shadow:0 4px 12px rgba(59,108,255,.28)}
.btn.primary:hover{filter:brightness(1.06);color:#fff}
.btn.danger{color:var(--danger);border-color:#ffd0d2}
.btn.danger:hover{background:#fff3f3}
.btn.sm{padding:6px 10px;font-size:12.5px;border-radius:9px}
.btn.ghost{background:transparent;box-shadow:none;border-color:transparent;color:var(--t3)}
.btn.ghost:hover{background:#eef1f7;color:var(--t1)}
.btn.block{display:flex;width:100%}
.btn.big{padding:14px;font-size:16px;font-weight:700;border-radius:14px}
.btn:disabled{opacity:.45;pointer-events:none}

.iconbtn{width:30px;height:30px;border-radius:9px;display:grid;place-items:center;font-size:15px;color:var(--t3);flex:none;transition:.15s}
.iconbtn:hover{background:#f0f3f9;color:var(--danger)}
.iconbtn:active{transform:scale(.9)}

/* ============ 表单 ============ */
.field{display:flex;gap:8px;margin-bottom:10px;flex-wrap:wrap}
input[type=text],input[type=number],input[type=date],input[type=time],select,textarea{
  flex:1;min-width:0;padding:10px 12px;border:1px solid var(--line);border-radius:11px;background:#fff;outline:none;transition:.15s;font-size:14.5px
}
input:focus,select:focus,textarea:focus{border-color:var(--primary);box-shadow:0 0 0 3px rgba(59,108,255,.12)}
input::placeholder{color:#b6bdcc}
textarea{resize:vertical;min-height:60px;width:100%}
label.lb{display:block;font-size:12px;color:var(--t3);margin:8px 0 4px;font-weight:600}
.grid3{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}
.grid2{display:grid;grid-template-columns:repeat(2,1fr);gap:8px}
.inline{display:flex;align-items:center;gap:8px}
.chk{display:inline-flex;align-items:center;gap:7px;font-size:13px;color:var(--t2);cursor:pointer}
.chk input{width:17px;height:17px;accent-color:var(--primary)}

/* ============ Tabs / Chips ============ */
.tabs{display:flex;gap:6px;background:#eaeef5;padding:4px;border-radius:13px;margin-bottom:14px}
.tabs button{flex:1;padding:8px 4px;border-radius:10px;font-size:13.5px;font-weight:650;color:var(--t2);transition:.15s}
.tabs button.on{background:#fff;color:var(--t1);box-shadow:0 1px 6px rgba(28,35,51,.12)}
.tabs button:active{transform:scale(.97)}
.chips{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:10px}
.chip{padding:5px 11px;border-radius:999px;background:#fff;border:1px solid var(--line);font-size:12.5px;color:var(--t2);transition:.15s}
.chip:hover{border-color:var(--primary);color:var(--primary)}
.chip:active{transform:scale(.94)}

/* ============ 分类卡片（健身） ============ */
.cat-card{display:flex;align-items:center;gap:12px;padding:14px;border:1px solid var(--line2);border-radius:14px;background:#fff;margin-bottom:10px;box-shadow:var(--sh);transition:.15s;width:100%;text-align:left}
.cat-card:hover{transform:translateY(-2px);box-shadow:var(--sh2)}
.cat-card:active{transform:scale(.98)}
.cat-card .dot{width:40px;height:40px;border-radius:12px;display:grid;place-items:center;color:#fff;font-size:15px;font-weight:800;flex:none}
.cat-card .nm{flex:1;font-size:16px;font-weight:700}
.cat-card .meta{font-size:12px;color:var(--t3);margin-top:2px}
.cat-card .arrow{color:#c3cad8;font-size:18px}

/* 组次大按钮 */
.setbox{display:flex;flex-direction:column;align-items:center;gap:12px;padding:22px 14px;border-radius:18px;background:linear-gradient(160deg,#fff7f3,#ffeef0);border:1px solid #ffdccf;margin-bottom:14px}
.setbox .num{font-size:56px;font-weight:800;line-height:1;color:var(--fit);letter-spacing:-1px}
.setbox .num small{font-size:16px;color:var(--t3);font-weight:600;margin-left:4px}
.setbox .goal{font-size:13px;color:var(--t2)}

/* ============ 统计 ============ */
.stat-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-bottom:14px}
.stat{background:#fff;border:1px solid var(--line);border-radius:14px;padding:12px 10px;text-align:center;box-shadow:var(--sh)}
.stat .v{font-size:22px;font-weight:800;line-height:1.2}
.stat .v small{font-size:12px;font-weight:600;color:var(--t3);margin-left:2px}
.stat .k{font-size:11.5px;color:var(--t3);margin-top:2px}
.hbar{margin-bottom:11px}
.hbar .top{display:flex;justify-content:space-between;font-size:12.5px;margin-bottom:5px;color:var(--t2)}
.hbar .top b{color:var(--t1)}
.hbar .track{height:10px;border-radius:999px;background:#eef1f6;overflow:hidden}
.hbar .fill{height:100%;border-radius:999px;transition:width .5s cubic-bezier(.3,1,.4,1)}
.chart{width:100%;height:auto;display:block}
.chart .grid{stroke:#eceff5;stroke-width:1}
.chart text.bl{font-size:11px;fill:#7b869c;text-anchor:middle;font-family:inherit}
.chart text.xlab{font-size:10px;fill:#98a1b3}
.empty{text-align:center;padding:34px 14px;color:var(--t3);font-size:13.5px}
.empty .em{font-size:36px;display:block;margin-bottom:8px;opacity:.5}

/* ============ 饮食总览条 ============ */
.sumbar{position:sticky;bottom:0;margin:0 -14px;padding:12px 14px calc(12px + env(safe-area-inset-bottom));background:rgba(255,255,255,.94);backdrop-filter:blur(10px);border-top:1px solid var(--line);box-shadow:0 -4px 18px rgba(28,35,51,.06)}
.sumbar .line{display:flex;align-items:center;justify-content:space-between;gap:8px;font-size:13px;font-weight:700;color:var(--t2);flex-wrap:wrap}
.sumbar .line .u{color:var(--t3);font-weight:600}
.sumbar .bars{display:flex;flex-direction:column;gap:8px;margin-top:9px}
.sumbar .line .u b{font-size:16px;color:var(--t1);font-weight:800}
/* 每项一行：名称 + 进度条 + 数值 */
.mbar{display:flex;align-items:center;gap:9px}
.mbar .mn{flex:none;min-width:38px;font-size:12px;font-weight:600;color:var(--t2);white-space:nowrap}
.mbar .track{flex:1;height:8px;border-radius:999px;background:#eef1f6;overflow:hidden}
.mbar .fill{height:100%;border-radius:999px;transition:width .5s}
.mbar .mv{flex:none;min-width:80px;text-align:right;font-size:12px;font-weight:800;font-variant-numeric:tabular-nums}
.mbar .mv i{font-style:normal;font-weight:600;color:var(--t3)}

/* ============ 弹窗 / Toast ============ */
.mask{position:fixed;inset:0;background:rgba(20,26,40,.42);display:flex;align-items:center;justify-content:center;padding:18px;z-index:100;animation:fade .18s ease}
@keyframes fade{from{opacity:0}to{opacity:1}}
@keyframes pop{from{opacity:0;transform:translateY(14px) scale(.97)}to{opacity:1;transform:none}}
.modal{width:100%;max-width:420px;background:#fff;border-radius:20px;padding:20px;box-shadow:0 24px 60px rgba(20,26,40,.3);animation:pop .22s cubic-bezier(.2,.9,.3,1.1);max-height:86vh;overflow:auto}
.modal h3{font-size:17px;font-weight:750;margin-bottom:4px}
.modal .desc{font-size:13px;color:var(--t3);margin-bottom:14px}
.modal-btns{display:flex;gap:10px;margin-top:18px}
.modal-btns .btn{flex:1;justify-content:center;padding:11px}
#toastRoot{position:fixed;left:0;right:0;bottom:26px;display:flex;flex-direction:column;align-items:center;gap:8px;z-index:200;pointer-events:none}
.toast{background:rgba(28,35,51,.94);color:#fff;padding:10px 18px;border-radius:999px;font-size:13.5px;font-weight:600;box-shadow:0 8px 24px rgba(0,0,0,.22);animation:tin .25s cubic-bezier(.2,.9,.3,1.2)}
.toast.ok{background:rgba(22,163,74,.96)} .toast.err{background:rgba(229,72,77,.96)}
@keyframes tin{from{opacity:0;transform:translateY(16px)}to{opacity:1;transform:none}}
.toast.out{animation:tout .25s forwards}
@keyframes tout{to{opacity:0;transform:translateY(-8px)}}

.pop{animation:pop .3s cubic-bezier(.2,.9,.3,1.4)}
.flash{animation:flash .45s}
@keyframes flash{0%{box-shadow:0 0 0 0 rgba(59,108,255,.4)}100%{box-shadow:0 0 0 12px rgba(59,108,255,0)}}

/* ============ 重量 / 次数 ============ */
.wline{display:flex;align-items:center;flex-wrap:wrap;gap:8px;margin-top:10px;padding-top:10px;border-top:1px dashed var(--line)}
.wline .wl-k{font-size:12.5px;color:var(--t3);flex:none}
.wline input{width:92px;flex:none;padding:6px 9px;text-align:center;font-weight:700}
.wline input[type=number]{min-width:0}
/* 今天各组：每组一行，重量 + 次数 + 删除 */
.setrow{display:flex;align-items:center;gap:6px;padding:7px 0;border-bottom:1px dashed var(--line)}
.setrow:last-of-type{border-bottom:none}
.setrow input[type=number]{width:78px;flex:none;padding:6px 6px;text-align:center;font-weight:700}
.setrow .setidx{min-width:44px}
.setrow .wl-k{font-size:11.5px;color:var(--t3);flex:none}
.setrow .iconbtn{margin-left:auto}
.wl-last{margin-left:auto;font-size:12.5px;color:var(--t2);white-space:nowrap}
.row.tap{cursor:pointer}
.row.tap:active{background:#f2f5fa}
.badge-on{font-size:11px;font-weight:700;color:#fff;background:var(--fit);border-radius:99px;padding:2px 7px;margin-left:8px;flex:none}

/* ============ 侧边返回 ============ */
.edge-back{
  position:fixed;left:0;top:50%;transform:translateY(-50%);z-index:60;
  width:30px;height:74px;border-radius:0 14px 14px 0;
  background:rgba(255,255,255,.9);border:1px solid var(--line);border-left:none;
  box-shadow:2px 0 12px rgba(28,35,51,.08);backdrop-filter:blur(6px);
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1px;
  color:var(--t2);transition:.18s;
}
.edge-back span{font-size:19px;line-height:1;font-weight:700;margin-top:-2px}
.edge-back em{font-size:10px;font-style:normal;letter-spacing:1px;line-height:1.2}
.edge-back:hover{background:#fff;color:var(--primary);width:34px}
.edge-back:active{transform:translateY(-50%) scale(.94);background:#eef3ff}

/* ============ 响应式 ============ */
@media (max-width:720px){
  .app{padding:0 12px 30px}
  .radial{
    display:grid;
    grid-template-columns:1fr 1fr;
    grid-template-rows:auto 1fr 1fr;
    height:auto;min-height:0;gap:20px 12px;margin-top:10px;
  }
  .core-wrap{grid-area:1/1/2/3;justify-content:center;gap:14px}
  .core-wrap .core{max-width:172px}
  /* 身体记录：骑在四个方框的正中间（两行方块的交界处） */
  .core.core2{
    grid-area:3/1/4/3;justify-self:center;align-self:start;
    width:64px;max-width:64px;margin:0;
    transform:translateY(calc(-50% - 10px));
    border:3px solid #fff;
    box-shadow:0 6px 18px rgba(59,108,255,.34), inset 0 1px 0 rgba(255,255,255,.35);
  }
  .core.core2 .ico{width:26px;height:26px;font-size:15px}
  .core.core2 .nm{font-size:12.5px;letter-spacing:1px}
  .t-top{grid-area:2/1/3/2} .t-left{grid-area:2/2/3/3}
  .t-right{grid-area:3/1/4/2} .t-bottom{grid-area:3/2/4/3}
  .tile{aspect-ratio:1/1;border-radius:20px}
  .tile .ico{width:38px;height:38px;font-size:20px}
  .tile .nm{font-size:15px}
  .hd-t h2{font-size:17px}
  .stat-grid{grid-template-columns:repeat(2,1fr)}
  .grid3{grid-template-columns:1fr}
  .grid4{grid-template-columns:repeat(2,1fr)}
  .sumbar{margin:0 -12px;padding-left:12px;padding-right:12px}
}
@media (max-width:720px){
  .edge-back{width:26px;height:64px}
}
@media (max-width:400px){
  .stat .v{font-size:19px}
  .tile .nm{font-size:14px}
}

/* ===== 新版本提示横幅 ===== */
.updbar{
  position:fixed; left:12px; right:12px; bottom:calc(12px + env(safe-area-inset-bottom,0px));
  z-index:9999; display:flex; align-items:center; justify-content:space-between; gap:10px;
  padding:12px 16px; border-radius:14px; color:#fff; cursor:pointer;
  background:linear-gradient(135deg,#3b82f6,#6366f1);
  box-shadow:0 8px 24px rgba(59,130,246,.38);
  font-size:14px; animation:updIn .28s ease both;
}
.updbar span{opacity:.95}
.updbar b{font-weight:700;white-space:nowrap}
@keyframes updIn{from{opacity:0;transform:translateY(14px)}to{opacity:1;transform:none}}

/* ===== 训练日历 ===== */
.calhead{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:2px 0 10px}
.calhead b{font-size:15px}
.calwd{display:grid;grid-template-columns:repeat(7,1fr);gap:4px;margin-bottom:4px}
.calwd span{text-align:center;font-size:11px;color:var(--t3);padding:2px 0}
.calgrid{display:grid;grid-template-columns:repeat(7,1fr);gap:4px}
.ccell{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;
  aspect-ratio:1/1;border-radius:10px;border:1px solid transparent;background:#f6f8fc;color:var(--t2);
  font-size:13px;font-family:inherit;cursor:pointer;transition:.15s;padding:0}
.ccell.empty{background:transparent;pointer-events:none}
.ccell .cd{font-style:normal;font-weight:600;font-size:12.5px;line-height:1}
.ccell.has{background:#eef4ff;border-color:#d7e4ff}
.ccell.today{border-color:var(--primary);box-shadow:0 0 0 2px rgba(59,108,255,.12)}
.ccell.today .cd{color:var(--primary);font-weight:800}
.ccell.sel{background:var(--primary);border-color:var(--primary)}
.ccell.sel .cd{color:#fff}
.ccell .cdot{display:flex;gap:2px;height:6px;align-items:center}
.ccell .cdot i{width:6px;height:6px;border-radius:50%;display:block}
.ccell.sel .cdot i{box-shadow:0 0 0 1px rgba(255,255,255,.8)}
/* 有氧日：浅青底 + 底部青条（与力量的浅蓝底区分，选中态仍是主蓝色） */
.ccell.cardio{background:#ecfafe;border-color:#c7e9f7}
.ccell.has.cardio{background:#eef4ff;border-color:#d7e4ff}
.ccell .cbar{position:absolute;left:24%;right:24%;bottom:5px;height:3px;border-radius:2px;background:#0ea5e9}
.ccell.sel .cbar{background:#bae6fd}
.ccell.sel.cardio{background:var(--primary);border-color:var(--primary)}
.daydet{margin-top:12px;padding:10px 12px;border-radius:12px;background:#f6f8fc;border:1px solid var(--line)}
.daydet .dd-t{display:flex;align-items:center;justify-content:space-between;font-size:13.5px;font-weight:700;margin-bottom:8px}
.daydet .ddx{border:none;background:transparent;color:var(--t3);font-size:14px;cursor:pointer;padding:0 2px}
.daydet .ddrow{display:flex;align-items:center;gap:8px;margin-top:6px;flex-wrap:wrap}
.daydet .ddtag{color:#fff;font-size:11.5px;font-weight:700;padding:3px 9px;border-radius:999px}
.daydet .ddn{font-size:12.5px;color:var(--t2);flex:1}
.daydet .ddact{font-size:11.5px;color:var(--t3);margin:2px 0 6px 4px;line-height:1.7}
/* ===== 练休状态 ===== */
.restrow{display:flex;align-items:center;gap:9px;padding:7px 0;border-bottom:1px dashed var(--line)}
.restrow:last-of-type{border-bottom:none}
.restrow .dot{width:9px;height:9px;border-radius:50%;flex:none}
.restrow .rn{font-size:14px;font-weight:700;min-width:44px}
.restrow .rd{font-size:12px;color:var(--t3);flex:1}
.stag{font-size:11px;font-weight:700;padding:3px 8px;border-radius:999px;white-space:nowrap}
.stag.ok{background:#e8f7ee;color:#16a34a}
.stag.g{background:#eef4ff;color:#3b6cff}
.stag.o{background:#fff4e5;color:#f59e0b}
.stag.r{background:#ffeded;color:#ef4444}
@media (max-width:400px){
  .ccell .cd{font-size:11.5px}
  .restrow .rn{min-width:38px}
}

/* ===== 图表：横向滚动 + 缩放控制 ===== */
.chartctl{display:flex;align-items:center;justify-content:space-between;gap:8px;flex-wrap:wrap;margin-bottom:8px}
.chartctl .cz-tip{font-size:11.5px;color:var(--t3)}
.chartctl .cz-btns{display:flex;align-items:center;gap:6px}
.chartctl .cz-lv{font-size:12.5px;font-weight:800;color:var(--primary);min-width:26px;text-align:center}
.chartbox{
  overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch;
  touch-action:pan-x;cursor:grab;
  scrollbar-width:none;border-radius:10px;background:#fbfcfe;border:1px solid var(--line2);
}
.chartbox::-webkit-scrollbar{display:none}
.chartbox.grabbing{cursor:grabbing}
.chartfx{display:block}
.chartfx .grid{stroke:var(--line2);stroke-width:1}
.chartfx .bl{fill:var(--t3);font-size:10px}
.chartfx .zv{fill:var(--t1);font-size:11px;font-weight:700}
.chartfx .xlab{font-size:9.5px}

/* ===== 饮食历史 ===== */
.histday{cursor:pointer;transition:.15s}
.histday:active{transform:scale(.985)}
.histmac{font-size:12px;color:var(--t2);padding:2px 0 8px}
.histmeal{display:flex;align-items:center;gap:7px;padding:5px 0;border-top:1px dashed var(--line2);font-size:12.5px}
.histmeal:first-of-type{border-top:none}
.histmeal .hm-ico{font-size:14px;flex:none}
.histmeal .hm-nm{font-weight:700;flex:none;min-width:44px}
.histmeal .hm-it{flex:1;min-width:0;color:var(--t2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.histmeal .hm-k{flex:none;color:var(--diet);font-weight:700;font-size:12px}

/* ===== 计划页目标组数步进器 ===== */
.ptin{width:52px;flex:none;padding:6px 4px;text-align:center;font-weight:700;border:1px solid var(--line);border-radius:9px;background:#fff;-moz-appearance:textfield}
.ptin::-webkit-outer-spin-button,.ptin::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}
.step{min-width:30px;padding:6px 8px;font-weight:800;line-height:1}

/* ===== tab 过多时可横向滑动 ===== */
.tabs-scroll{flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none;-webkit-overflow-scrolling:touch}
.tabs-scroll::-webkit-scrollbar{display:none}
.tabs-scroll button{flex:none}

/* ===== 有氧训练 ===== */
.cg-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:10px}
.cg-type{
  display:flex;flex-direction:column;align-items:flex-start;gap:3px;
  padding:14px 12px;border-radius:14px;border:1px solid var(--line);background:#fbfcfe;
  text-align:left;transition:.15s;font-family:inherit;
}
.cg-type:hover{border-color:#bfe3cc;background:#f4fbf6}
.cg-type:active{transform:scale(.96)}
.cg-type .cg-ico{font-size:24px;line-height:1}
.cg-type b{font-size:14.5px}
.cg-type small{font-size:11px;color:var(--t3)}
.kcalprev{
  margin-top:4px;padding:10px 12px;border-radius:11px;background:#f0f9f2;
  border:1px solid #d6efdf;color:var(--t2);font-size:13px;
}
.kcalprev b{color:var(--ok);font-size:15px}

/* ===== 通用按压反馈（移动端更跟手） ===== */
.row:active,.cat-main:active{background:#f7f9fd}
.btn:active{transform:scale(.97)}
.chip:active{transform:scale(.95)}
.chip{transition:.15s}
.btn{transition:.15s}

/* ===== 回到顶部 ===== */
.backtop{
  position:fixed;right:14px;bottom:calc(18px + env(safe-area-inset-bottom,0px));z-index:60;
  width:42px;height:42px;border-radius:50%;background:#fff;border:1px solid var(--line);
  box-shadow:var(--sh2);color:var(--t2);font-size:17px;font-weight:700;
  display:flex;align-items:center;justify-content:center;
  opacity:0;pointer-events:none;transform:translateY(8px);transition:.2s;
}
.backtop.show{opacity:1;pointer-events:auto;transform:none}
.backtop:active{transform:scale(.92)}
@media (max-width:400px){
  .cg-grid{grid-template-columns:1fr 1fr;gap:8px}
  .cg-type{padding:12px 10px}
}
