:root{--ink:#14201b;--ink-soft:#3a4a42;--paper:#eef2ef;--paper-2:#e2e9e4;--surface:#ffffffb8;--surface-strong:#f7faf8;--line:#14201b1a;--leaf:#1f6b4a;--leaf-soft:#8fcb9b;--accent:#c45c26;--danger:#9b2c2c;--shadow:0 18px 50px #14201b14;--radius:18px;--font-display:"Bricolage Grotesque", Georgia, serif;--font-body:"Figtree", system-ui, sans-serif;--nav-h:64px;--bottom-h:72px;color:var(--ink);background:var(--paper);font-family:var(--font-body);font-synthesis:none;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased}*,:before,:after{box-sizing:border-box}html,body,#root{min-height:100%;margin:0}body{background:var(--paper);min-height:100dvh}button,input,select{font:inherit;color:inherit}button{cursor:pointer}.app{opacity:0;min-height:100dvh;transition:opacity .45s,transform .45s;position:relative;transform:translateY(8px)}.app.is-ready{opacity:1;transform:none}.atmosphere{pointer-events:none;z-index:0;background:radial-gradient(900px 520px at 8% -10%, #8fcb9b59, transparent 60%), radial-gradient(700px 480px at 100% 0%, #c45c261f, transparent 55%), linear-gradient(180deg, #f4f7f5 0%, var(--paper) 40%, #e8efe9 100%);position:fixed;inset:0}.atmosphere:after{content:"";opacity:.35;mix-blend-mode:soft-light;background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='0.45'/%3E%3C/svg%3E");position:absolute;inset:0}.topbar,.main,.bottomnav{z-index:1;position:relative}.topbar{padding:1rem 1.25rem;padding-top:max(1rem, env(safe-area-inset-top));justify-content:space-between;align-items:center;gap:1rem;max-width:1100px;margin:0 auto;display:flex}.brand{color:var(--ink);align-items:center;gap:.7rem;text-decoration:none;display:inline-flex}.brand__mark{background:linear-gradient(145deg, var(--leaf-soft), transparent 60%), var(--ink);border-radius:.65rem;width:2rem;height:2rem;animation:4.5s ease-in-out infinite mark-breathe;box-shadow:inset 0 0 0 1.5px #8fcb9b73}.brand__name{font-family:var(--font-display);letter-spacing:-.04em;font-size:clamp(1.7rem,4vw,2.15rem);font-weight:800;line-height:1}.topbar-end{align-items:center;gap:.65rem;display:flex}.account-chip{text-overflow:ellipsis;white-space:nowrap;max-width:10rem;color:var(--ink-soft);font-size:.85rem;font-weight:600;display:none;overflow:hidden}.topnav{border:1px solid var(--line);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);background:#ffffff8c;border-radius:999px;gap:.25rem;padding:.25rem;display:none}.topnav button{color:var(--ink-soft);background:0 0;border:0;border-radius:999px;padding:.55rem 1rem;font-weight:600;transition:background .2s,color .2s;position:relative}.topnav button.active{background:var(--ink);color:#f4f7f5}.main{max-width:1100px;padding:.5rem 1.25rem calc(var(--bottom-h) + 1.5rem);margin:0 auto}.view-header{margin-bottom:1.5rem;animation:.55s both rise}.eyebrow{letter-spacing:.14em;text-transform:uppercase;color:var(--leaf);margin:0 0 .35rem;font-size:.78rem;font-weight:700}.view-header h1{font-family:var(--font-display);letter-spacing:-.045em;margin:0;font-size:clamp(2rem,6vw,3rem);line-height:1.05}.lede{max-width:34rem;color:var(--ink-soft);margin:.65rem 0 0;font-size:1.05rem;line-height:1.45}.selected-strip{gap:.75rem;margin-bottom:1.25rem;display:grid}.selected-chip{border-radius:var(--radius);background:var(--surface-strong);border:1px solid var(--line);grid-template-columns:1fr auto auto;align-items:center;gap:.75rem;padding:.85rem 1rem;animation:.4s both rise;display:grid}.selected-chip strong{font-size:.98rem;display:block}.selected-chip span{color:var(--ink-soft);font-size:.85rem}.dish-grid{gap:1rem;display:grid}.dish-panel{border-radius:calc(var(--radius) + 4px);border:1px solid var(--line);background:var(--surface);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);padding:1.25rem;transition:transform .25s,border-color .25s,box-shadow .25s;animation:.5s both rise;position:relative;overflow:hidden}.dish-panel:before{content:"";opacity:.55;filter:blur(8px);pointer-events:none;border-radius:50%;width:180px;height:180px;position:absolute;inset:auto -10% -40% auto}.dish-panel.is-selected{box-shadow:var(--shadow);border-color:#1f6b4a73}.dish-panel:hover{transform:translateY(-2px)}.dish-panel__meta{letter-spacing:.04em;text-transform:uppercase;color:var(--ink-soft);justify-content:space-between;gap:.75rem;margin-bottom:.85rem;font-size:.78rem;font-weight:700;display:flex}.dish-panel h2{font-family:var(--font-display);letter-spacing:-.03em;margin:0;font-size:1.55rem}.dish-panel>p{color:var(--ink-soft);margin:.35rem 0 1rem}.ingredient-preview{color:var(--ink-soft);gap:.25rem;margin:0 0 1.15rem;padding:0;font-size:.92rem;list-style:none;display:grid}.ingredient-preview li{flex-wrap:wrap;align-items:center;gap:.4rem;display:flex}.ingredient-preview .more{color:var(--leaf);font-weight:600}.extra-badge{color:var(--accent);letter-spacing:.03em;text-transform:uppercase;white-space:nowrap;background:#c45c2624;border-radius:999px;align-items:center;padding:.12rem .45rem;font-size:.68rem;font-weight:800;display:inline-flex}.recipe-steps{border:1px solid var(--line);background:#14201b0a;border-radius:14px;margin:0 0 1.1rem;padding:.9rem 1rem;animation:.35s both rise}.recipe-steps h3{letter-spacing:.08em;text-transform:uppercase;color:var(--leaf);margin:0 0 .55rem;font-size:.78rem;font-weight:800}.recipe-steps ol{color:var(--ink-soft);gap:.45rem;margin:0;padding-left:1.15rem;font-size:.92rem;line-height:1.45;display:grid}.dish-panel__actions{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:.75rem;display:flex}.tone-tomato:before{background:#e07a5f}.tone-citrus:before{background:#f2cc8f}.tone-ocean:before{background:#81b29a}.tone-spice:before{background:#e09f3e}.tone-olive:before{background:#95a472}.tone-forest:before{background:#3d5a4c}.tone-sunset:before{background:#d97845}.tone-ink:before{background:#4a6fa5}.stepper{border:1px solid var(--line);background:#14201b0f;border-radius:999px;align-items:center;gap:.15rem;padding:.2rem;display:inline-flex}.stepper button{background:var(--surface-strong);border:0;border-radius:50%;width:2rem;height:2rem;font-size:1.1rem;line-height:1;transition:background .15s,transform .15s}.stepper button:hover:not(:disabled){background:var(--ink);color:#f4f7f5;transform:scale(1.04)}.stepper button:disabled{opacity:.35;cursor:not-allowed}.stepper__value{text-align:center;font-variant-numeric:tabular-nums;min-width:2.2rem;font-weight:700}.primary-btn,.ghost-btn{border:0;border-radius:999px;padding:.75rem 1.2rem;font-weight:700;transition:transform .15s,background .15s,opacity .15s}.primary-btn{background:var(--ink);color:#f4f7f5}.primary-btn:hover:not(:disabled){background:var(--leaf);transform:translateY(-1px)}.primary-btn:disabled,.ghost-btn:disabled{opacity:.4;cursor:not-allowed}.ghost-btn{border:1px solid var(--line);color:var(--ink);background:0 0}.ghost-btn:hover:not(:disabled){background:#fff9}.text-btn{color:var(--ink-soft);background:0 0;border:0;padding:.25rem;font-size:.9rem;font-weight:600}.text-btn:hover:not(:disabled){color:var(--ink)}.text-btn.danger:hover:not(:disabled){color:var(--danger)}.text-btn:disabled{opacity:.4}.add-form{border-radius:var(--radius);background:var(--surface-strong);border:1px solid var(--line);gap:.75rem;margin-bottom:1.25rem;padding:1rem;animation:.45s both rise;display:grid}.field{gap:.35rem;display:grid}.field span{letter-spacing:.06em;text-transform:uppercase;color:var(--ink-soft);font-size:.75rem;font-weight:700}.field input,.field select,.import-row input{border:1px solid var(--line);background:#fff;border-radius:12px;outline:none;width:100%;padding:.75rem .9rem;transition:border-color .15s,box-shadow .15s}.field input:focus,.field select:focus,.import-row input:focus{border-color:#1f6b4a8c;box-shadow:0 0 0 3px #8fcb9b59}.add-submit{width:100%}.dish-create-trigger{width:100%;margin-top:1rem}.dish-create-form{margin-bottom:1.5rem}.dish-create-form .grow{grid-column:1/-1}.ingredient-editor{grid-column:1/-1;gap:.65rem;display:grid}.ingredient-editor__head{letter-spacing:.06em;text-transform:uppercase;color:var(--ink-soft);justify-content:space-between;align-items:center;gap:.75rem;font-size:.75rem;font-weight:700;display:flex}.ingredient-row{grid-template-columns:minmax(0,1.4fr) auto auto auto;align-items:center;gap:.5rem;display:grid}.ingredient-row input,.ingredient-row select{border:1px solid var(--line);background:#fff;border-radius:12px;outline:none;width:100%;padding:.65rem .8rem}.ingredient-row input:focus,.ingredient-row select:focus{border-color:#1f6b4a8c;box-shadow:0 0 0 3px #8fcb9b59}.form-error{color:#b42318;grid-column:1/-1;margin:0;font-size:.9rem;font-weight:600}.dish-panel.is-custom{border-style:dashed}.dish-panel__buttons{flex-wrap:wrap;align-items:center;gap:.5rem;display:flex}.list-toolbar{justify-content:space-between;margin-bottom:.75rem;display:flex}.shopping-list{gap:.55rem;margin:0;padding:0;list-style:none;display:grid}.shopping-item{background:var(--surface);border:1px solid var(--line);border-radius:14px;grid-template-columns:auto minmax(0,1fr);grid-template-areas:"check body""qty qty";align-items:center;gap:.55rem .65rem;padding:.85rem .9rem;animation:.4s both rise;display:grid}.shopping-item .check{grid-area:check}.shopping-item__body{grid-area:body}.shopping-item__qty{grid-area:qty;justify-content:flex-end;align-items:center;gap:.45rem;padding-left:2.1rem;display:flex}.shopping-item.is-checked{opacity:.55;grid-template-areas:"check body""qty qty"}.shopping-item.is-checked .shopping-item__qty .stepper,.shopping-item.is-checked .shopping-item__qty .unit-label{display:none}.shopping-item__body{min-width:0}.shopping-item__body strong{flex-wrap:wrap;align-items:center;gap:.4rem;font-size:.98rem;display:flex}.sources{color:var(--ink-soft);white-space:nowrap;text-overflow:ellipsis;margin-top:.15rem;font-size:.78rem;display:block;overflow:hidden}.unit-label{color:var(--ink-soft);min-width:2.5rem;font-size:.85rem;font-weight:600}.check{background:0 0;border:1.5px solid #14201b59;border-radius:50%;width:1.45rem;height:1.45rem;padding:0;transition:background .15s,border-color .15s,transform .15s}.check:hover{border-color:var(--leaf);transform:scale(1.06)}.check.checked{background:var(--leaf);border-color:var(--leaf);box-shadow:inset 0 0 0 3px #fff}.icon-btn{width:2rem;height:2rem;color:var(--ink-soft);background:0 0;border:0;border-radius:50%;font-size:1.25rem;line-height:1}.icon-btn:hover{color:var(--danger);background:#9b2c2c1a}.done-block{margin-top:1.75rem}.done-block h2,.import-panel h2{font-family:var(--font-display);letter-spacing:-.02em;margin:0 0 .75rem;font-size:1.25rem}.empty-state{text-align:center;color:var(--ink-soft);border:1px dashed var(--line);border-radius:var(--radius);padding:2.5rem 1rem}.empty-state p{margin:.25rem 0}.share-panel,.import-panel{border-radius:calc(var(--radius) + 2px);background:var(--surface);border:1px solid var(--line);margin-bottom:1rem;padding:1.25rem;animation:.5s both rise}.share-stats{grid-template-columns:1fr 1fr;gap:.75rem;margin-bottom:1rem;display:grid}.share-stats div{background:#14201b0a;border-radius:14px;padding:1rem}.share-stats strong{font-family:var(--font-display);letter-spacing:-.04em;font-size:2rem;line-height:1;display:block}.share-stats span{color:var(--ink-soft);font-size:.9rem}.share-note,.import-panel>p{color:var(--ink-soft);margin:0 0 1rem;line-height:1.45}.share-actions,.import-row{flex-wrap:wrap;gap:.65rem;display:flex}.share-actions a.primary-btn,.share-actions a.ghost-btn{justify-content:center;align-items:center;text-decoration:none;display:inline-flex}.family-list{gap:.55rem;margin:0 0 1rem;padding:0;list-style:none;display:grid}.family-list li{gap:.1rem;display:grid}.family-list span{color:var(--ink-soft);font-size:.85rem}.google-btn{min-height:44px}.login-panel code{font-size:.85em}.import-row{align-items:stretch}.import-row input{flex:220px}.import-msg{color:var(--leaf);margin:.75rem 0 0;font-weight:600}.badge{background:var(--accent);color:#fff;border-radius:999px;justify-content:center;align-items:center;min-width:1.25rem;height:1.25rem;margin-left:.35rem;padding:0 .35rem;font-size:.72rem;font-weight:700;display:inline-flex}.bottomnav{padding:.55rem .75rem calc(.55rem + env(safe-area-inset-bottom));border-top:1px solid var(--line);-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);background:#f7faf8eb;grid-template-columns:repeat(4,1fr);gap:.25rem;display:grid;position:fixed;bottom:0;left:0;right:0}.bottomnav button{color:var(--ink-soft);background:0 0;border:0;border-radius:14px;justify-items:center;gap:.15rem;padding:.45rem .35rem;font-size:.78rem;font-weight:700;transition:background .2s,color .2s;display:grid;position:relative}.bottomnav button.active{color:var(--ink);background:#8fcb9b47}.nav-ico{font-size:1rem;line-height:1}@keyframes rise{0%{opacity:0;transform:translateY(12px)}to{opacity:1;transform:none}}@keyframes mark-breathe{0%,to{transform:scale(1)}50%{transform:scale(1.05)}}@media (width>=720px){.topnav{display:flex}.account-chip{display:inline}.bottomnav{display:none}.main{padding-bottom:3rem}.dish-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.add-form{grid-template-columns:1.6fr auto auto auto;align-items:end}.add-submit{width:auto}.shopping-item{grid-template-columns:auto minmax(0,1.4fr) auto;grid-template-areas:"check body qty"}.shopping-item__qty{padding-left:0}.shopping-item.is-checked{grid-template-columns:auto 1fr auto;grid-template-areas:"check body qty"}.shopping-item.is-checked .shopping-item__qty .stepper,.shopping-item.is-checked .shopping-item__qty .unit-label{display:none}}@media (width>=980px){.dish-grid,.selected-strip{grid-template-columns:repeat(2,minmax(0,1fr))}.calendar-day{min-height:118px}}.calendar-toolbar{flex-wrap:wrap;align-items:center;gap:.65rem;margin-bottom:1rem;animation:.45s both rise;display:flex}.calendar-month-label{text-align:center;font-family:var(--font-display);letter-spacing:-.03em;text-transform:capitalize;flex:1;margin:0;font-size:clamp(1.25rem,3vw,1.6rem)}.calendar-tray{border-radius:var(--radius);background:var(--surface-strong);border:1px solid var(--line);margin-bottom:1.25rem;padding:1rem;animation:.5s both rise}.calendar-tray__head{gap:.2rem;margin-bottom:.85rem;display:grid}.calendar-tray__head strong{font-size:.95rem}.calendar-tray__head span{color:var(--ink-soft);font-size:.88rem}.calendar-tray__chips{flex-wrap:wrap;gap:.5rem;display:flex}.cal-chip{border:1px solid var(--line);cursor:grab;background:#fff;border-radius:999px;padding:.45rem .85rem;font-size:.88rem;font-weight:600;transition:transform .15s,border-color .15s,box-shadow .15s}.cal-chip:active{cursor:grabbing}.cal-chip:hover{box-shadow:var(--shadow);border-color:#1f6b4a59;transform:translateY(-1px)}.cal-chip.is-picked{background:var(--ink);color:#f4f7f5;border-color:var(--ink)}.calendar-weekdays{color:var(--ink-soft);letter-spacing:.06em;text-transform:uppercase;grid-template-columns:repeat(7,minmax(0,1fr));gap:.35rem;margin-bottom:.45rem;padding:0 .15rem;font-size:.72rem;font-weight:700;display:grid}.calendar-weekdays span{text-align:center}.calendar-weeks{gap:.85rem;display:grid}.calendar-week{animation:.45s both rise}.calendar-week__label{letter-spacing:.08em;text-transform:uppercase;color:var(--leaf);margin-bottom:.4rem;font-size:.75rem;font-weight:700}.calendar-week__days{grid-template-columns:repeat(7,minmax(0,1fr));gap:.35rem;display:grid}.calendar-day{border:1px solid var(--line);background:var(--surface);border-radius:14px;flex-direction:column;gap:.3rem;min-height:92px;padding:.4rem;transition:border-color .15s,background .15s,box-shadow .15s;display:flex}.calendar-day.is-outside{opacity:.45}.calendar-day.is-today{border-color:#1f6b4a80;box-shadow:inset 0 0 0 1px #8fcb9b73}.calendar-day.is-drop,.calendar-day.is-pickable.is-drop{border-color:var(--leaf);background:#8fcb9b38}.calendar-day.is-pickable{cursor:pointer}.calendar-day__head{justify-content:space-between;align-items:center;gap:.2rem;display:flex}.calendar-day__num{font-size:.85rem;font-weight:700}.calendar-day__add{width:1.4rem;height:1.4rem;color:var(--ink-soft);background:#14201b0f;border:0;border-radius:50%;font-size:1rem;line-height:1}.calendar-day__add:hover{background:var(--ink);color:#f4f7f5}.calendar-day__entries{gap:.25rem;min-height:0;margin:0;padding:0;list-style:none;display:grid}.cal-entry{cursor:grab;word-break:break-word;border-radius:8px;align-items:flex-start;gap:.2rem;padding:.25rem .35rem;font-size:.68rem;font-weight:650;line-height:1.25;display:flex}.cal-entry:active{cursor:grabbing}.cal-entry span{flex:1;min-width:0}.cal-entry--dish{color:var(--leaf);background:#1f6b4a24}.cal-entry--event{color:var(--accent);background:#c45c2624}.cal-entry__remove{color:inherit;opacity:.7;background:0 0;border:0;padding:0;font-size:.9rem;line-height:1}.cal-entry__remove:hover{opacity:1}.calendar-modal{z-index:20;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);background:#14201b59;place-items:center;padding:1.25rem;display:grid;position:fixed;inset:0}.calendar-event-form{width:min(100%,420px);margin:0}.calendar-event-form h3{font-family:var(--font-display);grid-column:1/-1;margin:0 0 .25rem;font-size:1.35rem}.calendar-event-actions{grid-column:1/-1;justify-content:flex-end;gap:.6rem;display:flex}@media (width<=719px){.calendar-weekdays,.calendar-week__days{gap:.2rem}.calendar-day{border-radius:10px;min-height:78px;padding:.28rem}.calendar-day__num{font-size:.75rem}.cal-entry{padding:.18rem .25rem;font-size:.58rem}.bottomnav button{padding:.4rem .15rem;font-size:.68rem}}@media (prefers-reduced-motion:reduce){*,:before,:after{transition:none!important;animation:none!important}}
