:root{
  --bg:#111214; --card:#1b1d21; --card2:#24272c; --line:#2e3238;
  --text:#eef0f2; --muted:#8b929b; --accent:#c8f03c; --accent-ink:#141600;
  --red:#ff5c5c; --red-bg:#3a1c1e; --amber:#ffb547; --amber-bg:#3a2d15; --green:#5ee08a; --green-bg:#16331f;
  --blue:#6cb6ff;
  --r:14px; --gap:12px;
  --safe-b: env(safe-area-inset-bottom, 0px);
}
@media (prefers-color-scheme: light){
  :root:not([data-theme="dark"]){
    --bg:#f3f4f6; --card:#ffffff; --card2:#eef0f3; --line:#e1e4e8;
    --text:#14161a; --muted:#6b7280; --accent:#5a7d00; --accent-ink:#ffffff;
    --red:#d93636; --red-bg:#fde8e8; --amber:#b86e00; --amber-bg:#fff2dc; --green:#18924a; --green-bg:#e2f6ea; --blue:#1f6fd1;
  }
}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html,body{margin:0;background:var(--bg);color:var(--text)}
body{font:15px/1.4 system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;min-height:100vh;
  padding-bottom:calc(76px + var(--safe-b));font-variant-numeric:tabular-nums}
button,input,select,textarea{font:inherit;color:inherit}
button{cursor:pointer;border:0;background:none}
.hidden{display:none!important}

.top{position:sticky;top:0;z-index:5;display:flex;align-items:center;gap:8px;
  padding:calc(10px + env(safe-area-inset-top,0px)) 16px 10px;background:var(--bg)}
.top h1{font-size:22px;margin:0;font-weight:750;letter-spacing:-.02em;flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sync{width:8px;height:8px;border-radius:50%;background:var(--green)}
.sync.pending{background:var(--amber)} .sync.off{background:var(--muted)}

main{padding:0 16px;max-width:640px;margin:0 auto}
.card{background:var(--card);border-radius:var(--r);padding:14px;margin-bottom:var(--gap)}
.card h2{font-size:13px;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);margin:0 0 10px;font-weight:650}
.card h3{font-size:17px;margin:0;font-weight:650}
.muted{color:var(--muted)} .small{font-size:13px} .tiny{font-size:12px}
.row{display:flex;align-items:center;gap:8px} .between{justify-content:space-between} .wrap{flex-wrap:wrap}
.grow{flex:1;min-width:0}
.mt{margin-top:10px} .mb{margin-bottom:10px}

.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;height:46px;padding:0 18px;border-radius:12px;
  background:var(--card2);font-weight:600}
.btn.primary{background:var(--accent);color:var(--accent-ink)}
.btn.danger{color:var(--red)}
.btn.block{width:100%}
.btn.sm{height:36px;padding:0 12px;font-size:14px;border-radius:10px}
.link{color:var(--blue);font-weight:600;padding:4px 0}

.chips{display:flex;gap:8px;overflow-x:auto;padding-bottom:2px;scrollbar-width:none}
.chip{flex:none;height:36px;padding:0 14px;border-radius:18px;background:var(--card2);font-weight:600;font-size:14px;position:relative}
.chip.on{background:var(--accent);color:var(--accent-ink)}
.chip .dot{position:absolute;top:4px;right:6px;width:6px;height:6px;border-radius:50%;background:var(--amber)}

input.f,select.f,textarea.f{width:100%;height:44px;padding:0 12px;border-radius:10px;border:1px solid var(--line);background:var(--card2);outline:none}
textarea.f{height:auto;min-height:80px;padding:10px 12px;resize:vertical}
input.f:focus,textarea.f:focus,select.f:focus{border-color:var(--accent)}
label.l{display:block;font-size:12px;color:var(--muted);margin:10px 0 4px}

/* hero */
.hero{padding:18px}
.hero .big{font-size:46px;line-height:1;font-weight:800;letter-spacing:-.03em}
.hero .big small{font-size:18px;font-weight:600;letter-spacing:0;margin-left:6px}
.hero.bad{background:var(--red-bg)} .hero.bad .big{color:var(--red)}
.hero.good{background:var(--green-bg)} .hero.good .big{color:var(--green)}
.hero .quote{margin-top:10px;font-size:15px;font-weight:500}
.stats{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-top:12px}
.stat{background:rgba(127,127,127,.08);border-radius:10px;padding:8px 10px}
.stat b{display:block;font-size:20px;font-weight:750}
.stat span{font-size:11px;color:var(--muted)}

