:root{
  --bg:#0f1115; --card:#181b22; --card2:#1f232c; --line:#2a2f3a;
  --txt:#e9ecf2; --mut:#8b93a4; --pri:#ff5a3c; --ok:#51cf66;
  --safe-b:env(safe-area-inset-bottom,0px);
}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html,body{margin:0;padding:0;background:var(--bg);color:var(--txt);
  font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang TC","Noto Sans TC","Microsoft JhengHei",sans-serif;
  overscroll-behavior-y:none}
body{font-size:16px;line-height:1.45}
.hidden{display:none!important}
.muted{color:var(--mut)}
.spacer{height:130px}
input,button,select{font-family:inherit;font-size:16px}

/* ── 鎖定 ── */
.lock{position:fixed;inset:0;background:var(--bg);display:flex;align-items:center;justify-content:center;z-index:200}
.lock-box{text-align:center;width:260px}
.lock-logo{font-size:52px}
.lock-box h1{margin:6px 0 2px;font-size:26px;letter-spacing:2px}
.lock-box input{width:100%;margin:18px 0 10px;padding:14px;text-align:center;font-size:24px;letter-spacing:8px;
  background:var(--card);border:1px solid var(--line);border-radius:14px;color:var(--txt)}
.err{color:var(--pri);min-height:20px;font-size:14px;margin-top:8px}

/* ── 框架 ── */
.app{padding-bottom:calc(64px + var(--safe-b));max-width:560px;margin:0 auto}
.tabs{max-width:560px;margin:0 auto}
.view{padding:0 14px}
.hdr{display:flex;align-items:center;gap:8px;padding:14px 0 8px;position:sticky;top:0;background:var(--bg);z-index:20}
.hdr-mid{flex:1;text-align:center}
.hdr-title{font-size:19px;font-weight:700}
.hdr-sub{font-size:12px;color:var(--mut);margin-top:2px}
.icon-btn{width:38px;height:38px;border-radius:12px;border:1px solid var(--line);background:var(--card);
  color:var(--txt);font-size:20px;line-height:1;display:flex;align-items:center;justify-content:center}

/* ── 分頁 ── */
.tabs{position:fixed;left:0;right:0;bottom:0;display:grid;grid-template-columns:repeat(4,1fr);
  background:rgba(15,17,21,.94);backdrop-filter:blur(14px);border-top:1px solid var(--line);
  padding-bottom:var(--safe-b);z-index:50}
.tabs button{background:none;border:0;color:var(--mut);font-size:11px;padding:8px 0 9px;display:flex;flex-direction:column;align-items:center;gap:2px}
.tabs button span{font-size:20px;line-height:1}
.tabs button.on{color:var(--pri)}

