.app-shell{grid-template-rows:auto 1fr;min-height:100vh;display:grid}.nav-bar{background:var(--surface);border-bottom:1px solid var(--border);z-index:10;padding:0 1.5rem;position:sticky;top:0}.nav-bar-inner{align-items:center;gap:2rem;max-width:1100px;min-height:3.5rem;margin:0 auto;display:flex}.nav-brand{color:var(--ink);align-items:center;gap:.5rem;font-size:1.05rem;font-weight:700;text-decoration:none;display:flex}.nav-links{align-items:center;gap:.25rem;display:flex}.nav-link{border-radius:var(--radius-sm);color:var(--ink-muted);padding:.45rem .75rem;font-size:.9rem;font-weight:500;text-decoration:none;transition:color .15s,background .15s}.nav-link:hover{background:var(--accent-subtle);color:var(--ink)}.nav-link.active{background:var(--accent-subtle);color:var(--accent);font-weight:600}.nav-spacer{flex:1}.nav-user{align-items:center;gap:.75rem;display:flex}.nav-user-name{color:var(--ink-muted);font-size:.85rem}.nav-logout{border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--ink-muted);cursor:pointer;background:0 0;padding:.35rem .7rem;font-size:.8rem;font-weight:500;transition:border-color .15s,color .15s}.nav-logout:hover{border-color:var(--border-strong);color:var(--ink)}.page-shell{flex-direction:column;gap:1.5rem;max-width:1100px;margin:0 auto;padding:2rem 1.5rem 3rem;animation:.3s ease-out fadeIn;display:flex}.page-header{justify-content:space-between;align-items:flex-start;gap:1rem;display:flex}.page-header h1{margin-bottom:.25rem}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);box-shadow:var(--shadow-sm);padding:1.5rem}.card:hover{box-shadow:var(--shadow-md)}.hero-card{justify-content:space-between;align-items:center;gap:1.5rem;display:flex}.dashboard-grid{grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:1.5rem;display:grid}.eyebrow{color:var(--accent);margin-bottom:.35rem;font-size:.8rem;font-weight:600}.supporting-copy{color:var(--ink-muted);max-width:60ch;line-height:1.6}.stack{flex-direction:column;gap:.75rem;display:flex}.detail-list{gap:.6rem;display:grid}.detail-list dt{color:var(--ink-dim);font-size:.85rem;font-weight:500}.detail-list dd{margin:.1rem 0 0;font-weight:500}.field{flex-direction:column;gap:.35rem;display:flex}.field span,.field label{color:var(--ink-muted);font-size:.85rem;font-weight:600}.field input,.field textarea,.field select,.field-control{background:var(--surface);border:1px solid var(--border-strong);border-radius:var(--radius-md);color:var(--ink);font:inherit;padding:.7rem .85rem;transition:border-color .15s,box-shadow .15s}.field textarea{resize:vertical;min-height:6rem}.field input:focus,.field textarea:focus,.field select:focus,.field-control:focus{border-color:var(--accent);outline:none;box-shadow:0 0 0 3px oklch(58% .16 28/.1)}.field input::placeholder,.field textarea::placeholder{color:var(--ink-dim)}.primary-button,.secondary-button{border-radius:var(--radius-md);cursor:pointer;font:inherit;border:none;justify-content:center;align-items:center;gap:.4rem;padding:.7rem 1.25rem;font-weight:600;text-decoration:none;transition:transform .12s,box-shadow .15s,background .15s;display:inline-flex}.primary-button{background:var(--accent);box-shadow:var(--shadow-sm);color:#fff}.primary-button:hover{background:var(--accent-hover);box-shadow:var(--shadow-md);transform:translateY(-1px)}.primary-button:active{transform:translateY(0)}.secondary-button{background:var(--surface);border:1px solid var(--border-strong);color:var(--ink)}.secondary-button:hover{border-color:var(--accent);background:oklch(97% 0 0);transform:translateY(-1px)}.secondary-button:active{transform:translateY(0)}.primary-button:disabled,.secondary-button:disabled{cursor:not-allowed;opacity:.5;transform:none}.text-link{color:var(--accent);align-items:center;gap:.3rem;font-weight:600;text-decoration:none;display:inline-flex}.text-link:hover{color:var(--accent-hover);text-decoration:underline}.text-button{color:var(--accent);cursor:pointer;background:0 0;border:none;padding:0;font-size:.85rem;font-weight:500}.text-button:hover{text-decoration:underline}.text-button--danger{color:var(--error)}.small-button{background:var(--green-subtle);border:1px solid var(--green);border-radius:var(--radius-sm);color:var(--green);cursor:pointer;padding:.35rem .7rem;font-size:.8rem;font-weight:600;transition:background .15s}.small-button:hover{background:oklch(90% .06 155)}.danger-button{border-color:var(--error);color:var(--error)}.invite-link{background:var(--accent-subtle);border:1px dashed var(--accent);border-radius:var(--radius-md);overflow-wrap:anywhere;margin:.75rem 0 .5rem;padding:.75rem 1rem;font-family:monospace;font-size:.85rem}.member-grid{grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:1rem;margin:1.5rem 0;display:grid}.member-card{background:var(--surface-raised);border:1px solid var(--border);border-radius:var(--radius-md);padding:1rem;transition:box-shadow .15s}.member-card:hover{box-shadow:var(--shadow-md)}.member-card h2{margin-bottom:.25rem;font-size:1rem}.inline-error,.error-card{background:var(--error-subtle);border-radius:var(--radius-md);color:var(--error);border:1px solid oklch(55% .2 25/.2);padding:1rem}.error-details-toggle{color:var(--accent);cursor:pointer;background:0 0;border:none;padding:0;font-size:.8rem;text-decoration:underline}.error-details{border:1px solid var(--border);border-radius:var(--radius-sm);white-space:pre-wrap;word-break:break-word;background:oklch(97% 0 0);max-height:200px;margin-top:.5rem;padding:.5rem .75rem;font-size:.8rem;overflow:auto}.error-text{color:var(--error);font-size:.85rem}.success-card{background:var(--green-subtle);border:1px solid var(--green);border-radius:var(--radius-md);color:var(--green);padding:1rem}.pantry-header{justify-content:space-between;align-items:flex-start;gap:1.5rem;display:flex}.pantry-form-grid{grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:1rem;display:grid}.pantry-summary{color:var(--ink-muted);margin-top:.5rem}.pantry-groups{flex-direction:column;gap:1.5rem;margin-top:1.5rem;display:flex}.pantry-group{flex-direction:column;gap:.75rem;display:flex}.pantry-group-header{justify-content:space-between;align-items:center;display:flex}.pantry-group-header h3{margin:0}.pantry-group-header span{color:var(--ink-dim);font-size:.85rem}.pantry-item-list{gap:.5rem;display:grid}.pantry-item-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md);justify-content:space-between;align-items:center;gap:1rem;padding:.85rem 1rem;transition:box-shadow .15s;display:flex}.pantry-item-card:hover{box-shadow:var(--shadow-sm)}.pantry-item-card h4{margin:0 0 .15rem}.pantry-item-actions{flex-wrap:wrap;justify-content:flex-end;align-items:flex-end;gap:.5rem;display:flex}.pantry-inline-field{min-width:100px}.pantry-unit{color:var(--ink-dim);padding-bottom:.7rem;font-weight:600}.grocery-header-actions{flex-wrap:wrap;justify-content:flex-end;gap:.5rem;display:flex}.grocery-summary-card{margin-top:0}.empty-state-card{background:var(--surface);border:1px dashed var(--border-strong);text-align:center;align-items:center;padding:3rem 2rem}.empty-state-card .supporting-copy{margin:.5rem auto 1.25rem}.empty-state-icon{margin-bottom:.75rem;font-size:3rem}.grocery-groups{flex-direction:column;gap:1.5rem;display:flex}.grocery-group{flex-direction:column;gap:.5rem;display:flex}.grocery-item-list{gap:.4rem;display:grid}.grocery-item-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md);cursor:pointer;align-items:flex-start;gap:.75rem;padding:.85rem 1rem;transition:background .12s,box-shadow .12s;display:flex}.grocery-item-card:hover{box-shadow:var(--shadow-sm);background:oklch(98% .005 50)}.grocery-checkbox-wrap{padding-top:.15rem}.grocery-checkbox-wrap input{accent-color:var(--green);width:1.1rem;height:1.1rem}.grocery-item-copy{flex:1}.grocery-item-title-row{justify-content:space-between;align-items:flex-start;gap:.75rem;display:flex}.grocery-item-title-row h3{margin:0 0 .2rem}.grocery-item-quantity{color:var(--ink);white-space:nowrap;font-weight:700}.no-print{display:inherit}.planner-hero{justify-content:space-between;align-items:flex-start;gap:1.5rem;display:flex}.planner-toolbar,.planner-nav,.planner-week-switcher{gap:.5rem;display:flex}.planner-toolbar{flex-direction:column;align-items:flex-end}.planner-nav{flex-wrap:wrap;margin-top:.75rem}.planner-nav-link{border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--accent);background:oklch(97% 0 0);padding:.4rem .8rem;font-size:.85rem;font-weight:600;text-decoration:none;transition:background .12s,border-color .12s}.planner-nav-link:hover{background:var(--accent-subtle);border-color:var(--accent)}.planner-week-switcher{flex-wrap:wrap;justify-content:flex-end;align-items:center}.planner-week-label{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md);flex-direction:column;align-items:center;min-width:160px;padding:.6rem 1rem;display:flex}.planner-week-label span{color:var(--ink-dim);font-size:.8rem}.planner-layout{grid-template-columns:minmax(260px,300px) minmax(0,1fr);gap:1.5rem;display:grid}.planner-settings-card,.planner-board-card{height:fit-content}.planner-settings-days{grid-template-columns:repeat(2,minmax(0,1fr));gap:.5rem;display:grid}.planner-checkbox{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-sm);align-items:center;gap:.5rem;padding:.6rem .85rem;display:flex}.planner-checkbox input{accent-color:var(--green)}.planner-servings-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:.6rem;display:grid}.planner-servings-field span{font-size:.8rem}.planner-board-header{justify-content:space-between;align-items:flex-start;gap:1rem;margin-bottom:1rem;display:flex}.planner-grid{grid-template-columns:repeat(7,minmax(160px,1fr));gap:.75rem;padding-bottom:.25rem;display:grid;overflow-x:auto}.day-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);flex-direction:column;gap:.65rem;min-height:100%;padding:1rem;transition:border-color .15s,box-shadow .15s,transform .15s;display:flex}.day-card:hover{border-color:var(--border-strong);box-shadow:var(--shadow-md);transform:translateY(-2px)}.day-card--locked{border-color:var(--accent)}.day-card--skipped{opacity:.6}.day-card--dragging,.day-card--over{border-color:var(--green);box-shadow:0 8px 24px oklch(55% .14 155/.12)}.day-card-header,.day-card-state-row,.day-card-actions,.day-card-meta{display:flex}.day-card-header,.day-card-state-row{justify-content:space-between;align-items:flex-start}.day-card-header h3,.day-card-body h4{margin:0}.day-card-drag-handle{border:1px dashed var(--border-strong);border-radius:var(--radius-sm);color:var(--ink-dim);cursor:grab;font:inherit;background:oklch(96% 0 0);min-width:2.2rem;padding:.35rem .6rem;font-weight:700;transition:background .12s,border-color .12s}.day-card-drag-handle:hover:not(:disabled){background:var(--accent-subtle);border-color:var(--accent)}.day-card-drag-handle:disabled{cursor:not-allowed;opacity:.35}.state-pill{border-radius:var(--radius-sm);padding:.25rem .6rem;font-size:.72rem;font-weight:600}.state-pill--active{background:var(--green-subtle);color:var(--green);border:1px solid oklch(55% .14 155/.3)}.state-pill--skipped{border:1px solid var(--border);color:var(--ink-dim);background:oklch(95% 0 0)}.state-pill--locked{background:var(--accent-subtle);color:var(--accent);border:1px solid oklch(58% .16 28/.3)}.day-card-image{aspect-ratio:16/10;border-radius:var(--radius-md);object-fit:cover;background:oklch(96% 0 0);width:100%}.day-card-image--placeholder{color:var(--ink-dim);justify-content:center;align-items:center;font-size:2rem;display:flex;overflow:hidden}.day-card-body{flex-direction:column;flex:1;gap:.5rem;display:flex}.day-card-meta{color:var(--ink-dim);flex-wrap:wrap;gap:.6rem;font-size:.8rem}.day-card-link{margin-top:0}.day-card-actions{flex-wrap:wrap;gap:.5rem}.day-card-action{flex:100px}.day-card-paste-form,.history-header-actions{flex-direction:column;gap:.5rem;display:flex}.history-filter-grid{grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:.75rem;display:grid}.history-checkbox{color:var(--ink-muted);align-items:center;gap:.5rem;margin-top:.75rem;display:inline-flex}.history-list{flex-direction:column;gap:.75rem;display:flex}.history-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md);flex-direction:column;gap:.75rem;padding:1rem;transition:box-shadow .15s;display:flex}.history-card:hover{box-shadow:var(--shadow-sm)}.history-card h3{margin:0 0 .25rem}.history-card-header,.history-entry-controls{justify-content:space-between;align-items:flex-start;gap:1rem;display:flex}.history-entry-controls{flex-wrap:wrap}.history-entry-actions{flex-wrap:wrap;justify-content:flex-end;align-items:center;gap:.5rem;display:flex}.history-control-label{color:var(--ink-dim);margin:0 0 .35rem;font-size:.85rem}.history-notes{flex-direction:column;gap:.5rem;display:flex}.history-notes-input{width:100%}.history-notes-toggle{margin-top:0}.star-rating{gap:.15rem;display:inline-flex}.star-button{color:var(--border-strong);cursor:pointer;background:0 0;border:none;padding:0;font-size:1.4rem;line-height:1}.star-button.is-filled{color:oklch(75% .15 85)}.star-rating.is-readonly .star-button{cursor:default}.favorite-button{border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--ink-dim);cursor:pointer;background:0 0;min-width:2.5rem;padding:.45rem .7rem;font-size:1rem;line-height:1;transition:border-color .12s,color .12s}.favorite-button.is-active{border-color:var(--error);color:var(--error)}.dietary-restrictions-section{border-top:1px solid var(--border);margin-top:1.5rem;padding-top:1.5rem}.dietary-restrictions-section h2{margin-bottom:.25rem}.preset-grid{flex-wrap:wrap;gap:.4rem;margin:.75rem 0;display:flex}.preset-chip{background:var(--surface);border:1px solid var(--border-strong);color:var(--ink);cursor:pointer;border-radius:2rem;align-items:center;gap:.35rem;padding:.4rem .9rem;font-size:.85rem;transition:all .12s;display:inline-flex}.preset-chip:hover{background:var(--accent-subtle);border-color:var(--accent)}.preset-chip--active{background:var(--green-subtle);border-color:var(--green);color:var(--green)}.preset-chip__check{color:var(--green);font-weight:700}.active-restrictions{margin:1.25rem 0}.active-restrictions h3{margin-bottom:.5rem}.restriction-card{background:var(--surface-raised);border:1px solid var(--border);border-radius:var(--radius-md);margin-bottom:.6rem;padding:.85rem 1rem}.restriction-card__header{justify-content:space-between;align-items:flex-start;gap:.75rem;display:flex}.restriction-card__actions{gap:.5rem;display:flex}.substitution-list{margin-top:.75rem}.substitution-table{border-collapse:collapse;width:100%;font-size:.8rem}.substitution-table th{border-bottom:1px solid var(--border);color:var(--ink-dim);text-align:left;padding:.35rem .5rem;font-weight:600}.substitution-table td{border-bottom:1px solid oklch(94% 0 0);padding:.35rem .5rem}.add-substitution-row{flex-wrap:wrap;align-items:center;gap:.4rem;margin-top:.5rem;display:flex}.add-substitution-row input,.add-substitution-row select{background:var(--surface);border:1px solid var(--border-strong);border-radius:var(--radius-sm);color:var(--ink);padding:.35rem .5rem;font-size:.8rem}.add-substitution-row input{flex:1;min-width:100px}.custom-restriction-form{background:var(--surface-raised);border:1px solid var(--border);border-radius:var(--radius-md);margin-top:.75rem;padding:1rem}.custom-restriction-form h3{margin-bottom:.75rem}.custom-restriction-form h4{margin-top:.75rem;margin-bottom:.35rem}.form-field{margin-bottom:.6rem}.form-field label{color:var(--ink-dim);margin-bottom:.2rem;font-size:.8rem;font-weight:500;display:block}.form-field input{background:var(--surface);border:1px solid var(--border-strong);border-radius:var(--radius-sm);color:var(--ink);width:100%;padding:.45rem .65rem;font-size:.85rem}.substitution-preview{margin:.4rem 0;padding:0;font-size:.8rem;list-style:none}.substitution-preview li{align-items:center;gap:.4rem;padding:.2rem 0;display:flex}.form-actions{gap:.5rem;margin-top:1rem;display:flex}.admin-success{background:var(--green-subtle);border-color:var(--green);color:var(--green)}.admin-timestamp{color:var(--ink-dim);font-size:.75rem}.admin-services{flex-direction:column;gap:.4rem;display:flex}.admin-service-row{align-items:center;gap:.5rem;display:flex}.admin-status-dot{background:var(--ink-dim);border-radius:50%;width:8px;height:8px}.admin-status-dot.ok{background:var(--green)}.admin-status-dot.error{background:var(--error)}.include-ingredients-section{border-top:1px solid var(--border);margin-top:1rem;padding-top:1rem}.include-ingredients{flex-direction:column;gap:.35rem;display:flex}.include-ingredients-label{color:var(--ink-muted);font-size:.85rem;font-weight:600}.include-ingredients-hint{margin-bottom:.25rem;font-size:.8rem}.include-ingredients-field{background:var(--surface);border:1px solid var(--border-strong);border-radius:var(--radius-md);flex-wrap:wrap;align-items:center;gap:.35rem;min-height:2.75rem;padding:.45rem .65rem;transition:border-color .15s,box-shadow .15s;display:flex}.include-ingredients-field:focus-within{border-color:var(--accent);box-shadow:0 0 0 3px oklch(58% .16 28/.1)}.include-ingredients-tag{background:var(--green-subtle);color:var(--green);border:1px solid oklch(55% .14 155/.25);border-radius:2rem;align-items:center;gap:.25rem;padding:.25rem .6rem;font-size:.8rem;font-weight:600;display:inline-flex}.include-ingredients-tag-remove{color:var(--green);cursor:pointer;background:0 0;border:none;border-radius:50%;justify-content:center;align-items:center;width:1.2rem;height:1.2rem;padding:0;font-size:1rem;line-height:1;transition:background .12s,color .12s;display:inline-flex}.include-ingredients-tag-remove:hover{color:oklch(40% .14 155);background:oklch(55% .14 155/.15)}.include-ingredients-input{color:var(--ink);font:inherit;background:0 0;border:none;outline:none;flex:1;min-width:120px;padding:.2rem 0;font-size:.85rem}.include-ingredients-input::placeholder{color:var(--ink-dim)}.skeleton{border-radius:var(--radius-sm);background:linear-gradient(90deg,oklch(94% 0 0) 25%,oklch(91% 0 0) 50%,oklch(94% 0 0) 75%) 0 0/200% 100%;animation:1.5s infinite shimmer}.skeleton-line{width:80%;height:.9rem;margin-bottom:.6rem}.skeleton-line:last-child{width:55%}.skeleton-card{flex-direction:column;gap:.5rem;display:flex}.skeleton-card:hover{box-shadow:var(--shadow-sm)}.skeleton-mt{margin-top:.6rem}.skeleton-mt-xs{margin-top:.3rem}.skeleton-stack{flex-direction:column;gap:.6rem;margin-top:.8rem;display:flex}.skeleton-row{align-items:center;gap:.75rem;display:flex}.skeleton-toolbar{align-items:center;gap:.5rem;display:flex}.skeleton-day-grid{grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:1rem;display:grid}.skeleton-grocery-groups{flex-direction:column;gap:1rem;display:flex}.login-hero{text-align:center;flex-direction:column;justify-content:center;align-items:center;gap:1.5rem;min-height:70vh;padding:3rem 2rem;display:flex}.login-brand{align-items:center;gap:.6rem;margin-bottom:.75rem;display:flex}.login-brand-icon{font-size:2rem}.login-brand .eyebrow{margin:0}.login-cta{padding:.85rem 2rem;font-size:1rem}@media (width<=768px){.nav-bar-inner{gap:.75rem}.nav-links{gap:0;overflow-x:auto}.nav-user-name{display:none}.hero-card,.pantry-header,.pantry-item-card,.pantry-item-actions,.planner-hero,.planner-toolbar,.grocery-item-title-row,.history-card-header,.history-entry-controls,.history-entry-actions{flex-direction:column;align-items:flex-start}.pantry-item-actions,.history-header-actions,.grocery-header-actions{width:100%}.planner-toolbar,.planner-week-switcher{align-items:stretch}.planner-layout,.planner-grid,.planner-settings-days,.planner-servings-grid{grid-template-columns:1fr}.page-shell{padding:1.25rem 1rem 2rem}}@media print{:root{color:#0f172a;background:#fff}.nav-bar{display:none}.page-shell{gap:1rem;padding:0}.card,.grocery-item-card{box-shadow:none;background:#fff;border:1px solid #cbd5e1}.no-print{display:none!important}}:root{--canvas:oklch(97.5% 0 0);--surface:oklch(100% 0 0);--surface-raised:oklch(99% 0 0);--ink:oklch(20% .01 50);--ink-muted:oklch(45% .01 50);--ink-dim:oklch(60% .01 50);--accent:oklch(58% .16 28);--accent-hover:oklch(52% .17 28);--accent-subtle:oklch(95% .03 28);--green:oklch(55% .14 155);--green-subtle:oklch(94% .04 155);--border:oklch(91% .005 50);--border-strong:oklch(82% .01 50);--error:oklch(55% .2 25);--error-subtle:oklch(95% .03 25);--shadow-sm:0 1px 3px oklch(0% 0 0/.05);--shadow-md:0 4px 12px oklch(0% 0 0/.07);--shadow-lg:0 12px 32px oklch(0% 0 0/.1);--radius-sm:.5rem;--radius-md:.75rem;--radius-lg:1rem;color:var(--ink);background:var(--canvas);font-synthesis:none;text-rendering:optimizelegibility;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Inter,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;font-weight:400;line-height:1.5}*{box-sizing:border-box}body{min-height:100vh;margin:0}button,input,select,textarea{font:inherit}a{color:inherit}h1,h2,h3,p{margin-top:0}h1{letter-spacing:-.02em;text-wrap:balance;font-size:1.75rem;font-weight:800;line-height:1.2}h2{letter-spacing:-.01em;text-wrap:balance;font-size:1.25rem;font-weight:700;line-height:1.3}h3{font-size:1.05rem;font-weight:700;line-height:1.3}#root{min-height:100vh}@keyframes fadeIn{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}@keyframes pulse{0%,to{opacity:1}50%{opacity:.5}}@keyframes shimmer{0%{background-position:-200% 0}to{background-position:200% 0}}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}
