*,:before,:after{box-sizing:border-box;margin:0;padding:0}html{-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%;scrollbar-gutter:stable;overflow-x:hidden}button{font:inherit;color:inherit;cursor:pointer;-webkit-tap-highlight-color:transparent;background:0 0;border:none}input,select,textarea{font:inherit;color:inherit}ul,ol{list-style:none}img,svg{max-width:100%;height:auto;display:block}:root{--font-display:"Syne", "Futura", "Trebuchet MS", sans-serif;--font-body:"DM Sans", "Avenir", system-ui, sans-serif;--font-mono:"JetBrains Mono", ui-monospace, "SF Mono", Menlo, monospace;--text-xs:clamp(.72rem, .7rem + .12vw, .8rem);--text-sm:clamp(.82rem, .78rem + .18vw, .92rem);--text-base:clamp(.94rem, .9rem + .22vw, 1.06rem);--text-md:clamp(1.06rem, 1rem + .32vw, 1.2rem);--text-lg:clamp(1.28rem, 1.14rem + .55vw, 1.5rem);--text-xl:clamp(1.5rem, 1.28rem + .9vw, 2rem);--text-2xl:clamp(2rem, 1.6rem + 1.6vw, 2.8rem);--text-3xl:clamp(2.6rem, 2rem + 2.8vw, 4rem);--sp-1:.25rem;--sp-2:.5rem;--sp-3:.75rem;--sp-4:1rem;--sp-5:1.25rem;--sp-6:1.5rem;--sp-7:1.75rem;--sp-8:2rem;--sp-10:2.5rem;--sp-12:3rem;--sp-16:4rem;--sp-20:5rem;--r-xs:3px;--r-sm:6px;--r-md:10px;--r-lg:14px;--r-xl:20px;--r-pill:999px;--ease-out:cubic-bezier(.16, 1, .3, 1);--ease-in-out:cubic-bezier(.65, 0, .35, 1);--ease-spring:cubic-bezier(.34, 1.56, .64, 1);--ease-bounce:cubic-bezier(.68, -.55, .265, 1.55);--t-fast:.1s;--t-base:.18s;--t-slow:.34s;--t-slower:.48s;--max-w:1200px;--header-h:72px;--touch-min:48px;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--bg:#fef7ed;--bg-soft:#fbf0e0;--surface:#fff;--surface-2:#fef7ed;--surface-hover:#f9eddc;--overlay:#1c15258c;--ink:#2b2118;--text:#3d3028;--text-muted:#7a6b5d;--text-faint:#a89888;--border:#e8ddd0;--border-strong:#d4c7b8;--accent:#c75b39;--accent-ink:#fff;--accent-hover:#a8452b;--accent-soft:#fde8e0;--accent-glow:#c75b3933;--secondary:#1b7b74;--secondary-ink:#fff;--secondary-soft:#dff5f3;--focus-ring:#c75b39;--focus-ring-bg:#c75b391f;--success:#2d6a4f;--success-soft:#d8f3dc;--danger:#a4161a;--danger-soft:#fde2e4;--info:#1b6b93;--info-soft:#dff2fb;--warning:#bc6c25;--warning-soft:#fefae0;--cat-breakfast:#e07a28;--cat-lunch:#2d6a4f;--cat-dinner:#6d3b8a;--cat-dessert:#c2185b;--cat-snack:#1b7b74;--sh-xs:0 1px 2px #2b21180d;--sh-sm:0 2px 4px #2b21180f, 0 1px 2px #2b21180a;--sh-md:0 6px 20px -6px #2b21181f, 0 2px 6px #2b21180d;--sh-lg:0 24px 48px -16px #2b211833, 0 6px 16px #2b21180f;--skeleton-base:#ede4d8;--skeleton-shine:#f9f2e8}[data-theme=dark]{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--bg:#1c1525;--bg-soft:#251e30;--surface:#2a2235;--surface-2:#302840;--surface-hover:#362e42;--overlay:#000000b3;--ink:#f5ede3;--text:#e2d9ce;--text-muted:#a89888;--text-faint:#7a6b5d;--border:#3d3350;--border-strong:#524668;--accent:#e8913a;--accent-ink:#1c1525;--accent-hover:#f4a657;--accent-soft:#2e2218;--accent-glow:#e8913a2e;--secondary:#3dd9cf;--secondary-ink:#1c1525;--secondary-soft:#1a2f2e;--focus-ring:#e8913a;--focus-ring-bg:#e8913a26;--success:#6bcb8b;--success-soft:#122920;--danger:#f4796b;--danger-soft:#301418;--info:#5bc0eb;--info-soft:#12262f;--warning:#f4a657;--warning-soft:#2e2010;--cat-breakfast:#f4a657;--cat-lunch:#6bcb8b;--cat-dinner:#b388eb;--cat-dessert:#f472b6;--cat-snack:#3dd9cf;--sh-xs:0 1px 2px #00000080;--sh-sm:0 2px 4px #00000080, 0 1px 2px #0000004d;--sh-md:0 6px 20px -6px #00000080, 0 2px 6px #0000004d;--sh-lg:0 24px 48px -16px #0009, 0 6px 16px #0006;--skeleton-base:#3d3350;--skeleton-shine:#524668}html{background:var(--bg);color:var(--text)}body{font-family:var(--font-body);font-size:var(--text-base);letter-spacing:-.005em;color:var(--text);background:var(--bg);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizelegibility;overscroll-behavior-y:contain;min-height:100dvh;padding:env(safe-area-inset-top) env(safe-area-inset-right) env(safe-area-inset-bottom) env(safe-area-inset-left);font-weight:400;line-height:1.6;overflow-x:hidden}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}.skip-link{top:-100%;left:var(--sp-4);z-index:99999;padding:var(--sp-3) var(--sp-5);font-size:var(--text-sm);color:var(--accent-ink);background:var(--accent);border-radius:0 0 var(--r-sm) var(--r-sm);transition:top var(--t-fast) var(--ease-out);font-weight:700;text-decoration:none;position:fixed}.skip-link:focus{outline:none;top:0}#app{max-width:var(--max-w);padding:0 var(--sp-6) var(--sp-12);min-height:100dvh;margin:0 auto;overflow-x:hidden}.main{min-height:60vh}.h-display{font-family:var(--font-display);letter-spacing:-.03em;text-transform:none;font-weight:800;line-height:1}:focus{outline:none}:focus-visible{outline:2.5px solid var(--focus-ring);outline-offset:3px;border-radius:var(--r-xs)}.recipe-card:focus-visible,.btn:focus-visible,.nav-tab:focus-visible,.theme-toggle:focus-visible{box-shadow:0 0 0 2px var(--bg), 0 0 0 4.5px var(--focus-ring);outline:none}input:focus-visible,select:focus-visible,textarea:focus-visible{outline:none}.header{align-items:center;gap:var(--sp-4);padding:var(--sp-5) 0;margin-bottom:var(--sp-6);min-height:var(--header-h);contain:layout style;flex-wrap:wrap;display:flex;position:relative}.header:after{content:"";background:linear-gradient(90deg, var(--accent), var(--secondary), transparent);opacity:.4;height:2px;position:absolute;bottom:0;left:0;right:0}.logo{font-family:var(--font-display);font-size:var(--text-xl);color:var(--ink);letter-spacing:-.04em;-webkit-user-select:none;user-select:none;align-items:center;gap:.6rem;font-weight:800;line-height:1;text-decoration:none;display:inline-flex}.logo-mark{background:var(--accent);border-radius:var(--r-sm);width:30px;height:30px;transition:transform var(--t-base) var(--ease-spring), border-radius var(--t-slow) var(--ease-out);justify-content:center;align-items:center;display:inline-flex;position:relative;overflow:hidden}.logo-mark:after{content:"";background:var(--accent-ink);width:10px;height:10px;transition:transform var(--t-base) var(--ease-spring);border-radius:50%}.logo:hover .logo-mark{border-radius:50%;transform:rotate(90deg)scale(1.1)}.logo:hover .logo-mark:after{transform:scale(.6)}.logo-text-em{color:var(--accent);font-weight:800}.nav{background:var(--bg-soft);border:1px solid var(--border);border-radius:var(--r-sm);gap:2px;padding:3px;display:inline-flex;position:relative}.nav-tab{height:38px;padding:0 var(--sp-5);font-family:var(--font-body);font-size:var(--text-sm);color:var(--text-muted);white-space:nowrap;transition:color var(--t-fast) var(--ease-out), background var(--t-fast) var(--ease-out), transform var(--t-fast) var(--ease-out), box-shadow var(--t-fast) var(--ease-out);touch-action:manipulation;border-radius:5px;justify-content:center;align-items:center;gap:.4rem;font-weight:600;display:inline-flex;position:relative}.nav-tab:hover:not([aria-selected=true]){color:var(--ink);background:var(--surface-hover)}.nav-tab[aria-selected=true]{color:var(--accent-ink);background:var(--accent);box-shadow:var(--sh-sm);font-weight:700}.nav-tab:active{transform:scale(.94)}.header-spacer{flex:auto}.timer-display{height:36px;padding:0 var(--sp-4);font-family:var(--font-mono);font-size:var(--text-sm);color:var(--secondary);background:var(--secondary-soft);border:1px solid color-mix(in srgb, var(--secondary) 30%, transparent);border-radius:var(--r-sm);letter-spacing:.04em;font-variant-numeric:tabular-nums;align-items:center;gap:.4rem;font-weight:600;animation:2s ease-in-out infinite timerPulse;display:inline-flex}.timer-display:empty{display:none}@keyframes timerPulse{0%,to{border-color:color-mix(in srgb, var(--secondary) 30%, transparent)}50%{border-color:color-mix(in srgb, var(--secondary) 70%, transparent)}}.theme-toggle{width:42px;height:42px;color:var(--text-muted);background:var(--surface);border:1.5px solid var(--border);border-radius:var(--r-sm);transition:color var(--t-fast) var(--ease-out), background var(--t-fast) var(--ease-out), border-color var(--t-fast) var(--ease-out), transform var(--t-slow) var(--ease-spring);touch-action:manipulation;justify-content:center;align-items:center;font-size:1.15rem;line-height:1;display:inline-flex}.theme-toggle:hover{color:var(--accent);border-color:var(--accent);background:var(--accent-soft)}.theme-toggle:active{transform:scale(.85)rotate(180deg)}.toolbar{gap:var(--sp-3);margin-bottom:var(--sp-6);padding:var(--sp-4);background:var(--surface);border:1px solid var(--border);border-radius:var(--r-lg);box-shadow:var(--sh-xs);contain:layout style;flex-wrap:wrap;align-items:center;display:flex}.search-input,.filter-select,.scale-input,.form-input,.form-textarea{height:44px;padding:0 var(--sp-4);font-family:var(--font-body);font-size:var(--text-sm);color:var(--text);background:var(--bg-soft);border-radius:var(--r-sm);transition:border-color var(--t-fast) var(--ease-out), background var(--t-fast) var(--ease-out), box-shadow var(--t-fast) var(--ease-out);border:1.5px solid #0000;font-weight:500}.search-input{flex:220px;min-width:180px}.search-input::placeholder,.form-input::placeholder,.form-textarea::placeholder{color:var(--text-faint)}.filter-select{appearance:none;padding-right:var(--sp-8);cursor:pointer;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath d='M2 4l4 4 4-4' fill='none' stroke='%237A6B5D' stroke-width='1.5' stroke-linecap='round'/%3E%3C/svg%3E");background-position:calc(100% - 14px);background-repeat:no-repeat;background-size:12px}.search-input:hover,.filter-select:hover{background:var(--surface-hover)}.search-input:focus,.filter-select:focus,.scale-input:focus,.form-input:focus,.form-textarea:focus{background:var(--surface);border-color:var(--accent);box-shadow:0 0 0 3px var(--focus-ring-bg)}.filter-fav{height:44px;padding:0 var(--sp-4);font-size:var(--text-sm);color:var(--text-muted);background:var(--bg-soft);border-radius:var(--r-sm);cursor:pointer;-webkit-user-select:none;user-select:none;transition:color var(--t-fast) var(--ease-out), background var(--t-fast) var(--ease-out);touch-action:manipulation;align-items:center;gap:.4rem;font-weight:600;display:inline-flex}.filter-fav:hover{background:var(--surface-hover);color:var(--ink)}.filter-fav input{accent-color:var(--accent);cursor:pointer}.filter-fav:has(input:checked){color:var(--accent);background:var(--accent-soft)}.btn{min-height:44px;padding:0 var(--sp-5);font-family:var(--font-body);font-size:var(--text-sm);letter-spacing:-.01em;border-radius:var(--r-sm);white-space:nowrap;transition:transform var(--t-fast) var(--ease-out), background var(--t-base) var(--ease-out), color var(--t-fast) var(--ease-out), border-color var(--t-fast) var(--ease-out), box-shadow var(--t-base) var(--ease-out);touch-action:manipulation;-webkit-user-select:none;user-select:none;justify-content:center;align-items:center;gap:.45rem;font-weight:700;display:inline-flex}.btn:active{transform:scale(.95)translateY(1px)}.btn:disabled{opacity:.4;pointer-events:none}.btn-primary{color:var(--accent-ink);background:var(--accent);box-shadow:var(--sh-sm), inset 0 1px 0 #ffffff26}.btn-primary:hover{background:var(--accent-hover);box-shadow:var(--sh-md), inset 0 1px 0 #ffffff26;transform:translateY(-2px)}.btn-secondary{color:var(--ink);border:2px solid var(--ink);background:0 0}.btn-secondary:hover{color:var(--bg);background:var(--ink)}.btn-ghost{color:var(--text-muted);background:var(--surface);border:1px solid var(--border)}.btn-ghost:hover{color:var(--ink);background:var(--surface-hover);border-color:var(--border-strong)}.btn-danger{color:var(--danger);background:var(--surface);border:1px solid var(--border)}.btn-danger:hover{color:#fff;background:var(--danger);border-color:var(--danger)}.btn-danger-solid{color:#fff;background:var(--danger);box-shadow:var(--sh-sm)}.btn-danger-solid:hover{box-shadow:var(--sh-md);background:#7d1214;transform:translateY(-2px)}.btn-icon{width:44px;min-height:44px;padding:0}.recipe-grid{gap:var(--sp-4);contain:layout style;perspective:1200px;grid-template-columns:repeat(auto-fill,minmax(min(280px,100%),1fr));display:grid}.virtual-scroll-container{min-height:320px;position:relative}.recipe-card{--stripe-color:var(--accent);gap:var(--sp-3);height:156px;min-height:156px;padding:var(--sp-5);background:var(--surface);border:1px solid var(--border);border-radius:var(--r-lg);box-shadow:var(--sh-xs);cursor:pointer;transform-style:preserve-3d;transition:transform var(--t-slow) var(--ease-out), box-shadow var(--t-slow) var(--ease-out), border-color var(--t-base) var(--ease-out);contain:layout style paint;flex-direction:column;display:flex;position:relative;overflow:hidden}.recipe-card:before{content:"";background:var(--stripe-color);transform-origin:top;width:4px;height:100%;transition:transform var(--t-slow) var(--ease-out);border-radius:0 2px 2px 0;position:absolute;top:0;left:0;transform:scaleY(.4)}.recipe-card[data-category=breakfast]{--stripe-color:var(--cat-breakfast)}.recipe-card[data-category=lunch]{--stripe-color:var(--cat-lunch)}.recipe-card[data-category=dinner]{--stripe-color:var(--cat-dinner)}.recipe-card[data-category=dessert]{--stripe-color:var(--cat-dessert)}.recipe-card[data-category=snack]{--stripe-color:var(--cat-snack)}.recipe-card:hover{box-shadow:var(--sh-lg);border-color:var(--border-strong);transform:translateY(-5px)rotateX(1.5deg)}.recipe-card:hover:before{transform:scaleY(1)}.recipe-card:active{transform:translateY(-1px)scale(.985)}.card-header{justify-content:space-between;align-items:flex-start;gap:var(--sp-3);display:flex}.card-fav{width:44px;height:44px;margin:calc(-1 * var(--sp-2));color:var(--text-faint);transition:color var(--t-base) var(--ease-out), transform var(--t-base) var(--ease-spring);justify-content:center;align-items:center;font-size:1.1rem;line-height:1;display:inline-flex}.card-fav[data-fav=true]{color:var(--accent);transform:scale(1.15)}.shopping-select{border-radius:var(--r-xs);cursor:pointer;width:44px;height:44px;transition:background var(--t-fast) var(--ease-out);touch-action:manipulation;justify-content:center;align-items:center;display:inline-flex}.shopping-select:hover{background:var(--surface-hover)}.shopping-select input{width:18px;height:18px;accent-color:var(--accent);cursor:pointer}.card-title{font-family:var(--font-display);font-size:var(--text-lg);letter-spacing:-.025em;color:var(--ink);-webkit-line-clamp:2;-webkit-box-orient:vertical;margin:0;font-weight:700;line-height:1.15;display:-webkit-box;overflow:hidden}.card-meta{align-items:center;gap:var(--sp-2);font-size:var(--text-xs);color:var(--text-muted);flex-wrap:wrap;margin-top:auto;font-weight:500;display:flex}.card-category{height:22px;padding:0 var(--sp-2);letter-spacing:.08em;text-transform:uppercase;color:var(--stripe-color);background:color-mix(in srgb, var(--stripe-color) 10%, transparent);border-radius:var(--r-xs);align-items:center;font-size:.65rem;font-weight:700;display:inline-flex}[data-theme=dark] .card-category{background:color-mix(in srgb, var(--stripe-color) 14%, transparent)}.card-time,.card-servings{align-items:center;gap:.2rem;display:inline-flex}.card-lazy{opacity:0;transform:translateY(18px)scale(.96)}.card-revealed{opacity:1;transition:opacity var(--t-slow) var(--ease-out), transform var(--t-slow) var(--ease-spring);transform:translateY(0)scale(1)}.recipe-card-detail{padding:var(--sp-8);background:var(--surface);border:1px solid var(--border);border-radius:var(--r-xl);box-shadow:var(--sh-sm);contain:layout style;position:relative;overflow:hidden}.recipe-card-detail:before{content:"";background:linear-gradient(180deg, var(--accent), var(--secondary));border-radius:0 3px 3px 0;width:5px;height:100%;position:absolute;top:0;left:0}.detail-actions{gap:var(--sp-2);margin-bottom:var(--sp-6);flex-wrap:wrap;display:flex}.detail-title{font-family:var(--font-display);font-size:var(--text-3xl);letter-spacing:-.04em;color:var(--ink);margin-bottom:var(--sp-4);text-wrap:balance;font-weight:800;line-height:1}.detail-meta{gap:var(--sp-3);margin-bottom:var(--sp-6);font-size:var(--text-sm);color:var(--text-muted);flex-wrap:wrap;align-items:center;display:flex}.detail-meta-item{align-items:center;gap:.35rem;font-weight:500;display:inline-flex}.badge{height:26px;padding:0 var(--sp-3);font-size:var(--text-xs);letter-spacing:.06em;text-transform:uppercase;color:var(--accent-ink);background:var(--accent);border-radius:var(--r-xs);align-items:center;font-weight:700;display:inline-flex}.timer-section{margin-bottom:var(--sp-6)}.scale-section{gap:var(--sp-3);margin-bottom:var(--sp-8);padding:var(--sp-4) var(--sp-5);background:var(--bg-soft);border:1px solid var(--border);border-radius:var(--r-sm);font-size:var(--text-sm);color:var(--text-muted);flex-wrap:wrap;align-items:center;font-weight:500;display:flex}.scale-input{text-align:center;font-variant-numeric:tabular-nums;width:5rem;font-weight:600}.detail-section{margin-bottom:var(--sp-8)}.detail-section:last-child{margin-bottom:0}.detail-section h3{font-family:var(--font-display);font-size:var(--text-xl);letter-spacing:-.025em;color:var(--ink);margin-bottom:var(--sp-4);padding-bottom:var(--sp-2);border-bottom:2px solid var(--border);font-weight:700}.ingredient-list{gap:var(--sp-1);display:grid}.ingredient-list li{padding:var(--sp-2) var(--sp-3) var(--sp-2) var(--sp-6);font-size:var(--text-base);color:var(--text);border-radius:var(--r-xs);transition:background var(--t-fast) var(--ease-out), transform var(--t-fast) var(--ease-out);position:relative}.ingredient-list li:before{content:"";left:var(--sp-2);background:var(--accent);width:7px;height:7px;transition:transform var(--t-base) var(--ease-spring);border-radius:50%;position:absolute;top:50%;transform:translateY(-50%)}.ingredient-list li:hover{background:var(--bg-soft);transform:translate(3px)}.ingredient-list li:hover:before{transform:translateY(-50%)scale(1.3)}.steps-list{counter-reset:step;gap:var(--sp-4);display:grid}.steps-list li{counter-increment:step;padding:var(--sp-4) var(--sp-5) var(--sp-4) calc(var(--sp-12) + var(--sp-2));background:var(--bg-soft);border:1px solid var(--border);border-radius:var(--r-md);font-size:var(--text-base);color:var(--text);transition:transform var(--t-base) var(--ease-out), box-shadow var(--t-base) var(--ease-out);line-height:1.55;position:relative}.steps-list li:hover{box-shadow:var(--sh-sm);transform:translate(4px)}.steps-list li:before{content:counter(step);top:var(--sp-4);left:var(--sp-4);width:28px;height:28px;font-family:var(--font-display);font-size:var(--text-sm);color:var(--accent-ink);background:var(--accent);border-radius:50%;justify-content:center;align-items:center;font-weight:800;display:inline-flex;position:absolute}.form-title{font-family:var(--font-display);font-size:var(--text-2xl);letter-spacing:-.035em;color:var(--ink);margin-bottom:var(--sp-6);font-weight:800}.form-group{margin-bottom:var(--sp-5)}.form-group label{margin-bottom:var(--sp-2);font-size:var(--text-xs);letter-spacing:.06em;text-transform:uppercase;color:var(--text-muted);font-weight:700;display:block}.form-row{gap:var(--sp-4);grid-template-columns:repeat(auto-fit,minmax(150px,1fr));display:grid}.form-input,.form-textarea{width:100%;font-weight:500}.form-textarea{height:auto;min-height:180px;padding:var(--sp-3) var(--sp-4);resize:vertical;line-height:1.5;font-family:var(--font-mono);font-size:var(--text-sm)}.form-actions{gap:var(--sp-3);margin-top:var(--sp-8);flex-wrap:wrap;display:flex}.shopping-view{padding:var(--sp-8);background:var(--surface);border:1px solid var(--border);border-radius:var(--r-xl);box-shadow:var(--sh-sm);contain:layout style}.shopping-header{justify-content:space-between;align-items:center;gap:var(--sp-4);margin-bottom:var(--sp-6);flex-wrap:wrap;display:flex}.shopping-header h2{font-family:var(--font-display);font-size:var(--text-2xl);letter-spacing:-.035em;color:var(--ink);font-weight:800}.shopping-list{gap:var(--sp-1);display:grid}.shopping-item{align-items:center;gap:var(--sp-3);padding:var(--sp-3) var(--sp-4);border-radius:var(--r-sm);cursor:pointer;transition:background var(--t-fast) var(--ease-out), transform var(--t-fast) var(--ease-out);min-height:var(--touch-min);touch-action:manipulation;height:52px;display:flex}.shopping-item:hover{background:var(--bg-soft);transform:translate(3px)}.shopping-item input[type=checkbox]{width:20px;height:20px;accent-color:var(--secondary);cursor:pointer;flex-shrink:0}.shopping-item-text{font-size:var(--text-base);color:var(--text);cursor:pointer;transition:color var(--t-base) var(--ease-out), text-decoration-color var(--t-base) var(--ease-out);flex:1;font-weight:500}.shopping-item.checked .shopping-item-text{color:var(--text-faint);text-decoration:line-through;text-decoration-thickness:1.5px;-webkit-text-decoration-color:var(--text-faint);text-decoration-color:var(--text-faint)}.empty-state{justify-content:center;align-items:center;gap:var(--sp-4);padding:var(--sp-16) var(--sp-6);text-align:center;background:var(--surface);border:2px dashed var(--border-strong);border-radius:var(--r-xl);flex-direction:column;display:flex}.empty-illustration{aspect-ratio:1;background:var(--accent-soft);width:80px;height:80px;margin-bottom:var(--sp-2);border-radius:50%;justify-content:center;align-items:center;font-size:2.5rem;animation:4s ease-in-out infinite emptyFloat;display:inline-flex}@keyframes emptyFloat{0%,to{transform:translateY(0)rotate(0)}33%{transform:translateY(-6px)rotate(-3deg)}66%{transform:translateY(-3px)rotate(2deg)}}.empty-title{font-family:var(--font-display);font-size:var(--text-xl);letter-spacing:-.025em;color:var(--ink);font-weight:700}.empty-description{max-width:36ch;font-size:var(--text-sm);color:var(--text-muted);line-height:1.5}.empty-actions{gap:var(--sp-3);margin-top:var(--sp-2);flex-wrap:wrap;justify-content:center;display:flex}@keyframes skeletonPulse{0%{background-position:200% 0}to{background-position:-200% 0}}.skeleton{pointer-events:none;cursor:default;-webkit-user-select:none;user-select:none}.skeleton-line,.skeleton-pill,.skeleton-block{background:linear-gradient(90deg, var(--skeleton-base) 0%, var(--skeleton-shine) 40%, var(--skeleton-base) 80%);border-radius:var(--r-xs);background-size:200% 100%;animation:1.4s ease-in-out infinite skeletonPulse}.recipe-card.skeleton{border:1px solid var(--border);background:var(--surface);height:156px;min-height:156px}.recipe-card.skeleton:before{background:var(--skeleton-base);transform:scaleY(1)}.skeleton-title{width:72%;height:20px;margin-bottom:var(--sp-2);border-radius:var(--r-xs)}.skeleton-subtitle{border-radius:var(--r-xs);width:48%;height:14px}.skeleton-meta{gap:var(--sp-2);margin-top:auto;display:flex}.skeleton-pill{border-radius:var(--r-xs);width:64px;height:20px}.skeleton-pill-sm{width:44px}.skeleton-toolbar-search,.skeleton-toolbar-pill{border-radius:var(--r-sm);background:linear-gradient(90deg, var(--skeleton-base) 0%, var(--skeleton-shine) 40%, var(--skeleton-base) 80%);background-size:200% 100%;height:44px;animation:1.4s ease-in-out infinite skeletonPulse}.skeleton-toolbar-search{flex:220px}.skeleton-toolbar-pill{width:160px}.skeleton-toolbar-pill-sm{width:130px}.toast-container{bottom:calc(var(--sp-4) + env(safe-area-inset-bottom));z-index:9999;gap:var(--sp-2);pointer-events:none;max-width:calc(100vw - var(--sp-8));contain:layout style;flex-direction:column;width:380px;display:flex;position:fixed;left:50%;transform:translate(-50%)}.toast{align-items:center;gap:var(--sp-3);padding:var(--sp-3) var(--sp-4);background:var(--ink);color:var(--bg);border-radius:var(--r-sm);box-shadow:var(--sh-lg);pointer-events:auto;opacity:0;transition:opacity var(--t-base) var(--ease-out), transform var(--t-base) var(--ease-spring);display:flex;position:relative;overflow:hidden;transform:translateY(16px)scale(.94)}.toast.toast-show{opacity:1;transform:translateY(0)scale(1)}.toast.toast-hide{opacity:0;transform:translateY(8px)scale(.94)}.toast:before{content:"";background:var(--accent);border-radius:2px 0 0 2px;width:4px;position:absolute;top:0;bottom:0;left:0}.toast.toast-success:before{background:var(--success)}.toast.toast-error:before{background:var(--danger)}.toast.toast-info:before{background:var(--info)}.toast-icon{width:22px;height:22px;color:var(--ink);background:var(--accent);border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;font-size:.75rem;font-weight:700;display:inline-flex}.toast.toast-success .toast-icon{background:var(--success);color:#fff}.toast.toast-error .toast-icon{background:var(--danger);color:#fff}.toast.toast-info .toast-icon{background:var(--info);color:#fff}.toast-message{font-size:var(--text-sm);color:inherit;flex:1;font-weight:600;line-height:1.4}.modal-backdrop{z-index:9000;padding:var(--sp-6);background:var(--overlay);-webkit-backdrop-filter:blur(10px);opacity:0;transition:opacity var(--t-base) var(--ease-out);justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.modal-backdrop.modal-show{opacity:1}.modal-backdrop.modal-hide{opacity:0}.modal-dialog{width:min(420px,100%);padding:var(--sp-7);background:var(--surface);border:1px solid var(--border);border-radius:var(--r-lg);box-shadow:var(--sh-lg);transition:transform var(--t-slow) var(--ease-spring);contain:layout style paint;transform:scale(.9)translateY(16px)}.modal-backdrop.modal-show .modal-dialog{transform:scale(1)translateY(0)}.modal-backdrop.modal-hide .modal-dialog{transform:scale(.9)translateY(16px)}.modal-title{font-family:var(--font-display);font-size:var(--text-xl);letter-spacing:-.025em;color:var(--ink);margin-bottom:var(--sp-3);font-weight:700}.modal-message{font-size:var(--text-base);color:var(--text-muted);margin-bottom:var(--sp-6);line-height:1.55}.modal-actions{gap:var(--sp-3);justify-content:flex-end;display:flex}@keyframes viewSlideUp{0%{opacity:0;filter:blur(2px);transform:translateY(24px)}to{opacity:1;filter:blur();transform:translateY(0)}}@keyframes viewSlideIn{0%{opacity:0;filter:blur(1px);transform:translate(16px)}to{opacity:1;filter:blur();transform:translate(0)}}.view-enter{animation:viewSlideUp var(--t-slow) var(--ease-out) both}.view-enter-side{animation:viewSlideIn var(--t-slow) var(--ease-out) both}@keyframes cardStagger{0%{opacity:0;transform:translateY(14px)scale(.96)}to{opacity:1;transform:translateY(0)scale(1)}}.sr-only{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.bottom-nav{display:none}.pull-indicator{height:0;transition:height var(--t-base) var(--ease-out);color:var(--text-muted);font-size:var(--text-sm);justify-content:center;align-items:center;font-weight:600;display:flex;overflow:hidden}.pull-indicator.pulling,.pull-indicator.refreshing{height:48px}.pull-indicator-spinner{border:2px solid var(--border);border-top-color:var(--accent);width:20px;height:20px;margin-right:var(--sp-2);border-radius:50%}.pull-indicator.refreshing .pull-indicator-spinner{animation:.6s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}.swipe-edge{z-index:100;touch-action:pan-y;width:20px;height:100%;position:fixed;top:0;left:0}@media (width<=760px){#app{padding:0 var(--sp-4) calc(var(--sp-10) + 72px + env(safe-area-inset-bottom))}.header{gap:var(--sp-3);padding:var(--sp-4) 0 var(--sp-4);flex-wrap:wrap}.header .nav{display:none}.logo{font-size:var(--text-lg)}.header-spacer{display:none}.bottom-nav{z-index:8000;height:calc(64px + env(safe-area-inset-bottom));padding-bottom:env(safe-area-inset-bottom);background:var(--surface);border-top:1px solid var(--border);contain:layout style;justify-content:space-around;align-items:stretch;display:flex;position:fixed;bottom:0;left:0;right:0;box-shadow:0 -2px 12px #00000014}.bottom-nav-tab{min-height:64px;padding:var(--sp-2) var(--sp-1);font-family:var(--font-body);color:var(--text-muted);transition:color var(--t-fast) var(--ease-out);touch-action:manipulation;-webkit-tap-highlight-color:transparent;flex-direction:column;flex:1;justify-content:center;align-items:center;gap:2px;font-size:.65rem;font-weight:600;text-decoration:none;display:flex}.bottom-nav-tab[aria-selected=true]{color:var(--accent)}.bottom-nav-icon{font-size:1.3rem;line-height:1}.toolbar{padding:var(--sp-3);gap:var(--sp-2)}.search-input{flex:100%;width:100%;min-width:0}.filter-select,.filter-fav{flex:1 1 calc(50% - var(--sp-1));min-width:0}.toolbar .btn{flex:1 1 calc(50% - var(--sp-1));min-width:0;font-size:var(--text-xs);padding:0 var(--sp-3)}.recipe-grid{gap:var(--sp-3);perspective:none;grid-template-columns:1fr}.recipe-card{height:auto;min-height:132px}.recipe-card:hover{transform:translateY(-2px)}.recipe-card-detail,.shopping-view{padding:var(--sp-4);border-radius:var(--r-lg)}.detail-actions{margin:0 calc(-1 * var(--sp-4)) var(--sp-5);padding:0 var(--sp-4);scrollbar-width:none;-webkit-overflow-scrolling:touch;flex-wrap:nowrap;overflow-x:auto}.detail-actions::-webkit-scrollbar{display:none}.detail-actions .btn{flex-shrink:0}.form-actions{bottom:calc(64px + env(safe-area-inset-bottom));padding:var(--sp-3) 0;background:linear-gradient(to top, var(--surface) 60%, transparent);z-index:10;position:sticky}.form-actions .btn{flex:1}.form-hint{margin-top:var(--sp-1);font-size:var(--text-xs);color:var(--text-faint);line-height:1.4;display:block}@keyframes checkPop{0%{transform:scale(1)}40%{transform:scale(1.25)}to{transform:scale(1)}}.shopping-item input[type=checkbox]:checked{animation:checkPop var(--t-base) var(--ease-spring)}.shopping-item.checked{opacity:.65;transition:opacity var(--t-slow) var(--ease-out), background var(--t-fast) var(--ease-out), transform var(--t-fast) var(--ease-out)}.btn:after{content:"";border-radius:inherit;opacity:0;transition:opacity var(--t-fast) var(--ease-out);pointer-events:none;background:currentColor;position:absolute;inset:0}.btn{position:relative;overflow:hidden}.btn:active:after{opacity:.08}.toast-container{width:calc(100vw - var(--sp-6));bottom:calc(72px + env(safe-area-inset-bottom) + var(--sp-2))}.btn,.nav-tab,.bottom-nav-tab,.theme-toggle,.filter-fav,.shopping-item{min-height:var(--touch-min)}.modal-actions .btn{flex:1}.scale-section{align-items:flex-start;gap:var(--sp-2);flex-direction:column}.shopping-header{align-items:stretch;gap:var(--sp-3);flex-direction:column}}@media (width<=360px){#app{padding:0 var(--sp-3) calc(var(--sp-8) + 72px + env(safe-area-inset-bottom))}.header{gap:var(--sp-2);padding:var(--sp-3) 0}.logo{font-size:var(--text-md)}.toolbar{padding:var(--sp-2);gap:var(--sp-2)}.toolbar .btn{font-size:var(--text-xs);flex:100%}.filter-select,.filter-fav{flex:100%}.recipe-card{padding:var(--sp-3);min-height:110px}.card-title{font-size:var(--text-md)}.recipe-card-detail,.shopping-view{padding:var(--sp-3);border-radius:var(--r-md)}.detail-title{font-size:var(--text-xl)}.detail-actions{margin:0 calc(-1 * var(--sp-3)) var(--sp-4);padding:0 var(--sp-3);gap:var(--sp-2)}.detail-actions .btn{padding:0 var(--sp-3);font-size:var(--text-xs)}.steps-list li{padding:var(--sp-3) var(--sp-3) var(--sp-3) calc(var(--sp-8) + var(--sp-2));font-size:var(--text-sm)}.steps-list li:before{width:24px;height:24px;font-size:var(--text-xs);left:var(--sp-3)}.ingredient-list li{padding:var(--sp-2) var(--sp-2) var(--sp-2) var(--sp-5);font-size:var(--text-sm)}.form-row{grid-template-columns:1fr}.form-title{font-size:var(--text-xl)}.empty-state{padding:var(--sp-8) var(--sp-4)}.empty-illustration{width:60px;height:60px;font-size:1.8rem}.modal-dialog{padding:var(--sp-5)}.bottom-nav-tab{font-size:.6rem}}@media (width<=420px){.detail-title{font-size:var(--text-2xl)}.steps-list li{padding:var(--sp-4) var(--sp-4) var(--sp-4) calc(var(--sp-10) + var(--sp-2))}}@media (height<=500px) and (orientation:landscape){#app{padding:0 var(--sp-4) var(--sp-6)}.header{padding:var(--sp-2) 0;min-height:auto;margin-bottom:var(--sp-3)}.bottom-nav{height:calc(48px + env(safe-area-inset-bottom))}.bottom-nav-tab{min-height:48px;font-size:0}.bottom-nav-icon{font-size:1.2rem}.recipe-grid{grid-template-columns:repeat(auto-fill,minmax(220px,1fr))}.recipe-card{height:auto;min-height:100px}.recipe-card-detail,.shopping-view{padding:var(--sp-4)}.detail-title{font-size:var(--text-xl)}.empty-state{padding:var(--sp-6) var(--sp-4)}.modal-backdrop{padding:var(--sp-3)}}@media (resolution>=200dpi){.logo-mark,.badge,.card-category{-webkit-font-smoothing:subpixel-antialiased}}@supports (font-size:clamp(1rem, 1rem, 1rem)){.card-title,.detail-title,.form-title,.empty-title{overflow-wrap:break-word;word-break:break-word;-webkit-hyphens:auto;hyphens:auto}}@media print{:root{--bg:#fff;--surface:#fff;--ink:#111;--text:#111;--text-muted:#444;--border:#ccc;--accent:#111}html,body{color:#111!important;background:#fff!important}*{transition:none!important;animation:none!important}.header,.toolbar,.detail-actions,.timer-section,.scale-section,.nav,.timer-display,.theme-toggle,.btn,.shopping-select,.filter-fav,.toast-container,.modal-backdrop,.skip-link{display:none!important}#app{max-width:none;padding:0}.recipe-card-detail,.shopping-view{box-shadow:none;contain:none;background:#fff;border:none;padding:0}.recipe-card-detail:before{display:none}.detail-title{color:#000;margin-bottom:.5rem;font-size:24pt}.detail-meta{color:#333;margin-bottom:1rem}.badge{color:#333;background:0 0;border:1px solid #999}.detail-section{page-break-inside:avoid;break-inside:avoid}.detail-section h3{color:#000;page-break-after:avoid;break-after:avoid;border-bottom:1px solid #ccc;padding-bottom:.2rem;font-size:14pt}.ingredient-list li,.steps-list li{page-break-inside:avoid;break-inside:avoid;orphans:3;widows:3;padding-left:1.5rem;background:0 0!important}.steps-list li:before{color:#000;box-shadow:none;background:0 0;width:auto;height:auto;margin-right:.5rem;font-size:11pt;position:static}.steps-list li{padding-left:0}.steps-list li:before{content:counter(step) "."}.shopping-list{columns:2;column-gap:2rem}.shopping-item{break-inside:avoid;height:auto;padding:.2rem 0}.shopping-item.checked .shopping-item-text{color:#888;text-decoration:line-through}@page{margin:1.5cm 2cm;orphans:3;widows:3}}
