/* ─── ACCESSIBILITY ─── */
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0;}
.skip-link{position:absolute;top:-100%;left:50%;transform:translateX(-50%);background:var(--lime);color:#000;padding:8px 16px;border-radius:0 0 8px 8px;font-weight:700;z-index:10000;transition:top .2s;}
.skip-link:focus{top:0;}

:root{
  /* ══ NEON ATHLETIC ══
     One loud color (electric lime) on deep carbon. Everything else is
     neutral or a muted category hue — the lime is reserved for what the
     user should act on: today's workout, primary CTAs, live numbers. */

  /* ── Ground: carbon, slightly cool, five steps of elevation ── */
  --bg:#08090B;--bg2:#0E1014;--bg3:#15181D;--bg4:#1D2128;--bg5:#272C35;
  /* ── Borders ── */
  --border:rgba(255,255,255,.07);--border2:rgba(255,255,255,.14);
  /* ── Text ── */
  --text:#F4F6F8;--muted:#A4ADB7;--muted2:#78828D;
  /* ── Signal: electric lime ── */
  --lime:#CCFF00;--lime-glow:rgba(204,255,0,.30);--lime-dim:rgba(204,255,0,.09);
  --lime-deep:#A8D400;
  --hot:#FF7A45;
  /* ── Category hues — used sparingly, never as a fill ── */
  --cyan:#00D9FF;--cyan-glow:rgba(0,217,255,.24);--cyan-dim:rgba(0,217,255,.09);
  --purple:#B47CFF;--purple-glow:rgba(180,124,255,.24);
  --orange:#FF7A45;
  --blue:#00D9FF;--blue-dim:rgba(0,217,255,.09);--blue-glow:rgba(0,217,255,.24);
  --yellow:var(--lime);--yellow-glow:var(--lime-glow);
  --gold:var(--lime);--gold-glow:var(--lime-glow);--gold-dim:var(--lime-dim);
  /* ── Semantic ── */
  --green:#3DFF95;--green-dim:rgba(61,255,149,.10);--green-glow:rgba(61,255,149,.25);
  --red:#FF5A52;--red-glow:rgba(255,90,82,.22);
  --coral:#FF5A52;--coral-dim:rgba(255,90,82,.10);--coral-glow:rgba(255,90,82,.25);
  /* ── Per-workout identity — distinct enough to read at a glance ── */
  --push-c:#CCFF00;--push-g:rgba(204,255,0,.10);
  --pull-c:#00D9FF;--pull-g:rgba(0,217,255,.10);
  --legs-c:#B47CFF;--legs-g:rgba(180,124,255,.10);
  --arms-c:#FF7A45;--arms-g:rgba(255,122,69,.10);
  /* ── Glass ── */
  --glass:rgba(255,255,255,.035);--glass-b:rgba(255,255,255,.09);--glass-h:rgba(255,255,255,.07);
  /* ── Spacing ── */
  --pad-sm:12px;--pad-md:18px;--pad-lg:26px;
  --radius-xs:6px;--radius-sm:10px;--radius-md:14px;--radius-lg:18px;--radius-xl:24px;
  --r:18px;--r-sm:12px;
  /* ── Type ── */
  --font:'Heebo',system-ui,sans-serif;
  --font-d:'Space Grotesk','Heebo',system-ui,sans-serif;
  --fs-h1:2rem;--fs-h2:1.35rem;--fs-h3:1.0625rem;--fs-body:1rem;--fs-meta:.8125rem;
  --fw-black:800;--fw-bold:700;--fw-semi:600;--fw-normal:400;
  --lh-tight:1.15;--lh-normal:1.55;
  --space-xs:4px;--space-sm:8px;--space-md:16px;--space-lg:24px;--space-xl:32px;--space-2xl:48px;
  /* ── Motion ── */
  --ease-out:cubic-bezier(.16,1,.3,1);
  --ease-spring:cubic-bezier(.34,1.56,.64,1);
}
*{box-sizing:border-box;margin:0;padding:0;}
/* ── Focus visible — keyboard navigation ── */
:focus{outline:none}
:focus-visible{outline:2px solid var(--lime);outline-offset:2px;border-radius:4px;}
button:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible,a:focus-visible,label:focus-visible{outline:2px solid var(--lime);outline-offset:2px;}
/* ── RTL text inputs — auto direction per-character ── */
/* `direction:auto` is not a CSS value (it is an HTML dir attribute), so the
   declaration was dropped and bidi-override reversed Latin input against the
   inherited rtl. `plaintext` is the property that actually does what was
   intended: pick each paragraph's direction from its first strong character. */
input[type="text"],input[type="email"],input[type="search"],textarea{unicode-bidi:plaintext;}
/* ── Notif dot — hidden by default, shown via JS ── */
.topbar-notif-dot{display:none;}

/* ── App shell ── */
html,body{height:100%;overflow:hidden;}
body{
  font-family:var(--font);color:var(--text);
  background:radial-gradient(120% 55% at 50% -10%,rgba(255,255,255,.04) 0%,rgba(255,122,69,.03) 40%,transparent 70%),var(--bg);
  direction:rtl;overflow-x:hidden;
  display:flex;justify-content:center;
  height:100dvh; /* dynamic viewport — accounts for mobile browser bars */
}
/* film-grain noise overlay */
body::before{content:'';position:fixed;inset:0;z-index:9999;pointer-events:none;opacity:.035;background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");background-size:200px 200px;}
/* tabular numerals for all stat/timer/log values */
.stat-box .val,.grt-time,.ring-text,.gym-sr-kg,.gym-sr-reps,.gym-stopwatch,.sets-cell,
.cals-hero-num,.wr-stat-val,.boss-vals,.meal-cals,.weekly-stat-val,.elog-input,.pr-input,
.sl-kg,.sl-reps,.msl-kg,.msl-reps,.gym-set-input{font-variant-numeric:tabular-nums;}

/* App frame — phone-width container, fixed height so content scrolls */
.app-frame{
  width:100%;max-width:520px;
  height:100dvh;
  background:transparent;
  display:flex;flex-direction:column;
  overflow:hidden;
}
@media(min-width:769px){
  .app-frame{
    border-left:1px solid rgba(255,255,255,.05);
    border-right:1px solid rgba(255,255,255,.05);
    box-shadow:0 0 80px rgba(0,0,0,.6);
  }
}

/* Content wrapper — takes remaining height, scrolls */
.content{
  flex:1;
  min-height:0;        /* critical: allows flex child to shrink + scroll */
  overflow-y:auto;
  overflow-x:hidden;
  padding:0 16px 0;
  -webkit-overflow-scrolling:touch;
  scroll-behavior:smooth;
}
/* Spacer at end of scroll — padding-bottom on flex+overflow is broken in mobile WebKit */
.content::after{
  content:'';
  display:block;
  height:calc(96px + env(safe-area-inset-bottom,34px));
  flex-shrink:0;
}

/* Panels */
.panel{display:none;}
.panel.active{display:block;animation:panelIn .3s var(--ease-out);}
@keyframes panelIn{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}
/* ─── Layout utilities ─── */
.space-y-4>*+*{margin-top:20px;}
.space-y-6>*+*{margin-top:24px;}
.px-4{padding-left:16px;padding-right:16px;}
.flex-1{flex:1;}
.overflow-y-auto{overflow-y:auto;}
/* ─── Dashboard breathing room ─── */
#panel-dashboard>*{padding-top:2px;padding-bottom:2px;}
#panel-dashboard .space-y-4>*+*,#panel-dashboard>*+*{margin-top:18px;}

/* ─── SIDEBAR ─── */
.sidebar{
  position:fixed;top:0;right:0;height:100vh;width:248px;
  background:rgba(12,12,12,.97);
  backdrop-filter:blur(24px) saturate(180%);
  -webkit-backdrop-filter:blur(24px) saturate(180%);
  border-left:1px solid var(--border);
  display:flex;flex-direction:column;z-index:200;
  transition:transform .35s var(--ease-out);
  pointer-events:auto;
  isolation:isolate;
}
.logo{padding:26px 20px 16px;padding-top:calc(26px + env(safe-area-inset-top));border-bottom:1px solid var(--border);}
.logo-mark{
  width:34px;height:34px;border-radius:var(--radius-sm);flex-shrink:0;
  background:linear-gradient(135deg,var(--gold),var(--hot));
  display:flex;align-items:center;justify-content:center;
  margin-bottom:10px;
  box-shadow:0 4px 16px var(--lime-glow);
}
.logo h1{
  font-family:var(--font-d);font-size:1.75rem;font-weight:900;letter-spacing:-1px;
  background:linear-gradient(135deg,#fff 0%,rgba(255,255,255,.7) 100%);
  -webkit-background-clip:text;-webkit-text-fill-color:transparent;
  line-height:1;
}
.logo p{font-size:.65rem;color:var(--muted);margin-top:4px;letter-spacing:1px;text-transform:uppercase;}
.nav-links{padding:10px 10px;flex:1;overflow-y:auto;scrollbar-width:none;}
.nav-links::-webkit-scrollbar{display:none;}

/* ─── Section separators ─── */
.nav-section{margin-bottom:4px;}
.nav-section+.nav-section{margin-top:8px;padding-top:8px;border-top:1px solid var(--border);}
.nav-group-title{
  font-size:.62rem;font-weight:800;letter-spacing:2px;
  color:rgba(255,255,255,.3);text-transform:uppercase;
  padding:10px 10px 4px;display:flex;align-items:center;gap:6px;
}
.nav-group-title::before{
  content:'';display:block;width:12px;height:2px;
  background:linear-gradient(90deg,var(--hot),var(--gold));
  border-radius:999px;flex-shrink:0;
}

/* ─── Nav buttons — NO pseudo-element tricks, direct styles only ─── */
.nav-btn{
  display:flex;align-items:center;gap:10px;width:100%;
  padding:10px 12px;margin-bottom:2px;
  background:transparent;border:none;border-radius:var(--radius-md);
  color:var(--muted2);cursor:pointer;
  font-family:var(--font);font-size:.86rem;font-weight:500;
  text-align:right;
  transition:background .18s,color .18s,transform .15s;
  position:relative;
  pointer-events:auto;
  /* NO overflow:hidden — causes click issues on iOS/Safari */
  z-index:1;
}
.nav-btn:hover{background:rgba(255,255,255,.05);color:var(--text);}
.nav-btn:active{transform:scale(.97);}
.nav-btn.active{
  background:var(--lime-dim);
  color:var(--lime);
  font-weight:700;
  box-shadow:inset 0 0 0 1px rgba(204,255,0,.22);
}
.nav-btn .nav-icon{
  width:22px;height:22px;display:flex;align-items:center;justify-content:center;
  flex-shrink:0;opacity:.55;border-radius:var(--radius-xs);transition:opacity .18s;
}
.nav-btn.active .nav-icon{opacity:1;color:var(--lime);}
.nav-btn:hover .nav-icon{opacity:.8;}
.sidebar-footer{padding:14px;border-top:1px solid var(--border);}
.user-chip{display:flex;align-items:center;gap:10px;background:var(--glass);border:1px solid var(--border);border-radius:var(--radius-md);padding:10px 12px;}
.user-avatar{
  width:36px;height:36px;border-radius:50%;
  background:linear-gradient(135deg,var(--gold),var(--hot));
  color:#000;
  display:flex;align-items:center;justify-content:center;
  font-weight:700;font-size:.85rem;flex-shrink:0;font-family:var(--font-d);
}
.user-info{flex:1;min-width:0;}
.user-name{font-size:.84rem;font-weight:600;}
.user-sub{font-size:.7rem;color:var(--muted);}

/* ─── MAIN LAYOUT ─── */
.main{margin-right:248px;min-height:100vh;}
.topbar{
  position:sticky;top:0;z-index:50;
  background:rgba(22,24,32,.88);backdrop-filter:blur(24px) saturate(180%);
  -webkit-backdrop-filter:blur(24px) saturate(180%);
  border-bottom:1px solid var(--border);
  padding:14px 32px;
  padding-top:calc(14px + env(safe-area-inset-top));
  display:flex;align-items:center;justify-content:space-between;
}
.page-title{font-family:var(--font-d);font-size:1.5rem;font-weight:900;letter-spacing:-.5px;}
.stats-chips{display:flex;gap:8px;flex-wrap:wrap;}
.chip{
  display:flex;align-items:center;gap:6px;
  background:var(--lime-dim);border:1px solid rgba(204,255,0,.2);
  border-radius:999px;padding:5px 14px;font-size:.78rem;
}
.chip strong{color:var(--lime);}
/* .content and .panel defined at top of file */

/* ─── GLASS CARDS ─── */
.card{
  background:rgba(255,255,255,.03);
  border:1px solid rgba(255,255,255,.08);
  border-radius:var(--radius-xl);margin-bottom:24px;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.06);
  /* NO backdrop-filter — creates stacking contexts that block sidebar pointer events in WebKit */
  /* NO overflow:hidden — clips the interactive hit area of card children */
  transition:border-color .25s,box-shadow .25s,transform .18s var(--ease-out);
}
.card:hover{border-color:var(--border2);box-shadow:inset 0 1px 0 rgba(255,255,255,.06),0 12px 40px rgba(0,0,0,.35);transform:translateY(-3px);}
.card-head{
  padding:20px var(--pad-lg);border-bottom:1px solid var(--border);
  display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:8px;
}
.card-head h2{font-family:var(--font-d);font-size:1.25rem;font-weight:800;letter-spacing:-.4px;display:flex;align-items:center;gap:8px;}
.card-body{padding:var(--pad-lg);}
/* workout panel card accent borders */
#panel-push .card,#panel-pull .card,#panel-legs .card,#panel-arms .card{border-top:1px solid rgba(204,255,0,.25);}

.btn{display:inline-flex;align-items:center;justify-content:center;min-height:44px;padding:10px 20px;border-radius:var(--radius-md);font-weight:700;font-size:.9375rem;cursor:pointer;border:none;transition:transform .15s,opacity .15s,box-shadow .15s;font-family:var(--font);}
.btn:hover{opacity:.88;transform:translateY(-1px);}
.btn:active{transform:scale(.97);}
.btn-primary{background:linear-gradient(160deg,#FFD666 0%,var(--gold) 60%);color:#08090B;border-radius:999px;box-shadow:0 0 18px var(--gold-glow);}
.btn-primary:hover{box-shadow:0 6px 24px var(--gold-glow);}
.btn-ghost{background:var(--glass);border:1px solid var(--border2);color:var(--text);}
.btn-danger{background:var(--red-glow);border:1px solid rgba(255,90,82,.3);color:var(--red);}

.row-between{display:flex;justify-content:space-between;align-items:center;}
.row-center{display:flex;align-items:center;gap:8px;}
.col-gap{display:flex;flex-direction:column;gap:16px;}
.mb-4{margin-bottom:4px;}.mb-8{margin-bottom:8px;}.mb-12{margin-bottom:12px;}
.mb-16{margin-bottom:16px;}.mb-24{margin-bottom:24px;}
.gap-8{gap:8px;}.gap-12{gap:12px;}.gap-16{gap:16px;}
.text-muted{color:var(--muted);font-size:.75rem;}
.text-lime{color:var(--lime);}.text-red{color:var(--red);}
.truncate{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}

.workout-card{border-radius:var(--radius-md);padding:14px 10px;cursor:pointer;text-align:center;transition:transform .15s,box-shadow .15s;border:1.5px solid transparent;}
.workout-card:hover{transform:translateY(-2px);box-shadow:0 8px 24px rgba(0,0,0,.35);}
.workout-card:active{transform:scale(.97);}
.workout-card.push{background:var(--bg3);border-color:rgba(204,255,0,.28);}
.workout-card.pull{background:var(--bg3);border-color:rgba(0,217,255,.28);}
.workout-card.legs{background:var(--bg3);border-color:rgba(180,124,255,.28);}
.workout-card.arms{background:var(--bg3);border-color:rgba(255,122,69,.28);}
.workout-card-icon{font-size:1.5rem;margin-bottom:6px;}
.workout-card-title{font-size:.95rem;font-weight:800;letter-spacing:.02em;}
.workout-card-sub{font-size:.62rem;color:var(--muted);margin-top:4px;}

.plate-badge{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px;}
.plate-badge-item{background:var(--glass-b);border:1px solid var(--border2);border-radius:var(--radius-sm);padding:3px 8px;font-size:.72rem;font-weight:700;color:var(--text);}
.weekly-summary{background:linear-gradient(135deg,var(--bg3),var(--bg4));border:1px solid var(--border2);border-radius:var(--radius-lg);padding:16px 20px;}
.weekly-stats{display:flex;gap:20px;margin-top:12px;}
.weekly-stat-val{font-size:1.4rem;font-weight:800;color:var(--lime);}
.weekly-stat-label{font-size:.65rem;color:var(--muted);margin-top:2px;}
.last-session-hint{background:var(--glass);border:1px solid var(--border);border-radius:var(--radius-sm);padding:8px 12px;margin-bottom:10px;font-size:.78rem;color:var(--muted);}
.last-session-hint strong{color:var(--text);font-weight:600;}

.grid-4{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;}
.grid-2{display:grid;grid-template-columns:repeat(2,1fr);gap:14px;}
.grid-3{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;}

/* ─── STAT BOXES — glass metric cards ─── */
.stat-box{
  background:linear-gradient(180deg,rgba(255,255,255,.05),rgba(255,255,255,.02));
  box-shadow:inset 0 1px 0 rgba(255,255,255,.06);
  border:1px solid var(--border);border-radius:var(--radius-lg);
  padding:22px 16px;text-align:center;cursor:default;
  transition:transform .25s var(--ease-spring),box-shadow .25s,border-color .25s;
  position:relative;overflow:hidden;
}
.stat-box::before{
  content:'';position:absolute;inset:0;border-radius:var(--radius-md);
  opacity:0;transition:opacity .25s;
}
.stat-box:hover{transform:translateY(-4px);}
.stat-box.red:hover{border-color:rgba(255,90,82,.4);box-shadow:0 8px 32px rgba(255,90,82,.15);}
.stat-box.blue:hover{border-color:rgba(204,255,0,.4);box-shadow:0 8px 32px rgba(255,255,255,.06);}
.stat-box.yellow:hover{border-color:rgba(204,255,0,.4);box-shadow:0 8px 32px rgba(255,255,255,.06);}
.stat-box.green:hover{border-color:rgba(61,255,149,.4);box-shadow:0 8px 32px rgba(61,255,149,.12);}
.stat-box.red::before{background:radial-gradient(circle at 50% 0%,var(--red-glow),transparent 70%);}
.stat-box.blue::before{background:radial-gradient(circle at 50% 0%,var(--blue-glow),transparent 70%);}
.stat-box.yellow::before{background:radial-gradient(circle at 50% 0%,var(--yellow-glow),transparent 70%);}
.stat-box.green::before{background:radial-gradient(circle at 50% 0%,var(--green-glow),transparent 70%);}
.stat-box.purple::before{background:radial-gradient(circle at 50% 0%,var(--purple-glow),transparent 70%);}
.stat-box.cyan::before{background:radial-gradient(circle at 50% 0%,var(--cyan-glow),transparent 70%);}
.stat-box:hover::before{opacity:1;}
.stat-box .val{font-family:var(--font-d);font-size:2.8rem;font-weight:900;line-height:1;letter-spacing:-.8px;}
.stat-box .lbl{font-size:.7rem;color:var(--muted);margin-top:8px;letter-spacing:.5px;text-transform:uppercase;}
.stat-box.red .val{color:var(--red);}
.stat-box.blue .val{color:var(--blue);}
.stat-box.yellow .val{color:var(--yellow);}
.stat-box.green .val{color:var(--green);}
.stat-box.purple .val{color:var(--purple);}
.stat-box.cyan .val{color:var(--cyan);}

/* ─── BADGES ─── */
.badge{display:inline-block;font-size:.68rem;font-weight:700;padding:3px 10px;border-radius:999px;letter-spacing:.3px;}
.badge-red{background:var(--coral-dim);color:var(--coral);border:1px solid rgba(255,90,82,.28);}
.badge-green{background:rgba(61,255,149,.1);color:var(--green);border:1px solid rgba(61,255,149,.28);}
.badge-blue{background:rgba(255,255,255,.05);color:var(--blue);border:1px solid rgba(0,169,255,.3);}
.badge-yellow{background:rgba(255,255,255,.05);color:var(--yellow);border:1px solid rgba(255,214,102,.3);}
.badge-purple{background:rgba(255,255,255,.05);color:var(--purple);border:1px solid rgba(180,124,255,.3);}
.badge-cyan{background:rgba(255,255,255,.05);color:var(--cyan);border:1px solid rgba(0,217,255,.3);}

/* ─── WEEK BAR ─── */
.week-bar{display:grid;grid-template-columns:repeat(7,1fr);gap:8px;margin-bottom:20px;}
.day-cell{
  border-radius:var(--radius-lg);padding:16px 6px 12px;text-align:center;cursor:pointer;
  border:1px solid var(--border);transition:all .25s var(--ease-out);
  background:var(--bg3);position:relative;overflow:hidden;
  font-family:var(--font);color:var(--text);
}
.day-cell::before{
  content:'';position:absolute;top:0;left:0;right:0;height:3px;
  background:var(--day-accent,rgba(255,255,255,.1));border-radius:16px 16px 0 0;
  opacity:.7;
}
.day-cell[data-type="push"]{--day-accent:var(--push-c);}
.day-cell[data-type="pull"]{--day-accent:var(--pull-c);}
.day-cell[data-type="legs"]{--day-accent:var(--legs-c);}
.day-cell[data-type="arms"]{--day-accent:var(--arms-c);}
.day-cell:not(.rest-day):hover{transform:translateY(-3px);border-color:var(--border2);box-shadow:0 8px 28px rgba(0,0,0,.5);}
.day-cell.active-day{
  border-color:var(--lime);
  background:linear-gradient(160deg,rgba(255,255,255,.06),rgba(255,255,255,.04));
  box-shadow:0 0 20px var(--lime-glow);
}
.day-cell.done-day{
  border-color:rgba(61,255,149,.35);
  background:linear-gradient(160deg,rgba(61,255,149,.08),var(--bg3));
}
.day-cell.done-day::after{
  content:'✓';position:absolute;top:6px;left:6px;
  font-size:.6rem;font-weight:900;color:var(--green);
  background:rgba(61,255,149,.15);border-radius:50%;
  width:14px;height:14px;display:flex;align-items:center;justify-content:center;
  line-height:14px;
}
.day-cell.rest-day{opacity:.4;cursor:default;}
.day-cell .dc-name{font-size:.62rem;color:var(--muted);margin-bottom:8px;font-weight:700;letter-spacing:.8px;text-transform:uppercase;}
.day-cell .dc-icon{font-size:1.4rem;margin-bottom:6px;}
.day-cell .dc-type{font-family:var(--font-d);font-size:.72rem;font-weight:900;letter-spacing:.5px;}
.day-cell .dc-label{font-size:.6rem;color:var(--muted2);margin-top:4px;line-height:1.3;}

/* ─── SPLIT LEGEND ─── */
.split-legend{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:20px;}
.legend-pill{display:flex;align-items:center;gap:6px;background:var(--glass);border:1px solid var(--glass-b);border-radius:999px;padding:6px 14px;font-size:.78rem;font-weight:600;}

/* ─── WORKOUT PANELS ─── */
.workout-panel{display:none;}
.workout-panel.show{display:block;}

/* ─── TRAINER NOTE ─── */
.trainer-note{
  background:rgba(255,90,82,.05);
  border:1px solid rgba(255,90,82,.14);
  border-right:3px solid var(--red);
  border-radius:var(--radius-md);
  padding:18px 20px;margin-bottom:24px;font-size:.86rem;line-height:1.8;
}
.trainer-note strong{color:var(--red);}

/* ─── EXERCISE TABLE ─── */
.ex-table{width:100%;border-collapse:collapse;}
.ex-table thead tr{border-bottom:1px solid var(--border2);}
.ex-table th{padding:8px 14px;text-align:right;font-size:.64rem;font-weight:800;color:var(--muted);letter-spacing:1.5px;text-transform:uppercase;}
.ex-table tbody tr{
  border-bottom:1px solid var(--border);
  transition:background .15s,transform .15s;
  cursor:pointer;position:relative;
}
.ex-table tbody tr::after{
  content:'';position:absolute;right:0;top:0;bottom:0;width:3px;
  background:var(--row-accent,var(--red));
  border-radius:0 3px 3px 0;opacity:0;
  transition:opacity .18s;
}
.ex-table tbody tr:hover{background:rgba(255,255,255,.03);}
.ex-table tbody tr:hover::after{opacity:1;}
.ex-table tbody tr:last-child{border-bottom:none;}
.ex-table td{padding:16px 14px;font-size:.87rem;vertical-align:middle;}
.ex-num-cell{
  width:32px;height:32px;border-radius:var(--radius-sm);
  background:var(--row-accent,var(--red));
  color:#08090B;font-weight:900;font-size:.78rem;
  display:flex;align-items:center;justify-content:center;flex-shrink:0;
  font-family:var(--font-d);opacity:.85;
}
.ex-name-main{font-weight:700;font-size:.93rem;}
.ex-name-en{font-size:.7rem;color:var(--muted);margin-top:3px;letter-spacing:.2px;}
.ex-why{font-size:.7rem;color:var(--cyan);margin-top:4px;font-style:italic;}
.muscle-tag{font-size:.67rem;padding:3px 10px;border-radius:999px;background:var(--glass);color:var(--muted2);border:1px solid var(--border);white-space:nowrap;}
.sets-cell{font-family:var(--font-d);font-weight:900;font-size:1.1rem;color:var(--text);white-space:nowrap;letter-spacing:-.3px;}
.rest-cell{color:var(--muted);font-size:.76rem;white-space:nowrap;}

/* ─── WORKOUT CARD WATERMARK ─── */
.card[data-wm]{position:relative;}
.card[data-wm]::before{
  content:attr(data-wm);
  position:absolute;left:16px;top:50%;transform:translateY(-50%);
  font-family:var(--font-d);font-size:7rem;font-weight:900;
  color:rgba(255,255,255,.025);letter-spacing:-3px;line-height:1;
  pointer-events:none;user-select:none;z-index:0;
}
.card[data-wm] .card-head,.card[data-wm] .card-body{position:relative;z-index:1;}

/* ─── PER-PANEL ROW ACCENT COLORS ─── */
#panel-push .ex-table tbody tr{--row-accent:var(--push-c);}
#panel-push .ex-num-cell{background:var(--push-c);}
#panel-pull .ex-table tbody tr{--row-accent:var(--pull-c);}
#panel-pull .ex-num-cell{background:var(--pull-c);}
#panel-legs .ex-table tbody tr{--row-accent:var(--legs-c);}
#panel-legs .ex-num-cell{background:var(--legs-c);}
#panel-arms .ex-table tbody tr{--row-accent:var(--arms-c);}
#panel-arms .ex-num-cell{background:var(--arms-c);}

/* ─── SUPERSET ─── */
.superset-label{font-size:.67rem;padding:2px 8px;border-radius:999px;background:rgba(255,255,255,.06);color:var(--purple);border:1px solid rgba(204,255,0,.28);margin-right:6px;}

/* ─── MODAL ─── */
.modal-overlay{position:fixed;inset:0;background:rgba(0,0,0,.8);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);z-index:300;display:none;align-items:center;justify-content:center;padding:20px;}
.modal-overlay.open{display:flex;animation:fadeOverlay .2s ease;}
@keyframes fadeOverlay{from{opacity:0}to{opacity:1}}
.modal{
  background:var(--bg2);border:1px solid var(--border2);border-radius:var(--radius-xl);
  width:100%;max-width:500px;max-height:88vh;overflow-y:auto;padding:0;
  animation:modalIn .3s var(--ease-spring);
}
/* Hero clips to border-radius without overflow:hidden on whole modal */
.modal-hero{border-radius:24px 24px 0 0;}
@keyframes modalIn{from{opacity:0;transform:scale(.95) translateY(12px)}to{opacity:1;transform:none}}
@keyframes modalOut{from{opacity:1;transform:translateY(0) scale(1);}to{opacity:0;transform:translateY(12px) scale(.97);}}
.modal.closing{animation:modalOut .22s cubic-bezier(.4,0,.2,1) forwards;pointer-events:none;}
/* cinematic modal hero banner */
.modal-hero{
  width:100%;height:190px;position:relative;overflow:hidden;
  display:flex;flex-direction:column;justify-content:flex-end;padding:20px 22px 18px;
  border-bottom:1px solid var(--border);
}
.modal-hero-bg{
  position:absolute;inset:0;
  background:var(--mhero-grad, var(--bg3));
}
.modal-hero-wm{
  position:absolute;left:-10px;top:50%;transform:translateY(-50%);
  font-family:var(--font-d);font-size:8rem;font-weight:900;
  color:rgba(255,255,255,.06);letter-spacing:-4px;line-height:1;
  pointer-events:none;user-select:none;
}
.modal-hero-cat{
  position:relative;font-size:.65rem;font-weight:900;letter-spacing:2px;
  text-transform:uppercase;color:rgba(255,255,255,.5);margin-bottom:6px;
}
.modal-hero-name{
  position:relative;font-family:var(--font-d);font-size:2rem;font-weight:900;
  color:#fff;letter-spacing:-1px;line-height:1.05;text-shadow:0 2px 12px rgba(0,0,0,.4);
}
.modal-hero-en{
  position:relative;font-size:.8rem;color:rgba(255,255,255,.55);margin-top:4px;
}
.modal-close{
  position:absolute;top:10px;left:10px;
  background:rgba(0,0,0,.4);border:1px solid rgba(255,255,255,.15);
  color:#fff;width:44px;height:44px;border-radius:50%;
  cursor:pointer;font-size:.95rem;display:flex;align-items:center;justify-content:center;
  transition:all .2s;z-index:2;
}
.modal-close:hover{background:rgba(0,0,0,.6);}
.modal-body{padding:22px;}
.modal-head{display:none;}/* hidden — title is now in hero */
.modal-title{display:none;}
.info-row{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:16px;}
.info-pill{background:var(--bg3);border:1px solid var(--border);border-radius:999px;padding:5px 12px;font-size:.78rem;}
.info-pill strong{color:var(--red);}
.m-section{font-size:.72rem;font-weight:700;color:var(--muted);text-transform:uppercase;letter-spacing:1.2px;margin-bottom:8px;}
.m-text{font-size:.87rem;line-height:1.75;color:var(--muted2);margin-bottom:16px;}
.tips-list{list-style:none;}
.tips-list li{font-size:.84rem;color:var(--muted2);padding:7px 0;border-bottom:1px solid var(--border);display:flex;gap:10px;line-height:1.55;}
.tips-list li:last-child{border-bottom:none;}

/* ─── NUTRITION ─── */
.meal-row{background:var(--bg3);border:1px solid var(--border);border-radius:var(--radius-lg);padding:18px;margin-bottom:12px;transition:border-color .2s,box-shadow .2s;position:relative;overflow:hidden;}
.meal-row:hover{border-color:rgba(204,255,0,.35);box-shadow:0 4px 24px rgba(255,255,255,.04);}
.meal-top{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:10px;gap:10px;}
.meal-name{font-weight:800;font-size:1rem;}
.meal-time{font-size:.68rem;color:var(--muted);margin-top:3px;letter-spacing:.3px;}
.meal-cals{
  font-family:var(--font-d);font-size:1.4rem;font-weight:900;
  color:var(--red);letter-spacing:-.5px;white-space:nowrap;line-height:1;
}
.meal-cals-unit{font-size:.62rem;color:var(--muted);font-weight:500;font-family:var(--font);letter-spacing:0;margin-top:2px;text-align:left;}
.meal-foods{font-size:.82rem;color:var(--muted2);line-height:1.8;margin-bottom:12px;}
.meal-cals-wrap{text-align:left;flex-shrink:0;}
.meal-tip-row{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px;gap:8px;}
.meal-tip{font-size:.75rem;flex:1;}
.meal-swap-btn{font-size:.62rem;font-weight:700;color:var(--cyan);background:rgba(255,255,255,.04);border:1px solid rgba(204,255,0,.25);border-radius:var(--radius-xs);padding:3px 8px;cursor:pointer;white-space:nowrap;flex-shrink:0;}
.meal-swap-btn:hover{background:rgba(255,255,255,.06);}
.meal-macros{display:flex;gap:8px;flex-wrap:wrap;}
.mp{font-size:.73rem;padding:3px 10px;border-radius:999px;font-weight:600;}
.mp-p{background:rgba(255,255,255,.06);color:var(--blue);border:1px solid rgba(204,255,0,.18);}
.mp-c{background:rgba(255,255,255,.04);color:var(--yellow);border:1px solid rgba(204,255,0,.18);}
.mp-f{background:rgba(61,255,149,.08);color:var(--green);border:1px solid rgba(61,255,149,.18);}

/* ─── PROGRESS BARS ─── */
.pbar{margin-bottom:16px;}
.pbar-top{display:flex;justify-content:space-between;align-items:baseline;font-size:.8rem;margin-bottom:7px;}
.pbar-top span:first-child{color:var(--muted2);font-weight:500;}
.pbar-track{height:3px;background:rgba(255,255,255,.07);border-radius:999px;overflow:hidden;position:relative;}
.pbar-fill{
  height:100%;border-radius:999px;
  background:linear-gradient(90deg,var(--hot),var(--gold));
  box-shadow:0 0 10px var(--gold-glow);
  transition:width .8s var(--ease-out);
  position:relative;
}
.pbar-fill::after{
  content:'';position:absolute;inset:0;border-radius:999px;
  background:linear-gradient(90deg,rgba(255,255,255,.15),transparent);
}

/* ─── TIP CARDS ─── */
.tip-card{display:flex;gap:14px;background:var(--glass);border-right:3px solid var(--blue);border-radius:var(--radius-md);padding:14px 16px;margin-bottom:10px;font-size:.87rem;line-height:1.65;}
.tip-card.warn{border-color:var(--red);}
.tip-card.good{border-color:var(--green);}
.tip-card.gold{border-color:var(--yellow);}
.tip-icon{font-size:1.25rem;flex-shrink:0;}

/* ─── TIMELINE ─── */
.tl-item{position:relative;padding-right:24px;margin-bottom:28px;}
.tl-dot{position:absolute;right:-7px;top:5px;width:16px;height:16px;border-radius:50%;border:2px solid var(--bg);}
/* .tl-line removed with the standalone rail — the item draws it now */

/* ─── HAMBURGER ─── */
.hamburger{
  display:none;background:var(--glass);border:1px solid var(--border2);
  border-radius:var(--radius-sm);padding:8px 12px;cursor:pointer;font-size:1.1rem;line-height:1;
  color:var(--text);transition:all .2s;
}
.hamburger:hover{background:var(--glass-h);}

/* ─── SIDEBAR OVERLAY ─── */
/* NO backdrop-filter — in WebKit, filter on overlay can intercept events from z-index:100 sidebar */
.sidebar-overlay{
  visibility:hidden;pointer-events:none;
  position:fixed;inset:0;background:rgba(0,0,0,.65);z-index:99;
  opacity:0;transition:opacity .3s,visibility .3s;
}
.sidebar-overlay.show{visibility:visible;pointer-events:auto;opacity:1;}

/* ─── SIDEBAR CLOSE (mobile) ─── */
.sidebar-close{display:none;position:absolute;top:16px;left:16px;background:var(--glass);border:1px solid var(--border2);color:var(--text);width:44px;height:44px;border-radius:50%;cursor:pointer;font-size:.9rem;align-items:center;justify-content:center;}

/* ─── MUSCLE TAG ─── */
.part-tag{font-size:.67rem;padding:2px 7px;border-radius:999px;background:rgba(255,255,255,.06);color:var(--cyan);border:1px solid rgba(204,255,0,.22);white-space:nowrap;margin-top:3px;display:inline-block;}

/* ─── TODAY HERO BANNER — Premium Workout Card ─── */
.today-hero{
  border-radius:var(--radius-xl);padding:22px 22px 20px;margin-bottom:28px;
  display:flex;flex-direction:column;justify-content:space-between;gap:0;
  cursor:pointer;transition:transform .3s var(--ease-spring),box-shadow .35s;
  background:radial-gradient(90% 120% at 85% -20%,rgba(255,122,69,.16),rgba(255,255,255,.04) 45%,transparent 70%),
    linear-gradient(180deg,rgba(255,255,255,.04),rgba(255,255,255,.015)),
    var(--bg2);
  border:1px solid rgba(255,255,255,.08);
  position:relative;overflow:hidden;
  min-height:200px;
}
/* hero top row: badge + play */
.hero-top-row{display:flex;align-items:flex-start;justify-content:space-between;margin-bottom:auto;}
.hero-badge{
  background:var(--gold);color:#08090B;
  font-family:var(--font-d);font-size:.62rem;font-weight:900;letter-spacing:.1em;text-transform:uppercase;
  padding:4px 10px;border-radius:999px;
  display:inline-flex;align-items:center;gap:4px;
}
.hero-play{
  width:46px;height:46px;background:var(--gold);border-radius:50%;border:none;
  display:flex;align-items:center;justify-content:center;cursor:pointer;
  box-shadow:0 0 28px var(--gold-glow);
  transition:transform .2s var(--ease-spring),box-shadow .2s;flex-shrink:0;
}
.hero-play:active{transform:scale(.88);}
.hero-play svg{width:18px;height:18px;fill:#000;margin-right:-2px;}
/* hero bottom: muscles + meta */
.hero-bottom{position:relative;z-index:2;}
.hero-wk-meta{display:flex;align-items:center;gap:12px;margin-top:8px;flex-wrap:wrap;}
.hero-meta-chip{display:flex;align-items:center;gap:4px;font-size:.72rem;font-weight:600;color:rgba(255,255,255,.6);}
.hero-meta-chip svg{width:13px;height:13px;stroke:rgba(255,255,255,.45);fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;}
/* grain texture overlay */
.today-hero::after{
  content:'';position:absolute;inset:0;pointer-events:none;
  background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='0.04'/%3E%3C/svg%3E");
  background-size:200px 200px;opacity:.6;mix-blend-mode:overlay;
}
.today-hero::before{
  content:'';position:absolute;inset:0;pointer-events:none;
  background:radial-gradient(ellipse at 90% 30%,rgba(255,255,255,.18),transparent 55%),
             radial-gradient(ellipse at 20% 100%,rgba(0,0,0,.22),transparent 50%);
}
.today-hero:hover{transform:translateY(-4px);box-shadow:0 24px 64px var(--hero-glow,rgba(255,90,82,.35));}
.today-hero-info{position:relative;z-index:1;}
.today-hero-info .today-hero-day{font-size:.68rem;color:rgba(255,255,255,.5);font-weight:700;margin-bottom:4px;text-transform:uppercase;letter-spacing:2px;}
.today-hero-info .today-hero-title{font-family:var(--font-d);font-size:1.55rem;font-weight:900;color:#fff;letter-spacing:-.4px;line-height:1.1;text-shadow:none;}
.today-hero-info .today-hero-sub{font-size:.84rem;color:rgba(255,255,255,.65);margin-top:4px;font-weight:500;}
.today-hero-hint{margin-top:10px;font-size:.72rem;color:var(--lime);display:flex;align-items:center;gap:5px;font-weight:600;}
.today-hero-emoji{display:none;} /* replaced by premium layout */
.today-hero-rest{
  background:linear-gradient(135deg,rgba(61,255,149,.28),rgba(0,0,0,.4) 100%)!important;
  border:1px solid rgba(61,255,149,.35)!important;cursor:default;min-height:140px;
}
.today-hero-rest:hover{transform:none!important;box-shadow:none!important;}

/* ─── REST TIMER ─── */
.timer-float{position:fixed;bottom:calc(80px + 16px + env(safe-area-inset-bottom));left:24px;z-index:290;display:flex;flex-direction:column;align-items:flex-start;gap:8px;}
.timer-presets{
  display:none;flex-direction:column;gap:4px;
  background:rgba(8,8,8,.96);border:1px solid var(--border2);border-radius:var(--radius-md);
  padding:8px;box-shadow:0 16px 48px rgba(0,0,0,.7);min-width:96px;
  backdrop-filter:blur(12px);
}
.timer-presets.show{display:flex;}
.timer-presets button{background:var(--glass);border:1px solid var(--border);color:var(--text);border-radius:var(--radius-sm);padding:7px 16px;cursor:pointer;font-family:var(--font);font-size:.82rem;white-space:nowrap;transition:all .18s;}
.timer-presets button:hover{border-color:var(--red);color:var(--red);}
.timer-btn{
  background:var(--glass);border:1px solid var(--border2);color:var(--muted2);
  border-radius:999px;padding:10px 18px;cursor:pointer;font-size:.84rem;font-weight:700;
  font-family:var(--font-d);transition:all .2s;white-space:nowrap;letter-spacing:.3px;
  backdrop-filter:blur(8px);
}
.timer-btn:hover{border-color:var(--red);color:var(--text);}
.timer-btn.running{background:linear-gradient(160deg,#FFD666,var(--gold));border-color:transparent;color:#08090B;min-width:90px;text-align:center;}
.timer-ring{position:relative;width:62px;height:62px;display:none;}
.timer-ring.show{display:flex;align-items:center;justify-content:center;}
.ring-track{fill:none;stroke:rgba(255,255,255,.06);stroke-width:3;}
.ring-prog{fill:none;stroke:var(--gold);stroke-width:3;stroke-linecap:round;transform-origin:30px 30px;transform:rotate(-90deg);transition:stroke-dashoffset .95s linear;filter:drop-shadow(0 0 6px rgba(204,255,0,.45));}
.ring-text{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-weight:800;font-size:.88rem;color:var(--text);font-family:var(--font-d);}

/* Superseded by the grid-based exercise list further down. The old rules
   forced display on every non-onclick row, which overrode the inline
   display:none on injected set-log rows and left them permanently open. */

/* ─── SET CHECKBOXES ─── */
.set-checks{display:flex;gap:6px;margin-top:8px;}
.set-check{
  width:22px;height:22px;border-radius:var(--radius-xs);border:1.5px solid var(--border2);
  background:var(--glass);cursor:pointer;display:inline-flex;align-items:center;
  justify-content:center;font-size:.7rem;color:transparent;
  transition:all .2s var(--ease-spring);flex-shrink:0;user-select:none;
  position:relative;
}
.set-check::before{content:'';position:absolute;inset:-11px;} /* expands hit area to 44px */
.set-check:hover{border-color:var(--green);}
.set-check.done{background:linear-gradient(160deg,#FFD666,var(--gold));border-color:var(--gold);color:#08090B;box-shadow:0 0 12px var(--gold-glow),inset 0 1px 0 rgba(255,255,255,.45);}
.ex-done-text{text-decoration:line-through;color:var(--muted)!important;}
.ex-done-en{text-decoration:line-through;}

/* ─── STREAK ─── */
.streak-box{background:var(--bg3);border:1px solid var(--border2);border-radius:var(--radius-md);padding:16px;text-align:center;}
.streak-box .val{color:var(--yellow);}
.streak-msg{font-size:.78rem;color:var(--yellow);font-weight:700;margin-top:4px;}

/* ─── INSTALL BANNER ─── */
.install-banner{
  background:var(--bg3);
  border:1px solid rgba(255,90,82,.2);border-radius:var(--radius-md);
  padding:14px 16px;margin-bottom:20px;display:flex;align-items:center;justify-content:space-between;gap:12px;
}
.install-banner-text{font-size:.83rem;color:var(--muted2);line-height:1.55;}
.install-banner-text strong{color:var(--text);}
.install-banner-actions{display:flex;gap:8px;align-items:center;flex-shrink:0;}
.install-banner-btn{background:linear-gradient(160deg,#FFD666,var(--gold));color:#08090B;border:none;border-radius:999px;padding:8px 18px;font-size:.82rem;font-weight:700;cursor:pointer;font-family:var(--font-d);white-space:nowrap;letter-spacing:.3px;}
.install-banner-dismiss{background:none;border:none;color:var(--muted);cursor:pointer;font-size:1rem;padding:4px 8px;}

/* ─── EMOJI REMOVAL ─── */
.nav-icon svg{display:block;}
.day-cell .dc-icon{display:none;}
.card-head h2 .emoji-prefix{display:none;}

/* ─── FOOD TRACKER ─── */
.food-macro-bars{margin-bottom:20px;}
.fmb-row{margin-bottom:14px;}
.fmb-top{display:flex;justify-content:space-between;font-size:.82rem;margin-bottom:6px;}
.fmb-label{font-weight:700;}
.fmb-vals{color:var(--muted);}
.fmb-track{height:8px;background:rgba(255,255,255,.06);border-radius:999px;overflow:hidden;}
.fmb-fill{height:100%;border-radius:999px;transition:width .5s var(--ease-out);}
.fmb-over{background:var(--red)!important;}
.food-search-wrap{position:relative;margin-bottom:12px;}
.food-search{width:100%;background:var(--glass);border:1px solid var(--border2);border-radius:var(--radius-md);padding:10px 14px;color:var(--text);font-family:var(--font);font-size:.9rem;}
.food-search:focus{outline:none;border-color:var(--blue);box-shadow:0 0 0 3px var(--blue-glow);}
.food-dropdown{position:absolute;top:100%;right:0;left:0;background:rgba(8,8,8,.98);border:1px solid var(--border2);border-radius:var(--radius-md);z-index:50;max-height:220px;overflow-y:auto;display:none;box-shadow:0 16px 48px rgba(0,0,0,.7);backdrop-filter:blur(12px);}
.food-dropdown.show{display:block;}
.food-option{padding:10px 14px;cursor:pointer;font-size:.87rem;border-bottom:1px solid var(--border);transition:background .15s;}
.food-option:last-child{border-bottom:none;}
.food-option:hover{background:var(--glass-h);}
.food-option .fo-macros{font-size:.72rem;color:var(--muted);margin-top:2px;}
.food-option .fo-src{font-size:.7rem;margin-inline-start:6px;opacity:.7;}
.food-option.fo-loading{color:var(--muted);font-size:.78rem;cursor:default;font-style:italic;}
.food-option.fo-loading:hover{background:none;}
.food-log-entry{display:flex;align-items:center;justify-content:space-between;padding:10px 14px;background:var(--glass);border:1px solid var(--glass-b);border-radius:var(--radius-md);margin-bottom:8px;gap:10px;}
.fle-name{font-weight:600;font-size:.88rem;flex:1;}
.fle-amount{font-size:.75rem;color:var(--muted);margin-top:2px;}
.fle-macros{font-size:.74rem;color:var(--muted2);display:flex;gap:8px;flex-shrink:0;}
.fle-del{background:none;border:none;color:var(--muted);cursor:pointer;font-size:.9rem;padding:2px 6px;border-radius:4px;flex-shrink:0;transition:color .15s;}
.fle-del:hover{color:var(--red);}
.food-qty-wrap{display:flex;gap:8px;align-items:center;margin-bottom:12px;}
.food-qty-input{background:var(--glass);border:1px solid var(--border2);border-radius:var(--radius-sm);padding:8px 12px;color:var(--text);font-family:var(--font);font-size:.88rem;width:90px;text-align:center;}
.food-qty-input:focus{outline:none;border-color:var(--blue);}
.food-add-btn{background:var(--lime);border:none;color:#000;border-radius:var(--radius-sm);padding:8px 16px;cursor:pointer;font-family:var(--font-d);font-size:.85rem;font-weight:800;white-space:nowrap;letter-spacing:.3px;}
.custom-food-form{background:var(--glass);border:1px solid var(--glass-b);border-radius:var(--radius-md);padding:14px;margin-top:12px;display:none;}
.custom-food-form.show{display:block;}
.cfg-grid{display:grid;grid-template-columns:1fr 1fr 1fr 1fr;gap:8px;margin-bottom:10px;}
.cfg-input{background:rgba(255,255,255,.04);border:1px solid var(--border2);border-radius:var(--radius-sm);padding:7px 10px;color:var(--text);font-family:var(--font);font-size:.82rem;width:100%;text-align:center;}
.cfg-input:focus{outline:none;border-color:var(--blue);}

/* ─── AI CHAT ─── */
.chat-wrap{display:flex;flex-direction:column;height:60vh;min-height:400px;}
.chat-msgs{flex:1;overflow-y:auto;padding:16px;display:flex;flex-direction:column;gap:10px;background:var(--glass);border:1px solid var(--glass-b);border-radius:var(--radius-md);margin-bottom:12px;}
.chat-bubble{max-width:85%;padding:10px 14px;border-radius:var(--radius-md);font-size:.87rem;line-height:1.72;}
.chat-bubble.user{align-self:flex-start;background:rgba(255,255,255,.06);border:1px solid var(--border2);}
.chat-bubble.ai{align-self:flex-end;background:var(--bg3);border:1px solid rgba(204,255,0,.22);}
.chat-bubble.typing{align-self:flex-end;color:var(--muted);font-style:italic;}
.chat-input-wrap{display:flex;gap:8px;}
.chat-input{flex:1;background:var(--glass);border:1px solid var(--border2);border-radius:var(--radius-md);padding:10px 14px;color:var(--text);font-family:var(--font);font-size:.88rem;resize:none;}
.chat-input:focus{outline:none;border-color:var(--blue);box-shadow:0 0 0 3px var(--blue-glow);}
.chat-send{background:linear-gradient(160deg,#FFD666,var(--gold));border:none;color:#08090B;border-radius:var(--radius-md);padding:10px 20px;cursor:pointer;font-family:var(--font-d);font-size:.88rem;font-weight:700;white-space:nowrap;letter-spacing:.3px;transition:opacity .2s;}
.chat-send:disabled{opacity:.4;cursor:default;}
.api-key-notice{background:rgba(255,255,255,.04);border:1px solid rgba(204,255,0,.28);border-radius:var(--radius-md);padding:12px 14px;font-size:.83rem;color:var(--muted2);margin-bottom:12px;line-height:1.72;}
.api-key-notice a{color:var(--cyan);}

/* ─── TRAINING LOG ─── */
.elog-section{margin-bottom:24px;}
.elog-section-title{font-family:var(--font-d);font-size:.75rem;font-weight:800;letter-spacing:2px;text-transform:uppercase;padding:8px 12px;border-radius:var(--radius-sm);margin-bottom:8px;}
.elog-row{display:flex;align-items:center;gap:10px;padding:12px 14px;background:var(--glass);border:1px solid var(--glass-b);border-radius:var(--radius-md);margin-bottom:8px;flex-wrap:wrap;transition:border-color .2s;}
.elog-row:hover{border-color:var(--border2);}
.elog-ex-info{flex:1;min-width:140px;}
.elog-ex-name{font-weight:700;font-size:.9rem;}
.elog-ex-en{font-size:.71rem;color:var(--muted);margin-top:1px;}
.elog-history{font-size:.74rem;color:var(--muted2);margin-top:4px;display:flex;gap:6px;flex-wrap:wrap;align-items:center;}
.elog-hist-chip{background:var(--glass);border:1px solid var(--border);border-radius:999px;padding:2px 8px;font-size:.71rem;white-space:nowrap;}
.elog-hist-chip.latest{border-color:var(--cyan);color:var(--cyan);}
.elog-inputs{display:flex;gap:6px;align-items:center;flex-shrink:0;}
.elog-input{background:rgba(255,255,255,.06);border:1px solid var(--border2);border-radius:var(--radius-sm);padding:6px 8px;color:var(--text);font-family:var(--font-d);font-size:.92rem;width:68px;text-align:center;font-weight:700;}
.elog-input:focus{outline:none;border-color:var(--blue);}
.elog-x{color:var(--muted);font-size:.8rem;}
.elog-save{background:var(--gold);border:none;color:#08090B;border-radius:var(--radius-sm);padding:6px 12px;cursor:pointer;font-family:var(--font-d);font-size:.8rem;font-weight:700;white-space:nowrap;letter-spacing:.3px;transition:all .2s;}
.elog-save:hover{background:#E0A930;}
.elog-save:active{transform:scale(.95);}
.elog-coach-tip{font-size:.74rem;line-height:1.55;margin-top:6px;padding:5px 9px;border-radius:var(--radius-sm);background:rgba(255,255,255,.04);border:1px solid var(--border);}
.elog-tip-increase{border-color:rgba(61,255,149,.3);color:var(--green);}
.elog-tip-almost{border-color:rgba(61,255,149,.2);color:var(--green);}
.elog-tip-change{border-color:rgba(204,255,0,.3);color:var(--yellow);}
.elog-tip-decrease{border-color:rgba(255,90,82,.3);color:var(--red);}
.elog-inc-btn{background:var(--glass);border:1px solid var(--border2);color:var(--text);border-radius:var(--radius-xs);width:26px;height:26px;cursor:pointer;font-size:.9rem;font-weight:700;display:flex;align-items:center;justify-content:center;flex-shrink:0;transition:all .18s;}
.elog-inc-btn:hover{border-color:var(--blue);color:var(--blue);}
.ex-last-log{font-size:.7rem;color:var(--cyan);margin-top:3px;display:inline-flex;align-items:center;gap:4px;}
.ex-last-log span{background:rgba(255,255,255,.06);border:1px solid rgba(204,255,0,.22);border-radius:999px;padding:1px 7px;}

/* ─── PR SECTION ─── */
.pr-section{background:var(--glass);border:1px solid var(--glass-b);border-radius:var(--radius-md);padding:14px;margin-top:16px;}
.pr-title{font-size:.73rem;font-weight:700;color:var(--muted);text-transform:uppercase;letter-spacing:1.2px;margin-bottom:10px;display:flex;align-items:center;gap:6px;}
.pr-inputs{display:flex;gap:8px;align-items:center;flex-wrap:wrap;}
.pr-input{background:rgba(255,255,255,.06);border:1px solid var(--border2);border-radius:var(--radius-sm);padding:7px 10px;color:var(--text);font-family:var(--font-d);font-size:.92rem;width:80px;text-align:center;font-weight:700;}
.pr-input:focus{outline:none;border-color:var(--blue);}
.pr-x{color:var(--muted);font-size:.85rem;}
.pr-save-btn{background:var(--gold);border:none;color:#08090B;border-radius:var(--radius-sm);padding:7px 14px;cursor:pointer;font-family:var(--font-d);font-size:.82rem;font-weight:700;white-space:nowrap;letter-spacing:.3px;}
.pr-display{font-size:.85rem;margin-top:8px;font-weight:600;min-height:20px;}

/* ─── CELEBRATION MODAL ─── */
.celebrate-overlay{position:fixed;inset:0;background:rgba(0,0,0,.88);z-index:500;display:none;align-items:center;justify-content:center;padding:20px;backdrop-filter:blur(12px);}
.celebrate-overlay.show{display:flex;}
.celebrate-box{background:rgba(10,10,10,.98);border:1px solid rgba(61,255,149,.3);border-radius:var(--radius-xl);padding:40px 32px;text-align:center;max-width:320px;width:100%;box-shadow:0 0 60px var(--green-glow);}
.celebrate-emoji{font-size:4rem;margin-bottom:12px;}
.celebrate-title{font-family:var(--font-d);font-size:1.5rem;font-weight:900;margin-bottom:8px;color:var(--green);letter-spacing:-.3px;}
.celebrate-sub{font-size:.9rem;color:var(--muted2);line-height:1.75;margin-bottom:24px;}
.celebrate-close{background:linear-gradient(160deg,#3DFF95,#4CBF72);color:#04150A;border:none;border-radius:999px;padding:12px 32px;font-size:.95rem;font-weight:700;cursor:pointer;font-family:var(--font-d);letter-spacing:.3px;}

/* ─── SETTINGS ─── */
.settings-field{margin-bottom:16px;}
.settings-label{font-size:.72rem;font-weight:700;color:var(--muted);margin-bottom:6px;text-transform:uppercase;letter-spacing:.8px;display:block;}
.settings-input{width:100%;background:var(--glass);border:1px solid var(--border2);border-radius:var(--radius-md);padding:10px 14px;color:var(--text);font-family:var(--font);font-size:.9rem;transition:border-color .2s,box-shadow .2s;}
.settings-input:focus{outline:none;border-color:var(--blue);box-shadow:0 0 0 3px var(--blue-glow);}
.settings-input:focus,.form-input:focus,input[type="number"]:focus,input[type="text"]:focus,textarea:focus{
  outline:none;
  border-color:var(--blue) !important;
  box-shadow:0 0 0 3px rgba(204,255,0,.18);
  transition:box-shadow .15s ease,border-color .15s ease;
}
input:invalid:not(:placeholder-shown),
select:invalid:not(:placeholder-shown){
  border-color:var(--red) !important;
  box-shadow:0 0 0 2px rgba(255,90,82,.15);
}
.settings-save{background:var(--lime);color:#000;border:none;border-radius:999px;padding:11px 28px;cursor:pointer;font-family:var(--font-d);font-size:.92rem;font-weight:900;letter-spacing:.4px;transition:opacity .2s;}
.settings-save:hover{opacity:.85;}
.bmr-display{background:var(--glass);border:1px solid var(--glass-b);border-radius:var(--radius-md);padding:12px 14px;font-size:.84rem;color:var(--muted2);margin-top:12px;line-height:1.85;}
.bmr-display strong{color:var(--text);}

/* ─── WEIGHT CHART ─── */
.weight-chart-wrap{width:100%;overflow-x:auto;}
.weight-log-form{display:flex;gap:8px;margin-bottom:16px;flex-wrap:wrap;}
.wl-input{background:var(--glass);border:1px solid var(--border2);border-radius:var(--radius-sm);padding:8px 12px;color:var(--text);font-family:var(--font);font-size:.85rem;}
.wl-input:focus{outline:none;border-color:var(--blue);}
.weight-add-btn{background:var(--lime);border:none;color:#000;border-radius:var(--radius-sm);padding:8px 16px;cursor:pointer;font-family:var(--font-d);font-size:.85rem;font-weight:800;white-space:nowrap;letter-spacing:.3px;}
.wlog-entry{display:flex;justify-content:space-between;align-items:center;padding:8px 0;border-bottom:1px solid var(--border);font-size:.84rem;}
.wlog-entry:last-child{border-bottom:none;}
.wlog-del{background:none;border:none;color:var(--muted);cursor:pointer;font-size:.9rem;padding:2px 6px;border-radius:4px;transition:color .15s;}
.wlog-del:hover{color:var(--red);}

/* ─── PANEL ENTRANCE ─── */
@keyframes cardFade{
  from{opacity:0;transform:translateY(8px)}
  to{opacity:1;transform:translateY(0)}
}
/* Panel itself — no animation (children handle it) */
.panel.active{animation:cardFade .25s var(--ease-out);}

/* ─── STAGGERED CARD ENTRANCE ─── */
/* opacity+translateY only — no position/backdrop-filter (WebKit sidebar bug) */
@keyframes cardStagger{from{opacity:0;transform:translateY(14px)}to{opacity:1;transform:none}}
.panel.active>.card,
.panel.active>.trainer-note,
.panel.active>.today-hero,
.panel.active>.boss-card,
.panel.active>.install-banner,
.panel.active>.notif-card,
.panel.active>.deload-banner{
  opacity:0;animation:cardStagger .38s var(--ease-out) both;
}
.panel.active>*:nth-child(1){animation-delay:.04s;}
.panel.active>*:nth-child(2){animation-delay:.09s;}
.panel.active>*:nth-child(3){animation-delay:.14s;}
.panel.active>*:nth-child(4){animation-delay:.19s;}
.panel.active>*:nth-child(5){animation-delay:.24s;}
.panel.active>*:nth-child(n+6){animation-delay:.29s;}

/* ─── UNIVERSAL BUTTON PRESS ─── */
.food-add-btn:active,.pr-save-btn:active,.settings-save:active,
.weight-add-btn:active,.meas-save-btn:active,.chat-send:active,
.boss-add-btn:active,.notif-btn:active,.gym-nav-btn:active,
.install-banner-btn:active,.elog-empty-cta:active{
  transform:scale(.96);transition-duration:.08s;
}

/* ─── SET CHECKBOX SPRING POP ─── */
.set-check.done{animation:microPop .45s var(--ease-spring) both;will-change:transform;}
@keyframes microPop{0%{transform:scale(.92);opacity:.7}65%{transform:scale(1.06)}100%{transform:scale(1);opacity:1}}
.gym-check.done{animation:microPop .45s var(--ease-spring) both;will-change:transform;}

/* ─── CHAT TYPING DOTS ─── */
.typing-dots{display:inline-flex;align-items:center;gap:4px;padding:4px 0;}
.typing-dots span{width:6px;height:6px;border-radius:50%;background:var(--muted2);
  animation:typingBounce .9s var(--ease-out) infinite;}
.typing-dots span:nth-child(2){animation-delay:.15s;}
.typing-dots span:nth-child(3){animation-delay:.30s;}
@keyframes typingBounce{
  0%,80%,100%{transform:translateY(0);opacity:.4}
  40%{transform:translateY(-6px);opacity:1}
}

/* ─── UNIVERSAL INPUT FOCUS GLOW ─── */
.elog-input:focus,.food-qty-input:focus,.pr-input:focus,.cfg-input:focus,.wl-input:focus{
  outline:none;border-color:var(--blue);box-shadow:0 0 0 3px var(--blue-glow);
  transition:border-color .18s,box-shadow .18s;
}

/* ─── PR SAVE ANIMATION ─── */
@keyframes prSaveFlash{
  0%{transform:scale(1)}
  30%{transform:scale(1.08);box-shadow:0 0 24px rgba(204,255,0,.5)}
  60%{transform:scale(.96)}
  100%{transform:scale(1)}
}
.pr-display.saved-flash{animation:prDisplayPop .4s var(--ease-spring) both;}
@keyframes prDisplayPop{from{transform:scale(.95);opacity:.4}to{transform:scale(1);opacity:1}}

/* ─── PANEL TITLE FADE ─── */
.page-title{transition:opacity .18s,transform .18s var(--ease-out);}
.page-title.switching{opacity:0;transform:translateY(-5px);}

/* ─── FOOD DROPDOWN SLIDE ─── */
.food-dropdown{
  display:block!important;visibility:hidden;opacity:0;
  transform:translateY(-6px) scaleY(.97);transform-origin:top center;
  transition:opacity .18s var(--ease-out),transform .22s var(--ease-spring),visibility 0s .2s;
  pointer-events:none;
}
.food-dropdown.show{
  visibility:visible;opacity:1;transform:none;
  transition:opacity .18s var(--ease-out),transform .22s var(--ease-spring),visibility 0s 0s;
  pointer-events:auto;
}

/* ─── SETTINGS SAVE PULSE ─── */
@keyframes settingsSavePulse{
  0%{transform:scale(1)}
  35%{transform:scale(1.06);box-shadow:0 0 24px rgba(255,90,82,.4)}
  65%{transform:scale(.97)}
  100%{transform:scale(1)}
}

/* ─── WILL-CHANGE HINTS ─── */
.xp-fill{will-change:width;}
.boss-fill{will-change:width;}
.set-check{will-change:transform,box-shadow;}
.gym-check{will-change:transform,box-shadow;}
.today-hero{will-change:transform;}
.stat-box{will-change:transform;}
.levelup-toast{will-change:transform,opacity;}

/* ─── BOTTOM NAV — always fixed, centered with app-frame ─── */
.mobile-bottom-nav{
  display:flex;
  position:fixed;bottom:0;
  /* Align with the .app-frame (max-width:520px, centered) */
  left:50%;transform:translateX(-50%);
  width:100%;max-width:520px;
  height:80px;
  background:rgba(6,6,8,.82);
  backdrop-filter:blur(14px) saturate(160%);
  -webkit-backdrop-filter:blur(14px) saturate(160%);
  border-top:1px solid rgba(255,255,255,.08);
  align-items:center;justify-content:space-around;
  padding:0 8px;
  z-index:150;
}
/* Cover the home-indicator safe area below the nav */
.mobile-bottom-nav::after{
  content:'';position:absolute;top:100%;left:0;right:0;
  height:env(safe-area-inset-bottom,34px);
  background:rgba(6,6,8,.82);
}
.mbn-item{
  display:flex;flex-direction:column;align-items:center;gap:3px;
  padding:8px 10px;border-radius:var(--radius-md);cursor:pointer;border:none;background:transparent;
  -webkit-tap-highlight-color:transparent;transition:transform .18s var(--ease-spring),background .18s;
  min-width:52px;
}
.mbn-item:active{transform:scale(.88);}
.mbn-item.active{background:rgba(255,255,255,.06);}
.mbn-icon{width:24px;height:24px;stroke:var(--muted);fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;transition:stroke .18s;display:block;}
.mbn-item.active .mbn-icon{stroke:var(--gold);filter:drop-shadow(0 0 6px var(--gold-glow));}
.mbn-label{font-size:.55rem;font-weight:700;color:var(--muted);transition:color .18s;letter-spacing:.03em;white-space:nowrap;}
.mbn-item.active .mbn-label{color:var(--gold);text-shadow:0 0 10px var(--gold-glow);}

/* ─── DASH WEEK CAROUSEL ─── */
.dash-week-scroll{display:flex;gap:8px;overflow-x:auto;scrollbar-width:none;padding-bottom:2px;}
.dash-week-scroll::-webkit-scrollbar{display:none;}
.dash-day-chip{
  display:flex;flex-direction:column;align-items:center;gap:4px;
  padding:10px 8px;border-radius:var(--radius-lg);border:1px solid var(--border);background:var(--bg3);
  cursor:pointer;flex-shrink:0;width:54px;transition:all .2s var(--ease-spring);
  position:relative;
}
.dash-day-chip:active{transform:scale(.93);}
.dash-day-chip.ddc-active{background:var(--lime-dim);border-color:rgba(204,255,0,.32);box-shadow:0 0 14px var(--lime-glow);}
.dash-day-chip.ddc-done{border-color:rgba(61,255,149,.35);background:rgba(61,255,149,.06);}
.dash-day-chip.ddc-rest{opacity:.45;}
.ddc-emoji{font-size:1rem;line-height:1;}
.ddc-name{font-size:.5rem;font-weight:800;color:var(--muted);letter-spacing:.04em;text-transform:uppercase;}
.ddc-type{font-size:.56rem;font-weight:700;line-height:1;}
.ddc-active .ddc-type{color:var(--lime);}
.ddc-done .ddc-type{color:var(--green);}
.ddc-rest .ddc-type,.ddc-default .ddc-type{color:var(--muted2);}
.ddc-dot{position:absolute;top:7px;width:5px;height:5px;border-radius:50%;background:var(--lime);}

/* ─── TIPS CARD ─── */
.tips-card{background:var(--bg3);border:1px solid rgba(204,255,0,.22);border-radius:var(--r);padding:16px;display:flex;align-items:flex-start;gap:12px;position:relative;overflow:hidden;}
.tips-card::before{content:'';position:absolute;top:0;right:0;width:80px;height:80px;background:radial-gradient(circle at top right,rgba(255,255,255,.06),transparent 65%);pointer-events:none;}
.tips-icon-wrap{width:36px;height:36px;background:rgba(255,255,255,.06);border:1px solid rgba(204,255,0,.25);border-radius:var(--radius-sm);display:flex;align-items:center;justify-content:center;font-size:1.1rem;flex-shrink:0;}
.tips-body{flex:1;min-width:0;}
.tips-label{font-size:.65rem;font-weight:800;color:rgba(204,255,0,.8);text-transform:uppercase;letter-spacing:.08em;margin-bottom:4px;}
.tips-text{font-size:.82rem;color:rgba(255,255,255,.8);line-height:1.65;font-weight:500;}
.tips-text strong{color:var(--yellow);font-weight:800;}
.tips-dismiss{background:none;border:none;color:var(--muted2);font-size:.85rem;cursor:pointer;padding:0;line-height:1;flex-shrink:0;transition:color .2s;}
.tips-dismiss:hover{color:var(--muted);}

/* ─── DASH MEAL PREVIEW ─── */
.dash-meals-row{display:grid;grid-template-columns:1fr 1fr;gap:12px;}
.dash-meal-card{
  background:var(--bg3);border:1px solid var(--border);border-radius:var(--radius-lg);
  padding:14px 13px;cursor:pointer;transition:transform .18s var(--ease-spring),border-color .18s;
}
.dash-meal-card:active{transform:scale(.97);}
.dash-meal-card.dmc-done{opacity:.6;border-color:rgba(61,255,149,.2);}
.dash-meal-card.dmc-next{border-color:rgba(204,255,0,.30);background:var(--bg3);}
.dmc-status{display:flex;align-items:center;gap:5px;margin-bottom:7px;font-size:.62rem;font-weight:800;letter-spacing:.05em;text-transform:uppercase;}
.dmc-done-mark{color:var(--green);}
.dmc-next-dot{width:5px;height:5px;border-radius:50%;background:var(--coral);animation:pulseDot 1.5s ease-in-out infinite;}
.dmc-next-lbl{color:var(--coral);}
.dmc-time{font-size:.64rem;font-weight:700;color:var(--muted);margin-bottom:4px;}
.dmc-name{font-size:.82rem;font-weight:800;line-height:1.2;margin-bottom:8px;}
.dmc-macros{display:flex;gap:5px;flex-wrap:wrap;}
.dmc-pill{font-size:.58rem;font-weight:700;padding:2px 6px;border-radius:999px;}
.dmc-pill.lime{background:var(--lime-dim);color:var(--lime);}
.dmc-pill.coral{background:var(--coral-dim);color:var(--coral);}
.dmc-pill.muted{background:rgba(255,255,255,.06);color:var(--muted);}
@keyframes pulseDot{0%,100%{transform:scale(1);opacity:1;}50%{transform:scale(1.4);opacity:.6;}}

/* ─── CONCENTRIC RINGS ─── */
.ring-row{display:flex;align-items:center;gap:8px;}
.rdot{width:7px;height:7px;border-radius:50%;flex-shrink:0;}
.lime-dot{background:var(--lime);box-shadow:0 0 6px var(--lime-glow);}
.coral-dot{background:var(--coral);box-shadow:0 0 6px var(--coral-glow);}
.rlbl{font-size:.78rem;color:var(--muted);font-weight:600;flex:1;}
.rval{font-size:.82rem;font-weight:700;color:var(--text);}

/* ─── ELOG EMPTY STATE ─── */
.elog-empty-state{display:flex;flex-direction:column;align-items:center;text-align:center;padding:60px 24px;animation:cardStagger .4s var(--ease-out) both;}
.elog-empty-icon{font-size:3.5rem;margin-bottom:16px;}
.elog-empty-title{font-family:var(--font-d);font-size:1.4rem;font-weight:900;letter-spacing:-.4px;margin-bottom:8px;}
.elog-empty-sub{font-size:.86rem;color:var(--muted2);line-height:1.85;max-width:280px;margin-bottom:28px;}
.elog-empty-cta{background:linear-gradient(160deg,#FFD666,var(--gold));color:#08090B;border:none;border-radius:999px;padding:12px 28px;cursor:pointer;font-family:var(--font-d);font-size:.95rem;font-weight:700;letter-spacing:.3px;transition:transform .18s var(--ease-spring),opacity .18s;}
.elog-empty-cta:hover{opacity:.9;transform:translateY(-2px);}

/* ─── Global empty state ─── */
.empty-state{display:flex;flex-direction:column;align-items:center;text-align:center;padding:48px 24px;animation:cardStagger .4s var(--ease-out) both;}
.empty-state-icon{font-size:3rem;margin-bottom:14px;opacity:.7;}
.empty-state-title{font-family:var(--font-d);font-size:1.2rem;font-weight:800;margin-bottom:8px;}
.empty-state-sub{font-size:.84rem;color:var(--muted);line-height:1.8;max-width:260px;}

/* ─── Onboarding step indicator ─── */
.ob-steps{display:flex;justify-content:center;gap:8px;margin-bottom:20px;}
.ob-step-dot{width:8px;height:8px;border-radius:50%;background:var(--border2);transition:background .3s,transform .3s;}
.ob-step-dot.active{background:var(--lime);transform:scale(1.35);}
.ob-step-dot.done{background:var(--lime);opacity:.45;}

/* ─── 375px MOBILE BREAKPOINT ─── */

/* ─── REDUCED MOTION ─── */
@media(prefers-reduced-motion:reduce){
  *,*::before,*::after{
    animation-duration:.01ms!important;
    animation-iteration-count:1!important;
    transition-duration:.01ms!important;
    scroll-behavior:auto!important;
  }
}

@media(max-width:768px){
  .today-hero{padding:28px 22px;min-height:150px;}
  .today-hero-info .today-hero-title{font-size:2.4rem;}
  .today-hero-emoji{font-size:4.5rem;left:12px;}
  .today-hero-info .today-hero-sub{font-size:.82rem;}
  .sidebar{transform:translateX(100%);width:80vw;max-width:280px;}
  .sidebar.open{transform:translateX(0);}
  .sidebar-close{display:flex;}
  .main{margin-right:0;}
  .topbar{padding:12px 16px;padding-top:calc(12px + env(safe-area-inset-top));}
  .content{padding:14px;}
  .grid-4{grid-template-columns:repeat(2,1fr);}
  .grid-3{grid-template-columns:1fr;}
  .hamburger{display:block;}
  .stats-chips{display:none;}
  .week-bar{gap:4px;}
  .day-cell{padding:10px 3px;}
  .day-cell .dc-label{display:none;}
  .card-body{padding:14px;}
  .card-head{padding:14px 16px;}
  .ex-table td{padding:10px 8px;}
  .ex-table th{padding:8px;}
}
@media(max-width:480px){
  .grid-4{grid-template-columns:repeat(2,1fr);}
  .grid-2{grid-template-columns:1fr;}
}
@media(max-width:375px){
  .week-bar{gap:3px;}
  .day-cell{padding:8px 2px 6px;border-radius:var(--radius-sm);}
  .day-cell .dc-name{font-size:.52rem;}
  .day-cell .dc-type{font-size:.6rem;}
  .elog-input{width:52px;font-size:.82rem;padding:5px 6px;}
  .elog-save{width:100%;margin-top:4px;}
  .card-body{padding:10px;}
  .card-head{padding:12px 14px;}
  .stat-box .val{font-size:2rem;}
  .cals-hero-num{font-size:3.2rem;}
  .page-title{font-size:1.1rem;max-width:55vw;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
  .grid-2{grid-template-columns:1fr;}
}

/* ─── HERO CALORIES BOX ─── */
.cals-hero{
  display:flex;align-items:flex-start;justify-content:space-between;
  background:var(--bg3);
  border:1px solid rgba(255,90,82,.22);border-radius:var(--radius-lg);
  padding:22px 24px;
}
.cals-hero-main{display:flex;align-items:baseline;gap:10px;}
.cals-hero-num{
  font-family:var(--font-d);font-size:4.5rem;font-weight:900;
  color:var(--red);letter-spacing:-3px;line-height:1;
}
.cals-hero-unit{font-size:.85rem;color:var(--muted2);font-weight:600;padding-bottom:6px;}

/* ─── XP / LEVEL WIDGET ─── */
.level-widget{
  display:flex;align-items:center;gap:16px;
  background:var(--bg3);
  border:1px solid rgba(204,255,0,.2);border-radius:var(--radius-lg);
  padding:16px 20px;margin-bottom:14px;cursor:default;
  position:relative;overflow:hidden;
}
.level-widget::before{
  content:'';position:absolute;inset:0;pointer-events:none;
  background:radial-gradient(ellipse at 0% 50%,rgba(255,255,255,.04),transparent 60%);
}
.level-badge-chip{
  font-family:var(--font-d);font-size:1rem;font-weight:900;letter-spacing:1px;
  width:52px;height:52px;border-radius:var(--radius-md);flex-shrink:0;
  background:linear-gradient(135deg,#FFD666,var(--gold));
  color:#000;display:flex;align-items:center;justify-content:center;
  box-shadow:0 4px 16px rgba(204,255,0,.3);
}
.xp-info{flex:1;min-width:0;}
.xp-name-row{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:8px;}
.xp-name{font-family:var(--font-d);font-size:1rem;font-weight:800;color:var(--yellow);letter-spacing:-.2px;}
.xp-nums{font-size:.72rem;color:var(--muted);font-weight:500;}
.xp-track{height:7px;background:rgba(255,255,255,.07);border-radius:999px;overflow:hidden;}
.xp-fill{
  height:100%;border-radius:999px;
  background:linear-gradient(90deg,var(--hot),var(--gold));
  transition:width .8s var(--ease-out);
  position:relative;
}
.xp-fill::after{content:'';position:absolute;inset:0;background:linear-gradient(90deg,rgba(255,255,255,.2),transparent);border-radius:999px;}

/* ─── LEVEL-UP TOAST ─── */
.levelup-toast{position:fixed;top:80px;left:50%;transform:translateX(-50%) translateY(-20px);background:linear-gradient(135deg,#FFD666,var(--gold));color:#000;font-family:var(--font-d);font-weight:900;font-size:1rem;letter-spacing:.5px;padding:12px 28px;border-radius:999px;z-index:650;opacity:0;transition:all .4s var(--ease-spring);pointer-events:none;white-space:nowrap;}
.levelup-toast.show{opacity:1;transform:translateX(-50%) translateY(0);}
.toast.toast-pr{background:linear-gradient(135deg,#FFD666,var(--gold));color:#000;font-weight:800;}

/* ─── BOSS CHALLENGE ─── */
.boss-card{
  background:var(--bg2);border:1px solid rgba(255,122,69,.28);
  border-radius:var(--radius-xl);padding:0;margin-bottom:24px;overflow:hidden;
  position:relative;
}
.boss-card-top{
  background:linear-gradient(135deg,rgba(255,122,69,.14) 0%,rgba(255,122,69,.04) 100%);
  padding:20px 20px 16px;border-bottom:1px solid rgba(255,122,69,.15);
  position:relative;overflow:hidden;
}
.boss-card-top::before{
  content:'';position:absolute;left:-40px;top:-40px;width:160px;height:160px;
  background:radial-gradient(circle,rgba(255,122,69,.14),transparent 70%);
  pointer-events:none;
}
.boss-header{display:flex;align-items:flex-start;gap:12px;margin-bottom:0;}
.boss-week-tag{
  font-size:.6rem;font-weight:900;letter-spacing:2px;text-transform:uppercase;
  padding:3px 10px;border-radius:999px;
  background:rgba(255,122,69,.15);color:var(--orange);
  margin-bottom:6px;display:inline-block;border:1px solid rgba(255,122,69,.25);
}
.boss-title{font-family:var(--font-d);font-size:1.2rem;font-weight:900;letter-spacing:-.4px;margin-bottom:3px;line-height:1.1;}
.boss-desc{font-size:.78rem;color:var(--muted2);}
.boss-icon{font-size:2.2rem;flex-shrink:0;line-height:1;}
.boss-card-bottom{padding:16px 20px;}
.boss-progress-row{display:flex;align-items:center;gap:12px;margin-bottom:12px;}
.boss-track{flex:1;height:10px;background:var(--bg4);border-radius:999px;overflow:hidden;}
.boss-fill{
  height:100%;border-radius:999px;
  background:linear-gradient(90deg,var(--hot),var(--gold));
  transition:width .7s var(--ease-out);position:relative;
}
.boss-fill::after{content:'';position:absolute;inset:0;background:linear-gradient(90deg,rgba(255,255,255,.2),transparent);border-radius:999px;}
.boss-vals{font-family:var(--font-d);font-size:1rem;font-weight:900;color:var(--orange);white-space:nowrap;}
.boss-add-btn{
  background:rgba(255,122,69,.1);border:1px solid rgba(255,122,69,.28);
  color:var(--orange);border-radius:var(--radius-sm);padding:8px 16px;cursor:pointer;
  font-size:.8rem;font-weight:700;font-family:var(--font-d);
  transition:all .18s;width:100%;
}
.boss-add-btn:hover{background:rgba(255,122,69,.2);transform:translateY(-1px);}
.boss-done-banner{display:flex;align-items:center;gap:8px;padding:8px 12px;background:rgba(61,255,149,.08);border:1px solid rgba(61,255,149,.25);border-radius:var(--radius-sm);font-size:.8rem;color:var(--green);font-weight:700;margin-bottom:10px;}

/* ─── DELOAD BANNER ─── */
.deload-banner{background:var(--bg3);border:1px solid rgba(255,122,69,.3);border-radius:var(--radius-md);padding:14px 16px;margin-bottom:20px;display:none;align-items:center;gap:12px;}
.deload-banner.show{display:flex;}
.deload-banner-text{flex:1;font-size:.83rem;line-height:1.6;color:var(--muted2);}
.deload-banner-text strong{color:var(--orange);}
.deload-dismiss{background:none;border:none;color:var(--muted);cursor:pointer;font-size:1rem;padding:4px 8px;flex-shrink:0;transition:color .2s;}
.deload-dismiss:hover{color:var(--text);}

/* ─── BODY HEATMAP ─── */
.heatmap-wrap{display:flex;align-items:center;gap:24px;flex-wrap:wrap;}
.heatmap-legend{flex:1;min-width:140px;}
.hm-row{display:flex;align-items:center;gap:8px;margin-bottom:8px;font-size:.8rem;}
.hm-dot{width:10px;height:10px;border-radius:50%;flex-shrink:0;}
.hm-label{flex:1;color:var(--muted2);}
.hm-status{font-size:.7rem;font-weight:700;white-space:nowrap;}

/* ─── ABS CARD ─── */
.abs-card{background:var(--bg3);border:1px solid rgba(61,255,149,.22);border-radius:var(--radius-md);padding:16px 18px;margin-top:12px;}
.abs-card-title{font-family:var(--font-d);font-size:.95rem;font-weight:800;color:var(--green);margin-bottom:10px;display:flex;align-items:center;gap:8px;}
.abs-row{display:flex;justify-content:space-between;align-items:center;padding:7px 0;border-bottom:1px solid rgba(255,255,255,.05);font-size:.85rem;}
.abs-row:last-child{border-bottom:none;}
.abs-row-name{color:var(--text);font-weight:600;}
.abs-row-sets{color:var(--muted2);font-size:.78rem;}
/* ─── EXERCISE ALTERNATIVES ─── */
.alt-modal{position:fixed;inset:0;background:rgba(0,0,0,.88);z-index:450;display:none;align-items:flex-end;justify-content:center;backdrop-filter:blur(10px);}
.alt-modal.open{display:flex;}
.alt-box{background:#111;border:1px solid var(--border2);border-radius:22px 22px 0 0;padding:24px;width:100%;max-width:480px;}
.alt-title{font-family:var(--font-d);font-size:1rem;font-weight:800;margin-bottom:4px;}
.alt-sub{font-size:.78rem;color:var(--muted);margin-bottom:16px;}
/* A reference list, not a menu: nothing here is tappable, so nothing here
   advertises a tap. */
.alt-item{display:flex;align-items:center;justify-content:space-between;padding:12px 0;border-bottom:1px solid var(--border);}
.alt-item:last-child{border-bottom:none;}
.alt-item-name{font-weight:600;font-size:.9rem;}
.alt-item-tag{font-size:.72rem;color:var(--muted2);margin-top:2px;}
.alt-close-btn{width:100%;margin-top:14px;background:rgba(255,255,255,.06);border:1px solid var(--border2);color:var(--muted2);border-radius:var(--radius-md);padding:12px;cursor:pointer;font-family:var(--font-d);font-size:.88rem;font-weight:700;}
/* swap icon inside exercise rows */
.ex-swap-btn{background:none;border:1px solid var(--border);border-radius:999px;color:var(--muted2);font-size:.65rem;padding:6px 12px;min-height:36px;display:inline-flex;align-items:center;cursor:pointer;white-space:nowrap;transition:all .2s;margin-right:4px;}
.ex-swap-btn:hover{border-color:var(--blue);color:var(--blue);}
/* ─── WARMUP CARD ─── */
.warmup-card{background:rgba(255,122,69,.06);border:1px solid rgba(255,122,69,.2);border-radius:var(--radius-md);padding:14px 18px;margin-bottom:12px;}
.warmup-title{font-family:var(--font-d);font-size:.88rem;font-weight:800;color:var(--orange);margin-bottom:8px;}
.warmup-items{display:flex;flex-wrap:wrap;gap:6px;}
.warmup-item{background:rgba(255,122,69,.1);border:1px solid rgba(255,122,69,.18);border-radius:999px;padding:4px 12px;font-size:.76rem;color:var(--orange);}
/* ─── GYM MODE ─── */
.gym-overlay{position:fixed;inset:0;background:#000;z-index:400;display:none;flex-direction:column;align-items:stretch;}
.gym-overlay.open{display:flex;}
.gym-header{display:flex;align-items:center;justify-content:space-between;padding:20px 24px;flex-shrink:0;}
.gym-badge{font-family:var(--font-d);font-size:.7rem;font-weight:900;letter-spacing:3px;text-transform:uppercase;padding:5px 14px;border-radius:999px;border:1.5px solid;}
.gym-tempo-btn{background:rgba(255,255,255,.06);border:1px solid var(--border2);color:var(--muted2);border-radius:999px;padding:5px 12px;font-size:.72rem;cursor:pointer;font-family:var(--font-d);font-weight:700;letter-spacing:.5px;transition:all .2s;}
.gym-tempo-btn.on{background:rgba(255,255,255,.06);border-color:var(--cyan);color:var(--cyan);}
.gym-close{background:rgba(255,90,82,.12);border:1.5px solid rgba(255,90,82,.4);color:var(--red);height:36px;border-radius:999px;cursor:pointer;font-size:.78rem;font-family:var(--font-d);font-weight:800;letter-spacing:.5px;padding:0 16px;display:flex;align-items:center;gap:5px;transition:all .2s;}
.gym-close:hover{background:rgba(255,90,82,.22);border-color:var(--red);}
/* gym stopwatch */
.gym-stopwatch{font-family:var(--font-d);font-size:.82rem;font-weight:700;color:var(--muted2);letter-spacing:1px;}
/* gym set input popup */
.gym-set-popup{position:fixed;bottom:0;left:0;right:0;background:#111;border-top:1px solid var(--border2);border-radius:22px 22px 0 0;padding:24px 24px 36px;z-index:410;transform:translateY(100%);transition:transform .3s var(--ease-out);}
.gym-set-popup.show{transform:translateY(0);}
.gym-set-popup-title{font-family:var(--font-d);font-size:1rem;font-weight:800;margin-bottom:16px;color:var(--text);}
.gym-set-inputs{display:flex;align-items:center;gap:10px;margin-bottom:18px;}
.gym-set-input{background:var(--bg3);border:1px solid var(--border2);border-radius:var(--radius-sm);color:var(--text);font-size:1.1rem;font-weight:700;padding:12px;width:90px;text-align:center;}
.gym-set-x{color:var(--muted2);font-size:1.2rem;font-weight:700;}
.gym-set-save{background:var(--lime);color:#000;border:none;border-radius:999px;padding:13px 32px;cursor:pointer;font-family:var(--font-d);font-size:1rem;font-weight:900;width:100%;transition:opacity .18s;}
.gym-set-save:active{opacity:.8;}
.gym-body{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:20px 32px;text-align:center;}
.gym-counter{font-size:.72rem;color:var(--muted);letter-spacing:2.5px;margin-bottom:18px;font-weight:700;text-transform:uppercase;}
.gym-name{font-family:var(--font-d);font-size:clamp(2rem,8vw,4rem);font-weight:900;letter-spacing:-2px;line-height:1;margin-bottom:8px;}
.gym-name-en{font-size:clamp(.85rem,2.5vw,1.1rem);color:var(--muted2);margin-bottom:8px;}
.gym-muscle-tag{font-size:.72rem;color:var(--muted);margin-bottom:8px;}
.gym-pr-badge{display:inline-block;background:rgba(255,255,255,.06);border:1px solid rgba(204,255,0,.3);color:var(--yellow);font-size:.75rem;font-weight:800;padding:4px 12px;border-radius:999px;margin-bottom:16px;letter-spacing:.3px;}
.gym-sets-label{font-family:var(--font-d);font-size:1.1rem;font-weight:800;color:var(--yellow);margin-bottom:20px;letter-spacing:.3px;}
.gym-checks{display:flex;gap:12px;justify-content:center;margin-bottom:32px;flex-wrap:wrap;}
.gym-check{width:54px;height:54px;border-radius:var(--radius-md);border:2px solid rgba(255,255,255,.12);background:rgba(255,255,255,.04);cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:1.5rem;color:transparent;transition:all .25s var(--ease-spring);user-select:none;}
.gym-check:hover{border-color:rgba(255,255,255,.3);}
.gym-check.done{background:linear-gradient(160deg,#FFD666,var(--gold));color:#08090B;box-shadow:0 0 12px var(--gold-glow),inset 0 1px 0 rgba(255,255,255,.45);}
.gym-footer{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:20px 24px;flex-shrink:0;}
.gym-nav-btn{background:rgba(255,255,255,.06);border:1px solid var(--border2);color:var(--muted2);border-radius:var(--radius-md);padding:13px 22px;cursor:pointer;font-family:var(--font-d);font-size:.88rem;font-weight:700;letter-spacing:.5px;transition:all .2s;flex-shrink:0;}
.gym-nav-btn:disabled{opacity:.22;cursor:default;}
.gym-nav-btn.next{background:rgba(255,255,255,.08);color:var(--text);flex:1;font-size:.95rem;}
.gym-done-screen{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:40px;text-align:center;}
.gym-done-title{font-family:var(--font-d);font-size:3.5rem;font-weight:900;letter-spacing:-3px;color:var(--green);margin-bottom:8px;}
.gym-done-sub{font-size:1rem;color:var(--muted2);margin-bottom:12px;line-height:1.75;}
.gym-done-xp{font-family:var(--font-d);font-size:1.3rem;font-weight:800;color:var(--yellow);margin-bottom:32px;}
.gym-mode-btn{background:rgba(255,255,255,.05);border:1px solid var(--border2);color:var(--muted2);border-radius:999px;padding:7px 16px;cursor:pointer;font-size:.78rem;font-family:var(--font-d);font-weight:700;letter-spacing:.5px;transition:all .2s;display:inline-flex;align-items:center;gap:6px;}
.gym-mode-btn:hover{border-color:var(--red);color:var(--text);}

/* ─── SHARE MODAL ─── */
.share-overlay{position:fixed;inset:0;background:rgba(0,0,0,.88);z-index:350;display:none;align-items:center;justify-content:center;padding:20px;backdrop-filter:blur(16px);}
.share-overlay.open{display:flex;}
.share-box{background:rgba(14,14,14,.99);border:1px solid var(--border2);border-radius:var(--radius-xl);padding:28px;width:100%;max-width:420px;text-align:center;}
.share-title{font-family:var(--font-d);font-size:1.3rem;font-weight:800;margin-bottom:4px;letter-spacing:-.3px;}
.share-sub{font-size:.78rem;color:var(--muted);margin-bottom:18px;}
#share-canvas{border-radius:var(--radius-md);max-width:100%;border:1px solid var(--border);}
.share-actions{display:flex;gap:10px;margin-top:16px;justify-content:center;flex-wrap:wrap;}
.share-dl-btn{background:linear-gradient(160deg,#FFD666,var(--gold));color:#08090B;border:none;border-radius:999px;padding:10px 24px;cursor:pointer;font-family:var(--font-d);font-size:.88rem;font-weight:700;letter-spacing:.3px;}
.share-close-btn{background:none;border:1px solid var(--border2);color:var(--muted2);border-radius:999px;padding:10px 24px;cursor:pointer;font-family:var(--font-d);font-size:.88rem;font-weight:700;}

/* ─── VOICE CONTROL ─── */
.voice-btn{background:none;border:1px solid var(--border2);border-radius:999px;width:32px;height:32px;cursor:pointer;display:none;align-items:center;justify-content:center;color:var(--muted2);transition:all .2s;flex-shrink:0;}
.voice-btn.supported{display:flex;}
.voice-btn:hover{border-color:var(--red);color:var(--text);}
.voice-btn.listening{background:rgba(255,90,82,.1);border-color:var(--red);color:var(--red);animation:voicePulse 1.2s ease-in-out infinite;}
@keyframes voicePulse{0%,100%{box-shadow:0 0 0 0 var(--red-glow)}50%{box-shadow:0 0 0 8px transparent}}
.voice-toast{position:fixed;bottom:110px;left:50%;transform:translateX(-50%);background:rgba(8,8,8,.96);border:1px solid var(--border2);border-radius:999px;padding:10px 20px;font-size:.84rem;color:var(--text);z-index:370;display:none;white-space:nowrap;pointer-events:none;}
.voice-toast.show{display:block;}

/* ─── SHARE TOPBAR BTN ─── */
.topbar-icon-btn{background:none;border:1px solid var(--border2);border-radius:999px;width:44px;height:44px;cursor:pointer;display:flex;align-items:center;justify-content:center;color:var(--muted2);transition:all .2s;flex-shrink:0;position:relative;}
.topbar-icon-btn:hover{border-color:var(--red);color:var(--text);}
.topbar-right{display:flex;align-items:center;gap:8px;}

/* ─── NUTRITION TIMING ─── */
.timing-card{background:rgba(255,255,255,.04);border:1px solid rgba(204,255,0,.18);border-radius:var(--radius-md);padding:16px;margin-bottom:16px;}
.timing-head{font-size:.72rem;font-weight:800;letter-spacing:1.5px;text-transform:uppercase;color:var(--cyan);margin-bottom:12px;}
.timing-input-row{display:flex;align-items:center;gap:8px;margin-bottom:14px;}
.timing-time-input{background:rgba(255,255,255,.06);border:1px solid var(--border2);border-radius:var(--radius-sm);padding:7px 10px;color:var(--text);font-family:var(--font-d);font-size:.95rem;width:110px;}
.timing-time-input:focus{outline:none;border-color:var(--cyan);}
.timing-rows{display:flex;flex-direction:column;gap:8px;}
.timing-row{display:flex;align-items:center;gap:10px;font-size:.83rem;}
.timing-time-chip{font-family:var(--font-d);font-weight:800;font-size:.95rem;color:var(--cyan);min-width:56px;}
.timing-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0;}
.timing-label{color:var(--muted2);}

/* ─── 1RM IN MODAL ─── */
.orm-box{background:rgba(255,255,255,.04);border:1px solid rgba(204,255,0,.2);border-radius:var(--radius-sm);padding:10px 14px;margin-top:10px;font-size:.82rem;display:none;}
.orm-box.show{display:block;}
.orm-box strong{color:var(--blue);font-family:var(--font-d);font-size:1rem;}

/* ─── LIGHT THEME ─── */
[data-theme="light"]{
  --bg:#f0f2f5;--bg2:#ffffff;--bg3:#e8eaed;--bg4:#dde0e5;--bg5:#d0d3d9;
  --text:#0f1117;--muted:#4a5568;--muted2:#718096;
  --border:rgba(0,0,0,.08);--border2:rgba(0,0,0,.12);
  --glass:rgba(255,255,255,.7);--glass-b:rgba(255,255,255,.9);--glass-h:rgba(255,255,255,.6);
  --lime:#B8860B;--lime-dim:rgba(184,134,11,.12);--lime-glow:rgba(184,134,11,.22);
  --gold:#B8860B;--gold-dim:rgba(184,134,11,.12);--gold-glow:rgba(184,134,11,.22);--hot:#c47316;
  --red:#dc2626;--red-glow:rgba(220,38,38,.15);
  --blue:#2563eb;--blue-dim:rgba(37,99,235,.12);--blue-glow:rgba(37,99,235,.22);
  --cyan:#0891b2;--cyan-glow:rgba(8,145,178,.2);
  --yellow:#d97706;--yellow-glow:rgba(217,119,6,.2);
  --purple:#7c3aed;--purple-glow:rgba(124,58,237,.2);
  --orange:#ea580c;
  --push-c:#dc2626;--push-g:rgba(220,38,38,.1);
  --pull-c:#0891b2;--pull-g:rgba(8,145,178,.1);
  --legs-c:#7c3aed;--legs-g:rgba(124,58,237,.1);
  --arms-c:#d97706;--arms-g:rgba(217,119,6,.1);
}
[data-theme="light"] .sidebar{background:rgba(245,245,250,.98);}
[data-theme="light"] .topbar{background:rgba(242,242,247,.9);}
[data-theme="light"] .card{background:var(--bg2);}
[data-theme="light"] .mobile-bottom-nav{background:rgba(242,242,247,.95);border-top:1px solid rgba(0,0,0,.1);}
[data-theme="light"] .mobile-bottom-nav::after{background:rgba(242,242,247,.95);}
/* topbar elements with hardcoded dark colors */
[data-theme="light"] .topbar-appname{color:var(--text);}
[data-theme="light"] .topbar-avatar-ring{background:#e8f5e9;border-color:rgba(204,255,0,.55);box-shadow:0 0 10px rgba(255,255,255,.06);}
/* ── catch all inline-style dark hardcodes ── */
[data-theme="light"] [style*="background:#1A2330"]{background:var(--bg2)!important;border-color:var(--border)!important;}
[data-theme="light"] [style*="background:linear-gradient(135deg,#1A2330"]{background:linear-gradient(135deg,#e8edf5,#f0f4f9)!important;border-color:var(--border)!important;}
[data-theme="light"] [style*="color:#F8FAFC"]{color:var(--text)!important;}
[data-theme="light"] [style*="rgba(255,255,255,.06)"]{border-color:var(--border)!important;}
[data-theme="light"] [style*="rgba(255,255,255,.05)"]{background:var(--border)!important;}
[data-theme="light"] .topbar-level-badge{background:#e8f5e9;border-color:rgba(204,255,0,.4);}
/* dashboard stat cards */
[data-theme="light"] .dash-stat-card{background:var(--bg2);border-color:var(--border);}
[data-theme="light"] .dash-value{color:var(--text);}

/* ─── THEME TOGGLE ─── */
.theme-btn{background:none;border:1px solid var(--border2);border-radius:999px;width:44px;height:44px;cursor:pointer;display:flex;align-items:center;justify-content:center;color:var(--muted2);transition:all .2s;flex-shrink:0;font-size:.95rem;}
.theme-btn:hover{border-color:var(--yellow);color:var(--yellow);}

/* ─── CONFETTI ─── */
#confetti-canvas{position:fixed;inset:0;pointer-events:none;z-index:999;display:none;}

/* ─── PROGRESSIVE OVERLOAD BADGE ─── */
.overload-badge{font-size:.68rem;font-weight:900;font-family:var(--font-d);padding:1px 6px;border-radius:5px;margin-right:5px;vertical-align:middle;display:inline-block;}
.overload-up{color:var(--green);background:rgba(61,255,149,.15);}
.overload-down{color:var(--red);background:rgba(255,90,82,.15);}
.overload-eq{color:var(--muted);background:rgba(255,255,255,.06);}

/* ─── BODY MEASUREMENTS ─── */
.meas-form{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:14px;}
.meas-input{background:var(--glass);border:1px solid var(--border2);border-radius:var(--radius-sm);padding:8px 10px;color:var(--text);font-family:var(--font);font-size:.85rem;width:calc(50% - 4px);box-sizing:border-box;}
.meas-input:focus{outline:none;border-color:var(--purple);}
.meas-input::placeholder{color:var(--muted);}
.meas-save-btn{background:var(--gold);border:none;color:#08090B;border-radius:var(--radius-sm);padding:9px 18px;cursor:pointer;font-family:var(--font-d);font-weight:700;font-size:.85rem;width:100%;margin-top:2px;}
.meas-row{display:flex;align-items:flex-start;justify-content:space-between;padding:9px 0;border-bottom:1px solid var(--border);font-size:.83rem;gap:8px;}
.meas-row:last-child{border:none;}
.meas-date{color:var(--muted);font-size:.73rem;flex-shrink:0;}
.meas-vals{display:flex;gap:10px;flex-wrap:wrap;justify-content:flex-end;}
.meas-val span{color:var(--purple);font-weight:700;font-family:var(--font-d);}

/* ─── RPE TRACKER ─── */
.rpe-wrap{padding:14px 20px;background:rgba(255,255,255,.03);border-top:1px solid var(--border);flex-shrink:0;}
.rpe-label{font-size:.72rem;font-weight:800;letter-spacing:1px;text-transform:uppercase;color:var(--muted);margin-bottom:8px;}
.rpe-btns{display:grid;grid-template-columns:repeat(5,1fr);gap:8px;}
.rpe-btn{background:rgba(255,255,255,.05);border:1px solid var(--border2);color:var(--muted2);border-radius:var(--radius-sm);height:44px;cursor:pointer;font-family:var(--font-d);font-weight:800;font-size:.95rem;transition:all .18s;}
.rpe-btn.sel{color:#fff;border-color:transparent;}
.rpe-btn[data-v="1"].sel,.rpe-btn[data-v="2"].sel,.rpe-btn[data-v="3"].sel{background:var(--green);color:#04150A;}
.rpe-btn[data-v="4"].sel,.rpe-btn[data-v="5"].sel,.rpe-btn[data-v="6"].sel{background:var(--yellow);color:#000;}
.rpe-btn[data-v="7"].sel,.rpe-btn[data-v="8"].sel{background:var(--orange);}
.rpe-btn[data-v="9"].sel,.rpe-btn[data-v="10"].sel{background:var(--red);}

/* ─── NOTIFICATIONS ─── */
.notif-card{background:rgba(255,255,255,.04);border:1px solid rgba(204,255,0,.2);border-radius:var(--radius-md);padding:14px 16px;margin-bottom:20px;display:flex;align-items:center;gap:12px;}
.notif-card-text{flex:1;font-size:.83rem;color:var(--muted2);}
.notif-card-text strong{color:var(--blue);display:block;margin-bottom:2px;}
.notif-btn{background:var(--gold);border:none;color:#08090B;border-radius:var(--radius-sm);padding:8px 14px;cursor:pointer;font-family:var(--font-d);font-weight:700;font-size:.78rem;flex-shrink:0;}

/* ─── VIDEO DEMO CARD ─── */
.demo-wrap{margin-bottom:16px;}
.demo-card{display:block;text-decoration:none;border-radius:var(--radius-md);overflow:hidden;border:1px solid rgba(255,0,0,.22);transition:border-color .25s,transform .2s;-webkit-tap-highlight-color:transparent;}
.demo-card:hover{border-color:rgba(255,0,0,.5);}
.demo-card:active{transform:scale(.98);}
.demo-thumb{position:relative;height:118px;background:linear-gradient(135deg,#1c0505 0%,#160820 100%);display:flex;align-items:center;justify-content:center;overflow:hidden;}
.demo-bg-emoji{position:absolute;font-size:5.5rem;opacity:.13;user-select:none;pointer-events:none;filter:blur(1px);}
.demo-play-ring{width:58px;height:42px;background:#FF0000;border-radius:var(--radius-md);display:flex;align-items:center;justify-content:center;box-shadow:0 0 28px rgba(255,0,0,.45);}
.demo-play-ring svg{width:20px;height:20px;}
.demo-ex-tag{position:absolute;bottom:9px;left:12px;font-family:var(--font-d);font-size:.72rem;font-weight:700;color:rgba(255,255,255,.5);letter-spacing:.8px;text-transform:uppercase;}
.demo-bar{background:rgba(255,255,255,.035);padding:9px 14px;display:flex;align-items:center;gap:10px;border-top:1px solid rgba(255,255,255,.06);}
.demo-bar-text{font-size:.8rem;color:var(--muted2);flex:1;}
.demo-yt-pill{background:#FF0000;color:#fff;font-size:.6rem;font-weight:900;letter-spacing:.8px;padding:3px 9px;border-radius:999px;flex-shrink:0;font-family:var(--font-d);}

/* ─── ONBOARDING WIZARD ─── */
.onboard-overlay{position:fixed;inset:0;background:#000;z-index:600;display:flex;align-items:center;justify-content:center;padding:20px;}
.onboard-box{width:100%;max-width:420px;background:var(--bg2);border:1px solid var(--border2);border-radius:28px;overflow:hidden;animation:modalIn .4s var(--ease-spring);}
.onboard-header{background:var(--bg3);padding:32px 28px 24px;text-align:center;border-bottom:1px solid var(--border);}
.onboard-logo{font-family:var(--font-d);font-size:2.2rem;font-weight:900;color:var(--red);letter-spacing:-1px;margin-bottom:4px;}
.onboard-sub{font-size:.85rem;color:var(--muted2);}
.onboard-step{display:none;padding:28px;}
.onboard-step.active{display:block;animation:cardStagger .3s var(--ease-out) both;}
.onboard-step-title{font-family:var(--font-d);font-size:1.3rem;font-weight:900;margin-bottom:20px;color:var(--text);}
.onboard-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px;}
.onboard-field label{display:block;font-size:.72rem;color:var(--muted);margin-bottom:5px;letter-spacing:.3px;}
.onboard-field input{width:100%;background:rgba(255,255,255,.05);border:1px solid var(--border2);border-radius:var(--radius-sm);padding:11px 14px;color:var(--text);font-family:var(--font);font-size:.95rem;text-align:center;}
.onboard-field input:focus{outline:none;border-color:var(--blue);box-shadow:0 0 0 3px var(--blue-glow);}
.onboard-goal-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:4px;}
.goal-btn{background:rgba(255,255,255,.04);border:1px solid var(--border2);border-radius:var(--radius-md);padding:16px 12px;cursor:pointer;text-align:center;transition:all .18s var(--ease-spring);color:var(--muted2);}
.goal-btn:active{transform:scale(.96);}
.goal-btn.sel{border-color:var(--red);background:rgba(255,90,82,.1);color:var(--text);}
.goal-btn .goal-icon{font-size:1.8rem;margin-bottom:6px;}
.goal-btn .goal-name{font-family:var(--font-d);font-size:.95rem;font-weight:700;}
.goal-btn .goal-desc{font-size:.7rem;color:var(--muted);margin-top:3px;}
.activity-grid{display:grid;grid-template-columns:1fr;gap:8px;margin-top:4px;}
.act-btn{background:rgba(255,255,255,.04);border:1px solid var(--border2);border-radius:var(--radius-md);padding:13px 16px;cursor:pointer;display:flex;align-items:center;gap:12px;transition:all .18s;color:var(--muted2);}
.act-btn:active{transform:scale(.98);}
.act-btn.sel{border-color:var(--blue);background:rgba(255,255,255,.06);color:var(--text);}
.act-btn .act-icon{font-size:1.3rem;width:28px;text-align:center;}
.act-btn .act-info{text-align:right;}
.act-btn .act-name{font-family:var(--font-d);font-size:.92rem;font-weight:700;}
.act-btn .act-desc{font-size:.7rem;color:var(--muted);}
.onboard-footer{padding:0 28px 28px;display:flex;gap:10px;}
.onboard-next{flex:1;background:var(--lime);color:#000;border:none;border-radius:999px;padding:14px;cursor:pointer;font-family:var(--font-d);font-size:1rem;font-weight:900;transition:transform .18s var(--ease-spring),opacity .18s;}
.onboard-next:active{transform:scale(.96);}
.onboard-back{background:rgba(255,255,255,.06);border:1px solid var(--border2);border-radius:999px;padding:14px 18px;cursor:pointer;color:var(--muted2);font-size:.85rem;transition:all .18s;}
.onboard-dots{display:flex;justify-content:center;gap:6px;padding:0 28px 20px;}
.onboard-dot{width:6px;height:6px;border-radius:50%;background:var(--border2);transition:all .25s;}
.onboard-dot.active{width:20px;border-radius:3px;background:var(--lime);}

/* ─── USER SWITCHER ─── */
.user-list{display:flex;flex-direction:column;gap:8px;margin-bottom:16px;}
.user-item{display:flex;align-items:center;gap:12px;padding:12px 14px;border-radius:var(--radius-md);border:1px solid var(--border);background:var(--bg3);cursor:pointer;transition:all .18s;}
.user-item.active{border-color:var(--lime);background:var(--lime-dim);}
.user-item:active{transform:scale(.98);}
.user-avatar-sm{width:36px;height:36px;border-radius:50%;background:linear-gradient(160deg,#FFD666,var(--gold));display:flex;align-items:center;justify-content:center;font-family:var(--font-d);font-weight:900;font-size:1rem;color:#08090B;flex-shrink:0;}
.user-item-info{flex:1;text-align:right;}
.user-item-name{font-weight:600;font-size:.9rem;}
.user-item-sub{font-size:.72rem;color:var(--muted);margin-top:1px;}
.user-item-active-badge{font-size:.65rem;background:var(--red);color:#fff;padding:2px 8px;border-radius:999px;font-weight:700;}
.user-add-btn{width:100%;background:rgba(255,255,255,.04);border:1px dashed var(--border2);border-radius:var(--radius-md);padding:12px;cursor:pointer;color:var(--muted2);font-size:.85rem;transition:all .18s;}
.user-add-btn:hover{border-color:var(--blue);color:var(--text);}

/* ─── DYNAMIC MACRO STATS ─── */
#macro-stats-grid .stat-box .val{font-size:1.6rem;}

/* ─── SPLASH SCREEN ─── */
.splash{position:fixed;inset:0;background:#000;z-index:700;display:flex;align-items:center;justify-content:center;flex-direction:column;gap:14px;transition:opacity .5s ease,transform .5s ease;}
.splash.out{opacity:0;transform:scale(1.04);pointer-events:none;}
.splash-mark{width:96px;height:96px;background:linear-gradient(135deg,#15181D,#272C35);border-radius:var(--radius-xl);border:1px solid rgba(204,255,0,.2);display:flex;align-items:center;justify-content:center;box-shadow:0 0 40px rgba(204,255,0,.25),0 0 100px rgba(255,255,255,.04);animation:splashPop .6s var(--ease-spring);}
.splash-letter{font-family:'Georgia','Times New Roman',serif;font-size:56px;font-weight:900;background:linear-gradient(135deg,#FFD666,#CCFF00);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;line-height:1;margin-top:4px;}
.splash-name{font-family:var(--font-d);font-size:1.9rem;font-weight:900;color:#fff;letter-spacing:-1px;animation:splashFade .5s var(--ease-out) .15s both;}
.splash-tagline{font-size:.65rem;color:rgba(255,255,255,.22);letter-spacing:4px;text-transform:uppercase;animation:splashFade .4s var(--ease-out) .3s both;}
@keyframes splashPop{from{opacity:0;transform:scale(.82)}to{opacity:1;transform:scale(1)}}
@keyframes splashFade{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}

/* ─── MEAL COUNT SELECTOR ─── */
.meal-count-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin-top:12px;}
.mc-btn{background:rgba(255,255,255,.04);border:1px solid var(--border2);border-radius:var(--radius-md);padding:12px 8px;cursor:pointer;text-align:center;transition:all .18s var(--ease-spring);color:var(--muted2);}
.mc-btn:active{transform:scale(.95);}
.mc-btn.sel{border-color:var(--blue);background:rgba(255,255,255,.06);color:var(--text);}
.mc-btn .mc-num{font-family:var(--font-d);font-size:1.5rem;font-weight:900;line-height:1;}
.mc-btn .mc-lbl{font-size:.62rem;color:var(--muted);margin-top:4px;}

/* ─── HEALTH TOGGLE ─── */
.health-toggle{display:flex;align-items:center;justify-content:space-between;padding:13px 16px;border-radius:var(--radius-md);border:1px solid var(--border);background:rgba(255,255,255,.03);cursor:pointer;margin-top:14px;transition:border-color .18s;width:100%;font-family:var(--font);color:var(--text);text-align:right;}
.health-toggle:hover{border-color:var(--border2);}
.health-toggle-label{font-size:.85rem;color:var(--muted2);}
.toggle-pill{width:44px;height:24px;border-radius:999px;background:var(--border2);transition:background .25s;position:relative;flex-shrink:0;}
.toggle-pill.on{background:var(--red);}
.toggle-pill::after{content:'';position:absolute;width:18px;height:18px;border-radius:50%;background:#fff;top:3px;left:3px;transition:transform .25s var(--ease-spring);}
.toggle-pill.on::after{transform:translateX(20px);}

/* ─── SET LOG ─── */
.sl-btn{background:rgba(255,255,255,.06);border:1px solid rgba(204,255,0,.28);color:var(--blue);border-radius:var(--radius-xs);padding:3px 8px;font-size:.7rem;font-weight:700;cursor:pointer;margin-right:6px;transition:all .18s;white-space:nowrap;}
.sl-btn:hover{background:rgba(204,255,0,.22);}
.sl-btn.open{background:rgba(204,255,0,.25);border-color:var(--blue);}
.set-log-row td{padding:0!important;}
.set-log-box{padding:10px 12px 12px;display:flex;flex-direction:column;gap:8px;border-top:1px solid rgba(255,255,255,.06);animation:slideDown .2s ease;}
@keyframes slideDown{from{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}
.sl-set-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap;}
.sl-set-label{font-size:.72rem;color:var(--muted);font-weight:700;min-width:42px;}
.sl-kg,.sl-reps{background:rgba(255,255,255,.06);border:1px solid var(--border2);border-radius:var(--radius-xs);padding:5px 8px;color:var(--text);font-size:.82rem;width:64px;text-align:center;font-family:var(--font-d);font-weight:700;}
.sl-kg:focus,.sl-reps:focus{outline:none;border-color:var(--blue);}
.sl-x{color:var(--muted);font-size:.75rem;font-weight:700;}
.sl-save-btn{background:var(--gold);border:none;color:#08090B;border-radius:var(--radius-xs);padding:5px 12px;font-size:.75rem;font-weight:700;cursor:pointer;margin-right:auto;transition:opacity .18s;}
.sl-save-btn:hover{opacity:.85;}
.sl-saved{font-size:.7rem;color:var(--green);font-weight:700;display:none;}
.sl-saved.show{display:inline;}

/* ─── MODAL SET LOG ─── */
.msl-section{margin-top:16px;}
.msl-header{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:12px;}
.msl-title{font-size:.82rem;font-weight:800;color:var(--text);letter-spacing:.02em;}
.msl-subtitle{font-size:.72rem;color:var(--muted);font-weight:600;}
.msl-sets{display:flex;flex-direction:column;gap:6px;}
.msl-set-row{display:flex;align-items:center;gap:8px;background:rgba(255,255,255,.04);border:1px solid var(--border);border-radius:var(--radius-sm);padding:8px 12px;}
.msl-set-num{font-size:.72rem;font-weight:800;color:var(--muted);min-width:34px;text-align:center;}
.msl-inputs{display:flex;align-items:center;gap:6px;flex:1;}
.msl-kg,.msl-reps{background:rgba(255,255,255,.06);border:1px solid var(--border2);border-radius:var(--radius-xs);padding:6px 8px;color:var(--text);font-size:.9rem;width:68px;text-align:center;font-family:var(--font-d);font-weight:700;}
.msl-kg:focus,.msl-reps:focus{outline:none;border-color:var(--lime);background:rgba(255,255,255,.04);}
.msl-x{color:var(--muted);font-size:.75rem;font-weight:700;}
.msl-prev-hint{font-size:.62rem;color:var(--muted);font-weight:600;min-width:54px;opacity:.65;text-align:left;}
.msl-save-btn{width:100%;margin-top:12px;background:linear-gradient(135deg,#FFD666,var(--gold));border:none;color:#000;border-radius:var(--radius-sm);padding:12px;font-size:.9rem;font-weight:800;cursor:pointer;letter-spacing:.02em;transition:opacity .18s;box-shadow:0 4px 16px rgba(204,255,0,.25);}
.msl-save-btn:hover{opacity:.88;}
.msl-save-btn:active{transform:scale(.97);}
.msl-saved-msg{min-height:20px;font-size:.8rem;font-weight:700;margin-top:8px;text-align:center;}
.msl-saved-ok{color:var(--cyan);}
.msl-saved-pr{color:var(--yellow);}
.msl-saved-err{color:var(--red);}
.msl-history{margin-top:14px;border-top:1px solid var(--border);padding-top:12px;}
.msl-hist-label{font-size:.62rem;font-weight:800;color:var(--muted);text-transform:uppercase;letter-spacing:.08em;margin-bottom:8px;}
.msl-hist-row{display:flex;gap:8px;align-items:baseline;margin-bottom:5px;}
.msl-hist-date{font-size:.7rem;font-weight:700;color:var(--blue);min-width:32px;flex-shrink:0;}
.msl-hist-data{font-size:.7rem;color:var(--muted2);line-height:1.6;}

/* ─── EXERCISE SEARCH ─── */
.ex-search-wrap{position:relative;flex:1;max-width:260px;margin:0 8px;}
.ex-search-input{width:100%;background:var(--bg3);border:1px solid var(--border);border-radius:var(--radius-xl);padding:7px 14px;font-size:.82rem;color:var(--text);outline:none;transition:border-color .15s,box-shadow .15s;}
.ex-search-input:focus{border-color:var(--blue);box-shadow:0 0 0 3px rgba(255,255,255,.06);}
.ex-search-input::placeholder{color:var(--muted);}
.ex-search-results{position:absolute;top:calc(100% + 6px);right:0;left:0;background:var(--bg2);border:1px solid var(--border2);border-radius:var(--radius-md);overflow:hidden;z-index:550;box-shadow:0 12px 40px rgba(0,0,0,.4);}
.ex-search-item{display:flex;align-items:center;gap:10px;padding:10px 14px;cursor:pointer;transition:background .12s;}
.ex-search-item:hover{background:var(--bg3);}
.ex-search-icon{font-size:1.4rem;flex-shrink:0;}
.ex-search-info{min-width:0;}
.ex-search-name{font-size:.85rem;font-weight:600;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.ex-search-meta{font-size:.73rem;color:var(--muted);margin-top:1px;}
.ex-search-empty{padding:14px;text-align:center;color:var(--muted);font-size:.82rem;}
.ex-browse-head{padding:10px 14px 6px;font-size:.72rem;font-weight:700;color:var(--muted);text-transform:uppercase;letter-spacing:.05em;}
.ex-chips{display:flex;flex-wrap:wrap;gap:6px;padding:4px 12px 12px;}
.ex-chip{background:var(--glass);border:1px solid var(--border2);color:var(--text);border-radius:999px;padding:6px 12px;font-size:.76rem;font-weight:700;cursor:pointer;transition:all .15s;font-family:var(--font);}
.ex-chip:hover{background:var(--glass-h);transform:translateY(-1px);}
.ex-chip.active{background:var(--lime);color:#000;border-color:var(--lime);}
.ex-search-results{max-height:60vh;overflow-y:auto;}

/* ─── CrossFit panel ─── */
.workout-card.crossfit{grid-column:1/-1;background:var(--bg3);border:1px solid rgba(255,122,69,.30);}
.cf-wotd-card{border:1px solid rgba(249,115,22,.3);}
.cf-wotd-name{font-family:var(--font-d);font-size:1.5rem;font-weight:800;}
.cf-wotd-scheme{font-size:.85rem;color:var(--muted);margin:6px 0 14px;}
.cf-wotd-btn{width:100%;}
.cf-timer-display{font-family:var(--font-d);font-size:3.2rem;font-weight:800;text-align:center;letter-spacing:.04em;font-variant-numeric:tabular-nums;direction:ltr;}
.cf-timer-status{text-align:center;font-size:.8rem;color:var(--muted);margin:4px 0 14px;}
.cf-timer-controls{display:flex;gap:10px;justify-content:center;margin-bottom:12px;}
.cf-timer-presets{display:flex;flex-wrap:wrap;gap:6px;justify-content:center;}
.cf-cat-chips{padding:4px 0 12px;}
.cf-list{display:flex;flex-direction:column;gap:10px;}
.cf-card{background:var(--bg2);border:1px solid var(--border);border-radius:var(--radius-lg);overflow:hidden;transition:border-color .2s;}
.cf-card.open{border-color:rgba(249,115,22,.4);}
.cf-card-head{display:flex;align-items:center;gap:12px;width:100%;padding:14px 16px;background:none;border:none;cursor:pointer;text-align:right;font-family:var(--font);color:var(--text);}
.cf-card-head:hover{background:var(--glass-h);}
.cf-card-icon{font-size:1.5rem;flex-shrink:0;}
.cf-card-titles{flex:1;min-width:0;}
.cf-card-name{display:block;font-weight:800;font-size:1rem;}
.cf-card-scheme{display:block;font-size:.73rem;color:var(--muted);margin-top:2px;}
.cf-type-badge{font-size:.65rem;font-weight:800;padding:4px 10px;border-radius:var(--radius-xs);letter-spacing:.04em;flex-shrink:0;}
.cf-type-ft{background:rgba(239,68,68,.15);color:var(--red);border:1px solid rgba(239,68,68,.3);}
.cf-type-amrap{background:rgba(59,130,246,.15);color:var(--blue);border:1px solid rgba(59,130,246,.3);}
.cf-type-emom{background:rgba(139,92,246,.15);color:var(--purple);border:1px solid rgba(139,92,246,.3);}
.cf-type-tabata{background:rgba(245,158,11,.15);color:var(--yellow);border:1px solid rgba(245,158,11,.3);}
.cf-type-str{background:rgba(249,115,22,.15);color:var(--orange);border:1px solid rgba(249,115,22,.35);}
.cf-type-plan{background:rgba(34,197,94,.15);color:var(--lime);border:1px solid rgba(34,197,94,.3);}
.cf-card-body{padding:0 16px 16px;}
.cf-desc{font-size:.85rem;color:var(--muted2);line-height:1.7;margin:0 0 12px;}
.cf-moves{width:100%;border-collapse:collapse;font-size:.8rem;margin-bottom:12px;}
.cf-moves th{text-align:right;color:var(--muted);font-size:.68rem;font-weight:700;text-transform:uppercase;letter-spacing:.05em;padding:6px 8px;border-bottom:1px solid var(--border2);}
.cf-moves td{padding:8px;border-bottom:1px solid var(--border);vertical-align:top;line-height:1.5;}
.cf-moves td:first-child{font-weight:700;white-space:nowrap;}
.cf-targets{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:12px;}
.cf-target{font-size:.72rem;font-weight:600;padding:5px 10px;border-radius:var(--radius-sm);background:var(--glass);border:1px solid var(--border);}
.cf-target.elite{color:var(--yellow);}
.cf-target.good{color:var(--lime);}
.cf-target.start{color:var(--cyan);}
.cf-tips{margin:0 0 14px;padding-inline-start:18px;font-size:.8rem;color:var(--muted2);line-height:1.9;}
.cf-score-row{display:flex;gap:8px;}
.cf-score-input{flex:1;background:var(--bg3);border:1px solid var(--border2);border-radius:var(--radius-sm);padding:10px 12px;color:var(--text);font-family:var(--font);font-size:.85rem;}
.cf-score-input:focus{border-color:var(--orange);}
.cf-score-save{background:var(--orange);border:none;border-radius:var(--radius-sm);padding:10px 20px;color:#000;font-weight:800;cursor:pointer;font-family:var(--font);font-size:.85rem;}
.cf-history{display:flex;flex-wrap:wrap;gap:6px;margin-top:10px;align-items:center;}
.cf-best{font-size:.74rem;font-weight:700;color:var(--yellow);}
.cf-hist-item{font-size:.72rem;color:var(--muted);background:var(--glass);border:1px solid var(--border);border-radius:var(--radius-xs);padding:3px 8px;}
@media(max-width:480px){.ex-search-wrap{max-width:140px;}}

/* ─── TOPBAR HEADER (replaces Tailwind CDN) ─── */
.topbar-header{display:flex;justify-content:space-between;align-items:center;padding:16px 20px 12px;padding-top:calc(16px + env(safe-area-inset-top,0px));flex-shrink:0;}
.topbar-left{display:flex;align-items:center;gap:12px;}
.topbar-avatar-ring{width:44px;height:44px;border-radius:50%;border:2px solid rgba(204,255,0,.6);overflow:hidden;background:var(--bg4);display:flex;align-items:center;justify-content:center;box-shadow:0 0 12px rgba(204,255,0,.2);flex-shrink:0;}
.topbar-avatar-letter{font-size:.875rem;font-weight:700;color:var(--lime);}
.topbar-text{display:flex;flex-direction:column;gap:1px;}
.topbar-greeting{font-size:.69rem;color:var(--muted);font-weight:500;}
.topbar-appname{font-size:.94rem;font-weight:700;color:#fff;line-height:1.2;margin:0;}
.topbar-right{display:flex;align-items:center;gap:8px;}
.topbar-level-badge{background:var(--bg4);color:var(--lime);font-size:.625rem;font-weight:700;padding:4px 10px;border-radius:999px;border:1px solid rgba(204,255,0,.2);white-space:nowrap;}
.topbar-notif-dot{width:8px;height:8px;background:var(--red);border-radius:50%;position:absolute;top:9px;right:9px;pointer-events:none;}

/* ─── DASHBOARD CSS CLASSES (replaces inline styles) ─── */
.dash-stat-card{background:rgba(255,255,255,.04);border:1px solid rgba(255,255,255,.06);border-radius:var(--radius-md);padding:14px;}
.dash-row{display:flex;align-items:center;gap:8px;}
.dash-label{font-size:.68rem;color:var(--muted);font-weight:500;}
.dash-value{font-size:.875rem;font-weight:700;color:var(--text);}

/* ─── PLATE + 1RM + TOOL MODALS ─── */
#plate-calc-modal.open,#orm-modal.open{display:flex!important;}

/* ─── AMOLED THEME ─── */
[data-theme="amoled"]{
  --bg:#000;--bg2:#0a0a0a;--bg3:#111;--border:rgba(255,255,255,.07);--border2:rgba(255,255,255,.1);
}
[data-theme="amoled"] .card{background:#0a0a0a;border-color:rgba(255,255,255,.07);}
[data-theme="amoled"] .topbar{background:rgba(0,0,0,.97);}
[data-theme="amoled"] .mobile-bottom-nav{background:rgba(0,0,0,.98);}
[data-theme="amoled"] .sidebar{background:#000;}
[data-theme="amoled"] [style*="background:#1A2330"]{background:#0d0d0d!important;}
[data-theme="amoled"] [style*="background:rgba(255,255,255,.04)"]{background:rgba(255,255,255,.03)!important;}
[data-theme="amoled"] [style*="background:rgba(255,255,255,.05)"]{background:rgba(255,255,255,.04)!important;}
[data-theme="amoled"] [style*="background:rgba(255,255,255,.06)"]{background:rgba(255,255,255,.05)!important;}

/* ─── TOOLS QUICK ACCESS (bottom bar in settings) ─── */
.tools-bar{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:16px;}
.tool-btn{flex:1;min-width:80px;background:var(--bg2);border:1px solid var(--border);border-radius:var(--radius-md);padding:12px 8px;font-family:var(--font);font-size:.78rem;font-weight:700;color:var(--text);cursor:pointer;text-align:center;transition:background .2s;}
.tool-btn:hover{background:var(--border);}
.tool-btn .tool-icon{font-size:1.3rem;display:block;margin-bottom:4px;}
/* ─── ONBOARDING FREQUENCY BUTTONS ─── */
.ob-freq-btn.sel{border-color:var(--red)!important;background:rgba(255,90,82,.12)!important;}
.ob-freq-btn.sel div:first-child{color:var(--red)!important;}
.ob-split-btn.sel{border-color:var(--red)!important;background:rgba(255,90,82,.10)!important;}

/* ─── GYM MODE: INLINE SET ROWS ─── */
.gym-setrows{width:100%;max-width:340px;display:flex;flex-direction:column;gap:4px;margin-bottom:8px;}
.gym-set-row{display:flex;align-items:center;gap:8px;padding:10px 12px;border-radius:var(--radius-md);background:rgba(255,255,255,.04);border:1px solid rgba(255,255,255,.07);transition:all .2s;}
.gym-set-row.done{background:rgba(61,255,149,.07);border-color:rgba(61,255,149,.18);opacity:.65;text-decoration:line-through;transition:all .2s ease;}
.gym-sr-num{font-family:var(--font-d);font-size:.72rem;font-weight:800;color:var(--muted);min-width:36px;letter-spacing:.5px;}
.gym-sr-inputs{display:flex;align-items:center;gap:6px;flex:1;justify-content:center;}
.gym-sr-kg,.gym-sr-reps{background:rgba(255,255,255,.07);border:1.5px solid rgba(255,255,255,.14);border-radius:var(--radius-sm);color:var(--text);font-size:.95rem;font-weight:800;padding:8px 4px;width:62px;text-align:center;font-family:var(--font-d);-moz-appearance:textfield;transition:border-color .2s;}
.gym-sr-kg::-webkit-outer-spin-button,.gym-sr-kg::-webkit-inner-spin-button,
.gym-sr-reps::-webkit-outer-spin-button,.gym-sr-reps::-webkit-inner-spin-button{-webkit-appearance:none;margin:0;}
.gym-sr-kg:focus,.gym-sr-reps:focus{outline:none;border-color:var(--blue);}
.gym-sr-kg:disabled,.gym-sr-reps:disabled{opacity:.5;cursor:default;}
.gym-sr-x{color:var(--muted);font-size:.85rem;font-weight:700;}
.gym-set-row .gym-check{width:42px;height:42px;border-radius:var(--radius-md);border:2px solid rgba(255,255,255,.15);background:rgba(255,255,255,.04);cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:1.2rem;color:transparent;transition:all .2s var(--ease-spring);user-select:none;flex-shrink:0;}
.gym-set-row .gym-check.done{background:linear-gradient(160deg,#FFD666,var(--gold));color:#08090B;border-color:transparent;box-shadow:0 0 12px var(--gold-glow),inset 0 1px 0 rgba(255,255,255,.45);}
/* Override old gym-checks flex for setrows */
.gym-body .gym-name{font-size:clamp(1.6rem,7vw,3rem);}

/* ─── GYM MODE: INTEGRATED REST TIMER ─── */
.gym-rest-timer{flex-shrink:0;padding:10px 24px 6px;border-top:1px solid rgba(255,255,255,.06);}
.grt-inner{display:flex;align-items:center;gap:16px;}
.grt-ring-wrap{position:relative;flex-shrink:0;width:72px;height:72px;}
.grt-svg{width:72px;height:72px;transform:rotate(-90deg);}
.grt-track{fill:none;stroke:rgba(255,255,255,.06);stroke-width:3;}
.grt-prog{fill:none;stroke:var(--gold);stroke-width:3;stroke-linecap:round;stroke-dasharray:238.76;stroke-dashoffset:0;transition:stroke-dashoffset .9s linear;filter:drop-shadow(0 0 6px rgba(204,255,0,.45));}
.grt-time{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-family:var(--font-d);font-size:1rem;font-weight:900;color:var(--text);letter-spacing:-.5px;}
.grt-right{flex:1;display:flex;flex-direction:column;gap:6px;}
.grt-label{font-family:var(--font-d);font-size:.8rem;font-weight:800;color:var(--muted2);letter-spacing:.5px;}
.grt-presets{display:flex;gap:6px;flex-wrap:wrap;}
.grt-presets button{background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.12);border-radius:var(--radius-sm);color:var(--muted2);font-family:var(--font-d);font-size:.9rem;font-weight:800;padding:10px 12px;min-height:44px;min-width:56px;cursor:pointer;transition:all .15s;letter-spacing:.3px;}
.grt-presets button:hover,.grt-presets button.active{background:rgba(204,255,0,.18);border-color:var(--blue);color:var(--blue);}
.grt-skip{background:none;border:none;color:var(--muted);font-size:.72rem;font-weight:700;cursor:pointer;padding:0;font-family:var(--font-d);letter-spacing:.5px;align-self:flex-start;}
.grt-skip:hover{color:var(--text);}

/* ─── COACH TIP CARDS ─── */
.coach-tip{display:flex;align-items:flex-start;gap:10px;border-radius:var(--radius-md);padding:11px 13px;margin:6px 0;font-size:.73rem;border:1px solid;border-right-width:3px;}
.ct-icon{font-size:1.3rem;line-height:1.1;flex-shrink:0;}
.ct-msg{color:var(--text);line-height:1.5;font-weight:500;}
.coach-tip--increase{background:rgba(61,255,149,.08);border-color:rgba(61,255,149,.25);border-right-color:var(--green);}
.coach-tip--almost  {background:rgba(255,255,255,.04);border-color:rgba(204,255,0,.25);border-right-color:var(--blue);}
.coach-tip--decrease{background:rgba(255,255,255,.04);border-color:rgba(204,255,0,.25);border-right-color:var(--yellow);}
.coach-tip--change  {background:rgba(255,90,82,.08);border-color:rgba(255,90,82,.25);border-right-color:var(--red);}

/* ─── SKELETON LOADING ─── */
@keyframes shimmer{
  0%{background-position:200% center;}
  100%{background-position:-200% center;}
}
.skeleton{
  background:linear-gradient(90deg,rgba(255,255,255,.03) 25%,rgba(255,255,255,.07) 50%,rgba(255,255,255,.03) 75%);
  background-size:200% auto;
  animation:shimmer 1.4s linear infinite;
  border-radius:var(--radius-sm);
}
.skeleton-card{height:80px;border-radius:var(--radius-lg);margin-bottom:10px;}
.skeleton-line{height:14px;border-radius:4px;margin-bottom:8px;}
.skeleton-line.short{width:60%;}
.skeleton-line.medium{width:80%;}
.skeleton-title{height:20px;border-radius:4px;margin-bottom:16px;width:50%;}

/* ─── ACHIEVEMENTS ─── */
.achievements-row{display:flex;flex-wrap:wrap;gap:8px;}
.ach-badge{display:flex;flex-direction:column;align-items:center;gap:3px;background:var(--bg3);border:1px solid var(--border2);border-radius:var(--radius-md);padding:10px 12px;min-width:64px;cursor:default;transition:transform .15s,box-shadow .15s;}
.ach-badge:hover{transform:translateY(-2px);box-shadow:0 6px 20px rgba(0,0,0,.25);}
.ach-icon{font-size:1.6rem;line-height:1;}
.ach-name{font-size:.65rem;font-weight:700;color:var(--muted);text-align:center;white-space:nowrap;}

/* ─── SPARKLINES ─── */
.ex-spark{display:block;margin-top:4px;opacity:.85;}
.streak-micro-copy{font-size:.75rem;color:var(--muted);margin-top:4px;min-height:1em;transition:opacity .3s;}

/* ─── WEEKLY REPORT ─── */
.wr-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:10px;margin-bottom:14px;}
.wr-stat-card{background:var(--bg2);border:1px solid var(--border);border-radius:var(--radius-md);padding:14px;text-align:center;}
.wr-stat-val{font-family:var(--font-d);font-size:2rem;font-weight:900;line-height:1.1;}
.wr-stat-lbl{font-size:.68rem;color:var(--muted);margin-top:3px;letter-spacing:.3px;}
.wr-days{display:flex;gap:4px;}
.wr-day{flex:1;text-align:center;}
.wr-day-bar{height:32px;border-radius:var(--radius-xs);margin-bottom:3px;border:1px solid var(--border);}
.wr-day-bar.done{background:var(--lime);border-color:var(--lime);}
.wr-day-bar.today{border-color:var(--cyan);}
.wr-day-lbl{font-size:.6rem;color:var(--muted);}
.wr-coach{margin-top:16px;}
.wr-coach-title{font-size:.75rem;font-weight:700;color:var(--muted);letter-spacing:.5px;margin-bottom:8px;text-transform:uppercase;}
.ct-ex-name{font-size:.72rem;font-weight:600;color:var(--text);margin-left:4px;}

/* ─── MOBILE: prevent overflow & improve touch targets ─── */
*{-webkit-tap-highlight-color:rgba(0,0,0,0);touch-action:pan-y;}
html,body{overscroll-behavior:none;touch-action:pan-y;}
button,a,[role="button"],.nav-tab,.panel-tab,.ob-freq-btn,.ob-split-btn,.meal-swap-btn{touch-action:manipulation;}
.gym-body{padding:16px 20px;justify-content:flex-start;overflow-y:auto;}
@media(max-height:700px){
  .gym-header{padding:12px 16px;}
  .gym-name{font-size:clamp(1.4rem,6vw,2.2rem)!important;}
  .gym-counter{margin-bottom:8px;}
  .gym-sets-label{margin-bottom:8px;}
  .gym-sr-kg,.gym-sr-reps{width:56px;padding:7px 4px;}
  .gym-set-row{padding:8px 10px;}
  .rpe-wrap{padding:8px 16px;}
  .gym-footer{padding:12px 16px;}
}
@media(max-width:360px){
  .gym-sr-kg,.gym-sr-reps{width:52px;font-size:.85rem;}
  .gym-sr-num{min-width:28px;font-size:.66rem;}
  .grt-ring-wrap{width:60px;height:60px;}
  .grt-svg{width:60px;height:60px;}
  .grt-time{font-size:.85rem;}
}
@media print{
  .sidebar,.topbar,.bottom-nav,.modal-overlay,.toast-wrap,.mobile-bottom-nav{display:none!important;}
  body{background:#fff!important;color:#000!important;}
  .card{box-shadow:none!important;border:1px solid #ccc!important;}
}
@media(max-width:480px){
  .btn,.workout-card{min-height:44px;}
}

/* ─── ICON SYSTEM (SVG, stroke-based) ─── */
.ico{width:1.1em;height:1.1em;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;vertical-align:-.15em;flex-shrink:0;display:inline-block;}
.card-head h2::before{content:'';display:inline-block;width:3px;height:14px;border-radius:2px;background:var(--lime);margin-left:9px;vertical-align:-2px;}
.workout-card-icon .ico{width:22px;height:22px;}
.workout-card.push .workout-card-icon{color:var(--push-c);}
.workout-card.pull .workout-card-icon{color:var(--pull-c);}
.workout-card.legs .workout-card-icon{color:var(--legs-c);}
.workout-card.arms .workout-card-icon{color:var(--arms-c);}
.workout-card.crossfit .workout-card-icon{color:var(--orange);}
.ddc-dot{width:8px;height:8px;border-radius:50%;display:inline-block;flex-shrink:0;}
.ddc-dot-rest{background:transparent;border:1.5px solid var(--muted2);}
.dc-dot{width:10px;height:10px;border-radius:50%;display:inline-block;}
.day-cell .dc-icon{font-size:0;line-height:1;margin-bottom:8px;}
.ex-dot{width:10px;height:10px;border-radius:3px;flex-shrink:0;}
.ex-dot.push{background:var(--push-c,#CCFF00);}
.ex-dot.pull{background:var(--pull-c,#00D9FF);}
.ex-dot.legs{background:var(--legs-c,#B47CFF);}
.ex-dot.arms{background:var(--arms-c,#CCFF00);}
.ex-dot.core{background:#30D158;}
.tip-icon .ico{width:20px;height:20px;}
.tool-btn .tool-icon .ico{width:20px;height:20px;color:var(--lime);}
.goal-btn .goal-icon .ico{width:26px;height:26px;color:var(--lime);}
.act-btn .act-icon .ico{width:20px;height:20px;color:var(--muted);}
.act-btn.sel .act-icon .ico{color:var(--lime);}
.empty-state-icon .ico{width:44px;height:44px;color:var(--muted2);}
.ach-icon .ico{width:20px;height:20px;color:var(--lime);}
.ct-icon .ico{width:20px;height:20px;}
.coach-tip--increase .ct-icon{color:var(--green);}
.coach-tip--almost .ct-icon{color:var(--yellow,#CCFF00);}
.coach-tip--change .ct-icon{color:var(--cyan,#7EE2F2);}
.coach-tip--decrease .ct-icon{color:var(--red);}
.m-tips-check{color:var(--lime);font-weight:800;flex-shrink:0;}
.fo-src .ico{width:13px;height:13px;color:var(--cyan,#7EE2F2);}
.hero-wm-ico{width:120px;height:120px;opacity:.9;}
.demo-bg-ico{position:absolute;width:88px;height:88px;color:rgba(255,255,255,.12);pointer-events:none;}
.elog-empty-icon .ico{width:38px;height:38px;color:var(--muted2);}
.boss-icon .ico{width:28px;height:28px;color:var(--orange,#FF7A45);}


/* ══════════════════════════════════════════════════════════════════════
   NEON ATHLETIC — typography scale, density and component polish.
   Loaded last so it wins over the legacy rules above.
   ══════════════════════════════════════════════════════════════════════ */

/* ── Type: nothing under 12px, real hierarchy between levels ── */
body{font-size:var(--fs-body);line-height:var(--lh-normal);-webkit-font-smoothing:antialiased;letter-spacing:-.01em;}
.card-head h2{font-size:var(--fs-h2);font-weight:800;letter-spacing:-.02em;line-height:var(--lh-tight);}
.badge{font-size:.75rem;font-weight:600;letter-spacing:.01em;padding:5px 11px;border-radius:999px;}

/* Numbers are the hero of a training app — big, tabular, tight */
.stat-box .val,.hero-stat-val,.gym-sr-kg,.gym-sr-reps,.gym-stopwatch,.ring-text,.grt-time{
  font-family:var(--font-d);font-variant-numeric:tabular-nums;letter-spacing:-.03em;font-weight:800;
}
.stat-box .val{font-size:3rem;line-height:.95;}
.stat-box .lbl{font-size:.75rem;font-weight:600;color:var(--muted);letter-spacing:.06em;margin-top:10px;}

/* ── Cards: more air, softer edge, one clear elevation ── */
.card{border-radius:var(--radius-lg);border:1px solid var(--border);background:var(--bg2);}
.card-body{padding:var(--pad-md);}
.card-head{padding:var(--pad-md) var(--pad-md) 0;}
.card-head h2::before{background:var(--lime);width:3px;border-radius:2px;}

/* ── Quick-start workout cards: the primary action on the dashboard ── */
.workout-card{
  border-radius:var(--radius-md);padding:18px 12px;background:var(--bg3);
  border:1px solid var(--border);
  transition:transform .18s var(--ease-out),border-color .18s,background .18s;
}
.workout-card:hover{transform:translateY(-3px);background:var(--bg4);}
.workout-card.push:hover{border-color:rgba(204,255,0,.45);}
.workout-card.pull:hover{border-color:rgba(0,217,255,.45);}
.workout-card.legs:hover{border-color:rgba(180,124,255,.45);}
.workout-card.arms:hover{border-color:rgba(255,122,69,.45);}
.workout-card-title{font-family:var(--font-d);font-size:1.0625rem;font-weight:800;letter-spacing:-.01em;}
.workout-card-sub{font-size:.8125rem;color:var(--muted);margin-top:5px;line-height:1.35;}
.workout-card-icon .ico{width:24px;height:24px;}

/* ── Buttons: 44px touch target, lime means "go" ── */
.btn,.settings-save,.gym-mode-btn{border-radius:var(--radius-sm);font-weight:700;transition:filter .18s,transform .12s;}
.settings-save{min-height:46px;font-size:.9375rem;}
.settings-save:hover{filter:brightness(1.08);}
.settings-save:active,.btn:active{transform:scale(.98);}
.gym-mode-btn{background:var(--lime);color:#0A0B0C;font-weight:800;padding:7px 14px;font-size:.8125rem;}
.gym-mode-btn:hover{filter:brightness(1.1);}

/* ── Week strip: today gets the lime, the rest stay quiet ── */
.dash-day-chip{
  min-width:74px;padding:11px 9px;border-radius:var(--radius-sm);
  background:var(--bg3);border:1px solid var(--border);
}
.dash-day-chip.today{border-color:var(--lime);background:var(--lime-dim);}
.ddc-name{font-size:.8125rem;font-weight:700;}
.ddc-type{font-size:.6875rem;font-weight:700;letter-spacing:.02em;}
.ddc-dot{width:7px;height:7px;border-radius:50%;}
.day-cell{border-radius:var(--radius-sm);padding:12px 6px;transition:background .18s,border-color .18s;}
.day-cell:not(.rest-day):hover{background:var(--bg4);}
.dc-name{font-size:.75rem;font-weight:600;color:var(--muted);}
.dc-type{font-size:.8125rem;font-weight:800;letter-spacing:-.01em;margin-top:3px;}
.dc-label{font-size:.6875rem;color:var(--muted2);margin-top:2px;line-height:1.3;}

/* ── Exercise table: readable rows, no cramped 10px text ── */
.ex-table td,.ex-table th{font-size:.9375rem;}
.ex-why{font-size:.8125rem;color:var(--muted);line-height:1.45;}
.ex-name{font-weight:700;font-size:.9375rem;}

/* ── Bottom nav ── */
.mbn-item{font-size:.6875rem;font-weight:600;}
.mbn-item.active{color:var(--lime);}
.mbn-item.active svg{color:var(--lime);}

/* ── Schedule-panel selector buttons ── */
.wsel-title{font-family:var(--font-d);letter-spacing:-.01em;}
.wsel-sub{font-size:.8125rem !important;line-height:1.35;}
.wsel-meta{font-size:.75rem !important;}

/* ── Inputs ── */
.settings-input{
  min-height:46px;font-size:.9375rem;border-radius:var(--radius-sm);
  background:var(--bg3);border:1px solid var(--border2);color:var(--text);
  transition:border-color .18s;
}
.settings-input:focus{border-color:var(--lime);}
.settings-label{font-size:.8125rem;font-weight:600;color:var(--muted);margin-bottom:7px;display:block;}

/* ── Motion respect ── */
@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{animation-duration:.01ms !important;animation-iteration-count:1 !important;transition-duration:.01ms !important;}
}

/* ── Light theme: rebuilt on the same tokens ── */
[data-theme="light"]{
  --bg:#F5F6F8;--bg2:#FFFFFF;--bg3:#F0F2F5;--bg4:#E6E9ED;--bg5:#DADEE4;
  --text:#0C0E11;--muted:#4B5563;--muted2:#6B7280;
  --border:rgba(0,0,0,.09);--border2:rgba(0,0,0,.14);
  --glass:rgba(0,0,0,.02);--glass-b:rgba(0,0,0,.08);--glass-h:rgba(0,0,0,.04);
  --lime:#5C7A00;--lime-glow:rgba(92,122,0,.22);--lime-dim:rgba(92,122,0,.08);
  --cyan:#0077A8;--purple:#7A3FD4;--blue:#0077A8;
  --push-c:#5C7A00;--pull-c:#0077A8;--legs-c:#7A3FD4;--arms-c:#C2410C;
  --green:#047857;--red:#DC2626;
}
[data-theme="light"] .gym-mode-btn{color:#fff;}


/* ── Flat surfaces beat inline gradients that survived the sweep ── */
.workout-card,.stat-box,.dash-day-chip,.tool-btn,.goal-btn,.act-btn{background-image:none !important;}

/* ── Today's card is the one thing allowed to glow ── */
.workout-card.is-today{border-color:var(--lime) !important;box-shadow:0 0 0 1px var(--lime-dim),0 8px 32px rgba(204,255,0,.10);}

/* ── Bottom nav must not sit on top of the last row of content ── */



/* ── Numerals render LTR even inside an RTL column ── */
.stat-box .val,.hero-stat-val,.gym-sr-kg,.gym-sr-reps,.gym-stopwatch,.ring-text,.grt-time,
/* "4x6-8" is pure ltr content and belongs here. "20 שנ׳" and
   "ראשון | 8 תרגילים | ~52 דק׳" are Hebrew, and forcing them ltr made a
   Hebrew reader meet the unit before the number. */
.sets-cell,.ex-sets{direction:ltr;unicode-bidi:isolate;}
.rest-cell,.wsel-meta{direction:rtl;unicode-bidi:isolate;}
.card-head .badge,.dash-day-chip,.dc-label{unicode-bidi:isolate;}

/* ── Surfaces need a visible edge to read as cards on near-black ── */
:root{--border:rgba(255,255,255,.10);--border2:rgba(255,255,255,.17);}
.card{box-shadow:0 1px 0 rgba(255,255,255,.03) inset;}

/* ── Empty states: informative, not a canyon ── */
.empty-state{padding:26px 18px !important;}
.empty-state-icon .ico{width:34px;height:34px;}
.empty-state-title{font-size:1.0625rem;}
.empty-state-sub{font-size:.86rem;color:var(--muted);line-height:1.5;max-width:34ch;}

/* ── Schedule line is metadata, not an accent ── */
#workout-schedule-text{color:var(--muted) !important;font-weight:500 !important;}

/* ── Rest days recede ── */
.day-cell.rest-day{opacity:.32;}
.dash-day-chip.ddc-rest{opacity:.34;}

/* ── Today's chip and cell carry the lime ── */
.day-cell.today,.dash-day-chip.today{border-color:var(--lime);}

/* Active-user badge is a status, not an alert */
.user-item-active-badge{background:var(--lime) !important;color:#0A0B0C !important;font-weight:700;font-size:.75rem;border-radius:999px;padding:3px 10px;}


/* ── Superset blocks: the pair is the unit of work, so it gets the frame ── */
.ss-head td{
  padding:14px 14px 10px !important;background:var(--bg4);
  border-top:1px solid var(--border2);border-bottom:1px solid var(--border);
}
.ss-tag{
  display:inline-block;background:var(--lime);color:#0A0B0C;font-family:var(--font-d);
  font-weight:800;font-size:.78rem;padding:2px 9px;border-radius:var(--radius-xs);margin-left:9px;
}
.ss-type{font-weight:700;font-size:.88rem;color:var(--text);margin-left:9px;}
.ss-meta{font-size:.8rem;color:var(--muted);unicode-bidi:isolate;}
.ss-note{font-size:.82rem;color:var(--muted2);line-height:1.5;margin-top:6px;max-width:60ch;}
.ss-row td{background:var(--bg2);}
.ss-row-b td{border-bottom:1px solid var(--border2);}
.ss-row .ex-num-cell{background:var(--bg5);color:var(--muted);}
@media (max-width:520px){
  .ss-meta{display:block;margin-top:4px;}
  .ss-note{font-size:.78rem;}
}

/* Gym mode tells you the pair you are inside of */
.gym-ss{display:flex;align-items:center;justify-content:center;gap:8px;flex-wrap:wrap;font-size:.86rem;color:var(--muted);margin-bottom:6px;}
.gym-ss-tag{background:var(--lime);color:#0A0B0C;font-family:var(--font-d);font-weight:800;font-size:.78rem;padding:2px 9px;border-radius:var(--radius-xs);}


/* ── Gym mode: a superset runs as rounds of two, not two drained in series ── */
.gym-pair-note{font-size:.84rem;color:var(--muted2);line-height:1.5;max-width:46ch;margin:8px auto 4px;text-align:center;}
.gym-pair-rounds{display:flex;flex-direction:column;gap:14px;margin-top:14px;}
.gym-pair-round{background:var(--bg3);border:1px solid var(--border);border-radius:var(--radius-md);padding:12px;}
.gym-pair-rn{font-family:var(--font-d);font-size:.8rem;font-weight:800;color:var(--muted);letter-spacing:.06em;margin-bottom:9px;}
.gym-pair-side{display:flex;align-items:center;gap:10px;padding:8px 0;}
.gym-pair-side.done{opacity:.55;}
.gym-pair-nm{flex:1;font-size:.86rem;font-weight:600;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.gym-pair-arrow{font-size:.78rem;color:var(--lime);text-align:center;padding:3px 0;unicode-bidi:isolate;}

/* pair row must not clip its check button on narrow screens */
.gym-pair-side{min-width:0;}
.gym-pair-side .gym-sr-inputs{flex-shrink:0;}
.gym-pair-side .gym-check{flex-shrink:0;width:40px;height:40px;position:static;}
.gym-pair-round{overflow:hidden;}
/* two long Hebrew names stacked is too much headline — scale it down */
.gym-name-pair{font-size:1.25rem !important;line-height:1.25;}
.gym-pair-rounds+*{margin-top:10px;}


/* ══ Layout corrections ══════════════════════════════════════════════ */

/* The day's exercises are what the user opened the panel for — they lead.
   Warm-up and the coach's note are reference, so they follow. */
.panel.active[id^="panel-p"],.panel.active#panel-legs,.panel.active#panel-arms{display:flex;flex-direction:column;}
.day-head-card{order:1;}
.warmup-card{order:2;}
.trainer-note{order:3;}
.abs-card{order:4;}

/* Split-specific copy is hidden on plans it wasn't written for */
.plan-generic .trainer-note,.plan-generic .warmup-card{display:none;}

/* An odd number of workout cards: the last one takes the full row rather
   than sitting alone in a half-width column */
.workout-card.wc-span{grid-column:1/-1;}
.workout-card.wc-span{display:flex;align-items:center;gap:14px;text-align:right;padding:14px 16px;}
.workout-card.wc-span .workout-card-icon{margin:0;}
.workout-card.wc-span .workout-card-title{margin:0;}
.workout-card.wc-span > div:not(.workout-card-icon){text-align:right;}
.workout-card.wc-span .workout-card-sub{margin-top:2px;}


/* ══════════════════════════════════════════════════════════════════════
   STRUCTURE — sections, not boxes.
   The old build wrapped everything in a bordered .card, then nested more
   bordered things inside it. Two frames around one idea reads as clutter,
   so the outer frame goes away: a section is a heading plus its content,
   separated by rhythm. Boxes are reserved for things you can tap.
   ══════════════════════════════════════════════════════════════════════ */

.panel{--gap:30px;}
.panel > *{margin-bottom:var(--gap);}
.panel > *:last-child{margin-bottom:0;}

/* Card -> section: no frame, no fill, no shadow */
.card{
  background:none !important;border:none !important;box-shadow:none !important;
  border-radius:0 !important;padding:0 !important;overflow:visible;
}
.card-head{
  padding:0 0 12px !important;margin-bottom:14px;
  border-bottom:1px solid var(--border);
  display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap;
}
.card-head h2{
  font-size:1.0625rem !important;font-weight:700;letter-spacing:.01em;
  color:var(--muted);text-transform:none;
}
.card-head h2::before{display:none;}
.card-body{padding:0 !important;}

/* Section heading gets one lime marker instead of a full colored frame */
.card-head::before{
  content:'';width:3px;height:15px;background:var(--lime);border-radius:2px;
  order:-1;flex-shrink:0;
}

/* ── Exercise list: a table is the wrong shape for a phone ───────────── */
@media (max-width:680px){
  .ex-table,.ex-table tbody,.ex-table td{display:block;width:auto;}
  .ex-table thead{display:none;}
  .ex-table{border:none;background:none;}
  .ex-table tbody tr:not([onclick]):not(.set-log-row){display:block;}

  /* Two lines, four slots: what it is and how much, then where it hits
     and how long you rest. The level badge is dropped — it repeated
     information the sets and the name already carry. */
  .ex-table tr[onclick]{
    display:grid;
    grid-template-columns:30px 1fr auto;
    grid-template-areas:"num name sets" "num meta rest";
    align-items:center;column-gap:11px;row-gap:2px;
    background:var(--bg3);border:1px solid var(--border);
    border-radius:var(--radius-md);padding:11px 13px;margin-bottom:8px;
    cursor:pointer;transition:border-color .18s,background .18s;
  }
  .ex-table tr[onclick]:hover{background:var(--bg4);border-color:var(--border2);}
  .ex-table tr[onclick] > td{padding:0 !important;border:none !important;background:none !important;}
  .ex-table tr[onclick] > td:nth-child(1){grid-area:num;display:block;}
  .ex-table tr[onclick] > td:nth-child(2){grid-area:name;min-width:0;display:block;}
  .ex-table tr[onclick] > td:nth-child(3){grid-area:meta;display:block;}
  .ex-table tr[onclick] > td:nth-child(4){grid-area:sets;text-align:left;display:block;}
  .ex-table tr[onclick] > td:nth-child(5){grid-area:rest;text-align:left;display:block;}
  .ex-table tr[onclick] > td:nth-child(6){display:none;}

  .ex-num-cell{
    width:26px;height:26px;border-radius:var(--radius-sm);display:grid;place-items:center;
    font-family:var(--font-d);font-weight:800;font-size:.8rem;
  }
  .ex-name-main{font-size:.94rem;font-weight:700;line-height:1.3;}
  /* meta line carries the muscle plus the two row actions */
  .ex-table tr[onclick] > td:nth-child(3){
    display:flex;align-items:center;gap:7px;flex-wrap:wrap;
  }
  .ex-name-en,.ex-why{display:none;}
  .sets-cell{
    font-family:var(--font-d);font-size:.94rem;font-weight:800;
    color:var(--lime);white-space:nowrap;
  }
  .muscle-tag,.rest-cell{
    font-size:.78rem;color:var(--muted);background:none !important;
    border:none !important;padding:0 !important;white-space:nowrap;
  }
  /* injected action buttons sit inline with the name, quietly */
  .sl-btn,.ex-swap-btn{
    font-size:.7rem;padding:2px 8px;border-radius:var(--radius-xs);font-weight:600;
    background:var(--bg5);border:1px solid var(--border);color:var(--muted);
  }
  .sl-btn.open{background:var(--lime);color:#0A0B0C;border-color:var(--lime);}

  .set-log-row td{display:block !important;padding:0 !important;}
  .set-log-row{background:var(--bg2) !important;border:1px solid var(--border2);
    border-radius:var(--radius-md);padding:11px !important;margin:0 0 9px !important;}

  /* superset header: compact, the note is one quiet line */
  .ss-head td{padding:12px 2px 8px !important;background:none;border:none;border-top:1px solid var(--border);}
  .ss-tag{font-size:.74rem;padding:1px 8px;}
  .ss-type{font-size:.84rem;}
  .ss-meta{font-size:.76rem;}
  .ss-note{font-size:.78rem;margin-top:5px;line-height:1.45;}
  .ss-row td{background:none;}
  .ss-row-b td{border-bottom:none;}
}

/* ── Quick-start cards: shorter, denser ──────────────────────────────── */
.workout-card{padding:15px 11px;}
.workout-card-icon{margin-bottom:7px;}

/* ── Dashboard: one clear rhythm instead of stacked slabs ────────────── */
#panel-dashboard > div:first-child{
  background:var(--bg3);border:1px solid var(--border);
  border-radius:var(--radius-lg);padding:15px 17px;
}

/* Section label above a group (the small "התחל אימון" style headers) */
.panel > div > div:first-child[style*="uppercase"]{
  font-size:.8rem !important;letter-spacing:.06em !important;color:var(--muted) !important;
}

/* ── Warm-up / trainer note become quiet reference blocks ────────────── */
.warmup-card,.trainer-note{
  background:var(--bg2) !important;border:1px solid var(--border) !important;
  border-radius:var(--radius-md) !important;padding:14px 16px !important;
}
.trainer-note{font-size:.86rem;line-height:1.6;}

/* ── Empty states no longer sit inside a frame ───────────────────────── */
.empty-state{background:var(--bg2);border:1px solid var(--border);border-radius:var(--radius-lg);}

/* A rest day is not an accent — the lime belongs to days you train */
.dash-day-chip.ddc-rest{background:var(--bg3) !important;border-color:var(--border) !important;}
.dash-day-chip.ddc-rest .ddc-dot{background:var(--muted2) !important;}

/* Today-hero on a rest day: informative, not a billboard */
#today-hero{padding:16px 18px !important;}
#today-hero .th-title,#today-hero > div > div:nth-child(3){font-size:1.5rem !important;}


/* ══════════════════════════════════════════════════════════════════════
   CHROME — what is allowed to be on screen at all times.
   Previously: avatar + greeting + duplicated name + search field + level
   badge + bell in the header, plus a fixed rest-timer pill. That is six
   permanent things competing with the content of every one of 16 panels.
   ══════════════════════════════════════════════════════════════════════ */

/* The rest timer belongs to a workout, not to the settings form */
.timer-float{display:none;}
body[data-panel="push"]  .timer-float,
body[data-panel="pull"]  .timer-float,
body[data-panel="legs"]  .timer-float,
body[data-panel="arms"]  .timer-float,
body[data-panel="crossfit"] .timer-float{display:flex;}

/* Search: a disclosure below the header instead of a permanent field inside it */
.ex-search-wrap{display:none;position:relative;flex:none;max-width:none;margin:0;padding:0 16px 10px;}
.ex-search-wrap.open{display:block;}
.ex-search-input{width:100%;}
.topbar-icon-btn.active{color:var(--lime);border-color:var(--lime);}

.topbar-header{padding:14px 16px 10px;padding-top:calc(14px + env(safe-area-inset-top,0px));}
.topbar-greeting{font-size:.72rem;}
.topbar-appname{font-size:1rem;}


/* ══════════════════════════════════════════════════════════════════════
   WORKOUT HEADER — the day, its size, and one action.
   It used to be a row of four identical pills: three naming muscles and a
   fourth naming a duration. Same shape, different meaning, and the muscle
   ones were stale markup that contradicted the exercises below them.
   ══════════════════════════════════════════════════════════════════════ */
.day-head-card > .card-head{
  display:block;padding:0 0 14px !important;margin-bottom:16px;
}
.day-title{font-size:1.375rem !important;font-weight:800;line-height:1.2;margin:0;}
.day-meta{display:block;margin-top:5px;font-size:.86rem;color:var(--muted);}

/* Starting the workout is the point of this screen, so it looks like it */
.day-head-card .gym-mode-btn{
  display:flex;align-items:center;justify-content:center;gap:8px;
  width:100%;margin-top:14px;padding:15px;
  background:var(--lime);color:#08090B;border:none;border-radius:var(--radius-md);
  font-family:var(--font-d);font-size:1rem;font-weight:800;letter-spacing:.01em;
  cursor:pointer;transition:transform .15s var(--ease-out),filter .15s;
}
.day-head-card .gym-mode-btn:active{transform:scale(.985);filter:brightness(.92);}


/* ══════════════════════════════════════════════════════════════════════
   TODAY CARD — one frame, one name, one action.
   ══════════════════════════════════════════════════════════════════════ */

/* Written when the streak banner led the dashboard; it now wraps the today
   card and produces a box inside a box. */
#panel-dashboard > div:first-child{
  background:none;border:none;border-radius:0;padding:0;
}

.today-hero{padding:18px !important;}
.today-hero-title{
  font-size:1.5rem !important;font-weight:800;line-height:1.15;
  color:var(--text);margin:0;
}
.today-hero-day{
  font-size:.88rem;color:var(--muted);margin-top:4px;font-weight:500;
  letter-spacing:0;
}
.hero-badge{font-size:.72rem;padding:4px 10px;}
.hero-bottom{display:block;}
.hero-wk-meta{display:flex;gap:14px;margin-top:14px;}
.hero-meta-chip{font-size:.82rem;color:var(--muted);}

/* The week strip runs off the right edge of the panel because the panel's
   own inset is applied twice on a horizontally scrolling child. */
.week-carousel,.dash-week-row{padding-right:0;padding-left:0;}


/* ══════════════════════════════════════════════════════════════════════
   EXERCISE ROW — number, name, prescription. Two lines, no controls.
   ══════════════════════════════════════════════════════════════════════ */
@media (max-width:680px){
  .ex-table tr[onclick]{
    grid-template-columns:32px 1fr auto;
    grid-template-areas:"num name sets" "num meta rest";
    column-gap:12px;row-gap:2px;padding:13px 14px;margin-bottom:8px;
  }
  .ex-table tr[onclick] > td:nth-child(3){grid-area:meta;}
  .ex-table tr[onclick] > td:nth-child(5){grid-area:rest;display:block;text-align:left;}
  .ex-table tr[onclick] > td:nth-child(6){display:none;}
  .muscle-tag::after{content:none;}
  .rest-cell{font-size:.78rem;color:var(--muted2);white-space:nowrap;}
  .sets-cell{font-size:.94rem;}
}

/* The alternatives control, now in the modal beside the exercise */
.m-alt-btn{
  width:100%;margin:2px 0 6px;padding:11px;
  background:none;border:1px solid var(--border2);border-radius:var(--radius-md);
  color:var(--text);font-family:var(--font);font-size:.9rem;font-weight:600;cursor:pointer;
  transition:border-color .18s,color .18s;
}
.m-alt-btn:hover{border-color:var(--lime);color:var(--lime);}

/* The rest timer duplicated gym mode's own timer while covering live content
   on whatever screen it floated over. Gym mode keeps its one. */
.timer-float{display:none !important;}


/* ══════════════════════════════════════════════════════════════════════
   SUPERSET HEADER — one line. The "why" is a disclosure, not a preamble.
   ══════════════════════════════════════════════════════════════════════ */
.ss-line{display:flex;align-items:center;gap:9px;}
.ss-tag{
  flex-shrink:0;background:none;color:var(--lime);border:1px solid var(--lime);
  font-family:var(--font-d);font-size:.72rem;font-weight:800;
  padding:3px 9px;border-radius:999px;letter-spacing:.02em;
}
.ss-type{display:none;}   /* antagonist vs non-competing changes nothing for the lifter */
.ss-meta{font-size:.8rem;color:var(--muted);flex:1;min-width:0;}
.ss-why{
  flex-shrink:0;width:22px;height:22px;border-radius:50%;
  background:none;border:1px solid var(--border2);color:var(--muted);
  font-size:.78rem;font-weight:700;cursor:pointer;line-height:1;
  transition:border-color .18s,color .18s;
}
.ss-why:hover{border-color:var(--lime);color:var(--lime);}
.ss-note{
  margin-top:9px;font-size:.84rem;line-height:1.6;color:var(--muted2);
  border-right:2px solid var(--border2);padding-right:11px;
}
.ss-head > td{padding:18px 0 10px !important;}


/* ══════════════════════════════════════════════════════════════════════
   WEEK STRIP — six days, all visible, no sideways scroll.
   Each chip used to carry the full workout name ("פול-בודי ב׳"). Six of
   those overflow 358px, so the row scrolled and the last day was cut. The
   today card above already names the workout; here the dot is enough.
   ══════════════════════════════════════════════════════════════════════ */
#dash-week-row{
  display:grid !important;grid-template-columns:repeat(6,1fr);
  gap:6px;overflow:visible !important;padding-bottom:0 !important;
}
.dash-day-chip{
  min-width:0;padding:11px 2px 10px;display:flex;flex-direction:column;
  align-items:center;gap:7px;border-radius:var(--radius-md);
  background:var(--bg2);border:1px solid transparent;
}
.dash-day-chip .ddc-type{display:none;}          /* the card above says it */
.dash-day-chip .ddc-name{font-size:.8rem;font-weight:700;color:var(--muted);}
.dash-day-chip .ddc-dot{width:7px;height:7px;border-radius:50%;flex-shrink:0;}
.dash-day-chip.ddc-rest .ddc-name{color:var(--muted2);font-weight:500;}
.dash-day-chip.ddc-rest .ddc-dot{background:none;border:1px solid var(--muted2);}
.dash-day-chip.ddc-active{border-color:var(--lime);background:var(--bg3);}
.dash-day-chip.ddc-active .ddc-name{color:var(--lime);}
.dash-day-chip.ddc-done .ddc-dot{background:var(--green) !important;}


/* ══════════════════════════════════════════════════════════════════════
   WORKOUT PICKER — three identical rows.
   A 2-column grid leaves an odd third card in a shape of its own: two
   centred tiles above, one wide row below, same purpose, different form.
   The card above already offers today, so this list is only "give me a
   different day" — a list is the honest shape for that.
   ══════════════════════════════════════════════════════════════════════ */
.workout-picker{display:flex;flex-direction:column;gap:8px;}
.workout-picker .workout-card{
  display:flex;align-items:center;gap:13px;
  width:100%;padding:14px 16px;text-align:right;
}
.workout-picker .workout-card-icon{margin:0;flex-shrink:0;}
.workout-picker .workout-card-title{margin:0;font-size:1rem;}
.workout-picker .workout-card-sub{margin:0;font-size:.82rem;color:var(--muted);}
.workout-picker .workout-card > div:not(.workout-card-icon){text-align:right;}
.workout-picker .wc-span{grid-column:auto;}


/* ══════════════════════════════════════════════════════════════════════
   RTL, CONTRAST, AND TOUCH
   ══════════════════════════════════════════════════════════════════════ */

/* A section heading is a marker and a title, together. space-between with
   three children threw the marker to one edge and the badge to the other,
   leaving the title floating in the middle of its own row. */
.card-head{justify-content:flex-start !important;gap:10px;}
.card-head > :last-child:not(h2){margin-inline-start:auto;}

/* Hebrew has no case, so uppercase does nothing to it - but it does reach the
   Latin fragments inside, turning "(2.5g/kg)" into "(2.5G/KG)" and
   "Bench Press" into "BENCH PRESS". */
.stat-box .lbl,.day-cell .dc-name,.ex-table th,.m-section,
.elog-section-title,.today-hero-info .today-hero-day{text-transform:none;}

/* Rest days were dimmed twice: muted2 text at .32 opacity lands near 1.6:1.
   Dim them with one step, not two. */
.day-cell.rest-day{opacity:.62;}
.dash-day-chip.ddc-rest{opacity:.62;}

/* The nav sat at 82% opacity over a scrolling list, so exercise rows smeared
   through it and read as dirt along the bottom of every screen. */
.mobile-bottom-nav{background:rgba(8,9,11,.985);}
.mbn-label{font-size:.66rem;}

/* Logical properties: these were physical, so they hugged the wrong side */
.ex-swap-btn{margin-right:0;margin-inline-start:4px;}
.sl-btn{margin-right:0;margin-inline-start:6px;}
.ss-tag{margin-left:0;}
.ex-table tr[onclick] > td:nth-child(4),
.ex-table tr[onclick] > td:nth-child(5){text-align:left;}

/* A fraction is read left-to-right even inside Hebrew */
.wk-frac,.ell-num{direction:ltr;unicode-bidi:isolate;display:inline-block;}

/* Last session's weight belongs on the meta line, not wrapped under the name */
@media (max-width:680px){
  .ex-last-log{
    grid-area:meta;font-size:.76rem;color:var(--lime);opacity:.85;
    margin:0;padding:0;background:none;border:none;
  }
  .ex-table tr[onclick]:has(.ex-last-log){
    grid-template-areas:"num name sets" "num meta rest" "num last last";
  }
  .ex-table tr[onclick] .ex-last-log{grid-area:last;margin-top:3px;}
}


/* ══════════════════════════════════════════════════════════════════════
   WEEK BAR — seven columns of ~45px. Only a day and a word fit.
   ══════════════════════════════════════════════════════════════════════ */
@media (max-width:680px){
  .week-bar{gap:5px;}
  .day-cell{padding:10px 3px;min-width:0;}
  .day-cell .dc-name{font-size:.62rem;line-height:1.25;letter-spacing:0;}
  .day-cell .dc-type{
    font-size:.6rem;line-height:1.2;font-weight:700;
    overflow:hidden;text-overflow:ellipsis;
  }
  .day-cell .dc-label{display:none;}   /* the sub never fit; it wrapped to five lines */
}

/* The schedule tab's picker gets the same list shape as the dashboard's,
   rather than two tiles plus a lone third.
   No !important on display: renderAdaptivePanels hides unused days with an
   inline style:none, and !important would override it back into view. */
.workout-picker > button{
  display:grid;grid-template-columns:auto 1fr;align-items:center;
  column-gap:13px;row-gap:2px;
  width:100%;text-align:right !important;padding:14px 16px !important;
}
.workout-picker > button > div:first-child{grid-row:1/3;margin:0 !important;}
.workout-picker .wsel-title{margin:0 !important;font-size:1rem !important;white-space:nowrap;}
.workout-picker .wsel-sub{
  margin:0 !important;font-size:.8rem !important;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
}
.workout-picker .wsel-meta{display:none;}   /* the day panel repeats it on arrival */


/* ══════════════════════════════════════════════════════════════════════
   GYM MODE — the screen in your hand between sets.
   ══════════════════════════════════════════════════════════════════════ */

/* -2px tracking suits a Latin display face and destroys Hebrew word spacing:
   "לחיצת חזה בשכיבה + מתח / לט פולדאון" rendered with no gaps at all. */
.gym-name{letter-spacing:-.5px;word-spacing:.08em;}
.gym-name-pair{font-size:1.35rem !important;line-height:1.4;letter-spacing:0;font-weight:800;}
.gym-counter{text-transform:none;letter-spacing:.06em;}
.gym-ss{font-size:.84rem;gap:7px;}
.gym-pair-note{
  margin:10px auto 2px;max-width:44ch;font-size:.84rem;line-height:1.6;
  color:var(--muted2);text-align:right;
  border-right:2px solid var(--border2);padding-right:11px;
}

/* Ten buttons stood open under every set. The question is answered once. */
.rpe-wrap{padding:8px 20px calc(8px + env(safe-area-inset-bottom,0px));}
.rpe-label{
  display:flex;align-items:center;justify-content:space-between;width:100%;
  background:none;border:none;padding:8px 0;cursor:pointer;
  font-family:var(--font);font-size:.86rem;font-weight:700;
  color:var(--muted);text-transform:none;letter-spacing:0;margin:0;
}
.rpe-label #rpe-current{color:var(--lime);font-family:var(--font-d);font-weight:800;}
.rpe-btns{display:none;}
.rpe-wrap.open .rpe-btns{display:grid;margin-top:8px;}


/* The set-complete control is empty until it is ticked, so it reads as a
   broken input rather than a button. Show a ghost check to be pressed. */
.gym-check::after{content:'¹3';color:rgba(255,255,255,.22);font-size:1.15rem;line-height:1;}
.gym-check.done::after{content:none;}
.gym-pair-side .gym-check::after{font-size:1rem;}


/* ══════════════════════════════════════════════════════════════════════
   COLLAPSIBLE SECTIONS
   These screens were long because everything was open at once, not because
   any one section was wrong. A section you consult occasionally is a heading
   until you ask for it.
   ══════════════════════════════════════════════════════════════════════ */
.card.collapsible > .card-head{cursor:pointer;user-select:none;margin-bottom:0;}
.card.collapsible > .card-head::after{
  content:'';width:8px;height:8px;flex-shrink:0;
  border-right:2px solid var(--muted);border-bottom:2px solid var(--muted);
  transform:rotate(45deg) translate(-2px,-2px);
  transition:transform .2s var(--ease-out);
  margin-inline-start:auto;
}
.card.collapsible > .card-head:hover::after{border-color:var(--lime);}
.card.collapsible.open > .card-head{margin-bottom:14px;}
.card.collapsible.open > .card-head::after{transform:rotate(225deg) translate(-3px,-3px);}
.card.collapsible > .card-body{display:none;}
.card.collapsible.open > .card-body{display:block;}

/* ══════════════════════════════════════════════════════════════════════
   SUB-NAV — the second level the bottom nav could not carry
   ══════════════════════════════════════════════════════════════════════ */
.subnav{
  display:flex;gap:6px;margin-bottom:22px;padding:4px;
  background:var(--bg2);border:1px solid var(--border);border-radius:999px;
}
.subnav-btn{
  flex:1;min-width:0;padding:9px 6px;border:none;border-radius:999px;
  background:none;color:var(--muted);cursor:pointer;
  font-family:var(--font);font-size:.82rem;font-weight:700;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
  transition:background .18s,color .18s;
}
.subnav-btn.active{background:var(--lime);color:#08090B;}
.subnav-btn:not(.active):hover{color:var(--text);}

/* ══════════════════════════════════════════════════════════════════════
   PROGRESS — the graph and this week's numbers lead; the rest is on request
   ══════════════════════════════════════════════════════════════════════ */
.panel.active#panel-progress{display:flex;flex-direction:column;}
.sec-weight{order:1;}
.sec-report{order:2;}
.sec-recovery{order:3;}
.sec-streak{order:4;}
.sec-meas{order:5;}
.sec-hist{order:6;}
#panel-progress > .subnav{order:0;}
#panel-progress > *:not([class*="sec-"]):not(.subnav){order:7;}

/* Saving a check-in is a positive act; --red is the danger colour */
.rec-save-ok{background:var(--lime) !important;color:#08090B !important;border:none !important;}

/* ══════════════════════════════════════════════════════════════════════
   SETTINGS — your profile first; the calculators are not settings
   ══════════════════════════════════════════════════════════════════════ */
.panel.active#panel-settings{display:flex;flex-direction:column;}
.sec-profile{order:1;}
.sec-users{order:2;}
.sec-tools{order:3;}
#panel-settings > *:not([class*="sec-"]){order:4;}

/* ══════════════════════════════════════════════════════════════════════
   NUTRITION — the numbers you came for, before the reference material
   ══════════════════════════════════════════════════════════════════════ */
.panel.active#panel-nutrition{display:flex;flex-direction:column;}
#panel-nutrition > .subnav{order:0;}
#panel-nutrition > .card:not(.collapsible){order:1;}
.sec-meals{order:2;}
.sec-chol{order:3;}
#panel-nutrition > *:not(.card):not(.subnav){order:4;}


/* ══════════════════════════════════════════════════════════════════════
   SETTINGS GROUPS — seventeen fields is not a form, it is an inventory.
   ══════════════════════════════════════════════════════════════════════ */
.settings-group{
  border:none;padding:0;margin:0 0 8px;min-width:0;
  border-top:1px solid var(--border);
}
.settings-group:first-of-type{border-top:none;}
.settings-group-head{
  display:flex;align-items:center;gap:9px;width:100%;
  padding:15px 0;cursor:pointer;user-select:none;
  font-family:var(--font);font-size:.98rem;font-weight:700;color:var(--text);
}
.settings-group-head::after{
  content:'';width:8px;height:8px;flex-shrink:0;
  border-right:2px solid var(--muted);border-bottom:2px solid var(--muted);
  transform:rotate(45deg) translate(-2px,-2px);
  transition:transform .2s var(--ease-out);
  margin-inline-start:auto;
}
.settings-group.open > .settings-group-head::after{transform:rotate(225deg) translate(-3px,-3px);}
.settings-group-body{display:none;padding-bottom:16px;}
.settings-group.open > .settings-group-body{display:block;}

/* the action row sits below every group and never collapses */
#settings-form > div[style*="margin-top:20px"]{margin-top:22px !important;}


/* ══════════════════════════════════════════════════════════════════════
   SETTINGS FIELDS — five fields should not be a full screen
   ══════════════════════════════════════════════════════════════════════ */
.settings-group-body .settings-field{margin-bottom:12px;}
.settings-group-body .settings-label{margin-bottom:5px;font-size:.8rem;}
.settings-group-body .settings-input{padding:11px 13px;font-size:.95rem;}
@media (max-width:680px){
  /* short numeric answers sit two to a row; only the name needs full width */
  .settings-group-body .grid-2{display:grid;grid-template-columns:1fr 1fr;gap:0 10px;}
  .settings-group-body .grid-2 > .settings-field:first-child{grid-column:1/-1;}
}


/* ══════════════════════════════════════════════════════════════════════
   BUTTON HIERARCHY — one primary per screen.
   The build had accumulated four primary treatments: a lime fill, a
   yellow-to-lime gradient, a saturated cyan and a saturated green. Sitting
   together they read as four equally urgent choices.
   ══════════════════════════════════════════════════════════════════════ */
.btn-primary,.elog-empty-cta,.install-banner-btn,.chat-send,
.settings-save,.rec-save-ok,.day-head-card .gym-mode-btn{
  background:var(--lime) !important;color:#08090B !important;
  border:none !important;box-shadow:none !important;
}
.btn-quiet{
  background:none !important;color:var(--text) !important;
  border:1px solid var(--border2) !important;
}
.btn-quiet:hover{border-color:var(--lime) !important;color:var(--lime) !important;}
#theme-btn{
  background:none !important;border:1px solid var(--border2) !important;
  color:var(--text) !important;
}


/* ══════════════════════════════════════════════════════════════════════
   FINAL PASS
   ══════════════════════════════════════════════════════════════════════ */

/* Meal timing is read once, when you set your training hour */
.timing-card{margin-bottom:0;}
.timing-head{
  display:flex;align-items:center;gap:9px;width:100%;
  background:none;border:none;padding:0;margin:0;cursor:pointer;text-align:right;
  font-family:var(--font);font-size:.95rem;font-weight:700;
  color:var(--text);text-transform:none;letter-spacing:0;
}
.timing-head::after{
  content:'';width:8px;height:8px;flex-shrink:0;margin-inline-start:auto;
  border-right:2px solid var(--muted);border-bottom:2px solid var(--muted);
  transform:rotate(45deg) translate(-2px,-2px);transition:transform .2s var(--ease-out);
}
.timing-card.open .timing-head::after{transform:rotate(225deg) translate(-3px,-3px);}
.timing-card-body{display:none;padding-top:14px;}
.timing-card.open .timing-card-body{display:block;}

/* Seven 32px slabs to say "no workout yet". A bar is enough. */
.wr-days{gap:5px;margin-top:14px;}
.wr-day-bar{height:14px;border-radius:4px;}
.wr-day-lbl{font-size:.7rem;color:var(--muted2);}


/* ══════════════════════════════════════════════════════════════════════
   ROUND 1 — correctness
   ══════════════════════════════════════════════════════════════════════ */

/* .chat-wrap was a fixed 60vh with a 400px floor, inside a panel already
   spending ~290px on header, sub-nav, section head and the API notice. The
   composer ended up under the bottom nav: a chat you cannot type into. */
.chat-wrap{height:auto !important;min-height:0 !important;}
.chat-msgs{min-height:180px;max-height:calc(100dvh - 400px);margin-bottom:10px;}
.chat-input-wrap{position:sticky;bottom:0;background:var(--bg);padding-top:4px;}

/* a range is one atom and reads left-to-right inside Hebrew */
bdi[dir="ltr"]{unicode-bidi:isolate;}


/* ══════════════════════════════════════════════════════════════════════
   ROUND 1b — one system per problem
   ══════════════════════════════════════════════════════════════════════ */

/* ── Badges: one shape. A pill's border always matches its own text. ──── */
.badge{
  border-radius:var(--radius-sm);padding:4px 10px;
  font-size:.72rem;font-weight:700;letter-spacing:0;text-transform:none;
  white-space:nowrap;
}
.badge-neutral{
  background:rgba(255,255,255,.05);color:var(--muted);
  border:1px solid var(--border2);
}
/* lime is the colour of the next action, so it does not outline containers */
.api-key-notice,.timing-card{border-color:var(--border) !important;}
#panel-push > .card,#panel-pull > .card,
#panel-legs > .card,#panel-arms > .card{border-top:none !important;}

/* ── Buttons: primary, secondary, quiet. Nothing else. ───────────────── */
.chat-send,.food-add-btn,.weight-add-btn{
  background:var(--lime) !important;color:#08090B !important;
  border:none !important;border-radius:var(--radius-sm) !important;
  letter-spacing:0 !important;box-shadow:none !important;
}
.btn-inline{
  display:inline-block;margin-top:9px;padding:8px 16px;
  border-radius:var(--radius-sm);cursor:pointer;
  font-family:var(--font);font-size:.85rem;font-weight:700;
}

/* ── Hebrew does not take tracking or case ───────────────────────────── */
.settings-save,.food-add-btn,.weight-add-btn,.chat-send,.rec-save-btn,
.card-head h2,.badge,.subnav-btn,.mbn-label,.wr-stat-lbl,.stat-box .lbl,
.elog-section-title,.m-section,.timing-head,.settings-group-head{
  letter-spacing:0 !important;text-transform:none !important;
}
#panel-dashboard [style*="uppercase"]{
  text-transform:none !important;letter-spacing:0 !important;
}

/* ── Radius: four steps, everywhere ──────────────────────────────────── */
.card,.empty-state,.today-hero,.meal-row,.workout-card,.timing-card,
.tip-card,.supp-card,.stat-box,.wr-stat-card,.dash-day-chip,.day-cell,
.api-key-notice,.chat-msgs,.settings-input,.meas-input,
.ex-table tr[onclick],.gym-pair-round,.set-log-row{
  border-radius:var(--radius-md);
}
.badge,.subnav,.subnav-btn,.timer-btn,.hero-badge{border-radius:999px;}

/* ── The streak card was half empty behind a stray orange border ──────── */
#panel-dashboard > div:has(#streak-num){
  border-color:var(--border) !important;
  padding:13px 16px !important;
}
#streak-micro:empty{display:none;}

/* ── Timeline: the dots sat 18px off their own rail ──────────────────── */
/* Measured, not reasoned: with the base right:-7px the dot centre lands 22px
   to the right of the rail (rail centre x=353, dot centre x=375 at 390px).
   Round 3 removed the offset on the strength of arithmetic against the wrong
   reference box; this value is the measurement. */
/* superseded by .tl-body .tl-dot, which is centred on the item's border */

/* ── The weight-log explanation read as an error ─────────────────────── */
#panel-elog > .trainer-note{
  color:var(--muted);border-inline-start:none;
  border-inline-end:2px solid var(--lime);
}
#panel-elog > .trainer-note strong{color:var(--text);font-weight:700;}

/* ── Empty states: one shape, CTA optional ───────────────────────────── */
.elog-empty-state{
  background:var(--bg2);border:1px solid var(--border);
  border-radius:var(--radius-md);padding:34px 22px !important;
}
.elog-empty-state .elog-empty-title,.empty-state-title{
  font-size:1.06rem !important;font-weight:700;margin-bottom:6px;
}


/* ── Chat: the AI bubble outlined itself in lime. Lime is the next action,
      not a container, and the bubble is not an action. ─────────────────── */
.chat-bubble.ai{border-color:var(--border2) !important;}
.chat-bubble{border-radius:var(--radius-md);}

/* A disabled primary should read as unavailable, not as a different brand */
.chat-send:disabled,.settings-save:disabled,button:disabled.btn-primary{
  background:var(--bg4) !important;color:var(--muted2) !important;
  opacity:1;cursor:not-allowed;
}

/* ── Timeline: one rail, one dot colour. Four hues across four rows read
      as four categories when it is one sequence. ───────────────────────── */
.tl-dot{background:var(--muted2) !important;}
.tl-item.tl-now .tl-dot,.tl-item:first-child .tl-dot{background:var(--lime) !important;}

/* Strength targets are goals, not warnings */
#panel-timeline .stat-box .val{color:var(--text) !important;}


/* ══════════════════════════════════════════════════════════════════════
   ROUND 2a — one section heading, one rhythm
   ══════════════════════════════════════════════════════════════════════ */

/* the dashboard is now built from the same .card sections as every other
   screen, so it inherits the same 24px rhythm instead of per-block margins */
#panel-dashboard > .card{margin-bottom:0;}
.panel > *{margin-bottom:var(--gap);}

/* a heading may carry one trailing item: a count, or a link to more */
.head-meta{font-size:.8rem;color:var(--muted);font-weight:600;}
.link-action{
  background:none;border:none;padding:0;cursor:pointer;
  font-family:var(--font);font-size:.82rem;font-weight:700;color:var(--lime);
}
.link-action:hover{text-decoration:underline;}


/* ══════════════════════════════════════════════════════════════════════
   ROUND 2b — one week calendar language
   The app draws the same week three times: chips on the dashboard, cells on
   the schedule tab, bars on progress. Three components is a real refactor;
   three *languages* is not. These are the rules all three now share:
     today   = lime outline
     trained = green fill
     planned = the day's category colour, as a dot only
     rest    = hollow, dimmed once
   ══════════════════════════════════════════════════════════════════════ */

/* progress marked today in cyan while the other two used lime */
.wr-day-bar.today{border-color:var(--lime) !important;border-width:1.5px;}
.wr-day-bar.done{background:var(--green) !important;border-color:var(--green) !important;}

/* the dashboard marked a completed day green on the dot; the schedule tab
   tinted the whole cell and added a tick. Keep the tick, drop the wash. */
.day-cell.done-day{
  background:var(--bg3) !important;
  border-color:rgba(61,255,149,.35) !important;
}
.day-cell.active-day{
  background:var(--bg3) !important;
  box-shadow:0 0 0 1px var(--lime) inset !important;
  border-color:var(--lime) !important;
}
.dash-day-chip.ddc-active{box-shadow:none !important;background:var(--bg3) !important;}
.dash-day-chip.ddc-done .ddc-dot{background:var(--green) !important;}

/* one dimming step for a rest day, in all three */
.day-cell.rest-day,.dash-day-chip.ddc-rest{opacity:.62 !important;}


/* ══════════════════════════════════════════════════════════════════════
   ROUND 2c — dead vertical space, and one way to say "no data"
   ══════════════════════════════════════════════════════════════════════ */

/* The weight chart was ~120px of plot under 60px of chrome. Give the data
   the room; it is the reason the screen exists. */
#weight-chart,#meas-svg{min-height:190px;}

/* The add-weight form broke onto three unaligned rows: date and weight on
   one line, then the button alone at content width. One row, one baseline. */
.weight-form,.meas-form{display:flex;flex-wrap:wrap;gap:8px;align-items:stretch;}
.weight-form > input,.weight-form > .weight-date{flex:1 1 120px;min-width:0;}
.weight-add-btn{flex:0 0 auto;padding-inline:20px;}

/* Empty panels ended in a long fall of black. A panel stops where its
   content stops. */
#panel-elog .elog-empty-state,#panel-food .empty-state{margin-bottom:0;}
#panel-chat .chat-wrap{padding-bottom:0;}
.panel > *:last-child{margin-bottom:0;}

/* "No data" was a dash in two tiles and a zero in the two beside them */
.wr-stat-val{font-variant-numeric:tabular-nums;}
.wr-stat-card:has(.wr-stat-val:not([data-val])) .wr-stat-val{color:var(--muted2) !important;}


/* ── The add-weight row: date, weight, button on one baseline ────────── */
.weight-log-form{display:flex;flex-wrap:nowrap;gap:8px;align-items:stretch;margin-bottom:16px;}
.weight-log-form .wl-input{flex:1 1 0;min-width:0;}
.weight-log-form .weight-add-btn{flex:0 0 auto;padding-inline:18px;white-space:nowrap;}
#weight-svg{min-height:190px;}

/* One way to say "no data": a muted dash, never a coloured one */
.wr-stat-val,.stat-box .val{}
.wr-stat-card .wr-stat-val{color:var(--text);}
.wr-stat-val:not([data-val]){color:var(--muted2) !important;}

/* a stat tile's value colour must not encode which stat it is */
.wr-stat-val{color:var(--text) !important;}
.wr-stat-val.is-empty{color:var(--muted2) !important;}


/* ══════════════════════════════════════════════════════════════════════
   ROUND 3 — regressions out, top blockers in
   ══════════════════════════════════════════════════════════════════════ */

/* Timeline: one sequence, one dot colour, and "now" is the only accent */
.tl-item.tl-now .tl-dot{background:var(--lime) !important;}
.tl-item:first-child .tl-dot{background:var(--muted2) !important;}
.tl-item.tl-now:first-child .tl-dot{background:var(--lime) !important;}

/* Today, marked the same way in all three calendars */
.dash-day-chip.ddc-active{
  border-color:var(--lime) !important;
  box-shadow:0 0 0 1px var(--lime) inset !important;
  background:var(--bg3) !important;
}

/* A stat tile's value colour must not encode which stat it is — and the
   calorie target is not an error, so it is not red. */
.macro-stats-grid .stat-box .val,
#panel-nutrition .stat-box .val,
#panel-schedule .stat-box .val{color:var(--text) !important;}
.stat-box .lbl{color:var(--muted);}

/* The workout cards are tappable, so they keep a border — but the border is
   structure and the colour is identity, so the colour lives on the icon and
   the title. Three saturated outlines were the last of the rainbow. */
.workout-card,.workout-picker > button{
  border:1px solid var(--border) !important;
  border-width:1px !important;
}
.workout-card:hover,.workout-picker > button:hover{border-color:var(--border2) !important;}
#today-hero{border-color:var(--border) !important;}

/* Day cells: 48px cannot hold "פול-בודי ג׳" without breaking the word */
@media (max-width:680px){
  .day-cell .dc-type{
    font-size:.58rem;line-height:1.15;
    overflow-wrap:normal;word-break:keep-all;hyphens:none;
  }
  .day-cell .dc-name{letter-spacing:0;text-transform:none;font-size:.6rem;}
}

/* Hebrew takes no tracking — the selectors the earlier sweep missed */
.day-cell .dc-name,.settings-label,.ddc-name,.gym-badge,.pr-title,
.tips-label,.ex-table th,.cf-moves th,.wr-day-lbl,.timing-head{
  letter-spacing:0 !important;text-transform:none !important;
}

/* .card is the large surface; the radius sweep had flattened it to md */
.card,.today-hero,.empty-state{border-radius:var(--radius-lg);}


/* The day card carried a 7rem watermark of its own title at 2.5% white.
   It repeats the heading directly above it and, before renderAdaptivePanels
   runs, it repeats the *previous plan's* heading. Decoration without intent. */
.card[data-wm]::before{content:none;}


/* ══════════════════════════════════════════════════════════════════════
   ROUND 4 — the settings action cluster, and a result that is not an input
   ══════════════════════════════════════════════════════════════════════ */

/* Four buttons wrapped at content width across two rows in three visual
   weights. Two columns, primary across the top. */
.settings-actions,.settings-actions-second{
  display:grid;grid-template-columns:1fr 1fr;gap:10px;align-items:stretch;
}
.settings-actions{margin-top:22px;}
.settings-actions-second{margin-top:10px;}
.settings-actions > *,.settings-actions-second > *{
  margin:0 !important;width:100%;text-align:center;
  display:flex;align-items:center;justify-content:center;
  min-height:46px;border-radius:var(--radius-sm);
  font-size:.92rem;font-weight:700;
}
#btn-save-settings{grid-column:1/-1;}
.settings-link{width:100%;margin-top:18px;min-height:46px;}

/* The BMR readout sat in a box identical to .settings-input, so a computed
   result read as a field waiting to be filled. */
.bmr-display{
  background:none !important;border:none !important;padding:10px 0 0 !important;
  color:var(--muted);font-size:.86rem;
}

/* the chart box was taller than the plot it held */
.weight-chart-wrap{margin-bottom:0;}
#weight-svg{min-height:0;height:auto;}


/* ══════════════════════════════════════════════════════════════════════
   ROUND 5
   ══════════════════════════════════════════════════════════════════════ */

/* tips drew six cards with six border colours that encode nothing — the same
   pattern already removed from the timeline. Colour stays on the icon. */
.tip-card{border-right-color:var(--border2) !important;}

/* Lime is the next action. In gym mode it was also the day badge, the pair
   tag, the number chips and the set targets — five jobs at once. */
.gym-badge{
  background:none !important;border:1px solid var(--border2) !important;
  color:var(--muted) !important;letter-spacing:0 !important;
}

/* These two beat the earlier sweep on specificity, not source order */
.hero-badge,.today-hero-info .today-hero-day{
  letter-spacing:0 !important;text-transform:none !important;
}

/* An empty week should read as "not yet", not as seven blank outlines */
.wr-day-bar{background:var(--bg4);border-color:transparent;}
.wr-day-bar.today{background:var(--bg3);}


/* ── Timeline: the rail and the dots now share one reference ───────────
   The rail used to be an absolutely-positioned div at right:22px, aligned
   against a card-body padding of 40px — a padding the structural pass later
   removed with `.card-body{padding:0!important}`, so the rail migrated into
   the text and the dots had to be nudged by hand to chase it. Drawing the
   rail as the item's own border removes the coupling: a dot centred on its
   parent's border cannot drift from it. */
.tl-body{position:relative;}
.tl-body .tl-item{
  /* physical `right`, not the logical inline-end: in RTL the inline end is
     the LEFT, and a Hebrew timeline reads down the right-hand side */
  border-right:2px solid var(--border2);
  padding-right:22px;padding-left:0;
}
.tl-body .tl-item:last-child{border-right-color:transparent;}
.tl-body .tl-dot{right:-9px;left:auto;inset-inline-end:auto;top:5px;}


/* ── Chat: a bubble inside a card, both bordered, is one frame too many ── */
.chat-msgs{background:none !important;border:none !important;padding:0 !important;}
.chat-bubble{max-width:100%;}

/* ── The "?" beside a superset had no label of its own ────────────────── */
.ss-why::after{content:'';}
.ss-why{position:relative;}

/* ── The picker sat at a different radius from the cards below it ─────── */
.workout-picker > button,.workout-card{border-radius:var(--radius-lg) !important;}

/* ── "בחר אימון" heading now lives inside the card system ─────────────── */
#panel-schedule > div:first-of-type > .card-head{margin-bottom:16px;}


/* ══════════════════════════════════════════════════════════════════════
   ROUND 6 — what round 5 broke, and the defects that remained
   ══════════════════════════════════════════════════════════════════════ */

/* A border does not cover margin, so drawing the rail on .tl-item left it
   broken into four segments with a 28px gap between each. The gap becomes
   padding, which the border does span. */
.tl-body .tl-item{margin-bottom:0;padding-bottom:28px;}
.tl-body .tl-item:last-child{padding-bottom:0;}

/* Severity moves to the icon, which is what neutralising the borders
   promised and did not deliver. */
.tip-card{border-right-width:1px !important;}
.tip-icon{color:var(--muted2);display:flex;align-items:center;}
.tip-card.warn .tip-icon{color:var(--red);}
.tip-card.good .tip-icon{color:var(--green);}
.tip-card.gold .tip-icon{color:var(--lime);}
.tip-icon:empty{display:none;}

/* The AI reply was the only bordered thing left on the chat screen and it
   floated in the left half under a full-width card. */
.chat-bubble.ai{align-self:stretch;max-width:100%;}

/* Hover lift sticks on touch, where there is no pointer to leave */
@media (hover:none){
  /* :not(:active) here too — this older block was missed, and it was killing
     .workout-card:active{transform:scale(.97)} on the dashboard picker */
  .stat-box:hover:not(:active),.workout-card:hover:not(:active),
  .day-cell:not(.rest-day):hover:not(:active){
    transform:none !important;box-shadow:none !important;
  }
}
.ss-why{min-width:44px;min-height:44px;display:inline-flex;
  align-items:center;justify-content:center;background:none;border:none;}
.ss-why::before{
  content:'?';display:grid;place-items:center;width:22px;height:22px;
  border:1px solid var(--border2);border-radius:999px;
  font-size:.78rem;font-weight:700;color:var(--muted);
}
.ss-why{font-size:0;}


/* ══════════════════════════════════════════════════════════════════════
   ROUND 6b — the schedule tab, the one screen the other rounds passed over
   ══════════════════════════════════════════════════════════════════════ */

/* The picker rows spent ~60% of their width on nothing and offered no sign
   they could be tapped. The meta that was hidden earlier belongs here: it is
   the answer to "which one do I have time for". */
.workout-picker > button{
  grid-template-columns:auto 1fr auto;
  align-items:center;column-gap:13px;row-gap:2px;
}
.workout-picker > button > div:first-child{grid-row:1/3;grid-column:1;}
.workout-picker .wsel-title{grid-column:2;grid-row:1;}
.workout-picker .wsel-sub{grid-column:2;grid-row:2;}
.workout-picker .wsel-meta{
  display:block;grid-column:3;grid-row:1/3;
  text-align:left;font-size:.76rem !important;color:var(--muted2) !important;
  white-space:nowrap;
}

/* Seven cells of ~48px were rendering three lines at .55rem. The picker
   directly above already names every day's workout, so the calendar only has
   to answer "which days, and where am I" — the same job the dashboard strip
   does, in the same language. */
@media (max-width:680px){
  .week-bar .day-cell{padding:10px 2px;gap:6px;}
  .week-bar .day-cell .dc-type,
  .week-bar .day-cell .dc-label{display:none;}
  .week-bar .day-cell .dc-name{
    font-size:.72rem;font-weight:700;line-height:1.2;
    white-space:nowrap;overflow:hidden;text-overflow:clip;
  }
  .week-bar .day-cell .dc-icon{margin:0;}
}


/* ══════════════════════════════════════════════════════════════════════
   ROUND 7 — hover does not exist on a phone
   On iOS :hover latches after a tap and stays until you tap elsewhere, so a
   hover that moves an element leaves it moved. `.card:hover` lifts 3px with
   a shadow, and every screen is built from cards: touching anything inside
   one lifts the whole card and strands it there. Round 6 covered three
   selectors; this is the rest of them.
   ══════════════════════════════════════════════════════════════════════ */
@media (hover:none){
  /* :not(:active) matters — a touch element takes :hover AND :active together
     while pressed, so a blanket transform:none also killed every press
     animation. This leaves the held-press feedback intact and only stops the
     hover state latching after the finger lifts. */
  .card:hover:not(:active),.today-hero:hover:not(:active),.btn:hover:not(:active),
  .ex-chip:hover:not(:active),.ach-badge:hover:not(:active),
  .elog-empty-cta:hover:not(:active),.boss-add-btn:hover:not(:active),
  .meal-row:hover:not(:active),.tip-card:hover:not(:active),
  .supp-card:hover:not(:active),.subnav-btn:hover:not(:active),
  .workout-picker > button:hover:not(:active),
  .ex-table tr[onclick]:hover:not(:active),.settings-save:hover:not(:active),
  .gym-mode-btn:hover:not(:active){
    transform:none !important;
    box-shadow:none !important;
  }
  /* colour and border latch just as visibly as a transform does */
  .meal-row:hover:not(:active),.ex-chip:hover:not(:active),
  .tip-card:hover:not(:active),.supp-card:hover:not(:active),
  .day-cell:hover:not(:active),.workout-card:hover:not(:active){
    border-color:var(--border) !important;
  }
  .ss-why:hover:not(:active)::before{border-color:var(--border2);color:var(--muted);}
}

/* The "?" lost its hover feedback when it became a 44px target with a 22px
   visual — the rule still targeted the button, which no longer draws itself. */
.ss-why:hover::before{border-color:var(--lime);color:var(--lime);}

/* Send is the whole point of the chat screen; muted it read as disabled */
.chat-send:not(:disabled){
  background:var(--lime) !important;color:#08090B !important;font-weight:800;
}


/* The day name ended in a geresh that text-overflow:clip was cutting off in
   three of the seven cells. Let it shrink rather than lose a character. */
@media (max-width:680px){
  .week-bar .day-cell .dc-name{
    text-overflow:unset;font-size:.68rem;letter-spacing:-.2px;
  }
}


/* Press must beat hover. `.workout-card:hover` at line 1856 sits after
   `.workout-card:active` at 279 with equal specificity, so the lift won and
   the press animation never showed — on any device, not just touch. */
.workout-card:active,.workout-picker > button:active{
  transform:scale(.97) !important;box-shadow:none !important;
}
.card:active,.day-cell:not(.rest-day):active,.stat-box:active{
  transform:scale(.995) !important;
}


/* .elog-empty-cta:active (880) is overridden by .elog-empty-cta:hover (1053)
   at equal specificity — the same hover-beats-press ordering already fixed
   for .workout-card. This is the last instance of that class. */
.elog-empty-cta:active,.install-banner-btn:active,.chat-send:active,
.food-add-btn:active,.weight-add-btn:active{
  transform:scale(.96) !important;
}

/* The weight-log number inputs carried an inline width:62px that the media
   query could not reach, so "חזרות" was clipped to "חזרוו". */
.elog-input{min-width:0;}
.elog-row .elog-input{flex:1 1 72px;}


/* ══════════════════════════════════════════════════════════════════════
   ROUND 11
   ══════════════════════════════════════════════════════════════════════ */

/* Seven days, not six — the strip was rendering Sunday to Friday while the
   schedule tab showed the whole week. */
#dash-week-row{grid-template-columns:repeat(7,1fr) !important;}

/* The ± buttons now bracket the kilos they change */
.elog-kg-group{display:inline-flex;align-items:center;gap:4px;}
.elog-kg-group .elog-input{flex:0 1 66px;text-align:center;}

/* A meal's calorie count is information, not a warning — red is what this
   app uses for exceeding a macro and for the alcohol caution. */
.meal-cals{color:var(--text) !important;}


/* ══════════════════════════════════════════════════════════════════════
   ROUND 12
   ══════════════════════════════════════════════════════════════════════ */

/* A pill's border matches its own text — the macro chips were the last
   three still outlined in lime around blue and yellow text. */
.mp-p{border-color:rgba(0,169,255,.28) !important;}
.mp-c{border-color:rgba(255,214,102,.28) !important;}
.mp-f{border-color:rgba(61,255,149,.28) !important;}

/* The warm-up now sits inside the day card, under the start button and above
   the exercise list — see _placeWarmup(). It keeps a quieter surface so the
   exercises stay the focus. */
.day-head-card .warmup-card{
  margin:0 0 18px;padding:13px 15px !important;
  background:var(--bg2) !important;border:1px solid var(--border) !important;
}
.day-head-card .warmup-card .warmup-title{font-size:.86rem;margin-bottom:8px;}


/* The warm-up card was skinned in --orange throughout — heading, chips and
   surface. Orange is a workout-category hue here, and beside the red warning
   palette it reads as a caution. A warm-up is instruction, so it takes the
   neutral surface every other reference block uses. */
.day-head-card .warmup-card .warmup-title{color:var(--text) !important;}
.day-head-card .warmup-card .warmup-item{
  background:var(--bg3) !important;border-color:var(--border) !important;
  color:var(--muted) !important;
}

/* ═══════════════════════════════════════════════════════════════════
   THE TARGET — the number you came to the app for
   Everything else on the gym screen is reference material. This is the
   instruction, so it gets the loudest treatment in the design system and
   the only unbroken use of the lime at this size.
   Layout is flex over separate spans, not a mixed-direction string, so
   the reading order is set by the box and not by the bidi algorithm.
   ═══════════════════════════════════════════════════════════════════ */
.gym-target{
  margin:var(--space-md) 0 var(--space-sm);
  padding:14px var(--pad-md);
  border-radius:var(--radius-md);
  background:var(--bg3);
  border:1px solid var(--border2);
  border-inline-start:3px solid var(--muted2);
}
.gym-target-top{
  display:flex;align-items:baseline;gap:10px;flex-wrap:wrap;
}
.gym-target-lbl{
  font-size:var(--fs-meta);color:var(--muted2);
  font-weight:var(--fw-semi);letter-spacing:.04em;
}
.gym-target-val{
  display:flex;align-items:baseline;gap:7px;
  margin-inline-start:auto;
  font-family:var(--font-d);
  font-size:1.6rem;font-weight:var(--fw-black);
  line-height:var(--lh-tight);color:var(--text);
}
.rx-kg{white-space:nowrap}
.rx-x{color:var(--muted2);font-size:1.05rem;font-weight:var(--fw-normal)}
.rx-reps{white-space:nowrap}
.rx-word{font-size:1.15rem}
.gym-target-why{
  margin-top:6px;
  font-size:var(--fs-meta);color:var(--muted);
  line-height:var(--lh-normal);
}
/* State reads off the rail and the number, never off a fill — a filled
   card at this size would outrank the exercise name it sits under. */
.gym-target-up{border-inline-start-color:var(--lime)}
.gym-target-up .gym-target-val{color:var(--lime)}
.gym-target-beat,.gym-target-hold{border-inline-start-color:var(--cyan)}
.gym-target-beat .gym-target-val,.gym-target-hold .gym-target-val{color:var(--cyan)}
.gym-target-addreps{border-inline-start-color:var(--purple)}
.gym-target-addreps .gym-target-val{color:var(--purple)}
.gym-target-backoff{border-inline-start-color:var(--coral)}
.gym-target-backoff .gym-target-val{color:var(--coral)}
.gym-target-calibrate .gym-target-val,.gym-target-asis .gym-target-val{color:var(--muted)}
/* The deload is the one week doing less is the instruction, so it reads muted
   on purpose — every other state on this card is a push. It still gets a rail,
   unlike calibrate, because it is a deliberate prescription and not an absence
   of one. */
.gym-target-deload{border-inline-start-color:var(--muted)}
.gym-target-deload .gym-target-val{color:var(--muted)}

/* ═══════════════════════════════════════════════════════════════════
   THE WAVE — which week of the block this is
   The plan has carried a four-week mesocycle all along and never showed it.
   Compact by design: it belongs on the day header as orientation, not as a
   second headline competing with the workout title.
   ═══════════════════════════════════════════════════════════════════ */
.day-wave{
  margin-top:var(--space-sm);
  padding:10px var(--pad-sm);
  border-radius:var(--radius-sm);
  background:var(--glass);
  border:1px solid var(--border);
}
.dw-top{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.dw-week{font-size:var(--fs-meta);color:var(--muted);font-weight:var(--fw-semi)}
.dw-label{
  font-size:var(--fs-meta);font-weight:var(--fw-bold);
  color:var(--lime);background:var(--lime-dim);
  padding:2px 9px;border-radius:999px;
}
.dw-rir{
  margin-inline-start:auto;
  font-family:var(--font-d);font-size:var(--fs-meta);
  color:var(--muted2);font-weight:var(--fw-semi);
}
.dw-note{
  margin-top:6px;font-size:var(--fs-meta);
  color:var(--muted);line-height:var(--lh-normal);
}
.dw-more{margin-top:8px}
.dw-more summary{
  cursor:pointer;font-size:var(--fs-meta);
  color:var(--muted2);font-weight:var(--fw-semi);
  padding:4px 0;list-style:none;
}
.dw-more summary::-webkit-details-marker{display:none}
.dw-more summary::after{content:' ▾';font-size:.7em}
.dw-more[open] summary::after{content:' ▴'}
.dw-more summary:hover{color:var(--text)}
.dw-more p{
  margin:6px 0 0;font-size:var(--fs-meta);
  color:var(--muted);line-height:var(--lh-normal);
}
.dw-reset{
  margin-top:8px;padding:5px 12px;
  background:transparent;border:1px solid var(--border2);
  border-radius:999px;color:var(--muted2);
  font-family:var(--font);font-size:var(--fs-meta);font-weight:var(--fw-semi);
  cursor:pointer;
}
.dw-reset:hover{color:var(--text);border-color:var(--muted2)}
@media (hover:none){
  .dw-more summary:hover:not(:active){color:var(--muted2)}
  .dw-reset:hover:not(:active){color:var(--muted2);border-color:var(--border2)}
}

/* Two targets stack on a superset screen, so they shrink: the pair's own
   name headline already carries the identity, and these are the numbers. */
.gym-target-pair{margin:var(--space-sm) 0 0;padding:10px var(--pad-sm)}
.gym-target-pair .gym-target-lbl{
  color:var(--muted);font-weight:var(--fw-semi);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:52%;
}
.gym-target-pair .gym-target-val{font-size:1.2rem}
.gym-target-pair .gym-target-why{margin-top:4px}

/* Plan tenure under the split selector — a fact, not a control, so no border. */
.plan-since{font-size:.74rem;color:var(--muted2);margin-top:8px;line-height:1.5;}

/* ─── The 16px floor ───────────────────────────────────────────────────────
   iOS zooms the page when a focused control is under 16px and never zooms back,
   which is the screen "growing" mid-workout. The floor is the only thing that
   prevents it. Applied on touch pointers so the desktop layout is untouched. */
@media (pointer: coarse), (max-width: 820px){
  /* A media query carries no specificity of its own, so a bare `input`
     loses to any `.some-input` rule. The [class] form outweighs a single
     class without reaching for !important. */
  input, select, textarea,
  input[class], select[class], textarea[class],
  .settings-group-body input[class],
  .settings-group-body select[class],
  .settings-group-body textarea[class],
  .onboard-field input,
  .onboard-field select,
  .onboard-field textarea{ font-size:16px; }
  /* these carry hand-tuned widths that 16px would overflow */
  .elog-input{ width:76px; }
  .food-qty-input{ width:96px; }
  .meas-input{ width:calc(50% - 4px); }
  .cfg-input{ font-size:16px; padding:8px 6px; }
}

/* The swap list is a menu again — but only now that tapping a row does
   something. Each row is a real button, so it is reachable by keyboard too. */
.alt-item.alt-pick{width:100%;text-align:inherit;background:none;border:none;border-bottom:1px solid var(--border);
  color:var(--text);font-family:var(--font);cursor:pointer;transition:opacity .15s;}
.alt-item.alt-pick:active{opacity:.6;}
.alt-item.alt-revert .alt-item-name{color:var(--lime);}
@media (hover:hover){ .alt-item.alt-pick:hover{opacity:.75;} }

/* ─── Anatomy figure ───────────────────────────────────────────────────────
   Two schematic bodies with the worked muscle lit. Lime is the target, a muted
   olive the muscles that assist — the same colour language the rest of the app
   uses for "this is the number that matters" versus "this is context". */
.anat-wrap{display:flex;gap:10px;justify-content:center;margin:2px 0 12px;}
.anat-fig{margin:0;text-align:center;}
.anat-fig svg{width:74px;height:137px;display:block;}
.anat-fig figcaption{font-size:.62rem;color:var(--muted2);margin-top:3px;letter-spacing:.2px;}
.an-skin{fill:#1B1E26;stroke:#2A2E39;stroke-width:.8;}
.an-part{fill:#252932;stroke:#2F3440;stroke-width:.6;}
.an-assist{fill:#4A5A2E;}
.an-primary{fill:var(--lime);}
.m-mus-text{font-size:.82rem;line-height:1.55;color:var(--muted);}

/* Three demo cards instead of one: the first keeps its size, the other two
   share a row beneath it. */
.demo-card-sm{margin-top:8px;}
.demo-wrap{display:grid;grid-template-columns:1fr 1fr;gap:8px;}
.demo-wrap > .demo-card:first-child{grid-column:1/-1;}
.demo-card-sm .demo-thumb{min-height:62px;}
.demo-card-sm .demo-bar-text{font-size:.72rem;}
