/* Layout: one 760px working column under a sticky brand bar; editors open as sheets. Graphite with a neon-pink accent and glow; PRs in electric cyan. */

:root{
  --bg:#121417; --surface:#1A1D22; --ink:#EEF0F2; --muted:#9AA1AB; --line:#2B3038; --soft:#232830;
  --accent:#FF3EA5; --acc-rgb:255,62,165; --accent-ink:#1A0611; --pr:#3EE0FF; --pr-soft:#10303A; --down:#FF6B5E; --scrim:rgba(0,0,0,.65);
  --glow:0 0 14px rgba(var(--acc-rgb),.55),0 0 2px rgba(var(--acc-rgb),.9);
  --f-display:"Roboto Slab",Rockwell,"Courier New",serif;
  --f-body:"IBM Plex Sans",system-ui,-apple-system,"Segoe UI",sans-serif;
  --f-mono:"IBM Plex Mono",ui-monospace,SFMono-Regular,Menlo,monospace;
  color-scheme:dark;
}
*{box-sizing:border-box}
[hidden]{display:none!important}
img{max-width:100%}
body{background:var(--bg);color:var(--ink);font:15px/1.5 var(--f-body);-webkit-font-smoothing:antialiased}
body::before{content:"";position:fixed;inset:0 0 auto;height:env(safe-area-inset-top,0px);z-index:10;background:var(--bg)}
.wrap{max-width:760px;margin:0 auto;padding-left:max(16px,env(safe-area-inset-left,0px));padding-right:max(16px,env(safe-area-inset-right,0px))}
button,input,textarea{font:inherit;color:inherit}
:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.mono{font-family:var(--f-mono);font-variant-numeric:tabular-nums;font-size:13px}
.dim{color:var(--muted)}
h1,h2,h3{margin:0;text-wrap:balance}
h1{font:800 34px/1.1 var(--f-display)}
h2{font:800 19px/1.2 var(--f-display)}
h3{font-size:16px;font-weight:600}

.top{position:sticky;top:env(safe-area-inset-top,0px);z-index:5;background:var(--bg);border-bottom:1px solid rgba(var(--acc-rgb),.45);box-shadow:0 2px 14px rgba(var(--acc-rgb),.18)}
.topin{display:flex;align-items:center;justify-content:space-between;height:60px}
.brand{background:none;border:0;padding:0;cursor:pointer;font:800 24px/1 var(--f-display);display:flex;align-items:center;gap:10px;color:var(--ink)}
.brand img{height:34px;width:34px}
.brand span{letter-spacing:.08em}
.brand img{filter:drop-shadow(0 0 6px rgba(var(--acc-rgb),.7))}
.tab[aria-selected="true"]{text-shadow:0 0 10px rgba(var(--acc-rgb),.45)}
.chart path[stroke]{filter:drop-shadow(0 0 4px rgba(var(--acc-rgb),.6))}
.stats dd,.login .hero .wm{text-shadow:0 0 18px rgba(var(--acc-rgb),.25)}
.sync{font:12px var(--f-mono);color:var(--muted)}

main{padding-block:24px 64px;display:flex;flex-direction:column;gap:20px}
.eyebrow{margin:0 0 4px;font:500 12px var(--f-mono);letter-spacing:.08em;text-transform:uppercase;color:var(--muted)}
.head{display:flex;align-items:flex-end;justify-content:space-between;gap:12px;flex-wrap:wrap}

.btn{border:1px solid var(--line);background:var(--surface);border-radius:8px;padding:9px 14px;font-weight:500;cursor:pointer;white-space:nowrap}
.btn:hover{border-color:var(--muted)}
.btn.primary{background:var(--accent);border-color:var(--accent);color:var(--accent-ink);font-weight:600;box-shadow:0 0 12px rgba(var(--acc-rgb),.35)}
.btn.primary:focus-visible,.btn.primary:hover{box-shadow:var(--glow)}
.btn.primary:hover{filter:brightness(1.08)}
.btn.ghost{background:transparent}
.btn.small{padding:6px 10px;font-size:13px}
.btn.wide{width:100%}
.btn.danger{color:var(--down);border-color:transparent;background:transparent}
.btn.danger.armed{background:var(--down);color:var(--accent-ink);border-color:var(--down)}
.btn[disabled]{opacity:.5;cursor:default}
.icon{width:34px;height:34px;flex:none;border:1px solid transparent;background:transparent;border-radius:8px;cursor:pointer;color:var(--muted);font-size:18px;line-height:1}
.icon:hover{border-color:var(--line);color:var(--ink)}

