@font-face{font-family:Alte Haas Grotesk;src:url(/fonts/alte-haas-grotesk.ttf) format("truetype");font-weight:700;font-style:normal;font-display:swap}:root{color-scheme:light;--bg: #faf7f2;--surface: #ffffff;--text: #2b2320;--muted: #7a6f66;--primary: #d9772e;--primary-hover: #c2651f;--border: #e8e0d6;--spotlight-scrim: rgba(20, 15, 10, .72);--spotlight-ring: rgba(217, 119, 46, .55)}:root[data-theme=dark]{color-scheme:dark;--bg: #171717;--surface: #2e2e2e;--text: #ededed;--muted: #9a9a9a;--primary: #3f9c8a;--primary-hover: #59b6a3;--border: #333333;--spotlight-scrim: rgba(0, 0, 0, .78);--spotlight-ring: rgba(63, 156, 138, .5)}*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}[hidden]{display:none!important}body{margin:0;padding-top:4.5rem;font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif;background:var(--bg);color:var(--text)}.nav-ribbon{position:fixed;top:0;left:0;z-index:40;display:flex;gap:.3rem;padding:.15rem;background:var(--surface);border-bottom:1px solid var(--border);border-right:1px solid var(--border);border-radius:0 0 25px;box-shadow:0 4px 14px #2b23201f}.nav-ribbon-right{left:auto;right:0;border-right:none;border-left:1px solid var(--border);border-radius:0 0 0 25px}.nav-ribbon-item{position:relative;display:flex;align-items:center;justify-content:center;width:2.4rem;height:2.4rem;margin:0;padding:0;border:none;border-radius:50%;background:none;font:inherit;font-size:1.2rem;line-height:1;text-decoration:none;color:var(--muted);cursor:pointer;transition:background .15s ease,color .15s ease,transform .05s ease}.nav-ribbon-item svg{width:1.35rem;height:1.35rem;display:block}.nav-badge{position:absolute;top:2px;right:2px;width:10px;height:10px;border-radius:50%;background:#d92d20;border:1.5px solid var(--surface);animation:nav-badge-pop .6s cubic-bezier(.34,1.56,.64,1)}@keyframes nav-badge-pop{0%{transform:scale(0)}45%{transform:scale(1.8)}65%{transform:scale(.85)}85%{transform:scale(1.4)}to{transform:scale(1)}}@media (prefers-reduced-motion: reduce){.nav-badge{animation:none}}.toast-container{position:fixed;top:1rem;right:1rem;z-index:300;display:flex;flex-direction:column;gap:.5rem;max-width:min(90vw,360px)}.toast{position:relative;display:flex;align-items:center;gap:.6rem;padding:.5rem .9rem;border-radius:10px;background:var(--surface);border:1px solid var(--border);box-shadow:0 10px 24px #0000002e;overflow:hidden;animation:toast-in .25s cubic-bezier(.16,1,.3,1)}.toast.is-leaving{animation:toast-out .18s ease forwards}.toast.is-clickable{cursor:pointer}.toast.is-clickable:hover,.toast.is-clickable:focus-visible{border-color:var(--primary, var(--border))}@keyframes toast-in{0%{transform:translate(24px);opacity:0}to{transform:translate(0);opacity:1}}@keyframes toast-out{to{transform:translate(24px);opacity:0}}@media (prefers-reduced-motion: reduce){.toast,.toast-progress{animation:none!important}}.toast-message{flex:1 1 auto;font-size:.88rem;line-height:1.4;color:var(--text)}.toast-close{flex:0 0 auto;display:flex;align-items:center;justify-content:center;width:26px;height:26px;border-radius:50%;border:none;background:transparent;color:var(--muted);cursor:pointer;padding:0}.toast-close .icon{width:11px;height:11px}@media (hover: hover){.toast-close:hover{background:var(--bg);color:var(--text)}}.toast-progress{position:absolute;left:0;bottom:0;width:100%;height:3px;background:var(--primary);transform-origin:left;animation:toast-progress linear forwards;animation-duration:var(--toast-duration, 15s)}.toast.is-paused .toast-progress{animation-play-state:paused}@keyframes toast-progress{0%{transform:scaleX(1)}to{transform:scaleX(0)}}@media (hover: hover){.nav-ribbon-item:hover{background:var(--bg);color:var(--text)}}.nav-ribbon-item:active{transform:scale(.94)}.nav-ribbon-item.disabled{opacity:.35;cursor:not-allowed}@media (hover: hover){.nav-ribbon-item.disabled:hover{background:none;color:var(--muted)}}.nav-ribbon-item-alert{background:#d92d20;color:#fff;animation:nav-badge-pop .6s cubic-bezier(.34,1.56,.64,1)}@media (hover: hover){.nav-ribbon-item-alert:hover{background:#b3251a;color:#fff}}.nav-ribbon-item-landing{animation:nav-ribbon-item-land .3s ease}@keyframes nav-ribbon-item-land{0%{transform:scale(1)}40%{transform:scale(1.35)}to{transform:scale(1)}}.help-icon-btn{border:none;background:none;padding:0;display:inline-flex;cursor:pointer;color:var(--muted)}.help-icon-btn .icon{width:22px;height:22px}@media (hover: hover){.help-icon-btn:hover{color:var(--text)}}.help-fab{position:fixed;top:.6rem;right:.6rem;z-index:45}.help-corner{position:absolute;top:.6rem;right:.6rem;z-index:20}.help-list{margin:0;padding-left:1.2rem}.help-list li{margin-bottom:.6rem}.help-list li:last-child{margin-bottom:0}dl.help-list{padding-left:0}dl.help-list dt{font-weight:600}dl.help-list dd{margin:.15rem 0 0;color:var(--muted)}dl.help-list dt+dt,dl.help-list dd+dt{margin-top:.9rem}.fly-to-cart{position:fixed;z-index:300;overflow:hidden;display:flex;align-items:center;justify-content:center;background:var(--surface);border:1px solid var(--border);border-radius:14px;box-shadow:0 8px 20px #2b23204d;pointer-events:none;transition:top .7s cubic-bezier(.55,.06,.68,.19),left .7s cubic-bezier(.55,.06,.68,.19),width .7s ease-in,height .7s ease-in,border-radius .7s ease-in,opacity .7s ease-in,transform .7s ease-in}.fly-to-cart img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;display:block}.fly-to-cart .recipe-photo-placeholder{font-size:2.5rem;opacity:.5}@media (prefers-reduced-motion: reduce){.fly-to-cart,.nav-ribbon-item-landing{display:none;animation:none}}#app{max-width:960px;margin:0 auto;padding:1.5rem 1rem 3rem}.login-page{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:1.5rem}.login-card{width:100%;max-width:360px;background:var(--surface);border:1px solid var(--border);border-radius:14px;padding:2rem;display:flex;flex-direction:column;gap:1rem;box-shadow:0 8px 24px #2b232014}.login-card .brand-row{align-self:center;margin:0 0 1rem}.login-subtitle{margin:0 0 .5rem;color:var(--muted);font-size:.9rem;text-align:center}.login-card .btn{justify-content:center}.login-toggle-mode{border:none;background:none;padding:0;color:var(--primary);font-size:.85rem;font-weight:600;cursor:pointer;text-align:center}@media (hover: hover){.login-toggle-mode:hover{text-decoration:underline}}.hero{display:flex;flex-direction:column;gap:1rem;align-items:flex-start;padding:2rem 0 1.5rem;border-bottom:1px solid var(--border);margin-bottom:1rem}.hero h1{margin:0;font-size:2rem}.hero p{margin:0;color:var(--muted)}.brand-row{display:flex;align-items:center;gap:.9rem;margin:.5rem 0 2.5rem;width:fit-content;position:relative;padding-bottom:.9rem;--brand-gradient-span: 11rem;--brand-mark-offset: 3.9rem}.brand-row:after{content:"";position:absolute;left:0;right:0;bottom:-2px;height:1.1rem;background:linear-gradient(to right,var(--primary) 0,var(--text) var(--brand-gradient-span));clip-path:polygon(0px 8px,1.2px 4px,2.7px 2.7px,4px 1.2px,8px 0px,100% 0%,100% 50%,80% 32%,65% 28%,45% 35%,30% 55%,20% 75%,2% 98%,0% 100%);-webkit-clip-path:polygon(0px 8px,1.2px 4px,2.7px 2.7px,4px 1.2px,8px 0px,100% 0%,100% 50%,80% 32%,65% 25%,60% 25%,45% 35%,30% 55%,20% 75%,2% 98%,0% 100%)}.brand-logo{display:block;width:3rem;height:2.5rem}.brand-mark{display:inline-block;margin:0;font-family:Alte Haas Grotesk,Helvetica,sans-serif;font-weight:700;font-size:3rem;line-height:1;letter-spacing:-.05em;background:linear-gradient(to right,var(--primary) calc(-1 * var(--brand-mark-offset)),var(--text) calc(var(--brand-gradient-span) - var(--brand-mark-offset)));-webkit-background-clip:text;background-clip:text;color:transparent}.notice-banner{margin:0;padding:.6rem .9rem;border-radius:8px;background:#ffd5d2;border:1px solid #d92d20;color:#8f2118;font-size:.85rem;font-weight:600}.notice-banner--positive{background:#d7f0da;border-color:#2f9e44;color:#1e6b30}#system-announcement-banner{display:flex;flex-direction:column;gap:.6rem;margin-bottom:1.25rem}.system-announcement{padding:.85rem 1rem;border-radius:10px;background:#ffd5d2;border:1px solid #d92d20;color:#8f2118}.system-announcement-message{margin:0 0 .7rem;white-space:pre-wrap;font-weight:600}.system-announcement .modal-actions{justify-content:flex-end}.status-active{margin:0;padding:.5rem .8rem;border-radius:8px;background:#dcf5e3;border:1px solid #1a7f37;color:#14532d;font-size:.85rem;font-weight:600}.actions{display:flex;flex-wrap:wrap;gap:.75rem}#account-panel-admin .actions{flex-direction:column;align-items:flex-start}.account-section{max-width:480px;margin-bottom:2rem}.account-subsection{margin-top:2rem;padding-top:1.25rem;border-top:1px solid var(--border)}.account-subsection h3{margin:0 0 .75rem;font-size:1.1rem}.account-avatar-row{display:flex;align-items:center;gap:1.25rem;margin-bottom:1.5rem}.profile-identity{display:flex;flex-direction:column;gap:.4rem}.profile-username{margin:0;font-size:1.5rem;font-weight:700}.profile-handle{margin:0;color:var(--muted);font-size:.9rem}.profile-relationship{margin:0;color:var(--muted);font-size:.85rem}.nickname-row{display:flex;align-items:center;gap:.6rem}.avatar-wrap{position:relative;width:96px;height:96px;flex:0 0 auto;border-radius:50%;background:var(--surface);border:1px solid var(--border);display:flex;align-items:center;justify-content:center;overflow:hidden;padding:0;cursor:pointer;transition:opacity .15s ease}@media (hover: hover){.avatar-wrap:hover{opacity:.85}}.avatar-wrap img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}.avatar-placeholder{font-size:2.5rem;opacity:.35}.form-stack{display:flex;flex-direction:column;gap:.9rem}.tab-panel{margin-top:.9rem}.friends-list{list-style:none;margin:.9rem 0 0;padding:0;display:flex;flex-direction:column;gap:.5rem}.friend-row{display:flex;align-items:center;gap:.75rem;padding:.5rem .7rem;border:1px solid var(--border);border-radius:10px;background:var(--surface)}#admin-feedback-list{margin-top:.9rem}.feedback-kind-section{margin-bottom:1.5rem}.feedback-kind-section:last-child{margin-bottom:0}.feedback-list{list-style:none;margin:.9rem 0 0;padding:0;display:flex;flex-direction:column;gap:.5rem}.feedback-item{display:flex;flex-direction:column;align-items:flex-start;gap:.25rem;padding:.5rem .7rem;border:1px solid var(--border);border-radius:10px;background:var(--surface)}.feedback-actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:.4rem}.feedback-actions .btn{padding:.4rem .8rem;font-size:.8rem}.feedback-status{display:inline-block;padding:.15rem .55rem;border-radius:999px;font-size:.75rem;font-weight:600}.feedback-status-pending{background:var(--bg);border:1px solid var(--border);color:var(--muted)}.feedback-status-validated{background:#dcf5e3;border:1px solid #1a7f37;color:#14532d}.feedback-status-rejected{background:#ffd5d2;border:1px solid #d92d20;color:#8f2118}.feedback-message{margin:0;white-space:pre-wrap}.feedback-response{margin:0;font-size:.85rem;color:var(--muted);font-style:italic}.feedback-dates{margin:0;font-size:.78rem;color:var(--muted)}.friend-avatar{width:36px;height:36px;flex:0 0 auto;border-radius:50%;overflow:hidden;background:var(--bg);display:flex;align-items:center;justify-content:center}.friend-avatar img{width:100%;height:100%;object-fit:cover}.avatar-placeholder-small{font-size:1.2rem;opacity:.5}.friend-identity{display:flex;align-items:center;gap:.75rem;flex:1;min-width:0;text-decoration:none;color:inherit}@media (hover: hover){.friend-identity:hover .friend-name{text-decoration:underline}}.friend-name{flex:1;font-weight:600;font-size:.9rem}.friend-actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:.4rem}.friend-actions .btn{padding:.4rem .8rem;font-size:.8rem}.friend-name-hint{color:var(--muted);font-size:.78rem}.filters{margin-bottom:2rem;background:radial-gradient(ellipse at center,var(--bg) 50%,var(--surface) 100%);border:1px solid var(--border);border-radius:10px;transition:border-color .15s ease}@media (hover: hover){.filters:has(.filters-header:hover){border-color:var(--primary)}}.filters h2{margin:0}.filters-header{display:flex;align-items:center;justify-content:space-between;gap:.6rem;padding:.3rem .4rem .3rem 1rem;cursor:pointer;border-radius:10px;transition:background .15s ease}.filters:has(.filters-body:not([hidden])) .filters-header{border-radius:10px 10px 0 0}@media (hover: hover){.filters-header:hover{background:var(--bg)}}.filters-toggle-btn{flex:0 0 auto;width:24px;height:24px;display:flex;align-items:center;justify-content:center;border:1px solid var(--primary);border-radius:8px;background:var(--primary);color:#fff;cursor:pointer;pointer-events:none;font-size:1.1rem}.filters-toggle-icon{display:inline-block;transition:transform .15s ease}.filters-toggle-btn[aria-expanded=false] .filters-toggle-icon{transform:rotate(-90deg)}.filters-body{display:flex;flex-wrap:wrap;gap:.6rem;padding:1rem;border-top:1px solid var(--border)}.search-input{flex-basis:100%;border:1px solid var(--border);border-radius:8px;padding:.6rem .8rem;font:inherit;font-size:.95rem;background:var(--bg);color:var(--text)}.sort-select{border:1px solid var(--border);border-radius:8px;padding:.5rem .7rem;font:inherit;font-size:.85rem;background:var(--surface);color:var(--text);cursor:pointer}.filter-group{display:flex;flex-direction:column;gap:.4rem}.filter-label{font-size:.8rem;font-weight:600;color:var(--muted)}.btn{border:none;border-radius:8px;padding:.65rem 1.1rem;font-size:.95rem;font-weight:600;cursor:pointer;text-decoration:none;display:inline-flex;align-items:center;transition:background .15s ease,transform .05s ease}.btn:active{transform:scale(.98)}.btn:disabled{opacity:.5;cursor:not-allowed}.btn-primary{background:var(--primary);color:#fff}@media (hover: hover){.btn-primary:hover{background:var(--primary-hover)}}.btn-secondary{background:var(--surface);color:var(--text);border:1px solid var(--border)}@media (hover: hover){.btn-secondary:hover{background:var(--border)}}@media (max-width: 480px){.btn-label{display:none}#btn-add-to-shopping-list .icon-text,#btn-delete-recipe .icon-text,#btn-lazy-mode .icon-text{margin-right:0}}.btn-emoji{display:none}@media (max-width: 480px){.btn-emoji{display:inline;font-size:1.1rem}.btn-emoji-sign{font-size:1.5rem;font-weight:700;vertical-align:-.1em}#btn-add-ingredient,.btn-add-ingredient-carrot{background:var(--surface);color:var(--text);border:1px solid var(--border)}.shopping-list-actions .btn{padding:.25rem .8rem}}.btn-danger{background:#d92d20;color:#fff}@media (hover: hover){.btn-danger:hover{background:#b3251a}}.btn-wish{color:var(--muted);padding:.65rem .85rem}@media (hover: hover){.btn-wish:hover{color:#f0a202}}.btn-wish.active{color:#f0a202}section h2{font-size:1.25rem;margin-bottom:.75rem}.home-section+.home-section{margin-top:3rem}#todo-recipe-list,#wishlist-recipe-list,#shared-list,#discover-list,#season-recipe-list,#recipe-list{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:1rem}.season-subsection+.season-subsection{margin-top:1.75rem}.season-subsection-title{font-size:1rem;font-weight:600;color:var(--muted);margin:0 0 .75rem}@media (max-width: 480px){#season-ingredient-list{grid-template-columns:repeat(3,1fr)}}@media (max-width: 480px){#todo-recipe-list,#wishlist-recipe-list,#shared-list,#discover-list,#season-recipe-list,#recipe-list{grid-template-columns:repeat(2,1fr);gap:.6rem}}.recipe-card{position:relative;background:var(--surface);border:1px solid var(--border);border-radius:12px;overflow:visible;display:flex;flex-direction:column}.recipe-list-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:.75rem}.recipe-list-header h2{margin:0}.recipe-list-header-actions{display:flex;gap:.6rem}.pagination-more{display:flex;justify-content:center;margin-top:1.25rem}.recipe-card a{display:flex;flex-direction:column;color:inherit;text-decoration:none}.recipe-card.recipe-card-with-author>a:first-child{height:auto;flex:1}.recipe-card .recipe-card-author{display:flex;flex-direction:row;align-items:center;gap:.35rem;height:auto;padding:0 .75rem .65rem;font-size:.75rem;color:var(--muted)}@media (hover: hover){.recipe-card .recipe-card-author:hover{color:var(--primary)}}.recipe-card-author-avatar{width:16px;height:16px;flex:0 0 auto;border-radius:50%;overflow:hidden;background:var(--bg);display:flex;align-items:center;justify-content:center;font-size:.6rem}.recipe-card-author-avatar img{width:100%;height:100%;object-fit:cover}.recipe-card-shared-actions{display:flex;gap:.4rem;padding:0 .75rem .65rem}.recipe-card-shared-actions .btn{flex:1;padding:.35rem .5rem;font-size:.75rem;justify-content:center}.recipe-card-media{aspect-ratio:8 / 7;background:var(--bg);display:flex;align-items:center;justify-content:center;overflow:hidden;border-radius:12px 12px 0 0}.recipe-card-media img{width:100%;height:100%;object-fit:cover;-webkit-touch-callout:none;-webkit-user-drag:none;user-select:none}.recipe-card-placeholder{font-size:2.5rem;opacity:.5}.recipe-card-placeholder-pending{opacity:.4;filter:grayscale(1)}.recipe-card-placeholder-broken{opacity:.7}.pending-badge{display:block;font-size:.7rem;font-weight:500;color:var(--muted);font-style:italic}.broken-link-badge{color:#96650a}.included-by-list{list-style:none;margin:.75rem 0 0;padding:0;display:flex;flex-direction:column;gap:.5rem}.included-by-item{display:flex;align-items:center;gap:.5rem}.included-by-name{flex:1;min-width:0;padding:.5rem .7rem;background:var(--bg);border:1px solid var(--border);border-radius:8px;font-size:.9rem}.included-by-item .btn{flex:0 0 auto;white-space:nowrap}.included-by-item-hidden .included-by-name{color:var(--muted);font-style:italic}.recipe-card-title{margin:0;padding:.65rem .75rem;font-weight:600;font-size:.95rem}.recipe-card-servings{margin:0;padding:0 .75rem .65rem;font-size:.75rem;color:var(--muted)}.empty,.error{color:var(--muted);font-style:italic;grid-column:1 / -1}.error{color:#b3261e}.image-field{display:flex;flex-direction:column;gap:.5rem}.image-field-actions{display:flex;gap:.6rem}.image-hint{margin:0;font-size:.8rem;color:var(--muted);white-space:pre-line}.home-section-hint{margin:-.75rem 0 .9rem;font-size:.85rem;color:var(--muted)}.section-hint-btn{margin-left:.3rem;vertical-align:middle;border:none;background:none;padding:0;color:var(--text);opacity:.15;cursor:pointer;display:inline-flex;align-items:center;justify-content:center}.section-hint-btn .icon{width:18px;height:18px}.section-hint-btn.active{opacity:.55}@media (hover: hover){.section-hint-btn:hover{opacity:.55}}#account-privacy-explainer{margin-top:.5rem;white-space:pre-line}.image-preview-wrap{position:relative;width:140px}.image-preview-wrap img{width:100%;aspect-ratio:4 / 3;object-fit:cover;border-radius:8px;border:1px solid var(--border)}.image-preview-wrap button{position:absolute;top:-8px;right:-8px;width:24px;height:24px;border-radius:50%;border:none;background:#2b2320;color:#fff;cursor:pointer;font-size:.8rem;line-height:1}.modal-overlay{position:fixed;inset:0;z-index:100;background:#140f0a73;display:flex;align-items:center;justify-content:center;padding:1rem}#confirm-modal,#image-crop-modal{z-index:200}.modal{background:var(--surface);border-radius:12px;padding:1.5rem;width:100%;max-width:480px;max-height:90vh;overflow-y:auto}.modal h2{margin-top:0}.modal-title-row{display:flex;align-items:center;gap:.5rem;margin-bottom:1rem}.modal-title-row h2{margin:0}#confirm-modal-message{white-space:pre-line}.modal form{display:flex;flex-direction:column;gap:.9rem}.field{display:flex;flex-direction:column;gap:.3rem}.field label{font-size:.85rem;font-weight:600;color:var(--muted)}.field-inline{display:flex;align-items:center;gap:.5rem}.field-inline input,.field-inline p{flex:1;min-width:0}.field-inline p{margin:0}.autocomplete{position:relative}.autocomplete input{width:100%}.autocomplete-suggestions{position:absolute;top:calc(100% + 4px);left:0;right:0;z-index:10;margin:0;padding:.3rem;list-style:none;background:var(--surface);border:1px solid var(--border);border-radius:8px;box-shadow:0 4px 12px #00000026;max-height:220px;overflow-y:auto}.autocomplete-suggestions li{padding:.5rem .6rem;border-radius:6px;cursor:pointer;font-size:.9rem}.autocomplete-suggestions li.active{background:var(--bg)}@media (hover: hover){.autocomplete-suggestions li:hover{background:var(--bg)}}.autocomplete-suggestions strong{color:var(--primary)}.field input,.field select,.field textarea{border:1px solid var(--border);border-radius:8px;padding:.55rem .7rem;font:inherit;background:var(--bg);color:var(--text)}.field textarea{min-height:90px;resize:vertical}.field select{width:100%;cursor:pointer;appearance:none;-webkit-appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 14 14'%3E%3Cpath d='M3 5.5 7 9.5 11 5.5' fill='none' stroke='%237a6f66' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right .7rem center;background-size:13px;padding-right:2.1rem}@media (hover: hover){.field select:hover{border-color:var(--primary)}}.field input:focus-visible,.field select:focus-visible,.field textarea:focus-visible{outline:2px solid var(--primary);outline-offset:1px}input[type=number]{-moz-appearance:textfield}input[type=number]::-webkit-outer-spin-button,input[type=number]::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.number-field{position:relative;display:flex;max-width:120px}.number-field input[type=number]{width:100%;padding-right:1.8rem}.number-spin{position:absolute;right:.35rem;top:50%;transform:translateY(-50%);display:flex;flex-direction:column;gap:2px}.number-spin button{width:1.15rem;height:.8rem;border:none;background:var(--border);color:var(--text);font-size:.5rem;line-height:1;cursor:pointer;border-radius:3px;display:flex;align-items:center;justify-content:center;padding:0}@media (hover: hover){.number-spin button:hover{background:var(--primary);color:#fff}}.field-row{display:flex;gap:.75rem}.field-row .field{flex:1}.choice-group{display:flex;flex-wrap:wrap;gap:.5rem;margin-bottom:.5rem}.choice-btn{position:relative;border:1px solid var(--border);background:var(--surface);color:var(--text);border-radius:999px;padding:.45rem .9rem;font-size:.85rem;font-weight:600;cursor:pointer;transition:background .15s ease,color .15s ease,border-color .15s ease}@media (hover: hover){.choice-btn:hover{border-color:var(--primary)}}.choice-btn.is-selected{background:var(--primary);border-color:var(--primary);color:#fff}.choice-btn:disabled{opacity:.5;cursor:not-allowed}#link-feedback-admin,#link-ingredients-admin,#link-objects-admin{position:relative}.choice-btn.choice-btn-category.is-selected{background:var(--muted);border-color:var(--muted);color:#fff}.choice-group-pill{display:inline-flex;width:fit-content;gap:0;border:1px solid var(--border);border-radius:999px;overflow:hidden}.choice-group-pill .choice-btn{border:none;border-radius:0}.choice-group-pill .choice-btn:not(:last-child){border-right:1px solid var(--border)}.choice-group-pill .choice-btn:not(.is-selected){color:var(--muted)}.star-rating{display:flex;gap:.2rem}.star-btn{border:none;background:none;padding:0;font-size:1.5rem;line-height:1;color:var(--border);cursor:pointer}@media (hover: hover){.star-btn:hover{color:var(--primary-hover)}}.star-btn.filled{color:var(--primary)}.recipe-rating{color:var(--primary);letter-spacing:1px}.modal-actions{display:flex;justify-content:flex-end;gap:.6rem;margin-top:.5rem}.guide-modal{max-width:420px}.guide-dots{display:flex;justify-content:center;gap:6px;margin-bottom:.9rem}.guide-dot{width:6px;height:6px;border-radius:50%;background:var(--border)}.guide-dot.active{background:var(--primary)}.guide-step-body p{line-height:1.5;margin:0 0 .7rem}.guide-img{display:block;width:100%;border-radius:10px;border:1px solid var(--border);margin:0 0 .8rem}.guide-toc{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.5rem}.guide-toc-item{width:100%;text-align:left;padding:.7rem .9rem;border:1px solid var(--border);border-radius:10px;background:var(--bg);color:var(--text);font:inherit;font-weight:600;cursor:pointer}.guide-toc-item:hover{border-color:var(--primary);color:var(--primary)}.guide-actions{justify-content:space-between}.guide-actions-right{display:flex;gap:.6rem}.onboarding-spotlight{position:fixed;inset:0;z-index:90;pointer-events:none}.spotlight-hole,.spotlight-ring{position:fixed;border-radius:50%;transition:top .2s ease,left .2s ease,width .2s ease,height .2s ease}.spotlight-hole{box-shadow:0 0 0 9999px var(--spotlight-scrim)}.spotlight-ring{animation:spotlight-pulse 1.8s ease-out .4s infinite}@keyframes spotlight-pulse{0%{box-shadow:0 0 0 0 var(--spotlight-ring)}70%{box-shadow:0 0 0 14px transparent}to{box-shadow:0 0 0 0 transparent}}.spotlight-callout{position:fixed;z-index:91;width:230px;pointer-events:auto;background:var(--surface);border-radius:12px;padding:.8rem .9rem;box-shadow:0 8px 22px #00000047;animation:spotlight-callout-in .35s ease .15s both}@keyframes spotlight-callout-in{0%{opacity:0;transform:translateY(-6px)}to{opacity:1;transform:translateY(0)}}.spotlight-callout:before{content:"";position:absolute;top:-6px;right:18px;width:12px;height:12px;background:var(--surface);border-radius:2px;transform:rotate(45deg)}.spotlight-callout p{margin:0 0 .6rem;line-height:1.4;color:var(--text)}.spotlight-actions{display:flex;align-items:center;justify-content:space-between;gap:.6rem}.spotlight-discover,.spotlight-later{font:inherit;border:none;cursor:pointer;padding:.4rem .8rem;border-radius:8px;font-size:1rem}.spotlight-discover{color:var(--surface);font-weight:500;background:var(--primary)}.spotlight-discover:hover{background:var(--primary-hover)}.spotlight-later{color:var(--muted);background:var(--border)}.spotlight-later:hover{background:var(--bg)}@media (prefers-reduced-motion: reduce){.spotlight-ring,.spotlight-callout{animation:none}}.account-actions-row{display:flex;align-items:center;justify-content:space-between;gap:.6rem;margin-top:.5rem}.form-error{color:#b3261e;font-size:.85rem;min-height:1.1em}.form-warning{color:#96650a;font-size:.85rem}.page-toolbar{display:flex;align-items:center;justify-content:flex-end;gap:1rem;margin-bottom:1.5rem}.toolbar-actions{display:flex;align-items:center;gap:.6rem}.recipe-title{margin:0 0 1.5rem;font-size:2rem}.title-input{display:block;width:100%;font-size:2rem;font-weight:700;border:1px solid var(--border);border-radius:8px;padding:.3rem .6rem;margin-bottom:1.5rem;background:var(--surface);color:var(--text)}.recipe-main-grid{display:grid;grid-template-columns:minmax(220px,300px) 1fr;gap:2rem;align-items:start;margin-bottom:2rem}@media (max-width: 640px){.recipe-main-grid{grid-template-columns:1fr}}.recipe-photo-wrap{position:relative;background:var(--surface);border:1px solid var(--border);border-radius:14px;display:flex;align-items:center;justify-content:center;overflow:hidden;margin-bottom:.75rem}.recipe-photo-square{width:100%;max-width:300px;aspect-ratio:1 / 1}.recipe-photo-wrap img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}.recipe-photo-placeholder{font-size:4rem;opacity:.35}.recipe-photo-wrap.photo-editable{cursor:pointer;transition:border-color .15s ease}@media (hover: hover){.recipe-photo-wrap.photo-editable:hover{border-color:var(--primary)}}.crop-viewport{position:relative;width:280px;height:280px;margin:0 auto 1rem;overflow:hidden;border-radius:12px;outline:2px solid var(--muted);background:var(--bg);cursor:grab;touch-action:none}.crop-viewport:active{cursor:grabbing}.crop-viewport--circle{border-radius:50%}.crop-viewport img{position:absolute;top:0;left:0;max-width:none;transform-origin:0 0;user-select:none}.crop-zoom-row{display:flex;align-items:center;gap:.6rem;margin-bottom:1rem}.crop-zoom-row input[type=range]{flex:1}.info-list{margin:0}.info-row{display:flex;align-items:center;gap:.5rem;padding:.6rem 0;border-bottom:1px solid var(--border)}.info-row:first-child{padding-top:0}.info-row dt{flex:0 0 100px;font-weight:600;color:var(--muted)}.info-row dd{margin:0}.info-edit-btn{display:none;flex:0 0 auto;margin-left:auto;border:none;background:transparent;color:var(--muted);cursor:pointer;line-height:1;padding:.25rem;border-radius:4px}.info-edit-btn:focus-visible{background:var(--bg);color:var(--primary);outline:none}@media (hover: hover){.info-edit-btn:hover{background:var(--bg);color:var(--primary);outline:none}}#info-view.is-editing .info-edit-btn{display:inline-flex;align-items:center;justify-content:center}#badge-author a{color:var(--primary);text-decoration:none;font-weight:600}@media (hover: hover){#badge-author a:hover{text-decoration:underline}}.joint-account-partner-link{color:var(--primary);text-decoration:none;font-weight:600}@media (hover: hover){.joint-account-partner-link:hover{text-decoration:underline}}.season-months{display:flex;flex-wrap:wrap;gap:.3rem}.month-box{width:1.4rem;height:1.4rem;display:flex;align-items:center;justify-content:center;border-radius:50%;font-size:.75rem;background:var(--bg);color:var(--muted);border:1px solid var(--border)}.month-box.in-season{background:var(--primary);color:#fff;border-color:var(--primary)}.month-box.current-month{font-weight:700;outline:2px solid var(--text);outline-offset:1px}#field-prompt-modal .choice-group{margin-top:.2rem}.servings-stepper{display:flex;align-items:center;margin-bottom:1rem}.stepper-btn{width:2.25rem;height:2.25rem;border-radius:999px;border:1px solid var(--border);background:var(--surface);color:var(--text);font-size:1.1rem;font-weight:700;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;transition:background .15s ease,border-color .15s ease}@media (hover: hover){.stepper-btn:hover{border-color:var(--primary)}}.servings-label{font-weight:600;min-width:6rem;text-align:center}.servings-note-btn{flex:0 0 auto;width:1.9rem;height:1.9rem;margin-left:.5rem;border-radius:999px;border:1.5px dashed var(--border);background:transparent;color:var(--muted);cursor:pointer;display:inline-flex;align-items:center;justify-content:center}@media (hover: hover){.servings-note-btn:hover{border-color:var(--primary);color:var(--primary)}}.servings-note-display{margin-left:.5rem;color:var(--muted);font-size:.9rem}.add-section-bar{display:flex;align-items:center;justify-content:center;gap:.4rem;width:100%;padding:.6rem;margin-top:.5rem;border:2px dashed var(--border);border-radius:10px;background:var(--bg);color:var(--muted);font-size:.9rem;font-weight:600;line-height:1;cursor:pointer;transition:border-color .15s ease,color .15s ease}@media (hover: hover){.add-section-bar:hover{border-color:var(--primary);color:var(--primary)}}body.is-pointer-dragging{user-select:none;-webkit-user-select:none}.ingredient-section{margin-bottom:1.25rem}.ingredient-section.dragging{opacity:.4}.ingredient-section-header{display:flex;align-items:center;gap:.5rem;margin-bottom:.5rem;padding:.3rem .4rem;border-radius:8px}.ingredient-section-header.drag-over{outline:2px dashed var(--primary);outline-offset:2px}.section-drag-handle{color:var(--muted);font-size:1rem;line-height:1;cursor:grab;touch-action:none}.section-name-input{flex:1;border:1px solid transparent;border-radius:6px;padding:.3rem .5rem;font:inherit;font-weight:600;background:transparent;color:var(--text)}.section-name-input:focus{border-color:var(--border);background:var(--surface)}@media (hover: hover){.section-name-input:hover{border-color:var(--border);background:var(--surface)}}.btn-delete-section{flex:0 0 auto;border:none;background:none;color:var(--muted);cursor:pointer;font-size:.9rem;padding:.2rem .4rem;border-radius:6px}@media (hover: hover){.btn-delete-section:hover{background:var(--border);color:#d92d20}}.section-title{margin:0 0 .5rem;font-size:1rem;font-weight:600}.section-title-empty{color:var(--muted);font-style:italic;font-weight:400}.recipe-ingredient-grid{list-style:none;margin:0 0 1rem;padding:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100px,calc((100% - .6rem) / 3)),100px));gap:.3rem}.ingredient-card .recipe-card-media{aspect-ratio:1 / 1;position:relative}.ingredient-season-btn{position:absolute;bottom:4px;right:4px;width:22px;height:22px;border-radius:50%;border:none;background:#ffffff59;color:var(--text);font-size:.75rem;line-height:1;cursor:pointer;display:flex;align-items:center;justify-content:center;opacity:.55;z-index:2}@media (hover: hover){.ingredient-season-btn:hover{opacity:1;background:#ffffffe6}}.linked-recipe-icon{position:absolute;top:4px;left:4px;z-index:2;width:22px;height:22px;border-radius:50%;background:var(--primary);color:transparent;display:flex;align-items:center;justify-content:center;opacity:.95}@media (hover: hover){.linked-recipe-icon:hover{opacity:.5;background:var(--primary-hover)}}.linked-recipe-icon .icon{width:12px;height:12px}.ingredient-season-popover{position:absolute;bottom:100%;right:0;margin-bottom:6px;z-index:20;display:grid;grid-template-columns:repeat(6,1fr);justify-items:center;gap:3px;width:160px;padding:.5rem;background:var(--surface);border:1px solid var(--border);border-radius:8px;box-shadow:0 4px 12px #0003}.ingredient-card .recipe-card-title{font-size:.85rem;text-align:center;padding:.4rem}.ingredient-qty{color:var(--primary)}.ingredient-card{position:relative;overflow:visible;cursor:pointer}#ingredient-sections.is-editing .ingredient-card{user-select:none;-webkit-user-select:none}.ingredient-card-drag-handle{display:none}@media (hover: none) and (pointer: coarse){.ingredient-card-drag-handle{display:flex;align-items:center;justify-content:center;position:absolute;bottom:4px;left:4px;z-index:2;width:22px;height:22px;border-radius:50%;background:#ffffff8c;color:var(--text);font-size:.85rem;line-height:1;touch-action:none}}.ingredient-card.out-of-season{border:solid 2px #d92d20;background:#ffd5d2;box-shadow:0 0 0 1px #d92d20}.ingredient-card.checked-off{filter:grayscale(.05) brightness(.7) opacity(.12)}.ingredient-card.checked-off .recipe-card-title{text-decoration:line-through}.ingredient-card.checked-off .ingredient-season-btn{pointer-events:none}.ingredient-delete-btn,.recipe-delete-btn{position:absolute;top:-8px;right:-8px;z-index:3;width:24px;height:24px;border-radius:50%;border:none;background:#fff;color:#d92d20;box-shadow:0 1px 3px #00000040;cursor:pointer;font-size:.75rem;font-weight:700;line-height:1;display:flex;align-items:center;justify-content:center}@media (hover: hover){.ingredient-delete-btn:hover,.recipe-delete-btn:hover{background:#d92d20;color:#fff}}.recipe-duplicate-btn{position:absolute;top:-8px;left:-8px;z-index:3;width:24px;height:24px;border-radius:50%;border:none;background:#fff;color:var(--primary);box-shadow:0 1px 3px #00000040;cursor:pointer;display:flex;align-items:center;justify-content:center}@media (hover: hover){.recipe-duplicate-btn:hover{background:var(--primary);color:#fff}}.recipe-wish-remove-btn{position:absolute;top:4px;right:4px;z-index:3;border:none;background:none;padding:0;color:var(--text);opacity:.45;cursor:pointer;display:flex;align-items:center;justify-content:center}.recipe-wish-remove-btn .icon{width:22px;height:22px}@media (hover: hover){.recipe-wish-remove-btn:hover{opacity:.85}}.ingredient-card.dragging{opacity:.4}.ingredient-card.drag-placeholder{border:3px dashed var(--primary);background:var(--bg)}.ingredient-card.drag-placeholder>*{visibility:hidden}.drag-ghost{position:fixed;z-index:200;opacity:.85;pointer-events:none;box-shadow:0 8px 20px #00000040}.ingredient-card.drag-over{outline:2px dashed var(--primary);outline-offset:2px}.ingredient-card.drag-over-before{border-left:3px dashed var(--primary)}.ingredient-card.drag-over-after{border-right:3px dashed var(--primary)}.ingredient-meta{margin:0;padding:0 .75rem .5rem;font-size:.75rem;color:var(--muted)}.ingredient-card-clickable{cursor:pointer}@media (hover: hover){.ingredient-card-clickable:hover{border-color:var(--primary)}}.ingredient-link-badge,.ingredient-image-badge{position:absolute;top:4px;z-index:2;width:20px;height:20px;border-radius:50%;background:var(--primary);color:#fff;display:flex;align-items:center;justify-content:center}.ingredient-link-badge{right:4px}.ingredient-image-badge{left:4px}.ingredient-link-badge .icon,.ingredient-image-badge .icon{width:11px;height:11px}.ingredient-card-add{border-style:dashed;background:var(--bg);align-items:center;justify-content:center;min-height:100px;cursor:pointer;color:var(--muted);transition:border-color .15s ease,color .15s ease}@media (hover: hover){.ingredient-card-add:hover{border-color:var(--primary);color:var(--primary)}}.ingredient-add-plus{font-size:2.5rem;line-height:1}.request-duplicate-note{color:var(--muted);font-size:.75rem;text-align:center;padding:0 .6rem;margin:-.2rem 0 .3rem}.request-actions{display:flex;flex-wrap:wrap;gap:.4rem;padding:0 .6rem .6rem}.request-actions .btn{flex:1;justify-content:center;padding:.4rem .5rem;font-size:.8rem}#requests-list{grid-template-columns:repeat(auto-fill,minmax(170px,1fr))}.ingredient-category{border:1px solid var(--border);border-radius:10px;background:radial-gradient(ellipse at center,var(--bg) 50%,var(--surface) 100%);margin-bottom:.85rem}.ingredient-category>summary{padding:.5rem 1.1rem;font-size:1.05rem}.ingredient-subcategory{border:1px solid var(--border);border-radius:8px;margin:0 0 .6rem}.ingredient-subcategory:last-child{margin-bottom:0}.ingredient-subcategory>summary{padding:.55rem .8rem;font-size:.9rem}.ingredient-category>summary,.ingredient-subcategory>summary{cursor:pointer;list-style:none;display:flex;align-items:center;gap:.5rem;font-weight:600;user-select:none}.ingredient-category>summary::-webkit-details-marker,.ingredient-subcategory>summary::-webkit-details-marker{display:none}.ingredient-category>summary:before,.ingredient-subcategory>summary:before{content:"▸";display:inline-block;color:var(--muted);transition:transform .15s ease}.ingredient-category[open]>summary:before,.ingredient-subcategory[open]>summary:before{transform:rotate(90deg)}.ingredient-category .count,.ingredient-subcategory .count{color:var(--muted);font-weight:400;font-size:.85rem}.ingredient-category-body{padding:0 1.1rem 1.1rem}.ingredient-subcategory>.ingredient-category-body{padding:0 .8rem .8rem}.preparation-section{margin-bottom:1.25rem}.prep-steps-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.5rem}.prep-step{display:flex;flex-direction:column;gap:.5rem;cursor:pointer;border-radius:10px}.prep-step.prep-step-highlight{animation:prep-step-highlight-pulse 1.6s ease-in-out 2}@keyframes prep-step-highlight-pulse{0%,to{box-shadow:0 0 color-mix(in srgb,var(--primary) 0%,transparent);background:transparent}25%,55%{box-shadow:0 0 0 3px color-mix(in srgb,var(--primary) 35%,transparent);background:color-mix(in srgb,var(--primary) 10%,transparent)}}.prep-step-main{position:relative;display:flex;gap:.3rem}.prep-step-main.is-tall{display:block}.prep-step-shape{display:none;position:absolute;inset:0;width:100%;height:100%;overflow:visible;pointer-events:none}.prep-step-shape path{fill:var(--surface);stroke:var(--border);stroke-width:1px}.prep-step-main.is-tall .prep-step-shape{display:block}.prep-step-card{flex:1 1 auto;min-width:0;display:flex;align-items:flex-start;gap:.65rem;padding:.6rem .7rem;border-radius:10px;border:1px solid var(--border);background:var(--surface)}.prep-step-main.is-tall .prep-step-card{position:relative;z-index:1;border:none;background:none;border-radius:0}.prep-step-number{flex:0 0 auto;display:flex;align-items:center;justify-content:center;width:1.6rem;height:1.6rem;border-radius:50%;background:var(--bg);color:var(--primary);font-weight:700;font-size:.8rem}.prep-step-text-wrap{flex:1 1 auto;min-width:0}.notch-spacer{display:none;float:right;width:max(0px,1.8rem);height:max(0px,1.9rem)}.prep-step-main.is-tall .notch-spacer{display:block}.prep-step-text{flex:1 1 auto;min-width:0;margin:0;padding-top:.15rem;white-space:pre-wrap;line-height:1.5}.prep-step.checked-off{opacity:.25}.prep-step.checked-off .prep-step-text{text-decoration:line-through}.prep-step-image-toggle{flex:0 0 auto;width:2.2rem;align-self:stretch;border:1px solid var(--border);border-radius:10px;background:var(--surface);color:var(--primary);display:flex;align-items:center;justify-content:center;cursor:pointer;padding:0}.prep-step-main.is-tall .prep-step-image-toggle{position:absolute;top:0;right:0;z-index:2;height:2.2rem}.prep-step-image{display:block;margin-left:2.25rem;max-width:min(100%,300px);border-radius:8px;border:1px solid var(--border)}.prep-step-timer-start{display:inline-flex;align-items:center;gap:.35rem;margin-top:.35rem;padding:.25rem .75rem;border:1.5px solid var(--primary);border-radius:999px;background:var(--surface);color:var(--primary);font-weight:700;font-size:.8rem;white-space:nowrap;cursor:pointer}@media (hover: hover){.prep-step-timer-start:hover:not(:disabled){background:var(--primary);color:#fff}}.prep-step-timer-start:disabled{border-color:var(--border);color:var(--muted);cursor:not-allowed}.preparation-section-block{margin-bottom:1.25rem}.preparation-section-block.dragging{opacity:.4}.prep-steps-edit-list{display:flex;flex-direction:column;gap:.4rem}.is-pointer-dragging .prep-steps-edit-list.is-empty{min-height:3rem;border:2px dashed var(--border);border-radius:10px}.prep-step-row{display:flex;align-items:flex-start;gap:.5rem;padding:.4rem;border-radius:10px}.prep-step-row.drag-placeholder{border:3px dashed var(--primary);background:var(--bg)}.prep-step-row.drag-placeholder>*{visibility:hidden}.prep-step-drag-col,.prep-step-actions-col{display:contents}.prep-step-drag-handle{flex:0 0 auto;width:1rem;text-align:center;color:var(--muted);font-size:1rem;line-height:1;padding-top:.6rem;cursor:grab;touch-action:none}.prep-step-input{flex:1;border:1px solid var(--border);border-radius:8px;padding:.5rem .6rem;font:inherit;line-height:1.5;background:var(--bg);color:var(--text);resize:vertical}.prep-step-delete{flex:0 0 auto;width:2.2rem;align-self:stretch;border:1.5px dashed var(--border);border-radius:6px;background:transparent;color:#d92d20;cursor:pointer;display:flex;align-items:center;justify-content:center;padding:0}@media (hover: hover){.prep-step-delete:hover{background:#d92d20;border-color:#d92d20;color:#fff}}.prep-step-attachment-btn{flex:0 0 auto;width:2.2rem;align-self:stretch;border:1.5px dashed var(--border);border-radius:6px;background:transparent;color:var(--muted);display:flex;align-items:center;justify-content:center;cursor:pointer;padding:0}.prep-add-step-row{display:flex;align-items:center;gap:.5rem;padding:0 .4rem;margin-top:.4rem}.prep-step-drag-col-spacer{flex:0 0 auto;width:3.1rem}.prep-step-actions-col-spacer{flex:0 0 auto;width:4.9rem}@media (max-width: 480px){.prep-step-row{align-items:stretch}.prep-step-drag-col{display:flex;flex-direction:column-reverse;align-items:center;gap:.3rem}.prep-step-drag-handle{flex:1;width:auto;display:flex;align-items:center;justify-content:center;padding-top:0}.prep-step-input{min-height:5rem}.prep-step-actions-col{display:flex;flex-direction:column;gap:.4rem}.prep-step-delete,.prep-step-attachment-btn{flex:1;width:2.2rem}.prep-step-drag-col-spacer{width:1.6rem}.prep-step-actions-col-spacer{width:2.2rem}}.prep-add-step-btn{display:flex;align-items:center;justify-content:center;flex:1;min-width:0;padding:.5rem;border:2px dashed var(--border);border-radius:10px;background:var(--bg);color:var(--muted);font-size:.85rem;font-weight:600;cursor:pointer;transition:border-color .15s ease,color .15s ease}@media (hover: hover){.prep-add-step-btn:hover{border-color:var(--primary);color:var(--primary)}}.prose{white-space:pre-wrap;line-height:1.6}.prose-input{width:100%;min-height:160px;border:1px solid var(--border);border-radius:8px;padding:.75rem;font:inherit;line-height:1.6;background:var(--surface);color:var(--text);resize:vertical}.prose-input.is-analyzing{cursor:default;color:transparent;background-image:linear-gradient(90deg,#2563eb,#707070,#9333ea,#707070,#2563eb);background-size:300% 100%;-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;animation:lazy-mode-scramble-glow 1.4s ease-in-out infinite,lazy-mode-rainbow-shift 3s linear infinite}@keyframes lazy-mode-scramble-glow{0%,to{border-color:var(--border);box-shadow:0 0 color-mix(in srgb,var(--primary) 0%,transparent)}50%{border-color:var(--primary);box-shadow:0 0 0 3px color-mix(in srgb,var(--primary) 20%,transparent)}}@keyframes lazy-mode-rainbow-shift{0%{background-position:0% 50%}to{background-position:300% 50%}}.notes-box{background:#fdf6e3;border:1px solid #f0e2a8;border-radius:10px;padding:1rem;color:#2b2320}:root[data-theme=dark] .notes-box{background:#3a331f;border-color:#5a4f2e;color:#ededed}:root[data-theme=light] .notes-box{background:#fdf6e3;border-color:#f0e2a8;color:#2b2320}.private-note-row{display:flex;align-items:stretch;gap:.5rem}.private-note-row .notes-box{flex:1;margin:0;padding-top:.5rem;padding-bottom:.5rem}.private-notes-actions{display:flex;gap:.5rem;margin-top:.5rem}.icon{display:inline-block;width:14px;height:14px;flex:0 0 auto;background-color:currentColor;vertical-align:middle;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-position:center;mask-position:center;-webkit-mask-size:contain;mask-size:contain}.icon-edit{-webkit-mask-image:url(/icons/edit.svg);mask-image:url(/icons/edit.svg)}.icon-sparkles{-webkit-mask-image:url(/icons/sparkles.svg);mask-image:url(/icons/sparkles.svg)}.icon-cart{-webkit-mask-image:url(/icons/cart.svg);mask-image:url(/icons/cart.svg)}.icon-lock{-webkit-mask-image:url(/icons/lock.svg);mask-image:url(/icons/lock.svg)}.icon-lock-lg{width:20px;height:20px}.icon-carrot{-webkit-mask-image:url(/icons/carrot.svg);mask-image:url(/icons/carrot.svg)}.icon-paper-roll{-webkit-mask-image:url(/icons/paper-roll.svg);mask-image:url(/icons/paper-roll.svg)}.icon-delete{-webkit-mask-image:url(/icons/delete.svg);mask-image:url(/icons/delete.svg)}.icon-save{-webkit-mask-image:url(/icons/save.svg);mask-image:url(/icons/save.svg)}.icon-leaf{-webkit-mask-image:url(/icons/leaf.svg);mask-image:url(/icons/leaf.svg)}.icon-link{-webkit-mask-image:url(/icons/link.svg);mask-image:url(/icons/link.svg)}.icon-image{-webkit-mask-image:url(/icons/image.svg);mask-image:url(/icons/image.svg)}.icon-timer{-webkit-mask-image:url(/icons/timer.svg);mask-image:url(/icons/timer.svg)}.icon-pause{-webkit-mask-image:url(/icons/pause.svg);mask-image:url(/icons/pause.svg)}.icon-play{-webkit-mask-image:url(/icons/play.svg);mask-image:url(/icons/play.svg)}.icon-attachment-both{-webkit-mask-image:url(/icons/attachment-both.svg);mask-image:url(/icons/attachment-both.svg);width:20px;height:20px}.icon-plus{-webkit-mask-image:url(/icons/plus.svg);mask-image:url(/icons/plus.svg)}.icon-restart{-webkit-mask-image:url(/icons/restart.svg);mask-image:url(/icons/restart.svg)}.icon-stop{-webkit-mask-image:url(/icons/stop.svg);mask-image:url(/icons/stop.svg)}.icon-chevron{-webkit-mask-image:url(/icons/chevron.svg);mask-image:url(/icons/chevron.svg)}.icon-check{-webkit-mask-image:url(/icons/check.svg);mask-image:url(/icons/check.svg)}.icon-help{-webkit-mask-image:url(/icons/help.svg);mask-image:url(/icons/help.svg)}.icon-equals{-webkit-mask-image:url(/icons/equals.svg);mask-image:url(/icons/equals.svg)}.icon-close{-webkit-mask-image:url(/icons/close.svg);mask-image:url(/icons/close.svg)}.icon-receipt-check{-webkit-mask-image:url(/icons/receipt-check.svg);mask-image:url(/icons/receipt-check.svg)}.icon-share{-webkit-mask-image:url(/icons/share.svg);mask-image:url(/icons/share.svg)}.icon-duplicate{-webkit-mask-image:url(/icons/duplicate.svg);mask-image:url(/icons/duplicate.svg)}.icon-search{-webkit-mask-image:url(/icons/search.svg);mask-image:url(/icons/search.svg)}.icon-trend{-webkit-mask-image:url(/icons/trend.svg);mask-image:url(/icons/trend.svg)}.icon-calendar{-webkit-mask-image:url(/icons/calendar.svg);mask-image:url(/icons/calendar.svg)}.icon-bullet-list{-webkit-mask-image:url(/icons/bullet-list.svg);mask-image:url(/icons/bullet-list.svg)}.icon-star{-webkit-mask-image:url(/icons/star.svg);mask-image:url(/icons/star.svg)}.icon-remove-circle{-webkit-mask-image:url(/icons/remove-circle.svg);mask-image:url(/icons/remove-circle.svg)}.icon-text{margin-right:.4em}.icon-heading{width:.85em;height:.85em;margin-right:.45rem;vertical-align:-.1em}.todolist-recipes{list-style:none;margin:.9rem 0 0;padding:0;display:flex;flex-direction:column;gap:.5rem}.todolist-recipe-row{display:flex;align-items:center;gap:.75rem;padding:.6rem .8rem;border:1px solid var(--border);border-radius:10px;background:var(--surface)}.todolist-recipe-row.dragging{opacity:.4}.todolist-recipe-row.drag-over{border-color:var(--accent, #4a7c59)}.todolist-drag-handle{cursor:grab;color:var(--muted);flex:0 0 auto}.todolist-recipe-link{flex:1;min-width:0;color:inherit;text-decoration:none;font-weight:600}@media (hover: hover){.todolist-recipe-link:hover{text-decoration:underline}}.todolist-servings{font-weight:400;color:var(--muted)}.todolist-recipe-edit-btn,.todolist-recipe-delete-btn{flex:0 0 auto;border:none;background:transparent;color:var(--muted);cursor:pointer;font-size:1rem;line-height:1;padding:.3rem}@media (hover: hover){.todolist-recipe-edit-btn:hover{color:var(--text)}}@media (hover: hover){.todolist-recipe-delete-btn:hover{color:var(--danger, #c0392b)}}.shopping-list-section{margin-top:4rem}.group-shopping-section{margin-top:4rem;padding-top:2rem;border-top:1px solid var(--border)}.group-shopping-section .shopping-list-section{margin-top:2.5rem}.shopping-list-header{display:flex;align-items:center;justify-content:flex-start;flex-wrap:wrap;gap:.75rem}.shopping-list-actions{display:flex;flex-wrap:wrap;gap:.5rem}.shopping-view-mode-group{margin-left:auto}@media (max-width: 480px){.shopping-view-mode-group{margin-left:0}}.favorites-tab{position:fixed;top:50%;right:0;transform:translateY(-50%);z-index:60;display:flex;flex-direction:column;background:var(--surface);border:1px solid var(--border);border-radius:16px 0 0 16px;overflow:hidden}.favorites-tab-toggle{border:none;background:none;color:var(--text);cursor:pointer;padding:.7rem .4rem;display:flex;align-items:center;justify-content:center}@media (hover: hover){.favorites-tab-toggle:hover{background:var(--bg)}}.favorites-tab-label{writing-mode:vertical-rl;transform:rotate(180deg);font-weight:700;font-size:.9rem;letter-spacing:.02em}.favorites-tab-panel{display:none}.favorites-tab.is-open{flex-direction:row;align-items:stretch}.favorites-tab.is-open .favorites-tab-toggle{display:none}.favorites-tab.is-open .favorites-tab-panel{display:flex}.favorites-tab-handle{flex:0 0 auto;width:1.3rem;align-self:stretch;border:none;border-right:1px solid var(--border);background:var(--bg);color:var(--muted);cursor:pointer;display:flex;align-items:center;justify-content:center;padding:0}@media (hover: hover){.favorites-tab-handle:hover{background:var(--border);color:var(--text)}}.favorites-tab-content{display:flex;flex-direction:column;gap:.5rem;padding:.6rem .75rem;width:17rem;max-width:80vw;max-height:70vh;overflow-y:auto}.favorites-tab-content .recipe-ingredient-grid{grid-template-columns:repeat(3,1fr)}.favorites-tab-actions{display:flex;align-items:center;gap:.5rem;padding-bottom:.5rem;border-bottom:1px solid var(--border)}.favorites-tab-actions .btn{flex:1 1 auto;height:2.2rem;padding:0 .6rem;font-size:1rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;justify-content:center}.favorites-edit-btn{flex:0 0 auto;height:2.2rem;width:2.2rem;border:1px solid var(--border);border-radius:8px;background:var(--bg);color:var(--muted);cursor:pointer;padding:0;display:flex;align-items:center;justify-content:center}@media (hover: hover){.favorites-edit-btn:hover{color:var(--text)}}.favorites-edit-btn[aria-pressed=true]{background:var(--primary);border-color:var(--primary);color:#fff}.frequent-items-category{margin-top:.9rem}.frequent-items-category:first-child{margin-top:0}.frequent-item-chip-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.35rem}.frequent-item-chip{display:flex;align-items:center;gap:.35rem;width:100%;border:1px solid var(--border);background:var(--surface);color:var(--text);border-radius:8px;padding:.5rem .7rem;font-size:.85rem;font-weight:600;cursor:pointer;transition:border-color .15s ease,color .15s ease}@media (hover: hover){.frequent-item-chip:hover{border-color:var(--primary);color:var(--primary)}}.frequent-item-chip-name{flex:1 1 auto;text-align:left}.frequent-item-chip-delete{flex:0 0 auto;width:18px;height:18px;border:none;border-radius:50%;background:none;color:var(--muted);cursor:pointer;display:flex;align-items:center;justify-content:center;padding:0}@media (hover: hover){.frequent-item-chip-delete:hover{background:#d92d20;color:#fff}}@keyframes frequent-item-press{0%{transform:scale(1);box-shadow:0 0 0 0 var(--primary)}50%{transform:scale(.85);box-shadow:0 0 0 2px var(--primary)}to{transform:scale(1);box-shadow:0 0 0 0 var(--primary)}}.frequent-item-entry.is-pressed{animation:frequent-item-press .3s ease-out}.frequent-item-entry.is-in-list{position:relative;opacity:.55;cursor:default}@keyframes frequent-item-label-slide-in{0%{transform:translateY(-50%) translate(100%);opacity:0}to{transform:translateY(-50%) translate(0);opacity:1}}.frequent-item-in-list-label{position:absolute;left:0;right:0;top:50%;transform:translateY(-50%);z-index:2;background:#0000008c;color:#fff;text-align:center;padding:.3rem .4rem;font-size:.7rem;font-weight:600;line-height:1.2;pointer-events:none}.frequent-item-in-list-label.is-just-added{animation:frequent-item-label-slide-in .35s ease-out}@keyframes frequent-item-badge-slide-in{0%{transform:translate(40px);opacity:0}to{transform:translate(0);opacity:1}}.frequent-item-in-list-badge{flex:0 0 auto;display:inline-flex;align-items:center;gap:.3rem;background:var(--border);color:var(--muted);border-radius:999px;padding:.25rem .6rem;font-size:.7rem;font-weight:600;white-space:nowrap}.frequent-item-in-list-badge.is-just-added{animation:frequent-item-badge-slide-in .7s ease-out}.frequent-item-in-list-badge .icon{width:11px;height:11px}@media (hover: hover){.frequent-item-entry.is-in-list:hover{border-color:var(--border);color:var(--text)}}.shopping-category{margin-top:1.25rem}.shopping-items-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;border:1px solid var(--border);border-radius:8px;background:var(--surface);overflow:hidden}.shopping-item-row{display:flex;align-items:center}.shopping-item-row:not(:last-child){border-bottom:2px dashed color-mix(in srgb,var(--border) 40%,transparent)}.shopping-item-label{display:flex;align-items:center;gap:.6rem;flex:1;min-width:0;padding:.4rem .6rem;cursor:pointer}.shopping-item-checkbox{flex:0 0 auto;width:1.1rem;height:1.1rem}.shopping-item-text{flex:1;min-width:0}.shopping-item-edit-btn{flex:0 0 auto;border:none;background:transparent;color:var(--muted);cursor:pointer;font-size:1rem;line-height:1;padding:.3rem;margin-right:.6rem;opacity:.2}@media (hover: hover){.shopping-item-edit-btn:hover{color:var(--text);opacity:1}}.shopping-item-delete-btn{flex:0 0 auto;border:none;background:transparent;color:var(--muted);cursor:pointer;font-size:1rem;line-height:1;padding:.3rem;margin-right:.6rem;opacity:.2}@media (hover: hover){.shopping-item-delete-btn:hover{color:#d92d20}}.shopping-item-row.checked-off .shopping-item-checkbox,.shopping-item-row.checked-off .shopping-item-text{opacity:.2}.shopping-item-row.checked-off .shopping-item-text{text-decoration:line-through}.checkbox-field{display:flex;align-items:center;gap:.5rem;font-size:.9rem;margin:.75rem 0;cursor:pointer}.checkbox-field input{flex:0 0 auto;width:1.1rem;height:1.1rem}.provenance-total{margin:0;color:var(--muted);font-size:.95rem}.provenance-list{list-style:none;margin:.9rem 0 0;padding:0;display:flex;flex-direction:column;gap:.5rem}.provenance-row{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:.5rem;padding:.25rem .75rem;border:1px solid var(--border);border-radius:8px;background:var(--surface)}.provenance-text{flex:1;min-width:0}.provenance-actions{display:flex;flex-wrap:wrap;align-items:center;gap:.4rem}.provenance-edit-btn,.provenance-delete-btn{padding:.5rem;font-size:.8rem;line-height:1}.stats-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:.75rem;margin:0 0 1.5rem}.stat-card{display:flex;flex-direction:column;gap:.2rem;padding:.9rem 1rem;background:var(--surface);border:1px solid var(--border);border-radius:10px}.stat-value{font-size:1.6rem;font-weight:700;font-variant-numeric:tabular-nums}.stat-label{font-size:.8rem;color:var(--muted)}.stats-chart{display:flex;align-items:stretch;gap:3px;height:110px;padding:0 0 .5rem;margin:0;border-bottom:1px solid var(--border)}.chart-col{position:relative;flex:1;min-width:0}.chart-col-pre-genesis:before{content:"";position:absolute;inset:0;background:repeating-linear-gradient(45deg,var(--border),var(--border) 4px,transparent 4px,transparent 9px);opacity:.6;pointer-events:none}.chart-bar-wrap{position:relative;height:100%;display:flex;align-items:flex-end}.chart-bar-value{position:absolute;left:50%;bottom:calc(var(--bar-ratio, 0) * 100% + 3px);transform:translate(-50%);font-size:.65rem;font-weight:600;color:var(--muted);font-variant-numeric:tabular-nums;white-space:nowrap}.chart-bar{width:100%;height:calc(var(--bar-ratio, 0) * 100%);min-height:2px;background:var(--primary);border-radius:2px 2px 0 0}.chart-bar.is-empty{background:var(--border)}.stats-chart-axis{display:flex;gap:3px;margin:.3rem 0 1.5rem}.chart-col-genesis .chart-bar-wrap:before,.chart-col-genesis.diverging-chart-col:before{content:"";position:absolute;left:-1.5px;top:0;bottom:0;border-left:2px dashed var(--muted);pointer-events:none}.stats-diverging-chart{display:flex;align-items:stretch;gap:3px;height:160px;padding:0 0 .5rem;margin:0}.diverging-chart-col{position:relative;flex:1;min-width:0;display:flex;flex-direction:column}.diverging-bar-up-wrap{position:relative;flex:1;display:flex;align-items:flex-end;justify-content:center;border-bottom:1px solid var(--border)}.diverging-bar-down-wrap{position:relative;flex:1;display:flex;align-items:flex-start;justify-content:center}.diverging-bar-up,.diverging-bar-down{width:100%;min-height:2px;background:var(--primary)}.diverging-bar-up{height:calc(var(--bar-ratio, 0) * 100%);border-radius:2px 2px 0 0}.diverging-bar-down{height:calc(var(--bar-ratio, 0) * 100%);border-radius:0 0 2px 2px;background:#d92d20}.diverging-bar-up.is-empty,.diverging-bar-down.is-empty{background:var(--border)}.diverging-bar-value-down{position:absolute;left:50%;top:calc(var(--bar-ratio, 0) * 100% + 3px);transform:translate(-50%);font-size:.65rem;font-weight:600;color:var(--muted);font-variant-numeric:tabular-nums;white-space:nowrap}.chart-axis-label{flex:1;min-width:0;text-align:center;font-size:.68rem;color:var(--muted)}.table-wrap{overflow-x:auto;margin:0 0 1.5rem}.data-table{width:100%;border-collapse:collapse;font-size:.88rem}.data-table th,.data-table td{text-align:left;padding:.55rem .7rem;border-bottom:1px solid var(--border);white-space:nowrap}.data-table th{color:var(--muted);font-weight:600;font-size:.78rem;text-transform:uppercase;letter-spacing:.02em}.data-table tr.row-suspicious{background:#ffd5d2}:root[data-theme=dark] .data-table tr.row-suspicious{background:#4a2622}.table-subtext{display:block;font-size:.78rem;color:var(--muted);white-space:normal}.suspicious-badge{display:inline-block;padding:.15rem .55rem;border-radius:999px;font-size:.75rem;font-weight:600;background:#ffd5d2;border:1px solid #d92d20;color:#8f2118}.account-status{display:inline-block;padding:.15rem .55rem;border-radius:999px;font-size:.75rem;font-weight:600;white-space:nowrap}.account-status-admin{background:var(--bg);border:1px solid var(--border);color:var(--muted)}.account-status-online{background:#dcf5e3;border:1px solid #1a7f37;color:#14532d}.account-status-offline,.account-status-public{background:var(--bg);border:1px solid var(--border);color:var(--muted)}.timer-duration-fields{display:flex;gap:1rem}.timer-rail{position:fixed;top:9rem;right:0;z-index:150;display:flex;flex-direction:column;align-items:flex-end;gap:.6rem;max-height:calc(100vh - 10rem);overflow-y:auto;overflow-x:hidden;pointer-events:none}.timer-tab{pointer-events:auto;display:flex;flex-direction:column;background:var(--surface);border:1px solid var(--border);border-radius:16px 0 0 16px;overflow:hidden;transition:box-shadow .15s ease}.timer-add-tab{box-shadow:none}.timer-add-tab .timer-tab-toggle,.timer-add-tab .timer-tab-handle{color:var(--muted)}@media (hover: hover){.timer-add-tab:hover{border-color:var(--primary)}.timer-add-tab:hover .timer-tab-toggle,.timer-add-tab:hover .timer-tab-handle{color:var(--primary)}}.timer-tab-toggle{flex:0 0 auto;border:none;background:none;color:var(--text);cursor:pointer;padding:.7rem .4rem;display:flex;align-items:center;justify-content:center}.timer-tab-time{writing-mode:vertical-rl;transform:rotate(180deg);font-weight:700;font-variant-numeric:tabular-nums;font-size:.95rem;letter-spacing:.02em}.timer-tab.is-open{flex-direction:row;align-items:stretch}.timer-tab.is-open .timer-tab-toggle,.timer-tab-panel{display:none}.timer-tab.is-open .timer-tab-panel{display:flex}.timer-tab-handle{flex:0 0 auto;width:1.7rem;align-self:stretch;border:none;border-right:1px solid var(--border);background:var(--bg);color:var(--muted);cursor:pointer;display:flex;align-items:center;justify-content:center;padding:0}.timer-tab-handle .icon{transition:transform .15s ease}@media (hover: hover){.timer-tab-handle:hover{background:var(--border);color:var(--text)}}.timer-tab-content{display:flex;flex-direction:column;gap:.25rem;padding:.3rem .5rem;min-width:11rem;max-width:15rem}.timer-tab-progress{display:flex;align-items:baseline;gap:.3rem;font-variant-numeric:tabular-nums}.timer-tab-current{font-size:1.25rem;font-weight:700;color:var(--text)}.timer-tab-progress-sep{color:var(--muted);font-size:.85rem}.timer-tab-goto{border:none;background:none;padding:0;color:var(--primary);font:inherit;font-size:.85rem;font-weight:700;cursor:pointer}@media (hover: hover){.timer-tab-goto:hover{text-decoration:underline}}.timer-tab-initial{color:var(--muted);font-size:.85rem;font-weight:700}.timer-tab-controls{display:flex;align-items:center;gap:.5rem}.timer-icon-btn{flex:0 0 auto;width:2rem;height:2rem;border:1px solid var(--border);border-radius:50%;background:var(--bg);color:var(--text);cursor:pointer;display:flex;align-items:center;justify-content:center;padding:0;transition:background .15s ease,color .15s ease,border-color .15s ease,transform .05s ease}.timer-icon-btn:active{transform:scale(.92)}@media (hover: hover){.timer-icon-btn:hover{border-color:var(--primary);color:var(--primary)}}.timer-stop-btn{margin-left:auto;color:#d92d20}@media (hover: hover){.timer-stop-btn:hover{border-color:#d92d20;color:#d92d20;background:var(--bg)}}.timer-tab-confirm{gap:.4rem}.timer-confirm-cancel{flex:0 0 auto;border:1px solid var(--border);border-radius:8px;background:var(--bg);color:var(--text);font-size:.78rem;font-weight:700;padding:.4rem .6rem;cursor:pointer}@media (hover: hover){.timer-confirm-cancel:hover{border-color:var(--text)}}.timer-confirm-action{flex:1;border:none;border-radius:8px;color:#fff;font-size:.78rem;font-weight:700;line-height:1.2;padding:.4rem .5rem;cursor:pointer}.timer-confirm-restart{background:var(--primary)}@media (hover: hover){.timer-confirm-restart:hover{background:var(--primary-hover)}}.timer-confirm-stop{background:#d92d20}@media (hover: hover){.timer-confirm-stop:hover{background:#b3251a}}.timer-stop-text-btn{flex:0 0 auto;margin-left:auto;height:2rem;padding:0 .75rem;border:1px solid #d92d20;border-radius:999px;background:var(--bg);color:#d92d20;font-size:.8rem;font-weight:700;cursor:pointer;transition:background .15s ease,color .15s ease,transform .05s ease}.timer-stop-text-btn:active{transform:scale(.95)}@media (hover: hover){.timer-stop-text-btn:hover{background:#d92d20;color:#fff}}.timer-adjust-group{display:flex;flex-wrap:wrap;gap:.35rem}.timer-adjust-btn{flex:0 0 auto;border:1px solid var(--border);border-radius:6px;background:var(--bg);color:var(--text);font-size:.78rem;font-weight:700;padding:.25rem .4rem;cursor:pointer}@media (hover: hover){.timer-adjust-btn:hover{border-color:var(--primary);color:var(--primary)}}.timer-adjust-custom{display:flex;align-items:center;justify-content:center;padding:.3rem .5rem}.timer-adjust-custom.is-open{border-color:var(--primary);color:var(--primary)}.timer-custom-form{display:flex;align-items:center;gap:.35rem}.timer-custom-form input{width:3rem;min-width:0;border:1px solid var(--border);border-radius:8px;padding:.3rem .4rem;font:inherit;font-size:.8rem;background:var(--surface);color:var(--text)}.timer-custom-confirm,.timer-add-confirm{border-color:var(--primary);color:var(--primary)}.timer-tab.is-paused .timer-tab-toggle{opacity:.6}.timer-tab.is-finished{animation:timer-blink 1s step-start infinite}.timer-tab.is-finished .timer-tab-time{color:#fff}.timer-tab.is-finished .timer-tab-handle{background:transparent;border-right-color:#ffffff4d}@keyframes timer-blink{50%{background:#d92d20}}@media (max-width: 480px){.timer-tab-content{min-width:9rem}}
