/* LiftLuma "Hub" dashboard layer — loaded after lumen.css and uses its tokens. */
:root,html[data-theme=dark]{--hub-train:var(--l-accent);--hub-water:#5cc8ff;--hub-protein:#ffb86b;--hub-sleep:#b79cff}
html[data-theme=light]{--hub-train:#5f8f12;--hub-water:#0b78b6;--hub-protein:#b35c00;--hub-sleep:#6a4fd0}
.hub-today [hidden],.hub-health [hidden]{display:none!important}
.hub-icon{display:block;flex:none}
.hub-train{color:var(--hub-train)}.hub-water{color:var(--hub-water)}.hub-protein{color:var(--hub-protein)}.hub-sleep{color:var(--hub-sleep)}

/* ----- Four-tab navigation ----- */
#main-nav[data-hub-nav] a>b{display:grid;place-items:center;font-size:0;line-height:0}
@media(max-width:999px){
 #main-nav[data-hub-nav]{grid-template-columns:repeat(4,minmax(0,1fr))!important}
 #main-nav[data-hub-nav] a{min-height:56px;border-radius:16px}
}

/* ----- Today: header and mode switch ----- */
.hub-today .ql-today-head{flex-wrap:wrap;align-items:center}
.hub-mode,.hub-seg{display:inline-flex;gap:4px;padding:4px;border-radius:999px;background:var(--l-surface);border:1px solid var(--l-line)}
.hub-mode button,.hub-seg button{display:inline-flex;align-items:center;gap:7px;min-height:40px;padding:0 14px;border:0;border-radius:999px;background:transparent;color:var(--l-muted);font:650 14px var(--l-font);cursor:pointer;white-space:nowrap}
html body .hub-mode button,html body .hub-seg button{border:0!important;background:transparent!important;box-shadow:none!important}
html body .hub-mode button[aria-pressed=true],html body .hub-seg button[aria-pressed=true]{background:var(--l-accent)!important;color:var(--l-accent-ink)!important}
.hub-seg button{min-height:34px;padding:0 12px;font-size:13px}
@media(max-width:640px){.hub-mode{width:100%}.hub-mode button{flex:1;justify-content:center;min-height:44px}}

/* ----- Today: two-column dashboard ----- */
.hub-main{display:grid;gap:16px;grid-template-columns:minmax(0,1fr)}
.hub-col,.hub-side{display:flex;flex-direction:column;gap:14px;min-width:0}
@media(min-width:1100px){.hub-main{grid-template-columns:minmax(0,1.25fr) minmax(320px,.9fr);align-items:start}}
.hub-side-head{display:flex;justify-content:space-between;align-items:center;gap:12px}
.hub-side-head a{font:650 13px var(--l-font);color:var(--l-text);text-decoration:none;border-bottom:1px solid var(--l-line2)}
.hub-rings{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}
.hub-tile{position:relative;display:grid;grid-template-columns:64px minmax(0,1fr);grid-template-areas:"ring text" "actions actions";gap:10px 12px;align-items:center;padding:14px;border-radius:20px;background:var(--l-surface);border:1px solid var(--l-line);box-shadow:var(--l-shadow)}
.hub-ring{grid-area:ring}
.hub-ring-track{fill:none;stroke:var(--l-line);stroke-width:7}
.hub-ring-value{fill:none;stroke:currentColor;stroke-width:7;stroke-linecap:round;transition:stroke-dashoffset .35s ease}
.hub-tile-icon{display:grid;place-items:center}
.hub-tile>.hub-tile-icon{position:absolute;left:14px;top:14px;width:64px;height:64px;pointer-events:none}
.hub-tile-text{grid-area:text;display:flex;flex-direction:column;min-width:0}
.hub-tile-text span{font:600 11px var(--l-font);letter-spacing:.1em;text-transform:uppercase;color:var(--l-muted)}
.hub-tile-text strong{font:780 24px/1.15 var(--l-display);letter-spacing:-.02em;color:var(--l-text);font-variant-numeric:tabular-nums}
.hub-tile-text strong i{font:600 13px var(--l-font);font-style:normal;color:var(--l-muted);letter-spacing:0}
.hub-tile-text small{font:500 12px var(--l-font);color:var(--l-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.hub-tile-actions{grid-area:actions;display:flex;gap:8px}
.hub-tile-actions:empty{display:none}
.hub-tile-actions button{flex:1;min-height:44px;border-radius:12px;border:1px solid var(--l-line2);background:var(--l-raised);color:var(--l-text);font:700 16px var(--l-font);cursor:pointer}
.hub-tile-actions button.is-plus{flex:2;background:var(--l-accent-soft);border-color:var(--l-accent-line)}
.hub-tile-actions button:disabled{opacity:.4;cursor:default}
.hub-tile-actions button:active:not(:disabled){transform:scale(.97)}
.hub-side .ql-week,.hub-side .ql-tiles{margin:0}

/* ----- Cards ----- */
.hub-grid{display:grid;gap:16px;grid-template-columns:minmax(0,1fr)}
@media(min-width:900px){.hub-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
.hub-card{display:flex;flex-direction:column;gap:14px;padding:20px;border-radius:24px;background:var(--l-surface);border:1px solid var(--l-line);box-shadow:var(--l-shadow);min-width:0}
.hub-card-head{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;flex-wrap:wrap}
.hub-card h3{margin:4px 0 0!important;font:760 22px/1.15 var(--l-display)!important;letter-spacing:-.02em!important;color:var(--l-text)!important}
.hub-targets{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}
.hub-targets div{padding:12px;border-radius:16px;background:var(--l-raised);border:1px solid var(--l-line)}
.hub-targets b{display:block;font:780 20px/1.2 var(--l-display);color:var(--l-text);font-variant-numeric:tabular-nums}
.hub-targets span{font:500 12px var(--l-font);color:var(--l-muted)}
.hub-meals{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:8px}
.hub-meals button{display:flex;align-items:center;gap:12px;width:100%;min-height:56px;padding:10px 12px;border-radius:16px;border:1px solid var(--l-line);background:var(--l-raised);color:var(--l-text);text-align:left;cursor:pointer}
.hub-meals button i{flex:none;display:grid;place-items:center;width:28px;height:28px;border-radius:50%;border:1.5px dashed var(--l-line2);font:900 14px var(--l-font);font-style:normal}
.hub-meals button[aria-pressed=true]{border-color:var(--l-accent-line);background:var(--l-accent-soft)}
.hub-meals button[aria-pressed=true] i{background:var(--l-accent);border:0;color:var(--l-accent-ink)}
.hub-meals strong{display:block;font:700 15px var(--l-font)}
.hub-meals small{display:block;font:500 13px/1.35 var(--l-font);color:var(--l-muted)}
.hub-quick{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.hub-quick span{font:600 13px var(--l-font);color:var(--l-muted);margin-right:4px}
.hub-weight-form label{display:block;font:600 14px/1.4 var(--l-font);color:var(--l-text);margin-bottom:8px}
.hub-weight-form div{display:flex;gap:8px}
.hub-weight-form input,.hub-target-form input{min-height:44px;padding:0 12px;border-radius:12px;border:1px solid var(--l-line2);background:var(--l-raised);color:var(--l-text);font:600 16px var(--l-font);min-width:0;width:100%}

/* ----- Month calendar ----- */
.hub-month{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:5px}
.hub-month-head{text-align:center;font:600 11px var(--l-font);color:var(--l-faint)}
.hub-month-day{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;aspect-ratio:1;max-height:52px;border-radius:12px;background:var(--l-raised);border:1px solid transparent}
.hub-month-day em{font:600 12px var(--l-font);font-style:normal;color:var(--l-muted);font-variant-numeric:tabular-nums}
.hub-month-day.is-on{background:var(--l-accent-soft);border-color:var(--l-accent-line)}
.hub-month-day.is-on em{color:var(--l-text)}
.hub-month-day.is-today{border-color:var(--l-text)}
.hub-month-day.is-future{opacity:.45}
.hub-month-day i{display:flex;gap:3px;height:6px}
.hub-month-day i b,.hub-legend b{display:inline-block;width:6px;height:6px;border-radius:50%;background:currentColor}
.hub-legend{display:flex;gap:14px;flex-wrap:wrap;font:500 12px var(--l-font);color:var(--l-muted)}
.hub-legend span{display:inline-flex;align-items:center;gap:6px}
.hub-legend b{width:8px;height:8px}

/* ----- Yoga / cardio card, dialogs ----- */
.hub-activity-card .ql-plan img{object-fit:cover}
.hub-sleep-grid{display:flex;flex-wrap:wrap;gap:8px;margin:12px 0 16px}
.hub-sleep-grid .ql-chip{min-height:44px;min-width:60px;justify-content:center}
.hub-sleep-grid .ql-chip[aria-pressed=true]{background:var(--l-accent);border-color:var(--l-accent);color:var(--l-accent-ink)!important}
.hub-flow{display:flex;flex-direction:column;gap:10px;text-align:center}
.hub-flow img{width:100%;max-height:38vh;object-fit:contain;border-radius:18px;background:var(--l-raised)}
.hub-flow-clock{font:800 64px/1 var(--l-display);letter-spacing:-.04em;color:var(--l-text);font-variant-numeric:tabular-nums}
.hub-flow-next{font:600 13px var(--l-font);color:var(--l-muted)}
.hub-flow-actions{display:grid;grid-template-columns:1fr 2fr;gap:10px;margin-top:6px}

/* ----- Health log page ----- */
.hub-health{display:flex;flex-direction:column;gap:16px;font-family:var(--l-font)}
.hub-health>.hub-card>.hub-rings{grid-template-columns:repeat(2,minmax(0,1fr))}
@media(min-width:900px){.hub-health>.hub-card>.hub-rings{grid-template-columns:repeat(4,minmax(0,1fr))}}
.hub-bars{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:8px;height:150px;align-items:end}
.hub-bars div{display:flex;flex-direction:column;align-items:center;justify-content:flex-end;gap:5px;height:100%;min-width:0}
.hub-bars i{display:block;width:100%;max-width:34px;border-radius:8px 8px 3px 3px;background:currentColor;opacity:.9}
.hub-bars b{font:700 12px var(--l-font);color:var(--l-text);font-variant-numeric:tabular-nums}
.hub-bars span{font:500 11px var(--l-font);color:var(--l-muted)}
.hub-target-form{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;align-items:end}
.hub-target-form label{display:flex;flex-direction:column;gap:6px;font:600 12px var(--l-font);color:var(--l-muted)}
.hub-target-form button{grid-column:1/-1;justify-content:center;min-height:44px}
.hub-privacy{flex-direction:row;align-items:center;justify-content:space-between;flex-wrap:wrap}
.hub-privacy p{margin:4px 0 0;font:500 13px/1.5 var(--l-font);color:var(--l-muted);max-width:62ch}
.hub-me-card>span{display:grid;place-items:center}
@media(prefers-reduced-motion:reduce){.hub-ring-value{transition:none}}

/* ----- Public page: "one app for your whole day" ----- */
.ll-allin-layout{display:grid;gap:22px;grid-template-columns:minmax(0,1fr);align-items:center}
@media(min-width:960px){.ll-allin-layout{grid-template-columns:minmax(0,440px) minmax(0,1fr);gap:56px}}
.ll-allin-mock{display:flex;flex-direction:column;gap:12px;padding:18px;border-radius:28px;border:1px solid #2a352c;background:linear-gradient(165deg,#141c17,#0a0f0c);box-shadow:0 30px 80px #00000080;font-family:Inter,system-ui,sans-serif;color:#f3f5f2}
.ll-allin-mock-top{display:flex;justify-content:space-between;align-items:center;gap:10px;flex-wrap:wrap}
.ll-allin-mock-top>span{font-size:10px;letter-spacing:.14em;color:#8d978f;font-weight:700}
.ll-allin-modes{display:flex;gap:3px;padding:3px;border-radius:999px;background:#0c120e;border:1px solid #263028}
.ll-allin-modes i{font-style:normal;font-size:12px;font-weight:650;padding:6px 11px;border-radius:999px;color:#9aa3ad}
.ll-allin-modes i.on{background:#c8f560;color:#11160a}
.ll-allin-workout{display:flex;flex-direction:column;gap:8px;padding:16px;border-radius:20px;background:#161d19;border:1px solid #263028}
.ll-allin-workout small{font-size:10px;letter-spacing:.12em;color:#8d978f;font-weight:600}
.ll-allin-workout strong{font-size:28px;line-height:1.05;letter-spacing:-.03em;font-weight:780}
.ll-allin-workout b{display:block;text-align:center;padding:14px;border-radius:14px;background:#c8f560;color:#11160a;font-size:16px;font-weight:700}
.ll-allin-rings{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
.ll-allin-rings>div{display:flex;align-items:center;gap:10px;padding:10px;border-radius:16px;background:#161d19;border:1px solid #263028}
.ll-allin-rings span{display:flex;flex-direction:column;font-size:10px;letter-spacing:.1em;text-transform:uppercase;color:#8d978f;font-weight:600}
.ll-allin-rings span b{font-size:19px;letter-spacing:-.02em;text-transform:none;color:#f3f5f2;font-weight:780}
.ll-allin-track{fill:none;stroke:#263028;stroke-width:7}
.ll-allin-value{fill:none;stroke:currentColor;stroke-width:7;stroke-linecap:round}
.ll-allin-ring.move{color:#c8f560}.ll-allin-ring.water{color:#5cc8ff}.ll-allin-ring.protein{color:#ffb86b}.ll-allin-ring.sleep{color:#b79cff}
.ll-allin-meal{display:flex;align-items:center;gap:12px;padding:12px;border-radius:16px;background:#c8f5601a;border:1px solid #c8f56055}
.ll-allin-meal i{display:grid;place-items:center;width:26px;height:26px;border-radius:50%;background:#c8f560;color:#11160a;font-style:normal;font-weight:900;font-size:13px}
.ll-allin-meal span{display:flex;flex-direction:column;font-size:13px;color:#9aa3ad}
.ll-allin-meal span b{font-size:15px;color:#f3f5f2}
.ll-allin-note{font-size:11px;color:#6b747e}
.ll-allin-list{display:grid;gap:14px;grid-template-columns:minmax(0,1fr)}
@media(min-width:620px){.ll-allin-list{grid-template-columns:repeat(2,minmax(0,1fr))}}
.ll-allin-list article{padding:20px;border-radius:20px;border:1px solid #263028;background:linear-gradient(160deg,#121b16,#0b110e)}
.ll-allin-list article span{font-size:11px;letter-spacing:.14em;color:#c8f560;font-weight:700}
.ll-allin-list article h3{margin:8px 0 6px;font-size:21px;line-height:1.15;letter-spacing:-.02em;color:#fff;font-weight:700}
.ll-allin-list article p{margin:0;font-size:15px;line-height:1.5;color:#a4ada6}
.ll-allin-list .launch-cta{justify-self:start;align-self:center}
.hub-activity-card a.ql-ghost{display:flex;align-items:center;justify-content:center;text-decoration:none}

/* ----- Library: muscle chips ----- */
.hub-muscle-chips{display:flex;gap:8px;overflow-x:auto;scrollbar-width:none;padding:2px 0 12px;margin:0 0 4px}
.hub-muscle-chips::-webkit-scrollbar{display:none}
html body .hub-muscle-chips button{flex:none;min-height:42px;padding:0 16px;border-radius:999px;border:1px solid var(--l-line2)!important;background:var(--l-surface)!important;color:var(--l-text)!important;font:650 14px var(--l-font);cursor:pointer;white-space:nowrap}
html body .hub-muscle-chips button[aria-pressed=true]{background:var(--l-accent)!important;border-color:var(--l-accent)!important;color:var(--l-accent-ink)!important}

/* ----- Three-tap setup ----- */
.setup{max-width:620px;margin:0 auto;display:flex;flex-direction:column;gap:14px;font-family:var(--l-font)}
.setup-top{display:flex;justify-content:space-between;align-items:center;min-height:44px}
html body .setup-back{border:0!important;background:transparent!important;color:var(--l-muted)!important;font:650 15px var(--l-font);min-height:44px;padding:0 8px 0 0;cursor:pointer}
.setup-dots{display:flex;gap:6px}
.setup-dots i{width:28px;height:5px;border-radius:3px;background:var(--l-line2)}
.setup-dots i.on{background:var(--l-accent)}
.setup h1{margin:0!important;font:780 clamp(30px,7vw,44px)/1.05 var(--l-display)!important;letter-spacing:-.035em!important;color:var(--l-text)!important}
.setup-note{margin:0;color:var(--l-muted);font:500 16px/1.5 var(--l-font)}
.setup-cards{display:grid;gap:10px;grid-template-columns:minmax(0,1fr);margin:6px 0}
.setup-cards.is-days{grid-template-columns:repeat(5,minmax(0,1fr))}
html body .setup-card{display:flex;flex-direction:column;align-items:flex-start;justify-content:center;gap:4px;min-height:76px;padding:14px 18px;border-radius:20px;border:1.5px solid var(--l-line2)!important;background:var(--l-surface)!important;color:var(--l-text)!important;text-align:left;cursor:pointer;transition:transform .12s}
html body .setup-card:active{transform:scale(.98)}
html body .setup-card[aria-pressed=true]{border-color:var(--l-accent-line)!important;background:var(--l-accent-soft)!important;box-shadow:0 0 0 1px var(--l-accent-line)}
.setup-card strong{font:750 19px/1.2 var(--l-display);letter-spacing:-.01em}
.setup-card small{font:500 14px var(--l-font);color:var(--l-muted)}
.setup-cards.is-days .setup-card{align-items:center;text-align:center;padding:12px 4px;min-height:84px}
.setup-cards.is-days .setup-card small{font-size:11px}
.setup-form{display:flex;flex-direction:column;gap:10px}
.setup-form .setting-label{display:flex;align-items:flex-start;gap:10px;line-height:1.6;font-size:15px}
.setup-form input[type=checkbox]{min-width:24px;min-height:24px;margin-top:2px}
.setup-form .hub-seg{align-self:flex-start}
#signup-error:empty{display:none}

/* ----- Cycle tracking ----- */
.cycle-points{margin:0;padding-left:20px;display:flex;flex-direction:column;gap:8px;color:var(--l-muted);font:500 15px/1.5 var(--l-font)}
.cycle-points strong{color:var(--l-text)}
.cycle-summary h2,.hub-activity-card h2{margin:0}
.cycle-summary h2{font:780 clamp(24px,4vw,32px)/1.1 var(--l-display)!important;letter-spacing:-.03em!important;color:var(--l-text)!important}
.cycle-summary p{margin:0}
.cycle-nav,.cycle-actions{display:flex;gap:8px}
html body .cycle-month .cycle-day{aspect-ratio:1;max-height:56px;min-height:40px;border-radius:12px;border:1px solid transparent!important;background:var(--l-raised)!important;color:var(--l-text)!important;font:600 14px var(--l-font);font-variant-numeric:tabular-nums;cursor:pointer;padding:0}
html body .cycle-month .cycle-day.is-predicted{border:1.5px dashed var(--hub-cycle)!important;background:transparent!important}
html body .cycle-month .cycle-day.is-period{background:var(--hub-cycle)!important;color:#fff!important;font-weight:800}
html body .cycle-month .cycle-day.is-today{box-shadow:0 0 0 2px var(--l-text)}
html body .cycle-month .cycle-day:disabled{opacity:.45;cursor:default}
.cycle-dot{display:inline-block;width:12px!important;height:12px!important;border-radius:4px!important}
.cycle-dot.is-period{background:var(--hub-cycle)!important}
.cycle-dot.is-predicted{background:transparent!important;border:1.5px dashed var(--hub-cycle)}
:root,html[data-theme=dark]{--hub-cycle:#ff6b8f}
html[data-theme=light]{--hub-cycle:#c2255c}

/* ----- Idea Factory ----- */
.idea-form{display:flex;flex-direction:column;gap:8px}
.idea-form textarea{resize:vertical;min-height:84px;font:inherit}
.idea-form .ql-primary{align-self:flex-start;width:auto;min-width:180px}
#idea-list{display:flex;flex-direction:column;gap:18px}
.idea-group{display:flex;flex-direction:column;gap:10px}
.idea-card{display:grid;grid-template-columns:64px minmax(0,1fr);gap:14px;padding:14px;border-radius:20px;background:var(--l-surface);border:1px solid var(--l-line);box-shadow:var(--l-shadow)}
.idea-card.is-hidden{opacity:.6}
html body .idea-like{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;min-height:64px;border-radius:14px;border:1.5px solid var(--l-line2)!important;background:var(--l-raised)!important;color:var(--l-text)!important;cursor:pointer}
html body .idea-like[aria-pressed=true]{background:var(--l-accent)!important;border-color:var(--l-accent)!important;color:var(--l-accent-ink)!important}
.idea-like span{font-size:13px;line-height:1}
.idea-like b{font:800 19px/1 var(--l-display);font-variant-numeric:tabular-nums}
.idea-body{min-width:0;display:flex;flex-direction:column;gap:6px}
.idea-body h3{margin:0!important;font:750 18px/1.25 var(--l-display)!important;color:var(--l-text)!important;overflow-wrap:anywhere}
.idea-body p{margin:0;font:500 15px/1.5 var(--l-font);color:var(--l-muted);white-space:pre-wrap;overflow-wrap:anywhere}
.idea-note{padding:10px 12px;border-radius:12px;background:var(--l-raised)}
.idea-meta{display:flex;flex-wrap:wrap;align-items:center;gap:8px;font:600 12px var(--l-font);color:var(--l-muted)}
.idea-rank{font-weight:800;color:var(--l-text)}
.idea-status{padding:3px 9px;border-radius:999px;border:1px solid var(--l-line2);color:var(--l-text)}
.idea-status.is-building,.idea-status.is-planned{background:var(--l-accent-soft);border-color:var(--l-accent-line)}
.idea-status.is-shipped{border-color:var(--l-ok);color:var(--l-ok)}
.idea-status.is-declined{color:var(--l-muted)}
.idea-owner{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-top:4px;font:600 13px var(--l-font);color:var(--l-muted)}
.idea-owner select{min-height:40px;border-radius:10px;border:1px solid var(--l-line2);background:var(--l-raised);color:var(--l-text);padding:0 8px;font:600 14px var(--l-font)}
@media(max-width:999px){body:has(.setup) .sidebar{display:none!important}}
@media(max-width:640px){.hub-mode button{min-width:0;padding:0 8px}.hub-mode:has(button:nth-child(4)) button{font-size:13px;gap:0}.hub-mode:has(button:nth-child(4)) .hub-icon{display:none}}

/* ----- Workout: optional "how it felt" after a one-tap set ----- */
.ql-feel{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin:2px 0 10px;font:600 13px var(--l-font);color:var(--l-muted)}
.ql-feel span{margin-right:4px}
html body .ql-feel button{min-height:38px;padding:0 13px;border-radius:999px;border:1px solid var(--l-line2)!important;background:var(--l-surface)!important;color:var(--l-muted)!important;font:650 13px var(--l-font);cursor:pointer}
html body .ql-feel button[aria-pressed=true]{background:var(--l-accent-soft)!important;border-color:var(--l-accent-line)!important;color:var(--l-text)!important}

/* ----- Library: sharing a demo is optional, so it should not look like a missing picture ----- */
html body .exercise-card-upload[data-hub]{min-height:36px!important;padding:0 10px!important;border:0!important;background:transparent!important;color:var(--l-muted)!important;font:600 12px var(--l-font)!important;text-decoration:underline;text-underline-offset:3px;box-shadow:none!important}


/* ----- Movement loop: start and finish pictures blended into a looping rep (motion-loop.js) ----- */
@keyframes ml-rep{0%,8%{opacity:0;animation-timing-function:cubic-bezier(.5,0,.2,1)}40%,54%{opacity:1;animation-timing-function:cubic-bezier(.45,0,.35,1)}92%,100%{opacity:0}}
@keyframes ml-rep-inv{0%,8%{opacity:1;animation-timing-function:cubic-bezier(.5,0,.2,1)}40%,54%{opacity:0;animation-timing-function:cubic-bezier(.45,0,.35,1)}92%,100%{opacity:1}}
@keyframes ml-rep-bar{0%,8%{transform:scaleX(0);animation-timing-function:cubic-bezier(.5,0,.2,1)}40%,54%{transform:scaleX(1);animation-timing-function:cubic-bezier(.45,0,.35,1)}92%,100%{transform:scaleX(0)}}
@keyframes ml-hold{0%,6%{opacity:0;animation-timing-function:cubic-bezier(.5,0,.2,1)}24%,84%{opacity:1;animation-timing-function:cubic-bezier(.45,0,.35,1)}96%,100%{opacity:0}}
@keyframes ml-hold-inv{0%,6%{opacity:1;animation-timing-function:cubic-bezier(.5,0,.2,1)}24%,84%{opacity:0;animation-timing-function:cubic-bezier(.45,0,.35,1)}96%,100%{opacity:1}}
@keyframes ml-hold-bar{0%,6%{transform:scaleX(0);animation-timing-function:cubic-bezier(.5,0,.2,1)}24%,84%{transform:scaleX(1);animation-timing-function:cubic-bezier(.45,0,.35,1)}96%,100%{transform:scaleX(0)}}
.motion-loop{--ml-d:3.6s;--ml-fade:ml-rep;--ml-inv:ml-rep-inv;--ml-barname:ml-rep-bar;max-width:440px;margin:18px auto 10px;display:flex;flex-direction:column;gap:10px}
.motion-loop[data-tempo=hold]{--ml-fade:ml-hold;--ml-inv:ml-hold-inv;--ml-barname:ml-hold-bar}
html body .motion-loop .ml-stage{position:relative;display:block;width:100%;aspect-ratio:1;padding:0!important;margin:0;border:1px solid var(--l-line,#262c34)!important;border-radius:20px!important;overflow:hidden;background:#fff!important;cursor:pointer;box-shadow:none!important;min-height:0!important}
.motion-loop .ml-stage img{position:absolute;inset:0;width:100%;height:100%;object-fit:contain;display:block;border-radius:0;background:#fff}
.motion-loop .ml-b{opacity:0;animation:var(--ml-fade) var(--ml-d) linear infinite;will-change:opacity}
.motion-loop .ml-play-mark{position:absolute;inset:auto 12px 12px auto;width:44px;height:44px;border-radius:50%;display:grid;place-items:center;background:#0b0d10cc;opacity:0;transform:scale(.9);transition:opacity .2s,transform .2s;pointer-events:none}
.motion-loop .ml-play-mark svg{width:20px;height:20px;fill:#fff}
.motion-loop[data-state=paused] .ml-play-mark{opacity:1;transform:none}
.motion-loop .ml-bar{height:4px;border-radius:999px;background:var(--l-line,#262c34);overflow:hidden}
.motion-loop .ml-bar i{display:block;height:100%;border-radius:inherit;background:var(--l-accent,#c8f560);transform:scaleX(0);transform-origin:left;animation:var(--ml-barname) var(--ml-d) linear infinite}
.motion-loop .ml-controls{display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.motion-loop .ml-gap{flex:1}
html body .motion-loop .ml-chip{position:relative;isolation:isolate;overflow:hidden;min-height:40px!important;padding:0 14px!important;border:1px solid var(--l-line,#262c34)!important;border-radius:999px!important;background:transparent!important;color:var(--l-text,#f3f5f2)!important;font:650 13px var(--l-font,system-ui)!important;cursor:pointer;box-shadow:none!important;width:auto!important}
.motion-loop .ml-c1::before,.motion-loop .ml-c2::before{content:"";position:absolute;inset:0;z-index:-1;background:var(--l-accent-soft,#c8f5601a);box-shadow:inset 0 0 0 1.5px var(--l-accent-line,#c8f56055);border-radius:inherit;opacity:0}
.motion-loop .ml-c1::before{opacity:1;animation:var(--ml-inv) var(--ml-d) linear infinite}
.motion-loop .ml-c2::before{animation:var(--ml-fade) var(--ml-d) linear infinite}
html body .motion-loop .ml-chip[aria-pressed=true]{background:var(--l-accent-soft,#c8f5601a)!important;border-color:var(--l-accent-line,#c8f56055)!important}
html body .motion-loop .ml-toggle{background:var(--l-accent,#c8f560)!important;border-color:transparent!important;color:var(--l-accent-ink,#11160a)!important;min-width:76px}
.motion-loop[data-state=paused] .ml-b{animation:none;transition:opacity .35s ease}
.motion-loop[data-state=paused] .ml-bar i{animation:none;transition:transform .35s ease}
.motion-loop[data-state=paused] .ml-chip::before{animation:none;opacity:0}
.motion-loop[data-state=paused][data-show="2"] .ml-b{opacity:1}
.motion-loop[data-state=paused][data-show="2"] .ml-bar i{transform:scaleX(1)}
.motion-loop[data-broken] .ml-b,.motion-loop[data-broken] .ml-bar,.motion-loop[data-broken] .ml-controls,.motion-loop[data-broken] .ml-play-mark{display:none}
.motion-loop[data-broken] .ml-stage{cursor:default}
.motion-loop .ml-stage:focus-visible,.motion-loop .ml-chip:focus-visible{outline:2px solid var(--l-accent,#c8f560);outline-offset:2px}
.motion-pair{margin:4px 0 0;font:600 13px var(--l-font,system-ui)}
.motion-pair summary{cursor:pointer;min-height:40px;display:flex;align-items:center;color:var(--l-muted,#9aa3ad)}
.motion-pair .guide-frame-pair{margin:8px 0 12px}
.motion-note{margin-top:4px}
.ql-guide .motion-loop{margin-top:4px}
.ql-thumb{position:relative}
.ql-thumb .ml-thumb-b{position:absolute;inset:0;opacity:0;animation:ml-rep 3.6s linear infinite}
.exercise-card .ml-card-b{position:absolute;inset:0;width:100%;height:100%;opacity:0;pointer-events:none}
@media(hover:hover){.exercise-card:hover .ml-card-b{animation:ml-rep 2.8s linear infinite}}
@media(prefers-reduced-motion:reduce){.ql-thumb .ml-thumb-b,.exercise-card:hover .ml-card-b{animation:none}}


/* ----- Cycle: day panel, spotting, pain and sex entries ----- */
.cycle-month .cycle-day{position:relative}
.cycle-month .cycle-day.is-spotting{background:transparent!important;border:2px dotted var(--hub-cycle)!important;color:var(--l-text)!important}
.cycle-month .cycle-day.is-selected{outline:2px solid var(--l-accent-line,#c8f560);outline-offset:2px}
.cycle-marks{position:absolute;left:0;right:0;bottom:4px;display:flex;justify-content:center;gap:3px;pointer-events:none}
.cycle-marks i{width:5px;height:5px;border-radius:50%}
.cycle-marks .cm-pain,.cycle-dot.is-pain{background:var(--l-warn,#ffb86b)!important}
.cycle-marks .cm-sex,.cycle-dot.is-sex{background:#b79cff!important}
.cycle-day.is-period .cycle-marks i{box-shadow:0 0 0 1px #fff}
.cycle-dot.is-spotting{background:transparent!important;border:2px dotted var(--hub-cycle)}
.cycle-dot.is-pain,.cycle-dot.is-sex{width:8px!important;height:8px!important;border-radius:50%!important}
.cycle-daycard{display:flex;flex-direction:column;gap:6px}
.cycle-row{display:flex;flex-direction:column;gap:2px;padding-top:10px;border-top:1px solid var(--l-line)}
.cycle-row:first-of-type{border-top:0;padding-top:0}
.cycle-row-label{font:700 12px var(--l-font);letter-spacing:.08em;text-transform:uppercase;color:var(--l-muted)}
.cycle-row .hub-sleep-grid{margin:8px 0 10px}
.cycle-sex{display:flex;align-items:flex-end;gap:10px;flex-wrap:wrap;margin:8px 0 10px}
.cycle-sex label{display:flex;flex-direction:column;gap:4px;font:500 12px var(--l-font);color:var(--l-muted)}
html body .cycle-sex input[type=time]{min-height:44px;padding:0 12px;border-radius:12px;border:1px solid var(--l-line)!important;background:var(--l-raised)!important;color:var(--l-text)!important;font:600 15px var(--l-font)}
.cycle-sex .ql-chip{min-height:44px}
.cycle-sex-list{margin:0 0 8px}
.cycle-sex-list li{align-items:center}
.cycle-quick{margin:4px 0 0}
.cycle-history{align-items:start}
.cycle-history>div{display:flex;flex-direction:column;gap:8px;min-width:0}


/* ----- Landing page motion: sections rise in on scroll, example widgets move. Text and layout are unchanged. ----- */
@keyframes ll-rise{from{opacity:0;transform:translateY(30px) scale(.985)}to{opacity:1;transform:none}}
@keyframes ll-draw{from{stroke-dashoffset:163.4}}
@keyframes ll-fill{0%,8%{background:#1d2a21;transform:scaleX(.6)}22%,100%{background:var(--cine-lime,#d7fb73);transform:none}}
@keyframes ll-mode{0%,23%{background:#c8f560;color:#11160a}26%,100%{background:transparent;color:#9aa3ad}}
@keyframes ll-glow{0%,100%{box-shadow:0 0 0 0 #c8f56000}50%{box-shadow:0 0 0 7px #c8f56026}}
@keyframes ll-nudge{0%,60%,100%{transform:none}75%{transform:translate(4px,-4px)}}
@keyframes ll-pop{0%,70%,100%{transform:scale(1)}80%{transform:scale(1.18)}}
.launch-cinematic .ll-thumbs .ll-loop{position:relative;display:block;border-radius:12px;overflow:hidden}
.launch-cinematic .ll-thumbs .ll-loop img{display:block}
.launch-cinematic .ll-thumbs .ll-loop-b{position:absolute;inset:0;height:100%;opacity:0}
/* Under "reduce motion" the page's own rule (cinematic-landing.css) switches all of this off until the visitor presses the page motion button. */
@media all{
 .launch-cinematic .ll-thumbs .ll-loop-b{animation:ml-rep 3.6s linear infinite}
 .launch-cinematic .ll-thumbs .ll-loop:nth-child(2) .ll-loop-b{animation-delay:-.9s}
 .launch-cinematic .ll-thumbs .ll-loop:nth-child(3) .ll-loop-b{animation-delay:-1.8s}
 .launch-cinematic .ll-thumbs .ll-loop:nth-child(4) .ll-loop-b{animation-delay:-2.7s}
 .launch-cinematic .ll-allin-modes i{animation:ll-mode 8s linear infinite}
 .launch-cinematic .ll-allin-modes i:nth-child(2){animation-delay:-6s}
 .launch-cinematic .ll-allin-modes i:nth-child(3){animation-delay:-4s}
 .launch-cinematic .ll-allin-modes i:nth-child(4){animation-delay:-2s}
 .launch-cinematic .ll-allin-workout b{animation:ll-glow 2.6s ease-in-out infinite}
 .launch-cinematic .ll-allin-meal i{display:inline-grid;animation:ll-pop 3.4s ease-in-out infinite}
 .launch-cinematic .ll-meter i.on{transform-origin:left;animation:ll-fill 4.5s ease-out infinite}
 .launch-cinematic .ll-meter i.on:nth-child(2){animation-delay:.35s}
 .launch-cinematic .ll-meter i.on:nth-child(3){animation-delay:.7s}
 .launch-cinematic .launch-cta>span,.launch-cinematic .launch-nav-join>span{display:inline-block;animation:ll-nudge 2.4s ease-in-out infinite}
 .launch-cinematic .ll-card,.launch-cinematic .ll-allin-list article,.launch-cinematic .gym-friction article{transition:transform .25s ease,border-color .25s ease}
 @media(hover:hover){.launch-cinematic .ll-card:hover,.launch-cinematic .ll-allin-list article:hover,.launch-cinematic .gym-friction article:hover{transform:translateY(-4px);border-color:#d7fb7366}}
 @supports(animation-timeline:view()){
  .launch-cinematic :is(.ll-standout-head,.ll-card,.ll-allin-mock,.ll-allin-list article,.ll-proof span,.gym-friction article,.gym-friction>div,.launch-section-heading,.launch-three-steps>*,.launch-progress-art,.launch-feature-copy,.launch-evidence-card,.launch-reward-rule,.launch-contributor-art,.launch-prices>*,.launch-faq details){animation:ll-rise linear both;animation-timeline:view();animation-range:entry 0% cover 24%}
  .launch-cinematic :is(.ll-card,.ll-allin-list article,.ll-proof span,.gym-friction article,.launch-three-steps>*,.launch-prices>*):nth-child(even){animation-range:entry 8% cover 30%}
  .launch-cinematic .ll-allin-value{animation:ll-draw linear both;animation-timeline:view();animation-range:entry 30% cover 45%}
 }
}


/* ----- Idea Factory: search, issues and "already posted" matches ----- */
.idea-kind{align-self:flex-start;width:auto}
.idea-kind button{min-width:84px;justify-content:center}
.idea-find{gap:12px}
.idea-search{display:flex;align-items:center;gap:10px;min-height:52px;padding:0 16px;border-radius:16px;border:1.5px solid var(--l-line2,var(--l-line));background:var(--l-raised)}
.idea-search:focus-within{border-color:var(--l-accent-line);box-shadow:0 0 0 3px var(--l-accent-soft)}
.idea-search span{font-size:22px;line-height:1;color:var(--l-muted)}
html body .idea-search input{flex:1;min-width:0;border:0!important;outline:0!important;background:transparent!important;box-shadow:none!important;color:var(--l-text)!important;font:600 16px var(--l-font);padding:0;min-height:48px}
.idea-filter-row{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}
.idea-similar{display:flex;flex-direction:column;gap:6px}
.idea-similar:empty{display:none}
html body .idea-match{display:grid;grid-template-columns:auto minmax(0,1fr);grid-template-areas:"likes title" "likes meta";gap:0 12px;align-items:center;text-align:left;min-height:52px;padding:8px 12px;border-radius:14px;border:1px solid var(--l-line)!important;background:var(--l-raised)!important;color:var(--l-text)!important;cursor:pointer;box-shadow:none!important}
.idea-match span{grid-area:likes;font:800 13px var(--l-font);padding:6px 10px;border-radius:10px;background:var(--l-surface);border:1px solid var(--l-line)}
.idea-match[aria-pressed=true] span{background:var(--l-accent);border-color:var(--l-accent);color:var(--l-accent-ink)}
.idea-match b{grid-area:title;font:700 15px/1.3 var(--l-font);overflow-wrap:anywhere}
.idea-match i{grid-area:meta;font:500 12px var(--l-font);font-style:normal;color:var(--l-muted)}
.idea-status.is-issue{border-color:var(--l-warn);color:var(--l-warn)}

/* ----- Health log: water glasses and the sleep arc ----- */
@keyframes hub-rise-in{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
@keyframes hub-twinkle{0%,100%{opacity:.25}50%{opacity:1}}
.hub-pretty{position:relative;overflow:hidden;animation:hub-rise-in .35s ease both}
.hub-pretty::before{content:"";position:absolute;inset:0 0 auto 0;height:120px;pointer-events:none;opacity:.5}
.hub-pretty>*{position:relative}
.hub-water-card::before{background:radial-gradient(120% 100% at 100% 0,color-mix(in srgb,var(--hub-water) 26%,transparent),transparent 70%)}
.hub-sleep-card::before{background:radial-gradient(120% 100% at 100% 0,color-mix(in srgb,var(--hub-sleep) 28%,transparent),transparent 70%)}
.hub-big{font:800 34px/1 var(--l-display);letter-spacing:-.03em;color:var(--l-text);font-variant-numeric:tabular-nums}
.hub-big i{font:600 15px var(--l-font);font-style:normal;color:var(--l-muted);letter-spacing:0}
.hub-glasses{display:grid;grid-template-columns:repeat(auto-fill,minmax(40px,1fr));gap:8px}
html body .hub-glass{display:grid;place-items:center;min-height:56px;padding:6px 0;border-radius:14px;border:1px solid var(--l-line)!important;background:var(--l-raised)!important;cursor:pointer;box-shadow:none!important;transition:transform .15s ease,border-color .2s ease}
.hub-glass:active{transform:scale(.92)}
.hub-glass svg{width:26px;height:34px;overflow:visible}
.hub-glass-rim{fill:none;stroke:var(--l-muted);stroke-width:1.8;stroke-linejoin:round}
.hub-glass-water{fill:var(--hub-water);opacity:0;transition:d .35s ease,opacity .35s ease}
.hub-glass.is-full{border-color:color-mix(in srgb,var(--hub-water) 55%,transparent)!important}
.hub-glass.is-full .hub-glass-water{opacity:.95}
.hub-glass.is-full .hub-glass-rim{stroke:var(--hub-water)}
.hub-glass.is-extra{border-style:dashed!important}
.hub-meter{height:8px;border-radius:999px;background:var(--l-raised);border:1px solid var(--l-line);overflow:hidden}
.hub-meter i{display:block;height:100%;border-radius:inherit;background:linear-gradient(90deg,color-mix(in srgb,currentColor 60%,transparent),currentColor);transition:width .4s ease}
.hub-meter.hub-water{color:var(--hub-water)}
.hub-night{position:relative;display:grid;place-items:center;max-width:260px;width:100%;margin:0 auto}
.hub-night svg{width:100%;height:auto;overflow:visible}
.hub-night-track{fill:none;stroke:var(--l-line);stroke-width:9;stroke-linecap:round}
.hub-night-value{fill:none;stroke:var(--hub-sleep);stroke-width:9;stroke-linecap:round;transition:stroke-dashoffset .5s ease}
.hub-star{fill:var(--hub-sleep);animation:hub-twinkle 3.2s ease-in-out infinite}
.hub-star.s2{animation-delay:1.1s}.hub-star.s3{animation-delay:2.1s}
.hub-night-text{position:absolute;left:0;right:0;bottom:2px;display:flex;flex-direction:column;align-items:center}
.hub-night-text strong{font:800 40px/1 var(--l-display);letter-spacing:-.03em;color:var(--l-text);font-variant-numeric:tabular-nums}
.hub-night-text strong i{font:600 16px var(--l-font);font-style:normal;color:var(--l-muted)}
.hub-night-text span{font:500 13px var(--l-font);color:var(--l-muted)}
.hub-sleep-quick{margin:4px 0 0}
.hub-sleep-quick .ql-chip{flex:1;min-width:52px}

/* ----- Cycle: wheel, softer cards ----- */
.cycle-summary,.cycle-daycard{position:relative;overflow:hidden}
.cycle-summary::before{content:"";position:absolute;inset:0 0 auto 0;height:160px;pointer-events:none;background:radial-gradient(110% 100% at 0 0,color-mix(in srgb,var(--hub-cycle) 24%,transparent),transparent 70%)}
.cycle-summary>*{position:relative}
.cycle-hero{display:flex;align-items:center;gap:18px}
.cycle-hero-text{display:flex;flex-direction:column;gap:6px;min-width:0}
.cycle-wheel{position:relative;flex:none;width:112px;height:112px}
.cycle-wheel svg{width:100%;height:100%;overflow:visible}
.cw-track{fill:none;stroke:var(--l-line);stroke-width:9}
.cw-period{fill:none;stroke:var(--hub-cycle);stroke-width:9;stroke-linecap:round}
.cw-today{fill:var(--l-text);stroke:var(--l-surface);stroke-width:3}
.cw-text{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;line-height:1}
.cw-text small{font:700 10px var(--l-font);letter-spacing:.12em;text-transform:uppercase;color:var(--l-muted)}
.cw-text strong{font:800 34px/1.05 var(--l-display);letter-spacing:-.03em;color:var(--l-text)}
.cw-text span{font:500 12px var(--l-font);color:var(--l-muted)}
.hub-activity-card .cycle-hero{margin-bottom:2px}
.cycle-month .cycle-day{transition:transform .12s ease,background .2s ease}
.cycle-month .cycle-day:not(:disabled):active{transform:scale(.9)}
.cycle-month .cycle-day.is-period{background:linear-gradient(160deg,color-mix(in srgb,var(--hub-cycle) 82%,#fff),var(--hub-cycle))!important;box-shadow:0 4px 12px color-mix(in srgb,var(--hub-cycle) 35%,transparent)}
.cycle-month .cycle-day.is-period.is-today{box-shadow:0 0 0 2px var(--l-text),0 4px 12px color-mix(in srgb,var(--hub-cycle) 35%,transparent)}
.cycle-daycard .ql-chip[data-cycle-act=period][aria-pressed=true],.cycle-daycard .ql-chip[data-cycle-act=spotting][aria-pressed=true]{background:var(--hub-cycle)!important;border-color:var(--hub-cycle)!important;color:#fff!important}
.cycle-daycard .ql-chip[data-cycle-act=pain][aria-pressed=true]{background:var(--l-warn)!important;border-color:var(--l-warn)!important;color:#1a1206!important}
.cycle-daycard .ql-chip[data-cycle-act=sex]{border-color:#b79cff}
.cycle-row-label{display:flex;align-items:center;gap:8px}
.cycle-row-label::before{content:"";width:8px;height:8px;border-radius:50%;background:var(--l-line)}
.cycle-row:nth-of-type(2) .cycle-row-label::before{background:var(--hub-cycle)}
.cycle-row:nth-of-type(3) .cycle-row-label::before{background:var(--l-warn)}
.cycle-row:nth-of-type(4) .cycle-row-label::before{background:#b79cff}
.cycle-row:nth-of-type(5) .cycle-row-label::before{background:var(--l-ok)}
@media(prefers-reduced-motion:reduce){.hub-pretty,.hub-star{animation:none}.hub-glass,.hub-glass-water,.hub-meter i,.hub-night-value,.cycle-month .cycle-day{transition:none}}
@media(max-width:420px){.cycle-wheel{width:96px;height:96px}.cw-text strong{font-size:28px}}


/* ----- Today tiles: tap-to-fill water drops and one-tap sleep hours ----- */
.hub-tile-actions{flex-wrap:wrap}
.hub-drops{flex:1 0 100%;display:flex;flex-wrap:wrap;gap:5px;padding:2px 0 4px}
html body .hub-tile-actions .hub-drop{flex:none;width:22px;min-width:22px;height:28px;min-height:28px;padding:0;border-radius:50% 50% 50% 50%/62% 62% 38% 38%;border:1.5px solid color-mix(in srgb,var(--hub-water) 45%,var(--l-line))!important;background:transparent!important;cursor:pointer;transition:background .2s ease,transform .15s ease}
html body .hub-tile-actions .hub-drop.is-full{background:var(--hub-water)!important;border-color:var(--hub-water)!important}
.hub-tile-actions .hub-drop:active{transform:scale(.85)}
html body .hub-tile-actions .hub-sleep-pick{flex:1;min-width:38px}
html body .hub-tile-actions .hub-sleep-pick[aria-pressed=true]{background:var(--hub-sleep)!important;border-color:var(--hub-sleep)!important;color:#fff!important}
@media(prefers-reduced-motion:reduce){.hub-tile-actions .hub-drop{transition:none}}


/* ----- Me: "About you" choice that decides whether cycle tracking is offered ----- */
.hub-me-profile{flex-direction:row;align-items:center;justify-content:space-between;gap:14px;flex-wrap:wrap;margin-bottom:16px}
.hub-me-profile p{margin:4px 0 0}
.hub-me-card[hidden]{display:none!important}
.setup-form .field-label small{font-weight:500;color:var(--l-muted);letter-spacing:0;text-transform:none}
