  /* =====================================================================
     IRON STREAK DESIGN SYSTEM
     Brand: accent blue, warm neutrals, Bebas Neue display, Manrope text, IBM
     Plex Mono numbers. Structure follows iOS conventions: grouped backgrounds,
     borderless cards, inset grouped lists, 44pt+ tap targets, sheets for
     modals, and a translucent tab bar.
     ===================================================================== */

  /* ============ TOKENS ============ */
  :root{
    /* Surfaces */
    --bg:#EEEFEA;               /* grouped page background */
    --surface:#FFFFFF;          /* cards, lists, sheets */
    --surface-2:#F4F4EF;        /* inset fills: inputs & tiles inside cards */
    --fill:rgba(46,48,38,.07);  /* control fill: gray buttons, chips, segmented track */
    --fill-strong:rgba(46,48,38,.14);
    --separator:rgba(46,48,38,.12);
    --border:#DCDBD2;           /* outlines + chart gridlines */
    --tabbar-bg:rgba(255,255,255,.78);
    --seg-selected:#FFFFFF;
    /* Text */
    --text:#17181A;
    --text-muted:#4E5048;       /* secondary: 7:1 on every light surface */
    --text-3:#85877D;           /* tertiary: placeholders, icons, outlines (3:1+) */
    /* Brand + status */
    --accent:#2A5BFF;           /* electric brand blue: icons, lines, big numbers */
    --accent-text:#0D45FF;      /* the same blue, deep enough for small text on its tint (4.5:1+) */
    --accent-fill:#2A5BFF;      /* solid blue behind white text (buttons, chips, bubbles) */
    --accent-hi:#3A68FF;        /* top of the primary-button gradient (white text on it: 4.5:1+) */
    --accent-ink:#FFFFFF;
    --accent-tint:rgba(42,91,255,.13);
    --accent-glow:rgba(42,91,255,.50);      /* colored light around blue elements */
    --accent-glow-soft:rgba(42,91,255,.26);
    --chart-fade:.30;           /* opacity of the blue fade under chart lines, at its top */
    --chart-fade-faint:.18;     /* the same, under estimated data */
    --success:#467A3B;
    --success-bg:rgba(70,122,59,.13);
    --success-ink:#FFFFFF;      /* text on solid green */
    --success-glow:rgba(70,150,55,.50);
    --steel:#5B6371;
    --steel-bg:rgba(102,111,126,.12);
    --danger:#C13C2F;
    --danger-bg:rgba(193,60,47,.10);
    --danger-glow:rgba(214,60,45,.45);
    --warning:#C08A22;
    --warning-glow:rgba(214,150,30,.50);
    /* Macros: protein has its own violet so it never reads as the blue calorie ring */
    --protein:#9B4DF0;
    --protein-text:#7A2BD6;   /* protein figures in small text */
    --protein-glow:rgba(155,77,240,.50);
    /* Elevation */
    --shadow:rgba(24,22,14,0.10);
    --shadow-card:0 1px 2px rgba(24,22,14,.05), 0 4px 16px rgba(24,22,14,.05);
    --shadow-raised:0 8px 28px rgba(24,22,14,.16);
    /* Shape */
    --radius-lg:18px;
    --radius-md:13px;
    --radius-sm:10px;
    --radius-pill:999px;
    /* Type */
    --font-display:'Bebas Neue','Arial Narrow',sans-serif;
    --font-body:'Manrope',-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
    --font-mono:'IBM Plex Mono','SFMono-Regular',Consolas,monospace;
    --fs-caption:12px;
    --fs-footnote:13px;
    --fs-secondary:14px;        /* muted descriptions: workout details, instructions, settings */
    --fs-subhead:15px;
    --fs-body:16px;
    --fs-headline:17px;
    --fs-title3:20px;
    --fs-title2:22px;
    --fs-large:40px;
    /* Layout */
    --page-x:16px;
    --tap:44px;
    --control-h:48px;
    --tabbar-h:66px;            /* the floating tab pill (icons with their names under them) */
    --tabbar-inset:14px;        /* its gap from the screen edges */
    /* sits just above the iPhone home indicator; 12px up where there isn't one */
    --tabbar-bottom:max(12px, calc(env(safe-area-inset-bottom) - 10px));
    --tabbar-space:calc(var(--tabbar-h) + var(--tabbar-bottom));   /* what content must clear */
  }
  @media (prefers-color-scheme: dark){
    :root:not([data-theme="light"]){
      --bg:#15171C; --surface:#22252D; --surface-2:#2B2F38;
      --fill:rgba(235,238,245,.08); --fill-strong:rgba(235,238,245,.15); --separator:rgba(235,238,245,.10);
      --border:#3A3F4B; --tabbar-bg:rgba(36,39,47,.82); --seg-selected:#3C414D;
      --text:#EEF0F4; --text-muted:#B9BDC9; --text-3:#838897;
      --accent:#5A90FF; --accent-text:#85ADFF; --accent-fill:#2C68FF; --accent-hi:#2F69FF; --accent-ink:#FFFFFF; --accent-tint:rgba(63,126,255,.22);
      --accent-glow:rgba(63,126,255,.72); --accent-glow-soft:rgba(63,126,255,.36); --chart-fade:.42; --chart-fade-faint:.25;
      --success:#8CC47A; --success-bg:rgba(140,196,122,.16); --success-ink:#0F1A0C; --success-glow:rgba(140,210,110,.62);
      --steel:#98A1B2; --steel-bg:rgba(152,161,178,.14);
      --danger:#F07F71; --danger-bg:rgba(240,127,113,.15); --danger-glow:rgba(245,110,95,.60);
      --warning:#E0B04A; --warning-glow:rgba(235,180,70,.62); --protein:#C08BFF; --protein-glow:rgba(192,139,255,.65); --protein-text:#C9A0FF;
      --shadow:rgba(0,0,0,0.4);
      --shadow-card:0 0 0 .5px rgba(255,255,255,.05);
      --shadow-raised:0 10px 30px rgba(0,0,0,.5);
    }
  }
  :root[data-theme="dark"]{
    --bg:#15171C; --surface:#22252D; --surface-2:#2B2F38;
    --fill:rgba(235,238,245,.08); --fill-strong:rgba(235,238,245,.15); --separator:rgba(235,238,245,.10);
    --border:#3A3F4B; --tabbar-bg:rgba(36,39,47,.82); --seg-selected:#3C414D;
    --text:#EEF0F4; --text-muted:#B9BDC9; --text-3:#838897;
    --accent:#5A90FF; --accent-text:#85ADFF; --accent-fill:#2C68FF; --accent-hi:#2F69FF; --accent-ink:#FFFFFF; --accent-tint:rgba(63,126,255,.22);
    --accent-glow:rgba(63,126,255,.72); --accent-glow-soft:rgba(63,126,255,.36); --chart-fade:.42; --chart-fade-faint:.25;
    --success:#8CC47A; --success-bg:rgba(140,196,122,.16); --success-ink:#0F1A0C; --success-glow:rgba(140,210,110,.62);
    --steel:#98A1B2; --steel-bg:rgba(152,161,178,.14);
    --danger:#F07F71; --danger-bg:rgba(240,127,113,.15); --danger-glow:rgba(245,110,95,.60);
      --warning:#E0B04A; --warning-glow:rgba(235,180,70,.62); --protein:#C08BFF; --protein-glow:rgba(192,139,255,.65); --protein-text:#C9A0FF;
    --shadow:rgba(0,0,0,0.4);
    --shadow-card:0 0 0 .5px rgba(255,255,255,.05);
    --shadow-raised:0 10px 30px rgba(0,0,0,.5);
  }

  /* ============ BASE ============ */
  *{box-sizing:border-box;}
  html{-webkit-text-size-adjust:100%;text-size-adjust:100%;}
  html,body{margin:0;padding:0;}
  body{
    background:var(--bg);color:var(--text);
    font-family:var(--font-body);font-size:var(--fs-body);line-height:1.4;
    -webkit-font-smoothing:antialiased;
    min-height:100vh;min-height:100dvh;
  }
  @media (prefers-reduced-motion: reduce){
    *{animation-duration:0.001ms !important;transition-duration:0.001ms !important;}
  }
  h1,h2,h3{text-wrap:balance;margin:0;}
  p{margin:0;}
  button,input,select,textarea{font-family:inherit;}
  /* App feel: no gray flash on tap, no double-tap zoom delay, no text selection on controls */
  button,[data-action],[data-nav],[data-gotoday],[data-daytoggle],[data-qopt],[data-qmulti]{
    -webkit-tap-highlight-color:transparent;touch-action:manipulation;
  }
  button{-webkit-user-select:none;user-select:none;}
  ::selection{background:var(--accent-fill);color:var(--accent-ink);}
  :focus-visible{outline:2px solid var(--accent);outline-offset:2px;}

  /* ============ LAYOUT ============ */
  .shell{
    max-width:460px;margin:0 auto;
    min-height:100vh;min-height:100dvh;
    background:var(--bg);position:relative;
    display:flex;flex-direction:column;
  }
  @media (min-width:461px){ .shell{box-shadow:0 0 60px var(--shadow);} }
  .screen{
    flex:1;
    /* Top clears the status bar / Dynamic Island in the iOS app (env() is 0 in a browser
       tab); bottom clears the fixed tab bar + home indicator. */
    padding:calc(env(safe-area-inset-top) + 18px) var(--page-x) calc(var(--tabbar-space) + 24px);
    animation:screenIn .22s ease-out;
  }
  .screen.no-nav{padding-bottom:calc(env(safe-area-inset-bottom) + 28px);}
  @keyframes screenIn{from{opacity:0;transform:translateY(4px);}to{opacity:1;transform:none;}}
  @keyframes fadeIn{from{opacity:0;}to{opacity:1;}}

  /* ============ TYPE ============ */
  .page-title{
    font-family:var(--font-display);font-size:var(--fs-large);font-weight:400;
    line-height:.92;letter-spacing:.01em;color:var(--text);margin:2px 0 0;
  }
  .page-sub{font-size:var(--fs-subhead);color:var(--text-muted);line-height:1.45;margin:6px 0 0;}
  .page-head{margin-bottom:18px;}
  .eyebrow{
    font-family:var(--font-body);font-size:var(--fs-footnote);font-weight:700;
    letter-spacing:.04em;text-transform:uppercase;color:var(--text-muted);
  }
  .display-num{font-family:var(--font-display);letter-spacing:.01em;line-height:.85;}
  .mono{font-family:var(--font-mono);font-variant-numeric:tabular-nums;}
  .section-label{
    font-size:var(--fs-footnote);font-weight:600;text-transform:uppercase;letter-spacing:.04em;
    color:var(--text-muted);margin:26px 4px 8px;
  }
  .field-label{
    display:block;font-size:var(--fs-footnote);font-weight:600;color:var(--text-muted);
    margin:0 2px 6px;
  }

  /* ============ TAB BAR ============ */
  /* A floating, translucent pill inset from the screen edges, like iOS 26 apps */
  .tabbar{
    position:fixed;z-index:50;
    left:50%;bottom:var(--tabbar-bottom);transform:translateX(-50%);
    width:calc(100% - 2 * var(--tabbar-inset));max-width:440px;height:var(--tabbar-h);
    display:flex;align-items:stretch;gap:2px;padding:6px;
    border-radius:var(--radius-pill);
    background:var(--tabbar-bg);
    -webkit-backdrop-filter:saturate(180%) blur(22px);backdrop-filter:saturate(180%) blur(22px);
    box-shadow:0 10px 30px -6px rgba(20,22,30,.22), 0 2px 6px rgba(20,22,30,.08), inset 0 0 0 .5px var(--separator);
  }
  .tab{
    position:relative;z-index:1;flex:1;min-width:0;
    display:flex;align-items:center;justify-content:center;
    padding:0;background:none;border:none;border-radius:var(--radius-pill);
    color:var(--text-muted);cursor:pointer;-webkit-tap-highlight-color:transparent;
    transition:background .2s ease, color .2s ease;
  }
  .tab svg{width:23px;height:23px;flex:none;stroke:currentColor;fill:none;stroke-width:1.8;transition:transform .12s ease;}
  .tab{flex-direction:column;gap:2px;}
  .tab-label{max-width:100%;padding:0 2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
    font-size:10.5px;font-weight:600;line-height:1.1;letter-spacing:-.01em;}
  .tab.active .tab-label{font-weight:700;}
  .tab.active{color:var(--accent);}
  /* The highlight: one pill behind the icons, placed under tab --i of --n (6px bar padding,
     2px gaps). Sliding a finger along the bar moves it directly (app.js beginTabSlide). */
  .tabbar{touch-action:none;}
  .tab-pill{
    position:absolute;z-index:0;top:6px;bottom:6px;pointer-events:none;
    width:calc((100% - 12px - (var(--n) - 1) * 2px) / var(--n));
    left:calc(6px + var(--i) * ((100% - 12px - (var(--n) - 1) * 2px) / var(--n) + 2px));
    border-radius:20px;background:var(--accent-tint);
    transition:left .34s cubic-bezier(.3,1.3,.5,1), transform .18s ease;
  }
  .tabbar.sliding .tab-pill{transition:transform .18s ease;transform:scale(1.07);}
  .tabbar.sliding .tab.active{color:var(--text-muted);}
  .tabbar.sliding .tab.over{color:var(--accent);}
  .tabbar.sliding .tab svg{transition:none;}
  .tab.active svg{stroke-width:2.1;}
  .tab:active svg{transform:scale(.88);}
  .tab:focus-visible{outline:2px solid var(--accent);outline-offset:-2px;}

  /* ============ BUTTONS ============ */
  .btn{
    display:inline-flex;align-items:center;justify-content:center;gap:8px;
    min-height:50px;padding:0 20px;
    border-radius:var(--radius-md);border:none;cursor:pointer;
    font-family:var(--font-body);font-size:var(--fs-body);font-weight:700;letter-spacing:-.005em;
    transition:transform .12s ease, opacity .12s ease;
  }
  .btn:active{transform:scale(.97);opacity:.88;}
  .btn:disabled{opacity:.38;cursor:not-allowed;transform:none;}
  .btn-primary{background:var(--accent-fill);color:var(--accent-ink);}
  .btn-ghost{background:var(--fill);color:var(--text);}
  .btn-tinted{background:var(--accent-tint);color:var(--accent-text);}
  .btn-block{width:100%;}
  .btn-sm{min-height:36px;padding:0 14px;font-size:var(--fs-footnote);border-radius:var(--radius-pill);}
  /* Text buttons: iOS-style accent text, never underlined, still a full tap target */
  .link-btn{
    display:inline-flex;align-items:center;justify-content:center;
    min-height:var(--tap);padding:0 6px;
    background:none;border:none;color:var(--accent-text);
    font-size:var(--fs-subhead);font-weight:600;text-decoration:none;cursor:pointer;
  }
  .link-btn:active{opacity:.45;}
  /* Compact tinted capsule for secondary actions ("Swap workout", "Back to today") */
  .link-btn.pill{
    min-height:34px;padding:0 14px;border-radius:var(--radius-pill);
    background:var(--accent-tint);font-size:14px;
  }
  .pill-row{display:flex;flex-wrap:wrap;justify-content:center;gap:8px;margin:4px 0 16px;}
  .iconbtn{
    width:40px;height:40px;border-radius:50%;flex-shrink:0;
    display:flex;align-items:center;justify-content:center;cursor:pointer;
    background:var(--fill);border:none;color:var(--text);
  }
  .iconbtn:active{opacity:.6;}
  .iconbtn svg{width:18px;height:18px;stroke:currentColor;fill:none;stroke-width:2.2;}
  .icon-btn-sm{
    width:34px;height:34px;border-radius:50%;flex-shrink:0;padding:0;
    display:flex;align-items:center;justify-content:center;cursor:pointer;
    background:var(--fill);border:none;color:var(--text-muted);
  }
  .icon-btn-sm:active{opacity:.6;}
  .icon-btn-sm svg{width:15px;height:15px;stroke:currentColor;fill:none;stroke-width:2.2;}

  /* ============ CARDS & LISTS ============ */
  .card{
    background:var(--surface);border:none;border-radius:var(--radius-lg);
    padding:16px;box-shadow:var(--shadow-card);
  }
  .card + .card{margin-top:12px;}
  /* Inset grouped list: rows share one card, separated by inset hairlines */
  .list-group{
    background:var(--surface);border-radius:var(--radius-lg);box-shadow:var(--shadow-card);
    overflow:hidden;margin-bottom:12px;
  }
  .row-btn{
    display:flex;align-items:center;justify-content:space-between;gap:12px;
    width:100%;min-height:56px;padding:12px 16px;margin-bottom:10px;
    background:var(--surface);border:none;border-radius:var(--radius-lg);box-shadow:var(--shadow-card);
    color:var(--text);text-align:left;cursor:pointer;font-family:inherit;
  }
  .row-btn:active{background:var(--surface-2);}
  .row-btn:disabled{opacity:.5;cursor:default;}
  .list-group .row-btn{border-radius:0;box-shadow:none;margin:0;background:transparent;position:relative;}
  .list-group .row-btn:active{background:var(--fill);}
  .list-group .row-btn + .row-btn::before{
    content:'';position:absolute;top:0;left:16px;right:0;height:.5px;background:var(--separator);
  }
  .row-btn .t{font-size:var(--fs-body);font-weight:600;}
  .row-btn .d{font-size:var(--fs-secondary);color:var(--text-muted);margin-top:2px;line-height:1.35;}
  .row-btn .value{margin-left:auto;font-size:var(--fs-subhead);color:var(--text-muted);white-space:nowrap;}
  .row-btn > svg,.chev-icon svg{width:14px;height:14px;stroke:var(--text-3);fill:none;stroke-width:2.6;flex-shrink:0;}
  .row-btn.danger .t{color:var(--danger);}
  .chev-icon{display:flex;flex-shrink:0;}
  .chev-icon svg{transition:transform .2s ease;}
  .chev-icon.open svg{transform:rotate(90deg);}
  .row-btn-head{font-size:var(--fs-footnote);font-weight:600;color:var(--text-muted);text-transform:uppercase;letter-spacing:.04em;margin-bottom:10px;}
  .coach-note{
    background:var(--accent-tint);border-radius:var(--radius-md);padding:12px 14px;
    font-size:var(--fs-secondary);line-height:1.5;color:var(--text);margin-bottom:16px;
  }
  .coach-note b{color:var(--success);}
  .note-row{
    display:flex;align-items:flex-start;gap:10px;background:var(--surface-2);
    border-radius:var(--radius-md);padding:11px 13px;margin-bottom:10px;
    font-size:var(--fs-secondary);line-height:1.45;color:var(--text-muted);
  }
  .card .note-row{background:var(--surface-2);}
  .note-row svg{width:16px;height:16px;stroke:var(--steel);fill:none;stroke-width:2;flex-shrink:0;margin-top:1px;}
  /* The day's cardio on My Lift: "Mark done", then the minutes it took (editable) and Undo */
  .cardio-row{
    display:flex;align-items:center;gap:10px;background:var(--surface);border-radius:var(--radius-md);
    padding:10px 12px;margin-bottom:10px;box-shadow:inset 0 0 0 1px var(--border);
  }
  .cardio-row.done{background:var(--success-bg);box-shadow:none;}
  .cardio-icon{display:flex;flex-shrink:0;}
  .cardio-icon svg{width:18px;height:18px;stroke:var(--steel);fill:none;stroke-width:2;}
  .cardio-row.done .cardio-icon svg{stroke:var(--success);stroke-width:2.5;}
  .cardio-main{flex:1;min-width:0;display:flex;flex-direction:column;gap:1px;line-height:1.3;}
  .cardio-main b{font-size:var(--fs-subhead);}
  .cardio-main span{font-size:var(--fs-footnote);color:var(--text-muted);}
  .cardio-row .btn{margin:0;flex-shrink:0;}
  .cardio-min{display:flex;align-items:center;gap:4px;flex-shrink:0;font-size:var(--fs-footnote);color:var(--text-muted);}
  .cardio-min .field-input{width:56px;min-height:36px;padding:6px 8px;text-align:center;}
  .cardio-row .cardio-undo{min-height:36px;padding:0 4px;font-size:var(--fs-footnote);flex-shrink:0;}

  /* ============ FORM CONTROLS ============ */
  .field-input{
    width:100%;min-height:var(--control-h);padding:12px 14px;
    border-radius:var(--radius-md);border:1px solid var(--separator);
    background:var(--surface);color:var(--text);
    font-size:16px;font-family:inherit;  /* 16px: iOS won't zoom into the field on focus */
    -webkit-appearance:none;appearance:none;
    transition:border-color .15s, box-shadow .15s;
  }
  .card .field-input,.modal-card .field-input{background:var(--surface-2);border-color:transparent;}
  .field-input::placeholder{color:var(--text-3);}
  .field-input:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-tint);background:var(--surface);}
  textarea.field-input{resize:vertical;min-height:90px;}
  input[type=number]{-moz-appearance:textfield;}
  input[type=number]::-webkit-outer-spin-button,input[type=number]::-webkit-inner-spin-button{-webkit-appearance:none;margin:0;}
  .input-suffix{position:relative;display:block;flex:1;}
  .input-suffix .field-input{padding-right:38px;}
  .input-suffix > span{
    position:absolute;right:14px;top:50%;transform:translateY(-50%);
    font-size:var(--fs-subhead);color:var(--text-muted);pointer-events:none;
  }
  .chip-grid{display:flex;flex-wrap:wrap;gap:8px;margin:2px 0 4px;}
  .chip{
    display:inline-flex;align-items:center;justify-content:center;
    min-height:36px;padding:0 14px;border-radius:var(--radius-pill);
    background:var(--fill);border:none;color:var(--text);
    font-size:14px;font-weight:600;cursor:pointer;font-family:inherit;
    transition:background .12s, color .12s;
  }
  .chip:active{transform:scale(.97);}
  .chip.selected{background:var(--accent-fill);color:var(--accent-ink);}
  /* Segmented control (iOS): one track, the selected segment raised */
  .segmented,.seg,.target-toggle,.chart-mode-toggle{
    display:flex;gap:2px;padding:2px;border-radius:11px;background:var(--fill);
  }
  .segmented button,.seg .chip,.target-toggle .chip,.chart-mode-toggle .chip{
    flex:1;min-width:0;min-height:34px;padding:6px 8px;margin:0;
    border:none;border-radius:9px;background:transparent;box-shadow:none;
    color:var(--text);font-size:var(--fs-footnote);font-weight:600;text-align:center;
    cursor:pointer;font-family:inherit;line-height:1.2;
  }
  .segmented button:disabled{opacity:.4;}
  .segmented button.on,.seg .chip.selected,.target-toggle .chip.selected,.chart-mode-toggle .chip.selected{
    background:var(--seg-selected);color:var(--accent-text);
    box-shadow:0 1px 3px rgba(0,0,0,.12),0 0 0 .5px rgba(0,0,0,.04);
  }
  .segmented{margin-bottom:16px;}
  .switch{
    width:51px;height:31px;border-radius:var(--radius-pill);flex-shrink:0;position:relative;cursor:pointer;
    background:var(--fill-strong);transition:background .2s ease;
  }
  .switch.on{background:var(--success);}
  .switch .knob{
    position:absolute;top:2px;left:2px;width:27px;height:27px;border-radius:50%;
    background:#fff;box-shadow:0 2px 5px rgba(0,0,0,.2);transition:transform .2s ease;
  }
  .switch.on .knob{transform:translateX(20px);}
  .progress-track{height:6px;background:var(--fill);border-radius:var(--radius-pill);overflow:hidden;flex:1;}
  .progress-fill{height:100%;background:var(--accent);border-radius:var(--radius-pill);transition:width .3s ease;}

  /* ============ SHEETS & ALERTS ============ */
  .modal-overlay{
    position:fixed;inset:0;z-index:100;
    display:flex;align-items:flex-end;justify-content:center;
    background:rgba(0,0,0,.42);animation:fadeIn .18s ease;
  }
  .modal-card{
    width:100%;max-width:460px;position:relative;
    max-height:calc(100dvh - env(safe-area-inset-top) - 12px);
    overflow-y:auto;overscroll-behavior:contain;-webkit-overflow-scrolling:touch;
    border-radius:22px 22px 0 0;box-shadow:var(--shadow-raised);
    padding:26px var(--page-x) calc(env(safe-area-inset-bottom) + 18px);
    animation:sheetUp .3s cubic-bezier(.2,.9,.25,1);
  }
  .modal-card::before{   /* grabber */
    content:'';position:absolute;top:8px;left:50%;transform:translateX(-50%);
    width:36px;height:5px;border-radius:3px;background:var(--fill-strong);
  }
  .modal-card h3{font-size:var(--fs-title3);font-weight:800;letter-spacing:-.01em;}
  .card.modal-card + .card{margin-top:0;}
  @keyframes sheetUp{from{transform:translateY(100%);}to{transform:none;}}
  /* Yes/no confirmations and info stay centered, like an iOS alert */
  .modal-overlay.alert{align-items:center;padding:24px;}
  .modal-overlay.alert .modal-card{
    max-width:330px;border-radius:18px;padding:22px 18px 18px;animation:alertIn .2s ease;
  }
  .modal-overlay.alert .modal-card::before{display:none;}
  /* close button in a bottom sheet's top corner (addSheetCloseButtons in app.js) */
  .sheet-close{
    position:absolute;top:12px;right:12px;z-index:2;width:30px;height:30px;padding:0;border:0;border-radius:50%;
    display:flex;align-items:center;justify-content:center;background:var(--fill);color:var(--text-muted);cursor:pointer;
  }
  .sheet-close svg{width:14px;height:14px;fill:none;stroke:currentColor;stroke-width:2.6;stroke-linecap:round;}
  .sheet-close:active{background:var(--fill-strong);}
  .sheet-close:focus-visible{outline:2px solid var(--accent);outline-offset:2px;}
  .modal-card:has(> .sheet-close) > h3:first-of-type{padding-right:34px;}
  @keyframes alertIn{from{opacity:0;transform:scale(1.06);}to{opacity:1;transform:none;}}
  .modal-overlay.stay,.modal-overlay.stay .modal-card{animation:none !important;}   /* already open before a re-render */
  .picker-card{display:flex;flex-direction:column;overflow:hidden;}
  .picker-list{flex:1;min-height:0;overflow-y:auto;overscroll-behavior:contain;display:flex;flex-direction:column;gap:8px;margin-top:4px;padding:1px;}
  .picker-list > *{flex-shrink:0;} /* rows keep their height (long names wrap); the list scrolls instead */
  .picker-group-label{font-size:var(--fs-caption);font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--text-muted);margin:10px 2px 0;}
  .picker-group-label:first-child{margin-top:0;}
  .picker-opt{
    display:block;width:100%;min-height:48px;padding:12px 14px;
    text-align:left;background:var(--surface-2);border:none;border-radius:var(--radius-md);
    font-size:var(--fs-subhead);font-weight:600;color:var(--text);cursor:pointer;font-family:inherit;
  }
  .picker-opt:active{background:var(--fill-strong);}
  .picker-opt:disabled,.chip:disabled{opacity:.45;cursor:default;}
  .picker-opt.selected{background:var(--accent-tint);box-shadow:0 0 0 1.5px var(--accent) inset;}
  .picker-custom{margin-top:14px;padding-top:14px;border-top:.5px solid var(--separator);}
  .template-row{display:flex;gap:8px;align-items:stretch;}
  .template-row .picker-opt{display:flex;flex-direction:column;gap:2px;}
  .template-sub{font-size:var(--fs-footnote);font-weight:500;color:var(--text-muted);}

  /* ============ ONBOARDING ============ */
  .onb-hero{padding:9vh 0 28px;text-align:center;}
  .onb-hero .flame{width:44px;height:44px;}
  .onb-hero .display-num{font-size:60px;color:var(--accent);}
  .onb-hero p{color:var(--text-muted);font-size:var(--fs-subhead);max-width:30ch;margin:10px auto 0;line-height:1.5;}
  .choice-card{
    display:block;width:100%;text-align:left;
    background:var(--surface);border:none;border-radius:var(--radius-lg);box-shadow:var(--shadow-card);
    padding:18px;margin-bottom:12px;cursor:pointer;font-family:inherit;color:var(--text);
  }
  .choice-card:active{transform:scale(.99);}
  .choice-card h3{font-size:var(--fs-headline);margin-bottom:4px;}
  .choice-card p{font-size:var(--fs-secondary);color:var(--text-muted);margin:0;line-height:1.5;}
  .choice-card.emph{box-shadow:0 0 0 2px var(--accent), var(--shadow-card);}

  /* ============ SURVEY ============ */
  .survey-head{display:flex;align-items:center;gap:12px;margin-bottom:24px;}
  .q-count{font-family:var(--font-mono);font-size:var(--fs-footnote);color:var(--text-muted);white-space:nowrap;}
  .survey-section{font-size:var(--fs-footnote);font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--accent-text);margin-bottom:6px;}
  .q-prompt{font-size:26px;font-weight:800;letter-spacing:-.015em;line-height:1.2;margin-bottom:20px;}
  .q-help{font-size:var(--fs-subhead);color:var(--text-muted);line-height:1.45;margin:-10px 0 20px;}
  .survey-error{font-size:var(--fs-footnote);color:var(--danger);font-weight:600;margin:10px 2px 0;}
  .opt-list{display:flex;flex-direction:column;gap:8px;}
  .opt{
    display:flex;align-items:center;gap:12px;width:100%;min-height:56px;padding:12px 16px;
    text-align:left;background:var(--surface);border:none;border-radius:var(--radius-md);
    box-shadow:var(--shadow-card);font-size:var(--fs-body);font-weight:600;color:var(--text);
    cursor:pointer;font-family:inherit;transition:box-shadow .12s, background .12s;
  }
  .opt:active{transform:scale(.99);}
  .opt.selected{background:var(--accent-tint);box-shadow:0 0 0 2px var(--accent);}
  .opt .box{
    width:22px;height:22px;border-radius:7px;border:1.5px solid var(--text-3);
    flex-shrink:0;display:flex;align-items:center;justify-content:center;
  }
  .opt.radio .box{border-radius:50%;}
  .opt.selected .box{background:var(--accent-fill);border-color:var(--accent-fill);}
  .opt .box svg{width:13px;height:13px;stroke:var(--accent-ink);fill:none;stroke-width:3;opacity:0;}
  .opt.selected .box svg{opacity:1;}
  .opt-text{display:flex;flex-direction:column;gap:2px;min-width:0;}
  .opt-label{display:flex;align-items:center;flex-wrap:wrap;gap:8px;}
  .opt-sub{font-size:var(--fs-footnote);font-weight:500;color:var(--text-muted);line-height:1.35;}
  .opt-badge{
    font-size:10.5px;font-weight:800;text-transform:uppercase;letter-spacing:.05em;
    color:var(--accent-text);background:var(--accent-tint);border-radius:var(--radius-pill);padding:3px 8px;
  }
  .survey-foot{margin-top:22px;display:flex;flex-direction:column;align-items:stretch;gap:6px;}
  .survey-exit{margin-top:22px;text-align:center;}
  .body-row{display:flex;gap:10px;}
  .body-row .field-input,.body-row .input-suffix{flex:1;}
  .review-list{display:flex;flex-direction:column;}
  .review-section{font-size:var(--fs-footnote);font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:var(--text-muted);margin:20px 4px 8px;}
  .review-section:first-child{margin-top:0;}
  .review-row{
    display:flex;justify-content:space-between;align-items:center;gap:14px;width:100%;min-height:50px;
    text-align:left;background:var(--surface);border:none;padding:12px 16px;cursor:pointer;
    font-family:inherit;color:var(--text);position:relative;
  }
  /* rows between section headers read as one grouped list */
  .review-section + .review-row{border-radius:var(--radius-lg) var(--radius-lg) 0 0;}
  .review-row:has(+ .review-section),.review-row:last-child{border-radius:0 0 var(--radius-lg) var(--radius-lg);}
  .review-section + .review-row:has(+ .review-section),.review-section + .review-row:last-child{border-radius:var(--radius-lg);}
  .review-row + .review-row::before{content:'';position:absolute;top:0;left:16px;right:0;height:.5px;background:var(--separator);}
  .review-row:active{background:var(--surface-2);}
  .review-q{font-size:var(--fs-secondary);color:var(--text-muted);flex:1;min-width:0;}
  .review-a{font-size:var(--fs-subhead);font-weight:700;text-align:right;max-width:55%;overflow-wrap:anywhere;}
  .optional-tag{font-size:var(--fs-footnote);color:var(--text-muted);margin-bottom:8px;}

  /* ============ HOME ============ */
  .greet{font-size:var(--fs-subhead);color:var(--text-muted);margin-bottom:4px;}
  .greet strong{color:var(--text);font-weight:700;}
  .streak-card{
    background:var(--surface);border-radius:var(--radius-lg);box-shadow:var(--shadow-card);
    padding:18px 18px 16px;margin-top:16px;
  }
  .streak-main{display:flex;align-items:center;gap:14px;}
  .flame{width:40px;height:40px;flex-shrink:0;}
  .streak-num{font-size:56px;color:var(--accent);}
  .streak-label{font-size:var(--fs-caption);color:var(--text-muted);text-transform:uppercase;letter-spacing:.07em;font-weight:700;margin-top:2px;}
  .streak-best{margin-left:auto;text-align:right;}
  .streak-best .n{font-family:var(--font-mono);font-weight:600;font-size:22px;}
  .streak-best .l{font-size:var(--fs-caption);color:var(--text-muted);text-transform:uppercase;letter-spacing:.06em;font-weight:600;}
  .week-strip{display:flex;gap:6px;margin-top:16px;padding-top:14px;border-top:.5px solid var(--separator);}
  .week-day{flex:1;display:flex;flex-direction:column;align-items:center;gap:6px;}
  .week-day .dl{font-size:12px;font-weight:700;color:var(--text-muted);}
  .week-day.today .dl{color:var(--accent-text);}
  .day-pip{width:100%;height:8px;border-radius:var(--radius-pill);background:var(--fill-strong);}
  .day-pip.done{background:var(--success);}
  .day-pip.rest{background:var(--steel-bg);}
  .day-pip.missed{background:var(--danger-bg);box-shadow:0 0 0 1px var(--danger) inset;}
  /* vacation mode: paused days are striped, neither done nor missed */
  .day-pip.paused{background:repeating-linear-gradient(135deg, var(--fill-strong) 0 3px, transparent 3px 6px);box-shadow:0 0 0 1px var(--fill-strong) inset;}
  .day-pip.today{box-shadow:0 0 0 2px var(--accent) inset;}
  .today-card{margin-top:12px;}
  .today-card.rest{background:var(--surface);}
  .today-card-head{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:10px;}
  .today-card .tag{
    display:inline-flex;align-items:center;font-size:var(--fs-caption);font-weight:700;
    text-transform:uppercase;letter-spacing:.06em;padding:5px 10px;border-radius:var(--radius-pill);
    background:var(--success-bg);color:var(--success);
  }
  .today-card .tag.pending{background:var(--fill);color:var(--text-muted);}
  .today-card.rest .tag{background:var(--steel-bg);color:var(--steel);}
  .today-card h2{font-size:24px;font-weight:800;letter-spacing:-.015em;margin-bottom:6px;}
  .ex-preview{font-size:var(--fs-subhead);color:var(--text-muted);line-height:1.5;margin-bottom:16px;}
  .today-card .link-btn:not(.pill){margin-top:6px;}
  .home-links{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-top:12px;}
  .home-links .card{
    margin:0;padding:14px 16px;cursor:pointer;display:flex;align-items:center;gap:10px;min-height:58px;
  }
  .home-links .card:active{background:var(--surface-2);}
  .home-links button.card{width:100%;border:none;font:inherit;color:var(--text);text-align:left;}
  button.cal-cell{padding:0;width:100%;}
  button.progress-row{display:flex;}
  .progress-delta.first{font-size:var(--fs-footnote);font-weight:600;color:var(--text-muted);}
  .home-links .card svg{width:22px;height:22px;stroke:var(--accent);fill:none;stroke-width:1.9;flex-shrink:0;}
  .home-links .card span{font-size:var(--fs-subhead);font-weight:700;}
  /* Progress: the full-width shortcut to Profile's Progression History */
  .home-links .card.wide{grid-column:1 / -1;width:100%;border:none;font:inherit;color:var(--text);text-align:left;}
  .home-links .card.wide > div{flex:1;min-width:0;display:flex;flex-direction:column;gap:1px;}
  .home-links .card.wide small{font-size:var(--fs-footnote);color:var(--text-muted);line-height:1.3;}
  .home-links .card.wide > svg:last-child{width:16px;height:16px;stroke:var(--text-3);stroke-width:2.2;filter:none;}
  /* "Finish setting up" after a quick start (finishSetupCard in app.js): Home and the Plan tab */
  .card.finish-setup{display:flex;align-items:center;gap:10px;width:100%;min-height:58px;padding:14px 16px;border:none;
    font:inherit;color:var(--text);text-align:left;cursor:pointer;box-shadow:0 0 0 1.5px var(--accent) inset, var(--shadow-card);}
  .screen-plan .card.finish-setup{margin:0 0 4px;}
  .card.finish-setup > div{flex:1;min-width:0;display:flex;flex-direction:column;gap:1px;}
  .card.finish-setup span{font-size:var(--fs-subhead);font-weight:700;}
  .card.finish-setup small{font-size:var(--fs-footnote);color:var(--text-muted);line-height:1.3;}
  /* One-time offer to rebuild an old-style Full Body C (fullBodyCCard) */
  .card.fbc-card{padding:14px 16px;margin:0 0 4px;border:1px solid var(--accent-glow-soft);}
  .fbc-card .fbc-title{font-size:var(--fs-subhead);font-weight:700;}
  .fbc-card p{margin:4px 0 10px;font-size:var(--fs-footnote);color:var(--text-muted);line-height:1.45;}
  .fbc-card .fbc-actions{display:flex;gap:8px;flex-wrap:wrap;}
  .fbc-card .fbc-actions .btn{flex:1;min-width:130px;margin:0;}
  .card.finish-setup > svg:first-child{width:22px;height:22px;stroke:var(--accent);fill:none;stroke-width:1.9;flex-shrink:0;}
  .card.finish-setup > svg:last-child{width:16px;height:16px;stroke:var(--text-3);fill:none;stroke-width:2.2;flex-shrink:0;}
  #progressionHistory{scroll-margin-top:calc(env(safe-area-inset-top) + 12px);}

  /* ============ CALENDAR ============ */
  .topbar{display:flex;align-items:center;justify-content:space-between;margin-bottom:14px;}
  .cal-card{padding:14px 12px 12px;}
  .cal-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px;}
  .cal-head h2{font-family:var(--font-display);font-weight:400;font-size:28px;letter-spacing:.02em;}
  .cal-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:4px;}
  .cal-dow{font-size:12px;color:var(--text-muted);text-align:center;font-weight:700;text-transform:uppercase;padding-bottom:6px;}
  .cal-cell{
    aspect-ratio:1;border-radius:50%;position:relative;
    display:flex;align-items:center;justify-content:center;
    background:transparent;border:none;cursor:pointer;
    font-size:var(--fs-subhead);font-weight:600;font-family:var(--font-body);color:var(--text);
  }
  .cal-cell:active{background:var(--fill);}
  .cal-cell.pad{visibility:hidden;pointer-events:none;}
  .cal-cell.done{background:var(--success);color:var(--success-ink);}
  .cal-cell.rest{color:var(--text-muted);}
  .cal-cell.missed{background:var(--danger-bg);color:var(--danger);}
  .cal-cell.paused{color:var(--text-muted);background:repeating-linear-gradient(135deg, var(--fill-strong) 0 3px, transparent 3px 7px);}
  .legend-dot.paused{background:repeating-linear-gradient(135deg, var(--text-3) 0 2px, transparent 2px 4px);box-shadow:0 0 0 1px var(--fill-strong) inset;}
  .paused-badge{display:inline-flex;align-items:center;gap:4px;margin-left:8px;padding:2px 8px 2px 6px;border-radius:var(--radius-pill);
    background:var(--fill-strong);color:var(--text-muted);font-size:var(--fs-caption);font-weight:700;letter-spacing:0;text-transform:none;vertical-align:middle;}
  .paused-badge svg{width:12px;height:12px;fill:none;stroke:currentColor;stroke-width:2;}
  .today-card.vacation h2{margin-top:2px;}
  .vac-list{margin-top:14px;}
  .vac-list .help-row{align-items:center;}
  .vac-text{flex:1;min-width:0;}
  .vac-btn{min-height:36px;padding:0 14px;flex:none;}
  .vac-dates{display:flex;gap:10px;}
  .vac-field{flex:1;min-width:0;display:flex;flex-direction:column;gap:6px;font-size:var(--fs-footnote);font-weight:600;color:var(--text-muted);}
  .vac-field .field-input{min-width:0;width:100%;}
  .vac-reasons{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px;}
  .cal-cell.future-train{color:var(--text);}
  .cal-cell.today{box-shadow:0 0 0 2px var(--accent) inset;}
  .cal-cell.today.done{box-shadow:0 0 0 2px var(--accent) inset, 0 0 0 4px var(--surface) inset;}
  .cal-cell .dot{position:absolute;bottom:3px;width:4px;height:4px;border-radius:50%;background:var(--accent);}
  /* a day's workout name under its date (calDayTag in app.js) */
  .cal-grid .cal-cell{aspect-ratio:auto;min-height:48px;border-radius:12px;flex-direction:column;gap:1px;}
  .cal-cell .cal-num{line-height:1.1;}
  .cal-cell .cal-tag{font-size:9px;font-weight:700;letter-spacing:.02em;text-transform:uppercase;line-height:1;
    max-width:100%;overflow:hidden;white-space:nowrap;color:var(--accent);}
  .cal-cell.done .cal-tag{color:var(--success-ink);opacity:.85;}
  .cal-cell.missed .cal-tag{color:var(--danger);}
  .cal-cell.paused .cal-tag,.cal-cell.before-start .cal-tag{color:var(--text-3);}
  .legend-tag{font-size:9px;font-weight:700;text-transform:uppercase;color:var(--accent);}
  /* Calendar: This week */
  .week-summary{margin-bottom:12px;}
  .week-sum-head{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:12px;}
  .week-sum-head h2{font-size:var(--fs-headline);font-weight:700;}
  .week-sum-head span{font-size:var(--fs-footnote);color:var(--text-muted);}
  .week-sum-stats{display:grid;grid-template-columns:repeat(3,1fr);}
  .week-sum-stats > div{text-align:center;}
  .week-sum-stats > div + div{border-left:.5px solid var(--separator);}
  .week-sum-stats .n{font-family:var(--font-mono);font-size:22px;font-weight:600;}
  .week-sum-stats .n small{font-size:14px;color:var(--text-muted);font-weight:500;}
  .week-sum-stats .n.bad{color:var(--danger);}
  .week-sum-stats .l{font-size:var(--fs-footnote);color:var(--text-muted);margin-top:2px;}
  .week-sum-next{display:flex;align-items:center;gap:10px;width:100%;margin-top:14px;padding:12px 2px 0;border:0;
    border-top:.5px solid var(--separator);background:none;font:inherit;color:var(--text);text-align:left;cursor:pointer;}
  .week-sum-next:disabled{cursor:default;}
  .week-sum-next .k{font-size:var(--fs-footnote);font-weight:600;color:var(--text-muted);}
  .week-sum-next .v{flex:1;font-weight:600;}
  .week-sum-next svg{width:14px;height:14px;stroke:var(--text-3);fill:none;stroke-width:2.6;}
  .legend{display:flex;flex-wrap:wrap;justify-content:center;gap:8px 14px;margin-top:12px;padding-top:12px;border-top:.5px solid var(--separator);}
  .legend-item{display:flex;align-items:center;gap:6px;font-size:var(--fs-footnote);color:var(--text-muted);}
  .legend-dot{width:10px;height:10px;border-radius:50%;}
  .month-stats{display:grid;grid-template-columns:repeat(3,1fr);margin-top:12px;padding:14px 8px;}
  .month-stat{text-align:center;}
  .month-stat + .month-stat{border-left:.5px solid var(--separator);}
  .month-stat .n{font-family:var(--font-mono);font-size:22px;font-weight:600;}
  .month-stat .l{font-size:var(--fs-footnote);color:var(--text-muted);margin-top:2px;}

  /* ============ MY LIFT ============ */
  .date-nav{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:6px;}
  .date-nav .center{text-align:center;flex:1;min-width:0;}
  .date-nav .center h2{font-size:var(--fs-title3);font-weight:800;letter-spacing:-.01em;}
  .date-nav .center .sub{font-size:var(--fs-footnote);color:var(--text-muted);margin-top:2px;}
  .lift-progress{display:flex;align-items:center;gap:12px;margin:6px 0 16px;}
  .lift-progress .mono{font-size:var(--fs-footnote);color:var(--text-muted);white-space:nowrap;}
  .ex-card{margin-bottom:12px;position:relative;background:var(--surface);}
  .card.ex-card + .card.ex-card{margin-top:0;}
  .ex-card.done{background:var(--surface);box-shadow:0 0 0 1.5px var(--success), var(--shadow-card);}
  .ex-card.dragging{box-shadow:var(--shadow-raised);z-index:10;opacity:.97;}
  .ex-card-head{display:flex;align-items:flex-start;gap:8px;margin-bottom:12px;}
  .ex-card-head h3{font-size:var(--fs-headline);font-weight:800;letter-spacing:-.01em;line-height:1.25;}
  .ex-card-title{flex:1;min-width:0;}
  .ex-card-actions{display:flex;align-items:center;gap:6px;flex-shrink:0;}
  .drag-handle{
    flex-shrink:0;width:22px;height:36px;margin:-6px -2px 0 -6px;
    display:flex;align-items:center;justify-content:center;
    cursor:grab;touch-action:none;color:var(--text-3);
  }
  .drag-handle:active{cursor:grabbing;}
  .drag-handle svg{width:16px;height:16px;fill:currentColor;stroke:none;}
  .ex-target{font-size:var(--fs-secondary);color:var(--text-muted);margin-top:3px;line-height:1.35;}
  .ex-target b{display:block;font-weight:700;}
  /* "Suggested working sets", then "4 × 6 reps · Rest 60–90s" on one line when it fits; when it
     wraps, the rest time starts the next line and its leading dot falls in the clipped margin */
  .ex-target{overflow:hidden;}
  .ex-target > div{display:flex;flex-wrap:wrap;margin-left:-14px;}
  .ex-target > div > span{white-space:nowrap;}
  .ex-target > div > span::before{content:'·';display:inline-block;width:14px;text-align:center;}
  /* the top-set target: the biggest text on the card, right under the exercise name */
  .rec-block{margin:-2px 0 14px;padding:12px 14px 4px;border-radius:var(--radius-md);background:var(--surface-2);}
  .rec-block.quiet{padding-top:10px;}
  .rec-block.quiet .rec-prev{margin-top:0;}
  /* "Why this target?" and "History", small links along the bottom of the target block */
  .rec-links{display:flex;flex-wrap:wrap;column-gap:18px;margin:2px 0 0 -6px;}
  .rec-link{min-height:38px;gap:5px;font-size:var(--fs-footnote);}
  .rec-link svg{width:15px;height:15px;stroke:currentColor;fill:none;stroke-width:2.2;stroke-linecap:round;stroke-linejoin:round;}
  .rec-per,.chart-per{font-size:var(--fs-caption);font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--text-muted);}
  .rec-per{margin:0 0 3px;}
  .chart-per{margin:0 0 8px;}
  .rec-today{
    font-size:clamp(20px, 6.2vw, 26px);font-weight:800;letter-spacing:-.02em;line-height:1.15;
    color:var(--text);font-variant-numeric:tabular-nums;
  }
  .rec-eyebrow{color:var(--accent-text);}
  .rec-today .nw{white-space:nowrap;}
  .rec-prev{margin-top:4px;font-size:var(--fs-secondary);line-height:1.35;color:var(--text-muted);font-variant-numeric:tabular-nums;}
  .progress-group-label{display:flex;align-items:center;gap:8px;padding:12px 16px 4px;border-top:1px solid var(--border);
    font-size:var(--fs-caption);font-weight:800;text-transform:uppercase;letter-spacing:.05em;color:var(--text-muted);}
  .progress-group-label .lib-dot{width:8px;height:8px;}
  .progress-group-label .n{margin-left:auto;font-weight:700;color:var(--text-muted);}
  .title-with-help{display:flex;align-items:center;gap:10px;}
  .title-help-btn{width:26px;height:26px;border-radius:50%;padding:0;flex:none;border:1.5px solid var(--text-3);background:none;
    color:var(--text-muted);font:700 13px/1 var(--font-body);display:inline-flex;align-items:center;justify-content:center;cursor:pointer;}
  .app-guide .guide-topics{margin:12px 0 0;}
  .app-guide .guide-topics .row-btn{gap:12px;}
  .app-guide .guide-topics .row-btn > div{flex:1;min-width:0;}
  .guide-page-head{display:flex;gap:12px;align-items:center;margin-bottom:6px;}
  .guide-page-head h3{margin:0 0 2px;}
  .guide-step{font:800 13px/1 var(--font-body);}
  .guide-all{display:block;margin:10px auto 0;}
  .guide-nav{display:flex;gap:10px;margin-top:14px;}
  /* the sheet scrolls; Back/Next stay in reach at its bottom edge */
  .app-guide .guide-nav{position:sticky;bottom:calc(-1 * (env(safe-area-inset-bottom) + 18px));z-index:1;
    margin:14px calc(-1 * var(--page-x)) calc(-1 * (env(safe-area-inset-bottom) + 18px));
    padding:12px var(--page-x) calc(env(safe-area-inset-bottom) + 18px);background:var(--surface);
    box-shadow:0 -10px 18px -14px rgba(0,0,0,.25);}
  .app-guide .guide-count{margin:0 0 -6px;}
  .guide-nav .btn{flex:1;}
  .guide-count{margin:10px 0 0;text-align:center;font-size:var(--fs-footnote);color:var(--text-muted);}
  .ex-hint{display:flex;gap:7px;align-items:center;margin:2px 2px 12px;font-size:var(--fs-secondary);line-height:1.4;color:var(--text-muted);}
  .ex-hint b{color:var(--text);font-weight:700;}
  .rec-block + .ex-hint{margin-top:-4px;}
  .ex-check{
    width:30px;height:30px;border-radius:50%;border:2px solid var(--fill-strong);
    display:flex;align-items:center;justify-content:center;flex-shrink:0;
    transition:background .15s, border-color .15s;
  }
  .ex-check svg{width:14px;height:14px;stroke:#fff;fill:none;stroke-width:3;opacity:0;}
  .ex-check.on{background:var(--success);border-color:var(--success);}
  .ex-check.on svg{opacity:1;}
  .ex-inputs{display:flex;gap:10px;align-items:flex-end;}   /* a two-line label (Weight per dumbbell) still lines the boxes up */
  .ex-field{flex:1;min-width:0;}
  .ex-field label{display:block;font-size:var(--fs-footnote);font-weight:600;color:var(--text-muted);margin:0 2px 6px;}
  .ex-field input{
    width:100%;min-height:var(--control-h);padding:10px 12px;border-radius:var(--radius-md);
    border:1px solid transparent;background:var(--surface-2);color:var(--text);
    font-family:var(--font-mono);font-size:17px;font-weight:600;
  }
  .ex-field input:focus{border-color:var(--accent);outline:none;background:var(--surface);box-shadow:0 0 0 3px var(--accent-tint);}
  .ex-field input:disabled{opacity:.5;}
  .stepper{display:flex;align-items:stretch;border-radius:var(--radius-md);overflow:hidden;background:var(--surface-2);}
  .stepper input{border:none !important;background:transparent;text-align:center;flex:1;min-width:0;border-radius:0 !important;padding:10px 2px;box-shadow:none !important;}
  .stepper input:focus{background:var(--surface);}
  .step-btn{
    width:44px;flex-shrink:0;border:none;background:transparent;color:var(--accent-text);
    font-size:22px;font-weight:600;font-family:var(--font-body);cursor:pointer;line-height:1;
    display:flex;align-items:center;justify-content:center;padding:0;
  }
  .step-btn:active{background:var(--fill-strong);}
  .step-btn:disabled{opacity:.35;cursor:not-allowed;}
  .lock-btn{
    width:100%;min-height:48px;margin-top:12px;padding:0 14px;border-radius:var(--radius-md);
    border:none;background:var(--accent-tint);color:var(--accent-text);
    font-weight:700;font-size:var(--fs-subhead);cursor:pointer;
    display:flex;align-items:center;justify-content:center;gap:8px;font-family:inherit;
  }
  .lock-btn:active{opacity:.7;}
  .lock-btn svg{width:15px;height:15px;stroke:currentColor;fill:none;stroke-width:3;flex-shrink:0;}
  /* Skip exercise: a quiet link under "Log this set", and a set-aside look once skipped */
  .skip-link{display:flex;align-items:center;justify-content:center;gap:6px;width:100%;margin-top:6px;min-height:40px;
    font-size:var(--fs-subhead);font-weight:600;color:var(--text-muted);}
  .skip-link svg{width:15px;height:15px;stroke:currentColor;fill:none;stroke-width:2.2;stroke-linecap:round;stroke-linejoin:round;}
  .ex-card.skipped{background:var(--surface);box-shadow:inset 0 0 0 1.5px var(--fill-strong);}
  .ex-card.skipped h3{color:var(--text-muted);}
  .ex-card.skipped .ex-card-head{margin-bottom:10px;}
  .ex-check.skipped{border-color:transparent;background:var(--fill-strong);}
  .ex-check.skipped svg{opacity:1;stroke:var(--text-muted);width:15px;height:15px;stroke-width:2.4;}
  .skip-banner{display:flex;align-items:center;gap:12px;padding:10px 12px 10px 14px;border-radius:var(--radius-md);
    background:repeating-linear-gradient(135deg, var(--fill) 0 6px, transparent 6px 12px), var(--surface-2);}
  .skip-banner > div{flex:1;min-width:0;display:flex;flex-direction:column;gap:1px;}
  .skip-banner b{font-size:var(--fs-subhead);font-weight:800;}
  .skip-banner span{font-size:var(--fs-secondary);color:var(--text-muted);}
  .skip-sheet h3{margin:0 0 6px;}
  .skip-sheet .section-label{margin-top:4px;}
  .optional-inline{font-weight:500;text-transform:none;letter-spacing:0;margin-left:4px;}
  .skip-reasons{display:flex;flex-wrap:wrap;gap:8px;margin-top:8px;}
  .skip-swap{display:inline-flex;align-items:center;gap:6px;margin-top:12px;font-size:var(--fs-secondary);}
  .skip-swap svg{width:15px;height:15px;stroke:currentColor;fill:none;stroke-width:2.2;}
  .skip-warn{display:flex;gap:8px;align-items:flex-start;margin:14px 0 0;padding:10px 12px;border-radius:var(--radius-md);
    background:var(--surface-2);font-size:var(--fs-secondary);line-height:1.45;color:var(--text-muted);}
  .skip-warn svg{width:16px;height:16px;flex:none;margin-top:2px;stroke:currentColor;fill:none;stroke-width:2;}
  .skip-actions{display:flex;gap:10px;margin-top:18px;}
  .skip-actions .btn{flex:1;}
  .lock-btn:disabled{opacity:.4;cursor:not-allowed;}
  .rest-hero{text-align:center;padding:10vh 16px 24px;}
  .rest-hero svg{width:48px;height:48px;stroke:var(--steel);fill:none;stroke-width:1.5;margin-bottom:14px;}
  .rest-hero h2{font-size:24px;font-weight:800;margin-bottom:8px;}
  .rest-hero p{color:var(--text-muted);font-size:var(--fs-subhead);max-width:30ch;margin:0 auto;line-height:1.55;}

  /* ============ BUILDER ============ */
  .day-check-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:6px;margin-bottom:12px;}
  .day-check{
    aspect-ratio:1;border-radius:50%;border:none;background:var(--surface);box-shadow:var(--shadow-card);
    display:flex;align-items:center;justify-content:center;font-size:var(--fs-footnote);font-weight:700;
    cursor:pointer;color:var(--text-muted);
  }
  .day-check.on{background:var(--accent-fill);color:var(--accent-ink);}
  .builder-day{margin-bottom:12px;}
  .builder-day-title{display:flex;align-items:center;gap:8px;margin-bottom:10px;}
  .builder-day-title input{
    flex:1;min-width:0;font-weight:700;font-size:var(--fs-body);color:var(--text);
    border:none;background:var(--surface-2);border-radius:var(--radius-sm);padding:10px 12px;font-family:inherit;
  }
  .builder-day-title input:focus{outline:none;box-shadow:0 0 0 2px var(--accent);}
  .ex-row{display:flex;gap:6px;margin-bottom:8px;align-items:center;}
  .ex-row .field-input{padding:10px;min-height:44px;}
  .ex-row .exname{flex:2.4;min-width:0;}
  .ex-row .exsets{flex:.8;min-width:0;}
  .ex-row .exreps{flex:.8;min-width:0;}
  .ex-row button{
    width:32px;height:32px;flex-shrink:0;border-radius:50%;border:none;padding:0;cursor:pointer;
    background:var(--danger-bg);color:var(--danger);display:flex;align-items:center;justify-content:center;
  }
  .ex-row button svg{width:14px;height:14px;stroke:currentColor;fill:none;stroke-width:2.4;}
  .add-ex-btn{
    width:100%;min-height:44px;padding:0 12px;border-radius:var(--radius-md);border:none;
    background:var(--accent-tint);color:var(--accent-text);font-weight:700;font-size:var(--fs-subhead);
    cursor:pointer;margin-top:4px;font-family:inherit;
  }
  .add-ex-btn:active{opacity:.7;}
  .rest-toggle-row{display:flex;align-items:center;justify-content:space-between;min-height:48px;gap:12px;}
  .rest-toggle-row + *{margin-top:8px;}

  /* ============ PROFILE ============ */
  .profile-head{display:flex;align-items:center;gap:16px;margin:4px 0 8px;}
  .avatar-btn{
    width:76px;height:76px;border-radius:50%;flex-shrink:0;padding:0;cursor:pointer;
    background:var(--surface);border:none;box-shadow:var(--shadow-card);
    display:flex;align-items:center;justify-content:center;
  }
  .avatar-btn svg{width:26px;height:26px;stroke:var(--text-muted);fill:none;stroke-width:1.6;}
  .avatar-btn:active{transform:scale(.97);}
  .profile-id{min-width:0;}
  .profile-name{font-size:var(--fs-title2);font-weight:800;letter-spacing:-.01em;display:flex;align-items:center;gap:8px;flex-wrap:wrap;}
  .profile-streak{
    display:inline-flex;align-items:center;gap:3px;font-family:var(--font-mono);
    font-size:var(--fs-footnote);font-weight:700;color:var(--accent-text);background:var(--accent-tint);
    padding:3px 9px 3px 6px;border-radius:var(--radius-pill);
  }
  .profile-streak svg{width:14px;height:14px;}
  .profile-email{font-size:var(--fs-footnote);color:var(--text-muted);margin-top:4px;word-break:break-all;}
  .progress-row{
    display:flex;align-items:center;justify-content:space-between;gap:10px;width:100%;
    min-height:58px;padding:12px 16px;background:none;border:none;position:relative;
    text-align:left;cursor:pointer;font-family:inherit;color:inherit;
  }
  .progress-row + .progress-row::before{content:'';position:absolute;top:0;left:16px;right:0;height:.5px;background:var(--separator);}
  .progress-row:active{background:var(--surface-2);}
  .progress-row > svg{width:14px;height:14px;stroke:var(--text-3);fill:none;stroke-width:2.6;flex-shrink:0;}
  .progress-row-main{min-width:0;}
  .progress-ex-name{font-size:var(--fs-subhead);font-weight:700;}
  .progress-ex-sub{font-size:var(--fs-footnote);color:var(--text-muted);margin-top:2px;}
  .progress-row-stats{text-align:right;flex-shrink:0;}
  .progress-weights{font-size:var(--fs-secondary);color:var(--text-muted);}
  .progress-kind{font-size:var(--fs-caption);font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:var(--text-3);}
  .progress-delta{font-size:var(--fs-subhead);font-weight:700;margin-top:2px;}
  .progress-delta.up{color:var(--success);}
  .progress-delta.down{color:var(--danger);}
  .chart-modal-card,.muscle-map-card{max-width:460px;}
  .muscle-map-view-labels{display:flex;margin-top:12px;}
  .muscle-map-view-labels span{flex:1;text-align:center;font-size:var(--fs-caption);font-weight:700;color:var(--text-muted);text-transform:uppercase;letter-spacing:.06em;}
  .muscle-map-wrap{position:relative;margin-top:6px;border-radius:var(--radius-md);overflow:hidden;background:#0B0B12;}
  .muscle-map-img{display:block;width:100%;height:auto;}
  .muscle-map-canvas{position:absolute;top:0;left:0;width:100%;height:100%;cursor:pointer;}
  .bodymap-tags{display:flex;flex-wrap:wrap;justify-content:center;gap:8px;margin-top:14px;}
  .bodymap-tag{
    background:var(--accent-fill);color:var(--accent-ink);
    font-size:var(--fs-caption);font-weight:700;text-transform:uppercase;letter-spacing:.05em;
    padding:6px 14px;border-radius:var(--radius-pill);
  }
  .bodymap-tag.secondary{opacity:0.55;}
  .muscle-tooltip{
    position:absolute;transform:translate(-50%,-100%) translateY(-8px);
    background:var(--text);color:var(--bg);font-size:var(--fs-caption);font-weight:700;white-space:nowrap;
    padding:5px 9px;border-radius:7px;pointer-events:none;opacity:0;transition:opacity .1s;z-index:20;
  }
  .muscle-tooltip::after{
    content:'';position:absolute;left:50%;top:100%;transform:translateX(-50%);
    border:5px solid transparent;border-top-color:var(--text);
  }
  .muscle-tooltip.visible{opacity:1;}
  .chart-mode-toggle{margin:2px 0 10px;}
  .chart-custom-reps{width:110px;margin:2px 0 0;}
  .chart-subtitle{margin:10px 0;font-size:var(--fs-footnote);line-height:1.45;color:var(--text-muted);}
  .chart-subtitle.estimate{color:var(--steel);font-weight:700;}
  .chart-note{margin:10px 0 0;font-size:var(--fs-secondary);line-height:1.45;color:var(--text-muted);}
  .chart-rep-hint{margin:0 2px -4px;font-size:var(--fs-footnote);font-weight:600;color:var(--text-muted);}
  .chart-empty{text-align:center;padding:22px 8px 6px;}
  .chart-empty svg{width:34px;height:34px;padding:10px;box-sizing:content-box;border-radius:50%;background:var(--accent-tint);
    stroke:var(--accent-text);fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;}
  .chart-empty h4{margin:12px 0 6px;font-size:var(--fs-headline);font-weight:800;}
  .chart-empty p{margin:0 auto;max-width:300px;font-size:var(--fs-secondary);line-height:1.45;color:var(--text-muted);}

  /* ============ ASK AI ============ */
  /* Chat fills the space between the title and the tab bar, with the composer pinned at
     the bottom like Messages; the thread scrolls inside. */
  .ai-page-card{
    display:flex;flex-direction:column;
    height:calc(100dvh - env(safe-area-inset-top) - var(--tabbar-space) - 150px);
    min-height:300px;
  }
  /* The Ask AI screen is exactly one viewport tall: title on top, chat filling the rest down to
     just above the floating tab bar, so the page itself never scrolls. */
  /* flex:none, or .screen's flex:1 lets the page grow past the screen once the chat gets long */
  .screen-askai{height:100dvh;flex:none;min-height:0;box-sizing:border-box;display:flex;flex-direction:column;padding-bottom:calc(var(--tabbar-space) + 14px);}
  .screen-askai .ai-page-card{flex:1;height:auto;min-height:260px;}
  body.keyboard-open .screen-askai .ai-page-card{flex:none;}
  .ai-messages{
    flex:1;min-height:0;overflow-y:auto;overscroll-behavior:contain;position:relative;
    display:flex;flex-direction:column;gap:8px;padding:2px 2px 10px;
  }
  .ai-page-messages{max-height:none;}
  .ai-empty{margin:auto 0;text-align:center;color:var(--text-muted);font-size:var(--fs-subhead);line-height:1.5;padding:0 12px;}
  .ai-empty svg{width:34px;height:34px;stroke:var(--accent);fill:none;stroke-width:1.6;margin:0 auto 10px;display:block;}
  .ai-msg{
    font-size:var(--fs-subhead);line-height:1.45;padding:9px 13px;border-radius:19px;
    max-width:84%;white-space:pre-wrap;overflow-wrap:anywhere;
  }
  .ai-msg.user{align-self:flex-end;background:var(--accent-fill);color:var(--accent-ink);border-bottom-right-radius:6px;}
  .ai-msg.assistant{align-self:flex-start;background:var(--surface);color:var(--text);border-bottom-left-radius:6px;box-shadow:var(--shadow-card);}
  .ai-msg.ai-typing{color:var(--text-muted);font-style:italic;}
  .ai-proposal-card{
    background:var(--surface);box-shadow:0 0 0 1.5px var(--success), var(--shadow-card);border-radius:var(--radius-lg);
    padding:14px;margin:2px 0 4px;flex:none;
  }
  .ai-proposal-label{font-size:var(--fs-caption);font-weight:800;text-transform:uppercase;letter-spacing:.05em;color:var(--success);margin-bottom:4px;}
  .ai-proposal-desc{font-size:var(--fs-subhead);font-weight:600;color:var(--text);margin-bottom:12px;line-height:1.4;}
  .ai-quota{margin:4px 0 0;font-size:var(--fs-footnote);font-weight:600;color:var(--text-muted);}
  .ai-quota.out{color:var(--danger);}
  .ai-proposal-day{font-size:var(--fs-body);font-weight:800;color:var(--text);line-height:1.3;}
  .ai-proposal-scope{font-size:var(--fs-secondary);color:var(--text-muted);margin-top:2px;}
  .ai-proposal-edits{list-style:none;margin:10px 0 0;padding:0;display:flex;flex-direction:column;gap:6px;}
  .ai-proposal-edits li{display:flex;gap:8px;align-items:baseline;font-size:var(--fs-subhead);font-weight:600;color:var(--text);line-height:1.35;}
  .ai-proposal-edits .g{flex:none;width:14px;text-align:center;font-weight:800;color:var(--success);}
  .ai-proposal-notes{margin:10px 0 0;padding:0 0 0 18px;font-size:var(--fs-secondary);color:var(--text-muted);line-height:1.4;}
  .ai-proposal-actions{margin-top:14px;}
  .ai-proposal-actions{display:flex;gap:10px;}
  .ai-proposal-actions .btn{min-height:44px;}
  .ai-input-row{
    display:flex;align-items:center;gap:8px;padding:6px 6px 6px 4px;
    background:var(--surface);border-radius:26px;box-shadow:var(--shadow-card);
  }
  .ai-input-row .field-input{flex:1;min-height:42px;border:none;background:transparent;box-shadow:none;padding:8px 12px;border-radius:22px;}
  .ai-input-row .field-input:focus{box-shadow:none;background:transparent;}
  .ai-input-row .btn{flex-shrink:0;min-height:40px;padding:0 16px;border-radius:20px;font-size:var(--fs-subhead);}

  /* ============ AUTH SCREENS ============ */
  .auth-hero{padding:7vh 0 22px;text-align:center;}
  .auth-hero .flame{display:block;width:48px;height:48px;margin:0 auto 4px;}
  .auth-hero .display-num{font-size:52px;color:var(--accent);}
  .auth-hero p{color:var(--text-muted);font-size:var(--fs-subhead);max-width:30ch;margin:8px auto 0;line-height:1.5;}
  .auth-form{display:flex;flex-direction:column;gap:12px;margin-top:8px;}
  .auth-error,.auth-notice{border-radius:var(--radius-md);padding:12px 14px;font-size:var(--fs-footnote);font-weight:600;line-height:1.4;}
  .auth-error{background:var(--danger-bg);color:var(--danger);}
  .auth-notice{background:var(--success-bg);color:var(--text);}
  .auth-divider{display:flex;align-items:center;gap:12px;margin:18px 0;color:var(--text-muted);font-size:var(--fs-footnote);}
  .auth-divider::before,.auth-divider::after{content:'';flex:1;height:.5px;background:var(--separator);}
  .social-btns{display:flex;flex-direction:column;gap:10px;}
  .google-btn{
    display:flex;align-items:center;justify-content:center;gap:10px;width:100%;
    background:var(--surface);border:none;box-shadow:var(--shadow-card), 0 0 0 1px var(--separator) inset;color:var(--text);
    font-weight:700;font-size:var(--fs-body);padding:0 14px;border-radius:var(--radius-md);cursor:pointer;font-family:inherit;
  }
  .google-btn svg{width:18px;height:18px;flex-shrink:0;}
  /* Sign in with Apple: Apple's guidelines call for a black (or, on dark backgrounds,
     white) button with the Apple logo, the system font, and at least the same size and
     prominence as other sign-in buttons. */
  .apple-btn{
    display:flex;align-items:center;justify-content:center;gap:9px;width:100%;
    background:#000;color:#fff;border:none;
    font-family:-apple-system,BlinkMacSystemFont,system-ui,sans-serif;
    font-weight:600;font-size:var(--fs-headline);padding:0 14px;border-radius:var(--radius-md);cursor:pointer;
  }
  .apple-btn svg{width:15px;height:18px;flex-shrink:0;}
  .apple-btn,.google-btn{min-height:50px;}
  .apple-btn:active,.google-btn:active{opacity:.8;}
  .apple-btn:disabled,.google-btn:disabled{opacity:.55;cursor:not-allowed;}
  :root[data-theme="dark"] .apple-btn{background:#fff;color:#000;}
  @media (prefers-color-scheme: dark){ :root:not([data-theme="light"]) .apple-btn{background:#fff;color:#000;} }
  .auth-forgot{
    align-self:flex-end;margin:-8px 0 -4px;padding:8px 2px;min-height:var(--tap);background:none;border:none;cursor:pointer;
    color:var(--accent-text);font:inherit;font-size:var(--fs-footnote);font-weight:700;
  }
  .auth-fine{color:var(--text-muted);font-size:var(--fs-footnote);line-height:1.5;text-align:center;max-width:34ch;margin:0 auto;}
  .auth-switch{text-align:center;margin-top:16px;font-size:var(--fs-subhead);color:var(--text-muted);}
  .auth-switch button{
    background:none;border:none;color:var(--accent-text);font-weight:700;cursor:pointer;
    font-size:inherit;font-family:inherit;padding:10px 4px;min-height:var(--tap);
  }

  /* ============ NUTRITION ============ */
  /* Nutrition tab: its other pages (food calendar, Weight, Goals), one tap away */
  .nutri-links{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-bottom:12px;}
  .nutri-links button{
    display:flex;align-items:center;justify-content:center;gap:6px;min-height:40px;padding:0 8px;border:none;border-radius:var(--radius-pill);
    background:var(--accent-tint);color:var(--accent-text);font:inherit;font-size:14px;font-weight:700;cursor:pointer;
  }
  .nutri-links button:active{opacity:.75;}
  .nutri-links svg{width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:2;flex-shrink:0;}
  .nutrition-summary-card{
    display:grid;grid-template-columns:auto 1fr;align-items:center;gap:6px 18px;padding:18px 16px 14px;margin-top:8px;
  }
  .cal-ring-wrap{position:relative;width:118px;height:118px;}
  .cal-ring{width:100%;height:100%;}
  .cal-ring-center{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;}
  .cal-ring-num{font-size:24px;font-weight:800;line-height:1;}
  .cal-ring-label{font-size:var(--fs-caption);color:var(--text-muted);text-transform:uppercase;letter-spacing:.05em;font-weight:600;margin-top:3px;}
  .macro-bars{min-width:0;display:flex;flex-direction:column;gap:11px;}
  .macro-bar-row{width:100%;}
  .macro-bar-label{display:flex;justify-content:space-between;gap:8px;font-size:var(--fs-footnote);font-weight:700;margin-bottom:5px;}
  .macro-bar-label .mono{font-weight:500;color:var(--text-muted);font-size:var(--fs-footnote);}
  .macro-bar-track{height:7px;background:var(--fill);border-radius:var(--radius-pill);overflow:hidden;}
  .macro-bar-fill{height:100%;border-radius:var(--radius-pill);transition:width .3s ease;}
  .macro-bar-fill.protein{background:var(--protein);}
  .macro-bar-fill.carbs{background:var(--carbs, var(--success));}
  .macro-bar-fill.fat{background:var(--fat, var(--warning));}
  .nutrition-summary-foot{grid-column:1 / -1;text-align:center;font-size:var(--fs-footnote);color:var(--text-muted);padding-top:10px;margin-top:6px;border-top:.5px solid var(--separator);}
  .meal-section{
    margin-top:14px;background:var(--surface);border-radius:var(--radius-lg);box-shadow:var(--shadow-card);overflow:hidden;
  }
  .meal-head{display:flex;align-items:baseline;justify-content:space-between;padding:14px 16px 8px;}
  .meal-head h3{font-size:var(--fs-headline);font-weight:800;}
  .meal-total{font-size:var(--fs-footnote);color:var(--text-muted);}
  .meal-empty{font-size:var(--fs-secondary);color:var(--text-muted);margin:0;padding:2px 16px 10px;}
  .food-row{
    display:flex;align-items:center;gap:8px;position:relative;
    padding:10px 10px 10px 16px;background:transparent;border:none;border-radius:0;margin:0;
  }
  .food-row::before{content:'';position:absolute;top:0;left:16px;right:0;height:.5px;background:var(--separator);}
  .food-row-main{flex:1;min-width:0;text-align:left;background:none;border:none;padding:0;cursor:pointer;font-family:inherit;color:var(--text);}
  .food-row-main:active{opacity:.6;}
  .food-row-name{font-size:var(--fs-subhead);font-weight:700;}
  .food-row-sub{font-size:var(--fs-secondary);color:var(--text-muted);margin-top:2px;}
  .food-row-macros{font-size:var(--fs-footnote);color:var(--text-muted);margin-top:2px;}
  .meal-section .add-ex-btn{
    display:flex;align-items:center;justify-content:flex-start;gap:6px;
    border-radius:0;margin:0;background:transparent;min-height:48px;padding:0 16px;
    border-top:.5px solid var(--separator);font-size:var(--fs-subhead);
  }
  .meal-section .add-ex-btn:active{background:var(--fill);}
  .meal-section .meal-repeat span,.meal-section .meal-copy span{display:flex;flex-direction:column;align-items:flex-start;line-height:1.2;}
  .meal-section .meal-repeat small{font-size:var(--fs-footnote);font-weight:500;color:var(--text-muted);margin-top:2px;}
  .meal-section .meal-repeat{min-height:56px;}
  .qty-stepper{display:flex;align-items:center;justify-content:center;gap:20px;margin:6px 0 2px;}
  .qty-stepper .iconbtn{width:44px;height:44px;font-size:22px;font-weight:600;color:var(--accent-text);background:var(--accent-tint);}
  .qty-val{font-size:22px;font-weight:800;min-width:56px;text-align:center;}
  /* the amount can be typed: a borderless number with its unit (× or g) after it */
  .qty-input{display:flex;align-items:baseline;justify-content:center;gap:2px;}
  .qty-input input{width:84px;padding:6px 4px;border:0;border-radius:var(--radius-sm);background:var(--fill);color:var(--text);
    font-size:22px;font-weight:800;text-align:center;-moz-appearance:textfield;}
  .qty-input input::-webkit-outer-spin-button,.qty-input input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0;}
  .qty-input span{font-size:18px;font-weight:700;color:var(--text-muted);}
  .amount-unit{margin:0 0 12px;}
  .stat-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:4px;}
  .stat-tile{background:var(--surface);box-shadow:var(--shadow-card);border-radius:var(--radius-md);padding:14px 10px;text-align:center;}
  .card .stat-tile,.modal-card .stat-tile{background:var(--surface-2);box-shadow:none;}
  .stat-num{font-size:20px;font-weight:700;}
  .stat-label{font-size:var(--fs-footnote);color:var(--text-muted);margin-top:3px;}
  .target-toggle{margin-top:2px;}
  .barcode-scan-area{
    position:relative;background:#000;border-radius:var(--radius-md);overflow:hidden;margin-bottom:14px;
    min-height:160px;display:flex;align-items:center;justify-content:center;
  }
  .barcode-video{width:100%;height:280px;object-fit:cover;background:#000;display:block;}
  /* The scanning box: a clear window over the camera, everything around it dimmed */
  .scan-frame{
    position:absolute;left:50%;top:46%;width:80%;height:40%;transform:translate(-50%,-50%);
    border-radius:14px;box-shadow:0 0 0 9999px rgba(0,0,0,.52);pointer-events:none;
  }
  .scan-frame .c{position:absolute;width:28px;height:28px;border:3.5px solid #fff;}
  .scan-frame .tl{top:-2px;left:-2px;border-right:0;border-bottom:0;border-top-left-radius:14px;}
  .scan-frame .tr{top:-2px;right:-2px;border-left:0;border-bottom:0;border-top-right-radius:14px;}
  .scan-frame .bl{bottom:-2px;left:-2px;border-right:0;border-top:0;border-bottom-left-radius:14px;}
  .scan-frame .br{bottom:-2px;right:-2px;border-left:0;border-top:0;border-bottom-right-radius:14px;}
  .scan-line{
    position:absolute;left:6%;right:6%;top:50%;height:2px;border-radius:2px;
    background:var(--accent-hi);box-shadow:0 0 10px 1px var(--accent-hi);
    animation:scanSweep 2.2s ease-in-out infinite;
  }
  @keyframes scanSweep{0%,100%{top:14%;}50%{top:86%;}}
  .scan-hint{
    position:absolute;left:12px;right:12px;bottom:12px;margin:0;text-align:center;
    color:#fff;font-size:var(--fs-footnote);font-weight:600;text-shadow:0 1px 4px rgba(0,0,0,.7);pointer-events:none;
  }
  .scan-torch{
    position:absolute;top:10px;right:10px;width:44px;height:44px;border-radius:50%;border:none;cursor:pointer;
    display:flex;align-items:center;justify-content:center;
    background:rgba(0,0,0,.45);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);
  }
  .scan-torch[hidden]{display:none;}
  .scan-torch svg{width:22px;height:22px;stroke:#fff;fill:none;stroke-width:1.9;stroke-linejoin:round;stroke-linecap:round;}
  .scan-torch.on{background:#fff;box-shadow:0 0 18px rgba(255,255,255,.6);}
  .scan-torch.on svg{stroke:#111;fill:#FFD60A;}
  .scan-focus{
    position:absolute;width:64px;height:64px;margin:-32px 0 0 -32px;border:2px solid #FFD60A;border-radius:10px;
    pointer-events:none;animation:scanFocus .7s ease-out forwards;
  }
  @keyframes scanFocus{0%{transform:scale(1.3);opacity:0;}30%{transform:scale(1);opacity:1;}100%{opacity:0;}}
  @media (prefers-reduced-motion: reduce){ .scan-line{animation:none;} }
  .photo-log-preview{width:100%;border-radius:var(--radius-md);margin-bottom:12px;max-height:260px;object-fit:cover;display:block;}
  .log-weight-row{display:flex;gap:8px;align-items:stretch;}
  .log-weight-row .input-suffix{flex:1;}
  .log-weight-row .btn{min-height:var(--control-h);}
  .list-group .row-btn + .progress-row::before{content:'';position:absolute;top:0;left:16px;right:0;height:.5px;background:var(--separator);}
  .add-ex-btn svg{width:17px;height:17px;stroke:currentColor;fill:none;stroke-width:2.4;flex-shrink:0;}
  .add-ex-btn{display:flex;align-items:center;justify-content:center;gap:6px;}
  .ex-row-head{margin-bottom:4px;}
  .ex-row-head span{font-size:var(--fs-footnote);font-weight:600;color:var(--text-muted);padding:0 2px;}
  .ex-row-head .ex-row-spacer{width:32px;flex-shrink:0;padding:0;}
  .card.builder-day + .card.builder-day{margin-top:0;}
.rep-chips{flex-wrap:nowrap;gap:6px;margin-top:10px;}
.rep-chips .chip{flex:1 1 0;min-width:0;padding:0 4px;font-size:var(--fs-footnote);}
.rep-chips .chip:last-child{flex-grow:1.35;}
.macro-stats{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-top:12px;}
.macro-stats > div{background:var(--surface-2);border-radius:var(--radius-sm);padding:10px 6px;text-align:center;}
.macro-stats .n{display:block;font-family:var(--font-mono);font-weight:600;font-size:var(--fs-headline);font-variant-numeric:tabular-nums;}
.macro-stats .l{display:block;font-size:var(--fs-footnote);color:var(--text-muted);margin-top:2px;}
/* Alerts: keep short button labels on one line */
.modal-overlay.alert .btn{white-space:nowrap;padding-left:10px;padding-right:10px;}
/* Option tiles in sheets (day-swap workout types / volume) */
.opt-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px;}
.opt-grid.three{grid-template-columns:repeat(3,1fr);}
.opt-grid .picker-opt{text-align:center;padding:10px 8px;min-height:46px;line-height:1.2;}
.opt-sub{display:block;font-size:var(--fs-footnote);font-weight:500;color:var(--text-muted);margin-top:2px;}
.picker-opt.selected .opt-sub{color:var(--accent-text);}
/* Labelled switch row */
.switch-row{
  display:flex;align-items:center;justify-content:space-between;gap:12px;width:100%;
  min-height:50px;margin-top:12px;padding:8px 12px 8px 14px;border:none;border-radius:var(--radius-md);
  background:var(--surface-2);color:var(--text);font-family:inherit;font-size:var(--fs-subhead);font-weight:600;
  text-align:left;cursor:pointer;
}
.switch-row .switch{flex-shrink:0;}
/* Food search: quick actions + stable sheet height while typing */
.food-search-card{height:min(660px, calc(var(--vv-height, 100dvh) - env(safe-area-inset-top) - 40px));}
.quick-actions{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin:12px 0 14px;}
.quick-actions button{
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:5px;
  min-height:64px;padding:8px 4px;border:none;border-radius:var(--radius-md);
  background:var(--accent-tint);color:var(--accent-text);font-family:inherit;font-size:var(--fs-footnote);font-weight:600;cursor:pointer;
}
.quick-actions button:active{opacity:.7;}
.quick-actions svg{width:22px;height:22px;stroke:currentColor;fill:none;stroke-width:1.8;}
/* Survey: keep the Continue button in reach on long multi-select questions */
.survey-foot{
  position:sticky;bottom:0;z-index:2;
  margin-left:calc(-1 * var(--page-x));margin-right:calc(-1 * var(--page-x));
  padding:14px var(--page-x) max(12px, env(safe-area-inset-bottom));
  background:linear-gradient(to bottom, rgba(0,0,0,0), var(--bg) 18px);
}
/* Auth: center the form in the screen like a native sign-in, sitting slightly above middle */
#auth-root .screen.no-nav{display:flex;flex-direction:column;min-height:100dvh;padding-bottom:calc(env(safe-area-inset-bottom) + 6vh);}
#auth-root .screen.no-nav > .auth-hero{margin-top:auto;padding-top:12px;}
#auth-root .screen.no-nav > :last-child{margin-bottom:auto;}
/* iOS renders date values centered and collapses an empty date field — keep it left-aligned and full height */
input[type=date].field-input{display:block;text-align:left;line-height:22px;}
input[type=date].field-input::-webkit-date-and-time-value{text-align:left;}
/* Typing on a phone: the tab bar steps aside for the keyboard (see KEYBOARD_INPUT_SEL in app.js) */
body.keyboard-open .tabbar{display:none;}
body.keyboard-open .screen{padding-bottom:12px;}
body.keyboard-open .ai-page-card{height:calc(100dvh - env(safe-area-inset-top) - env(safe-area-inset-bottom) - 150px);}
/* Sheets follow the visible area, so with the iOS keyboard up they sit right on top of it */
.modal-overlay{inset:auto 0;top:var(--vv-top, 0px);height:var(--vv-height, 100%);}
.modal-card{max-height:calc(var(--vv-height, 100dvh) - env(safe-area-inset-top) - 12px);}
body.keyboard-open .modal-overlay:not(.alert) .modal-card{padding-bottom:16px;}
/* iOS clips fixed layers to the visible area, so page content would peek through the
   keyboard's translucent toolbar below a sheet. While typing in a sheet, hide the page behind
   it and let the sheet's own color fill that strip instead. */
body.keyboard-open:has(.modal-overlay:not(.alert)) .screen,
body.keyboard-open:has(.modal-overlay:not(.alert)) .tabbar{visibility:hidden;}
html:has(body.keyboard-open .modal-overlay:not(.alert)),
body.keyboard-open:has(.modal-overlay:not(.alert)){background:var(--surface);}

/* ============ ACCENT GLOW ============
   The brand blue carries a soft light of its own: primary buttons, the active tab, the
   streak, today's markers, progress, charts and selected controls all glow slightly. */
.btn-primary{
  background:linear-gradient(180deg, var(--accent-hi), var(--accent-fill));
  box-shadow:0 10px 24px -10px var(--accent-glow), 0 3px 8px -3px var(--accent-glow), inset 0 1px 0 rgba(255,255,255,.22);
}
.btn-primary:disabled{box-shadow:none;}
.btn-primary[style*="--danger"]{background:var(--danger);box-shadow:0 10px 24px -10px var(--danger-glow), 0 3px 8px -3px var(--danger-glow);}   /* destructive confirm glows red, not blue */

.tab.active svg{filter:drop-shadow(0 0 8px var(--accent-glow)) drop-shadow(0 0 2px var(--accent-glow-soft));}
/* while sliding, the glow moves to the tab under the finger */
.tabbar.sliding .tab.active svg{filter:none;stroke-width:1.8;}
.tabbar.sliding .tab.over svg{filter:drop-shadow(0 0 8px var(--accent-glow)) drop-shadow(0 0 2px var(--accent-glow-soft));stroke-width:2.1;}
@media (prefers-reduced-motion: reduce){ .tab-pill{transition:none;} }

.streak-num{text-shadow:0 0 28px var(--accent-glow), 0 0 10px var(--accent-glow-soft);}
.flame{filter:drop-shadow(0 0 9px var(--accent-glow));}
.onb-hero .display-num,.auth-hero .display-num{text-shadow:0 0 28px var(--accent-glow);}
.today-card:not(.rest){box-shadow:var(--shadow-card), 0 0 0 1px var(--accent-tint), 0 14px 34px -16px var(--accent-glow);}

.day-pip.today{box-shadow:0 0 0 2px var(--accent) inset, 0 0 12px var(--accent-glow);}
.week-day.today .dl{text-shadow:0 0 10px var(--accent-glow);}
.cal-cell.today{box-shadow:0 0 0 2px var(--accent) inset, 0 0 16px var(--accent-glow);}
.cal-cell.today.done{box-shadow:0 0 0 2px var(--accent) inset, 0 0 0 4px var(--surface) inset, 0 0 16px var(--accent-glow);}
.cal-cell .dot{box-shadow:0 0 6px var(--accent-glow);}

.progress-track,.macro-bar-track{overflow:visible;}
.progress-fill{background:linear-gradient(90deg, var(--accent), var(--accent-hi));box-shadow:0 0 10px var(--accent-glow);}
.ring-arc{filter:drop-shadow(0 0 8px var(--accent-glow));}
.ring-arc.over{filter:drop-shadow(0 0 8px var(--danger-glow));}
.chart-line{filter:drop-shadow(0 4px 7px var(--accent-glow));}

.chip.selected,.day-check.on,.bodymap-tag:not(.secondary),.ai-msg.user{box-shadow:0 6px 16px -6px var(--accent-glow);}
.segmented button.on,.seg .chip.selected,.target-toggle .chip.selected,.chart-mode-toggle .chip.selected{
  box-shadow:0 1px 3px rgba(0,0,0,.12), 0 0 0 .5px rgba(0,0,0,.04), 0 4px 14px -5px var(--accent-glow);
}
.opt.selected{box-shadow:0 0 0 2px var(--accent), 0 8px 22px -10px var(--accent-glow);}
.picker-opt.selected{box-shadow:0 0 0 1.5px var(--accent) inset, 0 8px 20px -10px var(--accent-glow);}
.choice-card.emph{box-shadow:0 0 0 2px var(--accent), 0 10px 26px -12px var(--accent-glow), var(--shadow-card);}
.link-btn.pill,.quick-actions button,.qty-stepper .iconbtn,.btn-tinted,.add-ex-btn{box-shadow:inset 0 0 0 1px var(--accent-glow-soft);}
.meal-section .add-ex-btn{box-shadow:none;}
.lock-btn:not(.locked):not(:disabled){box-shadow:inset 0 0 0 1px var(--accent-glow-soft), 0 6px 18px -10px var(--accent-glow);}
.field-input:focus,.ex-field input:focus{box-shadow:0 0 0 3px var(--accent-tint), 0 0 16px -4px var(--accent-glow);}
.home-links .card svg,.ai-empty svg{filter:drop-shadow(0 0 5px var(--accent-glow-soft));}

/* ---- Every other color glows the same way the blue does: green (done), red (missed /
   destructive), amber (fat) and violet (protein). */
.macro-bar-fill.protein{box-shadow:0 0 10px var(--protein-glow);}
.macro-bar-fill.carbs{box-shadow:0 0 10px var(--carbs-glow, var(--success-glow));}
.macro-bar-fill.fat{box-shadow:0 0 10px var(--fat-glow, var(--warning-glow));}

.cal-cell.done{box-shadow:0 0 14px -2px var(--success-glow);}
.cal-cell.today.done{box-shadow:0 0 0 2px var(--accent) inset, 0 0 0 4px var(--surface) inset, 0 0 16px var(--accent-glow);}
.cal-cell.missed{box-shadow:0 0 0 1px var(--danger-glow) inset, 0 0 12px -3px var(--danger-glow);}
.day-pip.done{box-shadow:0 0 10px -1px var(--success-glow);}
.day-pip.missed{box-shadow:0 0 0 1px var(--danger) inset, 0 0 10px -1px var(--danger-glow);}

.switch.on{box-shadow:0 0 14px -3px var(--success-glow);}
.ex-check.on{box-shadow:0 0 12px -2px var(--success-glow);}
.ex-card.done{box-shadow:0 0 0 1.5px var(--success), 0 14px 34px -16px var(--success-glow), var(--shadow-card);}
.ai-proposal-card{box-shadow:0 0 0 1.5px var(--success), 0 14px 34px -16px var(--success-glow), var(--shadow-card);}
.progress-delta.up{text-shadow:0 0 10px var(--success-glow);}
.progress-delta.down{text-shadow:0 0 10px var(--danger-glow);}
.auth-notice{box-shadow:inset 0 0 0 1px var(--success-glow);}

.row-btn.danger .t{text-shadow:0 0 12px var(--danger-glow);}
.ex-row button{box-shadow:0 0 10px -3px var(--danger-glow);}
.survey-error,.auth-error{text-shadow:0 0 10px var(--danger-glow);}
.auth-error{box-shadow:inset 0 0 0 1px var(--danger-glow);}

/* ============ PULL TO REFRESH ============
   app.js drives --ptr-y (how far the content is lowered) and --ptr-p (0→1 progress toward the
   trigger). The screen moves with `translate`, which stacks with its own entrance animation.
   The space it leaves fills with a solid brand-blue panel (reaching up under the status bar),
   and the streak flame rises into view at the panel's bottom edge, in white. */
body.ptr-on .screen{translate:0 var(--ptr-y, 0px);}
/* the ease back: the page and the bar share one duration and curve (PTR_SETTLE_MS in app.js),
   so they travel together */
body.ptr-anim .screen{transition:translate .42s cubic-bezier(.2,.9,.25,1);}
.ptr{
  /* absolute, not fixed: a pull only ever starts at the very top of the page, where the two
     look the same, and Safari won't mistake it for a toolbar and tint its status bar blue */
  position:absolute;left:0;right:0;top:0;z-index:45;
  /* the gap above the lowered content, plus the status-bar strip, grown in with the pull
     so the blue never jumps in all at once */
  height:calc(var(--ptr-y, 0px) + env(safe-area-inset-top) * var(--ptr-p, 0));
  display:none;flex-direction:column;align-items:center;justify-content:flex-end;
  overflow:hidden; /* no padding: at a pull of 0 the bar is truly 0px tall, not a leftover strip */
  background:linear-gradient(180deg, var(--accent-hi), var(--accent-fill));
  /* the glow grows and fades with the pull, so none is left hanging below a closed bar */
  box-shadow:0 calc(8px * var(--ptr-p, 0)) calc(26px * var(--ptr-p, 0)) calc(-8px * var(--ptr-p, 0)) var(--accent-glow);
  pointer-events:none;
}
body.ptr-on .ptr{display:flex;}
body.ptr-anim .ptr{transition:height .42s cubic-bezier(.2,.9,.25,1), box-shadow .42s cubic-bezier(.2,.9,.25,1);}
.ptr-logo{
  width:38px;height:38px;flex-shrink:0;margin-bottom:8px;
  opacity:calc(.35 + .65 * var(--ptr-p, 0));
  transform:scale(calc(.55 + .45 * var(--ptr-p, 0))) rotate(calc((1 - var(--ptr-p, 0)) * -24deg));
  transform-origin:50% 100%;
}
body.ptr-anim .ptr-logo{transition:opacity .3s ease, transform .35s cubic-bezier(.2,.9,.25,1);}
.ptr-logo .flame{width:100%;height:100%;filter:drop-shadow(0 0 calc(3px + 7px * var(--ptr-p, 0)) rgba(255,255,255,.55));}
body.ptr-anim .ptr-logo .flame{transition:filter .35s ease;}
.ptr-logo .flame path{
  /* outlined while pulling (stroke width is in the logo's 1254-unit drawing space) */
  stroke:var(--accent-ink);stroke-width:44px;stroke-linejoin:round;fill:var(--accent-ink);
  fill-opacity:calc(.12 + .38 * var(--ptr-p, 0));transition:fill-opacity .2s ease;
}
/* Past the trigger: the flame fills in and pops, so you know letting go will refresh */
.ptr.armed .ptr-logo{animation:ptrPop .28s cubic-bezier(.3,1.6,.5,1);}
.ptr.armed .ptr-logo .flame path,
.ptr.refreshing .ptr-logo .flame path{fill-opacity:.95;}
/* Refreshing: the flame flickers and its glow breathes */
.ptr.refreshing .ptr-logo{animation:ptrFlicker .9s ease-in-out infinite;}
.ptr.refreshing .ptr-logo .flame{animation:ptrGlow 1.2s ease-in-out infinite;}
@keyframes ptrPop{0%{scale:1;}45%{scale:1.2;}100%{scale:1;}}
@keyframes ptrFlicker{
  0%,100%{transform:scale(1) rotate(-3deg);}
  25%{transform:scale(1.1,1.04) rotate(4deg) translateY(-1px);}
  50%{transform:scale(.96,1.07) rotate(-2deg);}
  75%{transform:scale(1.07,.98) rotate(3deg) translateY(-1px);}
}
@keyframes ptrGlow{
  0%,100%{filter:drop-shadow(0 0 6px rgba(255,255,255,.5));}
  50%{filter:drop-shadow(0 0 16px rgba(255,255,255,.85)) drop-shadow(0 0 3px rgba(255,255,255,.6));}
}
@media (prefers-reduced-motion: reduce){
  .ptr.armed .ptr-logo{animation:none;}
  .ptr.refreshing .ptr-logo{animation:ptrFade 1.2s ease-in-out infinite;}
  @keyframes ptrFade{0%,100%{opacity:1;}50%{opacity:.45;}}
}

/* ============ SCHEDULE & MOVED WORKOUTS ============ */
.sheet-sub{font-size:var(--fs-secondary);color:var(--text-muted);margin:0 0 14px;line-height:1.45;}
.sheet-note{font-size:var(--fs-footnote);color:var(--text-muted);margin:12px 2px 0;line-height:1.45;}
/* Change training days: one inset list, a day picked up glows blue, the rest invite a drop */
.sched-list{border-radius:var(--radius-md);background:var(--surface-2);overflow:hidden;}
.sched-row{
  display:flex;align-items:center;gap:12px;width:100%;min-height:56px;padding:8px 14px;
  border:none;background:transparent;color:var(--text);font-family:inherit;text-align:left;cursor:pointer;
  position:relative;transition:background .15s;
}
.sched-row + .sched-row::before{content:'';position:absolute;top:0;left:14px;right:0;height:.5px;background:var(--separator);}
.sched-row:active{background:var(--fill);}
.sched-dow{width:92px;flex-shrink:0;font-size:var(--fs-subhead);font-weight:700;}
.sched-day{flex:1;min-width:0;display:flex;flex-direction:column;}
.sched-day .t{font-size:var(--fs-subhead);font-weight:600;}
.sched-day .d{font-size:var(--fs-footnote);color:var(--text-muted);margin-top:1px;}
.sched-row.workout .sched-day .t{color:var(--accent-text);}
.sched-row.rest .sched-day .t{color:var(--text-muted);}
.sched-hint{font-size:var(--fs-caption);font-weight:700;color:var(--accent-text);white-space:nowrap;}
.sched-row.selected{background:var(--accent-tint);box-shadow:inset 3px 0 0 var(--accent), 0 0 18px -6px var(--accent-glow);}
.sched-list.picking .sched-row:not(.selected) .sched-hint{opacity:.8;}
/* Move to a rest day */
.move-options{display:flex;flex-direction:column;gap:8px;margin-top:6px;}
.move-options .picker-opt{display:flex;flex-direction:column;gap:2px;}
.warn-note{
  display:flex;gap:10px;align-items:flex-start;margin-top:14px;padding:12px 14px;border-radius:var(--radius-md);
  background:rgba(192,138,34,.12);color:var(--text);font-size:var(--fs-secondary);line-height:1.45;
  box-shadow:inset 0 0 0 1px var(--warning-glow), 0 0 16px -8px var(--warning-glow);
}
.warn-note svg{width:18px;height:18px;flex-shrink:0;stroke:var(--warning);fill:none;stroke-width:2;margin-top:1px;}
.warn-note strong{color:var(--warning);}
.moved-note{font-size:var(--fs-secondary);color:var(--text-muted);text-align:center;margin:10px 0 0;}
.moved-note.lift{margin:-6px 0 14px;}
.move-link{display:flex;width:100%;margin-top:6px;font-size:var(--fs-footnote);}

/* ============ STREAK HELP ============ */
.streak-label{display:flex;align-items:center;gap:6px;}
.streak-help-btn{
  width:22px;height:22px;border-radius:50%;padding:0;flex-shrink:0;cursor:pointer;
  display:inline-flex;align-items:center;justify-content:center;
  background:var(--accent-tint);border:none;color:var(--accent-text);
  font-family:var(--font-body);font-size:12px;font-weight:800;letter-spacing:0;line-height:1;
  box-shadow:inset 0 0 0 1px var(--accent-glow-soft);
  position:relative;
}
.streak-help-btn::after{content:'';position:absolute;inset:-11px;}   /* 44pt tap target */
.streak-help-btn:active{opacity:.6;}
.help-list{display:flex;flex-direction:column;border-radius:var(--radius-md);background:var(--surface-2);overflow:hidden;}
.help-row{display:flex;gap:12px;align-items:flex-start;padding:12px 14px;position:relative;}
.help-row + .help-row::before{content:'';position:absolute;top:0;left:54px;right:0;height:.5px;background:var(--separator);}
.help-icon{
  width:28px;height:28px;border-radius:8px;flex-shrink:0;display:flex;align-items:center;justify-content:center;
  background:var(--accent-tint);color:var(--accent-text);
}
.help-icon svg{width:17px;height:17px;stroke:currentColor;fill:none;stroke-width:2;}
.help-icon svg.flame{width:18px;height:18px;filter:none;}
.help-row .t{font-size:var(--fs-subhead);font-weight:700;}
.help-row .d{font-size:var(--fs-secondary);color:var(--text-muted);line-height:1.45;margin-top:2px;}

/* ============ WORKOUT COMPLETE CELEBRATION ============ */
.celebrate-overlay{background:rgba(6,10,30,.62);overflow:hidden;}
.celebrate-card{
  max-width:350px !important;text-align:center;padding:28px 20px 20px !important;position:relative;overflow:visible;
  background:
    radial-gradient(120% 70% at 50% 0%, var(--accent-tint), transparent 70%),
    var(--surface);
  box-shadow:0 0 0 1px var(--accent-glow-soft), 0 24px 60px -18px var(--accent-glow), 0 12px 40px rgba(0,0,0,.35);
  animation:celebrateIn .55s cubic-bezier(.2,1.4,.4,1) both !important;
}
.celebrate-flame{position:relative;width:96px;height:96px;margin:-4px auto 0;}
.celebrate-flame .flame{
  width:96px;height:96px;
  filter:drop-shadow(0 0 16px var(--accent-glow)) drop-shadow(0 0 4px var(--accent-glow-soft));
  animation:celebrateFlame 1.8s ease-in-out infinite .55s;
}
.celebrate-flame .flame path{fill-opacity:.9;}
.celebrate-flame .n{
  position:absolute;left:0;right:0;bottom:12px;font-size:40px;color:var(--accent-ink);
  text-shadow:0 2px 10px rgba(0,0,0,.25);
  animation:celebrateCount .5s cubic-bezier(.2,1.5,.4,1) both .35s;
}
.celebrate-kicker{font-size:var(--fs-caption);font-weight:800;letter-spacing:.08em;text-transform:uppercase;color:var(--accent-text);margin-top:4px;}
.celebrate-title{font-size:42px;margin:10px 0 6px;color:var(--text);text-shadow:0 0 22px var(--accent-glow-soft);}
.celebrate-sub{font-size:var(--fs-subhead);color:var(--text-muted);margin:0;}
.celebrate-badge{
  display:inline-block;margin-top:12px;padding:6px 14px;border-radius:var(--radius-pill);
  background:linear-gradient(180deg, #F5C451, var(--warning));color:#2A1D00;
  font-size:var(--fs-footnote);font-weight:800;letter-spacing:.02em;
  box-shadow:0 6px 18px -6px var(--warning-glow);
  animation:celebrateCount .5s cubic-bezier(.2,1.5,.4,1) both .55s;
}
.celebrate-stats{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin:16px 0 0;}
.celebrate-stats > div{background:var(--surface-2);border-radius:var(--radius-md);padding:10px 4px;}
.celebrate-stats .n{display:block;font-family:var(--font-mono);font-weight:600;font-size:22px;color:var(--accent-text);}
.celebrate-stats .pr .n{color:var(--success);text-shadow:0 0 12px var(--success-glow);}
.celebrate-stats .l{display:block;font-size:var(--fs-footnote);color:var(--text-muted);margin-top:2px;}
.celebrate-prs{list-style:none;margin:10px 0 0;padding:0;text-align:left;border-radius:var(--radius-md);background:var(--success-bg);}
.celebrate-prs li{display:flex;align-items:center;gap:10px;padding:8px 12px;font-size:var(--fs-footnote);}
.celebrate-prs li + li{border-top:.5px solid var(--separator);}
.celebrate-prs span{flex:1;min-width:0;text-align:left;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.celebrate-prs strong{color:var(--success);white-space:nowrap;}
.celebrate-prs small{margin-left:-4px;font-size:var(--fs-caption);color:var(--text-muted);white-space:nowrap;}
.celebrate-prs li::before{content:'PR';flex-shrink:0;font-size:10px;font-weight:800;color:var(--success-ink);background:var(--success);border-radius:4px;padding:1px 4px;}
.celebrate-note{font-size:var(--fs-secondary);color:var(--text-muted);line-height:1.5;margin:14px 0 16px;}
.celebrate-note strong{color:var(--text);}
/* Confetti: pieces fall from above the card across the whole screen */
.confetti{position:absolute;inset:0;pointer-events:none;overflow:hidden;}
.confetti i{
  position:absolute;top:-24px;left:var(--x);width:8px;height:13px;border-radius:2px;opacity:0;
  animation:confettiFall var(--dur) cubic-bezier(.25,.6,.4,1) var(--delay) forwards;
}
.confetti i.round{width:9px;height:9px;border-radius:50%;}
@keyframes confettiFall{
  0%{opacity:1;transform:translate(0,0) rotate(0);}
  85%{opacity:1;}
  100%{opacity:0;transform:translate(var(--drift), 105vh) rotate(var(--spin));}
}
@keyframes celebrateIn{from{opacity:0;transform:scale(.7) translateY(24px);}to{opacity:1;transform:none;}}
@keyframes celebrateCount{from{opacity:0;transform:scale(.4);}to{opacity:1;transform:none;}}
@keyframes celebrateFlame{
  0%,100%{transform:scale(1) rotate(-2deg);}
  50%{transform:scale(1.06) rotate(2deg);}
}
@media (prefers-reduced-motion: reduce){
  .confetti{display:none;}
  .celebrate-card,.celebrate-flame .flame,.celebrate-flame .n,.celebrate-badge{animation:none !important;}
}

/* Dark mode: the pill gets a faint light edge so it separates from the dark page */
:root[data-theme="dark"] .tabbar{box-shadow:0 10px 30px -6px rgba(0,0,0,.6), 0 2px 6px rgba(0,0,0,.3), inset 0 0 0 .5px rgba(255,255,255,.10);}
@media (prefers-color-scheme: dark){
  :root:not([data-theme="light"]) .tabbar{box-shadow:0 10px 30px -6px rgba(0,0,0,.6), 0 2px 6px rgba(0,0,0,.3), inset 0 0 0 .5px rgba(255,255,255,.10);}
}

/* ============ REPS IN RESERVE ============ */
.ex-inputs .ex-field:first-child{flex:2;}     /* the weight stepper keeps its room; reps and RIR share the rest */
.ex-inputs.no-weight .ex-field:first-child{flex:1;} /* reps-only lifts: reps and RIR split the row */
.ex-label{display:flex;align-items:center;gap:4px;font-size:var(--fs-footnote);font-weight:600;color:var(--text-muted);margin:0 2px 6px;line-height:1.2;}
.rir-field input::placeholder{color:var(--text-3);}
/* "RIR ?" over "(optional)": two short lines fit the narrow RIR column on every phone */
.ex-label.rir-label{display:block;}
.rir-label > span:first-child{display:flex;align-items:center;gap:4px;}
.ex-label-opt{display:block;margin-top:1px;font-weight:500;}
/* A logged lift folds down to a summary of the set, with Edit and History */
.ex-card.compact .ex-card-head{margin-bottom:10px;}
.logged-summary{display:flex;align-items:center;gap:12px;padding:10px 12px 4px 14px;border-radius:var(--radius-md);background:var(--success-bg);}
.logged-set{flex:1;min-width:0;}
.logged-what{font-size:var(--fs-caption);font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--success);}
.logged-value{margin-top:2px;font-size:var(--fs-subhead);font-weight:800;color:var(--text);font-variant-numeric:tabular-nums;line-height:1.3;}
.logged-value .nw{white-space:nowrap;}
.logged-rir{font-weight:600;color:var(--text-muted);}
.logged-set .rec-link{min-height:34px;margin-left:-6px;}
.logged-edit{flex:none;align-self:center;margin-bottom:6px;}
.rir-info-btn{
  width:17px;height:17px;border-radius:50%;padding:0;flex-shrink:0;cursor:pointer;position:relative;
  display:inline-flex;align-items:center;justify-content:center;
  background:none;border:1.2px solid var(--text-3);color:var(--text-muted);
  font-family:var(--font-body);font-size:10.5px;font-weight:800;line-height:1;
}
.rir-info-btn::after{content:"";position:absolute;inset:-12px -12px -5px -12px;}   /* small to look at, easy to tap; stops short of the box below */
.rir-info-btn:active{opacity:.5;}
.rir-info{text-align:left !important;}
.rir-info h3{font-size:var(--fs-headline);text-align:center;margin-bottom:8px;}
.rir-info p{font-size:var(--fs-secondary);color:var(--text-muted);line-height:1.5;margin:0;}
.rir-scale{display:flex;flex-direction:column;margin:12px 0;border-radius:var(--radius-md);background:var(--surface-2);overflow:hidden;}
.rir-scale > div{display:flex;align-items:center;gap:12px;padding:9px 12px;font-size:var(--fs-secondary);line-height:1.35;}
.rir-scale > div + div{border-top:.5px solid var(--separator);}
.rir-scale .n{
  min-width:34px;text-align:center;flex-shrink:0;padding:3px 0;border-radius:8px;
  font-family:var(--font-mono);font-weight:600;color:var(--accent-text);background:var(--accent-tint);
}
.rir-top-set{
  display:flex;gap:10px;align-items:flex-start;padding:11px 12px;border-radius:var(--radius-md);
  background:var(--accent-tint);box-shadow:inset 0 0 0 1px var(--accent-glow-soft);
  font-size:var(--fs-secondary);line-height:1.45;color:var(--text);
}
.rir-top-set svg{width:17px;height:17px;flex-shrink:0;stroke:var(--accent);fill:none;stroke-width:2;margin-top:1px;}
.rir-top-set strong{color:var(--accent-text);}
.log-info .rir-scale .n{min-width:40px;font-size:var(--fs-caption);}
.log-info .rir-top-set{margin-bottom:16px;}
.rir-info .rir-optional{text-align:center;margin:12px 0 16px;font-size:var(--fs-footnote);}

/* ============ COLOR THEMES ============
   The tokens at the top are Blue, the default theme (data-accent on <html> in index.html,
   DEFAULT_ACCENT in app.js). Each other theme swaps the accent family —
   text/lines (--accent), solid fills and the text on them (--accent-fill / --accent-ink), the
   gradient top (--accent-hi), soft backgrounds (--accent-tint) and glows — for light and dark.
   Where a macro bar would match the calorie ring, the theme moves that bar to another color.
   Text on the solid fills reaches 4.5:1 everywhere: Blue, Red, Purple and Pink buttons are deep
   enough for white text, while Yellow, Cyan, Green and Orange stay bright with dark text. */
:root[data-accent="red"]{
  --accent:#D41F3A; --accent-text:#BB1B33; --accent-fill:#E0243C; --accent-hi:#DA364C; --accent-ink:#FFFFFF; --accent-tint:rgba(224,36,60,.12);
  --accent-glow:rgba(224,36,60,.50); --accent-glow-soft:rgba(224,36,60,.26);
}
:root[data-accent="red"][data-theme="dark"]{
  --accent:#FF6B7C; --accent-text:#FF8C99; --accent-fill:#DC2F46; --accent-hi:#D7394F; --accent-ink:#FFFFFF; --accent-tint:rgba(255,90,110,.20);
  --accent-glow:rgba(255,80,100,.70); --accent-glow-soft:rgba(255,80,100,.34);
}
:root[data-accent="yellow"]{
  /* yellow text on white is unreadable, so text and lines use a deep gold, while buttons are
     bright yellow with dark text on them */
  --accent:#8C6700; --accent-text:#825F00; --accent-fill:#FFC21A; --accent-hi:#FFD54F; --accent-ink:#2A2000; --accent-tint:rgba(255,194,26,.22);
  --accent-glow:rgba(240,180,0,.55); --accent-glow-soft:rgba(240,180,0,.30);
  --fat:#F97316; --fat-glow:rgba(249,115,22,.45);
}
:root[data-accent="yellow"][data-theme="dark"]{
  --accent:#FFD23F; --accent-text:#FFD23F; --accent-fill:#FFC21A; --accent-hi:#FFD95C; --accent-ink:#2A2000; --accent-tint:rgba(255,210,63,.18);
  --accent-glow:rgba(255,200,40,.60); --accent-glow-soft:rgba(255,200,40,.30);
  --fat:#FB923C; --fat-glow:rgba(251,146,60,.6);
}
:root[data-accent="green"]{
  --accent:#0B8A43; --accent-text:#097137; --accent-fill:#12A150; --accent-hi:#2FBF6B; --accent-ink:#04200D; --accent-tint:rgba(18,161,80,.13);
  --accent-glow:rgba(18,161,80,.48); --accent-glow-soft:rgba(18,161,80,.25);
  --carbs:#0EA5E9; --carbs-glow:rgba(14,165,233,.45);
}
:root[data-accent="green"][data-theme="dark"]{
  --accent:#4ADE80; --accent-text:#4ADE80; --accent-fill:#1C9E57; --accent-hi:#27B868; --accent-ink:#04200D; --accent-tint:rgba(74,222,128,.17);
  --accent-glow:rgba(60,210,120,.62); --accent-glow-soft:rgba(60,210,120,.30);
  --carbs:#38BDF8; --carbs-glow:rgba(56,189,248,.6);
}
:root[data-accent="purple"]{
  --accent:#7A3CF0; --accent-text:#712FEF; --accent-fill:#7A3CF0; --accent-hi:#8751FA; --accent-ink:#FFFFFF; --accent-tint:rgba(122,60,240,.12);
  --accent-glow:rgba(122,60,240,.50); --accent-glow-soft:rgba(122,60,240,.26);
  --protein:#E0457B; --protein-glow:rgba(224,69,123,.45);
}
:root[data-accent="purple"][data-theme="dark"]{
  --accent:#B592FF; --accent-text:#BFA0FF; --accent-fill:#864FFD; --accent-hi:#8951F8; --accent-ink:#FFFFFF; --accent-tint:rgba(160,120,255,.20);
  --accent-glow:rgba(150,110,255,.70); --accent-glow-soft:rgba(150,110,255,.34);
  --protein:#F472B6; --protein-glow:rgba(244,114,182,.6);
}
:root[data-accent="orange"]{
  --accent:#C9540C; --accent-text:#A6460A; --accent-fill:#F26B1D; --accent-hi:#FF8A3D; --accent-ink:#241000; --accent-tint:rgba(242,107,29,.13);
  --accent-glow:rgba(242,107,29,.50); --accent-glow-soft:rgba(242,107,29,.26);
  --fat:#E3B505; --fat-glow:rgba(227,181,5,.45);
}
:root[data-accent="orange"][data-theme="dark"]{
  --accent:#FF9A57; --accent-text:#FF9C5B; --accent-fill:#F2711F; --accent-hi:#FF8A3D; --accent-ink:#241000; --accent-tint:rgba(255,140,60,.20);
  --accent-glow:rgba(255,130,50,.68); --accent-glow-soft:rgba(255,130,50,.34);
  --fat:#FACC15; --fat-glow:rgba(250,204,21,.55);
}
:root[data-accent="cyan"]{
  /* bright cyan text on white is hard to read, so text and lines use a deep teal, while buttons
     are bright cyan with dark text on them (like Yellow) */
  --accent:#0B7A93; --accent-text:#0A6D84; --accent-fill:#12BDDB; --accent-hi:#3FD0EA; --accent-ink:#00262E; --accent-tint:rgba(18,189,219,.15);
  --accent-glow:rgba(18,189,219,.50); --accent-glow-soft:rgba(18,189,219,.27);
}
:root[data-accent="cyan"][data-theme="dark"]{
  --accent:#4FDDF5; --accent-text:#4FDDF5; --accent-fill:#16C3E0; --accent-hi:#3CD3EE; --accent-ink:#00262E; --accent-tint:rgba(60,210,240,.18);
  --accent-glow:rgba(40,205,235,.62); --accent-glow-soft:rgba(40,205,235,.30);
}
:root[data-accent="pink"]{
  --accent:#C81E6E; --accent-text:#BA1C66; --accent-fill:#D5307C; --accent-hi:#D1387D; --accent-ink:#FFFFFF; --accent-tint:rgba(232,62,140,.12);
  --accent-glow:rgba(232,62,140,.50); --accent-glow-soft:rgba(232,62,140,.26);
}
:root[data-accent="pink"][data-theme="dark"]{
  --accent:#FF7AB6; --accent-text:#FF8CC0; --accent-fill:#D33280; --accent-hi:#D23781; --accent-ink:#FFFFFF; --accent-tint:rgba(255,110,170,.20);
  --accent-glow:rgba(255,100,165,.68); --accent-glow-soft:rgba(255,100,165,.34);
}
/* the phone's own dark mode, when the app's switch hasn't been set */
@media (prefers-color-scheme: dark){
  :root[data-accent="cyan"]:not([data-theme="light"]){
    --accent:#4FDDF5; --accent-text:#4FDDF5; --accent-fill:#16C3E0; --accent-hi:#3CD3EE; --accent-ink:#00262E; --accent-tint:rgba(60,210,240,.18);
    --accent-glow:rgba(40,205,235,.62); --accent-glow-soft:rgba(40,205,235,.30);
  }
  :root[data-accent="pink"]:not([data-theme="light"]){
    --accent:#FF7AB6; --accent-text:#FF8CC0; --accent-fill:#D33280; --accent-hi:#D23781; --accent-ink:#FFFFFF; --accent-tint:rgba(255,110,170,.20);
    --accent-glow:rgba(255,100,165,.68); --accent-glow-soft:rgba(255,100,165,.34);
  }
  :root[data-accent="red"]:not([data-theme="light"]){
    --accent:#FF6B7C; --accent-text:#FF8C99; --accent-fill:#DC2F46; --accent-hi:#D7394F; --accent-ink:#FFFFFF; --accent-tint:rgba(255,90,110,.20);
    --accent-glow:rgba(255,80,100,.70); --accent-glow-soft:rgba(255,80,100,.34);
  }
  :root[data-accent="yellow"]:not([data-theme="light"]){
    --accent:#FFD23F; --accent-text:#FFD23F; --accent-fill:#FFC21A; --accent-hi:#FFD95C; --accent-ink:#2A2000; --accent-tint:rgba(255,210,63,.18);
    --accent-glow:rgba(255,200,40,.60); --accent-glow-soft:rgba(255,200,40,.30);
    --fat:#FB923C; --fat-glow:rgba(251,146,60,.6);
  }
  :root[data-accent="green"]:not([data-theme="light"]){
    --accent:#4ADE80; --accent-text:#4ADE80; --accent-fill:#1C9E57; --accent-hi:#27B868; --accent-ink:#04200D; --accent-tint:rgba(74,222,128,.17);
    --accent-glow:rgba(60,210,120,.62); --accent-glow-soft:rgba(60,210,120,.30);
    --carbs:#38BDF8; --carbs-glow:rgba(56,189,248,.6);
  }
  :root[data-accent="purple"]:not([data-theme="light"]){
    --accent:#B592FF; --accent-text:#BFA0FF; --accent-fill:#864FFD; --accent-hi:#8951F8; --accent-ink:#FFFFFF; --accent-tint:rgba(160,120,255,.20);
    --accent-glow:rgba(150,110,255,.70); --accent-glow-soft:rgba(150,110,255,.34);
    --protein:#F472B6; --protein-glow:rgba(244,114,182,.6);
  }
  :root[data-accent="orange"]:not([data-theme="light"]){
    --accent:#FF9A57; --accent-text:#FF9C5B; --accent-fill:#F2711F; --accent-hi:#FF8A3D; --accent-ink:#241000; --accent-tint:rgba(255,140,60,.20);
    --accent-glow:rgba(255,130,50,.68); --accent-glow-soft:rgba(255,130,50,.34);
    --fat:#FACC15; --fat-glow:rgba(250,204,21,.55);
  }
}
/* On the dark-text themes the pull-to-refresh flame is dark, so its halo is dark too */
:root[data-accent="yellow"] .ptr-logo .flame,:root[data-accent="cyan"] .ptr-logo .flame,
:root[data-accent="green"] .ptr-logo .flame,:root[data-accent="orange"] .ptr-logo .flame{filter:drop-shadow(0 0 6px rgba(0,0,0,.18));}

/* Theme color picker (Profile) */
.theme-row{padding:12px 16px 14px;position:relative;}
.theme-row .t{font-size:var(--fs-body);font-weight:500;}
.theme-row + .row-btn::before{content:'';position:absolute;top:0;left:16px;right:0;height:.5px;background:var(--separator);}
.swatches{display:grid;grid-template-columns:repeat(4,1fr);row-gap:14px;column-gap:6px;margin-top:12px;}
.swatch-col{display:flex;flex-direction:column;align-items:center;min-width:0;}
.swatch{
  width:40px;height:40px;border-radius:50%;border:none;padding:0;cursor:pointer;position:relative;
  display:flex;align-items:center;justify-content:center;
  background:var(--sw);box-shadow:0 3px 10px -3px var(--sw), inset 0 0 0 1px rgba(0,0,0,.06);
  -webkit-tap-highlight-color:transparent;transition:transform .15s ease, box-shadow .2s ease;
}
.swatch:active{transform:scale(.9);}
.swatch svg{width:18px;height:18px;stroke:var(--sw-ink);fill:none;stroke-width:3;opacity:0;transition:opacity .15s;}
.swatch.on{box-shadow:0 0 0 2.5px var(--surface), 0 0 0 4.5px var(--sw), 0 4px 16px -2px var(--sw);}
.swatch.on svg{opacity:1;}
.swatch-label{display:block;text-align:center;font-size:12px;font-weight:600;color:var(--text-muted);margin-top:7px;}
.swatch-col.on .swatch-label{color:var(--text);}
/* The celebration's flame carries the streak number, so it's drawn in the solid fill color
   (bright yellow on the Yellow theme) with the matching ink for the number. */
.celebrate-flame .flame path{stroke:var(--accent-fill);fill:var(--accent-fill);}

/* ============ ALL LIFTS (exercise library) ============
   Each muscle group has its own color, used for dots, row bars and filter chips — never for
   text, so even the lighter colors stay readable. */
:root{
  --grp-chest:#E5484D; --grp-back:#2F7BF5; --grp-shoulders:#F59E0B; --grp-arms:#8B5CF6;
  --grp-legs:#10B981; --grp-core:#EC4899; --grp-cardio:#06B6D4; --grp-explosive:#64748B;
}
:root[data-theme="dark"]{
  --grp-chest:#FF6B70; --grp-back:#60A5FA; --grp-shoulders:#FBBF24; --grp-arms:#A78BFA;
  --grp-legs:#34D399; --grp-core:#F472B6; --grp-cardio:#22D3EE; --grp-explosive:#94A3B8;
}
@media (prefers-color-scheme: dark){
  :root:not([data-theme="light"]){
    --grp-chest:#FF6B70; --grp-back:#60A5FA; --grp-shoulders:#FBBF24; --grp-arms:#A78BFA;
    --grp-legs:#34D399; --grp-core:#F472B6; --grp-cardio:#22D3EE; --grp-explosive:#94A3B8;
  }
}
.back-link{padding:0 4px 0 0;margin:-6px 0 4px -4px;min-height:38px;gap:2px;}
.back-link svg{width:20px;height:20px;stroke:currentColor;fill:none;stroke-width:2.2;}
.lib-dot{
  display:inline-block;width:10px;height:10px;border-radius:50%;flex-shrink:0;
  background:var(--grp);box-shadow:0 0 8px var(--grp);
}
.lib-dots{display:flex;gap:3px;margin-left:auto;margin-right:6px;}
.lib-dots i{width:8px;height:8px;border-radius:50%;background:var(--grp);}
.row-btn .lib-dots + svg{margin-left:0;}
.lib-search{margin:4px 0 10px;}
.lib-search::-webkit-search-cancel-button{-webkit-appearance:none;}
.lib-chips{
  display:flex;gap:8px;overflow-x:auto;margin:0 calc(-1 * var(--page-x)) 6px;padding:2px var(--page-x) 8px;
  scrollbar-width:none;-webkit-overflow-scrolling:touch;
}
.lib-chips::-webkit-scrollbar{display:none;}
.lib-chip{
  display:inline-flex;align-items:center;gap:7px;flex-shrink:0;min-height:36px;padding:0 13px;
  border:none;border-radius:var(--radius-pill);background:var(--surface);color:var(--text);
  font-family:inherit;font-size:var(--fs-footnote);font-weight:700;cursor:pointer;
  box-shadow:var(--shadow-card);-webkit-tap-highlight-color:transparent;
}
.lib-chip .n{font-weight:600;color:var(--text-muted);}
.lib-chip.on{box-shadow:inset 0 0 0 2px var(--grp), 0 6px 16px -8px var(--grp);}
.lib-chip:active{transform:scale(.96);}
.lib-section{margin-top:18px;}
.lib-head{
  display:flex;align-items:center;gap:8px;margin:0 4px 8px;
  font-family:var(--font-body);font-size:var(--fs-footnote);font-weight:800;letter-spacing:.05em;text-transform:uppercase;color:var(--text);
}
.lib-head .n{margin-left:auto;font-weight:700;color:var(--text-muted);letter-spacing:0;}
.lib-row{
  position:relative;display:flex;align-items:center;gap:10px;width:100%;min-height:56px;
  padding:9px 14px 9px 20px;border:none;background:none;color:var(--text);text-align:left;font-family:inherit;
}
button.lib-row{cursor:pointer;}
button.lib-row:active{background:var(--fill);}
.lib-row::before{   /* the group color bar */
  content:'';position:absolute;left:0;top:9px;bottom:9px;width:4px;border-radius:0 4px 4px 0;
  background:var(--grp);box-shadow:0 0 10px -1px var(--grp);
}
.lib-row + .lib-row::after{content:'';position:absolute;top:0;left:20px;right:0;height:.5px;background:var(--separator);}
.lib-main{flex:1;min-width:0;}
.lib-main .t{font-size:var(--fs-subhead);font-weight:600;}
.lib-main .d{font-size:var(--fs-footnote);color:var(--text-muted);margin-top:2px;}
.lib-row > svg{width:16px;height:16px;stroke:var(--text-3);fill:none;stroke-width:2;flex-shrink:0;}
.lib-badge{
  flex-shrink:0;font-size:10.5px;font-weight:800;letter-spacing:.02em;padding:3px 8px;border-radius:var(--radius-pill);
  color:var(--text);background:var(--fill);box-shadow:inset 0 0 0 1px var(--grp);
}
.lib-empty{color:var(--text-muted);font-size:var(--fs-subhead);margin-top:14px;}

/* ============ PICKING LIFTS FROM THE LIBRARY ============ */
/* A lift in the plan builder / "Build my own" list: its name with the group's color dot,
   in place of the old free-text box. */
.ex-picked{
  display:flex;align-items:center;gap:8px;min-height:44px;padding:8px 10px;border-radius:var(--radius-md);
  background:var(--surface-2);font-size:var(--fs-footnote);font-weight:600;line-height:1.25;
}
.ex-picked .nm{min-width:0;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;}
.ex-picked .lib-dot{width:8px;height:8px;}
.ex-empty{font-size:var(--fs-secondary);color:var(--text-muted);margin:4px 2px 10px;}
/* the "Add lifts" sheet keeps one height while searching, like food search */
.lift-picker-card{height:min(700px, calc(var(--vv-height, 100dvh) - env(safe-area-inset-top) - 30px));}
.lift-picker-card .lib-section:first-child{margin-top:4px;}
.lib-row.pick{cursor:pointer;}
.lib-row.pick:active{background:var(--fill);}
.lib-row.added{opacity:.55;cursor:default;}
.lib-add{
  width:28px;height:28px;border-radius:50%;flex-shrink:0;display:flex;align-items:center;justify-content:center;
  background:var(--accent-tint);color:var(--accent-text);
}
.lib-add svg{width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:2.6;}
/* swap picker rows for the lift's own muscle carry the group color too */
.picker-lift{display:flex;align-items:center;gap:10px;}
.picker-lift .lib-dot{width:8px;height:8px;}

/* ============ EXERCISE INSTRUCTIONS (tab beside the muscle map) ============ */
/* the small ? beside a lift's name */
.guide-q{
  display:inline-flex;align-items:center;justify-content:center;vertical-align:2px;
  width:17px;height:17px;margin-left:7px;padding:0;border-radius:50%;position:relative;cursor:pointer;
  background:none;border:1.3px solid var(--text-3);color:var(--text-muted);
  font-family:var(--font-body);font-size:10.5px;font-weight:800;line-height:1;letter-spacing:0;
}
.guide-q::after{content:'';position:absolute;inset:-12px;}   /* small to look at, easy to tap */
.guide-q:active{opacity:.5;}
.lib-main .t .guide-q{width:17px;height:17px;font-size:10.5px;vertical-align:1px;position:relative;z-index:2;}
/* an All lifts row with a ?: the whole row still opens the muscle map (an invisible button
   underneath), and the ? sits above it */
.lib-row-split{cursor:pointer;}
.lib-row-split:active{background:var(--fill);}
.lib-row-btn{position:absolute;inset:0;z-index:1;width:100%;border:none;background:none;padding:0;cursor:pointer;-webkit-tap-highlight-color:transparent;}
.guide-art-wrap{margin-top:0;}
.guide-art{display:block;width:100%;height:auto;border-radius:var(--radius-md);}
.guide-h{
  margin:18px 2px 8px;font-size:var(--fs-caption);font-weight:800;letter-spacing:.06em;text-transform:uppercase;color:var(--text-muted);
}
.guide-steps{margin:0;padding:0;list-style:none;counter-reset:step;display:flex;flex-direction:column;gap:10px;}
.guide-steps li{counter-increment:step;display:flex;gap:10px;align-items:flex-start;font-size:var(--fs-subhead);line-height:1.45;}
.guide-steps li::before{
  content:counter(step);flex-shrink:0;width:24px;height:24px;border-radius:50%;margin-top:-1px;
  display:flex;align-items:center;justify-content:center;
  font-size:var(--fs-caption);font-weight:800;background:var(--accent-tint);color:var(--accent-text);
}
.guide-mistakes{margin:0;padding:0;list-style:none;display:flex;flex-direction:column;gap:8px;}
.guide-mistakes li{
  display:flex;gap:10px;align-items:flex-start;padding:10px 12px;border-radius:var(--radius-md);
  background:var(--danger-bg);font-size:var(--fs-secondary);line-height:1.45;color:var(--text);
}
.guide-mistakes svg{width:16px;height:16px;flex-shrink:0;margin-top:1px;stroke:var(--danger);fill:none;stroke-width:2.6;}

/* ============ EQUIPMENT ============
   Group headings in the survey's equipment checklist, and the Profile equipment sheet. */
.opt-group{font-size:var(--fs-caption);font-weight:800;text-transform:uppercase;letter-spacing:.06em;color:var(--text-muted);margin:10px 4px 0;}
.opt-group:first-child{margin-top:0;}
.equip-sub{font-size:var(--fs-secondary);color:var(--text-muted);line-height:1.45;margin:0 0 12px;}
.equip-presets{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:14px;}
.equip-list .opt{min-height:50px;padding:10px 14px;}
.equip-foot{position:sticky;bottom:-1px;display:flex;gap:10px;margin:16px -4px -4px;padding:12px 4px 4px;background:var(--surface);}
.equip-foot .btn{flex:1;}
.equip-tabs{margin:0 0 12px;}
.inc-list{display:flex;flex-direction:column;border-radius:var(--radius-md);background:var(--surface-2);overflow:hidden;}
.inc-row{display:flex;align-items:center;gap:12px;padding:12px 14px;cursor:pointer;}
.inc-row + .inc-row{border-top:.5px solid var(--separator);}
.inc-text{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px;}
.inc-text .opt-label{font-size:var(--fs-body);font-weight:600;}
.inc-select{
  flex:none;min-width:88px;height:40px;padding:0 30px 0 12px;border-radius:var(--radius-sm);border:1px solid var(--border);
  background:var(--surface) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%2385877D' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M7 10l5 5 5-5'/%3E%3C/svg%3E") no-repeat right 8px center/16px;
  color:var(--text);font:600 var(--fs-subhead)/1 var(--font-body);-webkit-appearance:none;appearance:none;cursor:pointer;}
.inc-select:focus-visible{outline:2px solid var(--accent);outline-offset:1px;}

/* ============ REMINDERS (Profile) ============ */
.reminder-times{display:flex;flex-wrap:wrap;gap:8px;margin-top:10px;}

/* ============ TOAST ============
   A brief status pill under the status bar (showToast in app.js). */
.toast{
  position:fixed;z-index:120;left:50%;top:calc(env(safe-area-inset-top) + 10px);
  transform:translate(-50%, -12px);opacity:0;pointer-events:none;
  max-width:calc(100% - 32px);padding:10px 16px;border-radius:var(--radius-pill);
  background:rgba(20,22,28,.92);color:#fff;font-size:var(--fs-footnote);font-weight:600;
  box-shadow:0 8px 24px -6px rgba(0,0,0,.35);
  -webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);
  transition:opacity .25s ease, transform .3s cubic-bezier(.2,.9,.25,1);
}
.toast.show{opacity:1;transform:translate(-50%, 0);}

/* Goals: the calorie estimate learning from logs (renderAdaptiveCalories) */
.adaptive-cal{margin-top:14px;padding-top:6px;border-top:.5px solid var(--separator);}
.adaptive-cal .switch-row{padding-left:0;padding-right:0;background:none;}
.adaptive-cal .card-note{margin:4px 0 0;line-height:1.45;}

/* ============ PLAN: THIS WEEK ============ */
.week-label{display:flex;justify-content:space-between;align-items:baseline;}
.week-label .wk-range{text-transform:none;letter-spacing:0;font-weight:500;color:var(--text-3);}
/* Plan → Change your plan: the row under "Shuffle lifts" that puts the old lifts back */
.shuffle-undo{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:12px 16px;
  background:var(--accent-tint);font-size:var(--fs-footnote);font-weight:600;color:var(--text);}
.shuffle-undo .link-btn{font-weight:700;}
.card-note.vol-short{margin:10px 0 0;padding-top:10px;border-top:.5px solid var(--separator);}
.card-note.floor-note{margin:8px 0 0;}
.week-list .row-btn.week-row{justify-content:flex-start;align-items:center;min-height:60px;padding:10px 14px 10px 12px;}
.week-row .wk-day{display:flex;flex-direction:column;align-items:center;width:40px;flex:none;line-height:1.1;}
.week-row .wk-dow{font-size:var(--fs-caption);font-weight:700;text-transform:uppercase;letter-spacing:.04em;color:var(--text-muted);}
.week-row .wk-date{font-size:20px;font-weight:700;font-variant-numeric:tabular-nums;}
.week-row.today .wk-dow,.week-row.today .wk-date{color:var(--accent);}
.week-row .wk-main{flex:1;min-width:0;}
.week-row.rest .t{color:var(--text-muted);font-weight:500;}
.week-row .wk-lifts{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;}
.week-row .wk-tag{display:inline-block;margin-left:4px;padding:1px 7px;border-radius:var(--radius-pill);background:var(--fill);
  color:var(--text-muted);font-size:var(--fs-caption);font-weight:600;vertical-align:1px;}
.week-row .wk-done{display:flex;align-items:center;justify-content:center;width:24px;height:24px;border-radius:50%;background:var(--success);flex:none;}
.week-row .wk-done svg{width:13px;height:13px;stroke:#fff;fill:none;stroke-width:3;}
.week-row .wk-missed{font-size:var(--fs-caption);font-weight:600;color:var(--danger);flex:none;}
.list-group .row-btn.week-row.today{background:color-mix(in srgb, var(--accent) 6%, transparent);}

/* Add food: notes in the Open Food Facts part of the results (onlineFoodRows in app.js) */
.online-note{font-size:13px;color:var(--text-muted);margin:6px 2px 10px;}
.online-note .online-retry{min-height:36px;margin:-10px 0;padding:0 4px;font-size:13px;font-weight:700;vertical-align:middle;}

/* Warm-up sets on the day's first big lift (warmupSets in app.js) */
.warmup-sets{margin:10px 0 12px;padding:10px 12px;border-radius:var(--radius-md);background:var(--surface-2);}
.ws-head{font-size:var(--fs-caption);font-weight:700;text-transform:uppercase;letter-spacing:.04em;color:var(--text-muted);}
.ws-head span{margin-left:6px;text-transform:none;letter-spacing:0;font-weight:500;color:var(--text-3);}
.ws-list{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px;}
.ws-set{padding:4px 10px;border-radius:var(--radius-pill);background:var(--surface);font-size:var(--fs-footnote);color:var(--text-muted);font-variant-numeric:tabular-nums;}
.ws-set b{color:var(--text);font-weight:700;}
.ws-note{margin:8px 0 0;font-size:var(--fs-footnote);line-height:1.4;color:var(--text-muted);}
.warmup-sets[hidden]{display:none;}

/* ============ DELOAD WEEKS ============
   Banner on Home and My Lift (deloadBanner), the Plan tab card (renderDeloadSettings), the
   deload target on lift cards, and the badge on deload sets in a lift's history. */
.deload-banner{margin:12px 0;padding:12px 14px;border-radius:var(--radius-lg);background:color-mix(in srgb, var(--accent) 9%, var(--surface));
  box-shadow:0 0 0 1px color-mix(in srgb, var(--accent) 25%, transparent) inset;}
.deload-banner .db-head{display:flex;align-items:center;gap:8px;font-size:var(--fs-subhead);}
.deload-banner .db-head svg{width:18px;height:18px;stroke:var(--accent);fill:none;stroke-width:2;}
.deload-banner p{margin:6px 0 0;font-size:var(--fs-footnote);color:var(--text-muted);line-height:1.45;}
.deload-banner .db-actions{display:flex;justify-content:flex-end;margin-top:4px;}
.deload-banner .db-actions .link-btn{font-weight:700;}
.deload-card .card-note{margin:0 0 12px;line-height:1.45;}
.deload-modes{display:flex;flex-wrap:wrap;gap:8px;}
.deload-status{margin:12px 2px;font-size:var(--fs-footnote);color:var(--text-muted);}
.deload-status b{color:var(--text);}
.rec-block.deload .rec-eyebrow{color:var(--accent-text);}
.pr-badge.deload{background:var(--fill);color:var(--text-muted);}

/* ============ REST TIMER ============
   The countdown bar above the tab bar (startRestTimer in app.js), and the "Rest …" chip on lift
   cards that starts it. */
.rest-timer{
  position:fixed;z-index:60;left:50%;bottom:calc(var(--tabbar-bottom) + var(--tabbar-h) + 10px);
  width:calc(100% - 2 * var(--tabbar-inset));max-width:440px;
  transform:translate(-50%, 12px);opacity:0;pointer-events:none;
  border-radius:18px;overflow:hidden;background:rgba(20,22,28,.94);color:#fff;
  box-shadow:0 10px 30px -8px rgba(0,0,0,.45);-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);
  transition:opacity .2s ease, transform .3s cubic-bezier(.2,.9,.25,1);
}
.rest-timer.show{opacity:1;transform:translate(-50%, 0);pointer-events:auto;}
body.keyboard-open .rest-timer{bottom:calc(env(safe-area-inset-bottom) + 10px);}
/* While the bar shows, pages leave room for it above the tab bar, so it never covers the end of
   a page or the AI Trainer's message box. Typing to the AI Trainer, the bar (which moves down to
   the keyboard) would sit on the message box, so it steps aside until the keyboard closes. */
body.rest-timer-on{--tabbar-space:calc(var(--tabbar-h) + var(--tabbar-bottom) + 66px);}
body.keyboard-open:has(.screen-askai) .rest-timer{opacity:0;pointer-events:none;}
.rt-bar{height:3px;background:rgba(255,255,255,.12);}
.rt-bar span{display:block;height:100%;width:0;background:var(--accent);transition:width .25s linear;}
.rest-timer.done .rt-bar span{background:var(--success);}
.rt-row{display:flex;align-items:center;gap:6px;padding:8px 8px 8px 16px;}
.rt-text{flex:1;min-width:0;display:flex;align-items:baseline;gap:10px;}
.rt-label{font-size:var(--fs-footnote);font-weight:600;color:rgba(255,255,255,.7);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.rt-time{font-size:22px;font-weight:600;font-variant-numeric:tabular-nums;margin-left:auto;white-space:nowrap;}
.rest-timer.done .rt-time{font-size:var(--fs-subhead);color:var(--success);}
.rt-btn{flex:none;min-width:44px;height:36px;padding:0 10px;border:0;border-radius:var(--radius-pill);
  background:rgba(255,255,255,.12);color:#fff;font:inherit;font-size:var(--fs-footnote);font-weight:700;cursor:pointer;}
.rt-btn:active{background:rgba(255,255,255,.22);}
.rt-btn[hidden]{display:none;}
.rt-close{min-width:36px;padding:0;display:flex;align-items:center;justify-content:center;}
.rt-close svg{width:13px;height:13px;stroke:currentColor;fill:none;stroke-width:2.6;stroke-linecap:round;}
.plates-line{margin:8px 2px 0;font-size:var(--fs-footnote);color:var(--text-muted);}
.plates-line b{color:var(--text);font-weight:700;font-variant-numeric:tabular-nums;}
.plates-line .plates-near{color:var(--text-3);}
.plates-line:empty{display:none;}
.set-tracker{margin:12px 0 10px;}
/* Log every set: the sets logged so far, and Finish (logEverySet in app.js) */
.set-list{display:flex;flex-direction:column;margin:10px 0 4px;border-radius:var(--radius-md);background:var(--surface-2);overflow:hidden;}
.set-row{display:flex;align-items:center;gap:10px;padding:6px 6px 6px 12px;min-height:42px;}
.set-row + .set-row{border-top:.5px solid var(--separator);}
.set-row .n{width:20px;height:20px;border-radius:50%;background:var(--fill);font-size:var(--fs-caption);font-weight:700;display:flex;align-items:center;justify-content:center;flex:none;color:var(--text-muted);}
.set-row .v{flex:1;min-width:0;font-weight:600;font-variant-numeric:tabular-nums;}
.set-row .v small{font-weight:500;color:var(--text-muted);}
.set-row.top .n{background:var(--accent);color:#fff;}
.top-pill{font-size:var(--fs-caption);font-weight:700;color:var(--accent-text);background:var(--accent-tint);padding:2px 8px;border-radius:var(--radius-pill);flex:none;}
.finish-lift{margin-top:10px;}
.ex-card .set-note{margin:8px 2px 0;}
.logged-all{font-size:var(--fs-footnote);color:var(--text-muted);margin-top:2px;font-variant-numeric:tabular-nums;}
.hist-sets{font-weight:500;color:var(--text-muted);font-size:var(--fs-footnote);}
.set-done-btn{display:flex;align-items:center;justify-content:center;gap:8px;width:100%;min-height:44px;padding:0 14px;
  border:1.5px dashed color-mix(in srgb, var(--accent) 45%, transparent);border-radius:var(--radius-md);background:transparent;
  color:var(--accent-text);font:inherit;font-size:var(--fs-subhead);font-weight:700;cursor:pointer;}
.set-done-btn:active{background:var(--accent-tint);}
.set-done-btn svg,.logged-rest svg{width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:2.2;stroke-linecap:round;flex:none;}
.set-note{margin:6px 2px 0;font-size:var(--fs-footnote);color:var(--text-muted);line-height:1.4;text-align:center;}
.set-note b{color:var(--text);}
.logged-actions{display:flex;gap:8px;align-items:center;flex:none;}
.logged-rest{display:inline-flex;align-items:center;gap:5px;margin-bottom:6px;}

/* ============ SYNC STATUS ============
   Shown while changes are saved on the device but not yet on the server (setSyncStatus in
   app.js). Tapping it retries. Sits under the toast, which is brief. */
.sync-pill{
  position:fixed;z-index:110;left:50%;top:calc(env(safe-area-inset-top) + 10px);
  transform:translate(-50%, -12px);opacity:0;pointer-events:none;
  display:flex;align-items:center;gap:8px;white-space:nowrap;
  max-width:calc(100% - 32px);padding:8px 14px;border:0;border-radius:var(--radius-pill);
  background:rgba(20,22,28,.92);color:#fff;font:inherit;font-size:var(--fs-caption, 12px);font-weight:600;
  box-shadow:0 8px 24px -6px rgba(0,0,0,.35);cursor:pointer;
  -webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);
  transition:opacity .25s ease, transform .3s cubic-bezier(.2,.9,.25,1);
}
.sync-pill.show{opacity:1;transform:translate(-50%, 0);pointer-events:auto;}
.sync-dot{width:8px;height:8px;border-radius:50%;background:#F5A524;flex:none;}

/* ============ WHY THIS TARGET? ============ */
.target-info .target-info-name{text-align:center;margin:-4px 0 12px !important;font-size:var(--fs-footnote) !important;}
.target-rows{display:flex;flex-direction:column;border-radius:var(--radius-md);background:var(--surface-2);overflow:hidden;}
.target-rows > div{display:flex;align-items:baseline;gap:12px;padding:9px 12px;font-size:var(--fs-secondary);line-height:1.35;}
.target-rows > div + div{border-top:.5px solid var(--separator);}
.target-rows .l{flex:none;width:108px;color:var(--text-muted);}
.target-rows .v{flex:1;min-width:0;font-weight:700;color:var(--text);font-variant-numeric:tabular-nums;}
.target-rows .v small{display:block;font-size:var(--fs-footnote);font-weight:500;color:var(--text-muted);margin-top:1px;}
.target-rows .hi{background:var(--accent-tint);}
.target-rows .hi .l{color:var(--accent-text);font-weight:700;}
.target-rule{display:flex;flex-direction:column;gap:4px;margin:10px 0;padding:11px 12px;border-radius:var(--radius-md);
  box-shadow:inset 0 0 0 1px var(--separator);font-size:var(--fs-secondary);line-height:1.45;color:var(--text-muted);}
.target-rule strong{color:var(--text);font-size:var(--fs-subhead);}
.target-info .target-note{margin:10px 2px 0;font-size:var(--fs-footnote);}
.target-actions{display:flex;gap:10px;margin-top:16px;}
.target-actions .btn{flex:1;}

/* ============ EXERCISE HISTORY: LOGGED TOP SETS ============ */
.hist-head{display:flex;justify-content:space-between;align-items:baseline;margin:18px 2px 6px;
  font-size:var(--fs-caption);font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--text-muted);}
.hist-head span + span{text-transform:none;letter-spacing:0;font-weight:600;}
.hist-list{border-radius:var(--radius-md);background:var(--surface-2);overflow:hidden;}
.hist-row{display:flex;align-items:center;gap:12px;padding:10px 12px;}
.hist-row + .hist-row{border-top:.5px solid var(--separator);}
.hist-date{flex:none;width:52px;display:flex;flex-direction:column;line-height:1.2;}
.hist-date b{font-size:var(--fs-secondary);font-weight:700;color:var(--text);}
.hist-date span{font-size:var(--fs-footnote);color:var(--text-muted);}
.hist-main{flex:1;min-width:0;}
.hist-set{font-size:var(--fs-subhead);font-weight:700;color:var(--text);font-variant-numeric:tabular-nums;}
.hist-target{margin-top:2px;font-size:var(--fs-footnote);color:var(--text-muted);font-variant-numeric:tabular-nums;}
.hist-target .hit{display:inline-flex;align-items:center;gap:2px;margin-left:4px;font-weight:700;color:var(--success);}
.hist-target .hit svg{width:12px;height:12px;stroke:currentColor;fill:none;stroke-width:3;}
.pr-badge{flex:none;padding:3px 8px;border-radius:var(--radius-pill);background:var(--success-bg);color:var(--success);
  font-size:var(--fs-caption);font-weight:800;letter-spacing:.02em;white-space:nowrap;}
.hist-more{display:flex;margin:4px auto 0;}

/* ============ SWAP SUGGESTIONS ============ */
.swap-opt{align-items:flex-start;}
.swap-opt .lib-dot{margin-top:6px;}
.swap-opt-text{display:flex;flex-direction:column;gap:2px;min-width:0;}
.swap-opt-sub{font-size:var(--fs-footnote);font-weight:500;line-height:1.35;color:var(--text-muted);}
.swap-opt.unavailable > .swap-opt-text > span:first-child{color:var(--text-muted);}
.row-btn.disabled{cursor:default;}
.row-btn.disabled .t{color:var(--text-muted);}
.row-btn.disabled:active{background:transparent;}

/* ============ ADJUST TODAY'S WORKOUT ============ */
.adjust-sheet h3{margin:0 0 6px;}
.adjust-sheet .adjust-kinds{margin:0 0 4px;}
.adjust-sheet .section-label{margin:16px 2px 8px;}
.adjust-chips{display:flex;flex-wrap:wrap;gap:8px;}
.adjust-custom{display:block;max-width:180px;margin-top:10px;}
.adjust-preview{padding:12px 14px;border-radius:var(--radius-md);background:var(--surface-2);}
.adjust-head{margin:0;font-size:var(--fs-subhead);font-weight:700;color:var(--text);font-variant-numeric:tabular-nums;}
.adjust-changes{list-style:none;margin:8px 0 0;padding:0;display:flex;flex-direction:column;gap:7px;}
.adjust-changes li{display:flex;gap:9px;align-items:flex-start;font-size:var(--fs-secondary);line-height:1.4;color:var(--text);}
.adjust-changes .g{flex:none;width:18px;height:18px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;
  background:var(--fill-strong);color:var(--text-muted);font-weight:800;font-size:13px;line-height:1;margin-top:1px;}
.adjust-changes li.swap .g{background:var(--accent-tint);color:var(--accent-text);}
.adjust-changes small{display:block;font-size:var(--fs-footnote);color:var(--text-muted);margin-top:1px;}
.adjust-kept{display:flex;gap:7px;align-items:flex-start;margin:10px 0 0;font-size:var(--fs-footnote);line-height:1.4;color:var(--text-muted);}
.adjust-kept svg{flex:none;width:14px;height:14px;margin-top:1px;stroke:var(--success);fill:none;stroke-width:3;}
.day-swap-card .section-label:first-of-type{margin-top:4px;}
.day-swap-card .adjust-entry{margin-bottom:0;}

/* ============ NUTRITION: WHAT'S LEFT ============ */
.macro-left{margin-top:4px;font-size:var(--fs-footnote);color:var(--text-muted);font-variant-numeric:tabular-nums;}
.macro-left b{font-weight:700;color:var(--text);}
.macro-left.over b{color:var(--danger);}
.macro-bar-row.protein .macro-bar-label{font-size:var(--fs-subhead);}
.macro-bar-row.protein .macro-bar-label .mono{color:var(--text);font-weight:600;font-size:var(--fs-subhead);}
.macro-bar-row.protein .macro-bar-track{height:9px;}
.macro-bar-row.protein .macro-left{font-size:var(--fs-secondary);}
.macro-bar-row.protein .macro-left b{color:var(--protein-text, var(--protein));}
.macro-bar-row.protein .macro-left.over b{color:var(--danger);}
.nutrition-ask,.weight-ask{grid-column:1 / -1;display:flex;margin:4px auto 0;gap:6px;font-size:var(--fs-subhead);}
.weight-ask{margin-top:14px;}
.nutrition-ask svg,.weight-ask svg,.ai-pill svg,.check-ask svg{width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:1.8;}
.ai-pill{gap:6px;}

/* ============ PROGRESS CHECK ============ */
.check-card{margin:16px 0 0;padding:12px 14px;border-radius:var(--radius-md);background:var(--surface-2);}
.check-head{display:flex;align-items:center;gap:8px;font-size:var(--fs-subhead);}
.check-dot{width:9px;height:9px;border-radius:50%;background:var(--text-3);flex:none;}
.check-card.progressing .check-dot{background:var(--success);}
.check-card.stalled .check-dot{background:var(--warning);}
.check-card p{margin:6px 0 0;font-size:var(--fs-secondary);line-height:1.45;color:var(--text-muted);}
.check-card .check-flags{font-size:var(--fs-footnote);}
.check-pattern{margin-top:10px;border-radius:10px;background:var(--surface);overflow:hidden;}
.check-pattern > div{display:grid;grid-template-columns:52px 1fr auto;gap:8px;padding:7px 10px;font-size:var(--fs-footnote);color:var(--text);font-variant-numeric:tabular-nums;}
.check-pattern > div + div{border-top:.5px solid var(--separator);}
.check-pattern > div > span:first-child{color:var(--text-muted);}
.check-pattern > div > span:last-child{font-weight:700;}
.check-pattern > div.best > span:last-child{color:var(--success);}
.check-ask{margin:6px 0 -6px -6px;gap:6px;font-size:var(--fs-subhead);}

/* ============ ASK AI: SUBJECT, SUGGESTIONS, BEFORE AND AFTER ============ */
.ai-focus-card{flex:none;padding:10px 12px;border-radius:var(--radius-md);background:var(--accent-tint);box-shadow:inset 0 0 0 1px var(--accent-glow-soft);}
.ai-focus-head{display:flex;align-items:center;gap:6px;font-size:var(--fs-subhead);color:var(--text);}
.ai-focus-head > span{font-size:var(--fs-footnote);color:var(--accent-text);font-weight:600;}
.ai-focus-head b{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.ai-focus-head .icon-btn-sm{flex:none;width:28px;height:28px;}
.ai-focus-card p{margin:4px 0 0;font-size:var(--fs-footnote);line-height:1.4;color:var(--text-muted);}
.ai-focus-card .check-pattern{margin-top:8px;}
.ai-suggest{display:flex;gap:8px;overflow-x:auto;padding:2px 2px 10px;margin:0 -2px;scrollbar-width:none;flex:none;}
.ai-suggest::-webkit-scrollbar{display:none;}
.ai-suggest .chip{flex:none;white-space:nowrap;}
.ai-compare{margin-top:10px;border-radius:var(--radius-md);background:var(--surface-2);padding:10px 12px;}
.ai-compare-head{display:flex;justify-content:space-between;align-items:baseline;gap:10px;font-size:var(--fs-secondary);}
.ai-compare-head span{flex:none;font-size:var(--fs-footnote);color:var(--text-muted);font-variant-numeric:tabular-nums;}
.ai-compare-cols{margin:2px 0 4px;font-size:var(--fs-caption);font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--text-muted);}
.ai-compare ul{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;}
.ai-compare li{display:flex;justify-content:space-between;align-items:baseline;gap:10px;padding:5px 0;font-size:var(--fs-secondary);line-height:1.35;color:var(--text);}
.ai-compare li + li{border-top:.5px solid var(--separator);}
.ai-compare li .n{min-width:0;}
.ai-compare li small{display:block;font-size:var(--fs-footnote);color:var(--text-muted);}
.ai-compare li .sr{flex:none;font-variant-numeric:tabular-nums;color:var(--text-muted);}
.ai-compare li s{color:var(--text-3);}
.ai-compare li.change .sr,.ai-compare li.add .sr,.ai-compare li.swap .sr{color:var(--text);font-weight:700;}
.ai-compare li.add small,.ai-compare li.swap small{color:var(--success);font-weight:600;}
.ai-compare li.remove .n{color:var(--text-muted);}
.ai-compare li.remove small{color:var(--danger);font-weight:600;}
.ai-week{margin-top:10px;border-radius:var(--radius-md);background:var(--surface-2);overflow:hidden;}
.ai-week > div{display:flex;align-items:baseline;gap:8px;padding:6px 12px;font-size:var(--fs-secondary);color:var(--text-muted);}
.ai-week > div + div{border-top:.5px solid var(--separator);}
.ai-week .d{flex:none;width:36px;font-weight:700;color:var(--text-muted);}
.ai-week .changed .d,.ai-week .now{color:var(--text);font-weight:700;}
.ai-week .was{text-decoration:line-through;color:var(--text-3);}
.ai-week .arrow{color:var(--text-3);}

/* ============ HOME: START / CONTINUE / COMPLETE ============ */
.today-card .tag.active{background:var(--accent-tint);color:var(--accent-text);}
.today-progress{flex:none;margin:-8px 0 16px;}
.today-card .done-btn{display:flex;align-items:center;justify-content:center;gap:8px;background:var(--success-bg);color:var(--success);}
.today-card .done-btn svg{width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:3;}

/* ============ SAVED MEALS & FOOD PREFERENCES ============ */
.meal-head{gap:10px;}
.meal-head h3{flex:1;min-width:0;}
.meal-save{min-height:32px;padding:0 4px;font-size:var(--fs-footnote);}
.meal-tpl-sheet h3{margin:0 0 6px;}
.meal-tpl-items{display:flex;flex-direction:column;margin-top:12px;border-radius:var(--radius-md);background:var(--surface-2);overflow:hidden;}
.meal-tpl-item{display:flex;align-items:center;gap:10px;padding:10px 10px 10px 12px;}
.meal-tpl-item + .meal-tpl-item{border-top:.5px solid var(--separator);}
.meal-tpl-text{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px;}
.meal-tpl-text b{font-size:var(--fs-subhead);font-weight:600;color:var(--text);}
.meal-tpl-text span{font-size:var(--fs-footnote);color:var(--text-muted);}
.meal-tpl-qty{display:flex;align-items:center;gap:6px;flex:none;}
.meal-tpl-qty .iconbtn{width:34px;height:34px;font-size:19px;font-weight:600;color:var(--accent-text);background:var(--accent-tint);}
.meal-tpl-qty .mono{min-width:38px;text-align:center;font-size:var(--fs-subhead);font-weight:600;}
.meal-tpl-item .icon-btn-sm{flex:none;}
.meal-tpl-total{margin:10px 2px 0;font-size:var(--fs-secondary);font-weight:600;color:var(--text);}
.meal-tpl-delete{display:flex;margin:10px auto 0;color:var(--danger);font-size:var(--fs-footnote);}
.card-note{margin:-4px 0 12px;font-size:var(--fs-secondary);line-height:1.45;color:var(--text-muted);}
.pref-chips .chip[aria-pressed="true"]{font-weight:700;}
.nutrition-ask-row{grid-column:1 / -1;display:flex;flex-wrap:wrap;justify-content:center;column-gap:18px;margin-top:4px;}
.nutrition-ask-row .nutrition-ask{margin:0;}

/* ============ WEIGHT CHART ============ */
.chart-legend{display:flex;flex-wrap:wrap;gap:6px 16px;margin:8px 2px 0;font-size:var(--fs-footnote);color:var(--text-muted);}
.chart-legend span{display:inline-flex;align-items:center;gap:6px;}
.chart-legend i{display:inline-block;flex:none;}
.chart-legend .dot{width:7px;height:7px;border-radius:50%;background:var(--accent);opacity:.5;}
.chart-legend .line{width:16px;height:3px;border-radius:2px;background:var(--accent);}
.chart-legend .dash{width:16px;height:0;border-top:2px dashed var(--text-muted);}
.trend-summary{margin:10px 2px 0;font-size:var(--fs-secondary);line-height:1.45;color:var(--text-muted);}
.trend-summary b{color:var(--text);font-weight:700;}

/* ---- My Lift: focus mode and the ⋯ menu ----
   Lifts still to do, other than the open one, fold to a single tappable row; the workout's
   own actions sit behind the ⋯ next to its name. */
.lift-title-row{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-top:4px;}
.lift-title-row .eyebrow{flex:1;min-width:0;}
.lift-menu-btn{gap:6px;flex-shrink:0;}
.lift-menu-btn svg{fill:currentColor;stroke:none;width:18px;height:18px;}
/* One-time pointer to Options, with a notch aimed up at the button */
.lift-menu-tip{position:relative;display:flex;align-items:center;gap:10px;margin:10px 0 2px;padding:10px 8px 10px 14px;
  border-radius:var(--radius-md);background:var(--accent-tint);color:var(--text);font-size:var(--fs-secondary);line-height:1.4;}
.lift-menu-tip::before{content:"";position:absolute;top:-7px;right:44px;width:14px;height:14px;background:var(--accent-tint);
  transform:rotate(45deg);border-radius:3px 0 0 0;}
.lift-menu-tip span{flex:1;min-width:0;}
.lift-menu-tip b{color:var(--accent-text);}
.lift-menu-tip-x{width:30px;height:30px;flex-shrink:0;border:none;border-radius:50%;background:transparent;color:var(--text-muted);
  display:flex;align-items:center;justify-content:center;cursor:pointer;padding:0;}
.lift-menu-tip-x:active{opacity:.5;}
.lift-menu-tip-x svg{width:14px;height:14px;stroke:currentColor;fill:none;stroke-width:2.4;}
.ex-card.folded{display:flex;align-items:center;gap:8px;padding:6px 6px 6px 16px;}
.ex-card.folded .drag-handle{margin:0 -2px 0 -6px;}
.ex-fold-btn{flex:1;min-width:0;display:flex;align-items:center;gap:10px;min-height:52px;padding:6px 10px 6px 0;
  background:none;border:none;color:var(--text);text-align:left;cursor:pointer;font-family:inherit;}
.ex-fold-btn:active{opacity:.6;}
.ex-fold-text{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px;}
.ex-fold-name{font-size:var(--fs-body);font-weight:700;letter-spacing:-.01em;line-height:1.25;}
.ex-fold-line{font-size:var(--fs-secondary);color:var(--text-muted);line-height:1.3;}
.ex-fold-btn > svg{width:18px;height:18px;stroke:var(--text-3);fill:none;stroke-width:2.4;flex-shrink:0;}
.ex-field label .hint-info-btn{margin-left:4px;vertical-align:-3px;}
.lift-menu .list-group{margin:14px 0 0;}
.lift-menu .row-btn{gap:12px;}
.lift-menu .row-btn > div{flex:1;min-width:0;}

/* ---- Survey: part label and the lift pickers ---- */
.survey-part{color:var(--text-muted);font-weight:600;}
.survey-lift-picked{margin:0 0 12px;}
.survey-lift-picked .chip{gap:6px;padding:0 10px 0 14px;}
.survey-lift-picked .chip svg{width:12px;height:12px;stroke:currentColor;fill:none;stroke-width:2.6;}
.survey-lift-results{margin-top:2px;}
.survey-lift-results .picker-group-label{margin-top:4px;}
.survey-lift-empty{margin:10px 2px 0;}

/* ---- Your plan is ready ---- */
.ready-hero{text-align:center;margin:8px 0 18px;}
.ready-logo{display:flex;justify-content:center;margin-bottom:6px;}
.ready-logo svg{width:52px;height:52px;filter:drop-shadow(0 0 14px var(--accent-glow-soft));}
.ready-hero .page-sub{max-width:340px;margin:8px auto 0;}
.week-list .ready-row{cursor:default;align-items:flex-start;}
.week-list .ready-row:active{background:transparent;}
.ready-row .wk-day{padding-top:2px;}
.ready-row .d{line-height:1.45;}
.ready-why ul{margin:0;padding-left:18px;}
.ready-why li{font-size:var(--fs-secondary);line-height:1.5;color:var(--text);}
.ready-why li + li{margin-top:6px;}
.ready-note{text-align:center;font-size:var(--fs-footnote);color:var(--text-muted);margin:16px 8px 14px;line-height:1.45;}
.ready-second{margin-top:10px;}

/* ---- Food calendar ---- */
.cal-cell.food-on{background:var(--success);color:var(--success-ink);}
.cal-cell.food-on .cal-tag{color:var(--success-ink);opacity:.85;}
.cal-cell.food-under{outline:1.5px dashed var(--warning);outline-offset:-3px;}
.cal-cell.food-over{box-shadow:inset 0 0 0 1.5px var(--warning);}
.cal-cell.food-under .cal-tag,.cal-cell.food-over .cal-tag{color:var(--warning);}
.cal-cell.food-on.today{box-shadow:0 0 0 2px var(--accent) inset, 0 0 0 4px var(--surface) inset;}
.cal-cell.food-over.today{box-shadow:0 0 0 2px var(--accent) inset;}
.legend-dot.food-under{outline:1.5px dashed var(--warning);outline-offset:-1.5px;}
.legend-dot.food-over{box-shadow:inset 0 0 0 1.5px var(--warning);}
.week-sum-note{margin:12px 2px 0;padding-top:12px;border-top:.5px solid var(--separator);font-size:var(--fs-footnote);color:var(--text-muted);}

/* ---- Progress page ---- */
.progress-list{margin-bottom:12px;}
.progress-list .progress-group-label{border-top:none;padding-top:14px;}
.progress-flag{display:inline-block;margin-left:4px;padding:1px 7px;border-radius:var(--radius-pill);vertical-align:1px;
  background:var(--danger-bg);color:var(--danger);font-size:var(--fs-caption);font-weight:700;letter-spacing:0;}
.pr-row{gap:10px;}
.pr-row > div{flex:1;min-width:0;}
.pr-badge{flex:none;padding:2px 8px;border-radius:var(--radius-pill);background:var(--success-bg);color:var(--success);
  font-size:var(--fs-caption);font-weight:800;}
.progress-empty{color:var(--text-muted);font-size:var(--fs-subhead);line-height:1.5;margin:0;}
.screen-progress .lib-chips{margin-bottom:12px;}

/* ---- Profile: About you ---- */
.injury-card{max-height:calc(100dvh - 60px);overflow-y:auto;}
.injury-card .opt-list{margin-top:12px;}
.injury-swaps{margin:14px 0 0;}
.injury-swaps .row-btn.injury-swap{cursor:default;justify-content:flex-start;gap:12px;min-height:52px;}
.injury-swaps .row-btn.injury-swap:active{background:transparent;}
.injury-swap .wk-dow{flex:none;width:34px;font-size:var(--fs-caption);font-weight:700;text-transform:uppercase;letter-spacing:.04em;color:var(--text-muted);}
.injury-swap > div{flex:1;min-width:0;}
.swap-arrow{color:var(--accent-text);font-weight:700;}
#nameEditInput{margin-top:12px;}
.progress-ex-sub .nw{white-space:nowrap;}
.builder-extras{margin:0 2px 8px;font-size:var(--fs-footnote);color:var(--text-muted);}

/* Food search: Recent / Frequent */
.food-list-tabs{margin:12px 0 4px;}

/* Workout time estimate: Home's today card and My Lift */
.today-meta{margin:-2px 0 6px;font-size:var(--fs-footnote);font-weight:600;color:var(--text-muted);}
.lift-time{display:flex;align-items:center;gap:6px;margin:-8px 0 14px;font-size:var(--fs-footnote);color:var(--text-muted);}
.lift-time svg{width:15px;height:15px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;flex-shrink:0;}

/* Plan → Sets per muscle each week */
.vol-card{padding:14px 16px 12px;}
.vol-list{display:flex;flex-direction:column;gap:9px;}
.vol-row{display:grid;grid-template-columns:104px 1fr 34px 30px;align-items:center;gap:8px;}
.vol-name{font-size:var(--fs-footnote);font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.vol-bar{position:relative;height:10px;border-radius:5px;background:var(--fill);overflow:hidden;}
.vol-zone{position:absolute;top:0;bottom:0;background:var(--accent-tint);box-shadow:inset 1px 0 0 var(--accent-text), inset -1px 0 0 var(--accent-text);}
.vol-fill{position:absolute;top:2px;bottom:2px;left:0;border-radius:3px;background:var(--accent-fill);}
.vol-fill.half{background:var(--accent-fill);opacity:.4;border-radius:0 3px 3px 0;}
.vol-row.low .vol-fill,.vol-row.high .vol-fill{background:var(--warning);}
.vol-num{font-size:var(--fs-footnote);font-weight:600;text-align:right;}
.vol-flag{font-size:var(--fs-caption);font-weight:700;color:var(--warning);}
.vol-note{margin:12px 0 0;}
.vol-key{display:inline-flex;align-items:center;gap:5px;font-weight:600;}
.vol-key-zone,.vol-key-half{display:inline-block;width:16px;height:9px;border-radius:3px;vertical-align:middle;}
.vol-key-zone{background:var(--accent-tint);box-shadow:inset 0 0 0 1px var(--accent-text);}
.vol-key-half{background:var(--accent-fill);opacity:.4;}
.vol-row.other .vol-fill{background:var(--text-muted);}

/* Lift notes */
.lift-note{display:flex;align-items:flex-start;gap:8px;width:100%;margin:-4px 0 12px;padding:9px 12px;border:none;border-radius:var(--radius-md);
  background:var(--accent-tint);color:var(--text);font:inherit;font-size:var(--fs-footnote);line-height:1.4;text-align:left;cursor:pointer;}
.lift-note svg{width:15px;height:15px;margin-top:1px;flex-shrink:0;stroke:var(--accent-text);fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;}
.ex-card.compact .lift-note{margin:2px 0 10px;}
.logged-set .rec-links{column-gap:14px;}
.logged-set .rec-links .rec-link{margin-left:0;}
.lift-note-input{min-height:84px;resize:vertical;line-height:1.4;font-family:inherit;}
.lift-note-delete{display:block;margin:10px auto 0;color:var(--danger, #D93A3A);}
.vol-row.other .vol-zone{display:none;}
.ex-foot-links{display:flex;justify-content:center;gap:4px 22px;flex-wrap:wrap;margin-top:6px;}
.ex-foot-links .skip-link{width:auto;margin-top:0;}

/* Supersets: the two cards of a pair sit together, joined by an accent line */
.ex-card.ss{box-shadow:inset 3px 0 0 var(--accent-fill), var(--shadow-card);}
.ex-card.ss-a + .ex-card.ss-b{margin-top:4px;}
.ex-card.ss-a{margin-bottom:4px;border-bottom-left-radius:8px;border-bottom-right-radius:8px;}
.ex-card.ss-b{border-top-left-radius:8px;border-top-right-radius:8px;}
.ss-tag{display:inline-flex;align-items:center;gap:6px;margin:0 0 8px;padding:3px 10px 3px 8px;border:none;border-radius:999px;
  background:var(--accent-tint);color:var(--accent-text);font:inherit;font-size:var(--fs-caption);font-weight:700;cursor:pointer;max-width:100%;}
.ss-tag span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.ss-tag svg,.ss-link svg{width:14px;height:14px;stroke:currentColor;fill:none;stroke-width:2.2;stroke-linecap:round;stroke-linejoin:round;flex-shrink:0;}
.set-done-btn svg{flex-shrink:0;}
/* Supersets sheet */
.ss-list{display:flex;flex-direction:column;margin:4px 0 10px;}
.ss-row{display:flex;align-items:center;gap:10px;padding:10px 12px;border-radius:var(--radius-sm);background:var(--surface-2);}
.ss-row .nm{flex:1;min-width:0;font-weight:600;font-size:var(--fs-subhead);}
.ss-row .sr{font-size:var(--fs-footnote);color:var(--text-muted);white-space:nowrap;}
.ss-row.done{opacity:.55;}
.ss-row.paired{background:var(--accent-tint);box-shadow:inset 3px 0 0 var(--accent-fill);}
.ss-row + .ss-row{margin-top:6px;}
.ss-link{align-self:center;display:inline-flex;align-items:center;gap:5px;margin:3px 0;padding:3px 10px;border:1px dashed var(--separator);border-radius:999px;
  background:transparent;color:var(--text-muted);font:inherit;font-size:var(--fs-caption);font-weight:600;cursor:pointer;}
.ss-link.on{border:none;background:var(--accent-fill);color:var(--accent-ink);}
.ss-tools{display:flex;align-items:center;justify-content:space-between;gap:12px;}
.ss-time{margin:12px 0 4px;font-size:var(--fs-footnote);font-weight:600;color:var(--text-muted);}

/* Finish screen */
.celebrate-card{max-height:calc(var(--vv-height, 100vh) - 32px);overflow-y:auto !important;}
.celebrate-card.replay{padding-top:22px !important;}
.celebrate-stats .n small{font-size:12px;margin-left:2px;color:var(--text-muted);}
.celebrate-prs small{font-size:var(--fs-caption);color:var(--text-muted);white-space:nowrap;}
.finish-compare{margin:12px 0 0;padding:10px 12px;border-radius:var(--radius-md);background:var(--surface-2);text-align:left;}
.finish-compare-head{display:flex;justify-content:space-between;gap:8px;font-size:var(--fs-caption);font-weight:700;color:var(--text-muted);text-transform:uppercase;letter-spacing:.04em;margin-bottom:4px;}
.finish-compare ul{list-style:none;margin:0;padding:0;}
.finish-compare li{display:grid;grid-template-columns:16px 1fr auto;align-items:baseline;gap:6px;padding:4px 0;font-size:var(--fs-footnote);}
.finish-compare .a{font-weight:800;text-align:center;}
.finish-compare li.up .a{color:var(--success);}
.finish-compare li.down .a{color:var(--warning);}
.finish-compare li.same .a{color:var(--text-muted);}
.finish-compare .nm{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.finish-compare .v{font-size:12px;color:var(--text-muted);white-space:nowrap;}
.finish-more{margin:2px 0 0 22px;font-size:var(--fs-caption);color:var(--text-muted);}
.summary-btn{display:flex;align-items:center;justify-content:center;gap:8px;margin:-4px 0 14px;background:var(--success-bg);color:var(--success);}
.summary-btn svg{width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:3;}
/* End workout, under the day's lifts on My Lift */
.end-workout{margin:18px 0 6px;text-align:center;}
.end-workout .btn{display:flex;align-items:center;justify-content:center;gap:8px;}
.end-workout .btn svg{width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:3;}
.end-workout p{margin:8px 0 0;font-size:var(--fs-footnote);color:var(--text-muted);}

/* Goals → Training and rest days */
.day-target-diffs{margin:12px 0 0;}
.day-target-stats{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:12px;}
.day-target-stats > div{background:var(--surface-2);border-radius:var(--radius-sm);padding:10px 8px;text-align:center;}
.day-target-stats .n{display:block;font-family:var(--font-mono);font-weight:600;font-size:var(--fs-headline);}
.day-target-stats .l{display:block;font-size:var(--fs-footnote);font-weight:600;margin-top:2px;}
.day-target-stats .c{display:block;font-size:var(--fs-caption);color:var(--text-muted);}
.day-targets .card-note{margin-top:10px;}
.celebrate-prs li.two-line{display:grid;grid-template-columns:auto 1fr;column-gap:10px;row-gap:1px;align-items:center;}
.celebrate-prs li.two-line::before{grid-row:1 / span 2;}
.celebrate-prs li.two-line .nm{font-weight:600;color:var(--text);}
.celebrate-prs li.two-line .pv{grid-column:2;font-size:var(--fs-caption);color:var(--text-muted);}
.celebrate-prs li.two-line .pv strong{font-weight:700;}
.finish-compare li{grid-template-columns:16px 1fr;row-gap:0;}
.finish-compare .a{grid-row:1 / span 2;align-self:center;}
.finish-compare .v{grid-column:2;font-size:var(--fs-caption);}

/* Home: calories left today */
.home-cal-line{display:flex;align-items:center;gap:10px;width:100%;margin:12px 0 0;padding:12px 14px;border:none;border-radius:var(--radius-lg);
  background:var(--surface);box-shadow:var(--shadow-card);color:var(--text);font:inherit;text-align:left;cursor:pointer;}
.home-cal-line:active{background:var(--surface-2);}
.home-cal-line svg{width:20px;height:20px;flex-shrink:0;stroke:var(--accent);fill:none;stroke-width:1.9;stroke-linecap:round;stroke-linejoin:round;}
.home-cal-line svg:last-child{width:16px;height:16px;stroke:var(--text-muted);margin-left:auto;}
.home-cal-line .t{font-size:var(--fs-subhead);font-weight:700;white-space:nowrap;}
.home-cal-line .d{font-size:var(--fs-footnote);color:var(--text-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0;}

/* Weight page: goal date */
.goal-eta{display:flex;gap:10px;align-items:flex-start;margin-top:12px;padding:14px 16px;}
.goal-eta svg{width:20px;height:20px;flex-shrink:0;margin-top:1px;stroke:var(--accent);fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;}
.goal-eta p{margin:0;font-size:var(--fs-footnote);line-height:1.5;color:var(--text-muted);}
.goal-eta b{color:var(--text);}
.inline-link{display:inline;padding:0;min-height:0;font-size:inherit;}
/* Weight page: measurements */
.measure-list{display:flex;flex-direction:column;}
.measure-row{display:grid;grid-template-columns:72px auto 1fr;align-items:baseline;gap:10px;padding:8px 0;}
.measure-row + .measure-row{border-top:.5px solid var(--separator);}
.measure-row .l{font-size:var(--fs-footnote);font-weight:600;}
.measure-row .v{font-weight:600;}
.measure-row .v small{font-size:var(--fs-caption);color:var(--text-muted);font-family:inherit;}
.measure-row .c{font-size:var(--fs-caption);color:var(--text-muted);text-align:right;}
.measure-card .card-note{margin:6px 0 12px;}
.measure-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px 12px;}
.measure-field{display:flex;flex-direction:column;gap:4px;font-size:var(--fs-footnote);font-weight:600;}
/* Weight page: progress photos */
.photo-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:6px;}
.photo-thumb{position:relative;aspect-ratio:3/4;padding:0;border:none;border-radius:var(--radius-sm);overflow:hidden;background:var(--surface-2);cursor:pointer;}
.photo-thumb img{width:100%;height:100%;object-fit:cover;display:block;}
.photo-thumb span{position:absolute;left:0;right:0;bottom:0;padding:3px 6px;font-size:11px;font-weight:700;color:#fff;background:linear-gradient(transparent, rgba(0,0,0,.55));text-align:left;}
.photo-actions{display:flex;gap:8px;margin-top:12px;}
.photo-actions .btn{flex:1;display:flex;align-items:center;justify-content:center;gap:6px;}
.photo-actions svg{width:17px;height:17px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;}
.photo-card .card-note{margin:10px 0 0;}
.photo-full{display:block;width:100%;max-height:calc(var(--vv-height, 100vh) - 280px);object-fit:contain;border-radius:var(--radius-md);background:var(--surface-2);}
.photo-save{display:flex;align-items:center;justify-content:center;gap:8px;margin:12px 0 0;}
.photo-save svg{width:18px;height:18px;stroke:currentColor;fill:none;stroke-width:2;}
.photo-compare{display:grid;grid-template-columns:1fr 1fr;gap:8px;}
.photo-compare figure{margin:0;display:flex;flex-direction:column;gap:6px;}
.photo-compare img{width:100%;aspect-ratio:3/4;object-fit:cover;border-radius:var(--radius-sm);background:var(--surface-2);}
.photo-pick{font-size:var(--fs-caption);padding:6px 8px;min-height:0;}

/* Profile → Import from Strong or Hevy */
.import-steps{margin:0 0 14px;padding-left:20px;font-size:var(--fs-footnote);line-height:1.5;color:var(--text-muted);}
.import-steps li + li{margin-top:6px;}
.import-steps b{color:var(--text);}
.import-stats{margin:4px 0 6px;}
.import-list{max-height:200px;overflow-y:auto;border-radius:var(--radius-sm);background:var(--surface-2);padding:4px 12px;}
.import-list > div{display:flex;flex-direction:column;padding:7px 0;font-size:var(--fs-footnote);}
.import-list > div + div{border-top:.5px solid var(--separator);}
.import-list .to{color:var(--text-muted);font-size:var(--fs-caption);}
.import-list > .import-row{flex-direction:row;align-items:center;justify-content:space-between;gap:10px;}
.import-row > div{display:flex;flex-direction:column;min-width:0;}
.import-row .link-btn{flex-shrink:0;font-size:var(--fs-footnote);}
.import-undo{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-top:14px;padding:10px 12px;border-radius:var(--radius-sm);background:var(--surface-2);font-size:var(--fs-footnote);}
.import-sheet .card-note{margin:12px 0 0;}
.photo-actions .btn span{white-space:nowrap;}

/* AI Trainer: form check */
.ai-form-btn{flex-shrink:0;display:flex;align-items:center;justify-content:center;width:40px;height:40px;margin-left:2px;border:none;border-radius:50%;
  background:var(--accent-tint);color:var(--accent-text);cursor:pointer;}
.ai-form-btn:disabled{opacity:.4;}
.ai-form-btn svg{width:21px;height:21px;stroke:currentColor;fill:none;stroke-width:1.9;stroke-linejoin:round;}
.ai-empty .ai-empty-form{display:block;margin-top:10px;font-size:var(--fs-footnote);}
.ai-empty .ai-empty-form svg{display:inline-block;width:17px;height:17px;margin:0 2px;vertical-align:-3px;stroke-width:1.9;filter:none;}
.ai-thumbs{display:flex;flex-wrap:wrap;gap:4px;margin-top:8px;}
.ai-thumb{position:relative;width:40px;height:52px;border-radius:6px;overflow:hidden;background:rgba(0,0,0,.2);}
.ai-thumb img{width:100%;height:100%;object-fit:cover;display:block;}
.ai-thumb b{position:absolute;left:2px;top:2px;min-width:14px;padding:0 3px;border-radius:4px;background:rgba(0,0,0,.6);color:#fff;font-size:10px;line-height:14px;text-align:center;}
.form-check .field-label .form-opt{font-weight:500;color:var(--text-muted);}
.form-check select.field-input{appearance:auto;}
.form-pick{display:flex;align-items:center;justify-content:center;gap:8px;margin-top:12px;}
.form-pick svg{width:20px;height:20px;stroke:currentColor;fill:none;stroke-width:1.9;stroke-linejoin:round;}
.form-frames{margin-top:12px;padding:10px;border-radius:var(--radius-md);background:var(--surface-2);}
.form-frames .ai-thumbs{margin-top:0;}
.form-frames .ai-thumb{width:52px;height:68px;}
.form-frames p{margin:8px 0 0;font-size:var(--fs-footnote);color:var(--text-muted);}
.form-uses{margin:10px 0 0;font-size:var(--fs-caption);line-height:1.45;color:var(--text-muted);}

/* Profile → Theme color → Custom: the color wheel */
.swatch-custom{background:conic-gradient(from 90deg, #f33, #fd2, #3d4, #2de, #36f, #e3e, #f33);}
.swatch-custom::after{content:'';position:absolute;inset:7px;border-radius:50%;background:var(--sw-c);}
.swatch-custom svg{position:relative;z-index:1;}
.color-picker{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:16px;align-items:center;margin-top:16px;}
.color-wheel{position:relative;width:100%;aspect-ratio:1;border-radius:50%;touch-action:none;cursor:crosshair;max-width:170px;justify-self:center;}
.color-wheel::before{content:'';position:absolute;inset:0;border-radius:50%;
  background:radial-gradient(circle closest-side, #fff, rgba(255,255,255,0)), conic-gradient(from 90deg, #f00, #ff0, #0f0, #0ff, #00f, #f0f, #f00);
  filter:brightness(var(--v, 1));box-shadow:inset 0 0 0 1px rgba(0,0,0,.08);}
.wheel-knob{position:absolute;width:24px;height:24px;border-radius:50%;transform:translate(-50%,-50%);z-index:1;pointer-events:none;
  box-shadow:0 0 0 3px #fff, 0 2px 8px rgba(0,0,0,.45);}
.color-side{display:flex;flex-direction:column;gap:6px;min-width:0;}
.color-label{font-size:var(--fs-caption);font-weight:700;color:var(--text-muted);text-transform:uppercase;letter-spacing:.04em;}
.color-range{width:100%;accent-color:var(--accent-fill);margin:2px 0 6px;}
.color-hex{min-height:40px;padding:6px 10px;text-transform:uppercase;}
.color-sample{display:flex;align-items:center;gap:10px;margin-top:6px;}
.color-sample-btn{padding:6px 12px;border-radius:999px;background:linear-gradient(var(--accent-hi), var(--accent-fill));color:var(--accent-ink);font-size:var(--fs-footnote);font-weight:700;}
.color-sample-text{color:var(--accent-text);font-size:var(--fs-footnote);font-weight:700;}
.color-note{margin:12px 0 0;font-size:var(--fs-caption);line-height:1.45;color:var(--text-muted);}
/* Add a lift, under the day's lifts on My Lift */
.add-lift-btn{margin:2px 0 14px;}
/* The website's sign-in screen: what Iron Streak is, the App Store link, support and privacy */
.site-intro{margin:34px 0 0;padding:20px 18px;border-radius:var(--radius-lg);background:var(--surface);box-shadow:var(--shadow-card, none);}
.site-intro h2{margin:0 0 12px;font-size:var(--fs-headline);}
.site-intro ul{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:12px;}
.site-intro li{display:flex;flex-direction:column;gap:2px;}
.site-intro li b{font-size:var(--fs-subhead);}
.site-intro li span{color:var(--text-muted);font-size:var(--fs-footnote);line-height:1.45;}
.app-store-btn{display:inline-flex;align-items:center;gap:10px;margin-top:18px;padding:9px 18px 9px 14px;border-radius:12px;background:#000;color:#fff;text-decoration:none;font-weight:700;font-size:19px;line-height:1.05;}
.app-store-btn svg{width:22px;height:26px;}
.app-store-btn span{display:flex;flex-direction:column;}
.app-store-btn small{font-size:11px;font-weight:500;opacity:.85;}
:root[data-theme="dark"] .app-store-btn{background:#fff;color:#000;}
.site-intro-note{margin:10px 0 0;color:var(--text-muted);font-size:var(--fs-footnote);}
.site-footer{display:flex;justify-content:center;gap:8px;margin:22px 0 8px;font-size:var(--fs-footnote);color:var(--text-muted);}
.site-footer a{color:var(--accent-text);text-decoration:none;font-weight:600;}