.lost{border:1px dashed var(--red)}
.lost li{margin:6px 0}
ul.clean{list-style:none;margin:0;padding:0}

/* preview list */
.pv{display:flex;justify-content:space-between;gap:10px;padding:8px 0;border-top:1px solid var(--line);font-size:14px}
.pv:first-child{border-top:0}
.pv .s{color:var(--muted);text-align:right;flex:none}
.tag{display:inline-block;font-size:12px;font-weight:650;padding:2px 8px;border-radius:8px;background:var(--card2)}
.tag.up{background:var(--green-bg);color:var(--green)}
.tag.reps{background:var(--card2);color:var(--text)}
.tag.first{background:var(--amber-bg);color:var(--amber)}
.tag.warn{background:var(--amber-bg);color:var(--amber)}

/* active workout */
.ex-head{display:flex;align-items:flex-start;gap:8px}
.ex-name{font-size:17px;font-weight:700;text-align:left;padding:0;flex:1}
.ex-name::after{content:" ⓘ";color:var(--muted);font-weight:400;font-size:14px}
.ex-meta{font-size:13px;color:var(--muted);margin-top:2px}
.ex-sug{margin-top:8px}
.icon-btn{width:36px;height:36px;border-radius:10px;background:var(--card2);flex:none;font-size:16px}
.sets{margin-top:10px}
.set{display:grid;grid-template-columns:24px 1fr 1fr 52px;gap:8px;align-items:center;margin-top:8px}
.set.sec{grid-template-columns:24px 2fr 52px}
.set .n{color:var(--muted);font-weight:700;text-align:center}
.set .cell{position:relative}
.set .cell span{position:absolute;right:10px;top:50%;transform:translateY(-50%);font-size:12px;color:var(--muted);pointer-events:none}
.num{width:100%;height:48px;border-radius:10px;border:1px solid var(--line);background:var(--card2);
  text-align:center;font-size:19px;font-weight:650;outline:none;padding:0 26px 0 6px}
.num:focus{border-color:var(--accent)}
.num::placeholder{color:var(--muted);opacity:.7;font-weight:500}
.chk{height:48px;border-radius:12px;background:var(--card2);font-size:22px;color:var(--muted)}
.set.done .chk{background:var(--accent);color:var(--accent-ink)}
.set.done .num{border-color:transparent;background:transparent}
.set-btns{display:flex;gap:8px;margin-top:10px}
.ex-card.complete{opacity:.75}
.ex-card.complete .ex-name{color:var(--green)}

.rest{position:fixed;left:12px;right:12px;bottom:calc(72px + var(--safe-b));z-index:8;display:flex;align-items:center;gap:10px;
  background:var(--card2);border:1px solid var(--line);border-radius:14px;padding:10px 12px;overflow:hidden;box-shadow:0 6px 24px rgba(0,0,0,.35)}
.rest-bar{position:absolute;left:0;bottom:0;height:3px;width:100%}
#rest-fill{height:100%;background:var(--accent);width:0}
.rest b{font-size:22px;flex:1}
.rest button{height:36px;padding:0 12px;border-radius:10px;background:var(--card);font-weight:700}
.rest.end{background:var(--accent);color:var(--accent-ink)}
.rest-l{font-size:13px;color:var(--muted)}
.rest.end .rest-l{color:inherit}

/* tabs */
.tabs{position:fixed;left:0;right:0;bottom:0;z-index:9;display:flex;background:var(--card);border-top:1px solid var(--line);
  padding-bottom:var(--safe-b)}
.tabs button{flex:1;height:62px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;color:var(--muted);font-size:11px;font-weight:600}
.tabs svg{width:24px;height:24px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.tabs button.on{color:var(--accent)}

/* sheet */
.sheet-bg{position:fixed;inset:0;background:rgba(0,0,0,.5);z-index:20}
.sheet{position:fixed;left:0;right:0;bottom:0;z-index:21;max-height:88vh;overflow:auto;background:var(--card);
  border-radius:18px 18px 0 0;padding:8px 16px calc(20px + var(--safe-b));max-width:640px;margin:0 auto;
  animation:up .18s ease-out}
@keyframes up{from{transform:translateY(30px);opacity:.4}to{transform:none;opacity:1}}
.sheet .grip{width:40px;height:4px;border-radius:2px;background:var(--line);margin:4px auto 12px}
.sheet h2{font-size:20px;margin:0 0 4px}
.sheet p{margin:6px 0}
.sheet .sec-t{font-size:12px;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);margin:16px 0 6px;font-weight:650}
.tech p{margin:0 0 8px}
.tech ol{margin:0;padding-left:20px} .tech li{margin:4px 0}

