:root{--ink:#17211b;--muted:#69746d;--line:#d9dfd9;--soft-line:#edf0ec;--paper:#fbfbf7;--surface:#fff;--field:#f6f7f2;--accent:#1f6f5b;--accent-soft:#e6f1ed;--ok:#1f7a4f;--warn:#a15d16;--warn-soft:#fff4df;--danger:#a33a37}*{box-sizing:border-box}body{background:var(--paper);color:var(--ink);margin:0;font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif}button,input,select,textarea{font:inherit}button{cursor:pointer}.app-shell{min-height:100vh}.topbar{border-bottom:1px solid var(--line);z-index:20;background:#fbfbf7f5;align-items:center;gap:16px;padding:12px 18px;display:flex;position:sticky;top:0}.brand{min-width:210px}.brand-heading{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.brand-title{font-size:16px;font-weight:700;line-height:1.1}.dev-badge{background:var(--warn-soft);color:var(--warn);letter-spacing:0;border:1px solid #f0d4a4;border-radius:999px;padding:2px 6px;font-size:10px;font-weight:800;line-height:1.2}.brand-subtitle{color:var(--muted);margin-top:3px;font-size:12px}.segmented,.tabs{align-items:center;gap:4px;display:flex}.segmented button,.tabs button,.icon-button,.text-button{color:var(--muted);background:0 0;border:1px solid #0000;border-radius:6px;padding:8px 10px}.segmented button.active,.tabs button.active{background:var(--surface);border-color:var(--line);color:var(--ink)}.text-button.primary{background:var(--accent);color:#fff}.text-button.danger{color:var(--danger)}.topbar-actions{align-items:center;gap:8px;margin-left:auto;display:flex}.topbar-actions a{text-decoration:none}.content{padding:18px}.status-line{color:var(--muted);margin:0 0 12px;font-size:13px}.error{color:var(--danger);background:#fff0ef;border:1px solid #efc3c0;border-radius:6px;margin:0 0 12px;padding:10px 12px}.toolbar{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px;margin-bottom:12px;display:flex}.week-controls{align-items:center;gap:8px;display:flex}.week-title{text-align:center;min-width:240px;font-size:18px;font-weight:700}.grid-wrap{background:var(--surface);border:1px solid var(--line);border-radius:8px;overflow:auto}.planner-grid{min-width:1180px}.grid-row,.grid-head{grid-template-columns:150px repeat(7,minmax(132px,1fr));display:grid}.grid-head{border-bottom:1px solid var(--line);z-index:2;background:#eef3ee;position:sticky;top:0}.corner,.day-head,.slot-label,.day-cell{border-right:1px solid var(--soft-line)}.day-head{text-align:center;padding:8px}.day-name{letter-spacing:0;font-size:12px;font-weight:800}.day-date{color:var(--muted);margin-top:2px;font-size:12px}.group-row{border-bottom:1px solid var(--line);color:var(--muted);letter-spacing:.06em;text-transform:uppercase;background:#f4f5ef;padding:5px 10px;font-size:11px;font-weight:800}.group-toggle{color:var(--muted);letter-spacing:.06em;text-transform:uppercase;background:0 0;border:0;padding:0;font-size:11px;font-weight:800}.group-toggle:hover{color:var(--accent)}.slot-label{background:var(--surface);border-bottom:1px solid var(--soft-line);color:#405046;padding:8px;font-size:12px;font-weight:700;line-height:1.25}.slot-time{color:var(--muted);margin-top:3px;font-size:11px;font-weight:500;display:block}.day-cell{border-bottom:1px solid var(--soft-line);min-height:76px;padding:6px}.day-cell.weekend{background:#fffaf0}.day-cell.dimmed{color:#a9b0aa;background:#f2f3ef}.add-cell{color:#9aa39c;text-align:left;background:0 0;border:1px dashed #0000;border-radius:6px;width:100%;margin-top:4px;padding:4px;display:block}.add-cell:hover{border-color:var(--line)}.suggestion-strip{flex-wrap:wrap;gap:4px;margin-top:6px;display:flex}.suggestion-chip{border:1px solid var(--line);color:#405046;overflow-wrap:anywhere;text-align:left;background:#eef3ee;border-radius:999px;max-width:100%;padding:3px 6px;font-size:10px;line-height:1.2}.suggestion-chip:hover{background:var(--accent-soft);color:var(--accent);border-color:#bed4cb}.meal-pill{border:1px solid var(--line);text-align:left;background:#fbfcf8;border-radius:6px;width:100%;margin-bottom:5px;padding:6px}.meal-title{font-size:12px;font-weight:700;line-height:1.25}.meal-meta,.event-chip{color:var(--muted);margin-top:3px;font-size:11px;line-height:1.25}.badge-row{flex-wrap:wrap;gap:4px;margin-top:5px;display:flex}.badge{border-radius:999px;padding:2px 6px;font-size:10px;font-weight:700}.badge.recipe{background:var(--accent-soft);color:var(--accent)}.badge.missing{color:#59635c;background:#eceee9}.badge.alias{color:#445d9e;background:#e9edf8}.badge.composite{background:var(--warn-soft);color:var(--warn)}.badge.flex{color:#74651b;background:#f4f0dc}.event-chip{color:#71450d;background:#fff4df;border:1px solid #f0d4a4;border-radius:5px;padding:4px}.exception-list{border-top:1px solid var(--soft-line);margin-top:14px;padding-top:12px}.exception-list h3{color:var(--muted);text-transform:uppercase;margin:0 0 8px;font-size:12px}.exception-row{border:1px solid var(--soft-line);border-radius:6px;justify-content:space-between;align-items:center;gap:10px;margin-bottom:6px;padding:8px;display:flex}.two-col{grid-template-columns:minmax(0,1.2fr) minmax(320px,.8fr);gap:14px;display:grid}.stocktake-layout{grid-template-columns:minmax(0,1fr);gap:14px;display:grid}.stocktake-subtabs{flex-wrap:wrap;gap:8px;margin-bottom:12px;display:flex}.stocktake-subtabs button{background:var(--field);border:1px solid var(--line);color:var(--muted);border-radius:6px;padding:8px 10px}.stocktake-subtabs button.active{background:var(--accent);border-color:var(--accent);color:#fff}.stocktake-actions{align-items:center}.stocktake-quickbar{border:1px solid var(--line);background:#f8faf6;border-radius:8px;grid-template-columns:minmax(220px,1fr) auto auto auto;align-items:center;gap:8px;margin-bottom:12px;padding:8px;display:grid}.stocktake-search-field{grid-template-columns:auto minmax(0,1fr);align-items:center;gap:8px;display:grid}.stocktake-search-field span,.stocktake-toggle,.stocktake-progress{color:var(--muted);font-size:12px;font-weight:800}.stocktake-search-field input{border:1px solid var(--line);background:#fff;border-radius:6px;min-width:0;padding:8px}.stocktake-toggle{white-space:nowrap;align-items:center;gap:6px;min-height:34px;display:inline-flex}.stocktake-toggle input{accent-color:var(--accent)}.stocktake-progress{background:var(--accent-soft);color:var(--accent);text-align:center;white-space:nowrap;border:1px solid #c6dbd1;border-radius:6px;padding:8px 10px}.stocktake-button{border:1px solid var(--line);color:var(--ink);background:#fff;border-radius:6px;justify-content:center;align-items:center;min-height:34px;padding:8px 10px;font-size:13px;font-weight:700;line-height:1.2;display:inline-flex;box-shadow:0 1px #16231d0f}.stocktake-button:hover{background:#f6f8f3;border-color:#b9c8bd}.stocktake-button.primary{background:var(--accent);border-color:var(--accent);color:#fff}.stocktake-button.secondary{color:var(--accent);background:#eef5ef;border-color:#b9d0bf}.stocktake-button.danger{color:var(--danger);background:#fff0ef;border-color:#e0a7a4}.stocktake-button.compact{min-height:30px;padding:6px 8px;font-size:12px}.stocktake-button:disabled{background:var(--field);border-color:var(--soft-line);color:var(--muted)}.stocktake-sections{gap:12px;display:grid}.stocktake-section{border:1px solid var(--line);border-radius:8px;padding:12px}.buy-needed-section{background:#fffaf0;border-color:#f0d4a4;margin-bottom:12px}.need-history-list{gap:8px;margin-bottom:10px;display:grid}.need-history-card{background:#ffffffb8;border:1px solid #f0d4a4;border-radius:6px;padding:8px}.need-history-card summary{cursor:pointer;justify-content:space-between;align-items:center;gap:10px;font-size:13px;display:flex}.need-history-card .inventory-chip-list{margin-top:8px}.stocktake-section h3{margin:0;font-size:14px}.stocktake-items{grid-template-columns:1fr;gap:7px;display:grid}.stocktake-row-head,.stocktake-item{grid-template-columns:minmax(180px,1fr) minmax(150px,1.2fr) 112px 112px;align-items:center;gap:8px;min-height:38px;display:grid}.stocktake-row-head{color:var(--muted);text-transform:uppercase;margin-bottom:6px;font-size:11px;font-weight:700}.stocktake-item span{overflow-wrap:anywhere;font-size:13px}.stocktake-subgroup{border-left:2px solid var(--line);gap:6px;margin-left:12px;padding-left:12px;display:grid}.stocktake-group-header{border:1px solid var(--soft-line);background:#f6f8f3;border-radius:6px;justify-content:space-between;align-items:center;margin-bottom:6px;padding:8px 10px;display:flex}.stocktake-group-header>span{color:var(--ink);font-size:13px;font-weight:800}.stocktake-subitem>span:first-child{color:var(--muted);font-size:12px}.stocktake-item span .tracking-hint{color:var(--muted);margin-top:2px;font-size:12px;font-style:normal;display:block}.stocktake-item input{background:var(--field);border:1px solid var(--line);border-radius:6px;min-width:0;padding:7px}.stocktake-cell-actions{justify-content:flex-end;display:flex}.tracking-editor{border:1px solid var(--soft-line);background:#f6f8f3;border-radius:6px;grid-column:1/-1;grid-template-columns:minmax(150px,.7fr) 110px minmax(180px,1fr);gap:6px;padding:8px;display:grid}.tracking-editor input,.tracking-editor select,.stocktake-add-row select{background:var(--field);border:1px solid var(--line);border-radius:6px;min-width:0;padding:7px}.stocktake-cell-actions .text-button{padding:6px 7px}.stocktake-status-cell{grid-template-columns:minmax(58px,.8fr) repeat(2,minmax(58px,1fr));align-items:center;gap:5px;display:grid}.stocktake-status-cell>span{color:var(--muted);min-width:58px}.stocktake-status-value.existing{color:var(--muted)}.stocktake-status-value.today-have{color:var(--ok);font-weight:800}.stocktake-status-value.today-alert{color:var(--danger);font-weight:800}.stocktake-changed{color:var(--muted);white-space:nowrap;font-size:12px}.stocktake-changed.today{color:var(--ok);font-weight:800}.stocktake-section-footer{justify-content:flex-end;margin-top:10px;display:flex}.stocktake-location-inventory{border-top:1px solid var(--soft-line);margin-top:12px;padding-top:10px}.stocktake-location-inventory h4{color:var(--muted);letter-spacing:0;text-transform:uppercase;margin:0 0 7px;font-size:11px}.inventory-chip-list{gap:6px;display:grid}.inventory-chip{border:1px solid var(--soft-line);background:#fbfcf8;border-radius:6px;justify-content:space-between;align-items:center;gap:8px;min-width:0;padding:7px 8px;display:flex}.inventory-chip span{overflow-wrap:anywhere;gap:2px;min-width:0;font-size:13px;display:grid}.inventory-chip em{color:var(--muted);font-size:12px;font-style:normal}.stocktake-add-box{border:1px solid var(--soft-line);background:#f6f8f3;border-radius:8px;gap:7px;margin-top:10px;padding:9px;display:grid}.stocktake-add-row{grid-template-columns:minmax(0,1fr) 74px 74px minmax(140px,.7fr) minmax(120px,.55fr) auto;gap:7px;display:grid}.stocktake-add-row input,.stocktake-notes-input{border:1px solid var(--line);background:#fff;border-radius:6px;min-width:0;padding:7px}.duplicate-warning{color:#7d5200;background:#fff4df;border:1px solid #ecc982;border-radius:6px;margin:0;padding:6px 8px;font-size:12px}.manual-shopping-import{border:1px solid var(--line);border-radius:8px;margin-bottom:14px;padding:10px}.shopping-history{border-top:1px solid var(--line);margin-top:16px;padding-top:12px}.shopping-history summary,.stocktake-history summary{cursor:pointer}.manual-shopping-import summary{color:var(--accent);cursor:pointer;font-size:13px;font-weight:700}.manual-shopping-import textarea{border:1px solid var(--line);resize:vertical;background:#fff;border-radius:6px;width:100%;min-height:220px;padding:8px}.review-shopping-list{background:#fffaf0;border-color:#f0d4a4}.panel{background:var(--surface);border:1px solid var(--line);border-radius:8px;padding:14px}.panel h2,.panel h3{margin:0 0 10px;font-size:15px}.form-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;display:grid}.field{flex-direction:column;gap:4px;display:flex}.field.full{grid-column:1/-1}.field span{color:var(--muted);font-size:12px;font-weight:700}.field input,.field select,.field textarea{background:var(--field);border:1px solid var(--line);color:var(--ink);border-radius:6px;min-width:0;padding:8px}.field textarea{resize:vertical;min-height:72px}.field-help{color:var(--muted);font-size:11px;line-height:1.35}.times-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;display:grid}.time-field{gap:4px;display:grid}.time-field span{color:var(--muted);font-size:11px;font-weight:700}.time-field input{background:var(--field);border:1px solid var(--line);border-radius:6px;min-width:0;padding:7px}.list-table{border-collapse:collapse;width:100%}.list-table th,.list-table td{border-bottom:1px solid var(--soft-line);text-align:left;vertical-align:top;padding:8px;font-size:13px}.list-table th{color:var(--muted);text-transform:uppercase;font-size:11px}.modal-backdrop{z-index:50;background:#17211b57;justify-content:center;align-items:center;padding:20px;display:flex;position:fixed;inset:0}.modal{background:var(--surface);border-radius:8px;width:100%;max-width:760px;max-height:92vh;padding:18px;overflow:auto;box-shadow:0 24px 80px #17211b3d}.modal h2{margin:0 0 12px;font-size:18px}.inline-editor-section{border-top:1px solid var(--line);margin-top:16px;padding-top:14px}.section-heading-row{flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:8px;display:flex}.section-heading-row h3{margin:0;font-size:14px}.modal-actions,.button-row{flex-wrap:wrap;gap:8px;margin-top:12px;display:flex}.button-row.compact{margin-top:8px;margin-bottom:10px}.button-row.inline{margin-top:0}button:disabled{cursor:default;opacity:.62}.recipe-results{border:1px solid var(--line);border-radius:6px;max-height:180px;margin-top:6px;overflow:auto}.recipe-result{border:0;border-bottom:1px solid var(--soft-line);text-align:left;background:#fff;justify-content:space-between;width:100%;padding:8px;display:flex}.review-list{gap:10px;display:grid}.review-card{border:1px solid var(--line);border-radius:8px;padding:12px}.review-card-head{justify-content:space-between;align-items:center;gap:10px;display:flex}.review-search{grid-template-columns:minmax(0,1fr) auto;gap:8px;margin-top:10px;display:grid}.review-search input{background:var(--field);border:1px solid var(--line);border-radius:6px;min-width:0;padding:8px}.review-results{max-height:220px}.chooser-sections{grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;margin-bottom:14px;display:grid}.chooser-section{border:1px solid var(--line);border-radius:8px;padding:10px}.chooser-section h3{color:var(--muted);text-transform:uppercase;margin:0 0 8px;font-size:12px}.chooser-options{flex-direction:column;gap:5px;display:flex}.chooser-option{border:1px solid var(--soft-line);color:var(--ink);overflow-wrap:anywhere;text-align:left;background:#fbfcf8;border-radius:6px;padding:6px 7px;line-height:1.25}.chooser-option:hover{background:var(--accent-soft);color:var(--accent);border-color:#bed4cb}.helper-sheet{border:1px solid var(--line);background:#fff;padding:12px}.helper-title{justify-content:space-between;align-items:baseline;margin-bottom:8px;display:flex}.helper-title h1{margin:0;font-size:18px}.prep-list{grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin-top:12px;display:grid}.prep-card{border:1px solid var(--line);border-radius:6px;padding:8px}.quiet{color:var(--muted)}.helper-page-shell{max-width:none;margin:0;padding:clamp(10px,2vw,18px)}.helper-page-header{background:var(--surface);border:1px solid var(--line);border-radius:8px;justify-content:space-between;align-items:center;gap:16px;padding:16px;display:flex}.helper-page-kicker{color:var(--accent);text-transform:uppercase;font-size:12px;font-weight:700}.helper-page-header h1{margin:2px 0 4px;font-size:24px}.helper-page-header p{color:var(--muted);margin:0}.helper-datebar{grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:10px;margin:14px 0;display:grid}.helper-datebar>button,.helper-days button,.helper-row-actions button{background:var(--surface);border:1px solid var(--line);color:var(--ink);border-radius:6px;padding:9px 10px}.helper-days{grid-template-columns:repeat(7,minmax(0,1fr));gap:6px;display:grid}.helper-days button{gap:2px;display:grid}.helper-days button span{color:var(--muted);font-size:12px;font-weight:700}.helper-days button.active,.helper-main-tabs button.active,.helper-row-actions button.active{background:var(--accent);border-color:var(--accent);color:#fff}.helper-main-tabs{grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin:14px 0;display:grid}.helper-main-tabs button{background:var(--surface);border:1px solid var(--line);color:var(--ink);border-radius:8px;min-height:48px;padding:12px 10px;font-weight:700}.helper-section{background:var(--surface);border:1px solid var(--line);border-radius:8px;margin-top:14px;padding:14px}.helper-section-head{justify-content:space-between;align-items:baseline;margin-bottom:10px;display:flex}.helper-section-head h2{margin:0;font-size:18px}.helper-section-head span,.helper-status,.helper-empty{color:var(--muted)}.helper-status.error{color:var(--danger)}.helper-banner{background:var(--warn-soft);color:var(--warn);border:1px solid #edd6aa;border-radius:8px;margin-bottom:10px;padding:10px 12px}.helper-banner.subtle{background:var(--accent-soft);color:var(--accent);border-color:#c9ded6}.helper-list{gap:8px;display:grid}.helper-list.compact{gap:6px}.helper-list.compact .helper-row{grid-template-columns:minmax(0,1fr) auto;padding:8px}.helper-list.compact .helper-row-actions{grid-column:1/-1;grid-template-columns:1fr}.helper-row{border:1px solid var(--soft-line);background:#fcfdfa;border-radius:8px;grid-template-columns:minmax(0,1fr) auto;align-items:start;gap:10px;padding:10px;display:grid}.helper-row.done{opacity:.58}.helper-row-title{overflow-wrap:anywhere;font-size:17px;font-weight:700}.helper-row-meta,.helper-note{color:var(--muted);margin-top:3px;font-size:13px}.helper-row-actions{grid-template-columns:1fr;gap:6px;display:grid}.stocktake-status-actions{border-top:1px solid var(--soft-line);grid-column:1/-1;grid-template-columns:repeat(3,minmax(0,1fr));gap:6px;padding-top:6px;display:grid}.stocktake-status-actions button{background:#f8faf6}.helper-stocktake-tools{flex-wrap:wrap;gap:8px;margin-bottom:10px;display:flex}.helper-stocktake-location-sections{gap:12px;display:grid}.helper-stocktake-location{border:1px solid var(--soft-line);border-radius:8px;padding:10px}.helper-stocktake-location-head{justify-content:space-between;align-items:start;gap:10px;margin-bottom:8px;display:flex}.helper-stocktake-location-head h3{margin:0;font-size:16px}.helper-stocktake-location-head p,.helper-stocktake-location-head span{color:var(--muted);margin:3px 0 0;font-size:13px}.helper-stocktake-add,.helper-stocktake-edit{grid-template-columns:minmax(130px,1.4fr) 90px 90px auto;gap:6px;display:grid}.helper-stocktake-add input,.helper-stocktake-add select,.helper-stocktake-edit input{background:var(--field);border:1px solid var(--line);border-radius:6px;min-width:0;padding:8px}.helper-stocktake-add button,.helper-save-snapshot{background:var(--accent);border:1px solid var(--accent);color:#fff;border-radius:6px;padding:8px 10px}.helper-stocktake-add button{padding:6px 8px}.helper-stocktake-edit{grid-template-columns:120px 100px;margin-top:8px}.helper-stocktake-edit label{color:var(--muted);gap:3px;font-size:12px;display:grid}.helper-stocktake-edit input{padding:10px;font-size:18px;font-weight:700}.helper-stocktake-add-row{grid-template-columns:minmax(0,1fr) 90px 90px minmax(120px,.65fr) auto}.helper-save-snapshot{justify-self:start}.helper-stocktake-location-footer{justify-content:flex-end;margin-top:8px;display:flex}.danger-action{background:var(--surface)!important;color:var(--danger)!important;border-color:#efb0a9!important;padding:6px 8px!important}.helper-week-table-wrap{overflow-x:auto}.helper-week-table{border:1px solid var(--line);border-radius:8px;min-width:980px;overflow:hidden}.helper-week-head,.helper-week-row{grid-template-columns:130px repeat(7,minmax(110px,1fr));display:grid}.helper-week-corner,.helper-week-day-header,.helper-week-slot,.helper-week-cell{border-bottom:1px solid var(--soft-line);border-right:1px solid var(--soft-line);min-width:0}.helper-week-day-header,.helper-week-slot{background:#f8faf6;padding:8px}.helper-week-day-header{gap:2px;display:grid}.helper-week-day-header span{color:var(--muted);font-size:12px}.helper-week-group{background:var(--accent-soft);border-bottom:1px solid var(--line);color:var(--accent);text-transform:uppercase;padding:7px 10px;font-size:12px;font-weight:800}.helper-week-group-toggle{color:inherit}.helper-week-slot{color:var(--muted);font-size:13px;font-weight:700}.helper-week-cell{background:var(--surface);color:var(--ink);overflow-wrap:anywhere;text-align:left;flex-direction:column;align-items:stretch;gap:5px;min-height:78px;padding:8px;display:flex}.helper-week-cell.weekend{background:#fbfbf7}.helper-week-cell.dimmed{background:#f2f3ef}.helper-week-cell:hover{background:var(--accent-soft)}.helper-cell-detail-panel{border:1px solid var(--line);border-radius:8px;margin-top:12px;padding:12px}.helper-cell-detail-panel h3{margin:0;font-size:16px}.helper-week-day-head{justify-content:space-between;align-items:baseline;margin-bottom:8px;display:flex}.helper-week-day-head span{color:var(--muted);font-size:13px}.recipe-page-shell{min-height:100vh;padding:clamp(12px,2vw,18px)}.recipe-page-header{background:var(--surface);border:1px solid var(--line);border-radius:8px;justify-content:space-between;align-items:center;gap:16px;padding:16px;display:flex}.recipe-page-header h1{margin:2px 0 4px;font-size:24px}.recipe-page-header p{color:var(--muted);margin:0}.recipe-nav{flex-wrap:wrap;gap:8px;display:flex}.recipe-nav a,.recipe-link-chip{background:var(--surface);border:1px solid var(--line);color:var(--ink);border-radius:6px;padding:8px 10px;font-size:13px;font-weight:700;text-decoration:none}.recipe-nav a:hover,.recipe-link-chip:hover{background:var(--accent-soft);color:var(--accent);border-color:#c6dbd1}.recipe-workspace{grid-template-columns:minmax(280px,340px) minmax(0,1fr);align-items:start;gap:14px;margin-top:14px;display:grid}.recipe-sidebar,.recipe-detail-surface{background:var(--surface);border:1px solid var(--line);border-radius:8px}.recipe-sidebar{flex-direction:column;gap:10px;height:calc(100dvh - 130px);min-height:0;max-height:calc(100dvh - 130px);padding:12px;display:flex;position:sticky;top:12px;overflow:hidden}.recipe-sidebar-actions{gap:8px;display:grid}.recipe-search-field input{background:#fff}.recipe-count{color:var(--muted);font-size:12px;font-weight:700}.recipe-category-filter,.recipe-category-picker{flex-wrap:wrap;gap:6px;display:flex}.recipe-category-filter button,.recipe-category-picker button{background:var(--field);border:1px solid var(--line);color:#405046;border-radius:999px;min-height:32px;padding:6px 9px;font-size:12px;font-weight:700}.recipe-category-filter button.active,.recipe-category-picker button.active{background:var(--accent);border-color:var(--accent);color:#fff}.recipe-list{overscroll-behavior:contain;flex:auto;grid-auto-rows:max-content;align-content:start;gap:7px;min-height:0;padding-right:2px;display:grid;overflow:hidden auto}.recipe-list-item{border:1px solid var(--soft-line);color:var(--ink);text-align:left;background:#fbfcf8;border-radius:8px;gap:3px;padding:10px;line-height:1.25;display:grid}.recipe-list-item.active{background:var(--accent-soft);border-color:#bad5ca}.recipe-list-item span,.recipe-list-item em{color:var(--muted);font-size:12px}.recipe-list-item em{font-style:normal}.recipe-detail-surface{min-height:620px;padding:16px}.recipe-message{background:var(--accent-soft);color:var(--accent);border:1px solid #c9ded6;border-radius:6px;margin:0 0 12px;padding:10px 12px}.recipe-view,.recipe-editor{gap:14px;display:grid}.recipe-view-head{justify-content:space-between;align-items:start;gap:14px;display:flex}.recipe-view-head h2{letter-spacing:0;margin:4px 0 0;font-size:clamp(24px,3vw,38px);line-height:1.05}.recipe-meta-line{color:var(--muted);text-transform:uppercase;font-size:12px;font-weight:800}.recipe-chip-row{flex-wrap:wrap;gap:6px;display:flex}.recipe-chip{background:var(--field);border:1px solid var(--line);color:#405046;border-radius:999px;padding:4px 8px;font-size:12px;font-weight:700}.recipe-chip.alias{color:#455b8f;background:#eef2fb;border-color:#cfdaef}.recipe-chip.assembly{color:#765a18;background:#fff6dd;border-color:#ead89b;align-self:center}.recipe-section{border-top:1px solid var(--soft-line);padding-top:14px}.recipe-section h3{margin:0 0 10px;font-size:15px}.recipe-note-preview{gap:8px;display:grid}.recipe-note-preview p{overflow-wrap:anywhere;white-space:pre-wrap;margin:0;line-height:1.5}.recipe-note-preview a,.recipe-link-list a,.recipe-media-item a{color:var(--accent)}.recipe-media-grid{grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:10px;display:grid}.recipe-media-item{border:1px solid var(--line);background:#fbfcf8;border-radius:8px;gap:8px;min-width:0;padding:8px;display:grid;overflow:hidden}.recipe-media-item iframe,.recipe-media-item img{aspect-ratio:16/9;object-fit:cover;border:0;border-radius:6px;width:100%;display:block}.recipe-media-item.link,.recipe-media-item.image{color:var(--ink);text-decoration:none}.recipe-media-item.private-image{color:var(--ink);align-content:center;min-height:150px;text-decoration:none}.recipe-media-item.private-image strong{font-size:14px}.recipe-media-item.private-image span,.recipe-media-item.private-image em,.recipe-media-fallback{color:var(--muted);font-size:12px;line-height:1.35}.recipe-media-item.private-image em{overflow-wrap:anywhere;font-style:normal}.recipe-media-fallback{aspect-ratio:16/9;background:var(--field);border:1px dashed var(--line);text-align:center;border-radius:6px;justify-content:center;align-items:center;padding:10px;display:flex}.recipe-two-column{grid-template-columns:minmax(0,.9fr) minmax(0,1.1fr);gap:18px;display:grid}.ingredient-list,.step-list{gap:8px;margin:0;padding-left:20px;display:grid}.ingredient-list li,.step-list li{line-height:1.45}.ingredient-list span{color:var(--muted);margin-top:2px;font-size:13px;display:block}.recipe-link-list{gap:8px;display:grid}.recipe-link-list a{border:1px solid var(--soft-line);overflow-wrap:anywhere;border-radius:8px;gap:2px;padding:10px;text-decoration:none;display:grid}.recipe-link-list span{color:var(--muted);font-size:12px}.recipe-empty-state{align-content:center;justify-items:start;min-height:460px;display:grid}.recipe-empty-state h2{margin:0 0 6px;font-size:24px}.recipe-empty-state p{color:var(--muted);margin:0 0 14px}.recipe-notes-editor{min-height:180px}.recipe-alias-suggestions{border:1px solid var(--soft-line);background:#fbfcf8;border-radius:8px;padding:10px}.alias-suggestion-list{gap:8px;display:grid}.alias-suggestion{border:1px solid var(--soft-line);background:#fff;border-radius:8px;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:10px;padding:9px;display:grid}.alias-suggestion strong,.alias-suggestion span{display:block}.alias-suggestion strong{font-size:13px}.alias-suggestion span{color:var(--muted);font-size:12px;line-height:1.35}.alias-suggestion.assembly{background:#fffdf5}.recipe-edit-list{gap:8px;display:grid}.recipe-edit-row{align-items:start;gap:7px;display:grid}.recipe-edit-row input,.recipe-edit-row select,.recipe-edit-row textarea,.recipe-paste-box textarea{background:var(--field);border:1px solid var(--line);border-radius:6px;min-width:0;padding:8px}.recipe-edit-row.links{grid-template-columns:130px minmax(120px,.8fr) minmax(220px,1.4fr) minmax(120px,.8fr) auto}.recipe-edit-row.ingredients{grid-template-columns:minmax(220px,1.4fr) 74px 82px minmax(150px,.9fr) minmax(140px,.8fr) auto}.recipe-edit-row.steps{grid-template-columns:72px minmax(0,1fr) auto}.recipe-edit-row.steps textarea{resize:vertical;min-height:68px}.recipe-paste-box{grid-template-columns:minmax(0,1fr) auto;gap:8px;margin-bottom:10px;display:grid}.recipe-paste-box textarea{resize:vertical;min-height:72px}.meal-pill-stack{gap:4px;margin-bottom:5px;display:grid}.meal-pill-stack .meal-pill{margin-bottom:0}.recipe-link-chip{justify-self:start;padding:5px 7px;font-size:11px;line-height:1.1;display:inline-flex}@media (max-width:1180px){.helper-page-shell{padding:12px}.helper-page-header{align-items:flex-start}.helper-page-header h1{font-size:22px}.helper-main-tabs{z-index:5;position:sticky;top:0}.helper-main-tabs button,.stocktake-subtabs button,.stocktake-button,.helper-save-snapshot,.helper-datebar>button,.helper-days button{min-height:48px}.helper-page-shell .panel,.helper-section,.helper-page-shell .stocktake-section{border-radius:8px;padding:12px}.helper-page-shell .stocktake-row-head,.helper-page-shell .stocktake-item{grid-template-columns:minmax(150px,1fr) minmax(220px,1.35fr) 96px 94px}.helper-page-shell .stocktake-status-cell{grid-template-columns:minmax(54px,.7fr) repeat(2,minmax(72px,1fr));display:grid}.helper-page-shell .stocktake-status-cell>span{min-width:0}.helper-page-shell .stocktake-button.compact{min-height:44px;padding:9px 10px}.helper-page-shell .stocktake-add-row,.helper-stocktake-add-row{grid-template-columns:minmax(180px,1fr) 82px 82px minmax(120px,.65fr) auto}.recipe-edit-row.links,.recipe-edit-row.ingredients{grid-template-columns:1fr 1fr}}@media (max-width:860px){.topbar{flex-direction:column;align-items:flex-start}.topbar-actions{margin-left:0}.two-col,.stocktake-layout,.stocktake-quickbar,.stocktake-items,.stocktake-add-row,.form-grid,.chooser-sections,.helper-datebar{grid-template-columns:1fr}.helper-days,.helper-main-tabs{grid-template-columns:repeat(2,minmax(0,1fr))}.helper-row{grid-template-columns:minmax(0,1fr)}.helper-stocktake-add,.helper-stocktake-edit,.helper-page-shell .stocktake-add-row,.helper-page-shell .helper-stocktake-add-row,.tracking-editor,.recipe-workspace,.recipe-two-column,.recipe-edit-row.steps,.recipe-paste-box{grid-template-columns:1fr}.recipe-sidebar{height:min(680px,100dvh - 96px);max-height:calc(100dvh - 96px);position:static;overflow:hidden}.helper-page-shell .panel{width:100%;min-width:0}.helper-row-actions{grid-column:1/-1;grid-template-columns:1fr}.stocktake-row-head,.stocktake-item{grid-template-columns:1fr}.stocktake-row-head{display:none}.stocktake-cell-actions{justify-content:flex-start}.stocktake-progress{text-align:left}}@media (max-width:640px){.helper-page-shell{padding:8px}.helper-page-header{padding:12px;display:block}.helper-page-header h1{font-size:19px}.helper-page-header p{font-size:12px}.helper-main-tabs{grid-template-columns:1fr;gap:6px;margin:10px 0}.helper-main-tabs button{min-height:46px;padding:10px}.helper-section-head,.section-heading-row,.stocktake-group-header,.inventory-chip{align-items:stretch;gap:8px;display:grid}.stocktake-subtabs{grid-template-columns:1fr;display:grid}.stocktake-subtabs button{min-height:44px}.stocktake-search-field,.stocktake-status-cell{grid-template-columns:1fr}.helper-page-shell .stocktake-section{padding:10px}.helper-page-shell .stocktake-item{grid-template-columns:1fr;gap:10px;padding:10px 0}.helper-page-shell .stocktake-row-head{grid-template-columns:1fr;display:none}.helper-page-shell .stocktake-status-cell{grid-template-columns:1fr 1fr}.helper-page-shell .stocktake-status-value{grid-column:1/-1}.helper-page-shell .stocktake-cell-actions{grid-template-columns:1fr;display:grid}.helper-page-shell .stocktake-item input,.helper-page-shell .stocktake-add-row input,.helper-page-shell .stocktake-add-row select,.helper-page-shell .stocktake-notes-input,.helper-page-shell .tracking-editor input,.helper-page-shell .tracking-editor select{min-height:46px;font-size:16px}.stocktake-subgroup{margin-left:6px;padding-left:8px}.helper-datebar{gap:8px}.helper-days{grid-template-columns:repeat(2,minmax(0,1fr))}.helper-week-table{min-width:760px}.helper-week-head,.helper-week-row{grid-template-columns:110px repeat(7,minmax(92px,1fr))}.recipe-page-header,.recipe-view-head,.recipe-edit-row.links,.recipe-edit-row.ingredients{grid-template-columns:1fr;align-items:stretch;display:grid}}@media print{@page{size:A4 landscape;margin:8mm}body{background:#fff}.no-print,.topbar,.tabs,.toolbar .week-controls{display:none!important}.content{padding:0}.grid-wrap,.helper-sheet,.panel{border:0;border-radius:0}.planner-grid{min-width:0}.grid-row,.grid-head{grid-template-columns:105px repeat(7,1fr)}.day-cell{min-height:58px;padding:4px}.slot-label,.meal-title,.meal-meta,.event-chip,.day-date{font-size:9px}.badge-row,.add-cell,.suggestion-strip{display:none}.prep-list{break-before:page}}.login-page{background:linear-gradient(135deg, #1a5f541a, #b85b2a14), var(--paper);align-items:center;min-height:100vh;padding:24px;display:flex}.login-panel{background:var(--surface);border:1px solid var(--line);border-radius:8px;width:100%;max-width:420px;margin:0 auto;padding:28px;box-shadow:0 18px 45px #17211b1f}.login-eyebrow{color:var(--muted);letter-spacing:0;text-transform:uppercase;margin:0 0 8px;font-size:12px;font-weight:700}.login-panel h1{margin:0 0 20px}.login-form{gap:12px;display:grid}.login-form label{color:var(--muted);font-size:13px;font-weight:700}.login-form input{border:1px solid var(--line);font:inherit;border-radius:6px;min-height:44px;padding:0 12px}.login-form button{background:var(--accent);border:1px solid var(--accent);color:#fff;cursor:pointer;font:inherit;border-radius:6px;min-height:44px;padding:0 16px;font-weight:700}.login-error{color:#943d1c;background:#fff2ec;border:1px solid #efb49b;border-radius:6px;margin:0;padding:10px 12px}
