:root{--font-sans:-apple-system,BlinkMacSystemFont,"Segoe UI",Inter,Roboto,sans-serif;--font-hand:"Segoe Print","Bradley Hand",cursive;--radius-sm:6px;--radius-md:12px;--radius-lg:20px;--shadow-card:0 1px 2px rgba(0,0,0,0.06),0 4px 16px rgba(0,0,0,0.06);--tabbar-height:60px;--sidebar-width:240px}[data-theme=amalfi]{--bg:#fbf5ec;--surface:#ffffff;--surface-sunk:#f3ead9;--text:#2c2622;--text-muted:#7a6f63;--border:#e6d9c4;--accent:#c1592f;--accent-strong:#a3441f;--accent-contrast:#fffaf3;--focus-ring:#2f6f6b;--danger:#b3261e;--art-line:#2c2622;--art-fill:#e7b78f;color-scheme:light}[data-theme=lacquer]{--bg:#17110f;--surface:#241a16;--surface-sunk:#1d1512;--text:#f4e9df;--text-muted:#b9a99b;--border:#3a2b24;--accent:#c8283a;--accent-strong:#a11f2e;--accent-contrast:#fdf1ea;--focus-ring:#d9a441;--danger:#ff6b5e;--art-line:#f4e9df;--art-fill:#c8283a;color-scheme:dark}*{box-sizing:border-box}body,html{padding:0;margin:0}body{background:var(--bg);color:var(--text);font-family:var(--font-sans);-webkit-font-smoothing:antialiased}a{color:inherit}button,input,select,textarea{font:inherit;color:inherit}img{max-width:100%;display:block}:focus-visible{outline:2px solid var(--focus-ring);outline-offset:2px}.visually-hidden{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.button{display:inline-flex;align-items:center;justify-content:center;gap:.5rem;padding:.65rem 1.1rem;border-radius:var(--radius-md);border:1px solid transparent;font-weight:600;font-size:.95rem;cursor:pointer;background:var(--accent);color:var(--accent-contrast);transition:background-color .15s ease}.button:hover{background:var(--accent-strong)}.button:disabled{opacity:.5;cursor:not-allowed}.button--secondary{background:transparent;color:var(--text);border-color:var(--border)}.button--secondary:hover{background:var(--surface-sunk)}.button--danger{background:var(--danger)}.field{display:flex;flex-direction:column;gap:.35rem;margin-bottom:1rem}.field label{font-size:.85rem;font-weight:600;color:var(--text-muted)}.field input,.field select,.field textarea{padding:.6rem .75rem;border-radius:var(--radius-sm);border:1px solid var(--border);background:var(--surface);color:var(--text)}.field textarea{resize:vertical;min-height:4.5rem}.field-error{color:var(--danger);font-size:.8rem}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);box-shadow:var(--shadow-card)}.site-header{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:.5rem .75rem;padding:1.25rem 1.5rem;border-bottom:1px solid var(--border)}.site-header__brand{font-weight:700;font-size:1.15rem;text-decoration:none;white-space:nowrap}.site-header__nav{display:flex;align-items:center;gap:.75rem}.site-header__nav .button{white-space:nowrap;padding:.55rem .85rem;font-size:.85rem}@media (max-width:420px){.site-header__login-link{display:none}}.app-shell{display:flex;flex-direction:column;min-height:100dvh}.app-shell__main{flex:1 1;padding:1.25rem 1rem calc(var(--tabbar-height) + 1.25rem);max-width:1100px;width:100%;margin:0 auto}.tabbar{position:fixed;bottom:0;left:0;right:0;height:var(--tabbar-height);display:flex;background:var(--surface);border-top:1px solid var(--border);z-index:20}.tabbar a{flex:1 1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.15rem;font-size:.7rem;color:var(--text-muted);text-decoration:none}.tabbar a svg{width:22px;height:22px}.tabbar a[aria-current=page]{color:var(--accent)}.sidebar{display:none}@media (min-width:840px){.app-shell{flex-direction:row}.app-shell__main{padding:2rem 2.5rem;max-width:none;margin:0}.tabbar{display:none}.sidebar{display:flex;flex-direction:column;width:var(--sidebar-width);flex-shrink:0;min-height:100dvh;padding:1.5rem 1rem;background:var(--surface);border-right:1px solid var(--border);gap:.25rem}.sidebar__brand{font-weight:700;font-size:1.1rem;padding:0 .75rem 1.5rem}.sidebar a{display:flex;align-items:center;gap:.75rem;padding:.6rem .75rem;border-radius:var(--radius-md);color:var(--text-muted);text-decoration:none;font-weight:500}.sidebar a svg{width:20px;height:20px}.sidebar a:hover,.sidebar a[aria-current=page]{background:var(--surface-sunk)}.sidebar a[aria-current=page]{color:var(--accent)}}.recipe-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));grid-gap:1rem;gap:1rem}@media (min-width:840px){.recipe-grid{grid-template-columns:repeat(auto-fill,minmax(200px,1fr))}}.recipe-card{display:flex;flex-direction:column;overflow:hidden;text-decoration:none;color:var(--text)}.recipe-card__art{aspect-ratio:4/3;background:var(--surface-sunk);display:flex;align-items:center;justify-content:center}.recipe-card__art svg{width:40%;height:40%;opacity:.6}.recipe-card__art img{width:100%;height:100%;object-fit:cover}.recipe-card__body{padding:.75rem}.recipe-card__title{font-weight:600;margin:0 0 .2rem}.recipe-card__meta{font-size:.8rem;color:var(--text-muted);margin:0}.recipe-page{display:block}.recipe-page__ingredients{margin-bottom:2rem}@media (min-width:900px){.recipe-page{display:grid;grid-template-columns:minmax(220px,320px) 1fr;grid-gap:3rem;gap:3rem;align-items:start}.recipe-page__ingredients{position:-webkit-sticky;position:sticky;top:1.5rem;margin-bottom:0}}.empty-state{display:flex;flex-direction:column;align-items:center;text-align:center;gap:.75rem;padding:3rem 1.5rem;color:var(--text-muted)}.empty-state svg{width:56px;height:56px;opacity:.7}.page-header{display:flex;align-items:center;justify-content:space-between;gap:1rem;margin-bottom:1.5rem;flex-wrap:wrap}.page-header h1{margin:0}.tag-list{display:flex;flex-wrap:wrap;gap:.4rem}.tag-pill{font-size:.75rem;padding:.25rem .6rem;border-radius:999px;background:var(--surface-sunk);color:var(--text-muted)}.banner{border-radius:var(--radius-md);padding:.75rem 1rem;font-size:.9rem;margin-bottom:1rem}.banner--error{background:color-mix(in srgb,var(--danger) 12%,var(--surface));color:var(--danger);border:1px solid color-mix(in srgb,var(--danger) 35%,var(--border))}.banner--info{background:var(--surface-sunk);color:var(--text-muted);border:1px solid var(--border)}