:root{--bg:#fdf6e0;--fg:#1a1a1a;--muted:#666;--border:#d8d8d4;--accent:#2b6cb0;--accent-hover:#234e7a;--danger:#c0392b;--done-bg:#e8efe6;--warning:#d97706;--radius:6px;--paper-line:#9bbcd8;--paper-yellow:#f1ecc1;--font-knewave:"Knewave", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;--font-reading:"Shantell Sans", "Comic Sans MS", system-ui, cursive}*{box-sizing:border-box}html,body{color:var(--fg);font-family:var(--app-font,var(--font-reading));margin:0;padding:0;font-size:16px;font-style:normal;font-weight:400;line-height:1.4;overflow-x:hidden}html{background:var(--paper-yellow)}body{background:0 0;flex-direction:column;min-height:100vh;display:flex}.knewave-regular{font-family:Knewave,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue;font-style:normal;font-weight:400}.app-root{min-height:100vh;font-family:var(--app-font,var(--font-reading));background-color:transparent;background-image:repeating-linear-gradient(transparent 0 calc(2.6rem - 1px),#c4cdf0 calc(2.6rem - 1px) 2.6rem),linear-gradient(90deg,transparent 2.1rem,#e2a0a0 2.1rem calc(2.1rem + 1px),transparent calc(2.1rem + 1px) 2.35rem,#e2a0a0 2.35rem calc(2.35rem + 1px),transparent calc(2.35rem + 1px));background-repeat:repeat-y,no-repeat;flex-direction:column;flex:1 0 auto;display:flex}h1,h2,h3,h4,h5,h6{font-family:var(--font-knewave);padding-left:0}button{font-family:inherit}.in-store,.in-store *,section.completed,section.completed *{font-family:var(--font-knewave)}.font-knewave{--app-font:"Knewave", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif}.font-shantell{--app-font:"Shantell Sans", "Comic Sans MS", system-ui, cursive}.font-lora{--app-font:"Lora", Georgia, "Times New Roman", serif}.font-inter{--app-font:"Inter", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif}.font-system{--app-font:system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif}img,input,select,textarea,button{max-width:100%}input,select,textarea{min-width:0}@media (width<=768px){input,select,textarea{font-size:16px!important}}a{color:var(--accent);text-decoration:none}a:hover{text-decoration:underline}button{border:1px solid var(--border);border-radius:var(--radius);cursor:pointer;color:var(--fg);background:#fff;padding:.5rem .9rem;font-size:1rem}button:hover{background:#f0f0ec}button.primary{background:var(--accent);color:#fff;border-color:var(--accent)}button.primary:hover{background:var(--accent-hover)}button.danger{color:var(--danger);border-color:var(--danger)}button.remove{color:var(--muted);padding:.2rem .5rem}input,select{border:1px solid var(--border);border-radius:var(--radius);color:var(--fg);background:#fff;padding:.5rem .7rem;font-size:1rem}input:focus,select:focus{outline:2px solid var(--accent)}.nav{background:0 0;border-bottom:0;align-items:center;gap:1rem;padding:.8rem 1rem;display:flex;position:relative}.nav:after{content:"";pointer-events:none;opacity:.55;background-image:url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20width='64'%20height='5'%3E%3Cpath%20d='M0%203%20Q8%200%2016%203%20T32%203%20T48%203%20T64%203'%20fill='none'%20stroke='%232b2b1f'%20stroke-width='1.6'%20stroke-linecap='round'/%3E%3C/svg%3E");background-repeat:repeat-x;background-size:64px 5px;height:5px;position:absolute;bottom:0;left:0;right:0}.nav .brand{font-size:1.15rem;font-weight:700}.nav-links{align-items:center;gap:1rem;margin-left:auto;display:flex}.nav-user{color:var(--muted);cursor:pointer;text-underline-offset:3px;background:0 0;border:0;padding:0;font-family:inherit;font-size:.9rem;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}.nav-user:hover{color:var(--fg)}.nav-toggle{cursor:pointer;color:var(--fg);background:0 0;border:0;padding:.1rem .4rem;font-size:1.4rem;line-height:1;display:none}.nav-backdrop{display:none}.login{max-width:360px;margin:4rem auto 0}.login h1{margin-bottom:1rem}.login-form{flex-direction:column;gap:.8rem;display:flex}.login-form label{flex-direction:column;gap:.25rem;display:flex}.login-form button{margin-top:.4rem}.account-password .login-form{max-width:22rem}.account-password-done{color:#2f6f2c}.settings-account{border-top:1px solid var(--border);margin:.6rem 0 .2rem;padding-top:.6rem}.container{max-width:720px;margin:0 auto;padding:1rem}.container-flush{width:100%;max-width:none;margin:0;padding:.5rem}.page-header{justify-content:space-between;align-items:center;margin-bottom:1rem;display:flex}.page-header h1{margin:0}.home-landing{text-align:center;flex-direction:column;max-width:40rem;min-height:calc(100vh - 8rem);margin:0 auto;padding:2rem 0 3rem;display:flex}.home-drawing{flex:1;justify-content:center;align-items:center;min-height:0;padding:1rem 0;display:flex}.home-drawing-svg{justify-content:center;align-items:center;display:flex}.home-drawing .home-drawing-svg,.home-drawing .home-drawing-svg>svg{width:100%;height:100%}.home-drawing .home-drawing-svg>svg{width:auto;max-width:min(22rem,80vw);height:auto;max-height:100%}.home-drawing-img{object-fit:contain;width:auto;max-width:min(22rem,80vw);height:auto;max-height:100%}.home-landing h1{margin:0 0 2rem;display:inline-block;position:relative}.beta-note{color:#12304a;white-space:nowrap;pointer-events:none;background:#8fc1f0;border-radius:2px;margin-left:.6rem;padding:.5rem .7rem;font-size:.85rem;line-height:1;position:absolute;top:50%;left:100%;transform:translateY(-50%)rotate(8deg);box-shadow:2px 3px 6px rgba(0,0,0,.25)}.home-links{flex-flow:wrap;justify-content:center;gap:1rem;display:flex}.home-link{text-align:center;border:1px solid var(--border);min-width:8rem;max-width:12rem;color:var(--accent);background:#fff;border-radius:.6rem;flex:1 1 0;padding:1.1rem 1rem;font-size:1.2rem;font-weight:600;text-decoration:none}.home-link:hover{border-color:var(--accent);text-decoration:none}.drawing-form .drawing-dates{gap:1rem;display:flex}.drawing-form .drawing-dates label{flex:1}.drawing-preview{object-fit:contain;flex:none;width:4rem;height:4rem}.drawing-preview-wrap,.drawing-row{align-items:center;gap:.75rem;display:flex}.drawing-info{flex-direction:column;gap:.2rem;display:flex}.empty{color:var(--muted);padding:1rem 0}.err{color:var(--danger)}.run-list{margin:0;padding:0;list-style:none}.run-row{padding:0;overflow:hidden}.run-row-scroll{scroll-snap-type:x mandatory;overscroll-behavior-x:contain;-webkit-overflow-scrolling:touch;scrollbar-width:none;display:flex;overflow-x:auto}.run-row-scroll::-webkit-scrollbar{display:none}.run-row-content{scroll-snap-align:start;scroll-snap-stop:always;color:var(--fg);background:0 0;flex:0 0 100%;align-items:center;gap:.75rem;padding:.8rem;text-decoration:none;display:flex}.run-row-content:hover{background:var(--bg);text-decoration:none}.run-row-delete{scroll-snap-align:end;scroll-snap-stop:always;background:var(--danger);color:#fff;cursor:pointer;border:0;border-radius:0;flex:0 0 5.5rem;padding:.8rem .5rem;font-weight:600}.run-row-delete:hover{background:#a13226}.run-name{flex:1;font-weight:600}.run-meta{color:var(--muted);font-size:.9rem}.status-pill{color:var(--muted);text-transform:uppercase;letter-spacing:.05em;background:#eee;border-radius:999px;padding:.15rem .5rem;font-size:.75rem}.status-pill.in_progress{color:var(--warning);background:#fff7e6}.status-pill.completed{background:var(--done-bg);color:#2f6f2c}.completed-actions{flex-wrap:wrap;gap:.5rem;margin-bottom:.8rem;display:flex}.completed-preset-done{color:#2f6f2c;margin:0 0 .6rem}.run-header{margin-bottom:1rem;padding-left:3rem}.run-header h1{margin:0 0 .4rem}.run-header .run-title{cursor:text}.run-header .run-title:hover{-webkit-text-decoration:underline dotted var(--muted);text-decoration:underline dotted var(--muted)}.run-header .run-title-input{border:1px solid var(--accent);border-radius:var(--radius);width:100%;color:var(--fg);background:#fff;margin:0 0 .4rem;padding:.2rem .4rem;font-size:1.6rem;font-weight:700}.run-header .run-meta{flex-wrap:wrap;align-items:center;gap:.6rem;display:flex}.totals{border:1px solid var(--border);border-radius:var(--radius);background:#fff;gap:1.5rem;margin-top:.6rem;padding:.6rem .8rem;display:flex}.totals .total{flex-direction:column;display:flex}.totals .label{color:var(--muted);text-transform:uppercase;font-size:.75rem}.totals .value{font-size:1.25rem;font-weight:600}.totals .note{color:var(--muted);font-size:.7rem}.totals .variance.over{color:var(--danger)}.totals .variance.under{color:#2f6f2c}.estimated-from-receipts{color:var(--muted);margin:.1rem 0 0 1.6rem;font-size:.85rem;font-style:italic}.item-input{grid-template-columns:1fr 80px 80px auto;align-items:center;gap:.4rem;margin:1rem 0;display:grid;position:relative}.suggestions:empty{display:none}.suggestions{border:1px solid var(--border);border-radius:var(--radius);z-index:10;background:#fff;max-height:240px;margin:.2rem 0 0;padding:0;list-style:none;position:absolute;top:100%;left:0;right:0;overflow-y:auto;box-shadow:0 4px 12px rgba(0,0,0,.08)}.suggestions li{cursor:pointer;justify-content:space-between;gap:1rem;padding:.5rem .7rem;display:flex}.suggestions li:hover{background:var(--bg)}.suggestions .sugg-meta{color:var(--muted);font-size:.85rem}.item-list{margin:0;padding:0;list-style:none}.item-row{border-bottom:1px solid var(--border);align-items:center;gap:.5rem;padding:.6rem .4rem;display:flex}.item-name{flex:1;min-width:0}.item-qty{color:var(--muted)}.cat-section .item-row{flex-direction:column;gap:.25rem;padding:.4rem .3rem;display:flex}.cat-section .item-row.add-row{flex-direction:row;align-items:center;gap:.4rem}.cat-section .item-row-main{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:.4rem;width:100%;min-width:0;display:flex}.cat-section .item-name{text-overflow:ellipsis;white-space:nowrap;text-align:left;flex:1 1 0;min-width:0;overflow:hidden}.item-actions{align-items:center;gap:.4rem;margin-left:auto;display:inline-flex}.cat-section{border:1px solid var(--border);border-radius:var(--radius);background:#fff;margin-bottom:1rem;overflow:hidden}.cat-section-header{border-bottom:1px solid var(--border);letter-spacing:.02em;cursor:pointer;-webkit-user-select:none;user-select:none;background:#eef0f3;align-items:center;gap:.5rem;padding:.6rem .8rem;font-size:1.15rem;font-weight:700;list-style:none;display:flex}.cat-section-header::-webkit-details-marker{display:none}.cat-section-header:before{content:"▾";width:1em;color:var(--muted);flex:none;display:inline-block}.cat-section:not([open])>.cat-section-header{border-bottom:none}.cat-section:not([open])>.cat-section-header:before{content:"▸"}.cat-section .item-list{padding:0 .4rem}.cat-section .item-row{border-bottom:1px solid var(--paper-line)}.cat-section .item-row:last-child{border-bottom:none}.add-row{padding:.4rem .3rem}.cat-add-input{border:1px dashed var(--border);background:0 0;flex:1;padding:.35rem .5rem;font-size:1rem}.cat-add-input:focus{background:#fff;border-style:solid}.cat-add-btn{border:1px solid var(--border);border-radius:var(--radius);color:var(--accent);background:0 0;padding:.3rem .7rem;font-size:.9rem}.cat-add-btn:hover{background:#fff}.drag-handle{cursor:grab;background-image:radial-gradient(circle, var(--muted) 1px, transparent 1.5px), radial-gradient(circle, var(--muted) 1px, transparent 1.5px);touch-action:none;-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;background-position:2px 3px,6px 3px;background-repeat:repeat-y,repeat-y;background-size:4px 4px,4px 4px;flex:0 0 1.1rem;align-self:stretch}.drag-handle:active{cursor:grabbing}.cat-section .item-row.dragging{z-index:5;pointer-events:none;background:#fff;transition:none;position:relative;box-shadow:0 4px 12px rgba(0,0,0,.18)}.item-name-input{min-width:0;font:inherit;color:inherit;resize:none;field-sizing:content;white-space:pre-wrap;overflow-wrap:anywhere;background:0 0;border:1px solid transparent;flex:8rem;min-height:1.9rem;padding:.2rem .3rem;line-height:1.3;overflow:hidden}.item-name-input:hover{border-color:var(--border)}.item-name-input:focus{border-color:var(--border);background:#fff;outline:none}.qty-input{text-align:left;font-variant-numeric:tabular-nums;width:6rem;padding:.2rem .3rem;font-size:1rem}.qty-input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.qty-input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.qty-input[type=number]{appearance:textfield}.item-unit{color:var(--muted);font-size:.85rem}.planning>.totals{margin-top:1rem}.item-recipes{color:var(--muted);background:#eef3fb;border-radius:4px;padding:.1rem .4rem;font-size:.75rem}.item-price{color:var(--accent);font-weight:600}.recipe-preset-bar{flex-direction:column;gap:.6rem;margin-bottom:1rem;display:flex}.recipe-preset-bar details{border:1px solid var(--border);border-radius:var(--radius);background:#fff;padding:.5rem .8rem}.add-actions{flex-wrap:wrap;gap:.5rem;display:flex}.add-actions>button{flex:1 1 0;min-width:7rem}.added-kind{text-transform:uppercase;letter-spacing:.05em;color:var(--muted);background:var(--bg);border:1px solid var(--border);border-radius:999px;flex:none;padding:.05rem .5rem;font-size:.7rem}.picker{margin:.4rem 0 0;padding:0;list-style:none}.picker li{align-items:center;gap:.4rem;padding:.3rem 0;display:flex}.picker li>span{flex:1}.add-picker{max-width:480px}.add-picker-list{max-height:50vh;margin:.4rem 0 0;padding:0;list-style:none;overflow-y:auto}.add-picker-list li{border-bottom:1px solid var(--border);padding:0}.add-picker-list li:last-child{border-bottom:none}.add-picker-row{text-align:left;cursor:pointer;width:100%;color:inherit;background:0 0;border:0;padding:.6rem .4rem}.add-picker-row:hover{background:var(--bg)}.add-picker-empty{color:var(--muted);padding:.6rem .4rem;font-style:italic}.plan-nav{flex-wrap:wrap;gap:.4rem;margin:.6rem 0 1rem;display:flex}.plan-nav button{padding:.35rem .7rem;font-size:.85rem}.plan-table{border-collapse:collapse;border:1px solid var(--border);border-radius:var(--radius);background:#fff;width:100%}.plan-row{border-top:1px solid var(--border)}.plan-row:first-child{border-top:none}.plan-row-past{opacity:.35;filter:grayscale(.5)}.plan-row-today{background:#fffbe1}.plan-row-future .plan-row-dow,.plan-row-future .plan-row-date{font-weight:700}.plan-row-day{text-align:left;vertical-align:top;border-right:1px solid var(--border);background:var(--bg);border-left:5px solid transparent;width:3.4rem;padding:.6rem .5rem}.plan-row-today>.plan-row-day{border-left-color:var(--accent)}.plan-row-dow{font-size:.85rem;font-weight:700;display:block}.plan-row-date{color:var(--muted);font-size:.72rem;display:block}.plan-row-entries{vertical-align:top;padding:.4rem .6rem;position:relative}.plan-row-empty{color:var(--muted)}.plan-entry-list{margin:0;padding:0;list-style:none}.plan-entry{justify-content:space-between;align-items:center;gap:.5rem;padding:.25rem 0;display:flex}.plan-entry-label{word-break:break-word;min-width:0}.plan-entry-kind{text-transform:uppercase;letter-spacing:.05em;color:var(--muted);margin-right:.4rem;font-size:.7rem;display:inline-block}.plan-entry-shopped{color:var(--muted);text-decoration:line-through}.plan-entry-actions{flex:none;gap:.3rem;display:flex}.plan-add{margin-top:.2rem;position:relative}.plan-add-input{border:0;border-bottom:1px dashed var(--border);background:0 0;border-radius:0;width:100%;padding:.3rem .1rem;font-size:.95rem}.plan-add-input:focus{border-bottom-color:var(--accent);outline:none}.plan-entry-toggle{text-align:left;border-radius:var(--radius);min-width:0;font:inherit;color:inherit;cursor:pointer;word-break:break-word;background:0 0;border:1px solid transparent;flex:1;margin:-.25rem -.4rem;padding:.25rem .4rem}.plan-entry-toggle:hover{background:#f0f0ec}.plan-entry-added>.plan-entry-toggle{background:var(--done-bg);border-color:#3a9d5d}.plan-entry-added>.plan-entry-toggle:hover{background:#dce8d8}.plan-entry-elsewhere{opacity:.55}.plan-entry-elsewhere .plan-entry-label:after{content:" ·on another list";color:var(--muted);font-size:.75rem}.start-shopping-fab{right:calc(1rem + env(safe-area-inset-right,0px));bottom:calc(1rem + env(safe-area-inset-bottom,0px));z-index:50;border-radius:999px;padding:.7rem 1.2rem;font-size:1.05rem;position:fixed;box-shadow:0 3px 10px rgba(0,0,0,.28)}.in-store,section.completed{--rule:2.6rem;padding:0 1rem var(--rule) 3rem;color:#2b2b1f;margin:0;position:relative}.shop-add{min-height:var(--rule);line-height:var(--rule);opacity:.5;align-items:center;gap:.5rem;display:flex}.shop-add:focus-within{opacity:1}.shop-add-mark{color:#8a8268;font-weight:700}.shop-add-input{font:inherit;color:#2b2b1f;background:0 0;border:0;flex:1;padding:0}.shop-add-input::placeholder{color:#8a8268;font-style:italic}.shop-add-input:focus{outline:none}.shop-actions{min-height:calc(var(--rule) * 2);margin-top:var(--rule);justify-content:flex-end;align-items:center;display:flex}.checklist{border:0;padding:0}.checklist-lines{margin:0;padding:0;list-style:none}.check-row{min-height:var(--rule);line-height:var(--rule);cursor:pointer;-webkit-user-select:none;user-select:none;flex-wrap:wrap;align-items:center;gap:0 .6rem;font-size:1.25rem;display:flex}.check-row .checkbox{font-size:1.6rem;line-height:1}.check-row .check-name{flex:1}.check-row .check-qty-input{text-align:right;color:#7a6f4a;border-radius:var(--radius);background:0 0;border:1px solid transparent;flex:0 0 5.5rem;width:5.5rem;padding:.1rem .3rem}.check-row .check-qty-input:focus{border-color:var(--border);background:#fff;outline:none}.check-note{color:#7a6f4a;font-size:.95rem;line-height:var(--rule);min-height:var(--rule);flex:100%;margin-left:2rem;font-style:italic}.check-row.done{color:#8a8268}.check-name{position:relative}.check-name:after{content:"";transform-origin:0;pointer-events:none;background:#111;height:2px;transition:transform .3s;position:absolute;top:50%;left:0;right:0;transform:scaleX(0)}.check-row.done .check-name:after{transform:scaleX(1)}.item-row .note-toggle{color:var(--muted);background:0 0;border:1px solid transparent;padding:.2rem .4rem}.item-row .note-toggle:hover{border-color:var(--border);background:#fff}.item-note{color:var(--muted);word-break:break-word;margin-left:.4rem;font-size:.8rem;font-style:italic}.item-note-input{box-sizing:border-box;resize:vertical;width:100%;min-height:2.4rem;margin-top:.3rem;font-family:inherit}.item-category{padding:.2rem .4rem;font-size:1rem}.category-header{color:#2b2b1f;letter-spacing:.01em;font-size:1.6rem;font-weight:700;line-height:var(--rule);min-height:var(--rule);margin:0}.checklist-section+.checklist-section{margin-top:var(--rule)}.user-row{flex-wrap:wrap}.user-row .user-email{word-break:break-all;flex:16rem;min-width:0}.user-row .user-meta{color:var(--muted);font-size:.85rem}.user-row .status-pill{text-transform:uppercase;font-size:.7rem}.feedback-filter{color:var(--muted);align-items:center;gap:.4rem;font-size:.9rem;display:inline-flex}.feedback-row{flex-direction:column;align-items:stretch;gap:.4rem}.feedback-row.resolved{opacity:.55}.feedback-head{align-items:center;gap:.6rem;display:flex}.feedback-meta{color:var(--muted);flex:1;font-size:.85rem}.feedback-row .status-pill{text-transform:uppercase;font-size:.7rem}.feedback-body{white-space:pre-wrap;word-break:break-word;margin:0}.category-list{margin:0;padding:0;list-style:none}.category-row{align-items:center;gap:.6rem;display:flex}.category-row .category-name{cursor:text;flex:1}.category-row .category-name:hover{-webkit-text-decoration:underline dotted var(--muted);text-decoration:underline dotted var(--muted)}.category-row .category-name-input{flex:1}.category-row.dragging{z-index:5;pointer-events:none;background:#fff;transition:none;position:relative;box-shadow:0 4px 12px rgba(0,0,0,.18)}.category-create{gap:.5rem;margin-top:1rem;display:flex}.category-create input{flex:1}.feedback-widget{z-index:1100;flex:none;align-self:stretch;align-items:center;margin-left:auto;display:flex;position:relative}.feedback-fab{color:#5a2540;background:#ffb3d1;border:0;border-radius:2px;padding:.28rem .6rem;font-size:.8rem;font-weight:700;line-height:1.15;transition:transform .12s;position:relative;transform:rotate(-3deg);box-shadow:1px 2px 5px rgba(0,0,0,.25)}.feedback-fab:after{content:"";border-top:0 solid transparent;border-bottom:8px solid #e489b0;border-left:8px solid transparent;border-right:0 solid transparent;position:absolute;bottom:0;right:0}.feedback-fab:hover{background:#ffbdd8;transform:rotate(-3deg)translateY(-1px)}.feedback-panel{border:1px solid var(--border);border-radius:var(--radius);background:#fff;flex-direction:column;gap:.5rem;width:min(90vw,320px);padding:.8rem;display:flex;position:absolute;top:calc(100% + .4rem);right:0;box-shadow:0 4px 16px rgba(0,0,0,.22)}.feedback-text{box-sizing:border-box;resize:vertical;border:1px solid var(--border);border-radius:var(--radius);width:100%;min-height:110px;padding:.5rem;font-family:inherit}.feedback-actions{justify-content:flex-end;gap:.5rem;display:flex}.ingredient-category,.ingredient-unit,.ingredient-qty,.ingredient-weight{font-size:1rem}.recipe-list,.preset-list{margin:0;padding:0;list-style:none}.recipe-row,.preset-row,.run-row,.receipt-row,.category-row,.tag-filter-card{border:1px solid var(--border);border-radius:var(--radius);background:#fff;margin-bottom:.7rem;padding:.8rem}.tag-filter-card>summary{cursor:pointer;font-weight:600}.tag-filter-card[open]>summary{margin-bottom:.6rem}.recipe-row h3,.preset-row h3{margin:0 0 .3rem}.recipe-row{align-items:center;gap:.7rem;display:flex}.recipe-row .recipe-row-title{flex:1;min-width:0;margin:0}.recipe-row-thumb{object-fit:cover;border-radius:var(--radius);flex:none;width:60px;height:60px}.ingredient-list{color:var(--muted);margin:0 0 .5rem;padding:0;list-style:none}.ingredient-list li{font-size:.9rem}.row-actions{align-items:center;gap:.4rem;display:flex}.row-actions .link{color:var(--accent);align-self:center}.row-x{color:var(--danger);cursor:pointer;background:0 0;border:0;padding:.25rem .4rem;font-size:1.6rem;line-height:1}.row-x:hover{color:#7a1f17}.edit-icon,.share-icon{color:var(--muted);cursor:pointer;background:0 0;border:0;padding:.25rem .4rem;font-size:1.5rem;line-height:1}.edit-icon:hover,.share-icon:hover{color:var(--accent)}.row-actions .share-icon{margin-left:auto}.share-link-input{cursor:text;-webkit-user-select:all;user-select:all;font-size:.95rem}.share-link-modal .modal-actions{flex-wrap:wrap}.share-link-modal .modal-actions .link{align-self:center;margin-right:auto}.recipe-filters{flex-wrap:wrap;gap:.5rem;margin-bottom:1rem;display:flex}.recipe-search{flex:1;min-width:12rem}.recipe-tag-filter{flex:none}.recipe-link{color:var(--fg);text-decoration:none}.recipe-link:hover{color:var(--accent);text-decoration:underline}.tag-row{flex-wrap:wrap;gap:.35rem;margin:.2rem 0 .5rem;display:flex}.tag-chip{background:var(--done-bg);border:1px solid var(--border);border-radius:999px;align-items:center;gap:.3rem;padding:.1rem .6rem;font-size:.8rem;display:inline-flex}.tag-chip .remove{color:var(--muted);cursor:pointer;background:0 0;border:0;padding:0;line-height:1}.tag-input{width:100%}.tag-filter-chips{flex-wrap:wrap;gap:.4rem;margin-bottom:1rem;display:flex}.tag-filter-chips .tag-chip{cursor:pointer}.tag-chip-active{background:var(--accent);color:#fff;border-color:var(--accent)}.modal-section{text-transform:uppercase;letter-spacing:.05em;color:var(--muted);border-bottom:1px solid var(--border);margin:1rem 0 .4rem;padding-bottom:.2rem;font-size:.8rem}.recipe-meta-fields{grid-template-columns:1fr 1fr;gap:.5rem .6rem;margin-bottom:.6rem;display:grid}.recipe-meta-fields .meta-field{flex-direction:column;gap:.2rem;font-size:.85rem;display:flex}.recipe-meta-fields .meta-field>span{color:var(--muted);text-transform:uppercase;letter-spacing:.04em;font-size:.75rem}.recipe-meta-fields .meta-field-narrow{grid-column:span 1}@media (width<=540px){.recipe-meta-fields{grid-template-columns:1fr}}.step-edit-list{margin:0;padding-left:1.4rem;list-style:decimal}.step-edit{margin-bottom:.7rem}.step-text{resize:none;field-sizing:content;width:100%;min-height:3rem;font:inherit;overflow:hidden}.step-edit-actions{align-items:center;gap:.3rem;margin-top:.2rem;display:flex}.file-btn{border:1px solid var(--border);border-radius:var(--radius);cursor:pointer;background:#fff;padding:.25rem .6rem;font-size:.85rem;display:inline-block}.file-btn input[type=file]{display:none}.photo-gallery{flex-wrap:wrap;gap:.5rem;margin-bottom:.5rem;display:flex}.photo-thumb-wrap{position:relative}.photo-thumb{object-fit:cover;border-radius:var(--radius);border:1px solid var(--border);width:96px;height:96px;display:block}.photo-thumb-wrap .remove{border:1px solid var(--border);cursor:pointer;background:#fff;border-radius:999px;width:1.3rem;height:1.3rem;line-height:1;position:absolute;top:-6px;right:-6px}.step-edit .photo-thumb{margin-top:.3rem}.cook{border:1px solid var(--border);border-radius:var(--radius);font-size:1.05rem;line-height:1.6;font-family:var(--app-font,var(--font-reading));background:#fff;padding:2rem clamp(1rem,4vw,3.5rem)}.cook-back{color:var(--accent);font-size:.95rem}.cook-header-bar{justify-content:space-between;align-items:center;gap:.5rem;display:flex}.cook-actions{align-items:center;gap:.3rem;display:flex}.cook-header{margin-bottom:1.5rem}.cook-header h1{margin:.6rem 0;font-size:2rem}.cook-tags{flex-wrap:wrap;gap:.5rem;margin-bottom:1rem;display:flex}.cook-meta{color:var(--muted);flex-wrap:wrap;gap:.4rem 1rem;margin:0 0 .8rem;padding:0;font-size:.9rem;display:flex}.cook-meta-pair{align-items:baseline;gap:.3rem;margin:0;display:inline-flex}.cook-meta dt{color:var(--fg);margin:0;font-weight:600}.cook-meta dd{margin:0}.confirm-modal{max-width:380px}.confirm-modal p{margin:.4rem 0 0}.shared-preview{padding-top:.5rem}.shared-import-bar{justify-content:flex-end;margin:.5rem 0 1.2rem;display:flex}.shared-missing{text-align:center;padding:2rem 1rem}.shared-missing h1{margin:.5rem 0}.cook-photos{flex-wrap:wrap;gap:1rem;margin-bottom:1rem;display:flex}.cook-photo{border-radius:var(--radius);width:420px;max-width:100%}.cook-section{border-bottom:2px solid var(--paper-line);margin:2.25rem 0 1rem;padding-bottom:.4rem;font-size:1.4rem}.cook-ingredients{border-collapse:collapse;width:100%;max-width:640px}.cook-ingredients td{border-bottom:1px solid var(--border);padding:.7rem .5rem}.cook-ing-qty{text-align:right;color:var(--muted);white-space:nowrap}.cook-ing-name{flex-direction:column;display:flex}.cook-ing-note{color:var(--muted);font-size:.8rem;font-style:italic}.cook-ing-link{color:var(--accent);text-decoration:underline}.cook-steps{counter-reset:cook-step;max-width:800px;margin:0;padding-left:0;list-style:none}.cook-steps>li.cook-step{counter-increment:cook-step;margin-bottom:2.25rem;padding-left:2rem;position:relative}.cook-steps>li.cook-step:before{content:counter(cook-step) ".";color:var(--muted);font-weight:700;position:absolute;top:0;left:0}.cook-step-section-li{list-style:none}.recipe-section-title{color:var(--muted);border-bottom:1px solid var(--border);margin:1.4rem 0 .3rem;padding-bottom:.2rem;font-size:1rem;font-weight:700}.cook-step-text{margin:0 0 .8rem}.cook-step-photo{border-radius:var(--radius);width:480px;max-width:100%;display:block}.plan-entry-view{min-width:1.6rem;min-height:1.6rem;color:var(--accent);cursor:pointer;font:inherit;background:0 0;border:0;flex:none;justify-content:center;align-items:center;padding:0;text-decoration:none;display:inline-flex}.recipe-sheet{border-radius:var(--radius) var(--radius) 0 0;max-height:92vh;padding:1rem 1.2rem env(safe-area-inset-bottom,1rem);background:#fff;animation:.18s forwards recipe-sheet-up;position:fixed;bottom:0;left:0;right:0;overflow-y:auto}@keyframes recipe-sheet-up{0%{transform:translateY(100%)}to{transform:translateY(0)}}.recipe-sheet-close{float:right;color:var(--muted);cursor:pointer;background:0 0;border:0;padding:.1rem .3rem;font-size:1.5rem;line-height:1;position:sticky;top:0}.recipe-sheet-header{flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:.6rem;display:flex}.recipe-sheet-header h2{margin:.2rem 0}.recipe-sheet-photo{border-radius:var(--radius);width:360px;max-width:100%;margin:.4rem 0}@media (width>=720px){.recipe-sheet{border-radius:var(--radius);width:100%;max-width:640px;animation:none;inset:50% auto auto 50%;transform:translate(-50%,-50%)}}.modal-backdrop{z-index:100;background:rgba(0,0,0,.4);justify-content:center;align-items:center;padding:1rem;display:flex;position:fixed;inset:0}.modal{border-radius:var(--radius);background:#fff;width:100%;max-width:540px;max-height:90vh;padding:1.2rem;overflow-y:auto}.modal h2{margin-top:0}.modal-name{width:100%;margin-bottom:.8rem}.ingredient-edit{margin:0 0 .6rem;padding:0;list-style:none}.ingredient-edit li{border-bottom:1px solid var(--border);grid-template-columns:1fr 64px 64px 84px 104px auto;align-items:center;gap:.3rem .4rem;padding:.5rem 0;display:grid}.ingredient-edit li:last-child{border-bottom:none}.ingredient-edit li>input,.ingredient-edit li>select{min-width:0}.preset-edit li{grid-template-columns:1fr 56px minmax(92px,1fr) minmax(92px,1.3fr) auto}.ingredient-edit li>.remove{color:var(--danger);cursor:pointer;background:0 0;border:0;justify-self:end;width:1.6rem;height:1.6rem;margin:0;padding:0;font-size:1.05rem;font-weight:700;line-height:1}.ingredient-edit li>.remove:hover{color:#7a1f17}.ingredient-card-list{margin:0 0 .6rem;padding:0;list-style:none}.ingredient-card{border-bottom:1px dashed var(--border);grid-template-columns:1fr auto;gap:.4rem .5rem;padding:.6rem 0;display:grid}.ingredient-card:last-child{border-bottom:0}.ingredient-name-row{grid-column:1/2}.ingredient-card>.remove{color:var(--danger);cursor:pointer;background:0 0;border:0;grid-column:2/3;justify-self:end;width:1.6rem;height:1.6rem;padding:0;font-size:1.05rem;font-weight:700;line-height:1}.ingredient-card>.remove:hover{color:#7a1f17}.ingredient-qty-row,.ingredient-category-row,.ingredient-notes-row{grid-column:1/-1}.ingredient-qty-row{gap:.4rem;display:flex}.ingredient-qty-row>input{flex:1;min-width:0}.ingredient-name-row>input,.ingredient-category-row>select,.ingredient-notes-row>input{box-sizing:border-box;width:100%}.ingredient-note-input{font-size:.9rem}.recipe-ref-row{border-left:3px solid var(--accent);padding-left:.5rem}.recipe-ref-row .ingredient-name-row{align-items:center;gap:.5rem;display:flex}.recipe-ref-label{color:var(--muted);font-size:.85rem;font-weight:600}.recipe-ref-select{box-sizing:border-box;flex:1;min-width:0}.ingredient-section-row,.step-section-row{align-items:center;gap:.4rem;padding:.5rem 0 .3rem;display:flex}.ingredient-section-title{box-sizing:border-box;flex:1;min-width:0;font-weight:700}.editor-add-row{flex-wrap:wrap;gap:.5rem;margin-bottom:.4rem;display:flex}.modal-actions{justify-content:flex-end;gap:.5rem;margin-top:1rem;display:flex}.settings-modal{max-width:420px}.settings-hint{color:var(--muted);margin:0 0 1rem;font-size:.9rem}.settings-fonts{flex-direction:column;gap:.5rem;display:flex}.font-option{text-align:left;background:var(--bg);border:1px solid var(--border);border-radius:var(--radius);cursor:pointer;justify-content:space-between;align-items:baseline;gap:1rem;width:100%;padding:.7rem .9rem;display:flex}.font-option:hover{border-color:var(--accent)}.font-option.selected{border-color:var(--accent);box-shadow:inset 0 0 0 1px var(--accent)}.font-sample{font-family:var(--app-font,var(--font-reading));font-size:1.3rem}.font-option-note{color:var(--muted);flex:none;font-size:.8rem}.site-footer{border-top:1px solid var(--border);text-align:left;flex-wrap:wrap;align-items:center;gap:1rem;margin-top:auto;padding:.7rem 1rem;font-size:.85rem;display:flex}.about-link{color:var(--muted);font-size:inherit;cursor:pointer;background:0 0;border:0;margin:0;padding:0}.about-link:hover{text-decoration:underline}.about-modal{cursor:pointer;max-width:360px}.whats-new-modal{max-width:560px}.whats-new-modal .changelog{max-height:60vh;padding-right:.4rem;overflow-y:auto}.whats-new-modal .changelog-entry{margin:0 0 1.2rem}.whats-new-modal .changelog-entry:last-child{margin-bottom:0}.whats-new-modal .changelog-entry h3{color:var(--accent);margin:0 0 .4rem;font-size:1.05rem}.whats-new-modal .changelog-entry ul{margin:0;padding-left:1.2rem}.whats-new-modal .changelog-entry li{margin-bottom:.25rem;line-height:1.4}.about-meta{grid-template-columns:auto 1fr;gap:.4rem 1rem;margin:.5rem 0 0;display:grid}.about-meta dt{color:var(--muted)}.about-meta dd{margin:0}.about-dismiss{color:var(--muted);text-align:center;margin:1rem 0 0;font-size:.8rem}.upload-form{border:1px dashed var(--border);border-radius:var(--radius);background:#fff;margin-bottom:1.2rem;padding:1rem}.upload-form p{margin:0 0 .5rem}.parse-state{border:1px solid var(--border);border-radius:var(--radius);background:#fff;align-items:center;gap:.5rem;margin-bottom:1rem;padding:.6rem .8rem;display:flex}.parse-state.error{color:#a33;border-color:#c66}.parse-state .hint{color:var(--muted);margin-left:.5rem}.admin-ai-usage .days-input{box-sizing:border-box;width:5em;margin:0 .3rem;padding:.2rem .4rem}.admin-ai-usage .page-actions label{align-items:center;gap:.3rem;display:inline-flex}.admin-table{border-collapse:collapse;border:1px solid var(--border);border-radius:var(--radius);background:#fff;width:100%;margin-bottom:1.5rem;overflow:hidden}.admin-table th,.admin-table td{text-align:left;border-bottom:1px solid var(--border);padding:.45rem .7rem;font-size:.9rem}.admin-table th{background:var(--paper-line);font-weight:600}.admin-table tr:last-child td{border-bottom:none}@media (width<=640px){.admin-table{background:0 0;border:none;margin-bottom:0}.admin-table thead{display:none}.admin-table,.admin-table tbody,.admin-table tr,.admin-table td{width:100%;display:block}.admin-table tr{border:1px solid var(--border);border-radius:var(--radius);background:#fff;margin-bottom:.6rem;padding:.6rem .8rem}.admin-table td{border:none;padding:.15rem 0}.admin-table td:before{content:attr(data-label) ": ";color:var(--muted);margin-right:.4rem;font-weight:600}}.spinner{border:2px solid var(--border);border-top-color:currentColor;border-radius:50%;width:14px;height:14px;animation:.9s linear infinite spin;display:inline-block}.spinner-lg{border-width:3px;width:36px;height:36px}@keyframes spin{to{transform:rotate(360deg)}}.done-overlay{pointer-events:none;z-index:1000;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.done-overlay span{font-family:var(--font-knewave);color:#2f8a3e;font-size:clamp(4rem,18vw,8rem);animation:1.2s forwards done-stamp;transform:rotate(-4deg)}@keyframes done-stamp{0%{opacity:0;transform:rotate(-4deg)scale(.6)}20%{opacity:1;transform:rotate(-4deg)scale(1.1)}30%{transform:rotate(-4deg)scale(1)}75%{opacity:1;transform:rotate(-4deg)scale(1)}to{opacity:0;transform:rotate(-4deg)scale(1)}}.parsing-hero{border:1px solid var(--border);border-radius:var(--radius);color:var(--muted);background:#fff;flex-direction:column;align-items:center;gap:.5rem;margin:1rem 0;padding:2.5rem 1rem;display:flex}.parsing-hero .parsing-title{color:var(--ink);margin:.3rem 0 0;font-size:1.05rem}.parsing-hero .parsing-sub{margin:0;font-size:.85rem}.entry-list-wrap{margin-bottom:1rem}.entry-list-header{text-transform:uppercase;letter-spacing:.05em;color:var(--muted);grid-template-columns:minmax(0,1fr) 90px 100px 32px;gap:.5rem;padding:0 .6rem .3rem;font-size:.72rem;display:grid}.entry-list-header .hdr-qty,.entry-list-header .hdr-price{text-align:left}.entry-list{margin:0;padding:0;list-style:none}.entry-list .entry-row{border:1px solid var(--border);border-radius:var(--radius);background:#fff;grid-template-columns:minmax(0,1fr) 90px 100px 32px;grid-template-areas:"desc qty price del""link link link link";align-items:start;gap:.4rem .5rem;margin-bottom:.5rem;padding:.5rem .6rem;display:grid}.entry-list .entry-desc{box-sizing:border-box;resize:none;width:100%;min-height:2.1rem;line-height:1.3;font:inherit;border:1px solid var(--border);border-radius:var(--radius);field-sizing:content;white-space:pre-wrap;word-break:break-word;background:#fff;grid-area:desc;padding:.4rem .5rem;overflow:hidden}.entry-list .entry-qty{grid-area:qty}.entry-list .entry-price{grid-area:price}.entry-list .entry-delete{border:1px solid var(--border);border-radius:var(--radius);cursor:pointer;background:0 0;grid-area:del;align-self:start;width:32px;height:32px;line-height:1}.entry-link-row{grid-area:link;align-items:center;gap:.4rem;padding-left:.4rem;display:flex}.entry-link-arrow{color:var(--muted);font-size:1rem;line-height:1}.entry-link-row .entry-link{box-sizing:border-box;flex:1}.entry-list input[type=text]{box-sizing:border-box;width:100%}.receipt-link-bar{justify-content:flex-end;align-items:center;gap:.5rem;margin-bottom:.5rem;display:flex}.receipt-link-bar .ai-link-btn{cursor:pointer}.receipt-link-bar .err{color:var(--danger);font-size:.85rem}.receipt-actions{justify-content:flex-end;gap:.5rem;margin-top:.5rem;display:flex}.page-actions{align-items:center;gap:.5rem;display:flex}.upload-btn{border:1px solid var(--border);border-radius:var(--radius);cursor:pointer;font-size:inherit;background:#fff;padding:.4rem .8rem;display:inline-block}.upload-btn input[type=file]{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.upload-btn.disabled{opacity:.6;cursor:progress}.run-row a,.item-row,.check-row,.plan-row-entries,.entry-list .entry-row,.category-row,.nav,.totals,.recipe-preset-bar,.page-header,.recipe-row,.preset-row{min-width:0}.run-name,.check-name,.item-name,.meal-plan-select{word-break:break-word;min-width:0}@media (width<=540px){.container{padding:.6rem}.nav{flex-wrap:wrap;gap:.6rem;padding:.6rem .8rem}.nav-links{gap:.6rem}.page-header{flex-wrap:wrap;gap:.5rem}.page-actions{flex-wrap:wrap}.item-input{grid-template-columns:1fr 70px auto}.item-input .item-input-unit{grid-column:1/-1}.ingredient-edit li{grid-template-columns:1fr 64px auto;grid-template-areas:"name qty remove""unit weight weight""cat cat cat";column-gap:.3rem}.ingredient-edit li>input:first-of-type{grid-area:name}.ingredient-edit li>input:nth-of-type(2){grid-area:qty}.ingredient-edit li>input:nth-of-type(3){grid-area:unit}.ingredient-edit li>input:nth-of-type(4){grid-area:weight}.ingredient-edit li>select{grid-area:cat}.ingredient-edit li>.remove{grid-area:remove}.entry-list-header,.entry-list .entry-row{grid-template-columns:minmax(0,1fr) 64px 76px 28px}.entry-list .entry-delete{width:28px;height:28px}.recipe-preset-bar{flex-wrap:wrap}.recipe-preset-bar details{flex:100%;min-width:0}.totals{flex-wrap:wrap;gap:.8rem}.run-row a{flex-wrap:wrap}.run-meta{flex:100%}.cat-section .item-row-main{flex-wrap:nowrap;gap:.3rem}.cat-section .item-name-input{font-weight:500}.cat-section .qty-input{width:4.5rem;padding:.15rem .2rem}.cat-section .item-recipes{display:none}.cat-section .note-toggle,.cat-section .remove{padding:.15rem .35rem;font-size:.85rem}.item-actions{gap:.25rem}}@media (width<=760px){.nav-toggle{order:-1;display:inline-flex}.nav-backdrop{z-index:40;background:0 0;display:block;position:fixed;inset:0}.nav-links{z-index:50;border-bottom:1px solid var(--border);background:#fff;flex-direction:column;align-items:stretch;gap:0;margin-left:0;padding:.3rem 0;display:none;position:absolute;top:100%;left:0;right:0;box-shadow:0 6px 14px rgba(0,0,0,.12)}.nav-links.open{display:flex}.nav-links>*{text-align:left;width:100%;padding:.7rem 1rem}.nav-links .remove{background:0 0}}.receipt-list{margin:0;padding:0;list-style:none}.receipt-row{justify-content:space-between;align-items:center;gap:1rem;display:flex}.receipt-meta{flex-direction:column;gap:.15rem;display:flex}.receipt-when{font-weight:600}.receipt-status{color:var(--muted);font-size:.85rem}.attach-list{margin:.5rem 0 0;padding:0;list-style:none}.attach-list li{margin-bottom:.4rem}.attach-pick{text-align:left;width:100%}