:root{--bg:#faf9f6;--card:#ffffff;--ink:#1f2421;--muted:#6b7280;--accent:#ff483a;--accent-soft:#ffe5e2;--border:#e7e5df;--warn-bg:#fff8e1;--warn-border:#f0d999;--success:#1e8e3e;--success-soft:#e6f4ea}*{box-sizing:border-box}:root{--bottom-nav-h:58px}.has-bottom-nav{padding-bottom:calc(var(--bottom-nav-h) + env(safe-area-inset-bottom))}.bottom-nav{position:fixed;left:0;right:0;bottom:0;z-index:45;display:flex;background:var(--card);border-top:1px solid var(--border);box-shadow:0 -2px 12px rgba(0,0,0,.05);padding-bottom:env(safe-area-inset-bottom)}.bottom-nav-item{flex:1 1;min-width:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;min-height:var(--bottom-nav-h);padding:.35rem .15rem;text-decoration:none;color:var(--muted);-webkit-tap-highlight-color:transparent;transition:color .12s ease}.bottom-nav-item.active{color:var(--accent)}.bottom-nav-icon{display:block;width:24px;height:24px}.bottom-nav-icon svg{width:100%;height:100%;display:block}.bottom-nav-label{font-size:.64rem;font-weight:600;line-height:1;letter-spacing:-.01em;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}body,html{margin:0;padding:0;background:var(--bg);color:var(--ink);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif;-webkit-font-smoothing:antialiased}.header{background:var(--accent);color:#fff;padding:.7rem 1rem;position:-webkit-sticky;position:sticky;top:0;z-index:10}.header-bar{display:grid;grid-template-columns:1fr auto 1fr;align-items:center;grid-gap:.5rem;gap:.5rem;max-width:960px;margin:0 auto;min-height:34px}.header-title{grid-column:2;margin:0;text-align:center;font-size:1.3rem;font-weight:700;letter-spacing:-.02em}.header-slot{display:flex;align-items:center}.header-slot-left{justify-content:flex-start}.header-slot-right{justify-content:flex-end}.header-back{display:inline-flex;align-items:center;justify-content:center;width:40px;height:40px;margin:-6px 0;padding:0;border:none;background:none;color:#fff;border-radius:999px;cursor:pointer;-webkit-tap-highlight-color:transparent}.header-back:hover{background:rgba(255,255,255,.15)}.header-back svg{display:block;width:24px;height:24px}@media (max-width:720px){.header{padding:.5rem .6rem}.header-title{font-size:1.15rem}}.container{max-width:720px;margin:0 auto;padding:1.25rem}.section-title{font-size:1.05rem;font-weight:600;margin:.5rem 0 1rem}.recipe-card{background:var(--card);border:1px solid var(--border);border-radius:12px;padding:1rem;margin-bottom:.75rem;display:flex;align-items:center;gap:1rem}.recipe-card h3{margin:0 0 .2rem;font-size:1rem}.recipe-card .meta{color:var(--muted);font-size:.85rem}.notice{background:var(--warn-bg);border:1px solid var(--warn-border);border-radius:12px;padding:1.1rem 1.25rem;line-height:1.5}.notice h3{margin:0 0 .5rem}.notice code{background:rgba(0,0,0,.06);padding:.1rem .35rem;border-radius:5px;font-size:.85em}.empty{color:var(--muted);text-align:center;padding:2rem 0}.pill{display:inline-block;background:var(--accent-soft);color:var(--accent);font-size:.75rem;font-weight:600;padding:.15rem .6rem;border-radius:999px}.header-row{display:flex;align-items:flex-start;justify-content:space-between;gap:1rem;max-width:960px;margin:0 auto}.header-user{display:flex;align-items:center;gap:.6rem;font-size:.8rem;opacity:.95;white-space:nowrap}.header-user button{background:rgba(255,255,255,.15);border:1px solid rgba(255,255,255,.4);color:#fff;border-radius:8px;padding:.3rem .7rem;font-size:.8rem;cursor:pointer}.header-user button:hover{background:rgba(255,255,255,.25)}.auth-box{max-width:400px;margin:2rem auto 0;background:var(--card);border:1px solid var(--border);border-radius:14px;overflow:hidden}.auth-tabs{display:flex}.auth-tabs button{flex:1 1;padding:.8rem;border:none;background:var(--accent-soft);color:var(--muted);font-weight:600;font-size:.9rem;cursor:pointer}.auth-tabs button.active{background:var(--card);color:var(--accent)}.auth-form{gap:.9rem;padding:1.25rem}.auth-form,.auth-form label{display:flex;flex-direction:column}.auth-form label{gap:.3rem;font-size:.85rem;font-weight:600}.auth-form input{padding:.6rem .8rem;border:1px solid var(--border);border-radius:10px;font-size:.95rem}.auth-form input:focus{outline:2px solid var(--accent-soft);border-color:var(--accent)}.auth-form input[aria-invalid=true]{border-color:#b3261e}.auth-form input[aria-invalid=true]:focus{outline-color:#f5d0cd}.auth-form button[type=submit]{padding:.7rem;border:none;border-radius:10px;background:var(--accent);color:#fff;font-weight:600;font-size:.95rem;cursor:pointer}.auth-form button[type=submit]:disabled{opacity:.6}.auth-hint{margin:0;font-size:.8rem;color:var(--muted)}.auth-banner{max-width:400px;margin:1.5rem auto 0;text-align:center}.import-box{margin-bottom:1.25rem}.import-form{display:flex;gap:.5rem}.import-form input{flex:1 1;padding:.65rem .85rem;border:1px solid var(--border);border-radius:10px;font-size:.9rem;background:var(--card);color:var(--ink)}.import-form input:focus{outline:2px solid var(--accent-soft);border-color:var(--accent)}.import-form button{padding:.65rem 1.1rem;border:none;border-radius:10px;background:var(--accent);color:#fff;font-weight:600;font-size:.9rem;cursor:pointer;white-space:nowrap}.import-form button:disabled{opacity:.6;cursor:default}.import-msg{margin:.5rem 0 0;font-size:.85rem}.import-msg.error{color:#b3261e}.import-msg.ok{color:var(--accent)}.import-msg.warn{color:#8a6d00;background:var(--warn-bg);border:1px solid var(--warn-border);border-radius:8px;padding:.5rem .7rem}.fab{position:fixed;right:1.5rem;bottom:calc(var(--bottom-nav-h) + env(safe-area-inset-bottom) + 1rem);z-index:40;display:inline-flex;align-items:center;height:56px;padding:0;border:none;border-radius:999px;background:var(--accent);color:#fff;cursor:pointer;box-shadow:0 6px 18px rgba(46,125,50,.35);overflow:hidden;transition:box-shadow .15s ease}.fab:hover{box-shadow:0 8px 22px rgba(46,125,50,.45)}.fab-plus{flex-shrink:0;width:56px;height:56px;display:grid;place-items:center;font-size:1.9rem;font-weight:300;line-height:1}.fab-label{max-width:0;opacity:0;white-space:nowrap;font-size:.95rem;font-weight:600;transition:max-width .25s ease,opacity .2s ease,padding .25s ease}@media (hover:hover){.fab:focus-visible .fab-label,.fab:hover .fab-label{max-width:220px;opacity:1;padding-right:1.25rem}}.modal-overlay{position:fixed;inset:0;z-index:50;background:rgba(31,36,33,.45);display:flex;align-items:flex-start;justify-content:center;padding:2rem 1rem;overflow-y:auto}.modal{width:100%;max-width:560px;background:var(--card);border-radius:16px;box-shadow:0 12px 40px rgba(0,0,0,.25);overflow:hidden;display:flex;flex-direction:column;max-height:calc(100vh - 4rem);max-height:calc(100dvh - 4rem)}.modal-head{flex-shrink:0;display:flex;align-items:center;justify-content:space-between;padding:1rem 1.25rem;border-bottom:1px solid var(--border)}.modal-title{font-size:1.05rem;font-weight:700}.modal-close{border:none;background:none;color:var(--muted);font-size:1.6rem;line-height:1;cursor:pointer;padding:0 .25rem}.modal-close:hover{color:var(--ink)}.modal-body{padding:1.1rem 1.25rem 0;overflow-y:auto}.modal-savebar{position:-webkit-sticky;position:sticky;bottom:0;margin:1.5rem -1.25rem 0;padding:.85rem 1.25rem calc(.85rem + env(safe-area-inset-bottom));background:var(--card);border-top:1px solid var(--border)}.modal-savebar .btn-add{width:100%;padding:.75rem 1rem;font-size:.95rem;border-radius:12px}@media (max-width:560px){.modal-overlay{align-items:flex-end;padding:0}.modal{max-width:none;border-radius:16px 16px 0 0;max-height:92vh;max-height:92dvh}.search-modal{min-height:70vh;min-height:70dvh}}.search-modal .modal-body{padding-bottom:1.25rem}.import-section-title{font-size:.82rem;font-weight:700;letter-spacing:.03em;margin-bottom:.55rem}.import-or,.import-section-title{text-transform:uppercase;color:var(--muted)}.import-or{display:flex;align-items:center;gap:.75rem;margin:1.5rem 0 1.2rem;font-size:.78rem;font-weight:600;letter-spacing:.04em;white-space:nowrap}.import-or:after,.import-or:before{content:"";flex:1 1;border-top:1px solid var(--border)}.image-drop{display:flex;align-items:center;justify-content:center;gap:.5rem;width:100%;padding:1.1rem;border:1.5px dashed var(--border);border-radius:12px;background:transparent;color:var(--muted);font-size:.9rem;font-weight:600;cursor:pointer;transition:border-color .15s ease,color .15s ease}.image-drop:hover{border-color:var(--accent);color:var(--accent)}.image-preview{position:relative}.image-swap{display:block;width:100%;padding:0;border:none;background:none;cursor:pointer}.image-preview img{display:block;width:100%;height:160px;object-fit:cover;border-radius:12px;border:1px solid var(--border)}.image-remove{position:absolute;top:.5rem;right:.5rem;width:30px;height:30px;display:grid;place-items:center;border:none;border-radius:50%;background:rgba(255,255,255,.92);color:var(--ink);font-size:1.15rem;line-height:1;cursor:pointer;box-shadow:0 1px 4px rgba(0,0,0,.25)}.image-remove:hover{background:#fff;color:var(--accent)}.ing-input-row{display:flex;gap:.5rem;align-items:center}.ing-input-row input,.ing-input-row select{padding:.5rem .6rem;border:1px solid var(--border);border-radius:9px;font-size:.92rem;background:var(--card);color:var(--ink)}.ing-input-row input:focus,.ing-input-row select:focus{outline:2px solid var(--accent-soft);border-color:var(--accent)}.ing-qty{width:4.5rem;flex-shrink:0}.ing-unit{width:5.5rem;flex-shrink:0}.ing-name{flex:1 1;min-width:0}@media (max-width:560px){.ing-name{flex-basis:100%;order:3}.ing-input-row{flex-wrap:wrap}.ing-input-heading .ing-name{flex-basis:0;order:0}}.stores-head{display:flex;align-items:center;justify-content:space-between;gap:.75rem;margin:.5rem 0 .85rem}.store-tiles{display:grid;grid-template-columns:repeat(auto-fill,minmax(72px,1fr));grid-gap:.7rem;gap:.7rem;margin-bottom:1.75rem}.store-tile{display:flex;flex-direction:column;align-items:center;gap:.4rem;text-decoration:none;color:inherit}.store-logo{width:100%;max-width:72px;aspect-ratio:1/1;border-radius:14px;overflow:hidden;box-shadow:0 1px 3px rgba(0,0,0,.08);transition:transform .12s ease,box-shadow .12s ease}.store-tile-add{border:none;background:none;cursor:pointer;padding:0;font:inherit}.store-add-box{width:100%;max-width:72px;aspect-ratio:1/1;border-radius:14px;display:grid;place-items:center;font-size:2rem;font-weight:300;line-height:1;color:var(--accent);background:var(--accent-soft);border:2px dashed var(--accent);transition:background .12s ease,transform .12s ease}.store-tile-add:hover .store-add-box{background:#ffd6d1;transform:translateY(-2px)}.store-add-box.disabled{color:var(--muted);background:var(--bg);border-color:var(--border)}.store-tile-add:hover .store-add-box.disabled{background:var(--bg);transform:none}.store-tile:hover .store-logo{transform:translateY(-2px);box-shadow:0 6px 16px rgba(0,0,0,.16)}.store-logo-svg{display:block;width:100%;height:100%}.store-tile-name{font-size:.8rem;font-weight:600;text-align:center;line-height:1.2;color:var(--ink)}.store-chip{gap:.35rem;background:var(--card);border:1px solid var(--border);border-radius:999px;padding:.3rem .7rem;font-size:.82rem;font-weight:500}.store-chip,.store-chip-logo{display:inline-flex;align-items:center}.store-chip-logo{height:1.05rem;max-width:3rem;flex-shrink:0}.store-chip-logo .store-logo-svg{width:auto;height:100%;max-width:100%}.store-chip .chain{font-size:.68rem;font-weight:700;color:#fff;background:var(--accent);padding:.05rem .4rem;border-radius:4px;letter-spacing:.02em}.manage-link{margin-left:auto;font-size:.82rem;color:var(--accent);font-weight:600;text-decoration:none}.manage-link:hover{text-decoration:underline}.shop-summary{display:flex;align-items:center;justify-content:space-between;gap:.75rem;margin-bottom:.75rem;font-size:.9rem;color:var(--muted)}.shop-clear{border:1px solid var(--border);background:var(--card);color:var(--ink);border-radius:8px;padding:.35rem .7rem;font-size:.8rem;font-weight:600;cursor:pointer}.shop-clear:hover{border-color:var(--accent);color:var(--accent)}.shop-list{list-style:none;padding:0;margin:0}.shop-row{padding:.55rem 0;border-bottom:1px solid var(--border)}.shop-check,.shop-row{display:flex;align-items:center;gap:.6rem}.shop-check{cursor:pointer;flex:1 1;min-width:0}.shop-check input{width:1.1rem;height:1.1rem;accent-color:var(--accent);flex-shrink:0}.shop-label{font-size:.95rem;flex:1 1;min-width:0}.pantry-check{width:1.4rem;height:1.4rem;flex-shrink:0;display:grid;place-items:center;border-radius:999px;background:var(--accent);color:#fff;font-size:.8rem;line-height:1}.shop-row.checked .shop-label{text-decoration:line-through;color:var(--muted)}.shop-row .ing-offer{margin-left:auto}.shop-remove{flex-shrink:0;border:none;background:none;color:var(--muted);font-size:1.2rem;line-height:1;cursor:pointer;padding:0 .25rem}.shop-remove:hover{color:#b3261e}.keep-list{list-style:none;padding:0;margin:0}.keep-row{display:flex;align-items:center;gap:.15rem;padding:.15rem 0;border-radius:8px}.keep-row:hover{background:var(--bg)}.keep-row.dragging{opacity:.4}.keep-drag{flex-shrink:0;width:1.6rem;text-align:center;cursor:-webkit-grab;cursor:grab;color:var(--muted);font-size:1rem;line-height:1;-webkit-user-select:none;-moz-user-select:none;user-select:none;opacity:.55;touch-action:none;transition:opacity .12s ease}.keep-row:hover .keep-drag{opacity:.9}.keep-drag:active{cursor:-webkit-grabbing;cursor:grabbing;opacity:1}.keep-drag-empty{cursor:default}.keep-check{flex-shrink:0;width:1.15rem;height:1.15rem;margin:0 .5rem 0 .1rem;accent-color:var(--accent);cursor:pointer}.keep-label{flex:1 1;min-width:0;font-size:.98rem;padding:.5rem 0;cursor:text}.keep-row.checked .keep-label{text-decoration:line-through;color:var(--muted)}.keep-offer{display:inline-flex;align-items:center;gap:.3rem;padding:.15rem .5rem .15rem .2rem;background:var(--accent-soft);border:none;cursor:pointer;font-family:inherit}.keep-offer,.keep-offer-thumb{flex-shrink:0;border-radius:999px}.keep-offer-thumb{width:1.5rem;height:1.5rem;object-fit:contain;background:#fff}.keep-offer-price{font-size:.72rem;font-weight:700;color:var(--accent);white-space:nowrap}.keep-offer-logo{display:inline-flex;align-items:center;height:1.3rem;max-width:3.1rem;flex-shrink:0}.keep-offer-logo .store-logo-svg{width:auto;height:100%;max-width:100%}.keep-offer-count{flex-shrink:0;font-size:.62rem;font-weight:800;color:#fff;background:var(--accent);border-radius:999px;padding:.08rem .4rem;white-space:nowrap}.keep-remove{flex-shrink:0;border:none;background:none;color:var(--muted);font-size:1.25rem;line-height:1;cursor:pointer;padding:0 .35rem;opacity:.45;transition:opacity .12s ease}.keep-row:hover .keep-remove{opacity:.8}.keep-remove:hover{opacity:1;color:#b3261e}.keep-add{display:flex;align-items:center;gap:.15rem;padding:.15rem 0;border-top:1px solid var(--border);margin-top:.25rem}.keep-add-plus{flex-shrink:0;width:2.75rem;text-align:center;color:var(--muted);font-size:1.35rem;line-height:1}.keep-add-input{flex:1 1;min-width:0;border:none;background:none;color:var(--ink);font-size:.98rem;font-family:inherit;padding:.6rem 0;outline:none}.keep-add-input::placeholder{color:var(--muted)}.keep-done{margin-top:1rem;padding-top:.5rem;border-top:1px solid var(--border)}.keep-done-head{display:flex;align-items:center;gap:.5rem;width:100%;border:none;background:none;color:var(--muted);font-size:.9rem;font-weight:600;font-family:inherit;cursor:pointer;padding:.4rem 0}.keep-chevron{display:inline-block;transition:transform .15s ease;transform:rotate(-90deg);font-size:.8rem}.keep-chevron.open{transform:rotate(0deg)}.keep-clear{border:none;background:none;color:var(--muted);font-size:.82rem;font-weight:600;font-family:inherit;cursor:pointer;padding:.5rem 0 .25rem 2.15rem}.keep-clear:hover{color:#b3261e}.store-list{display:flex;flex-direction:column;gap:.5rem}.store-row{display:flex;align-items:center;justify-content:space-between;gap:.75rem;background:var(--card);border:1px solid var(--border);border-radius:10px;padding:.5rem .75rem}.btn-add,.btn-remove{border:none;border-radius:8px;padding:.4rem .8rem;font-size:.82rem;font-weight:600;cursor:pointer}.btn-add{background:var(--accent);color:#fff}.btn-remove{background:#f3f0ea;color:#b3261e}.btn-add:disabled,.btn-remove:disabled{opacity:.6;cursor:default}.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));grid-gap:1rem;gap:1rem}.card{background:var(--card);border:1px solid var(--border);border-radius:14px;flex-direction:column;position:relative}.card,.card .thumb{overflow:hidden;display:flex}.card .thumb{aspect-ratio:16/10;background:var(--accent-soft);align-items:center;justify-content:center;font-size:2.2rem;font-weight:700;color:var(--accent)}.card .thumb img{width:100%;height:100%;object-fit:cover}.card .body{padding:.8rem .9rem 1rem;display:flex;flex-direction:column;gap:.5rem;flex:1 1}.card h3{margin:0;font-size:.98rem;line-height:1.25}.card .metrics{display:flex;align-items:baseline;gap:.6rem;margin-top:auto}.score{font-size:1.25rem;font-weight:700;line-height:1}.score.hi{color:var(--success)}.score.mid{color:#b8860b}.score-label,.score.lo{color:var(--muted)}.score-label{font-size:.72rem}.savings{font-size:.82rem;font-weight:700;color:#fff;background:var(--success);padding:.1rem .45rem;border-radius:6px}.card .meta{color:var(--muted);font-size:.8rem}.card-stats{display:flex;flex-wrap:wrap;gap:.35rem;margin:.15rem 0}.card-stat{display:inline-flex;align-items:center;gap:.25rem;font-size:.72rem;font-weight:700;color:var(--accent);background:var(--accent-soft);border-radius:999px;padding:.14rem .55rem;white-space:nowrap}.card .meta.servings{font-weight:600;color:var(--ink)}.card .meta.servings:before{content:"🍽 "}.star-form{position:absolute;top:.5rem;right:.5rem;margin:0}.star{background:rgba(255,255,255,.9);border:1px solid var(--border);border-radius:999px;width:34px;height:34px;font-size:1.1rem;line-height:1;cursor:pointer;color:#d4a017;display:flex;align-items:center;justify-content:center;padding:0}.star:hover{background:#fff}.store-chip-link{text-decoration:none;color:inherit;cursor:pointer;transition:border-color .12s,box-shadow .12s}.store-chip-link:hover{border-color:var(--accent);box-shadow:0 1px 4px rgba(46,125,50,.15)}.store-head{display:flex;align-items:center;justify-content:space-between;gap:.75rem;flex-wrap:wrap;margin-bottom:1.25rem}.store-head .meta{color:var(--muted);font-size:.85rem}.offer-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));grid-gap:.9rem;gap:.9rem}.offer-card{background:var(--card);border:1px solid var(--border);border-radius:12px;flex-direction:column}.offer-card,.offer-thumb{overflow:hidden;display:flex}.offer-thumb{aspect-ratio:1/1;background:#fff;align-items:center;justify-content:center}.offer-thumb img{width:100%;height:100%;object-fit:contain;padding:.4rem}.offer-noimg{font-size:2rem;font-weight:700;color:var(--accent);background:var(--accent-soft);width:100%;height:100%;display:flex;align-items:center;justify-content:center}.offer-body{padding:.6rem .7rem .75rem;display:flex;flex-direction:column;gap:.15rem;flex:1 1}.offer-name{font-size:.88rem;font-weight:600;line-height:1.25}.offer-brand,.offer-size{font-size:.76rem;color:var(--muted)}.offer-price-row{display:flex;align-items:baseline;flex-wrap:wrap;gap:.4rem;margin-top:.4rem}.offer-price{font-size:1rem;font-weight:700;color:var(--accent)}.offer-ord{font-size:.74rem;color:var(--muted)}.offer-compare{font-size:.72rem;color:var(--muted);margin-top:.1rem}.cat-filter{display:flex;flex-wrap:wrap;gap:.5rem;margin-bottom:1.1rem}.cat-chip{display:inline-flex;align-items:center;gap:.35rem;background:var(--card);border:1px solid var(--border);border-radius:999px;padding:.35rem .8rem;font-size:.82rem;font-weight:500;color:var(--ink);cursor:pointer;transition:background .12s,border-color .12s,color .12s}.cat-chip.active,.cat-chip:hover{border-color:var(--accent)}.cat-chip.active{background:var(--accent);color:#fff}.cat-count{font-size:.7rem;font-weight:600;color:var(--muted)}.cat-chip.active .cat-count{color:rgba(255,255,255,.8)}.cat-dot{display:inline-block;width:.7rem;height:.7rem;border-radius:999px;flex-shrink:0}.card-cats{display:flex;flex-wrap:wrap;gap:.3rem}.card-cat-chip{font-size:.66rem;font-weight:700;color:#fff;padding:.08rem .45rem;border-radius:999px;letter-spacing:.01em}.recipe-cat-picker{display:flex;flex-wrap:wrap;align-items:center;gap:.5rem;margin-bottom:1rem}.recipe-cat-pill{font-size:.72rem;font-weight:700;color:#fff;padding:.18rem .6rem;border-radius:999px;letter-spacing:.01em}.recipe-cat-menu-wrap{position:relative}.recipe-cat-btn{display:inline-flex;align-items:center;gap:.3rem;background:var(--card);border:1px dashed var(--border);border-radius:999px;padding:.25rem .7rem;font-size:.8rem;font-weight:600;color:var(--muted);font-family:inherit;cursor:pointer}.recipe-cat-btn:hover{border-color:var(--accent);color:var(--accent)}.recipe-delete-btn{color:#b3261e;border-color:#e8c4c0}.recipe-delete-btn:hover{border-color:#b3261e;color:#b3261e;background:#fdf1f0}.recipe-delete-btn:disabled{opacity:.6;cursor:default}.recipe-cat-btn-chev{font-size:.7rem}.recipe-cat-menu{position:absolute;top:calc(100% + 6px);left:0;z-index:20;min-width:220px;background:var(--card);border:1px solid var(--border);border-radius:12px;box-shadow:0 8px 28px rgba(0,0,0,.15);padding:.4rem}.recipe-cat-menu-empty{margin:0;padding:.4rem .5rem;font-size:.85rem;color:var(--muted)}.recipe-cat-opt{display:flex;align-items:center;gap:.55rem;width:100%;border:none;background:none;border-radius:8px;padding:.5rem .55rem;font-size:.9rem;font-family:inherit;color:var(--ink);cursor:pointer;text-align:left}.recipe-cat-opt:hover{background:var(--bg)}.recipe-cat-dot{width:.85rem;height:.85rem;border-radius:999px;flex-shrink:0}.recipe-cat-opt-name{flex:1 1;min-width:0}.recipe-cat-opt-tick{color:var(--accent);font-weight:800;width:1rem;text-align:center}.recipe-cat-opt.on{font-weight:600}.recipe-cat-menu-new{display:block;margin-top:.2rem;padding:.5rem .55rem;border-top:1px solid var(--border);font-size:.85rem;font-weight:600;color:var(--accent);text-decoration:none}.recipe-cat-menu-new:hover{text-decoration:underline}.cat-create{display:flex;flex-wrap:wrap;align-items:center;gap:.6rem;margin-bottom:1.5rem;padding:1rem;background:var(--card);border:1px solid var(--border);border-radius:12px}.cat-name-input{flex:1 1;min-width:12rem;padding:.55rem .75rem;border:1px solid var(--border);border-radius:10px;font-size:.95rem;background:var(--card);color:var(--ink)}.cat-swatches{display:flex;flex-wrap:wrap;gap:.35rem}.cat-swatch{width:1.4rem;height:1.4rem;border-radius:999px;border:2px solid transparent;cursor:pointer;padding:0}.cat-swatch.active{border-color:var(--ink);box-shadow:0 0 0 2px var(--card) inset}.cat-list{list-style:none;padding:0;margin:0}.cat-list-row{display:flex;align-items:center;gap:.6rem;padding:.6rem 0;border-bottom:1px solid var(--border)}.cat-list-name{flex:1 1;font-size:.95rem;font-weight:600}.card-link{display:flex;flex-direction:column;flex:1 1;text-decoration:none;color:inherit}.recipe-head{display:flex;align-items:flex-start;justify-content:space-between;gap:1rem;margin-bottom:1rem}.recipe-title{margin:0 0 .2rem;font-size:1.4rem;letter-spacing:-.01em}.recipe-head .meta{color:var(--muted);font-size:.9rem}.recipe-actions{display:flex;align-items:center;flex-wrap:wrap;gap:.5rem;margin-bottom:1.25rem}.recipe-cat-slot{display:contents}.recipe-actions .recipe-cat-picker{margin-bottom:0}.btn-cancel,.btn-restore{border:1px solid var(--border);background:#f3f0ea;color:var(--ink);border-radius:8px;padding:.4rem .8rem;font-size:.82rem;font-weight:600;cursor:pointer}.btn-cancel:disabled,.btn-restore:disabled{opacity:.6;cursor:default}.recipe-layout{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);grid-gap:1.75rem;gap:1.75rem;align-items:start}@media (max-width:720px){.recipe-layout{grid-template-columns:1fr;gap:1rem}}.offer-summary{display:flex;align-items:center;flex-wrap:wrap;gap:.6rem;margin-bottom:1.25rem;padding:.6rem .85rem;background:var(--success-soft);border-radius:10px}.offer-summary-count{font-size:.9rem;font-weight:600;color:var(--ink)}.offer-summary-savings{font-size:.82rem;font-weight:700;color:#fff;background:var(--success);padding:.15rem .6rem;border-radius:999px}.ing-in-pantry .ing-text{color:var(--muted)}.ing-pantry-flag{display:inline-flex;align-items:center;gap:.3rem;font-size:.78rem;font-weight:600;color:var(--accent)}.ing-offer{position:relative;display:inline-flex;align-items:baseline;gap:.35rem;padding:.1rem .5rem;background:var(--accent-soft);border-radius:999px}.ing-offer-thumb{position:absolute;bottom:calc(100% + 6px);right:0;width:84px;height:84px;object-fit:contain;background:#fff;border:1px solid var(--border);border-radius:10px;padding:4px;box-shadow:0 6px 20px rgba(0,0,0,.15);opacity:0;transform:scale(.9);transform-origin:bottom right;pointer-events:none;transition:opacity .12s ease,transform .12s ease;z-index:5}.ing-row:hover .ing-offer-thumb,.shop-row:hover .ing-offer-thumb{opacity:1;transform:scale(1)}.cart-form{display:flex;align-self:center}.cart-toggle{flex-shrink:0;display:inline-flex;align-items:center;gap:.3rem;border:1px solid var(--border);border-radius:999px;background:var(--card);color:var(--muted);font-family:inherit;font-size:.76rem;font-weight:600;line-height:1;cursor:pointer;padding:.22rem .55rem}.cart-toggle-plus{font-size:.95rem;font-weight:700;line-height:1}.cart-toggle-icon{font-size:.85rem;line-height:1}.cart-toggle.in,.cart-toggle:hover{border-color:var(--accent);color:var(--accent)}.cart-toggle.in{background:var(--accent-soft)}.ing-offer-price{font-size:.76rem;font-weight:700;color:var(--accent);white-space:nowrap}.ing-offer-store{font-size:.68rem;color:var(--muted)}.offer-modal{max-width:420px}.offer-pop{display:flex;align-items:center;gap:1rem;margin-bottom:1.1rem}.offer-pop-img{width:96px;height:96px;flex-shrink:0;object-fit:contain;background:#fff;border:1px solid var(--border);border-radius:12px;padding:6px}.offer-pop-img-empty{display:grid;place-items:center;font-size:2.2rem;background:var(--accent-soft);border-color:transparent}.offer-pop-info{min-width:0}.offer-pop-name{font-size:.95rem;font-weight:600;margin-bottom:.25rem}.offer-pop-price{font-size:1.15rem;font-weight:800;color:var(--accent)}.offer-pop-store{font-size:.85rem;color:var(--muted);margin-top:.1rem}.offer-pop-add{width:100%;border:1px solid var(--accent);background:var(--accent);color:#fff;border-radius:10px;padding:.7rem 1rem;font-size:.95rem;font-weight:700;font-family:inherit;cursor:pointer}.offer-pop-add:hover{filter:brightness(.95)}.offer-pop-add.in{background:var(--card);color:var(--ink)}.offer-pop-item{font-size:.95rem;font-weight:600;margin-bottom:.75rem}.offer-alts{list-style:none;margin:0 0 1.1rem;padding:0;display:flex;flex-direction:column;gap:.5rem}.offer-alt{display:flex;align-items:center;gap:.75rem;padding:.5rem .6rem;border:1px solid var(--border);border-radius:12px}.offer-alt-img{width:52px;height:52px;flex-shrink:0;object-fit:contain;background:#fff;border:1px solid var(--border);border-radius:10px;padding:4px}.offer-alt-img-empty{display:grid;place-items:center;font-size:1.4rem;background:var(--accent-soft);border-color:transparent}.offer-alt-info{flex:1 1;min-width:0}.offer-alt-price{font-size:1.05rem;font-weight:800;color:var(--accent)}.offer-alt-store{font-size:.82rem;color:var(--muted);margin-top:.1rem}.offer-alt-logo{display:inline-flex;align-items:center;height:1.05rem;max-width:3.4rem;flex-shrink:0}.offer-alt-logo .store-logo-svg{width:auto;height:100%;max-width:100%}.ing-offer-count{flex-shrink:0;width:1.05rem;height:1.05rem;padding:0;font-size:.62rem;font-weight:800;line-height:1;background:var(--muted);color:#fff;border-radius:999px;display:inline-flex;align-items:center;justify-content:center}.recipe-image{border-radius:14px;overflow:hidden;margin-bottom:1rem}.recipe-image img{width:100%;height:auto;display:block}.ing-list{list-style:none;padding:0;margin:0 0 .5rem}.ing-heading{font-weight:700;font-size:.92rem;color:var(--ink);padding:.75rem 0 .25rem}.ing-heading:first-child{padding-top:0}.drag-handle{flex-shrink:0;cursor:-webkit-grab;cursor:grab;color:var(--muted);font-size:1rem;line-height:1;padding:0 .15rem;-webkit-user-select:none;-moz-user-select:none;user-select:none;align-self:center}.drag-handle:active{cursor:-webkit-grabbing;cursor:grabbing}.edit-heading input,.ing-input-heading .ing-name{font-weight:700;background:var(--accent-soft)}.add-row-group{display:flex;gap:.6rem;margin-top:.6rem}.add-row-group .add-row{flex:1 1;width:auto;margin-top:0}.add-row-alt{color:var(--muted)}.ing-row{display:flex;align-items:center;flex-wrap:wrap;gap:.4rem;padding:.35rem 0;border-bottom:1px solid var(--border)}.ing-end{margin-left:auto;flex-shrink:0}.ing-end,.ing-pantry{display:inline-flex;align-items:center}.ing-pantry{gap:.3rem;border:1px solid var(--accent);background:var(--accent-soft);color:var(--accent);border-radius:999px;padding:.22rem .55rem;font-size:.76rem;font-weight:600}.ing-pantry-check{font-size:.85rem;font-weight:700;line-height:1}.ing-offer-arrow{display:inline-flex;align-items:center;gap:.3rem;border:1px solid var(--border);background:var(--card);color:var(--muted);border-radius:999px;padding:.15rem .35rem;font-family:inherit;cursor:pointer}.ing-offer-arrow:hover{border-color:var(--accent);color:var(--accent)}.ing-offer-arrow:hover .ing-offer-count{background:var(--accent)}.ing-offer-arrow.in{border-color:var(--accent);background:var(--accent-soft);color:var(--accent)}.ing-offer-arrow.in .ing-offer-count{background:var(--accent)}.ing-offer-arrow.in:hover{background:var(--accent);color:#fff}.ing-offer-arrow.in:hover .ing-offer-count{background:#fff;color:var(--accent)}.ing-offer-tag{font-size:.68rem;font-weight:800;text-transform:uppercase;letter-spacing:.03em}.ing-offer-chev{font-size:1rem;line-height:1}.ing-offer-check{font-size:.82rem;font-weight:700;line-height:1}.ing-text{font-size:.95rem}.ing-removed .ing-text{text-decoration:line-through;color:var(--muted)}.ing-orig{font-size:.78rem;color:var(--muted);font-style:italic}.chg-badge{font-size:.66rem;font-weight:700;padding:.05rem .4rem;border-radius:4px;letter-spacing:.02em;text-transform:uppercase}.chg-changed{background:var(--warn-bg);color:#a86a00}.chg-added{background:var(--accent-soft);color:var(--accent)}.chg-removed{background:#fbe6e4;color:#b3261e}.step-list{padding-left:1.2rem;margin:0;line-height:1.55}.step-row{margin-bottom:.6rem}.step-row .chg-badge{margin-left:.4rem;vertical-align:middle}.title-input{width:100%;font-size:1.3rem;font-weight:700;padding:.5rem .7rem;border:1px solid var(--border);border-radius:10px;background:var(--card);color:var(--ink)}.edit-field{display:flex;flex-direction:column;gap:.3rem;font-size:.85rem;font-weight:600;margin:1rem 0 .5rem}.edit-field input{padding:.55rem .75rem;border:1px solid var(--border);border-radius:10px;font-size:.95rem;font-weight:400;background:var(--card);color:var(--ink)}.edit-rows{flex-direction:column}.edit-row,.edit-rows{display:flex;gap:.5rem}.edit-row{align-items:center}.edit-row.step{align-items:flex-start}.edit-row input,.edit-row textarea{flex:1 1;padding:.5rem .7rem;border:1px solid var(--border);border-radius:9px;font-size:.92rem;background:var(--card);color:var(--ink);font-family:inherit;resize:vertical}.edit-field input:focus,.edit-row input:focus,.edit-row textarea:focus{outline:2px solid var(--accent-soft);border-color:var(--accent)}.edit-row.is-removed input{text-decoration:line-through;color:var(--muted);background:#faf8f5}.row-btn{border:1px solid var(--border);background:#f3f0ea;color:var(--ink);border-radius:8px;padding:.4rem .7rem;font-size:.78rem;font-weight:600;cursor:pointer;white-space:nowrap}.icon-del{flex-shrink:0;width:32px;height:32px;display:grid;place-items:center;border:none;border-radius:50%;background:transparent;color:var(--muted);font-size:1.3rem;line-height:1;cursor:pointer;transition:background .15s ease,color .15s ease}.icon-del:hover:not(:disabled){background:var(--accent-soft);color:var(--accent)}.icon-del:disabled{opacity:.3;cursor:default}.step-num{flex-shrink:0;width:24px;height:24px;display:grid;place-items:center;border-radius:50%;background:var(--accent-soft);color:var(--accent);font-size:.78rem;font-weight:700;margin-top:.5rem}.edit-row.step .icon-del{margin-top:.25rem}.add-row{margin-top:.6rem;border:1px dashed var(--border);background:transparent;color:var(--accent);border-radius:9px;padding:.5rem .8rem;font-size:.85rem;font-weight:600;cursor:pointer;width:100%}.add-row:hover{border-color:var(--accent)}.edit-bar{display:flex;gap:.6rem;margin-top:1.5rem;padding-top:1rem;border-top:1px solid var(--border)}.settings-links{display:flex;flex-direction:column;gap:.5rem}.settings-link{display:flex;align-items:center;gap:.7rem;padding:.85rem 1rem;background:var(--card);border:1px solid var(--border);border-radius:12px;text-decoration:none;color:var(--ink);font-weight:600;font-size:.95rem}.settings-link:hover{border-color:var(--accent)}.settings-link-icon{font-size:1.2rem;line-height:1}.settings-link-label{flex:1 1}.settings-link-arrow{color:var(--muted);font-size:1.4rem;line-height:1}.profile-list{list-style:none;padding:0;margin:0 0 1rem}.profile-list,.profile-row{display:flex;flex-direction:column;gap:.6rem}.profile-row{background:var(--card);border:1px solid var(--border);border-radius:12px;padding:.85rem 1rem}.profile-row.active{border-color:var(--accent);box-shadow:0 0 0 1px var(--accent) inset}.profile-main{display:flex;align-items:center;flex-wrap:wrap;gap:.5rem}.profile-name{font-weight:700;font-size:1rem}.profile-badge{font-size:.64rem;font-weight:700;text-transform:uppercase;letter-spacing:.03em;color:#fff;background:var(--accent);padding:.1rem .45rem;border-radius:999px}.profile-role{font-size:.7rem;color:var(--muted);background:var(--accent-soft);padding:.1rem .5rem;border-radius:999px}.profile-actions,.profile-create,.profile-share{display:flex;flex-wrap:wrap;gap:.5rem}.profile-create,.profile-share{align-items:center}.profile-create{margin-top:.5rem}.profile-create input,.profile-share input{flex:1 1;min-width:11rem;padding:.55rem .75rem;border:1px solid var(--border);border-radius:10px;font-size:.95rem;background:var(--card);color:var(--ink)}.profile-create input:focus,.profile-share input:focus{outline:2px solid var(--accent-soft);border-color:var(--accent)}.account-box{display:flex;align-items:center;justify-content:space-between;gap:1rem;background:var(--card);border:1px solid var(--border);border-radius:12px;padding:1rem 1.1rem}.account-info{display:flex;flex-direction:column;gap:.15rem;min-width:0}.account-label{font-size:.72rem;text-transform:uppercase;letter-spacing:.03em;color:var(--muted)}.account-email{font-size:1rem;font-weight:600;word-break:break-all}.pantry-add{position:relative;margin-bottom:1rem}.pantry-add-input{width:100%;padding:.65rem .85rem;border:1px solid var(--border);border-radius:10px;font-size:.95rem;background:var(--card);color:var(--ink)}.pantry-add-input:focus{outline:2px solid var(--accent-soft);border-color:var(--accent)}.pantry-results{position:absolute;top:calc(100% + 4px);left:0;right:0;background:var(--card);border:1px solid var(--border);border-radius:10px;box-shadow:0 10px 28px rgba(0,0,0,.14);padding:.3rem;z-index:20;max-height:300px;overflow-y:auto}.pantry-result{display:flex;align-items:center;justify-content:space-between;gap:.75rem;width:100%;padding:.55rem .6rem;border:none;background:none;border-radius:8px;font-size:.92rem;color:var(--ink);text-align:left;cursor:pointer}.pantry-result:hover:not(:disabled){background:var(--accent-soft)}.pantry-result:disabled{cursor:default;color:var(--muted)}.pantry-result-add{flex-shrink:0;font-size:.78rem;font-weight:600;color:var(--accent)}.pantry-result:disabled .pantry-result-add{color:var(--muted)}.pantry-result-empty{padding:.6rem;font-size:.85rem;color:var(--muted)}.pantry-result-freetext{border-top:1px solid var(--border);font-style:italic}.mobile-only{position:fixed;inset:0;z-index:100;display:flex;align-items:center;justify-content:center;padding:2rem;background:var(--bg)}.mobile-only-card{max-width:420px;width:100%;text-align:center;background:var(--card);border:1px solid var(--border);border-radius:18px;padding:2.5rem 2rem;box-shadow:0 8px 32px rgba(0,0,0,.08)}.mobile-only-icon{font-size:3rem;line-height:1;margin-bottom:1rem}.mobile-only-card h1{font-size:1.4rem;margin:0 0 .75rem;color:var(--ink)}.mobile-only-card p{margin:0 0 .75rem;color:var(--muted);font-size:.95rem;line-height:1.5}.mobile-only-url{color:var(--ink)!important}.mobile-only-hint{margin-top:1.25rem!important;font-size:.85rem!important;color:var(--accent)!important;font-weight:600}.skeleton{position:relative;overflow:hidden;background:var(--accent-soft);border-radius:8px}.skeleton:after{content:"";position:absolute;inset:0;transform:translateX(-100%);background:linear-gradient(90deg,rgba(255,255,255,0),rgba(255,255,255,.65) 50%,rgba(255,255,255,0));animation:skeleton-shimmer 1.4s ease-in-out infinite}@keyframes skeleton-shimmer{to{transform:translateX(100%)}}.skeleton-line{height:.8rem;border-radius:6px}.skeleton-tile{aspect-ratio:1/1;border-radius:16px}.skeleton-thumb{aspect-ratio:16/10;border-radius:0}.skeleton-hero{aspect-ratio:16/10;border-radius:14px}@media (prefers-reduced-motion:reduce){.skeleton:after{animation:none}}.landing{text-align:center;padding-top:2rem}.landing-hero h2{font-size:1.5rem;line-height:1.25;margin:0 0 .75rem}.landing-hero p{color:var(--muted);line-height:1.5;margin:0 auto 1.75rem;max-width:30rem}.landing-points{list-style:none;padding:0;margin:0 auto 2rem;max-width:22rem;text-align:left;display:flex;flex-direction:column;gap:.85rem}.landing-points li{display:flex;align-items:center;gap:.7rem;font-weight:600;background:var(--card);border:1px solid var(--border);border-radius:12px;padding:.85rem 1rem}.landing-points li span{font-size:1.2rem}.landing-cta{display:inline-block;padding:.85rem 1.5rem;font-size:1rem;border-radius:12px;text-decoration:none}.auth-tagline{text-align:center;color:var(--muted);margin:.5rem 0 1.25rem;line-height:1.4}.onboarding-card{background:var(--success-soft);border:1px solid #bfe3ca;border-radius:14px;padding:1.1rem 1.25rem;margin-bottom:1.75rem}.onboarding-title{font-weight:700;font-size:1rem;margin-bottom:.85rem}.onboarding-step{display:flex;align-items:flex-start;gap:.75rem;padding:.5rem 0}.onboarding-step strong{font-size:.95rem}.onboarding-step p{margin:.15rem 0 0;font-size:.82rem;color:var(--muted);line-height:1.4}.onboarding-check{flex-shrink:0;width:1.5rem;height:1.5rem;border-radius:999px;display:inline-flex;align-items:center;justify-content:center;font-size:.8rem;font-weight:800;color:#fff;background:var(--muted)}.onboarding-step.done .onboarding-check{background:var(--success)}.onboarding-step.done strong{text-decoration:line-through;color:var(--muted)}