:root{color-scheme:light;--color-background: #ffffff;--color-surface: #f5f7fa;--color-surface-raised: #ffffff;--color-text: #101418;--color-text-muted: #5b6572;--color-border: #dce1e7;--color-primary: #208aef;--color-primary-text: #ffffff;--color-danger: #b3261e;--color-tag-background: #e6f4fe;--color-tag-text: #0b4f8a;--color-focus-ring: rgb(32 138 239 / 35%);--color-primary-hover: #1a76cc;--color-danger-soft: rgb(179 38 30 / 10%);--color-overlay: rgb(16 20 24 / 45%);--space-xs: 4px;--space-sm: 8px;--space-md: 16px;--space-lg: 24px;--space-xl: 32px;--text-caption: 13px;--text-body: 16px;--text-body-large: 18px;--text-title: 22px;--text-large-title: 32px;--touch-target: 44px;--radius-sm: 6px;--radius-md: 10px;--radius-lg: 16px;--radius-pill: 999px;--shadow-sm: 0 1px 2px rgb(16 20 24 / 6%);--shadow-md: 0 2px 8px rgb(16 20 24 / 8%);--shadow-lg: 0 8px 24px rgb(16 20 24 / 14%);--transition-fast: .12s ease;--transition: .18s ease;--content-width: 1120px;--content-width-narrow: 780px;--font-sans: system-ui, -apple-system, "Segoe UI", roboto, "Helvetica Neue", arial, sans-serif}@media(prefers-color-scheme:dark){:root{color-scheme:dark;--color-background: #101418;--color-surface: #1b2027;--color-surface-raised: #232a33;--color-text: #f2f5f8;--color-text-muted: #9aa5b1;--color-border: #2a313a;--color-primary: #4da6ff;--color-primary-text: #0b1720;--color-danger: #ff8a80;--color-tag-background: #173248;--color-tag-text: #8fcbff;--color-focus-ring: rgb(77 166 255 / 40%);--color-primary-hover: #7cbeff;--color-danger-soft: rgb(255 138 128 / 14%);--color-overlay: rgb(0 0 0 / 60%);--shadow-sm: 0 1px 2px rgb(0 0 0 / 40%);--shadow-md: 0 2px 8px rgb(0 0 0 / 45%);--shadow-lg: 0 8px 24px rgb(0 0 0 / 55%)}}*,*:before,*:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{margin:0;font-family:var(--font-sans);font-size:var(--text-body);line-height:1.5;background:var(--color-surface);color:var(--color-text);-webkit-font-smoothing:antialiased}#root{min-height:100vh}img{max-width:100%;display:block}::selection{background:var(--color-tag-background);color:var(--color-tag-text)}h1,h2,h3{margin:0;line-height:1.25;font-weight:650;letter-spacing:-.01em}h1{font-size:var(--text-large-title)}h2{font-size:var(--text-title)}h3{font-size:var(--text-body-large)}p{margin:0}a{color:var(--color-primary);text-decoration-thickness:1px;text-underline-offset:2px}a:hover{color:var(--color-primary-hover)}.muted{color:var(--color-text-muted)}.caption{color:var(--color-text-muted);font-size:var(--text-caption)}.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}.skip-link{position:absolute;top:-100%;left:var(--space-md);z-index:100;padding:var(--space-sm) var(--space-md);background:var(--color-primary);color:var(--color-primary-text);border-radius:var(--radius-sm);font-weight:700;text-decoration:none;transition:top var(--transition-fast)}.skip-link:focus-visible{top:var(--space-md);outline-offset:4px}:focus-visible{outline:2px solid var(--color-primary);outline-offset:2px;border-radius:var(--radius-sm)}input,select,textarea{font:inherit;color:var(--color-text);background:var(--color-background);border:1px solid var(--color-border);border-radius:var(--radius-sm);padding:var(--space-sm) 10px;min-height:38px;transition:border-color var(--transition-fast),box-shadow var(--transition-fast)}textarea{min-height:72px;resize:vertical;width:100%}input::placeholder,textarea::placeholder{color:var(--color-text-muted);opacity:1}input:hover:not(:disabled),select:hover:not(:disabled),textarea:hover:not(:disabled){border-color:var(--color-text-muted)}input:focus-visible,select:focus-visible,textarea:focus-visible{outline:none;border-color:var(--color-primary);box-shadow:0 0 0 3px var(--color-focus-ring)}select{cursor:pointer}label{font-size:var(--text-caption);font-weight:600;color:var(--color-text-muted);letter-spacing:.02em;text-transform:uppercase}.field{display:flex;flex-direction:column;gap:var(--space-xs)}.field input,.field textarea{width:100%}[role=alert]{color:var(--color-danger);font-size:var(--text-caption)}button{font:inherit;font-weight:550;color:var(--color-text);background:var(--color-surface-raised);border:1px solid var(--color-border);border-radius:var(--radius-sm);padding:var(--space-sm) 12px;min-height:38px;cursor:pointer;transition:background var(--transition-fast),border-color var(--transition-fast),color var(--transition-fast)}button:hover:not(:disabled){background:var(--color-surface);border-color:var(--color-text-muted)}button:active:not(:disabled){transform:translateY(1px)}button:disabled{opacity:.45;cursor:not-allowed}button.primary{background:var(--color-primary);border-color:var(--color-primary);color:var(--color-primary-text)}button.primary:hover:not(:disabled){background:var(--color-primary-hover);border-color:var(--color-primary-hover)}.button-primary{display:inline-flex;align-items:center;justify-content:center;padding:var(--space-sm) var(--space-md);min-height:var(--touch-target);border-radius:var(--radius-sm);background:var(--color-primary);color:var(--color-primary-text);font-weight:650;text-decoration:none}.button-primary:hover{background:var(--color-primary-hover);color:var(--color-primary-text)}button.danger{color:var(--color-danger);border-color:var(--color-border)}button.danger:hover:not(:disabled){background:var(--color-danger-soft);border-color:var(--color-danger)}button.link-button{align-self:flex-start;padding:0;background:none;border:none;color:var(--color-primary);font-weight:600;text-decoration:underline}button.link-button:hover:not(:disabled){background:none;color:var(--color-primary-hover)}.tag{display:inline-flex;align-items:center;gap:var(--space-xs);padding:3px var(--space-sm);border-radius:var(--radius-pill);background:var(--color-tag-background);color:var(--color-tag-text);font-size:var(--text-caption);font-weight:600;line-height:1.4;white-space:nowrap}button.tag{border:1px solid transparent;min-height:0}button.tag-removable:hover:not(:disabled){background:var(--color-danger-soft);color:var(--color-danger);border-color:var(--color-danger)}.tag-button{cursor:pointer;text-decoration:none;border:1px solid transparent}.tag-button:hover:not(:disabled){background:var(--color-primary);color:var(--color-primary-text)}.chip{display:inline-flex;align-items:center;gap:var(--space-xs);padding:var(--space-xs) 12px;min-height:34px;border-radius:var(--radius-pill);border:1px solid var(--color-border);background:var(--color-surface-raised);color:var(--color-text);font-size:var(--text-caption);font-weight:600;white-space:nowrap}button.chip:hover:not(:disabled){border-color:var(--color-primary);background:var(--color-surface)}.chip-active{background:var(--color-primary);border-color:var(--color-primary);color:var(--color-primary-text)}button.chip-active:hover:not(:disabled){background:var(--color-primary-hover);border-color:var(--color-primary-hover);color:var(--color-primary-text)}.chip>button{padding:0;min-height:0;width:18px;height:18px;display:inline-flex;align-items:center;justify-content:center;border:0;border-radius:var(--radius-pill);background:transparent;color:inherit;font-size:11px;line-height:1}.chip>button:hover:not(:disabled){background:var(--color-danger);color:var(--color-primary-text)}@media(max-width:640px){button,input,select,.chip{min-height:var(--touch-target)}}.app-layout{min-height:100vh;display:flex;flex-direction:column}.app-nav{position:sticky;top:0;z-index:20;display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-md);padding:var(--space-sm) var(--space-lg);background:var(--color-surface-raised);border-bottom:1px solid var(--color-border);box-shadow:var(--shadow-sm)}.app-nav:before{content:"CookEra";font-size:var(--text-title);font-weight:700;letter-spacing:-.02em;color:var(--color-primary);margin-right:var(--space-xs)}.app-nav a{padding:var(--space-sm) 12px;border-radius:var(--radius-sm);color:var(--color-text);font-weight:600;text-decoration:none;white-space:nowrap;transition:background var(--transition-fast)}.app-nav a:hover{background:var(--color-surface);color:var(--color-text)}.app-nav a[aria-current=page]{background:var(--color-tag-background);color:var(--color-tag-text)}.app-nav select{margin-left:auto}.app-nav select+button,.app-nav a+button{margin-left:auto}.app-nav select~button{margin-left:0}.app-main{flex:1;width:100%;max-width:var(--content-width);margin:0 auto;padding:var(--space-lg)}@media(max-width:640px){.app-nav{padding:var(--space-sm) var(--space-md);gap:var(--space-sm)}.app-main{padding:var(--space-md)}}.update-prompt{position:fixed;left:50%;bottom:var(--space-lg);transform:translate(-50%);z-index:50;display:flex;align-items:center;gap:var(--space-md);padding:var(--space-sm) var(--space-md);max-width:calc(100vw - var(--space-lg) * 2);background:var(--color-surface-raised);border:1px solid var(--color-border);border-radius:var(--radius-md);box-shadow:var(--shadow-lg)}.update-prompt>p{margin:0;font-weight:600}.auth-page{min-height:100vh;max-width:420px;margin:0 auto;padding:var(--space-xl) var(--space-md);display:flex;flex-direction:column;justify-content:center;gap:var(--space-md)}.auth-page>h1{text-align:center;letter-spacing:-.02em}.auth-page .form{display:flex;flex-direction:column;gap:var(--space-md);padding:var(--space-lg);background:var(--color-surface-raised);border:1px solid var(--color-border);border-radius:var(--radius-lg);box-shadow:var(--shadow-md)}.auth-page .form button[type=submit]{margin-top:var(--space-xs);min-height:var(--touch-target);background:var(--color-primary);border-color:var(--color-primary);color:var(--color-primary-text);font-size:var(--text-body)}.auth-page .form button[type=submit]:hover:not(:disabled){background:var(--color-primary-hover);border-color:var(--color-primary-hover)}.auth-page .form [role=alert]{padding:var(--space-sm) 10px;border-radius:var(--radius-sm);background:var(--color-danger-soft);border:1px solid var(--color-danger)}.auth-page>p{text-align:center;font-size:var(--text-caption)}.recipes-page{display:flex;flex-direction:column;gap:var(--space-md)}.recipes-page>input{width:100%;min-height:var(--touch-target);font-size:var(--text-body-large);padding:10px var(--space-md);border-radius:var(--radius-md)}.filter-row{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-sm)}.filter-row select{margin-left:auto}.ingredient-filters{display:grid;grid-template-columns:auto 1fr;align-items:start;gap:var(--space-sm) var(--space-md);padding:var(--space-md);background:var(--color-surface-raised);border:1px solid var(--color-border);border-radius:var(--radius-md)}.ingredient-filters>.muted{grid-column:1;align-self:center;min-height:38px;display:flex;align-items:center;font-size:var(--text-caption);font-weight:600;text-transform:uppercase;letter-spacing:.02em;white-space:nowrap}.ingredient-filters>.ingredient-picker{grid-column:2}.ingredient-filters>.chips-row{grid-column:2}.chips-row{display:flex;flex-wrap:wrap;gap:var(--space-xs)}.chips-row:empty{display:none}.ingredient-picker{position:relative}.ingredient-picker>input{width:100%}.ingredient-picker-results{position:absolute;z-index:30;top:calc(100% + var(--space-xs));left:0;right:0;margin:0;padding:var(--space-xs);list-style:none;max-height:280px;overflow-y:auto;background:var(--color-surface-raised);border:1px solid var(--color-border);border-radius:var(--radius-md);box-shadow:var(--shadow-lg)}.ingredient-picker-results>li>button{display:block;width:100%;text-align:left;border:0;background:transparent;border-radius:var(--radius-sm);font-weight:500}.ingredient-picker-results>li>button:hover:not(:disabled){background:var(--color-tag-background);color:var(--color-tag-text);border-color:transparent}.ingredient-create{display:flex;flex-direction:column;gap:var(--space-sm);padding:var(--space-sm);border-top:1px solid var(--color-border)}.category-row{display:flex;flex-wrap:wrap;gap:var(--space-xs)}.category-row>button{padding:var(--space-xs) var(--space-sm);min-height:30px;font-size:var(--text-caption);border-radius:var(--radius-pill)}.category-row>button[aria-pressed=true]{background:var(--color-primary);border-color:var(--color-primary);color:var(--color-primary-text)}.recipe-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:var(--space-md)}.recipe-list>p{grid-column:1 / -1;padding:var(--space-xl) var(--space-md);text-align:center;color:var(--color-text-muted);background:var(--color-surface-raised);border:1px dashed var(--color-border);border-radius:var(--radius-md)}.recipe-card{position:relative;display:flex;flex-direction:column;background:var(--color-surface-raised);border:1px solid var(--color-border);border-radius:var(--radius-md);overflow:hidden;box-shadow:var(--shadow-sm);transition:box-shadow var(--transition),border-color var(--transition),transform var(--transition)}.recipe-card:hover{box-shadow:var(--shadow-md);border-color:var(--color-text-muted);transform:translateY(-2px)}.recipe-card-link{display:flex;flex-direction:column;height:100%;color:inherit;text-decoration:none}.recipe-card-thumb{aspect-ratio:4 / 3;background:var(--color-surface);border-bottom:1px solid var(--color-border);overflow:hidden}.recipe-card-thumb>img{width:100%;height:100%;object-fit:cover}.recipe-card-body{display:flex;flex-direction:column;gap:var(--space-xs);padding:var(--space-md)}.recipe-card-body>h3{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.tags{display:flex;flex-wrap:wrap;gap:var(--space-xs);margin-top:var(--space-xs)}.favorite-heart{display:inline-flex;align-items:center;justify-content:center;width:38px;height:38px;min-height:0;padding:0;font-size:var(--text-body-large);line-height:1;color:var(--color-text-muted);border-radius:var(--radius-pill)}.favorite-heart[aria-pressed=true]{color:var(--color-danger)}.favorite-heart:hover:not(:disabled){color:var(--color-danger);border-color:var(--color-danger)}.recipe-card>.favorite-heart{position:absolute;top:var(--space-sm);right:var(--space-sm);background:var(--color-surface-raised);box-shadow:var(--shadow-sm)}.recipe-card-tags{padding:0 var(--space-md) var(--space-md);margin-top:calc(-1 * var(--space-xs))}[data-testid=recipes-scroll-sentinel]{height:1px}[data-testid=recipes-loading-more]{padding:var(--space-md);text-align:center;color:var(--color-text-muted)}@media(max-width:640px){.ingredient-filters{grid-template-columns:1fr}.ingredient-filters>.muted,.ingredient-filters>.ingredient-picker,.ingredient-filters>.chips-row{grid-column:1}.ingredient-filters>.muted{min-height:0}.filter-row select{margin-left:0;width:100%}.favorite-heart{width:var(--touch-target);height:var(--touch-target)}}.recipe-detail{max-width:var(--content-width-narrow);margin:0 auto;display:flex;flex-direction:column;gap:var(--space-md)}.recipe-detail>h2{margin-top:var(--space-sm);padding-bottom:var(--space-sm);border-bottom:1px solid var(--color-border)}.recipe-detail-hero{border-radius:var(--radius-lg);overflow:hidden;border:1px solid var(--color-border);background:var(--color-surface-raised)}.recipe-detail-hero>img{width:100%;max-height:420px;object-fit:cover}.recipe-detail-title-row{display:flex;align-items:center;gap:var(--space-sm)}.recipe-detail-title-row>h1{flex:1;min-width:0}.recipe-detail-title-row>a{padding:var(--space-sm) var(--space-md);min-height:38px;display:inline-flex;align-items:center;border:1px solid var(--color-border);border-radius:var(--radius-sm);background:var(--color-surface-raised);color:var(--color-text);font-weight:600;text-decoration:none;transition:background var(--transition-fast),border-color var(--transition-fast)}.recipe-detail-title-row>a:hover{background:var(--color-surface);border-color:var(--color-primary);color:var(--color-primary)}.serving-scaler{display:inline-flex;align-items:center;align-self:flex-start;gap:var(--space-sm);padding:var(--space-xs);background:var(--color-surface-raised);border:1px solid var(--color-border);border-radius:var(--radius-pill)}.serving-scaler>button{width:36px;height:36px;min-height:0;padding:0;display:inline-flex;align-items:center;justify-content:center;border-radius:var(--radius-pill);font-size:var(--text-body-large);line-height:1}.serving-scaler>span{min-width:96px;text-align:center;font-weight:600;font-variant-numeric:tabular-nums}.ingredient-list{display:flex;flex-direction:column;gap:var(--space-md);padding:var(--space-md) var(--space-lg);background:var(--color-surface-raised);border:1px solid var(--color-border);border-radius:var(--radius-md)}.ingredient-group-label{font-size:var(--text-caption);text-transform:uppercase;letter-spacing:.04em;color:var(--color-text-muted);margin-bottom:var(--space-xs)}.ingredient-list ul{margin:0;padding:0;list-style:none;display:flex;flex-direction:column}.ingredient-line{padding:var(--space-sm) 0;border-bottom:1px solid var(--color-border)}.ingredient-line:last-child{border-bottom:0}.quantity-text{position:relative;display:inline-block}.quantity-value{padding:1px var(--space-xs);min-height:0;border:0;border-radius:var(--radius-sm);background:transparent;color:var(--color-text);font-weight:700;font-variant-numeric:tabular-nums;text-decoration:underline dotted var(--color-text-muted);text-underline-offset:3px}.quantity-value:hover:not(:disabled){background:var(--color-tag-background);color:var(--color-tag-text);border-color:transparent}.quantity-swap-sheet{position:absolute;z-index:25;top:calc(100% + var(--space-xs));left:0;display:flex;flex-direction:column;gap:2px;min-width:160px;padding:var(--space-sm);background:var(--color-surface-raised);border:1px solid var(--color-border);border-radius:var(--radius-md);box-shadow:var(--shadow-lg);font-size:var(--text-caption);font-weight:600;color:var(--color-text);white-space:nowrap}.step-list{display:flex;flex-direction:column;gap:var(--space-lg)}.step-lane{display:flex;flex-direction:column;gap:var(--space-sm)}.lane-label{font-size:var(--text-caption);text-transform:uppercase;letter-spacing:.06em;color:var(--color-primary)}.lane-label:empty{display:none}.step-lane ol{margin:0;padding:0;list-style:none;counter-reset:step;display:flex;flex-direction:column;gap:var(--space-sm)}.step{counter-increment:step;position:relative;display:flex;flex-direction:column;gap:var(--space-sm);padding:var(--space-md) var(--space-md) var(--space-md) calc(var(--space-xl) + var(--space-md));background:var(--color-surface-raised);border:1px solid var(--color-border);border-radius:var(--radius-md)}.step:before{content:counter(step);position:absolute;left:var(--space-md);top:var(--space-md);width:26px;height:26px;display:inline-flex;align-items:center;justify-content:center;border-radius:var(--radius-pill);background:var(--color-tag-background);color:var(--color-tag-text);font-size:var(--text-caption);font-weight:700;font-variant-numeric:tabular-nums}.step-after{display:block;font-size:var(--text-caption);color:var(--color-text-muted);font-style:italic}.step-badges{display:flex;flex-wrap:wrap;gap:var(--space-xs)}.step-badges:empty{display:none}.version-history{display:flex;flex-direction:column;gap:var(--space-sm)}.version-history-list{display:flex;flex-direction:column;gap:var(--space-xs);padding:var(--space-md);background:var(--color-surface-raised);border:1px solid var(--color-border);border-radius:var(--radius-md)}.version-row{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-sm);padding:var(--space-xs) 0;border-bottom:1px solid var(--color-border)}.version-row:last-of-type{border-bottom:none}.version-label{flex:1 1 auto;min-width:0;font-weight:600}@media(max-width:640px){.recipe-detail-title-row{flex-wrap:wrap}.ingredient-list{padding:var(--space-md)}.quantity-swap-sheet{left:auto;right:0}}.recipe-editor-page{max-width:var(--content-width);margin:0 auto;display:flex;flex-direction:column;gap:var(--space-md)}.recipe-editor-page>h2{margin-top:var(--space-md);padding-bottom:var(--space-sm);border-bottom:1px solid var(--color-border)}.line{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-sm)}.editor-meta{display:grid;grid-template-columns:repeat(4,1fr);gap:var(--space-md);padding:var(--space-lg);background:var(--color-surface-raised);border:1px solid var(--color-border);border-radius:var(--radius-md)}.editor-meta>.field:nth-child(1),.editor-meta>.field:nth-child(3){grid-column:1 / -1}.editor-meta>.field:nth-child(2){grid-column:span 2}.editor-meta>.field:nth-child(1) input{font-size:var(--text-title);font-weight:650;min-height:var(--touch-target)}.tag-editor{display:flex;flex-direction:column;gap:var(--space-sm)}.tags-row{display:flex;flex-wrap:wrap;gap:var(--space-xs)}.tags-row:empty{display:none}.tag-add-row{display:flex;gap:var(--space-sm)}.tag-add-row>input{flex:1 1 220px;max-width:320px}.hero-photo-slot{display:flex;flex-direction:column;gap:var(--space-sm);align-items:flex-start}.hero-photo-dropzone{width:100%;max-width:420px;min-height:180px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--space-sm);padding:var(--space-md);text-align:center;color:var(--color-text-muted);background:var(--color-surface-raised);border:2px dashed var(--color-border);border-radius:var(--radius-md);transition:border-color var(--transition),background var(--transition)}.hero-photo-dropzone.drag-over{border-color:var(--color-primary);background:var(--color-tag-background);color:var(--color-tag-text)}.hero-photo-dropzone>img{max-height:260px;border-radius:var(--radius-sm);object-fit:cover}.hero-photo-actions{display:flex;gap:var(--space-sm)}.ingredient-row{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-sm);padding:var(--space-sm) var(--space-md);background:var(--color-surface-raised);border:1px solid var(--color-border);border-radius:var(--radius-md)}.ingredient-row+.ingredient-row{margin-top:calc(var(--space-xs) * -1 + var(--space-sm))}.ingredient-row-name{flex:1 1 160px;font-weight:600;min-width:0}.ingredient-row>input:nth-of-type(1){flex:0 0 88px;width:88px;min-width:0;text-align:right;font-variant-numeric:tabular-nums}.ingredient-row>select{flex:0 0 auto;max-width:150px}.ingredient-row>input:nth-of-type(2),.ingredient-row>input:nth-of-type(3){flex:1 1 200px;font-size:var(--text-caption)}.ingredient-row>[role=alert]{flex:1 1 100%}.drag-handle,[data-testid^=ingredient-move-],[data-testid^=step-move-],[data-testid^=step-lane-prev-],[data-testid^=step-lane-next-]{width:34px;min-height:34px;padding:0;display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;color:var(--color-text-muted);font-size:var(--text-caption)}.drag-handle{cursor:grab;touch-action:none;font-size:var(--text-body)}.drag-handle:active{cursor:grabbing}.step-reorder{display:inline-flex;align-items:center;gap:var(--space-xs)}.lane-columns{display:grid;grid-template-columns:repeat(auto-fit,minmax(320px,1fr));align-items:start;gap:var(--space-md)}.lane{display:flex;flex-direction:column;gap:var(--space-sm);padding:var(--space-md);background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-md)}.lane>h3{margin:0}.lane-name-input{width:100%;padding:var(--space-xs) var(--space-sm);border:1px solid transparent;border-radius:var(--radius-sm);background:transparent;font-size:var(--text-caption);font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--color-primary);min-height:34px}.lane-name-input::placeholder{color:var(--color-text-muted);font-weight:700}.lane-name-input:hover:not(:disabled){border-color:var(--color-border);background:var(--color-surface-raised)}.lane-name-input:focus-visible{background:var(--color-background);border-color:var(--color-primary)}.step-row{position:relative;display:flex;flex-direction:column;gap:var(--space-sm);padding:var(--space-md);background:var(--color-surface-raised);border:1px solid var(--color-border);border-radius:var(--radius-md);box-shadow:var(--shadow-sm)}.step-row>.step-index{position:absolute;left:var(--space-md);top:var(--space-md);width:24px;height:24px;display:inline-flex;align-items:center;justify-content:center;border-radius:var(--radius-pill);background:var(--color-tag-background);color:var(--color-tag-text);font-size:var(--text-caption);font-weight:700}.step-row>textarea{margin-left:calc(24px + var(--space-sm));width:calc(100% - 24px - var(--space-sm));font-size:var(--text-body)}.step-line{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-xs)}.step-line>input{flex:0 0 96px;width:96px;min-width:0;text-align:right;font-variant-numeric:tabular-nums}.step-dependencies{padding-top:var(--space-sm);border-top:1px dashed var(--color-border)}.step-dependencies>span:first-child{font-size:var(--text-caption);font-weight:700;text-transform:uppercase;letter-spacing:.04em;color:var(--color-text-muted);margin-right:var(--space-xs)}.step-dependencies>select{font-size:var(--text-caption);min-height:34px;max-width:240px}.step-line>[data-testid^=step-lane-label-]{font-size:var(--text-caption);font-weight:600;color:var(--color-text-muted);min-width:84px;text-align:center}[data-testid^=step-done-]{margin-left:auto}[data-testid^=step-remove-],[data-testid^=ingredient-remove-]{color:var(--color-danger);font-size:var(--text-caption)}[data-testid^=step-remove-]:hover:not(:disabled),[data-testid^=ingredient-remove-]:hover:not(:disabled){background:var(--color-danger-soft);border-color:var(--color-danger)}.step-row-collapsed{flex-direction:row;align-items:center;gap:var(--space-sm);padding:var(--space-xs) var(--space-sm);background:var(--color-surface);box-shadow:none}.step-row-collapsed:hover{border-color:var(--color-text-muted)}.step-summary{flex:1;min-width:0;display:flex;align-items:center;gap:var(--space-sm);padding:var(--space-xs) var(--space-sm);text-align:left;background:transparent;border:0;font-weight:500}.step-summary:hover:not(:disabled){background:transparent;border-color:transparent}.step-summary>.step-index{flex:0 0 auto;font-weight:700;color:var(--color-text-muted);font-variant-numeric:tabular-nums}.step-summary-text{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.step-summary>.step-badges{flex:0 0 auto}.recipe-editor-draft-prompt{max-width:520px;margin:var(--space-xl) auto;display:flex;flex-direction:column;gap:var(--space-md);padding:var(--space-lg);background:var(--color-surface-raised);border:1px solid var(--color-border);border-radius:var(--radius-lg);box-shadow:var(--shadow-md)}@media(max-width:640px){.editor-meta{grid-template-columns:repeat(2,1fr);padding:var(--space-md)}.editor-meta>.field:nth-child(2){grid-column:1 / -1}.ingredient-row>input:nth-of-type(2),.ingredient-row>input:nth-of-type(3){flex:1 1 100%}.step-row>textarea{margin-left:0;width:100%}.step-row>.step-index{position:static}}.cook-log-page{display:flex;flex-direction:column;gap:var(--space-md)}.cook-log-days{display:flex;flex-direction:column;gap:var(--space-lg)}.cook-log-day-heading{font-size:var(--text-caption);text-transform:uppercase;letter-spacing:.04em;color:var(--color-text-muted);margin-bottom:var(--space-sm)}.cook-log-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:var(--space-md)}.cook-log-card{display:flex;align-items:center;gap:var(--space-md);padding:var(--space-sm);text-align:left;background:var(--color-surface-raised);border:1px solid var(--color-border);border-radius:var(--radius-md);box-shadow:var(--shadow-sm)}.cook-log-card:hover:not(:disabled){border-color:var(--color-text-muted);background:var(--color-surface-raised)}.cook-log-thumb{width:64px;height:64px;flex-shrink:0;border-radius:var(--radius-sm);object-fit:cover;background:var(--color-surface)}.cook-log-thumb-placeholder{background:var(--color-surface);border:1px dashed var(--color-border)}.cook-log-card-body{display:flex;flex-direction:column;gap:2px;min-width:0}.cook-log-card-body>h3{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cook-log-card-row{display:flex;align-items:center;gap:var(--space-sm);margin-top:2px}.cook-log-note-badge{display:inline-flex;align-items:center;justify-content:center;min-width:20px;height:20px;padding:0 6px;border-radius:var(--radius-pill);background:var(--color-surface);border:1px solid var(--color-border);font-size:var(--text-caption);font-weight:700;color:var(--color-text-muted)}.rating-stars{display:inline-flex;align-items:center;gap:2px}.rating-star{padding:0;min-height:0;width:28px;height:28px;display:inline-flex;align-items:center;justify-content:center;border:0;background:transparent;font-size:var(--text-body-large);color:var(--color-border)}.rating-star-filled{color:var(--color-primary)}.rating-star:disabled{opacity:1;cursor:default}.cook-detail{max-width:var(--content-width-narrow);margin:0 auto;display:flex;flex-direction:column;gap:var(--space-sm)}.cook-detail-title-row{display:flex;align-items:baseline;justify-content:space-between;gap:var(--space-sm)}.cook-detail-verdict-row{display:flex;gap:var(--space-sm)}.cook-detail-verdict-row>button[aria-pressed=true]{background:var(--color-primary);border-color:var(--color-primary);color:var(--color-primary-text)}.cook-detail-photos{display:flex;flex-wrap:wrap;gap:var(--space-sm)}.cook-detail-photos img{width:96px;height:96px;border-radius:var(--radius-sm);object-fit:cover}.cook-detail-notes{display:flex;flex-direction:column;gap:var(--space-sm)}.cook-detail-note{padding:var(--space-sm) var(--space-md);background:var(--color-surface-raised);border:1px solid var(--color-border);border-radius:var(--radius-md)}.pantry-page{max-width:var(--content-width-narrow);margin:0 auto;display:flex;flex-direction:column;gap:var(--space-lg)}.pantry-head{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:var(--space-sm)}.pantry-error{color:var(--color-danger);background:var(--color-danger-soft);padding:var(--space-sm) var(--space-md);border-radius:var(--radius-sm)}.pantry-empty{color:var(--color-text-muted);max-width:46ch}.pantry-group{display:flex;flex-direction:column;gap:var(--space-sm)}.pantry-group>h2{font-size:var(--text-caption);font-weight:700;text-transform:uppercase;letter-spacing:.04em;color:var(--color-text-muted);margin:0}.pantry-list{margin:0;padding:0;list-style:none;display:flex;flex-direction:column}.pantry-row{display:flex;align-items:center;gap:var(--space-md);padding:var(--space-xs) 0;border-bottom:1px solid var(--color-border)}.pantry-name{flex:1;font-size:var(--text-body-large)}.pantry-status{flex:0 0 auto;min-width:4.5rem;min-height:var(--touch-target);border-radius:var(--radius-md);border:2px solid var(--color-border);background:var(--color-surface);color:var(--color-text-muted);font-weight:700;font-size:var(--text-body);cursor:pointer;transition:border-color var(--transition-fast),color var(--transition-fast)}.pantry-status-ok{border-color:var(--color-border);color:var(--color-text-muted)}.pantry-status-low{background:var(--color-tag-background);border-color:var(--color-tag-text);color:var(--color-tag-text)}.pantry-status-out{background:var(--color-danger-soft);border-color:var(--color-danger);color:var(--color-danger)}.pantry-staple,.pantry-remove{flex:0 0 auto;min-width:var(--touch-target);min-height:var(--touch-target);border:none;background:none;color:var(--color-text-muted);font-size:var(--text-body-large);cursor:pointer}.pantry-staple[aria-pressed=true]{color:var(--color-primary)}.pantry-remove:hover{color:var(--color-danger)}.pantry-remove-confirm{flex:0 0 auto;min-height:var(--touch-target);padding:0 var(--space-md);border:1px solid var(--color-danger);border-radius:var(--radius-md);background:var(--color-danger-soft);color:var(--color-danger);font-weight:700;cursor:pointer}.stock-picker{display:flex;flex-direction:column;gap:var(--space-md);padding:var(--space-md);background:var(--color-surface-raised);border:1px solid var(--color-border);border-radius:var(--radius-md);box-shadow:var(--shadow-sm);max-height:70vh;overflow-y:auto}.stock-picker-head{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:var(--space-sm)}.stock-picker-head>h2{margin:0;font-size:var(--text-title)}.stock-picker>input{min-height:var(--touch-target);padding:0 var(--space-sm)}.stock-picker-group{display:flex;flex-direction:column;gap:var(--space-xs)}.stock-picker-group>h3{margin:0;font-size:var(--text-caption);font-weight:700;text-transform:uppercase;letter-spacing:.04em;color:var(--color-text-muted)}.stock-picker-list{margin:0;padding:0;list-style:none;display:grid;grid-template-columns:repeat(auto-fill,minmax(16rem,1fr));gap:2px}.stock-picker-list label{display:flex;align-items:center;gap:var(--space-sm);min-height:var(--touch-target);cursor:pointer}.settings-page{max-width:var(--content-width-narrow);margin:0 auto;display:flex;flex-direction:column;gap:var(--space-lg)}.settings-section{display:flex;flex-direction:column;gap:var(--space-sm);padding:var(--space-md);background:var(--color-surface-raised);border:1px solid var(--color-border);border-radius:var(--radius-md)}.settings-identity-name,.settings-household-name{font-size:var(--text-body-large);font-weight:650}.settings-members{margin:0;padding:0;list-style:none;display:flex;flex-direction:column;gap:2px}.settings-invite{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-sm)}.settings-invite-code{font-size:var(--text-title);font-weight:700;font-variant-numeric:tabular-nums;letter-spacing:.06em}.settings-invite-code-fallback{font-size:var(--text-body-large);font-weight:700;letter-spacing:.06em;text-align:center;min-width:160px}.settings-sign-out{align-self:flex-start;color:var(--color-danger)}.settings-sign-out:hover:not(:disabled){background:var(--color-danger-soft);border-color:var(--color-danger)}.settings-confirm{display:flex;flex-direction:column;gap:var(--space-sm)}.settings-confirm-actions{display:flex;flex-wrap:wrap;gap:var(--space-sm)}.settings-danger{border-color:var(--color-danger)}.settings-danger>h2{color:var(--color-danger)}.settings-danger>button{align-self:flex-start}.settings-rename{display:flex;flex-wrap:wrap;align-items:flex-end;gap:var(--space-sm)}.settings-rename .field{flex:1 1 200px;min-width:0}.settings-members li{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-xs);padding:var(--space-xs) 0}.settings-member-actions{display:flex;flex-wrap:wrap;gap:var(--space-xs);margin-left:auto}.settings-member-actions button,.settings-invite-list button{min-height:36px}.settings-invite-list{display:flex;flex-direction:column;gap:var(--space-sm)}.settings-invite-list ul{margin:0;padding:0;list-style:none;display:flex;flex-direction:column;gap:var(--space-xs)}.settings-invite-list li{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-xs)}.settings-invite-list-code{font-weight:700;letter-spacing:.06em;font-variant-numeric:tabular-nums}.settings-invite-status-used,.settings-invite-status-expired,.settings-invite-status-revoked{background:var(--color-surface);color:var(--color-text-muted)}.favorites-manager{display:flex;flex-direction:column;gap:var(--space-sm)}.favorites-manager-list{margin:0;padding:0;list-style:none;display:flex;flex-direction:column;gap:var(--space-xs)}.favorites-manager-row{display:flex;align-items:center;gap:var(--space-sm);padding:var(--space-xs) 0}.favorites-manager-name{flex:1;font-weight:600}.favorites-manager-create{display:flex;gap:var(--space-sm)}.lists-caret{position:relative}.add-to-list-caret{display:flex;flex-direction:column;gap:var(--space-xs);padding:var(--space-sm) var(--space-md);background:var(--color-surface-raised);border:1px solid var(--color-border);border-radius:var(--radius-md)}.add-to-list-options{margin:0;padding:0;list-style:none;display:flex;flex-direction:column;gap:var(--space-xs)}.add-to-list-options label{display:flex;align-items:center;gap:var(--space-sm);text-transform:none;font-weight:500;color:var(--color-text)}@media print{.app-nav,.skip-link,.favorite-heart,.lists-caret,.add-to-list-caret,.recipe-detail-hero,.serving-scaler>button,.quantity-swap-sheet,[data-testid=recipe-detail-edit],[data-testid=recipe-detail-cook-on-phone],[data-testid=recipe-detail-cooked-count],[data-testid=recipe-detail-print]{display:none!important}body{background:#fff;color:#000}.recipe-detail{max-width:none}.step,.ingredient-list,.recipe-card,.cook-log-card{box-shadow:none;border:1px solid #ccc}.step:before{background:none;border:1px solid #000}a{color:inherit;text-decoration:none}.step-lane{break-inside:avoid}}
