:root{--brand:#2563eb;--brand-2:#1d4ed8;--brand-light:#eff6ff;--brand-glow:#2563eb73;--bg:#f0f4f8;--card:#fff;--text:#0f172a;--text-2:#475569;--text-3:#94a3b8;--border:#00000012;--danger:#ef4444;--danger-light:#fee2e2;--success:#22c55e;--radius:1.1rem;--radius-sm:.75rem;--shadow:0 4px 20px #0f172a14;--shadow-lg:0 12px 40px #0f172a24;--nav-height:5rem;--safe-bottom:env(safe-area-inset-bottom,0px);--sheet-peek-offset:calc(92dvh - 52vh)}*,:before,:after{box-sizing:border-box;margin:0;padding:0}html{-webkit-text-size-adjust:100%}body{background:var(--bg);color:var(--text);overscroll-behavior:none;-webkit-font-smoothing:antialiased;font-family:SF Pro Display,Segoe UI,system-ui,Arial,sans-serif}button{cursor:pointer;font:inherit;background:0 0;border:0}input,textarea{font:inherit}textarea{resize:none}ul,ol{list-style:none}input:focus,textarea:focus{outline:none;box-shadow:0 0 0 3px #2563eb26;border-color:var(--brand)!important}#app{background:var(--bg);max-width:560px;min-height:100dvh;margin:0 auto;position:relative}.page-scroll{min-height:100dvh;padding:1.1rem 1rem calc(var(--nav-height) + 2rem + var(--safe-bottom));overflow-y:auto}.tab-section{flex-direction:column;gap:1rem;display:flex}.page-header{margin-bottom:.2rem}.page-header h1{letter-spacing:-.04em;font-size:1.85rem;font-weight:800;line-height:1.1}.pill{background:var(--brand-light);min-width:1.5rem;height:1.5rem;color:var(--brand);vertical-align:middle;border-radius:999px;justify-content:center;align-items:center;margin-left:.45rem;padding:0 .4rem;font-size:.78rem;font-weight:800;display:inline-flex}.header-row{justify-content:space-between;align-items:flex-start;gap:.75rem;display:flex}.cancel-edit-btn{color:var(--text-2);border-radius:var(--radius-sm);white-space:nowrap;background:#f1f5f9;flex-shrink:0;margin-top:.3rem;padding:.45rem .8rem;font-size:.85rem;font-weight:600;transition:background .15s}.cancel-edit-btn:hover{background:#e2e8f0}.tile-grid{grid-template-columns:1fr;gap:1rem;display:grid}@media (width>=460px){.tile-grid{grid-template-columns:1fr 1fr}}.tile{border-radius:var(--radius);background:var(--card);box-shadow:var(--shadow);text-align:left;will-change:transform;border:0;width:100%;padding:0;transition:transform .18s,box-shadow .18s;overflow:hidden}.tile:hover{box-shadow:var(--shadow-lg);transform:translateY(-3px)}.tile:active{transform:scale(.97)}.tile-img{aspect-ratio:16/9;background:linear-gradient(135deg,#e2e8f0,#cbd5e1);justify-content:center;align-items:center;width:100%;display:flex;overflow:hidden}.tile-img img{object-fit:cover;width:100%;height:100%;display:block}.tile-placeholder{font-size:2.8rem;line-height:1}.tile-info{grid-template-columns:1fr auto;grid-template-areas:"name arrow""desc arrow";align-items:center;gap:0 .4rem;padding:.75rem .9rem .85rem;display:grid}.tile-name{grid-area:name;font-size:1rem;font-weight:700}.tile-desc{color:var(--text-2);white-space:nowrap;text-overflow:ellipsis;grid-area:desc;margin-top:.1rem;font-size:.82rem;overflow:hidden}.tile-arrow{color:var(--text-3);grid-area:arrow;font-size:1.25rem;line-height:1}.dish-form{flex-direction:column;gap:1rem;display:flex}.form-section{background:var(--card);border-radius:var(--radius);box-shadow:var(--shadow);flex-direction:column;gap:.8rem;padding:1rem;display:flex}.form-section-label{letter-spacing:.08em;text-transform:uppercase;color:var(--brand);border-bottom:1px solid var(--border);margin-bottom:.1rem;padding-bottom:.5rem;font-size:.72rem;font-weight:800}.field{flex-direction:column;gap:.4rem;display:flex}.field-label{color:var(--text-2);font-size:.82rem;font-weight:600}.field-input{border:1.5px solid var(--border);border-radius:var(--radius-sm);width:100%;color:var(--text);background:#f8fafc;padding:.65rem .75rem;line-height:1.5;transition:border-color .18s,box-shadow .18s,background .18s}.field-input:hover{background:#fff;border-color:#cbd5e1}.field-textarea{border:1.5px solid var(--border);border-radius:var(--radius-sm);width:100%;color:var(--text);background:#f8fafc;padding:.65rem .75rem;line-height:1.5;transition:border-color .18s,box-shadow .18s}.field-textarea:hover{background:#fff;border-color:#cbd5e1}.portion-stepper{background:#f1f5f9;border-radius:999px;align-items:center;gap:0;display:inline-flex;overflow:hidden}.portion-btn{width:2.2rem;height:2.2rem;color:var(--brand);justify-content:center;align-items:center;font-size:1.1rem;font-weight:700;transition:background .12s;display:flex}.portion-btn:hover{background:#dbeafe}.portion-btn:disabled{color:var(--text-3);pointer-events:none}.portion-count{text-align:center;min-width:2rem;color:var(--text);font-size:1rem;font-weight:800}.img-preview-wrap{border-radius:var(--radius-sm);position:relative;overflow:hidden}.img-preview{object-fit:cover;width:100%;max-height:200px;display:block}.remove-img-btn{color:var(--danger);background:var(--danger-light);border-radius:.5rem;margin-top:.5rem;padding:.3rem .65rem;font-size:.82rem;font-weight:600;transition:background .15s;display:block}.remove-img-btn:hover{background:#fca5a5}.file-label{border-radius:var(--radius-sm);width:100%;min-height:100px;color:var(--text-2);cursor:pointer;background:#f8fafc;border:2px dashed #cbd5e1;justify-content:center;align-items:center;gap:.5rem;font-size:.9rem;font-weight:600;transition:border-color .15s,background .15s;display:flex}.file-label:hover{border-color:var(--brand);color:var(--brand);background:#f0f7ff}.file-input{display:none}.ingredient-row{grid-template-columns:6rem 1fr auto;align-items:center;gap:.4rem;display:grid}.ing-amount{text-align:right}.step-row{grid-template-columns:auto 1fr auto;align-items:start;gap:.5rem;display:grid}.step-num{background:var(--brand);color:#fff;border-radius:999px;flex-shrink:0;justify-content:center;align-items:center;width:1.7rem;height:1.7rem;margin-top:.44rem;font-size:.75rem;font-weight:800;display:inline-flex}.rm-btn{background:var(--danger-light);width:1.9rem;height:1.9rem;color:var(--danger);border-radius:.5rem;flex-shrink:0;justify-content:center;align-items:center;padding-bottom:.05rem;font-size:1.1rem;font-weight:900;line-height:1;transition:background .12s;display:flex}.rm-btn:hover{background:#fca5a5}.add-row-btn{background:var(--brand-light);color:var(--brand);border-radius:var(--radius-sm);align-self:flex-start;align-items:center;gap:.3rem;padding:.4rem .7rem;font-size:.82rem;font-weight:600;transition:background .15s;display:inline-flex}.add-row-btn:hover{background:#dbeafe}.save-btn{border-radius:var(--radius);background:linear-gradient(145deg, #3b82f6, var(--brand-2));color:#fff;width:100%;box-shadow:0 6px 20px var(--brand-glow);justify-content:center;align-items:center;gap:.5rem;padding:.9rem;font-size:1rem;font-weight:700;transition:transform .15s,box-shadow .15s,opacity .15s;display:flex}.save-btn:hover{box-shadow:0 10px 28px var(--brand-glow);transform:translateY(-1px)}.save-btn:active{transform:scale(.97)}.save-btn:disabled{opacity:.55;pointer-events:none}.shop-input-row{grid-template-columns:1fr auto;align-items:center;gap:.5rem;display:grid}.shop-add-btn{border-radius:var(--radius-sm);background:linear-gradient(145deg, #3b82f6, var(--brand-2));color:#fff;width:2.7rem;height:2.7rem;box-shadow:0 4px 12px var(--brand-glow);flex-shrink:0;justify-content:center;align-items:center;font-size:1.4rem;transition:transform .12s;display:flex}.shop-add-btn:active{transform:scale(.9)}.shop-list{flex-direction:column;gap:.4rem;display:flex}.shop-item{background:var(--card);border-radius:var(--radius-sm);align-items:center;gap:.6rem;padding:.65rem .75rem;transition:opacity .2s;display:flex;box-shadow:0 2px 8px #0f172a0d}.shop-item--done{opacity:.5}.shop-check{color:#94a3b8;flex-shrink:0;width:1.6rem;height:1.6rem;transition:color .15s}.shop-item--done .shop-check{color:var(--brand)}.shop-check svg{width:1.6rem;height:1.6rem}.shop-title{flex:1;font-size:.95rem;transition:color .2s,-webkit-text-decoration .2s,text-decoration .2s}.shop-item--done .shop-title{color:var(--text-3);text-decoration:line-through}.shop-delete{width:1.7rem;height:1.7rem;color:var(--text-3);border-radius:.4rem;justify-content:center;align-items:center;font-size:1rem;transition:background .12s,color .12s;display:flex}.shop-delete:hover{background:var(--danger-light);color:var(--danger)}.week-grid{flex-direction:column;gap:.75rem;display:flex}.week-day{background:var(--card);border-radius:var(--radius);box-shadow:var(--shadow);overflow:hidden}.week-day-header{border-bottom:1px solid var(--border);background:linear-gradient(90deg, var(--brand-light), transparent);align-items:center;gap:.5rem;padding:.6rem .9rem .5rem;display:flex}.week-day-short{color:var(--brand);letter-spacing:.06em;text-transform:uppercase;min-width:1.6rem;font-size:.72rem;font-weight:800}.week-day-full{color:var(--text);font-size:.9rem;font-weight:700}.week-slots{gap:0;display:flex}.week-slot{border-right:1px solid var(--border);flex-direction:column;flex:1;gap:.35rem;min-height:4.5rem;padding:.6rem .75rem;transition:background .15s;display:flex;position:relative}.week-slot:last-child{border-right:0}.week-slot-label{letter-spacing:.05em;text-transform:uppercase;color:var(--text-3);font-size:.65rem;font-weight:700}.week-slot-dish{text-align:left;background:#f8fafc;border-radius:.6rem;align-items:center;gap:.45rem;width:100%;padding:.35rem .5rem;transition:background .12s;display:flex}.week-slot-dish:hover{background:var(--brand-light)}.week-dish-thumb{object-fit:cover;border-radius:.4rem;flex-shrink:0;width:2rem;height:2rem}.week-dish-emoji{flex-shrink:0;font-size:1.4rem;line-height:1}.week-dish-name{color:var(--text);white-space:nowrap;text-overflow:ellipsis;flex:1;font-size:.82rem;font-weight:600;overflow:hidden}.week-slot-clear{background:var(--danger-light);width:1.35rem;height:1.35rem;color:var(--danger);border-radius:999px;justify-content:center;align-items:center;padding-bottom:.05rem;font-size:.8rem;font-weight:900;line-height:1;transition:background .12s;display:flex;position:absolute;top:.35rem;right:.35rem}.week-slot-clear:hover{background:#fca5a5}.week-slot-add{color:var(--text-3);border:1.5px dashed #cbd5e1;border-radius:.6rem;flex:1;justify-content:center;align-items:center;min-height:2.5rem;font-size:1.2rem;transition:border-color .12s,color .12s,background .12s;display:flex}.week-slot-add:hover{border-color:var(--brand);color:var(--brand);background:var(--brand-light)}.picker-hero{border-bottom:1px solid var(--border);background:var(--card);flex-direction:column;flex-shrink:0;align-items:center;padding:.7rem 1.2rem .9rem;display:flex;position:relative}.picker-title{color:var(--text);margin-top:.5rem;font-size:1.15rem;font-weight:800}.picker-list{flex-direction:column;gap:.5rem;padding:1rem;display:flex}.picker-item{text-align:left;border-radius:var(--radius-sm);background:#f8fafc;align-items:center;gap:.75rem;width:100%;padding:.6rem .75rem;transition:background .12s;display:flex}.picker-item:hover{background:var(--brand-light)}.picker-item:active{background:#dbeafe}.picker-thumb{background:linear-gradient(135deg,#e2e8f0,#cbd5e1);border-radius:.6rem;flex-shrink:0;justify-content:center;align-items:center;width:3rem;height:3rem;font-size:1.4rem;display:flex;overflow:hidden}.picker-thumb img{object-fit:cover;width:100%;height:100%;display:block}.picker-info{flex-direction:column;gap:.15rem;display:flex;overflow:hidden}.picker-name{font-size:.95rem;font-weight:700}.picker-desc{color:var(--text-2);white-space:nowrap;text-overflow:ellipsis;font-size:.8rem;overflow:hidden}.empty-state{text-align:center;flex-direction:column;align-items:center;gap:.6rem;padding:3rem 1.5rem;display:flex}.empty-state p{color:var(--text-2);font-size:.9rem;line-height:1.5}.spinner{border:3px solid #2563eb33;border-top-color:var(--brand);border-radius:50%;width:2rem;height:2rem;animation:.8s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}.toast{white-space:nowrap;z-index:9999;box-shadow:var(--shadow-lg);border-radius:999px;padding:.65rem 1.1rem;font-size:.88rem;font-weight:600;position:fixed;top:1rem;left:50%;transform:translate(-50%)}.toast--ok{color:#fff;background:#166534}.toast--err{color:#fff;background:#991b1b}.sheet-backdrop{-webkit-backdrop-filter:blur(6px);z-index:500;background:#0f172a99;justify-content:center;align-items:flex-end;display:flex;position:fixed;inset:0}.detail-sheet{background:var(--card);width:100%;max-width:560px;height:92dvh;transform:translateY(var(--sheet-peek-offset));will-change:transform;border-radius:1.5rem 1.5rem 0 0;flex-direction:column;transition:transform .42s cubic-bezier(.32,1.12,.64,1);display:flex;overflow:hidden}.detail-sheet--expanded{transform:translateY(0)!important}.detail-sheet--dragging{transition:none!important}@media (width>=560px){.sheet-backdrop{align-items:center;padding:1.5rem}.detail-sheet{height:auto;max-height:88dvh;border-radius:var(--radius)!important;transform:none!important}}.detail-hero{aspect-ratio:16/9;background:linear-gradient(135deg,#e2e8f0,#cbd5e1);flex-shrink:0;width:100%;position:relative;overflow:hidden}.detail-hero-img{object-fit:cover;width:100%;height:100%;display:block}.detail-hero-placeholder{justify-content:center;align-items:center;width:100%;height:100%;font-size:4rem;display:flex}.sheet-drag-handle{z-index:2;cursor:pointer;justify-content:center;align-items:center;padding:.5rem .75rem;display:flex;position:absolute;top:.35rem;left:50%;transform:translate(-50%)}.drag-bar{background:#ffffffbf;border-radius:999px;width:2.8rem;height:5px;display:block}.swipe-hint{text-align:center;color:#ffffffd9;text-shadow:0 1px 4px #0006;pointer-events:none;padding:0 1rem;font-size:.73rem;font-weight:500;position:absolute;bottom:.4rem;left:0;right:0}.sheet-scroll{flex-direction:column;flex:1;gap:1rem;padding:1rem 1.2rem;display:flex;overflow-y:hidden}.sheet-scroll--open{-webkit-overflow-scrolling:touch;overflow-y:auto}@media (width>=560px){.sheet-scroll{overflow-y:auto}}.detail-name-row{justify-content:space-between;align-items:flex-start;gap:.5rem;display:flex}.detail-title{letter-spacing:-.03em;flex:1;font-size:1.5rem;font-weight:800;line-height:1.2}.detail-desc{color:var(--text-2);font-size:.93rem;line-height:1.6}.fav-btn{color:#94a3b8;background:#f1f5f9;border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;width:2.4rem;height:2.4rem;transition:color .18s,background .18s,transform .12s;display:flex}.fav-btn:hover{color:#f43f5e;background:#fee2e2}.fav-btn:active{transform:scale(.88)}.fav-btn--active{color:#f43f5e!important;background:#fee2e2!important}.fav-btn svg{width:1.2rem;height:1.2rem}.portion-scaler{background:var(--brand-light);border-radius:var(--radius-sm);align-items:center;gap:.6rem;padding:.55rem .85rem;display:flex}.portion-scaler-label{color:var(--brand);flex-shrink:0;font-size:.82rem;font-weight:700}.portion-base-hint{color:var(--text-3);white-space:nowrap;font-size:.75rem}.detail-block{flex-direction:column;gap:.65rem;display:flex}.detail-block h3{font-size:1rem;font-weight:700}.detail-block-header{justify-content:space-between;align-items:center;gap:.5rem;display:flex}.add-all-btn{background:var(--brand-light);color:var(--brand);white-space:nowrap;border-radius:999px;align-items:center;gap:.3rem;padding:.3rem .7rem;font-size:.78rem;font-weight:700;transition:background .12s;display:inline-flex}.add-all-btn:hover{background:#dbeafe}.add-all-btn svg{width:.85rem;height:.85rem}.ingredient-list{flex-direction:column;gap:.35rem;display:flex}.ingredient-item{background:#f8fafc;border-radius:.6rem;align-items:center;gap:.5rem;padding:.4rem .55rem;transition:background .1s;display:flex}.ingredient-item:hover{background:#f1f5f9}.ing-amount-badge{color:var(--brand);flex-shrink:0;min-width:3.5rem;font-size:.8rem;font-weight:700}.ing-name-text{color:var(--text);flex:1;font-size:.9rem}.ing-add-btn{background:var(--brand-light);width:1.6rem;height:1.6rem;color:var(--brand);border-radius:999px;flex-shrink:0;justify-content:center;align-items:center;transition:background .12s,transform .1s;display:flex}.ing-add-btn:hover{background:#dbeafe}.ing-add-btn:active{transform:scale(.85)}.ing-add-btn svg{width:.85rem;height:.85rem}.steps-list{flex-direction:column;gap:.8rem;display:flex}.step-item{align-items:flex-start;gap:.75rem;display:flex}.step-index{background:var(--brand);color:#fff;border-radius:999px;flex-shrink:0;justify-content:center;align-items:center;width:1.9rem;height:1.9rem;margin-top:.05rem;font-size:.8rem;font-weight:800;display:inline-flex}.step-content{color:var(--text-2);padding-top:.1rem;font-size:.93rem;line-height:1.6}.detail-actions{gap:.5rem;display:flex}.detail-action-btn{border-radius:var(--radius-sm);flex:1;justify-content:center;align-items:center;gap:.35rem;padding:.55rem .75rem;font-size:.85rem;font-weight:600;transition:background .15s,transform .12s;display:inline-flex}.detail-action-btn:active{transform:scale(.95)}.detail-action-btn--edit{background:var(--brand-light);color:var(--brand)}.detail-action-btn--edit:hover{background:#dbeafe}.detail-action-btn--delete{background:var(--danger-light);color:var(--danger)}.detail-action-btn--delete:hover{background:#fca5a5}.delete-confirm{border-radius:var(--radius-sm);background:#fff7ed;border:1px solid #fed7aa;flex-direction:column;gap:.7rem;padding:.85rem 1rem;display:flex}.delete-confirm p{color:#92400e;font-size:.9rem;font-weight:600}.delete-confirm-btns{gap:.5rem;display:flex}.dc-cancel{color:var(--text-2);background:#e2e8f0;border-radius:.6rem;flex:1;padding:.5rem;font-size:.85rem;font-weight:600;transition:background .12s}.dc-cancel:hover{background:#cbd5e1}.dc-confirm{background:var(--danger);color:#fff;border-radius:.6rem;flex:1;padding:.5rem;font-size:.85rem;font-weight:700;transition:background .12s}.dc-confirm:hover{background:#dc2626}.dc-confirm:disabled{opacity:.6;pointer-events:none}.bottom-nav{width:min(560px,100%);height:var(--nav-height);-webkit-backdrop-filter:blur(20px);padding:0 .25rem calc(.6rem + var(--safe-bottom));z-index:300;background:#fffffff2;border-top:1px solid #00000012;justify-content:space-evenly;align-items:flex-end;display:flex;position:fixed;bottom:0;left:50%;transform:translate(-50%)}.nav-btn{color:var(--text-3);letter-spacing:.03em;text-transform:uppercase;background:0 0;border:0;flex-direction:column;flex:1;align-items:center;gap:.15rem;padding:.35rem .1rem;font-size:.56rem;font-weight:600;transition:color .18s,transform .12s;display:flex;position:relative}.nav-btn svg{width:1.3rem;height:1.3rem}.nav-btn:active{transform:scale(.86)}.nav-btn--active{color:var(--brand)}.nav-badge{background:var(--danger);color:#fff;border-radius:999px;justify-content:center;align-items:center;min-width:1rem;height:1rem;padding:0 .2rem;font-size:.55rem;font-weight:800;display:flex;position:absolute;top:.2rem;right:calc(50% - 1.2rem)}.nav-btn--home{background:linear-gradient(145deg, #3b82f6, var(--brand-2));width:3.4rem;height:3.4rem;box-shadow:0 6px 20px var(--brand-glow);border-radius:50%;flex-direction:row;flex:0 0 3.4rem;justify-content:center;align-items:center;gap:0;margin-bottom:.85rem;padding:0;font-size:0;transition:transform .15s,box-shadow .15s;display:flex;color:#fff!important}.nav-btn--home span{display:none}.nav-btn--home svg{flex-shrink:0;width:1.4rem;height:1.4rem;display:block}.nav-btn--home:active{box-shadow:0 3px 10px var(--brand-glow);transform:scale(.9)}.nav-btn--home-active{background:linear-gradient(145deg,#1d4ed8,#1e40af)!important;box-shadow:0 4px 14px #1d4ed899!important}.fade-enter-active{transition:opacity .2s}.fade-leave-active{transition:opacity .15s}.fade-enter-from,.fade-leave-to{opacity:0}.sheet-enter-active{transition:opacity .28s}.sheet-leave-active{transition:opacity .22s}.sheet-enter-from,.sheet-leave-to{opacity:0}.list-enter-active{transition:opacity .22s,transform .22s}.list-leave-active{transition:opacity .15s,transform .15s}.list-enter-from{opacity:0;transform:translateY(8px)scale(.97)}.list-leave-to{opacity:0;transform:scale(.96)}.list-move{transition:transform .3s}.toast-enter-active{transition:opacity .25s,transform .25s cubic-bezier(.34,1.3,.64,1)}.toast-leave-active{transition:opacity .2s,transform .2s}.toast-enter-from{opacity:0;transform:translate(-50%)translateY(-10px)}.toast-leave-to{opacity:0;transform:translate(-50%)translateY(-8px)}