.list-item{display:flex;align-items:center;gap:10px;width:100%;text-align:left;padding:12px 0;border-top:1px solid var(--line)}
.list-item:first-child{border-top:0}
.list-item .t{font-weight:600}
.group-t{font-size:12px;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);margin:14px 0 2px;font-weight:650}

/* plan editor */
.pi{background:var(--card2);border-radius:12px;padding:10px;margin-top:8px}
.pi-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:6px;margin-top:8px}
.pi-grid input{height:40px;text-align:center;padding:0 4px}
.pi-grid label{font-size:11px;color:var(--muted);text-align:center;display:block;margin-bottom:2px}
.days{display:grid;grid-template-columns:repeat(7,1fr);gap:6px}
.days .chip{padding:0;text-align:center}

/* charts */
svg.chart{width:100%;height:auto;display:block}
svg.chart text{fill:var(--muted);font-size:10px}
svg.chart .grid{stroke:var(--line);stroke-width:1}
svg.chart .ln{fill:none;stroke:var(--accent);stroke-width:2.5;stroke-linejoin:round;stroke-linecap:round}
svg.chart .ln2{fill:none;stroke:var(--blue);stroke-width:2;stroke-dasharray:4 4}
svg.chart .goal{stroke:var(--green);stroke-dasharray:3 4;stroke-width:1.5}
svg.chart circle{fill:var(--accent)}
.spark{width:84px;height:28px;flex:none}
.spark polyline{fill:none;stroke:var(--accent);stroke-width:2;stroke-linejoin:round}

/* heatmap */
.heat{display:grid;grid-auto-flow:column;grid-template-rows:repeat(7,1fr);gap:3px}
.heat i{display:block;aspect-ratio:1;border-radius:3px;background:var(--card2)}
.heat i.d{background:var(--accent)}
.heat i.m{background:var(--red);opacity:.75}
.heat i.p{background:transparent;box-shadow:inset 0 0 0 1.5px var(--line)}
.heat i.t{box-shadow:inset 0 0 0 2px var(--text)}
.heat i.x{visibility:hidden}
.legend{display:flex;gap:12px;font-size:11px;color:var(--muted);margin-top:8px}
.legend i{display:inline-block;width:10px;height:10px;border-radius:2px;margin-right:4px;vertical-align:-1px}

/* achievements */
.ach{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}
.ach div{background:var(--card2);border-radius:12px;padding:10px 8px;text-align:center}
.ach .e{font-size:26px;line-height:1.2}
.ach b{display:block;font-size:12px;margin-top:4px}
.ach span{display:block;font-size:11px;color:var(--muted)}
.ach .lock{opacity:.4;filter:grayscale(1)}
.bar{height:4px;background:var(--line);border-radius:2px;margin-top:6px;overflow:hidden}
.bar i{display:block;height:100%;background:var(--accent)}

table.t{width:100%;border-collapse:collapse;font-size:14px}
table.t td,table.t th{padding:7px 4px;border-top:1px solid var(--line);text-align:left}
table.t th{font-size:12px;color:var(--muted);font-weight:600;border-top:0}
table.t td.r,table.t th.r{text-align:right}

.toast{position:fixed;left:50%;transform:translateX(-50%);bottom:calc(140px + var(--safe-b));z-index:30;
  background:var(--text);color:var(--bg);padding:10px 16px;border-radius:12px;font-weight:600;max-width:90vw;text-align:center}
.summary .big{font-size:34px;font-weight:800}
.pr{background:var(--green-bg);color:var(--green);border-radius:10px;padding:8px 10px;margin-top:6px;font-weight:600}
.empty{text-align:center;padding:30px 10px;color:var(--muted)}
.login{max-width:380px;margin:12vh auto 0;text-align:center}
.login .logo{font-size:56px}
