:root{--enamel:#f5f6f2;--surface:#fff;--ink:#18202e;--muted:#5d6677;--line:#e1e4e8;--soft:#eceef0;--cobalt:#2143b0;--cobalt-soft:#e4e9f8;--yolk:#e9a41c;--yolk-soft:#fbefd2;--leaf:#2f7d4f;--tomato:#c2412b;--shadow:0 1px 0 #18202e0a, 0 8px 24px -12px #18202e2e;--display:"Bricolage Grotesque", "Avenir Next", system-ui, sans-serif;--text:"Atkinson Hyperlegible Next", "Atkinson Hyperlegible", system-ui, sans-serif;--radius-lg:22px;--radius:14px;--radius-sm:9px;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}@media (prefers-color-scheme:dark){:root:not([data-theme=light]){--enamel:#0f1420;--surface:#171d2b;--ink:#e9ecf3;--muted:#9ba4b6;--line:#283044;--soft:#1f2636;--cobalt:#8ea6ff;--cobalt-soft:#222c4a;--yolk:#f3bd48;--yolk-soft:#3a3020;--leaf:#6cc08e;--tomato:#ef7c66;--shadow:0 1px 0 #0000004d, 0 10px 30px -16px #000000b3;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}}*,:before,:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{background:var(--enamel);color:var(--ink);font:400 17px/1.5 var(--text);-webkit-font-smoothing:antialiased;margin:0}h1,h2,h3{font-family:var(--display);letter-spacing:-.01em;text-wrap:balance;margin:0;font-weight:700}p{margin:0}a{color:inherit;text-decoration:none}button{font:inherit;color:inherit;cursor:pointer;background:0 0;border:0;padding:0}input{font:inherit;color:inherit}:focus-visible{outline:3px solid var(--cobalt);outline-offset:2px;border-radius:6px}@media (prefers-reduced-motion:reduce){*{transition:none!important;animation:none!important}}.boot{min-height:60vh}.app{min-height:100dvh}.content{max-width:680px;padding:calc(env(safe-area-inset-top) + 20px) 16px calc(96px + env(safe-area-inset-bottom));margin:0 auto}.tabs{z-index:10;padding:6px 8px calc(6px + env(safe-area-inset-bottom));background:color-mix(in srgb, var(--surface) 88%, transparent);-webkit-backdrop-filter:blur(14px)saturate(1.4);backdrop-filter:blur(14px)saturate(1.4);border-top:1px solid var(--line);grid-template-columns:repeat(4,1fr);display:grid;position:fixed;inset:auto 0 0}.tabs .brand,.tabs .signout{display:none}.tab{color:var(--muted);border-radius:12px;flex-direction:column;align-items:center;gap:2px;padding:6px 0;font-size:12px;font-weight:500;display:flex}.tab.is-active{color:var(--cobalt)}.tab.is-active svg{stroke-width:2.3px}@media (width>=900px){.tabs{border-top:0;border-right:1px solid var(--line);background:var(--surface);-webkit-backdrop-filter:none;backdrop-filter:none;flex-direction:column;gap:4px;width:220px;padding:28px 16px;display:flex;inset:0 auto 0 0}.tabs .brand{font:800 22px/1 var(--display);align-items:center;gap:10px;margin:0 8px 24px;display:flex}.brand svg{width:34px;height:34px}.brand-ring{fill:none;stroke:var(--cobalt);stroke-width:5px}.brand-yolk{fill:var(--yolk)}.tab{flex-direction:row;gap:12px;padding:10px 12px;font-size:16px}.tab.is-active{background:var(--cobalt-soft)}.tabs .signout{text-align:left;margin-top:auto;padding-left:12px;display:block}.content{max-width:none;margin-left:220px;padding:44px 40px 64px}.content>*{max-width:680px;margin-left:auto;margin-right:auto}}.page-head{margin-bottom:20px}.page-head h1{font-size:clamp(34px,9vw,46px);font-weight:800;line-height:1}.page-lede{color:var(--muted);max-width:34em;margin-top:8px}.day-kicker{color:var(--muted);margin-bottom:4px;font-size:15px;font-weight:500}.empty{color:var(--muted);padding:16px 0}.empty a{color:var(--cobalt);text-decoration:underline}.empty-page{padding:12vh 0}.empty-page h1{margin-bottom:8px;font-size:34px}.empty-page p{color:var(--muted)}.banner{background:var(--yolk-soft);border-radius:var(--radius-sm);justify-content:space-between;gap:12px;margin-bottom:16px;padding:10px 14px;display:flex}.banner button{font-weight:700}.form-error{color:var(--tomato);margin-top:10px;font-weight:500}.back{color:var(--muted);align-items:center;gap:4px;margin:-4px 0 12px -6px;padding:6px;font-weight:500;display:inline-flex}.btn{background:var(--soft);border-radius:999px;justify-content:center;align-items:center;gap:6px;min-height:46px;padding:0 20px;font-weight:700;transition:transform .12s,background .12s;display:inline-flex}.btn:active{transform:scale(.98)}.btn:disabled{opacity:.5;cursor:default}.btn.primary{background:var(--cobalt);color:#fff}@media (prefers-color-scheme:dark){:root:not([data-theme=light]) .btn.primary{color:#0f1420}}.btn.wide{width:100%}.btn.small{min-height:38px;padding:0 14px;font-size:15px}.btn.link{color:var(--cobalt);background:0 0;min-height:40px}.plate{aspect-ratio:1;flex:none;margin:0;position:relative}.plate svg{width:100%;height:100%;display:block}.plate-dish{fill:var(--surface);stroke:var(--line);stroke-width:1px}.plate-track{fill:none;stroke:var(--soft);stroke-width:14px}.plate-track.thin{stroke-width:7px}.plate-arc{fill:none;stroke:var(--cobalt);stroke-width:14px;transition:stroke .2s,opacity .2s}.plate-arc.is-ate{stroke:var(--leaf)}.plate-arc.is-skipped{opacity:0}.plate-arc.is-swapped{stroke:var(--yolk)}.plate-protein{fill:none;stroke:var(--yolk);stroke-width:7px;stroke-linecap:round;transition:stroke-dasharray .4s}.plate figcaption{text-align:center;flex-direction:column;justify-content:center;align-items:center;display:flex;position:absolute;inset:0}.plate-grams{font:800 52px/.95 var(--display);letter-spacing:-.03em}.plate-grams small{margin-left:1px;font-size:.45em;font-weight:700}.plate-sub{color:var(--muted);margin-top:2px;font-size:13px}.plate-kcal{font:700 14px/1.4 var(--display);background:var(--cobalt-soft);color:var(--cobalt);border-radius:999px;margin-top:8px;padding:2px 10px}.plate-kcal.is-off{background:var(--yolk-soft);color:var(--ink)}.mini-plate{flex:none;width:44px;height:44px}.mini-plate .plate-track,.mini-plate .plate-arc{stroke-width:5px}.mini-plate .plate-protein{stroke-width:4px}.day-head{margin-bottom:18px}.day-nav{justify-content:space-between;margin:-6px -6px 10px;display:flex}.day-step{color:var(--muted);border-radius:8px;padding:6px;font-size:15px;font-weight:500}.day-title{letter-spacing:-.035em;font-size:clamp(46px,14vw,72px);font-weight:800;line-height:.92}.day-label{font-family:var(--display);color:var(--cobalt);margin-top:6px;font-size:20px;font-weight:600}.day-summary{background:var(--surface);border-radius:var(--radius-lg);box-shadow:var(--shadow);grid-template-columns:1fr;justify-items:center;gap:18px;margin-bottom:16px;padding:22px 18px;display:grid}.day-summary .plate{width:min(240px,68vw)}.targets{gap:12px;width:100%;margin:0;display:grid}.targets div{grid-template-columns:82px 1fr;align-items:baseline;display:grid}.targets dt{color:var(--muted);font-size:14px}.targets dd{flex-wrap:wrap;align-items:baseline;column-gap:6px;margin:0;display:flex}.targets dd strong{font:800 20px/1.2 var(--display)}.targets dd span{color:var(--muted);flex-basis:100%;font-size:14px}.targets dd span.ok{color:var(--leaf)}.targets dd span.warn{color:var(--tomato)}@media (width>=560px){.day-summary{grid-template-columns:auto 1fr;place-items:center start;gap:28px;padding:24px 28px}.day-summary .plate{width:220px}}.day-note{border-left:3px solid var(--yolk);color:var(--ink);max-width:36em;margin:0 0 18px;padding:4px 0 4px 14px}.prep-callout{background:var(--cobalt);color:#fff;border-radius:var(--radius);align-items:center;gap:12px;margin-bottom:18px;padding:14px 16px;display:flex}.prep-callout-text{flex-direction:column;flex:1;display:flex}.prep-callout-text span{opacity:.85;font-size:14px}.prep-callout-text strong{font-family:var(--display);font-size:18px}@media (prefers-color-scheme:dark){:root:not([data-theme=light]) .prep-callout{color:#0f1420}}.meals{gap:10px;margin:0;padding:0;list-style:none;display:grid}.meal{background:var(--surface);border-radius:var(--radius);box-shadow:var(--shadow);grid-template-columns:40px 1fr auto;grid-template-areas:"check body macros"".actions actions";align-items:start;column-gap:12px;padding:14px 14px 10px;transition:opacity .2s;display:grid}.meal.is-ahead{grid-template-columns:1fr auto;grid-template-areas:"body macros";padding-bottom:14px}.meal-check{border:2px solid var(--line);color:#0000;border-radius:50%;grid-area:check;place-items:center;width:36px;height:36px;margin-top:2px;transition:background .15s,border-color .15s,color .15s;display:grid}.meal-check:hover{border-color:var(--leaf)}.meal.is-ate .meal-check{background:var(--leaf);border-color:var(--leaf);color:#fff}.meal-body{flex-direction:column;grid-area:body;min-width:0;display:flex}.meal-slot{color:var(--muted);font-size:13px;font-weight:500}.meal-name{font-family:var(--display);margin-top:1px;font-size:19px;font-weight:700;line-height:1.2}.meal-summary{color:var(--muted);margin-top:3px;font-size:15px}.meal-recipe{color:var(--cobalt);align-items:center;gap:2px;margin-top:6px;font-size:14px;font-weight:700;display:inline-flex}.meal-body.has-recipe:hover .meal-name{color:var(--cobalt)}.meal-macros{text-align:right;flex-direction:column;grid-area:macros;display:flex}.meal-protein{font:800 20px/1.1 var(--display)}.meal-kcal{color:var(--muted);white-space:nowrap;font-size:13px}.meal-actions{grid-area:actions;gap:4px;margin-top:8px;display:flex}.meal-actions button{color:var(--muted);border-radius:999px;padding:4px 10px;font-size:13px}.meal-actions button:hover{background:var(--soft)}.meal-actions button.on{background:var(--yolk-soft);color:var(--ink);font-weight:700}.meal.is-skipped{opacity:.55}.meal.is-skipped .meal-name{text-decoration:line-through;text-decoration-thickness:1.5px}.day-foot{color:var(--muted);margin-top:16px;font-size:14px}.week-list{gap:8px;margin:0 0 28px;padding:0;list-style:none;display:grid}.week-day{background:var(--surface);border-radius:var(--radius);box-shadow:var(--shadow);align-items:center;gap:14px;padding:12px 16px;display:flex;position:relative}.week-day.is-today{outline:2px solid var(--cobalt);outline-offset:-2px}.week-day.is-past{opacity:.7}.week-date{flex-direction:column;flex:1;min-width:0;display:flex}.week-date strong{font-family:var(--display);font-size:19px}.week-date span{color:var(--muted);font-size:14px}.week-nums{text-align:right;flex-direction:column;display:flex}.week-nums strong{font:800 19px/1.1 var(--display)}.week-nums span{color:var(--muted);font-size:13px}.week-eaten{color:var(--leaf);font-size:11px;font-weight:700;position:absolute;top:8px;right:10px}.suggestion{background:var(--yolk-soft);border-radius:var(--radius-lg);margin-bottom:24px;padding:20px}.suggestion h2{margin-bottom:4px;font-size:22px}.suggestion p{color:var(--ink);opacity:.8}.suggestion-link{background:var(--surface);border-radius:var(--radius-sm);font-family:var(--display);justify-content:space-between;align-items:center;margin-top:12px;padding:12px 16px;font-size:18px;display:flex}.rules{margin-bottom:22px}.rules h2{margin-bottom:8px;font-size:20px}.rules ul{color:var(--ink);margin:0;padding-left:20px}.rules li{max-width:36em;margin:4px 0}.rules li::marker{color:var(--cobalt)}.recipe-head{margin-bottom:24px}.recipe-head h1{letter-spacing:-.025em;font-size:clamp(34px,9vw,48px);font-weight:800;line-height:1}.recipe-facts{gap:10px;margin:18px 0 6px;display:flex}.recipe-facts div{background:var(--surface);border-radius:var(--radius);box-shadow:var(--shadow);flex:1;padding:10px 12px}.recipe-facts dt{color:var(--muted);align-items:center;gap:4px;font-size:13px;display:flex}.recipe-facts dd{font:800 24px/1.1 var(--display);margin:0}.recipe-serves{color:var(--muted);margin:6px 0 16px;font-size:14px}.cook-toggle{width:100%}.cook-hint{color:var(--muted);text-align:center;margin-top:8px;font-size:14px}.recipe-block{margin-bottom:26px}.recipe-block h2{margin-bottom:10px;font-size:22px}.ingredients,.aisle ul{background:var(--surface);border-radius:var(--radius);box-shadow:var(--shadow);margin:0;padding:0;list-style:none;overflow:hidden}.ingredients li+li,.aisle li+li{border-top:1px solid var(--line)}.ingredients label,.aisle label{cursor:pointer;align-items:center;gap:12px;min-height:52px;padding:12px 16px;display:flex}.ingredients input,.aisle input{opacity:0;pointer-events:none;position:absolute}.tick{border:2px solid var(--line);color:#0000;border-radius:7px;flex:none;place-items:center;width:24px;height:24px;transition:background .12s,border-color .12s;display:grid}label.is-checked .tick{background:var(--leaf);border-color:var(--leaf);color:#fff}label:has(input:focus-visible){outline:3px solid var(--cobalt);outline-offset:-3px}.ing-amount{min-width:72px;font-weight:700}.ing-item{flex:1}.ingredients label.is-checked .ing-item,.ingredients label.is-checked .ing-amount{color:var(--muted);text-decoration:line-through}.steps{gap:10px;margin:0;padding:0;list-style:none;display:grid}.steps button{text-align:left;background:var(--surface);border-radius:var(--radius);width:100%;box-shadow:var(--shadow);gap:14px;padding:14px 16px;line-height:1.55;display:flex}.step-n{background:var(--cobalt-soft);width:30px;height:30px;color:var(--cobalt);font:800 15px/1 var(--display);border-radius:50%;flex:none;place-items:center;display:grid}.steps li.is-done button{opacity:.5}.steps li.is-done .step-n{background:var(--leaf);color:#fff}.tips p{border-left:3px solid var(--yolk);max-width:36em;margin-bottom:8px;padding-left:14px}.recipe.is-cooking{font-size:21px}.recipe.is-cooking .steps button{padding:18px;font-size:21px}.recipe.is-cooking .ingredients label{font-size:20px}.shop-bar{flex-wrap:wrap;align-items:center;gap:12px;margin-top:14px;display:flex}.shop-progress{background:var(--soft);border-radius:999px;flex:1;min-width:120px;height:8px;overflow:hidden}.shop-progress span{background:var(--leaf);border-radius:inherit;height:100%;transition:width .25s;display:block}.shop-count{font:700 15px/1 var(--display)}.switch{color:var(--muted);cursor:pointer;align-items:center;gap:6px;font-size:14px;display:inline-flex}.switch input{accent-color:var(--cobalt);width:18px;height:18px}.aisle{margin-bottom:22px}.aisle h2{margin-bottom:8px;font-size:20px}.aisle-text{flex-direction:column;flex:1;min-width:0;display:flex}.aisle-name{font-weight:500}.aisle-note{color:var(--muted);font-size:14px}.aisle-qty{color:var(--muted);text-align:right;white-space:nowrap;font-size:14px}.aisle label.is-checked .aisle-name{color:var(--muted);text-decoration:line-through}.timeline{margin:0;padding:0 0 0 4px;list-style:none;position:relative}.timeline:before{content:"";background:var(--line);width:2px;position:absolute;top:12px;bottom:12px;left:31px}.timeline li{margin-bottom:10px;position:relative}.timeline-step{text-align:left;align-items:flex-start;gap:16px;width:100%;display:flex}.timeline-at{text-align:center;z-index:1;background:var(--cobalt);color:#fff;width:56px;font:800 15px/1 var(--display);border-radius:999px;flex:none;padding:6px 0;position:relative}@media (prefers-color-scheme:dark){:root:not([data-theme=light]) .timeline-at{color:#0f1420}}.timeline-text{background:var(--surface);border-radius:var(--radius);box-shadow:var(--shadow);flex:1;padding:12px 16px;line-height:1.55}.timeline li.is-done .timeline-at{background:var(--leaf)}.timeline li.is-done .timeline-text{opacity:.55}.timeline-recipe{color:var(--cobalt);align-items:center;gap:2px;margin:6px 0 0 72px;font-size:15px;font-weight:700;display:inline-flex}.panel{background:var(--surface);border-radius:var(--radius-lg);box-shadow:var(--shadow);margin-bottom:18px;padding:20px}.panel-head{justify-content:space-between;align-items:center;gap:12px;margin-bottom:10px;display:flex}.panel-head h2{font-size:24px}.panel-stat{color:var(--muted);margin-bottom:8px}.panel-stat strong{color:var(--ink);font-family:var(--display);font-size:20px}.panel-foot{color:var(--muted);margin-top:12px;font-size:14px}.weight-stats{grid-template-columns:repeat(3,1fr);gap:8px;margin-bottom:10px;display:grid}.weight-stats div{flex-direction:column;display:flex}.weight-stats strong{font:800 26px/1.1 var(--display)}.weight-stats span{color:var(--muted);font-size:13px}.weight-chart{width:100%;height:auto;display:block}.chart-target{stroke:var(--yolk);stroke-width:1.5px;stroke-dasharray:4 4}.chart-dot{fill:var(--muted);opacity:.55}.chart-avg{fill:none;stroke:var(--cobalt);stroke-width:2.5px;stroke-linejoin:round;stroke-linecap:round}.chart-legend{color:var(--muted);align-items:center;gap:6px;margin-top:6px;font-size:13px;display:flex}.chart-legend span{border-radius:2px;width:16px;height:3px;display:inline-block}.lg-avg{background:var(--cobalt)}.lg-target{background:var(--yolk);margin-left:10px}.inline-form{margin-top:16px}.inline-form label,.field label{margin-bottom:6px;font-size:14px;font-weight:700;display:block}.inline-row{align-items:center;gap:8px;display:flex}.unit{color:var(--muted)}input[type=date],input:not([type]),input[inputmode]{border-radius:var(--radius-sm);border:1.5px solid var(--line);background:var(--enamel);width:100%;min-height:46px;padding:0 14px}.inline-row input{width:120px}input:focus{border-color:var(--cobalt);outline:none}.exercise-form{background:var(--enamel);border-radius:var(--radius);gap:14px;margin:6px 0 14px;padding:16px;display:grid}.exercise-form input{background:var(--surface)}.field-row{grid-template-columns:1.4fr 1fr;gap:12px;display:grid}.chips{flex-wrap:wrap;gap:6px;display:flex}.chips button{background:var(--surface);border:1.5px solid var(--line);border-radius:999px;padding:7px 14px;font-size:15px;font-weight:500}.chips button.on{background:var(--cobalt);border-color:var(--cobalt);color:#fff}@media (prefers-color-scheme:dark){:root:not([data-theme=light]) .chips button.on{color:#0f1420}}.form-actions{justify-content:flex-end;gap:8px;display:flex}.log{margin:0;padding:0;list-style:none}.log li{align-items:center;gap:14px;padding:12px 0;display:flex}.log li+li{border-top:1px solid var(--line)}.log-date{width:52px;color:var(--muted);flex-direction:column;font-size:13px;display:flex}.log-date strong{color:var(--ink);font-family:var(--display);font-size:16px}.log-body{flex-direction:column;flex:1;display:flex}.log-body span{color:var(--muted);font-size:15px}.signout-mobile{margin:8px auto 0;display:block}@media (width>=900px){.signout-mobile{display:none}}.icon-btn{width:40px;height:40px;color:var(--muted);border-radius:50%;place-items:center;display:grid}.icon-btn:hover{background:var(--soft);color:var(--tomato)}.auth{text-align:center;flex-direction:column;align-items:stretch;max-width:380px;min-height:100dvh;margin:0 auto;padding:16vh 20px 40px;display:flex}.auth-mark{width:96px;margin:0 auto 22px}.auth-ring{fill:none;stroke:var(--cobalt);stroke-width:22px}.auth-yolk{fill:var(--yolk)}.auth h1{letter-spacing:-.03em;font-size:44px;font-weight:800}.auth-lede{color:var(--muted);margin:8px 0 28px}.auth-form{text-align:left;gap:10px;display:grid}.auth-form label{font-size:14px;font-weight:700}.auth-form input{letter-spacing:.08em;text-transform:uppercase}.codes{columns:2;text-align:left;background:var(--surface);border-radius:var(--radius);box-shadow:var(--shadow);margin:0 0 24px;padding:16px 16px 16px 40px;font:700 17px/1.9 ui-monospace,SF Mono,monospace}@media (width>=1180px){.recipe{grid-template-columns:1fr 1.25fr;column-gap:36px;max-width:980px;display:grid}.recipe .back,.recipe-head{grid-column:1/-1}.recipe .tips{grid-column:2}.content>.recipe{max-width:980px}}