/* ── 今日總結 ── */
.summary{background:linear-gradient(140deg,#1c2029,#171a21);border:1px solid var(--line);border-radius:18px;padding:14px;margin-bottom:12px}
.sum-top{display:flex;align-items:baseline;gap:10px}
.sum-vol{font-size:32px;font-weight:800;letter-spacing:-1px}
.sum-unit{color:var(--mut);font-size:13px}
.sum-meta{margin-left:auto;text-align:right;font-size:12px;color:var(--mut)}
.sum-bars{display:flex;gap:4px;margin-top:12px;height:8px;border-radius:6px;overflow:hidden;background:#252a34}
.sum-bars i{display:block;height:100%}
.sum-legend{display:flex;flex-wrap:wrap;gap:10px;margin-top:9px;font-size:12px;color:var(--mut)}
.sum-legend b{color:var(--txt);font-weight:600}
.dot{display:inline-block;width:8px;height:8px;border-radius:3px;margin-right:5px;vertical-align:middle}

/* ── 動作卡 ── */
.list{display:flex;flex-direction:column;gap:11px}
.ex{background:var(--card);border:1px solid var(--line);border-radius:18px;overflow:hidden}
.ex-head{display:flex;align-items:center;gap:11px;padding:12px 13px}
.ex-ic{width:44px;height:44px;border-radius:13px;background:var(--card2);display:flex;align-items:center;justify-content:center;flex:none}
.ex-ic svg{width:30px;height:30px}
.ex-name{font-weight:650;font-size:16px}
.ex-sub{font-size:11.5px;color:var(--mut);margin-top:2px}
.ex-vol{margin-left:auto;text-align:right;flex:none}
.ex-vol b{font-size:17px}
.ex-vol span{display:block;font-size:10.5px;color:var(--mut)}
.chip{display:inline-block;padding:1px 7px;border-radius:7px;font-size:10.5px;font-weight:600;vertical-align:middle}

.last{margin:0 13px 8px;padding:7px 10px;background:#14171d;border-radius:11px;font-size:12px;color:var(--mut);
  display:flex;gap:7px;align-items:center;flex-wrap:wrap}
.last b{color:#cfd6e4;font-weight:600}
.last .up{color:var(--ok);font-weight:700}
.last .down{color:#ff8787;font-weight:700}

.sets{padding:0 13px 6px}
.srow{display:grid;grid-template-columns:26px 1fr 1fr 40px 34px;gap:7px;align-items:center;margin-bottom:7px}
.sn{font-size:12px;color:var(--mut);text-align:center;font-weight:700}
.sn.wu{color:#ffd43b;font-size:10px}
.num{display:flex;align-items:center;background:var(--card2);border:1px solid var(--line);border-radius:11px;overflow:hidden}
.num input{flex:1;width:100%;min-width:0;background:none;border:0;color:var(--txt);padding:11px 4px;text-align:center;font-size:17px;font-weight:600}
.num input::-webkit-outer-spin-button,.num input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}
.num input[type=number]{-moz-appearance:textfield}
.num em{font-style:normal;font-size:10px;color:var(--mut);padding-right:8px}
.sok{height:40px;border-radius:11px;border:1px solid var(--line);background:var(--card2);color:var(--mut);font-size:17px}
.sok.on{background:rgba(81,207,102,.16);border-color:rgba(81,207,102,.5);color:var(--ok)}
.sdel{height:40px;border-radius:11px;border:0;background:none;color:#5c6577;font-size:17px}
.srow.head{grid-template-columns:26px 1fr 1fr 40px 34px;font-size:10.5px;color:var(--mut);margin-bottom:4px}
.srow.head div{text-align:center}

.ex-foot{display:flex;gap:8px;padding:2px 13px 12px}
.ex-foot button{flex:1;padding:10px;border-radius:12px;border:1px dashed var(--line);background:none;color:var(--mut);font-size:13.5px}
.ex-foot button.main{border-style:solid;background:var(--card2);color:var(--txt);font-weight:600}

/* ── 按鈕 ── */
.pad-actions{display:flex;flex-direction:column;gap:9px;margin-top:14px}
.btn{border:0;border-radius:15px;padding:14px;font-size:15.5px;font-weight:650;background:var(--card2);color:var(--txt)}
.btn.primary{background:var(--pri);color:#fff}
.btn.ghost{background:none;border:1px solid var(--line);color:var(--mut)}
.btn.big{padding:16px;font-size:16.5px}
.btn:active{transform:scale(.985)}

/* ── 動作庫 ── */
.searchbar input{width:100%;padding:13px 15px;border-radius:14px;background:var(--card);border:1px solid var(--line);color:var(--txt)}
.chips{display:flex;gap:7px;overflow-x:auto;padding:12px 0;scrollbar-width:none}
.chips::-webkit-scrollbar{display:none}
.chips button{flex:none;padding:8px 15px;border-radius:20px;border:1px solid var(--line);background:var(--card);color:var(--mut);font-size:13.5px;font-weight:600}
.chips button.on{color:#fff;border-color:transparent}
.grid{display:grid;grid-template-columns:repeat(3,1fr);gap:9px}
.cell{background:var(--card);border:1px solid var(--line);border-radius:16px;padding:11px 6px 9px;text-align:center;position:relative}
.cell svg{width:38px;height:38px}
.cell .nm{font-size:11.5px;margin-top:5px;line-height:1.3;font-weight:600}
.cell .pt{position:absolute;top:6px;right:7px;width:7px;height:7px;border-radius:3px}
.cell.picked{border-color:var(--pri);background:rgba(255,90,60,.1)}
.cell.picked::after{content:"✓";position:absolute;top:5px;left:8px;color:var(--pri);font-weight:800;font-size:13px}
.grid-h{grid-column:1/-1;font-size:12px;color:var(--mut);font-weight:700;margin:8px 0 -2px;letter-spacing:1px}

/* ── 課表 ── */
.tpl{background:var(--card);border:1px solid var(--line);border-radius:18px;padding:14px}
.tpl-h{display:flex;align-items:center;gap:8px}
.tpl-h b{font-size:16.5px}
.tpl-items{display:flex;flex-wrap:wrap;gap:6px;margin:10px 0 12px}
.tpl-items i{font-style:normal;font-size:11.5px;background:var(--card2);padding:5px 9px;border-radius:9px;color:var(--mut)}
.tpl-btns{display:flex;gap:8px}
.tpl-btns button{flex:1;padding:11px;border-radius:12px;border:0;font-size:14px;font-weight:600}
.tpl.ispreset{opacity:.72}
.tpl-items i b{font-weight:700;font-size:10.5px}

/* 課表編輯器 */
.terow{display:flex;gap:10px;align-items:center;padding:9px 0;border-bottom:1px solid var(--line)}
.tepic{width:46px;height:46px;border-radius:12px;background:var(--card2);flex:none;display:flex;align-items:center;justify-content:center;overflow:hidden}
.tepic img{width:100%;height:100%;object-fit:contain;background:#fff}
.tepic svg{width:26px;height:26px}
.teinfo{flex:1;min-width:0}
.tenm{font-size:14.5px;font-weight:640;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.teplan{display:flex;gap:7px;margin-top:5px}
.teplan span{display:flex;align-items:center;gap:3px;font-size:11px;color:var(--mut)}
.teplan input{width:44px;background:var(--card2);border:1px solid var(--line);border-radius:8px;
  padding:6px 2px;color:var(--txt);text-align:center;font-size:14px;font-weight:600}
.teplan input::-webkit-outer-spin-button,.teplan input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}
.tebtns{display:flex;flex-direction:column;gap:3px;flex:none}
.tebtns button{width:30px;height:22px;border-radius:7px;border:1px solid var(--line);background:var(--card2);
  color:var(--mut);font-size:10px;line-height:1;padding:0}
.tebtns button[data-a="rm"]{color:#ff8787}

/* ── 數據 ── */
.seg{display:flex;background:var(--card);border-radius:13px;padding:4px;margin-bottom:14px}
.seg button{flex:1;padding:9px;border:0;border-radius:10px;background:none;color:var(--mut);font-size:14px;font-weight:650}
.seg button.on{background:var(--card2);color:var(--txt)}
.panel{background:var(--card);border:1px solid var(--line);border-radius:18px;padding:15px;margin-bottom:12px}
.panel h3{margin:0 0 3px;font-size:15px}
.panel .ph{font-size:11.5px;color:var(--mut);margin-bottom:13px}
.kpis{display:grid;grid-template-columns:repeat(3,1fr);gap:9px;margin-bottom:12px}
.kpi{background:var(--card);border:1px solid var(--line);border-radius:15px;padding:12px 9px;text-align:center}
.kpi b{display:block;font-size:20px;font-weight:800;letter-spacing:-.5px}
.kpi span{font-size:10.5px;color:var(--mut)}
.cmp{font-size:12px;font-weight:700;margin-top:3px}
.cmp.up{color:var(--ok)} .cmp.down{color:#ff8787} .cmp.flat{color:var(--mut)}

.prow{margin-bottom:13px}
.prow-t{display:flex;align-items:baseline;font-size:13px;margin-bottom:5px}
.prow-t b{font-weight:650}
.prow-t .v{margin-left:auto;font-variant-numeric:tabular-nums;font-size:12.5px}
.track{height:9px;background:#252a34;border-radius:5px;overflow:hidden;position:relative}
.track i{display:block;height:100%;border-radius:5px}
.track u{position:absolute;top:-2px;bottom:-2px;width:2px;background:#6b7488;text-decoration:none}

.bars{display:flex;align-items:flex-end;gap:5px;height:120px;margin-top:6px}
.bars div{flex:1;display:flex;flex-direction:column;justify-content:flex-end;align-items:center;height:100%;gap:4px}
.bars i{display:block;width:100%;background:linear-gradient(180deg,#ff7a5c,#ff5a3c);border-radius:5px 5px 2px 2px;min-height:3px}
.bars i.dim{background:#333a47}
.bars small{font-size:9px;color:var(--mut)}

table.tb{width:100%;border-collapse:collapse;font-size:13px}
table.tb td,table.tb th{padding:9px 4px;border-bottom:1px solid var(--line);text-align:left}
table.tb th{font-size:11px;color:var(--mut);font-weight:600}
table.tb td.n{text-align:right;font-variant-numeric:tabular-nums}
.exlink{display:flex;align-items:center;gap:9px;padding:11px 0;border-bottom:1px solid var(--line)}
.exlink svg{width:24px;height:24px;color:var(--mut)}
.exlink .g{margin-left:auto;font-size:12.5px;font-weight:700}

.spark{width:100%;height:70px}

/* ── 彈窗 ── */
.sheet{position:fixed;inset:0;z-index:150;display:flex;align-items:flex-end}
.sheet-bg{position:absolute;inset:0;background:rgba(0,0,0,.6)}
.sheet-card{position:relative;width:100%;max-height:88vh;background:var(--bg);border-radius:22px 22px 0 0;
  border-top:1px solid var(--line);display:flex;flex-direction:column;animation:up .22s ease}
@keyframes up{from{transform:translateY(30px);opacity:.4}}
.sheet-head{display:flex;align-items:center;padding:15px 15px 10px;font-weight:700;font-size:16.5px}
.sheet-head .icon-btn{margin-left:auto}
.sheet-body{overflow-y:auto;padding:0 15px calc(20px + var(--safe-b));-webkit-overflow-scrolling:touch}
.field{margin-bottom:13px}
.field label{display:block;font-size:12px;color:var(--mut);margin-bottom:6px}
.field input,.field select{width:100%;padding:13px;border-radius:13px;background:var(--card);border:1px solid var(--line);color:var(--txt)}

.toast{position:fixed;left:50%;bottom:calc(80px + var(--safe-b));transform:translateX(-50%) translateY(20px);
  background:#2b313d;color:#fff;padding:11px 19px;border-radius:24px;font-size:14px;font-weight:600;
  opacity:0;pointer-events:none;transition:.22s;z-index:300;white-space:nowrap}
.toast.on{opacity:1;transform:translateX(-50%) translateY(0)}

svg{fill:none;stroke:currentColor;stroke-width:3;stroke-linecap:round;stroke-linejoin:round}
svg.solid{stroke:none}

/* ══ 飲食 ══ */
.tabs.t5{grid-template-columns:repeat(5,1fr)}
.tabs.t5 button{font-size:10.5px}

.rings{background:linear-gradient(140deg,#1c2029,#171a21);border:1px solid var(--line);border-radius:18px;padding:15px}
.kcal-top{display:flex;align-items:flex-end;gap:12px;margin-bottom:4px}
.kcal-big{font-size:34px;font-weight:800;letter-spacing:-1.5px;line-height:1}
.kcal-of{color:var(--mut);font-size:13px;padding-bottom:3px}
.kcal-left{margin-left:auto;text-align:right;font-size:12px;color:var(--mut);line-height:1.5}
.kcal-left b{display:block;font-size:17px;color:var(--txt)}
.kbar{height:11px;background:#252a34;border-radius:6px;overflow:hidden;margin:11px 0 4px;position:relative}
.kbar i{display:block;height:100%;border-radius:6px;background:linear-gradient(90deg,#ffa94d,#ff5a3c);transition:width .3s}
.kbar i.over{background:linear-gradient(90deg,#ff6b6b,#f03e3e)}
.kbar u{position:absolute;top:-3px;bottom:-3px;width:2px;background:#8b93a4;text-decoration:none}
.kbar-tip{font-size:11px;color:var(--mut);margin-bottom:12px}

.macros{display:grid;grid-template-columns:repeat(3,1fr);gap:9px}
.macro{background:#14171d;border-radius:13px;padding:10px 8px;text-align:center}
.macro .mv{font-size:17px;font-weight:750;letter-spacing:-.5px}
.macro .mv small{font-size:10.5px;color:var(--mut);font-weight:500}
.macro .mn{font-size:10.5px;color:var(--mut);margin-bottom:5px}
.macro .mt{height:5px;background:#252a34;border-radius:3px;margin-top:6px;overflow:hidden}
.macro .mt i{display:block;height:100%;border-radius:3px}

.shoot{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:13px}
.shootbtn{display:flex;flex-direction:column;align-items:center;gap:3px;padding:17px 8px;border-radius:17px;
  border:1px solid var(--line);background:var(--card);color:var(--txt);font-size:14.5px;font-weight:650}
.shootbtn span{font-size:26px;line-height:1.1}
.shootbtn i{font-style:normal;font-size:10.5px;color:var(--mut);font-weight:400}
.shootbtn:active{transform:scale(.97)}

.meal{background:var(--card);border:1px solid var(--line);border-radius:16px;padding:11px 12px;display:flex;gap:11px;align-items:center}
.meal img{width:52px;height:52px;border-radius:12px;object-fit:cover;flex:none;background:var(--card2)}
.meal .mi{min-width:0;flex:1}
.meal .mnm{font-weight:640;font-size:14.5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.meal .mq{font-size:11px;color:var(--mut);margin-top:2px}
.meal .mk{text-align:right;flex:none}
.meal .mk b{font-size:16px}
.meal .mk span{display:block;font-size:10px;color:var(--mut);margin-top:1px}
.srcpill{display:inline-block;font-size:9.5px;padding:1px 5px;border-radius:5px;background:#2b313d;color:var(--mut);margin-left:5px;vertical-align:middle}

.aibox{background:var(--card);border:1px solid var(--line);border-radius:16px;padding:14px;text-align:center;margin:12px 0}
.aibox .sp{width:26px;height:26px;border:3px solid var(--line);border-top-color:var(--pri);border-radius:50%;
  margin:0 auto 10px;animation:spin .8s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}

.aiitem{display:grid;grid-template-columns:1fr 62px;gap:8px;align-items:start;padding:11px 0;border-bottom:1px solid var(--line)}
.aiitem input.nm{width:100%;background:var(--card);border:1px solid var(--line);border-radius:10px;padding:9px;color:var(--txt);font-size:14px}
.aiitem .m4{display:grid;grid-template-columns:repeat(4,1fr);gap:5px;margin-top:6px}
.aiitem .m4 label{font-size:9.5px;color:var(--mut);display:block;text-align:center;margin-bottom:2px}
.aiitem .m4 input{width:100%;background:var(--card);border:1px solid var(--line);border-radius:9px;padding:8px 2px;color:var(--txt);text-align:center;font-size:14px}
.aiitem .rm{height:36px;border-radius:10px;border:1px solid var(--line);background:none;color:#5c6577;font-size:15px;margin-top:1px}
.ainote{font-size:11.5px;color:var(--mut);background:#14171d;border-radius:11px;padding:9px 11px;margin:10px 0;line-height:1.5}

.slots{display:flex;gap:6px;margin:10px 0 14px}
.slots button{flex:1;padding:9px 0;border-radius:11px;border:1px solid var(--line);background:var(--card);color:var(--mut);font-size:13px}
.slots button.on{background:var(--pri);border-color:transparent;color:#fff;font-weight:650}

.qfood{display:flex;align-items:center;gap:9px;padding:11px 0;border-bottom:1px solid var(--line)}
.qfood .qi{flex:1;min-width:0}
.qfood .qn{font-size:14px;font-weight:600}
.qfood .qm{font-size:11px;color:var(--mut);margin-top:2px}
.qfood .qadd{padding:8px 14px;border-radius:10px;border:0;background:var(--card2);color:var(--txt);font-size:13px;font-weight:650}

.wprog{margin-top:12px}
.wprog .wt{display:flex;font-size:12.5px;margin-bottom:6px}
.wprog .wt b{font-weight:650} .wprog .wt span{margin-left:auto;color:var(--mut)}

/* 器材照片圖鑑 */
.gearcell{background:var(--card);border:1px solid var(--line);border-radius:16px;overflow:hidden;position:relative}
.gearcell img{width:100%;aspect-ratio:1/1;object-fit:contain;background:#fff;display:block}
.gearcell .gnm{font-size:10.5px;padding:6px 7px 8px;line-height:1.3;font-weight:600}
.gearcell .gbr{position:absolute;top:5px;left:5px;font-size:8.5px;padding:2px 5px;border-radius:5px;
  background:rgba(0,0,0,.62);color:#fff;font-weight:700;letter-spacing:.3px}
.ex-ic img{width:100%;height:100%;object-fit:contain;border-radius:13px;background:#fff}
.cell.haspic{padding:0 0 8px;overflow:hidden}
.cell.haspic img{width:100%;aspect-ratio:1/1;object-fit:contain;background:#fff;display:block;margin-bottom:5px}
.cell.haspic .nm{padding:0 5px}
.cell.haspic .pt{z-index:2}
.cell.haspic.picked::after{background:#fff;border-radius:4px;width:16px;height:16px;line-height:16px;text-align:center;z-index:2}
