:root{color-scheme:light dark;--bg: #f6f1e8;--surface: #fffcf6;--surface-2: #ede6d9;--ink: #2b2622;--ink-2: #6b625a;--line: rgb(43 38 34 / .12);--accent: #3f7d5c;--accent-ink: #ffffff;--accent-soft: #dce9e0;--warn: #b5462a;--chrome: rgb(246 241 232 / .78);--shadow: 0 1px 2px rgb(43 38 34 / .06), 0 8px 24px rgb(43 38 34 / .08);--ease-out: cubic-bezier(.23, 1, .32, 1);--ease-drawer: cubic-bezier(.32, .72, 0, 1);--radius: 14px;--gutter: 1rem;--tabbar-h: 3.5rem}@media (prefers-color-scheme: dark){:root{--bg: #1c1a17;--surface: #262320;--surface-2: #332f2a;--ink: #f1ebe2;--ink-2: #a99f94;--line: rgb(241 235 226 / .12);--accent: #7fb896;--accent-ink: #10261a;--accent-soft: #263a2e;--warn: #e8876a;--chrome: rgb(28 26 23 / .78);--shadow: 0 1px 2px rgb(0 0 0 / .3), 0 8px 24px rgb(0 0 0 / .3)}}html{font:-apple-system-body;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif;-webkit-tap-highlight-color:transparent;-webkit-text-size-adjust:100%;overscroll-behavior:none}@supports not (font: -apple-system-body){html{font-size:106.25%}}*,*:before,*:after{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--ink);line-height:1.45;min-height:100dvh}h1,h2,h3,p{margin:0}img{display:block;max-width:100%}input,textarea,select,button{font:inherit;color:inherit}input,textarea,select{font-size:max(16px,1rem)}button,a,[role=button],label.pressable{touch-action:manipulation;-webkit-user-select:none;user-select:none}button{background:none;border:0;padding:0;cursor:pointer}a{color:inherit}.num{font-variant-numeric:tabular-nums}.muted{color:var(--ink-2)}.visually-hidden{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:6px}.pressable{transition:transform .16s var(--ease-out),background-color .16s ease}.pressable:active{transform:scale(.97);transition-duration:80ms}.screen{padding:0 var(--gutter) calc(var(--tabbar-h) + env(safe-area-inset-bottom,0px) + 6rem);max-width:44rem;margin:0 auto}.screen.no-tabs{padding-bottom:calc(env(safe-area-inset-bottom,0px) + 7rem)}.topbar{position:sticky;top:0;z-index:10;margin:0 calc(var(--gutter) * -1);padding:calc(env(safe-area-inset-top,0px) + .5rem) var(--gutter) .5rem;background:var(--chrome);-webkit-backdrop-filter:blur(20px) saturate(180%);backdrop-filter:blur(20px) saturate(180%);display:flex;align-items:center;justify-content:space-between;gap:.5rem;min-height:calc(env(safe-area-inset-top,0px) + 3rem)}.large-title{font-size:2.1rem;line-height:1.1;font-weight:700;letter-spacing:-.02em;padding:.25rem 0 .75rem}.nav-btn{display:inline-flex;align-items:center;gap:.15rem;min-height:44px;padding:0 .25rem;color:var(--accent);font-weight:500}.nav-btn svg{width:1.4rem;height:1.4rem}.tabbar{position:fixed;inset:auto 0 0 0;z-index:20;display:grid;grid-template-columns:repeat(3,1fr);padding-bottom:env(safe-area-inset-bottom,0px);background:var(--chrome);-webkit-backdrop-filter:blur(20px) saturate(180%);backdrop-filter:blur(20px) saturate(180%);box-shadow:0 -1px 0 var(--line)}.tabbar a{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.1rem;min-height:var(--tabbar-h);text-decoration:none;font-size:.7rem;font-weight:600;color:var(--ink-2)}.tabbar a[aria-current=page]{color:var(--accent)}.tabbar svg{width:1.5rem;height:1.5rem}@media (prefers-reduced-transparency: reduce){.topbar,.tabbar{background:var(--bg);backdrop-filter:none;-webkit-backdrop-filter:none}}.btn{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;min-height:48px;padding:0 1.1rem;border-radius:999px;font-weight:600;background:var(--surface-2);color:var(--ink)}.btn svg{width:1.2rem;height:1.2rem}.btn.primary{background:var(--accent);color:var(--accent-ink)}.btn.danger{color:var(--warn)}.btn.block{width:100%}.btn[disabled]{opacity:.5}.fab{position:fixed;z-index:15;right:max(var(--gutter),env(safe-area-inset-right,0px));bottom:calc(var(--tabbar-h) + env(safe-area-inset-bottom,0px) + .85rem);box-shadow:var(--shadow)}.field{display:grid;gap:.35rem}.field>span{font-size:.8rem;font-weight:600;color:var(--ink-2)}.input{width:100%;min-height:48px;padding:.7rem .85rem;border:1px solid var(--line);border-radius:12px;background:var(--surface);outline:none;transition:border-color .15s ease}.input:focus{border-color:var(--accent)}textarea.input{min-height:8rem;resize:vertical;line-height:1.5}.search{display:flex;align-items:center;gap:.5rem;min-height:44px;padding:0 .75rem;background:var(--surface-2);border-radius:12px}.search svg{width:1.1rem;height:1.1rem;color:var(--ink-2);flex:none}.search input{flex:1;min-width:0;border:0;background:none;outline:none;padding:.6rem 0}.chips{display:flex;gap:.5rem;overflow-x:auto;scrollbar-width:none;margin:.75rem calc(var(--gutter) * -1) 0;padding:0 var(--gutter) .25rem}.chips::-webkit-scrollbar{display:none}.chip{flex:none;min-height:36px;padding:0 .85rem;border-radius:999px;border:1px solid var(--line);font-size:.85rem;font-weight:600;color:var(--ink-2);background:var(--surface)}.chip[aria-pressed=true]{background:var(--ink);border-color:var(--ink);color:var(--bg)}.segmented{display:grid;grid-auto-flow:column;grid-auto-columns:1fr;padding:3px;border-radius:12px;background:var(--surface-2)}.segmented button{min-height:40px;border-radius:9px;font-weight:600;font-size:.9rem;color:var(--ink-2);transition:background-color .16s ease,color .16s ease}.segmented button[aria-pressed=true]{background:var(--surface);color:var(--ink);box-shadow:0 1px 3px #0000001f}.stepper{display:inline-flex;align-items:center;gap:.25rem;background:var(--surface-2);border-radius:999px;padding:3px}.stepper button{width:40px;height:40px;border-radius:999px;display:grid;place-items:center}.stepper button svg{width:1.1rem;height:1.1rem}.stepper output{min-width:4.5rem;text-align:center;font-weight:600}.icon-btn{width:44px;height:44px;display:grid;place-items:center;border-radius:999px}.icon-btn svg{width:1.4rem;height:1.4rem}.recipe-list{list-style:none;margin:.5rem 0 0;padding:0;display:grid;gap:.6rem}.recipe-row{display:grid;grid-template-columns:1fr auto;align-items:center;gap:.25rem;padding:.6rem;border-radius:var(--radius);background:var(--surface);text-decoration:none;box-shadow:var(--shadow)}.recipe-link{display:grid;grid-template-columns:4rem 1fr;align-items:center;gap:.85rem;text-decoration:none;min-width:0}.thumb{width:4rem;height:4rem;border-radius:10px;object-fit:cover;background:var(--accent-soft);color:var(--accent);display:grid;place-items:center;font-weight:700;font-size:1.4rem}.recipe-row h2{font-size:1rem;font-weight:600;line-height:1.25}.recipe-row .meta{font-size:.8rem;color:var(--ink-2);margin-top:.15rem}.fav{color:var(--ink-2)}.fav[aria-pressed=true]{color:var(--warn)}.fav[aria-pressed=true] svg{fill:currentColor}.empty{text-align:center;padding:3rem 1rem;color:var(--ink-2);display:grid;gap:.75rem;justify-items:center}.empty h2{color:var(--ink);font-size:1.15rem}.hero{width:100%;aspect-ratio:16 / 10;object-fit:cover;border-radius:var(--radius);margin-top:.25rem;background:var(--surface-2)}.detail-title{font-size:1.75rem;line-height:1.15;font-weight:700;letter-spacing:-.015em;margin-top:1rem}.detail-meta{display:flex;flex-wrap:wrap;gap:.35rem .9rem;margin-top:.5rem;font-size:.85rem;color:var(--ink-2);align-items:center}.detail-meta a{color:var(--accent);text-decoration:none;font-weight:600}.actions{display:flex;gap:.5rem;margin-top:1rem;flex-wrap:wrap}.section-title{font-size:1.15rem;font-weight:700;margin:1.75rem 0 .75rem;display:flex;align-items:center;justify-content:space-between;gap:1rem}.ingredients{list-style:none;padding:0;margin:0;border-radius:var(--radius);background:var(--surface);box-shadow:var(--shadow)}.ingredients li{display:grid;grid-template-columns:minmax(5.5rem,auto) 1fr;gap:.75rem;padding:.7rem .9rem;border-top:1px solid var(--line)}.ingredients li:first-child{border-top:0}.ingredients .qty{font-weight:600;font-variant-numeric:tabular-nums}.ingredients .note{color:var(--ink-2);font-size:.85rem}.steps{padding:0;margin:0;list-style:none;counter-reset:step;display:grid;gap:1rem}.steps li{counter-increment:step;display:grid;grid-template-columns:2rem 1fr;gap:.5rem}.steps li:before{content:counter(step);font-weight:700;color:var(--accent);font-variant-numeric:tabular-nums}.form{display:grid;gap:1.1rem;margin-top:.5rem}.row-2{display:grid;grid-template-columns:1fr 1fr;gap:.75rem}.photo-pick{display:grid;place-items:center;gap:.25rem;aspect-ratio:16 / 9;border-radius:var(--radius);background:var(--surface-2);color:var(--ink-2);overflow:hidden;cursor:pointer}.photo-pick img{width:100%;height:100%;object-fit:cover}.photo-pick svg{width:1.75rem;height:1.75rem}.parsed{list-style:none;margin:.25rem 0 0;padding:0;font-size:.85rem;color:var(--ink-2);display:grid;gap:.2rem}.parsed b{color:var(--ink);font-weight:600;font-variant-numeric:tabular-nums}.save-bar{position:fixed;inset:auto 0 0 0;z-index:20;padding:.75rem var(--gutter) calc(.75rem + env(safe-area-inset-bottom,0px));background:var(--chrome);-webkit-backdrop-filter:blur(20px) saturate(180%);backdrop-filter:blur(20px) saturate(180%);box-shadow:0 -1px 0 var(--line)}.save-bar .btn{max-width:44rem;margin:0 auto;display:flex}.sheet{position:fixed;inset:auto 0 0 0;width:100%;max-width:40rem;max-height:92dvh;margin:0 auto;padding:0 var(--gutter) calc(1rem + env(safe-area-inset-bottom,0px));border:0;border-radius:22px 22px 0 0;background:var(--surface);color:var(--ink);overflow-y:auto;overscroll-behavior:contain;transform:translateY(0);transition:transform .32s var(--ease-drawer),overlay .32s allow-discrete,display .32s allow-discrete}.sheet:not([open]){transform:translateY(100%);transition-duration:.24s}@starting-style{.sheet[open]{transform:translateY(100%)}}.sheet::backdrop{background:#00000052;opacity:1;transition:opacity .3s ease,overlay .3s allow-discrete,display .3s allow-discrete}.sheet:not([open])::backdrop{opacity:0}@starting-style{.sheet[open]::backdrop{opacity:0}}.sheet-grabber{display:grid;place-items:center;height:1.6rem;touch-action:none;cursor:grab}.sheet-grabber:before{content:"";width:2.25rem;height:5px;border-radius:999px;background:var(--line)}.sheet-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:1rem}.sheet-head h2{font-size:1.25rem;font-weight:700}.sheet .stack{display:grid;gap:.9rem}.error{color:var(--warn);font-size:.9rem}.hint{font-size:.85rem;color:var(--ink-2)}.divider{border:0;border-top:1px solid var(--line);margin:.5rem 0}.spinner{width:1.1rem;height:1.1rem;border-radius:50%;border:2px solid currentColor;border-right-color:transparent;animation:spin .6s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.screen.with-action{padding-bottom:calc(var(--tabbar-h) + env(safe-area-inset-bottom,0px) + 7.5rem)}.topbar .segmented{margin-bottom:.25rem}.tabs-inline{display:flex;gap:1.25rem;margin-top:1rem;border-bottom:1px solid var(--line)}.tabs-inline button{min-height:44px;font-weight:600;color:var(--ink-2);border-bottom:2px solid transparent;margin-bottom:-1px;display:inline-flex;align-items:center;gap:.4rem}.tabs-inline button[aria-selected=true]{color:var(--ink);border-bottom-color:var(--accent)}.count{font-size:.75rem;min-width:1.4rem;padding:0 .4rem;border-radius:999px;background:var(--accent);color:var(--accent-ink);line-height:1.4rem;text-align:center}.pick-list{list-style:none;margin:.6rem 0 0;padding:0;border-radius:var(--radius);background:var(--surface);box-shadow:var(--shadow);overflow:hidden}.pick-row{display:flex;align-items:center;flex-wrap:wrap;border-top:1px solid var(--line)}.pick-row:first-child{border-top:0}.pick-main{flex:1;min-width:0;display:flex;align-items:center;gap:.75rem;min-height:56px;padding:.5rem .9rem;text-align:left}.pick-text{display:grid;min-width:0}.pick-title{font-weight:600;line-height:1.3}.meta{font-size:.8rem;color:var(--ink-2)}.thumb.sm{width:2.75rem;height:2.75rem;border-radius:8px;font-size:1.05rem;flex:none}.pick-stepper{margin:0 .9rem .6rem auto}.pick-stepper output{min-width:5.5rem}.check{flex:none;width:1.75rem;height:1.75rem;border-radius:50%;display:grid;place-items:center;border:2px solid var(--line);color:transparent;transition:background-color .12s ease,border-color .12s ease}.check svg{width:1.1rem;height:1.1rem;stroke-width:2.6;opacity:0;transform:scale(.6);transition:transform .16s var(--ease-out),opacity .12s ease}.check[data-on=true]{background:var(--accent);border-color:var(--accent);color:var(--accent-ink)}.check[data-on=true] svg{opacity:1;transform:scale(1)}.add-inline{display:flex;gap:.5rem;margin-top:.6rem}.add-inline .btn{flex:none;width:48px;padding:0}.action-bar{position:fixed;z-index:15;left:0;right:0;bottom:calc(var(--tabbar-h) + env(safe-area-inset-bottom,0px));padding:.6rem var(--gutter);background:linear-gradient(to bottom,transparent,var(--bg) 35%)}.action-bar .btn{max-width:44rem;margin:0 auto;display:flex}.generate{flex-direction:column;gap:0;min-height:60px;box-shadow:var(--shadow)}.generate-sub{font-size:.75rem;font-weight:500;opacity:.85}.progress{display:grid;gap:.4rem;padding-bottom:.5rem;font-size:.85rem}.progress .bar{display:block;height:4px;border-radius:999px;background:var(--surface-2);overflow:hidden}.progress .bar span{display:block;height:100%;background:var(--accent);transform-origin:left;transition:transform .24s var(--ease-out)}.banner{display:flex;align-items:center;justify-content:space-between;gap:.75rem;width:100%;margin-top:.75rem;padding:.85rem 1rem;border-radius:var(--radius);background:var(--accent-soft);color:var(--ink);text-align:left}.banner-cta{font-weight:700;color:var(--accent)}.list-section{font-size:.8rem;font-weight:700;text-transform:uppercase;letter-spacing:.04em;color:var(--ink-2);margin:1.5rem 0 .5rem .25rem}.shop-list{list-style:none;margin:0;padding:0;border-radius:var(--radius);background:var(--surface);box-shadow:var(--shadow);overflow:hidden}.shop-row{display:flex;align-items:center;border-top:1px solid var(--line)}.shop-row:first-child{border-top:0}.shop-main{flex:1;min-width:0;min-height:64px;display:flex;align-items:center;gap:.85rem;padding:.6rem 0 .6rem 1rem;text-align:left}.shop-main:active{background:var(--surface-2)}.shop-text{flex:1;min-width:0;display:grid}.shop-name{font-size:1.0625rem;font-weight:600;line-height:1.3}.shop-qty{flex:none;font-weight:600;color:var(--ink-2);max-width:40%;text-align:right}.shop-row .check{width:2rem;height:2rem}.shop-row[data-checked=true] .shop-name{text-decoration:line-through;text-decoration-color:var(--ink-2);color:var(--ink-2)}.shop-name{transition:color .12s ease}.trolley .shop-list{opacity:.75}.footer-links{margin-top:2rem;display:grid;justify-items:center;gap:.25rem}.title-row{display:flex;align-items:center;justify-content:space-between;gap:.5rem}.sync-pill{font-size:.75rem;font-weight:600;padding:.25rem .6rem;border-radius:999px;background:var(--surface-2);color:var(--ink-2);white-space:nowrap}.sync-pill[data-status=offline]{background:var(--accent-soft);color:var(--accent)}.link-btn{display:inline-flex;align-items:center;gap:.4rem;min-height:44px;color:var(--ink-2);font-size:.9rem}.link-btn svg{width:1.1rem;height:1.1rem}.review-row{display:grid;gap:.6rem;padding:.85rem 1rem;border-top:1px solid var(--line)}.review-row:first-child{border-top:0}.review-choice button{min-height:44px}.review-choice button[data-need][aria-pressed=true]{background:var(--warn);color:#fff}.cost-line{font-size:.9rem;padding-bottom:.5rem}.up{color:var(--warn);font-weight:600}.down{color:var(--accent);font-weight:600}.price-row{border-top:1px solid var(--line)}.price-row:first-child{border-top:0}.price-row summary{list-style:none;display:flex;align-items:center;gap:.75rem;min-height:60px;padding:.6rem 1rem;cursor:pointer}.price-row summary::-webkit-details-marker{display:none}.chip-change{flex:none;font-size:.8rem;font-weight:700;padding:.2rem .55rem;border-radius:999px;background:var(--surface-2)}.chip-change.up{color:var(--warn)}.chip-change.down{color:var(--accent)}.history{list-style:none;margin:0;padding:0 1rem .85rem;display:grid;gap:.35rem;font-size:.85rem}.history li{display:grid;grid-template-columns:6.5rem 1fr auto;gap:.5rem}@media (prefers-reduced-motion: reduce){.pressable:active{transform:none;opacity:.7}.sheet,.sheet:not([open]){transform:none;transition:opacity .2s ease,overlay .2s allow-discrete,display .2s allow-discrete}.sheet:not([open]){opacity:0}@starting-style{.sheet[open]{transform:none;opacity:0}}.spinner{animation-duration:1.5s}.check svg{transform:none}.progress .bar span{transition:none}}
