:root{--bg:#fbf9f5;--surface:#fff;--border:#e6e0d6;--text:#22201d;--muted:#7a736a;--accent:#2f6f4f;--accent-soft:#e8f1ea;--danger:#a63d2f;--radius:10px;--shadow:0 1px 2px #22201d0f, 0 8px 24px #22201d0f}*{box-sizing:border-box}[hidden]{display:none!important}body{background:var(--bg);color:var(--text);margin:0;font:16px/1.55 ui-sans-serif,system-ui,-apple-system,Segoe UI,sans-serif}h1,h2,h3{margin:0;font-weight:650;line-height:1.2}a{color:inherit}.masthead{border-bottom:1px solid var(--border);background:var(--surface)}.masthead__inner{align-items:center;gap:1.5rem;max-width:900px;margin:0 auto;padding:.85rem 1.25rem;display:flex}.brand{letter-spacing:-.02em;font-weight:700;text-decoration:none}.brand span{color:var(--accent)}nav{gap:.35rem;margin-right:auto;display:flex}nav a{border-radius:var(--radius);color:var(--muted);padding:.35rem .7rem;font-size:.925rem;text-decoration:none}nav a:hover{background:var(--bg);color:var(--text)}nav a[aria-current=page]{background:var(--accent-soft);color:var(--accent);font-weight:600}main{max-width:900px;margin:0 auto;padding:2rem 1.25rem 4rem}.page-head{align-items:baseline;gap:1rem;margin-bottom:1.5rem;display:flex}.page-head p{color:var(--muted);margin:0;font-size:.925rem}.page-head button{margin-left:auto}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:1.25rem}button,.button{font:inherit;border:1px solid var(--border);border-radius:var(--radius);background:var(--surface);color:var(--text);cursor:pointer;padding:.45rem .9rem;font-size:.9rem}button:hover{border-color:var(--muted)}button.primary{background:var(--accent);border-color:var(--accent);color:#fff;font-weight:600}button.primary:hover{filter:brightness(1.08)}button.ghost{color:var(--muted);background:0 0;border-color:#0000;padding:.35rem .5rem}button.ghost:hover{background:var(--bg);color:var(--text)}button.ghost.danger:hover{color:var(--danger)}.icon-button{color:var(--muted);background:0 0;border-color:#0000;justify-content:center;align-items:center;padding:.4rem;line-height:0;display:inline-flex}.icon-button:hover{background:var(--bg);border-color:var(--border);color:var(--text)}.icon-button.danger:hover{color:var(--danger);border-color:var(--danger)}.icon-button.warn{color:var(--danger);flex-shrink:0}.icon-button.warn:hover{color:var(--danger);border-color:var(--danger);background:var(--bg)}.recipe-card{border:1px solid var(--border);border-radius:var(--radius);background:var(--surface);width:100%;margin-bottom:.75rem;padding:1rem 1.25rem}.recipe-card:hover{border-color:var(--muted);box-shadow:var(--shadow)}.recipe-card__head{align-items:flex-start;gap:.5rem;display:flex}.recipe-card__title{flex-wrap:wrap;align-items:center;gap:.35rem;display:flex}.recipe-card__body{min-width:0;font:inherit;color:inherit;text-align:left;cursor:pointer;background:0 0;border:0;flex:1;padding:0}.day-picker{border-top:1px solid var(--border);flex-wrap:wrap;align-items:center;gap:.35rem .5rem;margin-top:.75rem;padding-top:.75rem;display:flex}.day-picker__range{color:var(--muted);flex-shrink:0;font-size:.8rem;font-weight:600}.day-picker__days{flex-wrap:wrap;flex:1;gap:.35rem;min-width:0;display:flex}.day-picker__nav{flex-shrink:0;align-items:center;gap:.1rem;display:flex}.day-picker__nav button{min-width:1.75rem;padding:.25rem .35rem;font-size:.85rem;line-height:1}.day-picker__day{border:1px solid var(--border);border-radius:var(--radius);background:var(--bg);min-width:2.6rem;color:var(--text);font:inherit;cursor:pointer;padding:.3rem .45rem;font-size:.8rem}.day-picker__day:hover:not(:disabled){border-color:var(--accent);color:var(--accent)}.day-picker__day:disabled{opacity:.45;cursor:not-allowed}.day-picker__day[aria-pressed=true]{background:var(--accent-soft);border-color:var(--accent);color:var(--accent)}.filter-panel{margin-bottom:1.5rem;position:relative}.pantry-filter,.recipe-filter{margin-bottom:1rem}.pantry-filter .search-bar,.recipe-filter .search-bar{min-height:2.25rem}.filter-label{margin-bottom:.45rem}.filter-token{border:1px solid var(--accent);background:var(--accent-soft);color:var(--accent);vertical-align:baseline;border-radius:999px;margin:0 .2rem;padding:.05rem .45rem;font-size:.75rem;font-weight:600;line-height:1.4;display:inline-block}.plan-output:not(:empty){border-top:1px solid var(--border);margin-top:1.25rem;padding-top:1.25rem}.plan-result__summary{margin:0 0 1rem;font-size:.9rem;font-weight:600}.plan-result__stocked{border-radius:var(--radius);background:var(--accent-soft);color:var(--accent);margin:0;padding:.85rem 1rem;font-size:.9rem;font-weight:500}.plan-result__message{margin:0;font-size:.9rem}.plan-result__footer{border-top:1px solid var(--border);justify-content:flex-start;margin-top:1rem;padding-top:.85rem;display:flex}.grocery-list{border:1px solid var(--border);border-radius:var(--radius);background:var(--bg);padding:1rem}.grocery-list__head{justify-content:space-between;align-items:baseline;gap:1rem;margin-bottom:.75rem;display:flex}.grocery-list__title{margin:0;font-size:.95rem;font-weight:600}.grocery-list__total{color:var(--accent);font-size:.9rem;font-weight:600}.grocery-list__items{margin:0;padding:0;list-style:none}.grocery-list__item{border-top:1px solid var(--border);justify-content:space-between;align-items:baseline;gap:1rem;padding:.45rem 0;font-size:.9rem;display:flex}.grocery-list__item:first-child{border-top:none;padding-top:0}.grocery-list__item-name{color:var(--muted)}.grocery-list__item-cost{font-variant-numeric:tabular-nums;flex-shrink:0}.grocery-list__actions{justify-content:flex-end;gap:.15rem;margin-top:.85rem;display:flex}.icon-button.is-success{color:var(--accent);background:var(--accent-soft);border-color:#0000}.search-bar{border:1px solid var(--border);border-radius:var(--radius);background:var(--bg);cursor:text;flex-wrap:wrap;align-items:center;gap:.4rem;min-height:2.5rem;padding:.35rem .55rem;display:flex}.search-bar:focus-within{outline:2px solid var(--accent-soft);border-color:var(--accent)}.search-bar__chips{display:contents}.search-bar__field{flex:1;align-items:center;min-width:8rem;display:flex;position:relative}.search-bar__guide{color:var(--muted);white-space:nowrap;text-overflow:ellipsis;pointer-events:none;align-items:center;padding:.25rem .15rem;font-size:.85rem;line-height:1.4;display:flex;position:absolute;inset:0;overflow:hidden}.search-bar:has(.search-chip) .search-bar__guide,.search-bar__field:focus-within .search-bar__guide,.search-bar__field:has(input:not(:placeholder-shown)) .search-bar__guide{opacity:0}.search-bar input{width:100%;min-width:0;box-shadow:none;background:0 0;border:0;flex:1;padding:.25rem .15rem}.search-bar input:focus{border-color:#0000;outline:none}.search-chip{border:1px solid var(--accent);background:var(--accent-soft);color:var(--accent);font:inherit;cursor:pointer;border-radius:999px;align-items:center;gap:.25rem;padding:.15rem .5rem;font-size:.8rem;font-weight:600;display:inline-flex}.filter-suggestions{z-index:5;border:1px solid var(--border);border-radius:var(--radius);background:var(--surface);box-shadow:var(--shadow);max-height:12rem;margin:0;padding:.35rem;list-style:none;position:absolute;top:calc(100% - .35rem);left:1.25rem;right:1.25rem;overflow:auto}.filter-panel .filter-suggestions{left:0;right:0}.filter-suggestions button{border-radius:calc(var(--radius) - 2px);width:100%;font:inherit;text-align:left;cursor:pointer;color:inherit;background:0 0;border:0;padding:.45rem .6rem;display:block}.filter-suggestions button:hover{background:var(--accent-soft);color:var(--accent)}input,textarea,select{font:inherit;border:1px solid var(--border);border-radius:var(--radius);background:var(--surface);color:var(--text);width:100%;padding:.45rem .6rem;font-size:.9rem}input:focus,textarea:focus,select:focus{outline:2px solid var(--accent-soft);border-color:var(--accent)}textarea{resize:vertical;min-height:7rem}label{color:var(--muted);margin-bottom:.3rem;font-size:.825rem;font-weight:600;display:block}.field{margin-bottom:1rem}.ingredient-field,.ingredient-input{position:relative}.ingredient-suggestions{top:calc(100% + .25rem);left:0;right:0}.ingredient-suggestions button.ingredient-suggestion{justify-content:space-between;align-items:center;gap:.75rem;display:flex}.ingredient-suggestion__name{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--muted);flex:1;overflow:hidden}.ingredient-suggestion__unit{background:var(--bg);border:1px solid var(--border);color:var(--muted);border-radius:999px;flex-shrink:0;padding:.1rem .45rem;font-size:.75rem;font-weight:500;line-height:1.35}.ingredient-suggestions button.ingredient-suggestion:hover .ingredient-suggestion__name{color:var(--accent)}.ingredient-suggestions button.ingredient-suggestion:hover .ingredient-suggestion__unit{background:var(--surface);border-color:var(--accent);color:var(--accent)}.checkbox{color:var(--text);align-items:center;gap:.5rem;font-size:.9rem;font-weight:500;display:flex}.checkbox input{width:auto}table{border-collapse:collapse;width:100%}th{text-align:left;text-transform:uppercase;letter-spacing:.05em;color:var(--muted);padding:0 .6rem .5rem;font-size:.75rem}td{border-top:1px solid var(--border);vertical-align:middle;padding:.4rem .6rem}td.actions{text-align:right;white-space:nowrap;width:1%}.row{align-items:center;gap:.6rem;display:flex}.pantry-add{grid-template-columns:minmax(0,1fr) 5.5rem 5.5rem 5.5rem 5.5rem;align-items:center;gap:.6rem;margin-top:1rem;padding:0 .6rem;display:grid}.pantry-add input,.pantry-add button{width:100%;min-width:0}.pantry-table{table-layout:fixed;width:100%}.pantry-table tbody tr:hover{background:var(--bg)}.pantry-table input{width:100%;max-width:100%;box-shadow:none;background:0 0;border:none;border-radius:4px;margin:0 -.35rem;padding:.15rem .35rem}.pantry-table input:focus{background:var(--surface);box-shadow:inset 0 0 0 1px var(--accent);outline:none}.unit-input{width:100%;min-width:0;position:relative}.unit-suggestions{min-width:6rem;top:calc(100% + .25rem);left:-.35rem;right:-.35rem}.pantry-table__name{width:50%}.pantry-table__amount,.pantry-table__unit,.pantry-table__cost,.pantry-table__actions{width:5.5rem}.pantry-table__actions-inner{justify-content:flex-end;align-items:center;gap:.15rem;display:inline-flex}.pantry-table .pantry-grip{color:var(--muted);opacity:.55;cursor:grab;-webkit-user-select:none;user-select:none;touch-action:none;border-radius:4px;justify-content:center;align-items:center;padding:.35rem .2rem;line-height:0;display:inline-flex}.pantry-table .pantry-grip svg{pointer-events:none}.pantry-table .pantry-grip:active{cursor:grabbing}.pantry-table tr:hover .pantry-grip{opacity:.9}.pantry-table tr.is-dragging{opacity:.45}.pantry-table tr.is-drop-target td{box-shadow:inset 0 2px 0 0 var(--accent)}body.is-reordering{cursor:grabbing;-webkit-user-select:none;user-select:none}body.is-reordering *{cursor:grabbing!important}.toolbar{flex-wrap:wrap;align-items:center;gap:.75rem;margin-bottom:1rem;display:flex}.empty{color:var(--muted);text-align:center;padding:2rem 1rem;font-size:.925rem}.chip{border:1px solid var(--border);background:var(--surface);color:var(--muted);cursor:pointer;border-radius:999px;padding:.15rem .55rem;font-size:.8rem}.chip:hover{border-color:var(--muted);color:var(--text)}.chip[aria-pressed=true]{background:var(--accent-soft);border-color:var(--accent);color:var(--accent);font-weight:600}.tag{background:var(--accent-soft);color:var(--accent);border-radius:999px;padding:.1rem .45rem;font-size:.72rem;font-weight:600;display:inline-block}.muted{color:var(--muted)}.error{color:var(--danger);font-size:.9rem}dialog{border:1px solid var(--border);border-radius:var(--radius);background:var(--surface);width:min(34rem,92vw);color:var(--text);box-shadow:var(--shadow);padding:1.5rem;position:relative}dialog::backdrop{background:#22201d59}#viewer{padding:0}.viewer-header{align-items:center;gap:.5rem;padding:1.25rem 1.25rem 0;display:flex}.viewer-body{padding:.65rem 1.25rem 0}.viewer-title{flex:1;align-items:center;gap:.35rem;min-width:0;display:flex}#viewer-warning{flex-shrink:0;align-items:center;display:inline-flex}.viewer-header .dialog-close{flex-shrink:0;position:static}.viewer-title h2{margin:0;font-size:1.15rem}.viewer-actions{justify-content:space-between;align-items:center;gap:.6rem;margin-top:0;padding:.75rem 1.25rem 1.25rem;display:flex}.dialog-actions{justify-content:flex-end;gap:.6rem;margin-top:1.5rem;display:flex}.viewer-actions__end{align-items:center;gap:.15rem;display:inline-flex}button.confirm-delete{background:var(--danger);border-color:var(--danger);color:#fff;font-weight:600}button.confirm-delete:hover{filter:brightness(1.08)}.issue-report{flex-direction:column;gap:1rem;display:flex}.issue-group__title{color:var(--danger);letter-spacing:.01em;margin:0 0 .35rem;font-size:.85rem;font-weight:650}.issue-group__list{flex-direction:column;gap:.25rem;margin:0;padding:0;list-style:none;display:flex}.issue-group__list li{font-size:.9rem;line-height:1.45}.issue-group__ingredient{font-weight:550}.issue-group__detail{font-size:.85rem}.issue-group__hint,.issue-group__body{margin:.35rem 0 0;font-size:.85rem;line-height:1.45}.dropzone{border:1px dashed var(--border);border-radius:var(--radius);background:var(--bg);color:var(--muted);text-align:center;cursor:pointer;padding:1.1rem;font-size:.85rem;font-weight:400;display:block}.dropzone:hover,.dropzone.is-active{border-color:var(--accent);background:var(--accent-soft);color:var(--accent)}.dialog-close{position:absolute;top:.9rem;right:.9rem}.section-label{text-transform:uppercase;letter-spacing:.05em;color:var(--muted);margin:1.25rem 0 .35rem;font-size:.75rem;font-weight:600}.gate{text-align:center;max-width:22rem;margin:5rem auto}.gate p{color:var(--muted);font-size:.925rem}.gate-form{text-align:left;flex-direction:column;gap:.5rem;margin-top:1.25rem;display:flex}.gate-form .primary{margin-top:.25rem}.gate-toggle{width:100%;margin-top:.5rem;font-size:.85rem}#signin-status{min-height:1.25em;color:var(--muted);margin-top:.85rem;font-size:.875rem}
