:root{--text:#453e33;--text-h:#2a2520;--bg:#faf8f2;--surface:#fffefa;--border:#e2dcc9;--code-bg:#efe9da;--accent:#86794f;--accent-strong:#695f3c;--accent-bg:#86794f17;--accent-border:#86794f59;--shadow:#2a252012 0 4px 10px -2px, #2a25200a 0 2px 4px -2px;--sans:system-ui, "Segoe UI", Roboto, sans-serif;--heading:"Quicksand", sans-serif;--mono:ui-monospace, Consolas, monospace;--script:var(--heading);font:16px/150% var(--sans);letter-spacing:0;color:var(--text);background:var(--bg);font-synthesis:none;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body{background:var(--bg);min-height:100vh;margin:0}#root{box-sizing:border-box;flex-direction:column;width:100%;min-height:100vh;display:flex}h1,h2,h3{font-family:var(--heading);color:var(--text-h)}h1{letter-spacing:-.4px;margin:0 0 20px;font-size:26px;font-weight:650}h2{letter-spacing:-.2px;margin:0 0 10px;font-size:18px;font-weight:650;line-height:130%}h3{margin:0 0 6px;font-size:15px;font-weight:600}p{margin:0}a{color:var(--accent-strong)}button{font:inherit;color:#fff;background:var(--accent);border:1px solid var(--accent);cursor:pointer;border-radius:6px;padding:.45rem .9rem;font-size:14px;font-weight:500;transition:background .15s,border-color .15s,box-shadow .15s}button:hover{background:var(--accent-strong);border-color:var(--accent-strong)}button:active{box-shadow:inset 0 1px 2px #0003}button:disabled{opacity:.45;cursor:not-allowed}button.secondary{color:var(--text);background:var(--surface);border-color:var(--border)}button.secondary:hover{background:var(--code-bg);border-color:#cfcabf}button.danger{color:#8c342a;background:var(--surface);border-color:#8c342a59}button.danger:hover{color:#fff;background:#8c342a;border-color:#8c342a}input[type=text],input[type=search],input[type=number],textarea,select{font:inherit;border:1px solid var(--border);background:var(--surface);color:var(--text);border-radius:6px;padding:.45rem .6rem;font-size:14px}input[type=text]:focus,input[type=search]:focus,input[type=number]:focus,textarea:focus,select:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-bg);outline:none}input[type=text][readonly]{background:var(--bg);color:var(--text);opacity:.75;cursor:default}input[type=text][readonly]:focus{box-shadow:none;border-color:var(--border)}.card{background:var(--surface);border:1px solid var(--border);box-shadow:var(--shadow);border-radius:8px}@keyframes spin{to{transform:rotate(360deg)}}.spinner{border:3px solid var(--accent-border);border-top-color:var(--accent);border-radius:50%;width:28px;height:28px;animation:.8s linear infinite spin}.recipe-browse-page h1,.recipe-detail-page h1{font-family:var(--script);letter-spacing:0;color:var(--accent-strong);font-weight:700}.recipe-browse-page h1{font-size:40px}.recipe-detail-page h1{margin-bottom:8px;font-size:44px;line-height:1.15}.recipe-detail-page h2{font-family:var(--script);letter-spacing:0;color:var(--accent-strong);border-bottom:1px solid var(--accent-border);padding-bottom:.35rem;font-size:26px;font-weight:600}.recipe-browse-layout{align-items:flex-start;gap:1.5rem;display:flex}.recipe-main{flex:1;min-width:0}.cuisine-sidebar{flex-direction:column;flex:0 0 180px;gap:.15rem;display:flex;position:sticky;top:1rem}.cuisine-sidebar h3{color:var(--text);opacity:.6;text-transform:uppercase;letter-spacing:.04em;margin:0 0 .5rem .6rem;font-size:12px}.cuisine-sidebar-link{width:100%;color:var(--text);text-align:left;cursor:pointer;background:0 0;border:none;border-radius:6px;justify-content:space-between;gap:.5rem;padding:.4rem .6rem;font-size:14px;font-weight:500;text-decoration:none;transition:background .15s,color .15s;display:flex}.cuisine-sidebar-link:hover{background:var(--code-bg)}.cuisine-sidebar-link.active{background:var(--accent-bg);color:var(--accent-strong);font-weight:650}.cuisine-sidebar-link .count{opacity:.55;font-size:12px;font-weight:500}@media (width<=720px){.recipe-browse-layout{flex-direction:column}.cuisine-sidebar{flex-flow:wrap;flex:none;width:100%;position:static}.cuisine-sidebar h3{display:none}}.recipe-tiles{grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:.85rem;display:grid}.recipe-card{background:var(--surface);border:1px solid var(--border);border-left:3px solid var(--accent-border);border-radius:10px;padding:.9rem 1.1rem;transition:box-shadow .15s,border-color .15s,transform .15s}.recipe-card:hover{box-shadow:var(--shadow);border-color:#cfcabf;border-left-color:var(--accent);transform:translateY(-1px)}.recipe-card-favorite{color:var(--accent);cursor:pointer;background:0 0;border:none;padding:0;font-size:1.25rem;line-height:1}.pantry-columns{columns:280px 3;column-gap:1.5rem}.pantry-page h1{font-family:var(--script);letter-spacing:0;color:var(--accent-strong);font-size:40px;font-weight:700}.pantry-section{break-inside:avoid-column;background:var(--surface);border:1px solid var(--border);box-shadow:var(--shadow);border-radius:12px;margin-bottom:1.5rem;padding:.9rem 1.05rem 1.1rem}.pantry-section .section-head{border-bottom:1px solid var(--accent-border);justify-content:space-between;align-items:baseline;gap:.5rem;margin-bottom:.75rem;padding-bottom:.55rem;display:flex}.pantry-section h2{font-family:var(--script);text-transform:none;letter-spacing:0;color:var(--accent-strong);opacity:1;margin:0;font-size:24px;font-weight:600}.pantry-section .section-count{color:var(--accent-strong);background:var(--accent-bg);white-space:nowrap;border-radius:999px;padding:.15rem .55rem;font-size:12px;font-weight:600}.pantry-tiles{grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:.6rem;display:grid}.pantry-tile{background:var(--bg);border:1px solid var(--border);border-radius:8px;flex-direction:column;gap:.4rem;padding:.7rem .8rem;transition:box-shadow .15s,border-color .15s,transform .15s;display:flex}.pantry-tile:hover{box-shadow:var(--shadow);border-color:var(--accent-border);transform:translateY(-1px)}.pantry-tile .name{color:var(--text-h);cursor:pointer;text-align:center;font-size:14px;font-weight:600;line-height:130%;text-decoration:none}.pantry-tile .name:hover{color:var(--accent-strong);text-decoration:underline}.pantry-tile .qty-row{justify-content:space-between;align-items:center;gap:.4rem;display:flex}.pantry-tile .qty-row button{padding:.2rem .55rem;font-size:13px;line-height:1}.pantry-tile .qty-row span{color:var(--text);opacity:.85;white-space:nowrap;font-size:13px}.pantry-tile-editing{border:1px dashed var(--accent-border);background:var(--accent-bg)}.pantry-tile-editing input,.pantry-tile-editing select{font:inherit;padding:.25rem .35rem;font-size:13px}.pantry-tile-editing .qty-row button{flex:1;padding:.2rem .4rem;font-size:12px}.edit-hint{color:var(--text);opacity:.75;margin-top:.75rem;font-size:13px}.nutrition-tiles{grid-template-columns:repeat(auto-fill,minmax(120px,1fr));gap:.6rem;display:grid}.nutrition-tile{background:var(--bg);border:1px solid var(--border);border-radius:8px;flex-direction:column;gap:.15rem;padding:.6rem .7rem;display:flex}.nutrition-tile .value{color:var(--text-h);font-size:1.1rem;font-weight:650}.nutrition-tile .label{text-transform:uppercase;letter-spacing:.03em;opacity:.6;font-size:.75rem}.nutrition-tile-subs{border-top:1px solid var(--border);flex-direction:column;gap:.15rem;margin-top:.35rem;padding-top:.35rem;display:flex}.nutrition-tile-sub{opacity:.8;justify-content:space-between;gap:.5rem;font-size:.78rem;display:flex}.error-banner{color:#8c342a;background:#fdf0ee;border:1px solid #8c342a40;border-radius:6px;margin-bottom:1rem;padding:.5rem .75rem;font-size:14px}.success-banner{color:#3f6b3f;background:#eef6ee;border:1px solid #3f6b3f40;border-radius:6px;padding:.5rem .75rem;font-size:14px}.modal-overlay{z-index:100;background:#26222073;justify-content:center;align-items:center;padding:1.5rem;display:flex;position:fixed;inset:0}.modal{width:100%;max-width:520px;max-height:calc(100vh - 3rem);padding:1.1rem 1.3rem 1.3rem;overflow-y:auto}.modal-header{justify-content:space-between;align-items:baseline;gap:.75rem;display:flex}.modal-header h2{margin:0}.modal-close{padding:.15rem .55rem;font-size:18px;line-height:1}.modal-actions{justify-content:flex-end;gap:.6rem;margin-top:1.25rem;display:flex}.complete-recipe-rows{flex-direction:column;gap:.5rem;margin-top:.6rem;display:flex}.complete-recipe-row{align-items:center;gap:.5rem;display:flex}.complete-recipe-row .name{flex:1}.complete-recipe-row .hint{color:var(--text);opacity:.6;font-size:13px}.meal-calendar{margin-top:.75rem}.meal-calendar-picking-toolbar{align-items:center;gap:.5rem;display:flex}.meal-calendar-weekdays,.meal-calendar-grid{grid-template-columns:repeat(7,1fr);gap:.5rem;display:grid}.meal-calendar-weekdays{margin-bottom:.4rem}.meal-calendar-weekday{text-align:center;color:var(--text);opacity:.6;text-transform:uppercase;letter-spacing:.04em;font-size:12px;font-weight:600}.meal-calendar-grid{margin-bottom:.5rem}.meal-calendar-day{background:var(--surface);border:1px solid var(--border);border-radius:8px;flex-direction:column;gap:.3rem;min-width:0;height:88px;min-height:0;padding:.4rem;transition:border-color .15s,background .15s;display:flex}.meal-calendar-day-blank{background:0 0;border:none}.meal-calendar-day.today{border-color:var(--accent-border)}.meal-calendar-day.trip{background:var(--accent-bg)}.meal-calendar-day.drop-over{border-color:var(--accent-strong);box-shadow:0 0 0 2px var(--accent-bg)}.meal-calendar-day.not-current-month{opacity:.45}.meal-calendar-day.grocery-selected{background:var(--accent-bg);border-color:var(--accent-strong)}.meal-calendar-day.pickable{cursor:pointer}.meal-calendar-day.pickable:hover{border-color:var(--accent-strong)}.meal-calendar-day.pickable:focus-visible{box-shadow:0 0 0 2px var(--accent-bg);border-color:var(--accent-strong);outline:none}.meal-calendar-day-head{flex-shrink:0;justify-content:space-between;align-items:center;display:flex}.meal-calendar-day-date{color:var(--text-h);background:0 0;border:none;padding:0;font-size:13px;font-weight:600}.meal-calendar-day.today .meal-calendar-day-date{color:var(--accent-strong)}.meal-calendar-trip-badge{cursor:pointer;background:0 0;border:none;padding:0;font-size:13px;line-height:1}.meal-calendar-nutrition-badge{text-align:center;cursor:pointer;border:none;border-radius:999px;width:16px;height:16px;padding:0;font-size:11px;font-weight:700;line-height:16px}.meal-calendar-nutrition-badge.status-good{color:#3f6b4f;background:#dcece1}.meal-calendar-nutrition-badge.status-flagged{color:#7a5c10;background:#f7e4b0}.meal-calendar-add-recipe{border:1px dashed var(--accent-border);width:16px;height:16px;color:var(--accent);cursor:pointer;background:0 0;border-radius:999px;padding:0;font-size:12px;line-height:13px}.meal-calendar-add-recipe:hover{background:var(--accent-bg)}.meal-calendar-day-occurrences{scrollbar-width:none;-ms-overflow-style:none;flex-direction:column;gap:.25rem;min-width:0;min-height:0;display:flex;overflow-y:auto}.meal-calendar-day-occurrences::-webkit-scrollbar{display:none}.meal-calendar-occurrence{background:var(--accent-bg);border:1px solid var(--accent-border);cursor:grab;border-radius:6px;flex-shrink:0;align-items:center;gap:.3rem;min-width:0;padding:.25rem .4rem;font-size:12px;display:flex}.meal-calendar-occurrence .name{min-width:0;color:var(--text-h);text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}.meal-calendar-occurrence-remove{color:var(--text);opacity:.6;cursor:pointer;background:0 0;border:none;padding:0;font-size:14px;line-height:1}.meal-calendar-occurrence-remove:hover{opacity:1}.meal-calendar-unscheduled{background:var(--surface);border:1px dashed var(--border);border-radius:8px;margin-top:1rem;padding:.85rem 1rem}.meal-calendar-unscheduled.drop-over{border-color:var(--accent-strong);box-shadow:0 0 0 2px var(--accent-bg)}.meal-calendar-unscheduled-head{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:.75rem;margin-bottom:.6rem;display:flex}.meal-calendar-unscheduled-head h3{color:var(--text-h);margin:0}.meal-calendar-unscheduled-list{flex-wrap:wrap;gap:.4rem;display:flex}.meal-calendar-unscheduled-list .meal-calendar-occurrence{flex:none}.meal-calendar-unscheduled-empty{color:var(--text);opacity:.6;margin:0;font-size:13px}.meal-calendar-nutrition-rows{flex-direction:column;gap:.4rem;display:flex}.meal-calendar-nutrition-row{background:var(--bg);border:1px solid var(--border);border-radius:8px;justify-content:space-between;align-items:center;gap:.75rem;padding:.5rem .7rem;display:flex}.meal-calendar-nutrition-row .metric{color:var(--text-h);font-weight:600}.meal-calendar-nutrition-row .target{opacity:.7;font-weight:400}.meal-calendar-nutrition-row .status-label{white-space:nowrap;border-radius:999px;padding:.15rem .5rem;font-size:12px;font-weight:600}.meal-calendar-nutrition-row.status-good .status-label{color:#3f6b4f;background:#dcece1}.meal-calendar-nutrition-row.status-short .status-label,.meal-calendar-nutrition-row.status-low .status-label,.meal-calendar-nutrition-row.status-high .status-label{color:#7a5c10;background:#f7e4b0}.meal-calendar-nutrition-row.status-no_goal .status-label{background:var(--border);color:var(--text);opacity:.75}.meal-templates-section{background:var(--surface);border:1px solid var(--border);border-radius:8px;margin-top:1rem;padding:.85rem 1rem}.meal-templates-head{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:.75rem;margin-bottom:.6rem;display:flex}.meal-templates-head h3{color:var(--text-h);margin:0}.meal-templates-empty{color:var(--text);opacity:.6;margin:0;font-size:13px}.meal-templates-list{flex-direction:column;gap:.35rem;margin:0;padding:0;list-style:none;display:flex}.meal-templates-item{background:var(--accent-bg);border:1px solid var(--accent-border);border-radius:6px;align-items:center;gap:.5rem;padding:.4rem .6rem;font-size:13px;display:flex}.meal-templates-item .name{min-width:0;color:var(--text-h);text-overflow:ellipsis;white-space:nowrap;flex:1;font-weight:600;overflow:hidden}.meal-templates-count{opacity:.7;white-space:nowrap;font-size:12px}.meal-templates-delete{color:var(--text);opacity:.6;cursor:pointer;background:0 0;border:none;padding:0;font-size:14px;line-height:1}.meal-templates-delete:hover{opacity:1}.template-builder-lines{flex-direction:column;gap:.35rem;max-height:220px;margin:.75rem 0;padding:0;list-style:none;display:flex;overflow-y:auto}.template-builder-line{background:var(--bg);border:1px solid var(--border);border-radius:6px;align-items:center;gap:.5rem;padding:.35rem .5rem;font-size:13px;display:flex}.template-builder-line .name{min-width:0;color:var(--text-h);text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}.template-builder-line input[type=number]{box-sizing:border-box;width:48px;padding:.2rem .3rem}.recipe-form-grid{grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:.75rem;display:grid}.recipe-form-grid label{color:var(--text);opacity:.85;flex-direction:column;gap:.3rem;font-size:13px;display:flex}.recipe-form-row{flex-wrap:wrap;align-items:center;gap:.5rem;padding:.6rem .75rem;display:flex}code{font-family:var(--mono);color:var(--text-h);background:var(--code-bg);border-radius:4px;padding:3px 6px;font-size:13px;line-height:135%;display:inline-flex}[data-theme=classic]{--text:#453e33;--text-h:#2a2520;--bg:#faf8f2;--surface:#fffefa;--border:#e2dcc9;--code-bg:#efe9da;--accent:#86794f;--accent-strong:#695f3c;--accent-bg:#86794f17;--accent-border:#86794f59;--shadow:#2a252012 0 4px 10px -2px, #2a25200a 0 2px 4px -2px;--sans:system-ui, "Segoe UI", Roboto, sans-serif;--heading:"Quicksand", sans-serif;--script:var(--heading)}[data-theme=fitness]{--text:#1c2b24;--text-h:#10201a;--bg:#f4f9f6;--surface:#fff;--border:#d7e6dd;--code-bg:#e8f3ec;--accent:#1f9d5c;--accent-strong:#167a46;--accent-bg:#1f9d5c1a;--accent-border:#1f9d5c59;--shadow:#10201a14 0 4px 10px -2px, #10201a0d 0 2px 4px -2px;--heading:"Anton", sans-serif;--script:var(--heading)}[data-theme=brainrot]{--text:#1a1a1a;--text-h:#000;--bg:#f7f3ff;--surface:#fff;--border:#e4d6ff;--code-bg:#efe4ff;--accent:#ff3d81;--accent-strong:#d81b60;--accent-bg:#ff3d811f;--accent-border:#ff3d8166;--shadow:#0000001a 0 4px 10px -2px, #0000000f 0 2px 4px -2px;--heading:"Bungee", system-ui, sans-serif;--script:var(--heading)}[data-theme=cyberpunk]{--text:#c7d0e0;--text-h:#4be8ff;--bg:#0a0a14;--surface:#131320;--border:#2c2c44;--code-bg:#181828;--accent:#ff2ec4;--accent-strong:#e0119e;--accent-bg:#ff2ec41f;--accent-border:#ff2ec466;--shadow:#0000008c 0 4px 10px -2px, #4be8ff2e 0 0 16px -4px;--heading:"Orbitron", sans-serif;--script:var(--heading)}[data-theme=fine-dining]{--text:#d8d2c4;--text-h:#f2ede0;--bg:#17140f;--surface:#201c15;--border:#332d24;--code-bg:#241f18;--accent:#b8933f;--accent-strong:#9c7a2f;--accent-bg:#b8933f1a;--accent-border:#b8933f59;--shadow:#0006 0 4px 10px -2px, #0000004d 0 2px 4px -2px;--heading:"Playfair Display", serif;--script:var(--heading)}[data-theme=retro-diner]{--text:#3a2c28;--text-h:#241a17;--bg:#fbf3e6;--surface:#fff;--border:#e8d9c2;--code-bg:#f3e8d4;--accent:#c0392b;--accent-strong:#96281b;--accent-bg:#c0392b14;--accent-border:#c0392b59;--shadow:#241a171f 0 4px 10px -2px, #241a1714 0 2px 4px -2px;--heading:"Bebas Neue", system-ui, sans-serif;--script:var(--heading)}[data-theme=great-hall]{--text:#c7cec0;--text-h:#eef2e6;--bg:#0c130d;--surface:#16211a;--border:#2c3f2e;--code-bg:#1b2a1e;--accent:#d9a536;--accent-strong:#b3841f;--accent-bg:#d9a5361f;--accent-border:#d9a53666;--shadow:#0000008c 0 4px 10px -2px, #d9a53624 0 0 14px -4px;--heading:"Cinzel Decorative", serif;--script:var(--heading)}[data-theme=hobbit]{--text:#3b2f1f;--text-h:#241a0e;--bg:#f4ecd8;--surface:#fffaf0;--border:#d8c9a3;--code-bg:#eadfc0;--accent:#4c6b3f;--accent-strong:#37502c;--accent-bg:#4c6b3f1a;--accent-border:#4c6b3f59;--shadow:#241a0e1f 0 4px 10px -2px, #241a0e14 0 2px 4px -2px;--heading:"Uncial Antiqua", cursive;--script:var(--heading)}[data-theme=gothic]{--text:#b7b0c2;--text-h:#e9e3f2;--bg:#0c0a10;--surface:#17141d;--border:#332c3d;--code-bg:#1f1a26;--accent:#7a1530;--accent-strong:#5c0f24;--accent-bg:#7a153024;--accent-border:#7a153066;--shadow:#0009 0 4px 10px -2px, #7a153026 0 0 14px -4px;--heading:"UnifrakturMaguntia", cursive;--script:var(--heading)}[data-theme=power-up]{--text:#17233a;--text-h:#0d1526;--bg:#eaf4fb;--surface:#fff;--border:#cfe3f0;--code-bg:#dcedf7;--accent:#d92b2b;--accent-strong:#a81f1f;--accent-bg:#d92b2b1a;--accent-border:#d92b2b66;--shadow:#17233a26 0 4px 10px -2px, #17233a14 0 2px 4px -2px;--heading:"Press Start 2P", system-ui, sans-serif;--script:var(--heading)}
