@import "https://fonts.googleapis.com/css2?family=Manrope:wght@400;500;600;700;800&family=Lora:ital,wght@0,500;0,600;1,500&display=swap";:root{--kk-navy-950:#051a28;--kk-navy-900:#08283f;--kk-navy-800:#143a56;--kk-navy-700:#1f4e6e;--kk-navy-600:#356c8e;--kk-navy-500:#5a8aaa;--kk-navy-400:#8aaec6;--kk-navy-300:#b6cfdf;--kk-navy-200:#dae6ef;--kk-navy-100:#ecf2f7;--kk-navy-50:#f5f8fb;--kk-teal-900:#054747;--kk-teal-800:#07696a;--kk-teal-700:#0e9090;--kk-teal-600:#16a8a6;--kk-teal-500:#36bfbc;--kk-teal-400:#6fd3d0;--kk-teal-300:#a4e3e1;--kk-teal-200:#cdefee;--kk-teal-100:#e5f7f6;--kk-teal-50:#f2fbfa;--kk-leaf-700:#3f805f;--kk-leaf-600:#50a080;--kk-leaf-500:#6bb596;--kk-leaf-400:#93ccb4;--kk-leaf-200:#d8ecdf;--kk-leaf-100:#ecf6f0;--kk-cream-50:#fbf8f3;--kk-cream-100:#f5efe5;--kk-cream-200:#eae2d3;--kk-ink-900:#0e1a24;--kk-ink-700:#2c3e4d;--kk-ink-500:#5c6e7c;--kk-ink-400:#8094a2;--kk-ink-300:#b5c2cb;--kk-line-200:#e2e7ec;--kk-line-100:#eef1f4;--kk-surface:#fff;--kk-success:#2e9c6e;--kk-warning:#d08a1b;--kk-danger:#c5453b;--kk-info:var(--kk-teal-700);--bg-app:var(--kk-cream-50);--bg-surface:var(--kk-surface);--bg-surface-alt:var(--kk-navy-50);--bg-inverse:var(--kk-navy-900);--fg-primary:var(--kk-ink-900);--fg-secondary:var(--kk-ink-500);--fg-tertiary:var(--kk-ink-400);--fg-on-inverse:#fff;--fg-brand:var(--kk-navy-900);--fg-accent:var(--kk-teal-700);--border-subtle:var(--kk-line-100);--border-default:var(--kk-line-200);--border-strong:var(--kk-navy-300);--action-primary:var(--kk-navy-900);--action-primary-hover:var(--kk-navy-800);--action-accent:var(--kk-teal-700);--action-accent-hover:var(--kk-teal-800);--font-display:"Manrope", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;--font-body:"Manrope", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;--font-serif:"Lora", Georgia, "Times New Roman", serif;--font-mono:ui-monospace, "SF Mono", Menlo, Consolas, monospace;--fs-xs:12px;--lh-xs:16px;--fs-sm:14px;--lh-sm:20px;--fs-base:16px;--lh-base:24px;--fs-md:18px;--lh-md:26px;--fs-lg:20px;--lh-lg:28px;--fs-xl:24px;--lh-xl:32px;--fs-2xl:30px;--lh-2xl:38px;--fs-3xl:36px;--lh-3xl:44px;--fs-4xl:48px;--lh-4xl:56px;--sp-1:4px;--sp-2:8px;--sp-3:12px;--sp-4:16px;--sp-5:20px;--sp-6:24px;--sp-8:32px;--sp-10:40px;--sp-12:48px;--sp-16:64px;--sp-20:80px;--r-xs:6px;--r-sm:10px;--r-md:14px;--r-lg:20px;--r-xl:28px;--r-pill:999px;--shadow-xs:0 1px 2px #08283f0f;--shadow-sm:0 2px 6px #08283f0f, 0 1px 2px #08283f0a;--shadow-md:0 6px 16px #08283f14, 0 2px 4px #08283f0a;--shadow-lg:0 16px 32px #08283f1a, 0 4px 8px #08283f0a;--shadow-pop:0 8px 24px #0e90902e;--ease-standard:cubic-bezier(.2, 0, 0, 1);--ease-emphasis:cubic-bezier(.3, 0, 0, 1);--dur-fast:.14s;--dur-base:.22s;--dur-slow:.36s;--container-max:1200px;--hit-min:44px}[data-theme=dark]{--bg-app:#0a1a26;--bg-surface:#102a3b;--bg-surface-alt:#143a52;--bg-inverse:#fff;--fg-primary:#f1f5f8;--fg-secondary:#a8bac7;--fg-tertiary:#758a99;--fg-on-inverse:var(--kk-navy-900);--fg-brand:#fff;--fg-accent:var(--kk-teal-500);--border-subtle:#ffffff0f;--border-default:#ffffff1a;--border-strong:#fff3;--action-primary:var(--kk-teal-600);--action-primary-hover:var(--kk-teal-500)}*,:before,:after{box-sizing:border-box}html,body,#root{height:100%}body{font-family:var(--font-body);font-size:var(--fs-base);line-height:var(--lh-base);color:var(--fg-primary);background:var(--bg-app);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizelegibility;margin:0}img,svg{max-width:100%;display:block}a{color:var(--fg-accent);text-decoration:none}a:hover{text-decoration:underline}a:focus-visible{outline:2px solid var(--kk-teal-700);outline-offset:2px;border-radius:var(--r-xs)}button{font-family:inherit;font-size:inherit;cursor:pointer}button:focus-visible{outline:2px solid var(--kk-teal-700);outline-offset:2px}h1,h2,h3,h4,h5,h6{font-family:var(--font-display);text-wrap:pretty;margin:0;font-weight:700}input,textarea,select{font-family:inherit;font-size:inherit}.btn{justify-content:center;align-items:center;gap:var(--sp-2);min-height:var(--hit-min);padding:0 var(--sp-5);border-radius:var(--r-md);transition:background var(--dur-base) var(--ease-standard), border-color var(--dur-base) var(--ease-standard), color var(--dur-base) var(--ease-standard);cursor:pointer;border:1px solid #0000;font-weight:600;text-decoration:none;display:inline-flex}.btn:active{transition-duration:var(--dur-fast);transform:scale(.97)}.btn-block{width:100%}.btn-primary{background:var(--action-primary);color:var(--fg-on-inverse)}.btn-primary:hover{background:var(--action-primary-hover);text-decoration:none}.btn-accent{background:var(--action-accent);color:var(--fg-on-inverse)}.btn-accent:hover{background:var(--action-accent-hover);text-decoration:none}.btn-secondary{background:var(--bg-surface);color:var(--fg-brand);border-color:var(--border-default)}.btn-secondary:hover{background:var(--bg-app);text-decoration:none}.btn-ghost{color:var(--fg-brand);background:0 0}.btn-ghost:hover{background:var(--kk-navy-50);text-decoration:none}.input{width:100%;min-height:var(--hit-min);padding:0 var(--sp-4);background:var(--bg-app);border:1px solid var(--border-default);border-radius:var(--r-md);color:var(--fg-primary);transition:border-color var(--dur-base) var(--ease-standard), box-shadow var(--dur-base) var(--ease-standard);display:block}.input::placeholder{color:var(--fg-tertiary)}.input:focus{border-color:var(--kk-teal-700);box-shadow:0 0 0 4px var(--kk-teal-100);outline:none}.label{font-size:var(--fs-sm);color:var(--fg-secondary);margin-bottom:var(--sp-2);font-weight:600;display:block}.container{width:100%;max-width:var(--container-max);padding:0 var(--sp-4);margin:0 auto}@media (width>=1024px){.container{padding:0 var(--sp-6)}}.stack>*+*{margin-top:var(--sp-4)}.stack-lg>*+*{margin-top:var(--sp-6)}.heritage{font-family:var(--font-serif);font-style:italic;font-weight:500}.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}.public-shell{flex-direction:column;min-height:100%;display:flex}.public-header{background:var(--bg-app);border-bottom:1px solid var(--border-subtle);padding-top:env(safe-area-inset-top)}.public-header-inner{justify-content:space-between;align-items:center;gap:var(--sp-4);min-height:64px;padding:var(--sp-2) 0;display:flex}@media (width>=1024px){.public-header-inner{min-height:72px}}.public-logo{align-items:center;display:inline-flex}.public-logo img{object-fit:contain;width:40px;height:40px}@media (width>=1024px){.public-logo img{width:48px;height:48px}}.public-nav{align-items:center;gap:var(--sp-2);display:flex}.public-main{padding:var(--sp-8) 0 var(--sp-12);flex:1}@media (width>=1024px){.public-main{padding:var(--sp-16) 0 var(--sp-20)}}.public-footer{border-top:1px solid var(--border-subtle);padding:var(--sp-5) 0;padding-bottom:calc(var(--sp-5) + env(safe-area-inset-bottom));font-size:var(--fs-sm);color:var(--fg-tertiary)}.public-footer-inner{justify-content:space-between;align-items:center;gap:var(--sp-4);flex-wrap:wrap;display:flex}.public-footer-links{gap:var(--sp-4);display:flex}.public-footer-links a{color:var(--fg-secondary)}.public-version{font-variant-numeric:tabular-nums}.app-shell{flex-direction:column;min-height:100%;display:flex}.app-sidebar{display:none}.app-main{padding:var(--sp-5) 0 calc(72px + env(safe-area-inset-bottom) + var(--sp-5));flex:1}@media (width>=1024px){.app-shell{flex-direction:row}.app-sidebar{background:var(--bg-app);border-right:1px solid var(--border-subtle);width:256px;padding:var(--sp-5) var(--sp-4);flex-direction:column;flex-shrink:0;height:100vh;display:flex;position:sticky;top:0}.app-main{padding:var(--sp-8) 0}}.app-sidebar-brand{align-items:center;gap:var(--sp-3);padding:var(--sp-2);margin-bottom:var(--sp-6);text-decoration:none;display:flex}.app-sidebar-brand:hover{text-decoration:none}.app-sidebar-brand img{object-fit:contain;width:36px;height:36px}.app-sidebar-brand-name{font-family:var(--font-display);font-weight:700;font-size:var(--fs-lg);color:var(--fg-brand)}.app-sidebar-nav{gap:var(--sp-1);flex-direction:column;display:flex}.app-sidebar-link{align-items:center;gap:var(--sp-3);min-height:var(--hit-min);padding:0 var(--sp-3);border-radius:var(--r-md);color:var(--fg-secondary);text-align:left;cursor:pointer;background:0 0;border:0;width:100%;font-weight:500;text-decoration:none;display:flex}.app-sidebar-link:hover{background:var(--kk-navy-50);color:var(--fg-brand);text-decoration:none}.app-sidebar-link.active{background:var(--kk-navy-50);color:var(--fg-brand);font-weight:600}.app-sidebar-icon{font-size:var(--fs-md);text-align:center;width:24px}.app-sidebar-cta{min-height:var(--hit-min);margin-top:var(--sp-3);padding:0 var(--sp-4);border-radius:var(--r-md);background:var(--action-accent);color:var(--fg-on-inverse);box-shadow:var(--shadow-pop);transition:background var(--dur-base) var(--ease-standard);justify-content:center;align-items:center;font-weight:600;text-decoration:none;display:flex}.app-sidebar-cta:hover{background:var(--action-accent-hover);text-decoration:none}.app-sidebar-divider{background:var(--border-subtle);height:1px;margin:var(--sp-5) var(--sp-2)}.app-sidebar-signout{color:var(--fg-tertiary);margin-top:auto}.app-sidebar-version{margin-top:var(--sp-4);padding:0 var(--sp-3);font-size:var(--fs-xs);color:var(--fg-tertiary);font-variant-numeric:tabular-nums}.app-bottomnav{background:var(--bg-app);border-top:1px solid var(--border-default);padding-bottom:env(safe-area-inset-bottom);z-index:10;justify-content:space-around;align-items:stretch;display:flex;position:fixed;bottom:0;left:0;right:0}@media (width>=1024px){.app-bottomnav{display:none}}.app-bottomnav-link{min-height:56px;padding:var(--sp-2) 0;color:var(--fg-tertiary);font-size:var(--fs-xs);flex-direction:column;flex:1;justify-content:center;align-items:center;gap:2px;font-weight:500;text-decoration:none;display:flex}.app-bottomnav-link:hover{text-decoration:none}.app-bottomnav-link.active{color:var(--fg-brand);font-weight:600}.app-bottomnav-icon{font-size:var(--fs-lg);line-height:1}.app-bottomnav-label{font-size:11px}.app-bottomnav-fab{width:56px;height:56px;margin:-16px var(--sp-2) 0;background:var(--action-accent);color:var(--fg-on-inverse);box-shadow:var(--shadow-pop);transition:background var(--dur-base) var(--ease-standard);border-radius:50%;flex:none;justify-content:center;align-self:center;align-items:center;font-size:28px;font-weight:400;text-decoration:none;display:flex}.app-bottomnav-fab:hover{background:var(--action-accent-hover);text-decoration:none}.landing{gap:var(--sp-12);flex-direction:column;display:flex}.landing-hero{text-align:left;max-width:720px;padding-top:var(--sp-6);margin:0 auto}@media (width>=1024px){.landing-hero{text-align:center;padding-top:var(--sp-12)}}.landing-logo{width:100%;max-width:320px;height:auto;margin-bottom:var(--sp-6)}@media (width>=1024px){.landing-logo{max-width:480px;margin-left:auto;margin-right:auto;margin-bottom:var(--sp-8)}}.landing-title{font-size:var(--fs-3xl);line-height:var(--lh-3xl);color:var(--fg-brand);letter-spacing:-.01em}@media (width>=768px){.landing-title{font-size:var(--fs-4xl);line-height:var(--lh-4xl)}}.landing-lede{margin-top:var(--sp-4);font-size:var(--fs-md);line-height:var(--lh-md);color:var(--fg-secondary);max-width:56ch}@media (width>=1024px){.landing-lede{margin-left:auto;margin-right:auto}}.landing-actions{margin-top:var(--sp-6);gap:var(--sp-3);flex-wrap:wrap;display:flex}@media (width>=1024px){.landing-actions{justify-content:center}}.landing-pillars{gap:var(--sp-5);grid-template-columns:1fr;display:grid}@media (width>=768px){.landing-pillars{gap:var(--sp-6);grid-template-columns:repeat(3,1fr)}}.landing-pillar{background:var(--bg-surface);border:1px solid var(--border-subtle);border-radius:var(--r-lg);padding:var(--sp-5);box-shadow:var(--shadow-sm)}.landing-pillar h2{font-size:var(--fs-lg);line-height:var(--lh-lg);color:var(--fg-brand);margin-bottom:var(--sp-2)}.landing-pillar p{color:var(--fg-secondary);font-size:var(--fs-base);line-height:var(--lh-base);margin:0}.auth-page{padding:var(--sp-6) var(--sp-4);justify-content:center;display:flex}.auth-card{background:var(--bg-surface);border:1px solid var(--border-subtle);border-radius:var(--r-lg);width:100%;max-width:440px;padding:var(--sp-6);box-shadow:var(--shadow-sm)}@media (width>=768px){.auth-card{padding:var(--sp-8)}}.auth-title{font-size:var(--fs-2xl);line-height:var(--lh-2xl);color:var(--fg-brand)}.auth-sub{margin-top:var(--sp-2);color:var(--fg-secondary)}.auth-form{margin-top:var(--sp-6)}.auth-meta{margin-top:var(--sp-5);gap:var(--sp-2);font-size:var(--fs-sm);color:var(--fg-secondary);flex-direction:column;display:flex}.auth-note{margin-top:var(--sp-5);padding-top:var(--sp-4);border-top:1px solid var(--border-subtle);font-size:var(--fs-xs);color:var(--fg-tertiary)}.auth-error{padding:var(--sp-3) var(--sp-4);border-radius:var(--r-sm);color:var(--kk-danger,#c5453b);font-size:var(--fs-sm);background:#fcebea;border:1px solid #f2c5c2;margin:0}.auth-success{margin:var(--sp-2) 0 0;padding:var(--sp-3) var(--sp-4);background:var(--kk-leaf-100);border:1px solid var(--kk-leaf-200);border-radius:var(--r-sm);color:var(--kk-leaf-700);font-size:var(--fs-sm)}.page{gap:var(--sp-5);flex-direction:column;display:flex}.page-header{justify-content:space-between;align-items:baseline;gap:var(--sp-4);flex-wrap:wrap;display:flex}.page-title{font-size:var(--fs-2xl);line-height:var(--lh-2xl);color:var(--fg-brand)}@media (width>=1024px){.page-title{font-size:var(--fs-3xl);line-height:var(--lh-3xl)}}.page-sub{margin-top:var(--sp-2);color:var(--fg-secondary)}.page-body{gap:var(--sp-4);flex-direction:column;display:flex}.page-empty{padding:var(--sp-8);background:var(--bg-surface);border:1px dashed var(--border-default);border-radius:var(--r-lg);color:var(--fg-secondary);text-align:center;margin:0}.page-actions{gap:var(--sp-3);flex-wrap:wrap;display:flex}.recipes-grid{gap:var(--sp-4);grid-template-columns:1fr;margin:0;padding:0;list-style:none;display:grid}@media (width>=600px){.recipes-grid{grid-template-columns:repeat(2,1fr)}}@media (width>=1024px){.recipes-grid{gap:var(--sp-5);grid-template-columns:repeat(3,1fr)}}.recipes-card{background:var(--bg-surface);border:1px solid var(--border-subtle);border-radius:var(--r-lg);color:inherit;box-shadow:var(--shadow-sm);transition:transform var(--dur-base) var(--ease-standard), box-shadow var(--dur-base) var(--ease-standard);flex-direction:column;text-decoration:none;display:flex;overflow:hidden}.recipes-card:hover{box-shadow:var(--shadow-md);text-decoration:none;transform:translateY(-2px)}.recipes-card-photo{aspect-ratio:4/3;background:var(--kk-cream-100);justify-content:center;align-items:center;display:flex;overflow:hidden}.recipes-card-photo img{object-fit:cover;width:100%;height:100%}.recipes-card-placeholder{filter:grayscale(.4);opacity:.6;font-size:48px}.recipes-card-body{padding:var(--sp-4);gap:var(--sp-1);flex-direction:column;display:flex}@media (width>=1024px){.recipes-card-body{padding:var(--sp-5)}}.recipes-card-title{font-size:var(--fs-lg);line-height:var(--lh-lg);color:var(--fg-brand);font-weight:700}.recipes-card-subtitle{font-size:var(--fs-sm);color:var(--fg-secondary);margin:0}.recipes-card-meta{margin:var(--sp-2) 0 0;font-size:var(--fs-xs);color:var(--fg-tertiary);font-variant-numeric:tabular-nums}.recipe-back{margin:0 0 var(--sp-3);font-size:var(--fs-sm)}.recipe-header{margin-bottom:var(--sp-6)}.recipe-title{font-size:var(--fs-2xl);line-height:var(--lh-2xl);color:var(--fg-brand)}@media (width>=1024px){.recipe-title{font-size:var(--fs-3xl);line-height:var(--lh-3xl)}}.recipe-subtitle{margin-top:var(--sp-2);color:var(--fg-secondary);font-size:var(--fs-md)}.recipe-meta{margin-top:var(--sp-3);color:var(--fg-tertiary);font-size:var(--fs-sm);font-variant-numeric:tabular-nums}.recipe-section{background:var(--bg-surface);border:1px solid var(--border-subtle);border-radius:var(--r-lg);padding:var(--sp-5);margin-bottom:var(--sp-4)}.recipe-section-title{font-size:var(--fs-lg);color:var(--fg-brand);margin-bottom:var(--sp-3)}.recipe-description{color:var(--fg-primary);line-height:var(--lh-md);margin:0}.recipe-ingredients{gap:var(--sp-2);flex-direction:column;margin:0;padding:0;list-style:none;display:flex}.recipe-ingredients li{padding:var(--sp-2) 0;border-bottom:1px solid var(--border-subtle);font-size:var(--fs-base);line-height:var(--lh-base)}.recipe-ingredients li:last-child{border-bottom:0}.recipe-ingredient-note{color:var(--fg-tertiary);font-size:var(--fs-sm)}.recipe-steps{padding:0 0 0 var(--sp-5);gap:var(--sp-3);flex-direction:column;margin:0;display:flex}.recipe-steps li{font-size:var(--fs-md);line-height:var(--lh-md);padding-left:var(--sp-2)}.recipe-form{max-width:720px;margin:0 auto}.recipe-form-row{gap:var(--sp-3);grid-template-columns:repeat(3,1fr);display:grid}@media (width<=480px){.recipe-form-row{grid-template-columns:1fr}}.recipe-form-textarea{min-height:120px;padding:var(--sp-3) var(--sp-4);font-family:var(--font-body);line-height:var(--lh-base);resize:vertical}.recipe-form-hint{margin:0 0 var(--sp-2);font-size:var(--fs-xs);color:var(--fg-tertiary)}.recipe-form-actions{gap:var(--sp-3);flex-wrap:wrap;align-items:center;display:flex}