.search input{width:100%;padding:10px 12px;border:1px solid var(--line);border-radius:8px;background:var(--surface)}
.clist{display:flex;flex-direction:column;border:1px solid var(--line);border-radius:10px;background:var(--surface);overflow:hidden}
.ccard{display:flex;align-items:center;gap:14px;padding:14px 16px;border:0;border-top:1px solid var(--line);background:none;text-align:left;cursor:pointer;width:100%}
.ccard:first-child{border-top:0}
.ccard:hover{background:var(--soft)}
.avatar{flex:none;width:40px;height:40px;border-radius:50%;display:grid;place-items:center;background:var(--soft);color:var(--accent);font:800 15px var(--f-display);border:1px solid rgba(var(--acc-rgb),.35)}
.cmain{flex:1;min-width:0;display:flex;flex-direction:column}
.cname{font-weight:600}
.cgoal{color:var(--muted);font-size:13px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.cmeta{flex:none;display:flex;flex-direction:column;align-items:flex-end;font-size:13px;color:var(--muted)}
.tag{display:inline-block;font:500 11px var(--f-mono);text-transform:uppercase;letter-spacing:.06em;padding:1px 6px;border-radius:4px;background:var(--soft);color:var(--accent);margin-left:6px;vertical-align:2px}

.back{align-self:flex-start;background:none;border:0;padding:0;color:var(--accent);cursor:pointer;font-weight:500}
.chead{display:flex;justify-content:space-between;align-items:flex-start;gap:16px;flex-wrap:wrap}
.cid{min-width:0;flex:1 1 260px}
.goal{margin:8px 0 0;color:var(--muted);max-width:60ch}
.hbtns{display:flex;gap:8px}
.stats{display:grid;grid-template-columns:repeat(4,1fr);margin:0;border:1px solid var(--line);border-radius:10px;background:var(--surface)}
.stats div{padding:12px 14px;border-left:1px solid var(--line);min-width:0}
.stats div:first-child{border-left:0}
.stats dt{font:500 11px var(--f-mono);text-transform:uppercase;letter-spacing:.08em;color:var(--muted)}
.stats dd{margin:2px 0 0;font:800 24px/1.2 var(--f-display);font-variant-numeric:tabular-nums;white-space:nowrap}
.stats dd small{font:500 13px var(--f-body);color:var(--muted)}
@media (max-width:560px){.stats{grid-template-columns:1fr 1fr}.stats div:nth-child(3){border-left:0}.stats div:nth-child(n+3){border-top:1px solid var(--line)}}

.tabs{display:flex;gap:4px;border-bottom:1px solid var(--line)}
.tab{background:none;border:0;border-bottom:3px solid transparent;padding:8px 12px 9px;cursor:pointer;font-weight:500;color:var(--muted);margin-bottom:-1px}
.tab[aria-selected="true"]{color:var(--ink);border-bottom-color:var(--accent)}
.stack{display:flex;flex-direction:column;gap:16px}
.panel{background:var(--surface);border:1px solid var(--line);border-radius:10px;padding:16px;display:flex;flex-direction:column;gap:14px;min-width:0}
.ph{display:flex;justify-content:space-between;align-items:baseline;gap:10px;flex-wrap:wrap}
.hint{font-size:13px;color:var(--muted)}
.chips{display:flex;flex-wrap:wrap;gap:6px}
.chip{border:1px solid var(--line);background:var(--surface);border-radius:999px;padding:5px 12px;font-size:13px;cursor:pointer}
.chip[aria-pressed="true"]{background:var(--soft);color:var(--accent);border-color:var(--accent)}
.chart{width:100%;height:auto;display:block}
.chart text{font:11px var(--f-mono);fill:var(--muted)}
.kv{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}
.kv div{min-width:0}
.kv dt{font:500 11px var(--f-mono);text-transform:uppercase;letter-spacing:.08em;color:var(--muted)}
.kv dd{margin:2px 0 0;font-weight:600}
.kv dd span{display:block;font-weight:400;color:var(--muted);font-size:13px}
.up{color:var(--accent)} .down{color:var(--down)}
@media (max-width:480px){.kv{grid-template-columns:1fr 1fr}}
.empty{margin:0;padding:22px;text-align:center;color:var(--muted);border:1px dashed var(--line);border-radius:10px}
.wlist{list-style:none;margin:0;padding:0}
.wlist li{display:flex;justify-content:space-between;align-items:center;padding:8px 0;border-top:1px solid var(--line)}
.wlist button{background:none;border:0;padding:0;cursor:pointer;display:flex;gap:16px;width:100%;justify-content:space-between;text-align:left}

.sess{background:var(--surface);border:1px solid var(--line);border-radius:10px;padding:14px 16px;display:flex;flex-direction:column;gap:10px}
.sess header{display:flex;justify-content:space-between;gap:10px;align-items:flex-start;flex-wrap:wrap}
.sess header p{margin:2px 0 0}
.row{display:flex;gap:6px;flex-wrap:wrap}
.exl{list-style:none;margin:0;padding:0}
.exl li{display:flex;justify-content:space-between;gap:12px;padding:6px 0;border-top:1px solid var(--line)}
.exl li span:first-child{min-width:0}
.exl li .mono{text-align:right}
.pr{font:600 10px var(--f-mono);letter-spacing:.06em;color:var(--pr);background:var(--pr-soft);padding:1px 5px;border-radius:4px;margin-left:6px;vertical-align:1px}
.note{margin:0;color:var(--muted);font-size:14px;white-space:pre-wrap}
.sess footer{font-size:12px}

/* Sheet */
#sheet{position:fixed;inset:0;z-index:20;display:flex;justify-content:center;align-items:flex-end}
.scrim{position:absolute;inset:0;background:var(--scrim)}
.sheetp{position:relative;background:var(--bg);width:100%;max-width:640px;max-height:100%;display:flex;flex-direction:column;border-radius:14px 14px 0 0;overflow:hidden;
  margin-top:env(safe-area-inset-top,0px)}
@media (min-width:700px){#sheet{align-items:center;padding:24px}.sheetp{border-radius:14px;max-height:calc(100% - 48px)}}
.sh,.sf{display:flex;align-items:center;gap:8px;background:var(--surface);
  padding-left:max(16px,env(safe-area-inset-left,0px));padding-right:max(16px,env(safe-area-inset-right,0px))}
.sh{justify-content:space-between;border-bottom:1px solid var(--line);padding-block:12px}
.sf{border-top:1px solid var(--line);padding-block:12px calc(12px + env(safe-area-inset-bottom,0px))}
.sf .sp{flex:1}
.sb{overflow-y:auto;padding-block:16px;display:flex;flex-direction:column;gap:14px;
  padding-left:max(16px,env(safe-area-inset-left,0px));padding-right:max(16px,env(safe-area-inset-right,0px))}
.fld{display:flex;flex-direction:column;gap:4px;min-width:0}
.fld>span,.lbl{font:500 11px var(--f-mono);text-transform:uppercase;letter-spacing:.08em;color:var(--muted)}
.fld input,.fld textarea,.exb input{width:100%;min-width:0;padding:9px 10px;border:1px solid var(--line);border-radius:8px;background:var(--surface)}
.grid2{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.grid3{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}
.exb{background:var(--surface);border:1px solid var(--line);border-radius:10px;padding:12px;display:flex;flex-direction:column;gap:10px}
.exh{display:flex;gap:6px;align-items:center}
.exname{font-weight:600}
.srow{display:grid;grid-template-columns:34px 1fr 1fr 34px;gap:8px;align-items:center}
.srow input{text-align:center;font-family:var(--f-mono)}
.shead span{font:500 11px var(--f-mono);text-transform:uppercase;letter-spacing:.08em;color:var(--muted);text-align:center}
.shead span:first-child,.srow>span.mono{text-align:center}
.sets{display:flex;flex-direction:column;gap:6px}
.fromplan{display:flex;flex-direction:column;gap:6px}

#toast{position:fixed;left:50%;bottom:calc(20px + env(safe-area-inset-bottom,0px));transform:translate(-50%,20px);opacity:0;z-index:30;
  background:var(--ink);color:var(--bg);padding:9px 16px;border-radius:8px;font-weight:500;pointer-events:none;transition:.2s}
#toast.on{opacity:1;transform:translate(-50%,0)}
@media (prefers-reduced-motion:reduce){#toast{transition:none}}
.notice{padding:16px;border:1px solid var(--line);border-radius:10px;background:var(--surface)}
.notice p{margin:6px 0 0;color:var(--muted)}

/* ---- standalone app additions ---- */
html{-webkit-text-size-adjust:100%}
body{margin:0;padding-top:env(safe-area-inset-top,0px);padding-bottom:env(safe-area-inset-bottom,0px)}
.who{display:flex;align-items:center;gap:10px;min-width:0}
.who .sync{white-space:nowrap}
.tag.warn{background:var(--pr-soft);color:var(--pr)}
.tag.ok{background:var(--soft);color:var(--accent)}
.by{font:500 11px var(--f-mono);color:var(--muted);margin-left:6px}
.statusline{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-top:8px;color:var(--muted);font-size:13px}

.login{min-height:calc(100vh - 60px);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:22px;padding-block:24px}
.login .hero{display:flex;flex-direction:column;align-items:center;gap:10px;text-align:center}
.login .hero img{width:96px;height:96px;filter:drop-shadow(0 0 18px rgba(var(--acc-rgb),.35))}
.login .hero .wm{font:800 40px/1 var(--f-display);letter-spacing:.1em}
.login .hero .tl{margin:0;color:var(--muted);font:500 12px var(--f-mono);letter-spacing:.14em;text-transform:uppercase}
.lcard{width:100%;max-width:420px;background:var(--surface);border:1px solid var(--line);border-radius:12px;padding:20px;display:flex;flex-direction:column;gap:14px}
.lcard h1{font-size:26px}
.lcard p{margin:0;color:var(--muted)}
.lcard .err{color:var(--down)}
.code input{font:600 24px var(--f-mono);letter-spacing:.3em;text-align:center}
.linkbtn{background:none;border:0;color:var(--accent);cursor:pointer;padding:0;font-weight:500;align-self:flex-start}
.setup code{font-family:var(--f-mono);background:var(--soft);padding:1px 5px;border-radius:4px}

/* Editor fits the visible screen on phones (Safari toolbars, notch, keyboard) */
#sheet{height:100%;height:100dvh;bottom:auto}
.sheetp{max-height:calc(100% - env(safe-area-inset-top,0px));max-height:calc(100dvh - env(safe-area-inset-top,0px) - 8px)}
.sb{flex:1 1 auto;min-height:0;-webkit-overflow-scrolling:touch}
.sh{position:sticky;top:0;z-index:1}
.shbtns{display:flex;align-items:center;gap:6px}
@media (max-width:699px){.sheetp{height:calc(100dvh - env(safe-area-inset-top,0px) - 8px)}}

/* Nutrition and weight */
.tabs{overflow-x:auto;scrollbar-width:none}
.tabs::-webkit-scrollbar{display:none}
.tab{flex:none}
.macros{display:flex;flex-direction:column;gap:10px}
.mlab{display:flex;justify-content:space-between;gap:10px;font-size:14px;margin-bottom:4px}
.mbar{height:8px;border-radius:999px;background:var(--soft);overflow:hidden}
.mbar>div{height:100%;border-radius:999px;background:var(--accent);box-shadow:0 0 8px rgba(var(--acc-rgb),.6);transition:width .3s}
.mbar>div.over{background:var(--down);box-shadow:none}
@media (prefers-reduced-motion:reduce){.mbar>div{transition:none}}
.goalwrap{display:flex;flex-direction:column}
.goalwrap .hint{margin:6px 0 0}
.dnav{display:flex;align-items:center;justify-content:space-between}
.dnav strong{font:800 18px var(--f-display)}
.dnav .icon[disabled]{opacity:.3}
.lgroup h3,.pmeal h3{font:600 12px var(--f-mono);text-transform:uppercase;letter-spacing:.08em;color:var(--muted);margin:4px 0 2px}
.frow{display:flex;justify-content:space-between;gap:12px;width:100%;background:none;border:0;padding:0;text-align:left;cursor:pointer}
.pmeal .exl li{align-items:center}
.grid4{display:grid;grid-template-columns:repeat(4,1fr);gap:6px}
.grid4 .fld>span{font-size:10px}
.fitem{display:flex;flex-direction:column;gap:6px;padding-bottom:10px;border-bottom:1px solid var(--line)}
.fitem .linkbtn{font-size:13px;color:var(--muted)}
.panel h3{margin:0}

/* Food suggestions */
.sb{position:relative}
.sugg{position:absolute;left:max(16px,env(safe-area-inset-left,0px));right:max(16px,env(safe-area-inset-right,0px));z-index:5;background:var(--surface);border:1px solid var(--accent);border-radius:10px;box-shadow:0 8px 28px rgba(0,0,0,.5),0 0 14px rgba(var(--acc-rgb),.25);overflow:hidden}
.sg{display:flex;flex-direction:column;align-items:flex-start;gap:2px;width:100%;padding:10px 12px;background:none;border:0;border-top:1px solid var(--line);text-align:left;cursor:pointer}
.sg:first-child{border-top:0}
.sg:hover,.sg:focus-visible{background:var(--soft)}
.sg .mono{font-size:12px}
.check{display:flex;align-items:center;gap:10px;font-size:14px;color:var(--ink)}
.check input{width:20px;height:20px;accent-color:var(--accent)}
.head .hbtns{flex-wrap:wrap}
.check{display:flex;align-items:center;gap:10px;font-size:14px;color:var(--ink)}
.check input{width:20px;height:20px;accent-color:var(--accent)}
.head .hbtns{flex-wrap:wrap}
.frow .mono{white-space:nowrap}

/* Welcome animation */
.welcome{position:fixed;inset:0;z-index:40;display:grid;place-items:center;padding:24px max(16px,env(safe-area-inset-left,0px));background:rgba(10,11,13,.82);backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);opacity:0;transition:opacity .3s}
.welcome.on{opacity:1}.welcome.off{opacity:0}
.wcard{position:relative;width:100%;max-width:380px;text-align:center;display:flex;flex-direction:column;align-items:center;gap:10px;padding:28px 22px 22px;border-radius:18px;background:var(--surface);border:1px solid rgba(var(--acc-rgb),.5);box-shadow:0 0 40px rgba(var(--acc-rgb),.25);transform:scale(.92) translateY(12px);transition:transform .45s cubic-bezier(.2,.9,.3,1.3)}
.welcome.on .wcard{transform:none}
.wmark{width:96px;height:96px;filter:drop-shadow(0 0 10px rgba(var(--acc-rgb),.8));overflow:visible}
.wmark .hx{stroke-dasharray:1;stroke-dashoffset:1;animation:draw .9s .15s ease-out forwards}
.wmark .c1,.wmark .c2{opacity:0;transform:translateY(16px);animation:rise .5s ease-out forwards}
.wmark .c2{animation-delay:.75s}.wmark .c1{animation-delay:.95s}
.welcome.on .wmark{animation:glow 2.4s 1.3s ease-in-out infinite}
@keyframes draw{to{stroke-dashoffset:0}}
@keyframes rise{to{opacity:1;transform:none}}
@keyframes glow{50%{filter:drop-shadow(0 0 18px rgba(var(--acc-rgb),1)) drop-shadow(0 0 4px #fff)}}
.whi,.wpep,.wstats,.wgo{opacity:0;transform:translateY(8px);animation:rise .5s ease-out forwards}
.whi{margin:6px 0 0;font:500 12px var(--f-mono);letter-spacing:.12em;text-transform:uppercase;color:var(--muted);animation-delay:1.1s}
.wpep{font:800 24px/1.2 var(--f-display);text-shadow:0 0 18px rgba(var(--acc-rgb),.35);animation-delay:1.25s}
.wstats{list-style:none;margin:2px 0 6px;padding:0;color:var(--muted);font-size:14px;display:flex;flex-direction:column;gap:4px;animation-delay:1.45s}
.wstats li:first-child{color:var(--ink)}
.wgo{width:100%;padding:12px;font-size:16px;animation-delay:1.6s}
.sparks{position:absolute;left:50%;top:76px;width:0;height:0;pointer-events:none}
.sparks i{position:absolute;width:6px;height:6px;margin:-3px;border-radius:50%;background:var(--accent);box-shadow:0 0 8px var(--accent);opacity:0;animation:spark .9s calc(1.05s + var(--d)) ease-out forwards}
.sparks i:nth-child(3n){background:var(--pr);box-shadow:0 0 8px var(--pr)}
@keyframes spark{0%{opacity:1;transform:rotate(var(--a)) translateY(0) scale(1)}100%{opacity:0;transform:rotate(var(--a)) translateY(-90px) scale(.3)}}
@media (prefers-reduced-motion:reduce){.welcome *,.welcome{animation:none!important;transition:none!important}.whi,.wpep,.wstats,.wgo,.wmark .c1,.wmark .c2{opacity:1;transform:none}.wmark .hx{stroke-dashoffset:0}.sparks{display:none}}

/* Activity, check-ins, streaks */
.dots{display:inline-flex;gap:3px;vertical-align:middle;margin-left:4px}
.dots i{width:7px;height:7px;border-radius:50%;background:var(--line)}
.dots i.on{background:var(--accent);box-shadow:0 0 6px rgba(var(--acc-rgb),.7)}
.flags{margin:0;padding-left:18px;color:var(--ink);display:flex;flex-direction:column;gap:4px}
.flags li::marker{color:var(--down)}
.attn{border-color:rgba(255,107,94,.45)}
.attn.ok{border-color:var(--line)}
.attn .frow strong{font-weight:600}
.chev{color:var(--muted);font-size:20px;align-self:center}
.ckbox{display:flex;flex-direction:column;gap:8px;padding:12px;border:1px solid var(--line);border-radius:10px;background:var(--surface)}
.ckhead{display:flex;justify-content:space-between;align-items:center;gap:8px}
.ckbox .hint{margin:0}
.ckbox .row{align-items:flex-end}
.ckbox .row .fld{width:110px}
.okline{margin:0;color:var(--pr);font-weight:600}
.hint.err{color:var(--down)}
.vbadge{margin:4px 0 0 0;display:inline-block}
.gymres{border:1px solid var(--line);border-radius:10px;overflow:hidden}
.kv dd .dots{margin-left:6px}
.cmeta .dots{margin-right:4px}
.ckbox input{width:100%;min-width:0;padding:9px 10px;border:1px solid var(--line);border-radius:8px;background:var(--bg)}
.cmeta{max-width:52%;text-align:right}

/* Daily pop */
.dpop{position:fixed;left:50%;top:calc(70px + env(safe-area-inset-top,0px));z-index:45;display:flex;align-items:center;gap:12px;padding:12px 16px 12px 12px;width:max-content;max-width:calc(100% - 32px);background:var(--surface);border:1px solid var(--accent);border-radius:14px;box-shadow:0 0 24px rgba(var(--acc-rgb),.4);transform:translate(-50%,-20px) scale(.9);opacity:0;transition:transform .45s cubic-bezier(.2,.9,.3,1.4),opacity .3s}
.dpop.on{transform:translate(-50%,0) scale(1);opacity:1}
.dpop strong{font:800 17px var(--f-display)}
.dpop span{color:var(--muted);font-size:13px}
.dbadge{flex:none;width:46px;height:46px;border-radius:50%;display:grid;place-items:center;border:3px solid var(--accent);box-shadow:0 0 12px var(--accent),inset 0 0 8px rgba(var(--acc-rgb),.5)}
.dbadge span{font:800 20px var(--f-display);color:#fff;text-shadow:0 0 8px var(--accent)}
.dpop.on .dbadge{animation:dbump .6s .2s ease-out}
@keyframes dbump{40%{transform:scale(1.25) rotate(-8deg)}}
.dsparks{position:absolute;left:35px;top:50%;width:0;height:0;pointer-events:none}
.dsparks i{position:absolute;width:5px;height:5px;margin:-2.5px;border-radius:50%;background:var(--accent);box-shadow:0 0 6px var(--accent);opacity:0;--d:0ms}
.dsparks i:nth-child(2n){background:var(--pr);box-shadow:0 0 6px var(--pr)}
.dpop.on .dsparks i{animation:spark .8s .25s ease-out forwards}

/* Weekly streak celebration */
.streakfx{position:fixed;inset:0;z-index:50;display:grid;place-items:center;padding:24px 16px;background:radial-gradient(circle at 50% 36%,rgba(var(--acc-rgb),.3),transparent 55%),rgba(10,11,13,.97);opacity:0;transition:opacity .3s}
.streakfx.on{opacity:1}
.streakfx canvas{position:absolute;inset:0;width:100%;height:100%;pointer-events:none}
.sfx{position:relative;display:flex;flex-direction:column;align-items:center;gap:8px;text-align:center;max-width:360px;width:100%}
.ring{position:relative;width:170px;height:170px;display:grid;place-items:center;transform:scale(.4);opacity:0;transition:transform .6s cubic-bezier(.2,.9,.3,1.5),opacity .3s}
.streakfx.on .ring{transform:none;opacity:1;animation:ringpulse 1.8s 1.4s ease-in-out infinite}
@keyframes ringpulse{50%{transform:scale(1.05)}}
.ring svg{position:absolute;inset:0;transform:rotate(-90deg);filter:drop-shadow(0 0 12px rgba(var(--acc-rgb),.9))}
.ring circle{fill:none;stroke:var(--accent);stroke-width:7;stroke-linecap:round;stroke-dasharray:1;stroke-dashoffset:1;animation:draw .9s .2s ease-out forwards}
.num{font:800 72px/1 var(--f-display);color:#fff;text-shadow:0 0 18px var(--accent),0 0 36px var(--accent)}
.num.pop{animation:numpop .25s ease-out}
@keyframes numpop{0%{transform:scale(1.35)}100%{transform:scale(1)}}
.slabel{margin:0;font:600 13px var(--f-mono);letter-spacing:.3em;text-transform:uppercase;color:var(--pr);text-shadow:0 0 10px rgba(62,224,255,.6)}
.sfx h2{font:800 22px/1.25 var(--f-display);opacity:0;transform:translateY(8px);animation:rise .5s 1s ease-out forwards}
.sfx .hint,.sfx .btn{opacity:0;transform:translateY(8px);animation:rise .5s 1.2s ease-out forwards}
.sfx .btn{width:100%;padding:12px;font-size:16px;margin-top:8px}

/* Leaderboard */
.seg{display:flex;background:var(--bg);border:1px solid var(--line);border-radius:10px;padding:3px;gap:3px}
.seg button{flex:1;border:0;background:none;padding:8px;border-radius:8px;font-size:13px;font-weight:500;color:var(--muted);cursor:pointer}
.seg button[aria-selected="true"]{background:var(--soft);color:var(--accent);box-shadow:0 0 0 1px var(--accent)}
.board{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:6px}
.lrow{display:grid;grid-template-columns:36px 1fr auto;align-items:center;gap:10px;padding:10px 12px;border:1px solid var(--line);border-radius:10px;background:var(--bg)}
.lrow .rank{font:800 18px var(--f-display);color:var(--muted);text-align:center}
.lrow .lname{min-width:0;font-weight:600}
.lrow .lval{font-size:16px;white-space:nowrap}.lrow .lval small{color:var(--muted);font-size:11px}
.lrow.top .rank{color:#fff;width:30px;height:30px;line-height:30px;border-radius:50%;justify-self:center}
.lrow.r1{border-color:var(--accent);box-shadow:0 0 16px rgba(var(--acc-rgb),.3)}
.lrow.r1 .rank{background:var(--accent);box-shadow:0 0 12px var(--accent)}
.lrow.r2 .rank{background:var(--pr-soft);border:1px solid var(--pr)}
.lrow.r3 .rank{background:var(--soft);border:1px solid var(--muted)}
.lrow.me{outline:2px solid var(--pr);outline-offset:-1px}
#snd{color:var(--muted)}#snd[aria-pressed="true"]{color:var(--down)}

@media (prefers-reduced-motion:reduce){.streakfx *,.streakfx,.dpop,.dpop *{animation:none!important;transition:none!important}.ring{transform:none;opacity:1}.ring circle{stroke-dashoffset:0}.sfx h2,.sfx .hint,.sfx .btn{opacity:1;transform:none}.dpop.on{transform:translate(-50%,0)}}

.tabs{-webkit-mask-image:linear-gradient(to right,#000 88%,transparent);mask-image:linear-gradient(to right,#000 88%,transparent)}
.tab{padding:8px 10px 9px}
.sgweb{background:var(--soft)}.sgweb span:first-child{color:var(--accent);font-weight:600}
.sgnote{margin:0;padding:10px 12px;font-size:12px;color:var(--muted)}

/* Client colour themes (chosen by the trainer) */
:root[data-accent="blue"]{--accent:#2E9BFF;--acc-rgb:46,155,255;--accent-ink:#03101F;--pr:#FFC94D;--pr-soft:#3A2E10}
:root[data-accent="purple"]{--accent:#A65CFF;--acc-rgb:166,92,255;--accent-ink:#120621;--pr:#3EE0FF;--pr-soft:#10303A}
.mk{display:block;color:var(--accent)}
.brand .mk{width:34px;height:34px;filter:drop-shadow(0 0 6px rgba(var(--acc-rgb),.7))}
.login .hero .mk{width:96px;height:96px;filter:drop-shadow(0 0 18px rgba(var(--acc-rgb),.35))}
.themes{display:flex;gap:8px;flex-wrap:wrap}
.thm{display:flex;align-items:center;gap:8px;padding:8px 12px;border:1px solid var(--line);border-radius:999px;background:var(--surface);cursor:pointer;font-size:14px}
.thm i{width:16px;height:16px;border-radius:50%;background:var(--sw);box-shadow:0 0 8px var(--sw)}
.thm[aria-pressed="true"]{border-color:var(--sw);box-shadow:0 0 0 1px var(--sw)}
.avatar[data-sw]{border-color:var(--sw)!important;color:var(--sw)}
.srow.one{grid-template-columns:34px 1fr 34px}
.sets .addkg{font-size:13px;color:var(--muted);margin-top:2px}
.wbanner{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:14px 16px;border:1px solid rgba(var(--acc-rgb),.6);border-radius:12px;background:linear-gradient(90deg,rgba(var(--acc-rgb),.14),transparent);box-shadow:0 0 18px rgba(var(--acc-rgb),.15)}
.wbanner div{display:flex;flex-direction:column;gap:2px;min-width:0}
.wbanner strong{font:800 16px var(--f-display)}
.wbanner span{font-size:13px;color:var(--muted)}
.wbanner .btn{flex:none}
.ver{margin:28px 0 0;text-align:center;font:500 11px var(--f-mono);letter-spacing:.08em;color:var(--muted);opacity:.6}

/* Settings cog and panel */
.cog{color:var(--muted);transition:color .2s}
.cog:hover,.cog:focus-visible{color:var(--accent)}
.cog svg{display:block;transform:rotate(var(--rot,0deg));transition:transform .7s cubic-bezier(.34,1.56,.64,1),filter .3s}
.cog.pulse{color:var(--accent)}
.cog.pulse svg{animation:cogglow .9s ease-out}
@keyframes cogglow{0%{filter:drop-shadow(0 0 0 rgba(var(--acc-rgb),0))}35%{filter:drop-shadow(0 0 10px rgba(var(--acc-rgb),1)) drop-shadow(0 0 3px #fff)}100%{filter:drop-shadow(0 0 0 rgba(var(--acc-rgb),0))}}
.settingsp{animation:sheetup .35s cubic-bezier(.2,.9,.3,1)}
@keyframes sheetup{from{transform:translateY(40px);opacity:0}to{transform:none;opacity:1}}
.sset{display:flex;flex-direction:column;gap:10px;padding:14px;border:1px solid var(--line);border-radius:12px;background:var(--surface)}
.sset h3{margin:0;font:800 16px var(--f-display)}
.sset .ph{margin:0}
.sset .hint{margin:0}
.sset .btn{align-self:flex-start}
.sset .btn.danger{border:1px solid rgba(255,107,94,.5)}
.help{margin:0;padding-left:18px;display:flex;flex-direction:column;gap:6px;font-size:14px;color:var(--muted)}
.help strong{color:var(--ink)}
@media (prefers-reduced-motion:reduce){.cog svg,.cog.pulse svg,.settingsp{transition:none;animation:none}}
.who{gap:6px}

.updbar{position:fixed;left:12px;right:12px;bottom:calc(14px + env(safe-area-inset-bottom));z-index:200;max-width:560px;margin:0 auto;display:flex;align-items:center;justify-content:space-between;gap:12px;padding:12px 14px;border:1px solid rgba(var(--acc-rgb),.7);border-radius:12px;background:var(--bg,#121417);box-shadow:0 8px 30px rgba(0,0,0,.5),0 0 18px rgba(var(--acc-rgb),.25);font-size:14px}
.updbar .btn{flex:none}

/* tabs: sliding underline, smooth colour change, press feedback, content slide-in */
.tabs{position:relative}
.tab,.tab[aria-selected="true"]{border-bottom-color:transparent}
.tab{transition:color .25s ease,text-shadow .25s ease,transform .12s ease;-webkit-tap-highlight-color:transparent}
.tab:hover{color:var(--ink)}
.tab:active{transform:scale(.95)}
.tabind{position:absolute;left:0;bottom:0;height:3px;border-radius:3px 3px 0 0;background:var(--accent);box-shadow:0 0 12px rgba(var(--acc-rgb),.7),0 0 3px rgba(var(--acc-rgb),.9);pointer-events:none;will-change:transform,width;transition:transform .42s cubic-bezier(.34,1.32,.5,1),width .42s cubic-bezier(.34,1.32,.5,1)}
.tabpop{animation:tabPop .38s cubic-bezier(.34,1.5,.5,1)}
@keyframes tabPop{0%{transform:scale(.94)}60%{transform:scale(1.05)}100%{transform:scale(1)}}
.stack.tabin{animation:tabIn .36s cubic-bezier(.2,.8,.2,1)}
.stack.tabin>*{animation:tabRise .44s cubic-bezier(.2,.8,.2,1) backwards}
.stack.tabin>*:nth-child(2){animation-delay:.05s}
.stack.tabin>*:nth-child(3){animation-delay:.1s}
.stack.tabin>*:nth-child(n+4){animation-delay:.14s}
@keyframes tabIn{from{opacity:0;transform:translateX(calc(var(--dir,1) * 22px))}to{opacity:1;transform:none}}
@keyframes tabRise{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
@media (prefers-reduced-motion:reduce){.tabind{transition:none}.tabpop,.stack.tabin,.stack.tabin>*{animation:none}.tab:active{transform:none}}
.tabs.atend{-webkit-mask-image:none;mask-image:none}

/* leaderboard count-up */
.lrow.lin{animation:lrowIn .45s cubic-bezier(.2,.8,.2,1) backwards}
@keyframes lrowIn{from{opacity:0;transform:translateY(10px) scale(.98)}to{opacity:1;transform:none}}
.lval .cnt{display:inline-block;font-weight:700;min-width:1.2ch;text-align:right;font-variant-numeric:tabular-nums}
.cnt.cpop{animation:cntPop .4s cubic-bezier(.34,1.6,.5,1)}
@keyframes cntPop{0%{transform:scale(1)}45%{transform:scale(1.35);color:var(--accent);text-shadow:0 0 12px rgba(var(--acc-rgb),.8)}100%{transform:scale(1)}}
.lrow.r1.glow{animation:r1Glow 1.2s ease-out}
@keyframes r1Glow{0%{box-shadow:0 0 16px rgba(var(--acc-rgb),.3)}35%{box-shadow:0 0 34px rgba(var(--acc-rgb),.75)}100%{box-shadow:0 0 16px rgba(var(--acc-rgb),.3)}}
@media (prefers-reduced-motion:reduce){.lrow.lin,.cnt.cpop,.lrow.r1.glow{animation:none}}

/* graphs draw in, bars grow */
.cnt{font-weight:inherit;font-variant-numeric:tabular-nums}
.chart.draw circle{transform-box:fill-box;transform-origin:center;animation:dotIn .4s cubic-bezier(.34,1.6,.5,1) backwards}
@keyframes dotIn{from{opacity:0;transform:scale(0)}to{opacity:1;transform:scale(1)}}
.chart.draw path:not([stroke]){animation:areaIn .9s ease-out .6s backwards}
@keyframes areaIn{from{opacity:0}to{opacity:1}}
.chart.draw rect{transform-box:fill-box;transform-origin:50% 100%;animation:barUp .7s cubic-bezier(.34,1.3,.5,1) backwards}
@keyframes barUp{from{transform:scaleY(0)}to{transform:scaleY(1)}}
.chart.draw line[stroke-dasharray],.chart.draw text[style]{animation:areaIn .6s ease-out .9s backwards}
@media (prefers-reduced-motion:reduce){.chart.draw *{animation:none!important}}

/* client summary tiles + streak pill */
.tiles{display:grid;grid-template-columns:repeat(3,1fr);border:1px solid var(--line);border-radius:14px;background:linear-gradient(135deg,rgba(var(--acc-rgb),.08),transparent 60%),var(--surface);overflow:hidden}
.stile{display:flex;flex-direction:column;align-items:flex-start;gap:4px;min-width:0;padding:12px 12px 13px;border:0;border-left:1px solid var(--line);background:none;color:var(--ink);font:inherit;text-align:left;cursor:pointer;transition:background .2s}
.stile:first-child{border-left:0}
.stile:active{background:rgba(var(--acc-rgb),.08)}
.stl{font:500 10.5px var(--f-mono);text-transform:uppercase;letter-spacing:.07em;color:var(--muted);line-height:1.25}
.stv{display:flex;align-items:baseline;gap:3px;white-space:nowrap}
.stv b{font:800 24px/1.1 var(--f-display);font-variant-numeric:tabular-nums;text-shadow:0 0 18px rgba(var(--acc-rgb),.3)}
.stv small{font-size:12px;color:var(--muted)}
.sts{font-size:11.5px;color:var(--muted);line-height:1.3}
.sts.dn{color:var(--pr)}
.stile .mbar{width:100%;height:6px;margin-top:5px;display:block}
.stw{display:flex;align-items:center;gap:7px}
.wring{width:30px;height:30px;flex:none;transform:rotate(-90deg);overflow:visible}
.wring circle{fill:none;stroke-width:8}
.wr-bg{stroke:var(--soft)}
.wr-p{stroke:var(--accent);stroke-linecap:round;stroke-dasharray:100}
.wring.met{filter:drop-shadow(0 0 5px rgba(var(--acc-rgb),.75))}
.tiles .cnt.cpop{animation:cntPop .4s cubic-bezier(.34,1.6,.5,1)}
.spill{display:inline-flex;align-items:center;gap:6px;margin:8px 0 0;padding:4px 11px 4px 7px;border:1px solid var(--line);border-radius:999px;background:var(--surface);font-size:13px;color:var(--muted)}
.spill b{color:var(--ink)}
.spill.lit{border-color:rgba(var(--acc-rgb),.5);background:rgba(var(--acc-rgb),.08);color:var(--ink)}
.flame{width:18px;height:18px;flex:none;fill:var(--soft);stroke:var(--muted);stroke-width:1;transform-origin:50% 90%}
.flame .fcore{fill:var(--line);stroke:none}
.lit .flame{fill:var(--accent);stroke:none;filter:drop-shadow(0 0 5px rgba(var(--acc-rgb),.8));animation:flick 2.4s ease-in-out infinite}
.lit .flame .fcore{fill:#fff;opacity:.85}
@keyframes flick{0%,100%{transform:scale(1) rotate(0)}30%{transform:scale(1.06,.95) rotate(-3deg)}60%{transform:scale(.96,1.05) rotate(3deg)}}
@media (max-width:350px){.tiles{grid-template-columns:1fr 1fr}.stile.wk{grid-column:1/-1;border-left:0;border-top:1px solid var(--line)}}
@media (prefers-reduced-motion:reduce){.lit .flame{animation:none}}

/* pull to refresh */
html,body{overscroll-behavior-y:contain}
#ptr{position:fixed;left:50%;z-index:4;width:36px;height:36px;border-radius:50%;background:var(--surface);border:1px solid var(--line);box-shadow:0 4px 14px rgba(0,0,0,.4);display:grid;place-items:center;opacity:0;pointer-events:none;transform:translate(-50%,-44px)}
#ptr svg{width:18px;height:18px;fill:none;stroke:var(--muted);stroke-width:2.4;stroke-linecap:round;stroke-linejoin:round;transition:stroke .2s}
#ptr.ready svg,#ptr.spin svg{stroke:var(--accent);filter:drop-shadow(0 0 4px rgba(var(--acc-rgb),.7))}
#ptr.ready{border-color:rgba(var(--acc-rgb),.6)}
#ptr.spin svg{animation:ptrSpin .8s linear infinite}
@keyframes ptrSpin{to{transform:rotate(360deg)}}
/* personal bests */
.trophy{width:18px;height:18px;flex:none;fill:none;stroke:var(--accent);stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round;filter:drop-shadow(0 0 4px rgba(var(--acc-rgb),.6))}
.pbl{list-style:none;margin:0;padding:0;display:flex;flex-direction:column}
.pbrow{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:10px 0;border-top:1px solid var(--line)}
.pbrow:first-child{border-top:0}
.pbn{display:flex;align-items:center;gap:9px;min-width:0;font-weight:500}
.pbv{display:flex;flex-direction:column;align-items:flex-end;flex:none}
.pbv b{font-size:14px}.pbv small{font-size:11px;color:var(--muted)}
.pbfx .pbbig{width:110px;height:110px;border-radius:50%;display:grid;place-items:center;border:2px solid var(--accent);background:radial-gradient(circle,rgba(var(--acc-rgb),.25),transparent 70%);box-shadow:0 0 30px rgba(var(--acc-rgb),.5);transform:scale(.3) rotate(-25deg);opacity:0;transition:transform .7s cubic-bezier(.34,1.6,.5,1) .15s,opacity .3s .15s}
.pbfx.on .pbbig{transform:none;opacity:1;animation:ringpulse 1.8s 1.2s ease-in-out infinite}
.pbfx .pbbig .trophy{width:60px;height:60px;stroke-width:1.4}
.pbnew{list-style:none;margin:6px 0 0;padding:0;width:100%;display:flex;flex-direction:column;gap:6px;opacity:0;transform:translateY(8px);animation:rise .5s 1.1s ease-out forwards}
.pbnew li{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:10px 12px;border:1px solid rgba(var(--acc-rgb),.45);border-radius:10px;background:rgba(var(--acc-rgb),.07);text-align:left}
.pbnew span{display:flex;flex-direction:column;align-items:flex-end}
.pbnew b{font-size:15px;color:var(--ink)}.pbnew small{font-size:11px;color:var(--muted)}
.pbfx h2{font-size:30px}
/* barcode scanner */
.scanbtn{display:flex;align-items:center;justify-content:center;gap:8px;width:100%;padding:11px;border:1px dashed rgba(var(--acc-rgb),.6);border-radius:10px;background:rgba(var(--acc-rgb),.06);color:var(--ink);font:600 15px var(--f-body);cursor:pointer}
.scanbtn svg{width:22px;height:22px;fill:none;stroke:var(--accent);stroke-width:2;stroke-linecap:round}
.scanbtn:active{transform:scale(.98)}
.scanfx{position:fixed;inset:0;z-index:60;background:#000;opacity:0;transition:opacity .25s}
.scanfx.on{opacity:1}
.scanfx video{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
.scanbox{position:absolute;left:50%;top:42%;width:min(78vw,340px);height:min(40vw,170px);transform:translate(-50%,-50%);border-radius:14px;box-shadow:0 0 0 100vmax rgba(0,0,0,.55);border:2px solid rgba(255,255,255,.85);overflow:hidden}
.scanbox i{position:absolute;left:6%;right:6%;top:50%;height:2px;background:var(--accent);box-shadow:0 0 12px var(--accent),0 0 2px #fff;animation:laser 1.6s ease-in-out infinite alternate}
@keyframes laser{from{top:15%}to{top:85%}}
.scanfx.hit .scanbox{border-color:var(--accent);box-shadow:0 0 0 100vmax rgba(0,0,0,.55),0 0 24px var(--accent)}
.scanfx.hit .scanbox i{animation:none;opacity:0}
.scanfx.nocam .scanbox{display:none}
.scantop{position:absolute;left:0;right:0;top:0;padding:calc(env(safe-area-inset-top,0px) + 12px) 16px 12px;display:flex;align-items:center;justify-content:space-between;color:#fff;background:linear-gradient(rgba(0,0,0,.6),transparent)}
.scantop .icon{color:#fff;font-size:26px}
.scanbot{position:absolute;left:0;right:0;bottom:0;padding:16px 16px calc(env(safe-area-inset-bottom,0px) + 18px);display:flex;flex-direction:column;gap:10px;background:linear-gradient(transparent,rgba(0,0,0,.75) 30%)}
.scanmsg{margin:0;text-align:center;color:#fff;font-size:14px}
.scantype{display:flex;gap:8px}
.scantype input{flex:1;min-width:0;padding:10px 12px;border-radius:10px;border:1px solid rgba(255,255,255,.3);background:rgba(20,20,24,.85);color:#fff;font:16px var(--f-body)}
@media (prefers-reduced-motion:reduce){.scanbox i{animation:none}.pbfx .pbbig{transition:none;transform:none;opacity:1}.pbnew{animation:none;opacity:1;transform:none}}

/* trainer calendar */
.calchips{flex-wrap:wrap}
.calchips .chip{display:inline-flex;align-items:center;gap:6px}
.cal .calnav{display:flex;align-items:center;justify-content:space-between}
.cal .calnav strong{font:800 18px var(--f-display)}
.calsum{margin:2px 0 10px;text-align:center;font-size:12.5px;color:var(--muted)}
.cgrid{display:grid;grid-template-columns:repeat(7,1fr);gap:4px}
.cwd{text-align:center;font:500 11px var(--f-mono);color:var(--muted);padding:2px 0 4px}
.cday{position:relative;aspect-ratio:1/1.12;min-width:0;display:flex;flex-direction:column;align-items:center;justify-content:flex-start;gap:3px;padding:5px 2px 3px;border:1px solid var(--line);border-radius:9px;background:var(--bg);color:var(--ink);font:inherit;cursor:pointer;transition:transform .12s,border-color .2s,background .2s}
.cday.blank{border:0;background:none;cursor:default}
.cday:active{transform:scale(.94)}
.cday .cn{font:600 13px/1 var(--f-mono)}
.cday.fut{opacity:.45}
.cday.has{background:rgba(var(--acc-rgb),.09);border-color:rgba(var(--acc-rgb),.35)}
.cday.today .cn{color:var(--accent);text-shadow:0 0 8px rgba(var(--acc-rgb),.8)}
.cday.today{border-color:var(--accent)}
.cday.sel{outline:2px solid var(--pr);outline-offset:-2px}
.cm{display:flex;flex-wrap:wrap;justify-content:center;gap:2px;max-width:100%}
.cini{display:inline-grid;place-items:center;width:17px;height:17px;border-radius:50%;background:var(--c);color:#0b0c0e;font:700 8.5px/1 var(--f-body);font-style:normal;box-shadow:0 0 6px var(--c)}
.cmore{font:600 9px var(--f-mono);font-style:normal;color:var(--muted)}
.cdot{display:inline-block;width:9px;height:9px;border-radius:50%;background:var(--c);box-shadow:0 0 6px var(--c)}
.cday .cdot{width:12px;height:12px;margin-top:3px}
.cdetail{margin-top:14px;padding-top:12px;border-top:1px solid var(--line)}
.cdetail h3{margin:0 0 8px;font:700 15px var(--f-body)}
.clist{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:6px}
.crow{width:100%;display:flex;align-items:center;gap:10px;padding:10px 12px;border:1px solid var(--line);border-radius:10px;background:var(--bg);color:var(--ink);font:inherit;text-align:left;cursor:pointer}
.crow .cini{width:28px;height:28px;font-size:11px;flex:none}
.crow span:not(.bwgo){display:flex;flex-direction:column;min-width:0}
.crow small{color:var(--muted);font-size:12px}
@media (min-width:600px){.cini{width:20px;height:20px;font-size:9.5px}.cday .cn{font-size:14px}}
.bwgo{margin-left:auto;color:var(--muted);font-size:20px;line-height:1}

/* calendar animation */
.cgrid.calin .cday:not(.blank){animation:cdayIn .42s cubic-bezier(.2,.8,.2,1) backwards;animation-delay:calc(var(--i) * 14ms)}
.cgrid.calin.fromR .cday:not(.blank){animation-name:cdayInR}
.cgrid.calin.fromL .cday:not(.blank){animation-name:cdayInL}
@keyframes cdayIn{from{opacity:0;transform:translateY(10px) scale(.9)}to{opacity:1;transform:none}}
@keyframes cdayInR{from{opacity:0;transform:translateX(18px) scale(.94)}to{opacity:1;transform:none}}
@keyframes cdayInL{from{opacity:0;transform:translateX(-18px) scale(.94)}to{opacity:1;transform:none}}
.cgrid.calin .cday.has .cm>i{animation:dotIn .4s cubic-bezier(.34,1.6,.5,1) backwards;animation-delay:calc(var(--i) * 14ms + .3s)}
.calnav .cmin{display:inline-block;animation:tabRise .4s cubic-bezier(.2,.8,.2,1)}
.cday.sel{animation:selPop .32s cubic-bezier(.34,1.6,.5,1)}
@keyframes selPop{0%{transform:scale(.9)}60%{transform:scale(1.06)}100%{transform:none}}
.cgrid.calin .cday.sel{animation:cdayIn .42s cubic-bezier(.2,.8,.2,1) backwards;animation-delay:calc(var(--i) * 14ms)}
.cdetail.din{animation:tabRise .35s cubic-bezier(.2,.8,.2,1)}
.cdetail.din .clist li{animation:tabRise .4s cubic-bezier(.2,.8,.2,1) backwards}
.cdetail.din .clist li:nth-child(2){animation-delay:.06s}.cdetail.din .clist li:nth-child(3){animation-delay:.12s}.cdetail.din .clist li:nth-child(n+4){animation-delay:.16s}
.cdot.big{width:14px;height:14px;flex:none;margin:0 7px}
.calhint{text-align:center;margin:10px 0 0}
.sess.flash{animation:sessFlash 1.4s ease-out}
@keyframes sessFlash{0%,30%{box-shadow:0 0 0 2px var(--accent),0 0 22px rgba(var(--acc-rgb),.5)}100%{box-shadow:none}}
@media (prefers-reduced-motion:reduce){.cgrid.calin .cday,.cgrid.calin .cm>i,.cday.sel,.cdetail.din,.cdetail.din li,.sess.flash,.calnav .cmin{animation:none!important}}
.cgrid.one .cday.has{background:color-mix(in srgb,var(--c) 13%,var(--bg));border-color:color-mix(in srgb,var(--c) 50%,transparent)}

/* folding calendar */
.cwds{display:grid;grid-template-columns:repeat(7,1fr);gap:4px}
.calfold{overflow:hidden;position:relative;will-change:height}
.calfold .cgrid{will-change:transform}
.calgrab{display:flex;flex-direction:column;align-items:center;gap:4px;width:100%;margin:6px 0 0;padding:6px 0 2px;border:0;background:none;color:var(--muted);font:500 11.5px var(--f-body);cursor:grab;touch-action:none;-webkit-tap-highlight-color:transparent}
.calgrab i{width:42px;height:5px;border-radius:999px;background:var(--line);position:relative;transition:background .2s}
.calgrab i::after{content:"";position:absolute;left:50%;top:15px;width:8px;height:8px;border-right:2px solid var(--muted);border-bottom:2px solid var(--muted);transform:translate(-50%,-50%) rotate(calc(45deg + var(--p,0) * 180deg));transition:transform .3s}
.calgrab span{margin-top:14px}
.calgrab:active i,.calgrab.open i{background:rgba(var(--acc-rgb),.6)}
.cal.folding .calsum{margin-bottom:6px}
.cal.folding:not(.isopen) .calhint{display:none}

/* exercises & PBs list */
.exlist{list-style:none;margin:0;padding:0;display:flex;flex-direction:column}
.exi{border-top:1px solid var(--line)}
.exi:first-child{border-top:0}
.exrow{width:100%;display:grid;grid-template-columns:minmax(0,1fr) auto auto 12px;align-items:center;gap:10px;padding:11px 2px;border:0;background:none;color:var(--ink);font:inherit;text-align:left;cursor:pointer}
.exrow:active{background:rgba(var(--acc-rgb),.05)}
.exn{display:flex;flex-direction:column;min-width:0}
.exn strong{font-weight:600;font-size:15px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.exn small .tag{font-size:9px;padding:0 4px;vertical-align:1px}
.exn small{font-size:11.5px;color:var(--muted)}
.exs{display:flex;flex-direction:column;align-items:center;gap:1px;width:64px}
.spark{width:64px;height:20px;flex:none;overflow:visible}
.spark polyline{fill:none;stroke:var(--accent);stroke-width:1.8;stroke-linejoin:round;stroke-linecap:round;filter:drop-shadow(0 0 3px rgba(var(--acc-rgb),.6))}
.spark circle{fill:var(--accent)}
.extr{font-size:10.5px;color:var(--muted);white-space:nowrap}
.extr.up{color:var(--pr)}
.expb{display:flex;flex-direction:column;align-items:flex-end;gap:1px;min-width:64px}
.expb b{font-size:13px;white-space:nowrap}
.expb .trophy{width:14px;height:14px}
.exchev{color:var(--muted);font-size:20px;transition:transform .3s;justify-self:end}
.exi.on .exchev{transform:rotate(90deg);color:var(--accent)}
.exi.on .exrow{padding-bottom:6px}
.exdet{padding:0 0 14px;animation:tabRise .35s cubic-bezier(.2,.8,.2,1)}
.foldbox{overflow:hidden;position:relative}
.foldbox.shut::after{content:"";position:absolute;left:0;right:0;bottom:0;height:26px;background:linear-gradient(transparent,var(--surface));pointer-events:none}
.foldgrab{margin-top:2px}
@media (prefers-reduced-motion:reduce){.exdet{animation:none}}

/* goal type */
.tag.focus{margin-left:6px;background:var(--soft);color:var(--ink)}
.tag.focus.strength{color:var(--pr);background:var(--pr-soft)}
.tag.focus.weight{color:var(--accent);background:rgba(var(--acc-rgb),.12)}
.stv small .trophy{width:18px;height:18px;vertical-align:-3px}

/* training style options in settings */
.focusopts{display:flex;flex-direction:column;gap:8px}
.fopt{display:flex;align-items:flex-start;gap:12px;width:100%;padding:12px 14px;border:1px solid var(--line);border-radius:12px;background:var(--bg);color:var(--ink);font:inherit;text-align:left;cursor:pointer;transition:border-color .2s,background .2s,transform .12s}
.fopt:active{transform:scale(.98)}
.fopt i{flex:none;width:20px;height:20px;margin-top:2px;border-radius:50%;border:2px solid var(--muted);position:relative;transition:border-color .2s}
.fopt[aria-pressed="true"]{border-color:var(--accent);background:rgba(var(--acc-rgb),.08);box-shadow:0 0 14px rgba(var(--acc-rgb),.2)}
.fopt[aria-pressed="true"] i{border-color:var(--accent)}
.fopt[aria-pressed="true"] i::after{content:"";position:absolute;inset:3px;border-radius:50%;background:var(--accent);box-shadow:0 0 8px var(--accent);animation:dotIn .3s cubic-bezier(.34,1.6,.5,1)}
.fopt span{display:flex;flex-direction:column;gap:2px}
.fopt small{color:var(--muted);font-size:12.5px;line-height:1.35}

/* Clients / My training switch */
.modesw{position:relative;display:grid;grid-template-columns:1fr 1fr;margin:0 0 16px;padding:4px;border:1px solid var(--line);border-radius:999px;background:var(--surface)}
.modesw button{position:relative;z-index:1;padding:9px 10px;border:0;border-radius:999px;background:none;color:var(--muted);font:600 14px var(--f-body);cursor:pointer;transition:color .25s}
.modesw button[aria-selected="true"]{color:var(--accent-ink,#1A0611)}
.modesw i{position:absolute;top:4px;bottom:4px;left:4px;width:calc(50% - 4px);border-radius:999px;background:var(--accent);box-shadow:0 0 14px rgba(var(--acc-rgb),.5);transition:transform .4s cubic-bezier(.34,1.3,.5,1)}
@media (prefers-reduced-motion:reduce){.modesw i{transition:none}}

/* weigh-in button + days since */
.wbtn.due{animation:wPulse 2.2s ease-in-out infinite}
@keyframes wPulse{0%,100%{box-shadow:0 0 10px rgba(var(--acc-rgb),.45)}50%{box-shadow:0 0 22px rgba(var(--acc-rgb),.95)}}
.wsince{display:inline-flex;align-self:flex-start;width:fit-content;align-items:center;gap:4px;margin:-4px 0 10px;padding:3px 10px;border-radius:999px;font-size:12.5px;color:var(--muted);background:var(--soft)}
.wsince b{color:var(--ink);font-weight:700}
.wsince.fresh{color:var(--pr);background:var(--pr-soft)}
.wsince.due{color:#FFC23E;background:rgba(255,194,62,.12)}
.wsince.due b{color:#FFC23E}
@media (prefers-reduced-motion:reduce){.wbtn.due{animation:none}}

/* collapsible sessions */
.sess.fold{padding:0;gap:0}
.shead{display:flex;align-items:center;justify-content:space-between;gap:10px;width:100%;padding:13px 16px;border:0;background:none;color:var(--ink);font:inherit;text-align:left;cursor:pointer}
.shead h3{margin:0}
.shead p{margin:2px 0 0;font-size:12.5px}
.shead:active{background:rgba(var(--acc-rgb),.05)}
.sess.open .exchev{transform:rotate(90deg);color:var(--accent)}
.sbody{display:grid;grid-template-rows:0fr;transition:grid-template-rows .38s cubic-bezier(.2,.8,.2,1)}
.sess.open .sbody{grid-template-rows:1fr}
.sbin{overflow:hidden;min-height:0;display:flex;flex-direction:column;gap:10px;padding:0 16px}
.sess.open .sbin{padding-bottom:14px}
.sbin>*{opacity:0;transform:translateY(-4px);transition:opacity .25s,transform .3s}
.sess.open .sbin>*{opacity:1;transform:none;transition-delay:.08s}
.sbtop{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.sbtop .sp{flex:1}
@media (prefers-reduced-motion:reduce){.sbody,.sbin>*{transition:none}}
.shead>span:first-child{display:flex;flex-direction:column;align-items:flex-start;min-width:0;text-align:left}
.shead h3{font:700 16px/1.3 var(--f-body);text-transform:none;letter-spacing:0;color:var(--ink)}
.shead p{font:500 12.5px var(--f-mono);text-transform:none;letter-spacing:0;color:var(--muted)}
.shead .exchev{font-size:22px;flex:none}

/* backup */
.bkline{margin:0 0 10px;font-size:13px;color:var(--pr)}
.bkline.due{color:#FFC23E}
.bknudge{border-color:rgba(255,194,62,.55);background:linear-gradient(90deg,rgba(255,194,62,.12),transparent)}

/* goal journey */
.jcta{display:flex;align-items:center;gap:12px;width:100%;margin:0 0 12px;padding:12px 14px;border:1px dashed rgba(var(--acc-rgb),.6);border-radius:12px;background:rgba(var(--acc-rgb),.06);color:var(--ink);font:inherit;text-align:left;cursor:pointer}
.jcta svg{width:26px;height:26px;flex:none;fill:none;stroke:var(--accent);stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.jcta span:not(.bwgo){display:flex;flex-direction:column;gap:2px;min-width:0}.jcta small{color:var(--muted);font-size:12.5px}
.journey{margin:0 0 14px;padding:14px 14px 12px;border:1px solid var(--line);border-radius:14px;background:linear-gradient(135deg,rgba(var(--acc-rgb),.10),transparent 60%),var(--bg)}
.journey.done{border-color:var(--accent);box-shadow:0 0 20px rgba(var(--acc-rgb),.3)}
.jhead{display:flex;justify-content:space-between;align-items:center;margin-bottom:14px}
.jhead strong{font:800 15px var(--f-display)}
.jtrack{position:relative;height:58px;margin:0 16px}
.jrail{position:absolute;left:0;right:0;top:34px;height:8px;border-radius:999px;background:var(--soft);overflow:hidden}
.jfill{position:absolute;inset:0 auto 0 0;width:calc(var(--p) * 100%);border-radius:999px;background:linear-gradient(90deg,rgba(var(--acc-rgb),.5),var(--accent));box-shadow:0 0 12px rgba(var(--acc-rgb),.8);transition:width 1.4s cubic-bezier(.25,.9,.3,1)}
.jm{position:absolute;top:31px;left:calc(var(--at) * 100%);width:14px;height:14px;margin-left:-7px;border-radius:50%;background:var(--surface);border:2px solid var(--line);transition:all .3s}
.jm em{position:absolute;top:17px;left:50%;transform:translateX(-50%);font:500 9.5px var(--f-mono);font-style:normal;color:var(--muted)}
.jm.on{background:var(--accent);border-color:var(--accent);box-shadow:0 0 8px var(--accent)}
.jend{position:absolute;top:24px;width:28px;height:28px;margin-left:-14px;display:grid;place-items:center;border-radius:50%;background:var(--surface);border:2px solid var(--line)}
.jend.s{left:0}.jend.g{left:100%;border-color:var(--accent)}
.jend svg{width:15px;height:15px;fill:none;stroke:var(--muted);stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.jend.g .trophy{stroke:var(--accent);width:16px;height:16px}
.journey.done .jend.g{background:var(--accent);box-shadow:0 0 16px var(--accent)}.journey.done .jend.g .trophy{stroke:#1A0611;filter:none}
.jme{position:absolute;top:0;left:calc(var(--p) * 100%);transform:translateX(-50%);transition:left 1.4s cubic-bezier(.25,.9,.3,1);display:flex;flex-direction:column;align-items:center}
.jme b{padding:2px 8px;border-radius:8px;background:var(--accent);color:#1A0611;font:800 13px var(--f-mono);box-shadow:0 0 12px rgba(var(--acc-rgb),.7);white-space:nowrap}
.jme::after{content:"";width:16px;height:16px;margin-top:6px;border-radius:50%;background:#fff;border:3px solid var(--accent);box-shadow:0 0 12px var(--accent);animation:jpulse 2s ease-in-out infinite}
@keyframes jpulse{0%,100%{box-shadow:0 0 6px var(--accent)}50%{box-shadow:0 0 18px var(--accent)}}
.jlabels{display:flex;justify-content:space-between;margin-top:6px}
.jlabels span{display:flex;flex-direction:column}.jlabels .r{align-items:flex-end;text-align:right}
.jlabels small{font-size:11px;color:var(--muted)}.jlabels b{font-size:15px}
.jstat{margin:10px 0 0;text-align:center;font-size:13px;color:var(--muted)}.jstat b{color:var(--ink)}
.journey.jin .jm.on{animation:dotIn .4s cubic-bezier(.34,1.6,.5,1) backwards;animation-delay:calc(var(--at) * 1.3s)}
@media (prefers-reduced-motion:reduce){.jfill,.jme{transition:none}.jme::after,.journey.jin .jm.on{animation:none}}

/* goal & plan graph */
.gplan{margin:0 0 14px;padding:14px 14px 10px;border:1px solid var(--line);border-radius:14px;background:var(--bg)}
.gplan.done{border-color:var(--accent);box-shadow:0 0 20px rgba(var(--acc-rgb),.3)}
.gph{display:flex;align-items:center;gap:12px}
.gph span{display:flex;flex-direction:column;flex:1;min-width:0}
.gph strong{font:800 16px var(--f-display)}
.gph small{font-size:12.5px;color:var(--muted)}
.tgt{width:34px;height:34px;flex:none;fill:none;stroke:var(--accent);stroke-width:2;filter:drop-shadow(0 0 5px rgba(var(--acc-rgb),.6))}
.jcta .tgt{width:30px;height:30px}
.gsvg{margin-top:6px;overflow:visible}
.gsvg .gbase{stroke:var(--line);stroke-width:1.5}
.gsvg .gline{stroke:var(--pr);stroke-width:1;stroke-dasharray:3 5;opacity:.6}
.gsvg .gfut{fill:none;stroke:var(--accent);stroke-width:2.5;stroke-dasharray:7 7;stroke-linecap:round;opacity:.9;animation:gFut .9s ease-out 1.1s backwards}
.gsvg .garea{animation:gFut 1s ease-out 1.2s backwards}
@keyframes gFut{from{opacity:0}to{opacity:.9}}
.gsvg .gdrop{stroke:var(--accent);stroke-width:1;stroke-dasharray:2 4;opacity:.5}
.gsvg .gdot{fill:#fff;stroke:var(--accent);stroke-width:3;filter:drop-shadow(0 0 6px var(--accent))}
.gsvg .gnow rect{fill:var(--accent)}.gsvg .gnow text{fill:#1A0611;font:700 11.5px var(--f-mono)}
.gsvg .ggoal rect{fill:var(--surface);stroke:var(--pr);stroke-width:1}.gsvg .ggoal text{fill:var(--pr);font:700 11.5px var(--f-mono)}
.gsvg .gend circle{fill:var(--surface);stroke:var(--accent);stroke-width:2}
.gplan.done .gsvg .gend circle{fill:var(--accent)}.gplan.done .gsvg .gend .trophy{stroke:#1A0611;filter:none}
.gsvg .gend .trophy{stroke:var(--accent)}
.gsvg .gnowt{fill:var(--ink)!important}
.gsvg .gnow,.gsvg .ggoal,.gsvg .gend{animation:gPop .45s cubic-bezier(.34,1.6,.5,1) backwards}
.gsvg .gnow{animation-delay:1s}.gsvg .ggoal,.gsvg .gend{animation-delay:1.7s}
.gsvg .gend{transform-box:fill-box;transform-origin:center}
@keyframes gPop{from{opacity:0}to{opacity:1}}
.gfoot{display:flex;justify-content:space-between;align-items:center;gap:8px;margin-top:6px;font-size:13px;color:var(--muted)}
.gfoot b{color:var(--ink);font-size:15px}
.gchip{padding:3px 10px;border-radius:999px;font-size:12px;background:var(--soft);color:var(--muted)}
.gchip.ok{background:var(--pr-soft);color:var(--pr)}.gchip.warn{background:rgba(255,194,62,.12);color:#FFC23E}
@media (prefers-reduced-motion:reduce){.gsvg *{animation:none!important}}

/* v39 logo: Michroma emPOWER + filled mark */
.mk .ch{stroke:var(--bg)}
.wmk{font-family:Michroma,"Arial Narrow",sans-serif;font-weight:400;letter-spacing:.12em;color:var(--ink);white-space:nowrap}
.wmk i{font-style:normal;color:var(--muted)}
.brand .wmk{font-size:15px;letter-spacing:.08em}
.brand .mk{width:32px;height:32px}
.login .hero .wm.wmk{font:400 30px/1.1 Michroma,"Arial Narrow",sans-serif;letter-spacing:.1em}

/* v42 appointments */
.aico{width:15px;height:15px;flex:none;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;vertical-align:-2px;margin-right:6px}
.appts .clist,.nextappt .clist,.cdetail .clist{border:0;background:none;gap:6px}
.adate{flex:none;display:flex;flex-direction:column;align-items:center;justify-content:center;width:40px;height:42px;border-radius:9px;background:rgba(var(--acc-rgb),.12);border:1px solid rgba(var(--acc-rgb),.4);font-style:normal;line-height:1}
.adate b{font:700 17px/1 var(--f-mono);color:var(--accent)}
.adate small{font:500 10px/1.2 var(--f-mono);text-transform:uppercase;letter-spacing:.06em;color:var(--muted)}
div.crow{cursor:default}
.crow>span:not(.bwgo){flex:1}
.acal{margin-left:auto;color:var(--accent)}
.acal .aico{width:20px;height:20px;margin:0}
.nextappt{border-color:rgba(var(--acc-rgb),.45);background:linear-gradient(135deg,rgba(var(--acc-rgb),.12),transparent 65%),var(--surface)}
.nextappt .eyebrow{margin:0;color:var(--accent)}
.nabig{display:flex;gap:14px;align-items:center}
.nabig .adate{width:56px;height:60px;border-radius:12px}
.nabig .adate b{font-size:24px}
.nabig h2{margin:0 0 4px;font-size:20px;display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.nabig p{margin:2px 0 0;color:var(--muted);font-size:14px}
.nextappt>.btn{align-self:flex-start;display:inline-flex;align-items:center}
.alsob{margin:4px 0 -6px}
.warnline{margin:0;padding:8px 12px;border-radius:9px;background:rgba(255,176,32,.12);border:1px solid rgba(255,176,32,.45);color:#FFC14D;font-size:13px}
#aclash:empty{display:none}
.apwho{margin:0;display:flex;align-items:center;gap:10px;font-weight:600}
.apwho .cini{width:28px;height:28px;font-size:11px}
.fld select{width:100%;padding:11px 12px;border:1px solid var(--line);border-radius:9px;background:var(--bg);color:var(--ink);font:inherit}
.capt{display:inline-block;box-sizing:border-box;width:12px;height:12px;margin-top:3px;border-radius:50%;border:2px solid var(--accent);box-shadow:0 0 6px rgba(var(--acc-rgb),.7);font-style:normal;align-self:center}
.cgrid.one .capt{border-color:var(--c);box-shadow:0 0 6px var(--c)}
.cday.appt.fut{border-color:rgba(var(--acc-rgb),.45)}
/* v43: upcoming appointment days glow and breathe so they stand apart from trained days */
.cday.appt{--ag:rgba(var(--acc-rgb),.75)}
.cgrid.one .cday.appt{--ag:color-mix(in srgb,var(--c) 75%,transparent)}
.cday.appt::after{content:"";position:absolute;inset:-1px;border-radius:inherit;border:2px solid var(--ag);pointer-events:none;opacity:.55}
.cday.appt.upc::after{animation:apGlow 2.2s ease-in-out infinite}
.cday.appt.upc .capt{animation:apRing 2.2s ease-in-out infinite}
.cgrid.one .capt{border-color:var(--c);box-shadow:0 0 6px var(--c)}
@keyframes apGlow{0%,100%{opacity:.4;box-shadow:inset 0 0 2px 0 var(--ag)}50%{opacity:1;box-shadow:inset 0 0 18px 3px var(--ag),inset 0 0 0 1px var(--ag)}}
@keyframes apRing{0%,100%{transform:scale(.85);opacity:.7}50%{transform:scale(1.15);opacity:1}}
.calkey{margin:10px 0 0;display:flex;justify-content:center;gap:16px;font-size:12px;color:var(--muted)}
.calkey span{display:inline-flex;align-items:center;gap:6px}
.calkey .cdot,.calkey .capt{width:10px;height:10px;margin:0}
@media (prefers-reduced-motion:reduce){.cday.appt.upc::after,.cday.appt.upc .capt{animation:none}.cday.appt.upc::after{opacity:1;box-shadow:inset 0 0 10px var(--ag)}}
.cday.appt.fut{opacity:1}.cday.appt.fut .cn{color:var(--ink)}
/* v44: appointment reminder bar at the top of the client's home screen */
.apbar{width:100%;display:flex;align-items:center;gap:10px;margin:0 0 12px;padding:10px 14px;border:1px solid rgba(var(--acc-rgb),.45);border-radius:12px;background:linear-gradient(90deg,rgba(var(--acc-rgb),.16),rgba(var(--acc-rgb),.04)),var(--surface);color:var(--ink);font:inherit;font-size:14px;text-align:left;cursor:pointer;-webkit-tap-highlight-color:transparent}
.apbar span:not(.bwgo){flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:var(--muted)}
.apbar strong{color:var(--ink);font-weight:600}
.apbar.now{border-color:var(--accent);box-shadow:0 0 14px rgba(var(--acc-rgb),.35)}
.apulse{flex:none;position:relative;width:10px;height:10px;border-radius:50%;background:var(--accent);font-style:normal}
.apulse::after{content:"";position:absolute;inset:0;border-radius:50%;background:var(--accent);animation:apPing 1.8s ease-out infinite}
@keyframes apPing{0%{transform:scale(1);opacity:.7}80%,100%{transform:scale(2.8);opacity:0}}
.apbar:active{transform:scale(.99)}
.cday.flash{animation:cdayFlash 1.2s ease-out}
@keyframes cdayFlash{0%,40%{box-shadow:inset 0 0 14px 3px var(--accent)}100%{box-shadow:inset 0 0 0 0 transparent}}
@media (prefers-reduced-motion:reduce){.apulse::after,.cday.flash{animation:none}}
.cdetail .alsob{margin:0 0 6px}.cdetail .clist+.alsob{margin-top:12px}
/* v45: trainer home — Add client first, then the month calendar; backup lives in Settings */
.addtop{display:flex;width:100%;justify-content:center;padding:13px 16px;font-size:16px;margin:0 0 14px}
.homecal{display:flex;flex-direction:column;gap:10px;margin:0 0 14px}
.homecal .calchips{flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none;padding-bottom:2px}
.homecal .calchips::-webkit-scrollbar{display:none}
.homecal .calchips .chip{flex:none}
.cog{position:relative}
.cog.due::after{content:"";position:absolute;top:5px;right:5px;width:8px;height:8px;border-radius:50%;background:var(--accent);box-shadow:0 0 6px var(--accent)}
.frow.ro{cursor:default}
/* v50 calendar sync */
.calbtns{display:flex;align-items:center;gap:14px;flex-wrap:wrap}
.calbtns .btn{display:inline-flex;align-items:center}
.calok{display:flex;align-items:center;flex-wrap:wrap;gap:4px 8px;font-size:14px}
.calok .linkbtn{font-weight:400;font-size:13px}
/* v53: sign-in logo "charge" — each chevron draws itself in, holds, fades; the glow is a pre-blurred layer whose opacity pulses (smooth on phones) */
.login .hero .mk{overflow:visible;filter:none}
.login .hero .mk .mkglow{fill:currentColor;filter:blur(10px);opacity:.35;animation:mkGlowPulse 3s ease-in-out infinite}
.login .hero .mk .ch{stroke-dasharray:50;animation:chevCharge 3s cubic-bezier(.45,0,.2,1) infinite}
.login .hero .mk .c2{animation-delay:.3s}
@keyframes chevCharge{0%{stroke-dashoffset:50;stroke-opacity:1}40%{stroke-dashoffset:0}75%{stroke-dashoffset:0;stroke-opacity:1}95%,100%{stroke-dashoffset:0;stroke-opacity:0}}
@keyframes mkGlowPulse{0%,100%{opacity:.2}45%{opacity:.65}}
@media (prefers-reduced-motion:reduce){.login .hero .mk .ch,.login .hero .mk .mkglow{animation:none}}
/* v55: calorie deficit line */
.defline{margin:0;padding:10px 12px;border-radius:10px;background:rgba(var(--acc-rgb),.08);border:1px solid rgba(var(--acc-rgb),.3);font-size:14px;line-height:1.45}
.defline b{color:var(--ink)}
/* v56: maintenance calorie estimate */
.ckbox.calc{display:flex;flex-direction:column;gap:12px}
.estline{margin:0;padding:10px 12px;border-radius:10px;background:rgba(var(--acc-rgb),.08);border:1px solid rgba(var(--acc-rgb),.3);font-size:14px}
.estline b{color:var(--ink)}
.estline span{display:block;font-size:12px;color:var(--muted);margin-top:2px}
/* v57: tappable calorie chart and detail sheet */
.chartbtn{display:block;width:100%;padding:0;border:0;background:none;color:inherit;font:inherit;text-align:left;cursor:pointer;-webkit-tap-highlight-color:transparent}
.chartbtn:active{opacity:.85}
.chartmore{display:block;text-align:right;font-size:12.5px;color:var(--accent);margin-top:2px}
.calkey2{display:flex;flex-wrap:wrap;gap:6px 14px;margin:-4px 0 0}
.calkey2 span{display:inline-flex;align-items:center;gap:6px}
.lk{display:inline-block;width:16px;height:0;border-top:2px dashed var(--pr)}
.lk.m{border-top:2px dotted var(--muted)}
.lk.o{width:10px;height:10px;border:0;border-radius:2px;background:#FFB020}
.macros{margin-top:-4px}
.cdlist{border:0;background:none;gap:6px}
.cdrow{width:100%;display:flex;align-items:center;gap:10px;padding:10px 12px;border:1px solid var(--line);border-radius:10px;background:var(--bg);color:var(--ink);font:inherit;text-align:left;cursor:pointer}
.cdrow>span:first-child{flex:1;display:flex;flex-direction:column;min-width:0}
.cdrow small{color:var(--muted);font-size:12px}
.cdk{display:flex;flex-direction:column;align-items:flex-end;font-variant-numeric:tabular-nums}
.cdk b{font-size:15px}
.cdk small.over{color:#FFB020}.cdk small.under{color:var(--muted)}
.calbig{width:100%;align-self:stretch}.calbig .chart{width:100%;height:auto}
/* v58: calorie chart scale and value labels fade in after the bars rise */
.chart.draw text:not([style]),.chart.draw line:not([stroke-dasharray]){animation:areaIn .5s ease-out backwards}
.chart.draw rect+text{animation:areaIn .4s ease-out 1s backwards}
/* v59: calorie detail — summary cards, macro bars, day bars */
.cstats{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
.cst{display:flex;flex-direction:column;gap:2px;padding:12px;border:1px solid var(--line);border-radius:12px;background:var(--bg)}
.cst span{font:500 10.5px var(--f-mono);letter-spacing:.08em;text-transform:uppercase;color:var(--muted)}
.cst b{font-size:22px;line-height:1.15;font-variant-numeric:tabular-nums}
.cst b small{font-size:12px;font-weight:500;color:var(--muted)}
.cst em{font-style:normal;font-size:12px;color:var(--muted)}
.cst.hero{border-color:rgba(var(--acc-rgb),.5);background:linear-gradient(135deg,rgba(var(--acc-rgb),.16),rgba(var(--acc-rgb),.03))}
.cst.hero b{color:var(--accent)}
.cst.hero.neg{border-color:rgba(255,176,32,.5);background:rgba(255,176,32,.08)}.cst.hero.neg b{color:#FFC14D}
.macs{display:flex;flex-direction:column;gap:10px;padding:12px;border:1px solid var(--line);border-radius:12px;background:var(--bg)}
.mac{display:grid;grid-template-columns:62px 1fr auto;grid-template-rows:auto auto;column-gap:10px;align-items:center}
.mac .mn{font-size:13px;font-weight:600}
.mac .mv{font-size:13px;color:var(--muted);text-align:right;font-variant-numeric:tabular-nums}.mac .mv b{color:var(--ink);font-size:15px}
.mac .ms{grid-column:2/4;font-size:11px;color:var(--muted)}
.mbar2{position:relative;height:8px;border-radius:999px;background:var(--soft);overflow:visible}
.mbar2 i{position:absolute;left:0;top:0;bottom:0;border-radius:999px;background:var(--accent)}
.mac.carbs .mbar2 i{background:#6FA8FF}.mac.fat .mbar2 i{background:#FFB020}
.mbar2 u{position:absolute;top:-3px;bottom:-3px;width:2px;margin-left:-1px;background:var(--ink);opacity:.6;border-radius:2px}
.cdrow{flex-wrap:wrap;row-gap:6px}
.cdbar{flex-basis:100%;height:4px;border-radius:999px;background:var(--soft);overflow:hidden}
.cdbar i{display:block;height:100%;border-radius:999px;background:var(--accent);opacity:.8}.cdbar i.over{background:#FFB020}
/* v60: location help in the gym check-in */
.lochelp{display:flex;flex-direction:column;gap:8px;padding:12px;border-radius:10px;border:1px solid rgba(255,176,32,.45);background:rgba(255,176,32,.08)}
.lochelp .lhd{margin:0;font-weight:600;color:#FFC14D;font-size:14px}
.lochelp ol{margin:0;padding-left:20px;display:flex;flex-direction:column;gap:6px;font-size:14px;line-height:1.45;color:var(--ink)}
.lochelp .hint{margin:0}
.lochelp .btn{align-self:flex-start}
/* v61: date box no longer overlaps its neighbour on iPhone; one-tap check-in */
.grid2{grid-template-columns:repeat(2,minmax(0,1fr))}
.fld input[type=date],.fld input[type=time]{-webkit-appearance:none;appearance:none;display:block;box-sizing:border-box;width:100%;max-width:100%;min-width:0;min-height:40px;line-height:1.25;text-align:left}
.fld input[type=date]::-webkit-date-and-time-value,.fld input[type=time]::-webkit-date-and-time-value{text-align:left;margin:0}
.ckbtn.done{border-color:rgba(var(--acc-rgb),.5);color:var(--accent)}
.infosheet .sb{padding-bottom:24px}
/* v62: smooth colour change when the app switches theme */
::view-transition-old(root),::view-transition-new(root){animation-duration:.7s;animation-timing-function:ease-in-out}
/* v63: hide button on the "new address" bar */
.updx{flex:none;background:none;border:0;color:var(--muted);font-size:22px;line-height:1;padding:4px 2px 4px 6px;cursor:pointer}
.updbar>span{flex:1}
/* 1.0.2: tablet layout (iPad landscape and wider; no phone is 1000px wide) */
.ctop{display:flex;flex-direction:column;gap:16px}
.homegrid,.hcol{display:flex;flex-direction:column;gap:16px}
.homegrid .homecal{margin:0}
@media (min-width:1000px){
  .wrap{max-width:1180px}
  /* trainer home: calendar left, coming up + clients right */
  .homegrid{display:grid;grid-template-columns:minmax(0,1.25fr) minmax(0,1fr);gap:20px;align-items:start}
  .hmain{position:sticky;top:76px}
  .homegrid .cday{aspect-ratio:1/.9}
  /* client screen: the at-a-glance tiles and the next session side by side */
  .ctop{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:16px;align-items:start}
  .ctop>*{grid-column:1}
  .ctop>.nextappt,.ctop>.appts{grid-column:2;grid-row:1/span 3}
  .ctop>:only-child{grid-column:1/-1}
  /* progress, food and plans: two columns of panels */
  .stack.t-progress,.stack.t-food,.stack.t-plans{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:16px;align-items:start}
  .stack.t-progress>.wbanner,.stack.t-food>.empty,.stack.t-plans>.empty{grid-column:1/-1}
  /* workouts: calendar stays on the left while the sessions scroll on the right */
  .stack.t-sessions{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:16px;align-items:start}
  .stack.t-sessions>.cal{grid-column:1;grid-row:1/span 999;position:sticky;top:76px}
  .stack.t-sessions>:not(.cal){grid-column:2}
  .stack.t-board{max-width:760px}
}
