:root{--primary-color: #3e7350;--primary-hover: #2f5c3f;--accent: #c2622f;--accent-hover: #a64e24;--bg-primary: #fcfaf4;--bg-secondary: #f3eddf;--text-primary: #2c2820;--text-secondary: #71695a;--border-color: #e2d9c6;--success-bg: #e3efe2;--success-text: #2c5e35;--success-border: #b7d4b8;--warning-bg: #f8ecd2;--warning-text: #8a5a17;--warning-border: #e5cb93;--danger: #b3402f;--danger-hover: #993526;--danger-bg: #f7e3df;--danger-text: #8c3325;--danger-border: #e5bdb4;--info-text: #3e5a7d;--cat-main: #c2622f;--cat-vegetable: #3e7350;--cat-grain: #a87f24;--cat-other: #67779b;--star: #d99a2b;--radius-sm: 6px;--radius-md: 10px;--radius-lg: 16px;--radius-pill: 999px;--shadow-rest: 0 1px 2px rgba(58, 48, 28, .06), 0 1px 1px rgba(58, 48, 28, .04);--shadow-raised: 0 6px 20px rgba(58, 48, 28, .12);--shadow-overlay: 0 16px 44px rgba(40, 32, 16, .2);--ring: color-mix(in srgb, var(--primary-color) 30%, transparent);--font-display: "Fraunces", Georgia, "Times New Roman", serif;--font-body: "Nunito Sans", system-ui, -apple-system, BlinkMacSystemFont, sans-serif;font-family:var(--font-body);line-height:1.6;font-weight:400;font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}@media(prefers-color-scheme:dark){:root{--primary-color: #57926a;--primary-hover: #69a67c;--accent: #d07b46;--accent-hover: #dd8e5c;--bg-primary: #20241c;--bg-secondary: #2a2f24;--text-primary: #ece7d9;--text-secondary: #a9a395;--border-color: #3e4435;--success-bg: #24352a;--success-text: #a7d8b4;--success-border: #36543f;--warning-bg: #3a3220;--warning-text: #e3c27b;--warning-border: #5a4c2a;--danger: #cf6a57;--danger-hover: #db7e6c;--danger-bg: #3d2326;--danger-text: #f1b6bb;--danger-border: #5c3136;--info-text: #9db4dd;--cat-main: #d98a58;--cat-vegetable: #7fb78b;--cat-grain: #cfa84e;--cat-other: #93a3c4;--star: #e8b15c;--shadow-rest: 0 1px 2px rgba(0, 0, 0, .3), 0 1px 1px rgba(0, 0, 0, .2);--shadow-raised: 0 6px 20px rgba(0, 0, 0, .4);--shadow-overlay: 0 16px 44px rgba(0, 0, 0, .55);--ring: color-mix(in srgb, var(--primary-color) 40%, transparent)}}*{box-sizing:border-box}body{margin:0;color:var(--text-primary);min-width:320px;background-color:var(--bg-primary);background-image:radial-gradient(1200px 600px at 85% -10%,color-mix(in srgb,var(--cat-grain) 7%,transparent),transparent 60%),radial-gradient(1000px 700px at -10% 0%,color-mix(in srgb,var(--primary-color) 6%,transparent),transparent 55%);background-attachment:fixed}h1,h2,h3{font-family:var(--font-display);font-weight:600;letter-spacing:-.01em}h1,h2,h3,h4,h5,h6{line-height:1.25}a{color:var(--primary-color);text-decoration:none}a:hover{text-decoration:underline}input,select,textarea,button{font-family:inherit}input:focus,select:focus,textarea:focus{outline:none;border-color:var(--primary-color);box-shadow:0 0 0 3px var(--ring)}button:focus-visible,a:focus-visible,[tabindex]:focus-visible{outline:2px solid var(--primary-color);outline-offset:2px}::selection{background:var(--primary-color);color:#fff}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important;scroll-behavior:auto!important}}.app{max-width:1400px;margin:0 auto;padding:1rem;min-height:100vh;display:flex;flex-direction:column}.app-header{display:flex;justify-content:space-between;align-items:center;gap:1rem;flex-wrap:wrap;padding:.75rem 0 1rem;border-bottom:1px solid var(--border-color);margin-bottom:1.25rem}.brand{display:flex;align-items:center;gap:.65rem}.brand-mark{font-size:1.75rem;line-height:1;filter:saturate(.9)}.brand-text{display:flex;flex-direction:column;align-items:flex-start;gap:.1rem}.app-header h1{margin:0;font-size:1.5rem;color:var(--text-primary)}.family-chip{display:inline-flex;align-items:center;gap:.35rem;background:var(--bg-secondary);border:1px solid var(--border-color);border-radius:var(--radius-pill);padding:.15rem .7rem;font-size:.78rem;font-weight:600;color:var(--text-secondary);cursor:pointer;transition:border-color .15s,color .15s}.family-chip:hover{border-color:var(--primary-color);color:var(--primary-color)}.header-top{display:flex;justify-content:space-between;align-items:center;margin-bottom:1rem}.user-info{display:flex;align-items:center;gap:.6rem}.user-avatar{width:32px;height:32px;border-radius:50%;border:2px solid var(--bg-secondary);box-shadow:var(--shadow-rest)}.user-name{font-size:.9rem;color:var(--text-secondary)}.subtitle{margin:.5rem 0 0;color:var(--text-secondary)}.invite-toggle{margin-top:.5rem}.invite-code-display{background:var(--bg-secondary);padding:1rem;border-radius:var(--radius-md);margin-top:.75rem;display:inline-block}.invite-code-display p{margin:0 0 .5rem;font-size:.9rem;color:var(--text-secondary)}.invite-code{font-size:1.5rem;font-weight:700;letter-spacing:.2em;color:var(--primary-color);background:var(--bg-primary);padding:.5rem 1rem;border-radius:var(--radius-sm)}.login-container{min-height:100vh;display:flex;justify-content:center;align-items:center;padding:1rem;background:radial-gradient(900px 500px at 80% 10%,color-mix(in srgb,var(--cat-grain) 12%,transparent),transparent 60%),radial-gradient(800px 600px at 10% 90%,color-mix(in srgb,var(--primary-color) 10%,transparent),transparent 55%),var(--bg-primary)}.login-card{background:var(--bg-secondary);padding:3rem;border-radius:var(--radius-lg);text-align:center;max-width:400px;width:100%;border:1px solid var(--border-color);box-shadow:var(--shadow-overlay)}.login-emblem{font-size:3rem;line-height:1;margin-bottom:.75rem}.login-card h1{margin:0 0 .5rem;font-size:2.1rem;color:var(--text-primary)}.login-subtitle{margin:0 0 2rem;color:var(--text-secondary)}.login-error{background:var(--danger-bg);color:var(--danger-text);border:1px solid var(--danger-border);padding:.75rem 1rem;border-radius:var(--radius-sm);margin-bottom:1rem}.btn-google{display:flex;align-items:center;justify-content:center;gap:.75rem;width:100%;padding:.875rem 1.5rem;background:#fff;border:1px solid #d9d2c2;border-radius:var(--radius-md);font-size:1rem;font-weight:600;cursor:pointer;transition:box-shadow .2s,transform .15s;color:#333}.btn-google:hover{box-shadow:var(--shadow-raised);transform:translateY(-1px)}.btn-google:active{transform:translateY(0)}.google-icon{width:20px;height:20px}.login-footer{margin:2rem 0 0;font-size:.85rem;color:var(--text-secondary)}.family-manager{min-height:100vh;display:flex;justify-content:center;align-items:center;padding:1rem;background:radial-gradient(900px 500px at 80% 10%,color-mix(in srgb,var(--cat-grain) 12%,transparent),transparent 60%),radial-gradient(800px 600px at 10% 90%,color-mix(in srgb,var(--primary-color) 10%,transparent),transparent 55%),var(--bg-primary)}.family-card{background:var(--bg-secondary);padding:2rem;border-radius:var(--radius-lg);max-width:500px;width:100%;border:1px solid var(--border-color);box-shadow:var(--shadow-overlay)}.family-header{text-align:center;margin-bottom:2rem}.family-header h2{margin:0 0 .5rem;color:var(--text-primary)}.family-header p{margin:0;color:var(--text-secondary)}.family-error{background:var(--danger-bg);color:var(--danger-text);border:1px solid var(--danger-border);padding:.75rem 1rem;border-radius:var(--radius-sm);margin-bottom:1rem}.family-options{display:flex;flex-direction:column;gap:1rem}.btn-family-option{display:flex;align-items:center;gap:1rem;padding:1.25rem;background:var(--bg-primary);border:2px solid var(--border-color);border-radius:var(--radius-md);cursor:pointer;text-align:left;transition:border-color .2s,transform .15s,box-shadow .2s}.btn-family-option:hover{border-color:var(--primary-color);transform:translateY(-1px);box-shadow:var(--shadow-rest)}.option-icon{font-size:1.5rem;width:40px;text-align:center}.option-text{display:flex;flex-direction:column;gap:.25rem}.option-text strong{color:var(--text-primary);font-size:1.1rem}.option-text small{color:var(--text-secondary);font-size:.9rem}.family-form{margin-top:1rem}.family-form-actions{display:flex;gap:.75rem;margin-top:1.5rem}.family-form-actions .btn-secondary{flex:1}.family-form-actions .btn-primary{flex:2}.family-footer{text-align:center;margin-top:2rem;padding-top:1rem;border-top:1px solid var(--border-color)}.modal-overlay{position:fixed;inset:0;background:#201a0e80;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);display:flex;justify-content:center;align-items:center;z-index:1000;padding:1rem}.modal-content{background:var(--bg-secondary);border-radius:var(--radius-lg);max-width:500px;width:100%;max-height:90vh;overflow-y:auto;border:1px solid var(--border-color);box-shadow:var(--shadow-overlay)}.modal-header{display:flex;justify-content:space-between;align-items:center;padding:1.25rem 1.5rem;border-bottom:1px solid var(--border-color)}.modal-header h3{margin:0;color:var(--text-primary)}.modal-close{background:none;border:none;font-size:1.5rem;cursor:pointer;color:var(--text-secondary);padding:0;line-height:1}.modal-close:hover{color:var(--text-primary)}.invite-code-section{padding:1.5rem;text-align:center;background:var(--bg-primary)}.invite-code-section p{margin:0 0 .75rem;color:var(--text-secondary)}.invite-code-large{font-size:2rem;font-weight:700;letter-spacing:.25em;color:var(--primary-color);background:var(--bg-secondary);padding:.75rem 1.5rem;border-radius:var(--radius-md);display:inline-block}.invite-email-section{padding:1.5rem;border-bottom:1px solid var(--border-color)}.invite-email-section label{display:block;margin-bottom:.5rem;font-weight:600;color:var(--text-primary)}.invite-email-row{display:flex;gap:.5rem}.invite-email-row input{flex:1;padding:.75rem 1rem;border:1px solid var(--border-color);border-radius:var(--radius-md);font-size:1rem;background:var(--bg-primary);color:var(--text-primary)}.invite-actions{padding:1rem 1.5rem;display:flex;gap:.75rem;border-bottom:1px solid var(--border-color)}.invite-actions .btn-secondary{flex:1}.invite-preview{padding:1rem 1.5rem}.preview-label{margin:0 0 .5rem;font-size:.85rem;color:var(--text-secondary)}.preview-text{margin:0;padding:1rem;background:var(--bg-primary);border-radius:var(--radius-md);font-size:.85rem;color:var(--text-secondary);white-space:pre-wrap;font-family:inherit;line-height:1.5;max-height:200px;overflow-y:auto}.paprika-import-modal{max-width:600px;max-height:80vh;display:flex;flex-direction:column}.paprika-import-body{padding:1.5rem;overflow-y:auto;flex:1}.import-instructions{margin-bottom:1.5rem}.import-instructions p{margin:0 0 .5rem}.import-instructions .hint{font-size:.9rem;color:var(--text-secondary)}.import-instructions code{background:var(--bg-primary);padding:.2rem .4rem;border-radius:var(--radius-sm);font-size:.85rem}.file-select-section{display:flex;align-items:center;gap:1rem;margin-bottom:1rem}.file-count{color:var(--text-secondary);font-size:.9rem}.import-error{background:var(--danger-bg);color:var(--danger-text);border:1px solid var(--danger-border);padding:.75rem 1rem;border-radius:var(--radius-sm);margin-bottom:1rem}.parsed-recipes-header{margin-bottom:1rem}.parsed-recipes-header h4{margin:0 0 .25rem}.parsed-recipes-header .hint{font-size:.85rem;color:var(--text-secondary);margin:0}.parsed-recipes-list{max-height:300px;overflow-y:auto;border:1px solid var(--border-color);border-radius:var(--radius-md);margin-bottom:1rem}.parsed-recipe-item{display:flex;align-items:center;gap:.75rem;padding:.75rem 1rem;border-bottom:1px solid var(--border-color)}.parsed-recipe-item:last-child{border-bottom:none}.recipe-info{flex:1;min-width:0}.recipe-name{display:block;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.recipe-meta{font-size:.8rem;color:var(--text-secondary)}.category-select{padding:.4rem .6rem;border:1px solid var(--border-color);border-radius:var(--radius-sm);font-size:.85rem;background:var(--bg-primary);color:var(--text-primary)}.btn-remove-small{background:none;border:none;font-size:1.25rem;color:var(--text-secondary);cursor:pointer;padding:.25rem;line-height:1}.btn-remove-small:hover{color:var(--danger)}.import-actions{display:flex;gap:.75rem;justify-content:flex-end}.import-result{text-align:center;padding:2rem 0}.result-icon{font-size:3rem;color:var(--primary-color);margin-bottom:1rem}.import-result h4{margin:0 0 .5rem}.failed-count{color:var(--danger);margin:0 0 1rem}.tab-header-actions{display:flex;gap:.75rem}.loading{display:flex;justify-content:center;align-items:center;min-height:50vh;font-size:1.2rem;color:var(--text-secondary)}.auth-error{display:flex;justify-content:center;align-items:center;min-height:50vh;font-size:1.2rem;color:var(--danger);text-align:center;padding:2rem}.app-nav{display:flex;gap:.35rem;justify-content:center;margin-bottom:1.5rem;flex-wrap:wrap}.nav-btn{padding:.55rem 1.15rem;border:1px solid transparent;background:transparent;color:var(--text-secondary);cursor:pointer;font-size:.95rem;font-weight:600;border-radius:var(--radius-pill);transition:background .15s,color .15s,box-shadow .15s}.nav-btn:hover{background:var(--bg-secondary);color:var(--text-primary)}.nav-btn:active{transform:translateY(1px)}.nav-btn.active{background:var(--primary-color);color:#fff;box-shadow:var(--shadow-rest)}.app-content{flex:1;padding:.25rem 0 1rem}.tab-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:1.5rem;flex-wrap:wrap;gap:1rem}.tab-header h2{margin:0}.recipe-form{background:var(--bg-secondary);padding:1.5rem;border-radius:var(--radius-lg);margin-bottom:2rem;border:1px solid var(--border-color);box-shadow:var(--shadow-rest)}.recipe-form h3{margin-top:0;margin-bottom:1.5rem}.entry-mode-toggle{display:flex;gap:0;margin-bottom:1.5rem;border:1px solid var(--border-color);border-radius:var(--radius-md);overflow:hidden}.mode-btn{flex:1;padding:.75rem 1rem;border:none;background:var(--bg-primary);color:var(--text-secondary);cursor:pointer;font-size:.95rem;font-weight:600;transition:all .2s}.mode-btn:not(:last-child){border-right:1px solid var(--border-color)}.mode-btn:hover{background:var(--bg-secondary)}.mode-btn.active{background:var(--primary-color);color:#fff}.form-group{margin-bottom:1.25rem}.form-group label{display:block;margin-bottom:.5rem;font-weight:600}.form-group input,.form-group select,.form-group textarea{width:100%;padding:.75rem;border:1px solid var(--border-color);border-radius:var(--radius-sm);font-size:1rem;background:var(--bg-primary);color:var(--text-primary);box-sizing:border-box}.form-group textarea{resize:vertical;min-height:80px}.ingredients-list{display:flex;flex-direction:column;gap:.75rem;margin-bottom:.75rem}.ingredient-row{display:grid;grid-template-columns:80px 80px 1fr auto;gap:.5rem;align-items:center}.ingredient-row input{width:100%}.form-actions{display:flex;gap:.75rem;margin-top:1.5rem}.url-input-group{display:flex;gap:.75rem}.url-input-group input{flex:1}.url-input-group .btn-primary{white-space:nowrap}.form-error{background:var(--danger-bg);color:var(--danger-text);padding:.75rem 1rem;border-radius:var(--radius-sm);margin-bottom:1rem;border:1px solid var(--danger-border)}.extracted-ingredients{margin:0;max-height:200px;overflow-y:auto;background:var(--bg-primary);border:1px solid var(--border-color);border-radius:var(--radius-sm);padding:1rem 1rem 1rem 2rem}.extracted-ingredients li{margin-bottom:.25rem;color:var(--text-secondary)}.extracted-directions{margin:0;max-height:200px;overflow-y:auto;background:var(--bg-primary);border:1px solid var(--border-color);border-radius:var(--radius-sm);padding:1rem 1rem 1rem 2rem}.extracted-directions li{margin-bottom:.5rem;color:var(--text-secondary);line-height:1.5}.extract-hint{color:var(--text-secondary);font-style:italic;text-align:center;margin:1rem 0 0}.btn-primary:disabled{opacity:.6;cursor:not-allowed}.recipe-list{margin-top:1rem}.recipe-filters{display:flex;gap:1rem;margin-bottom:1.5rem;flex-wrap:wrap}.search-input{flex:1;min-width:200px;padding:.75rem;border:1px solid var(--border-color);border-radius:var(--radius-sm);font-size:1rem;background:var(--bg-secondary);color:var(--text-primary)}.recipe-filters select{padding:.75rem;border:1px solid var(--border-color);border-radius:var(--radius-sm);font-size:1rem;background:var(--bg-secondary);color:var(--text-primary)}.recipe-category-group{margin-bottom:2rem}.recipe-category-group h3{display:flex;align-items:center;gap:.5rem;margin-bottom:1rem;padding-bottom:.5rem;border-bottom:2px solid var(--border-color)}.recipe-category-group h3:before{content:"";width:10px;height:10px;border-radius:50%;flex-shrink:0;background:var(--text-secondary)}.recipe-category-group--main h3:before{background:var(--cat-main)}.recipe-category-group--vegetable h3:before{background:var(--cat-vegetable)}.recipe-category-group--grain h3:before{background:var(--cat-grain)}.recipe-category-group--other h3:before{background:var(--cat-other)}.recipe-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:1rem}.recipe-card{background:var(--bg-secondary);border:1px solid var(--border-color);border-top:3px solid var(--border-color);border-radius:var(--radius-md);padding:1.25rem;box-shadow:var(--shadow-rest);transition:box-shadow .2s,transform .2s}.recipe-card:hover{box-shadow:var(--shadow-raised);transform:translateY(-2px)}.recipe-card--main{border-top-color:var(--cat-main)}.recipe-card--vegetable{border-top-color:var(--cat-vegetable)}.recipe-card--grain{border-top-color:var(--cat-grain)}.recipe-card--other{border-top-color:var(--cat-other)}.recipe-card h4{margin:0 0 .25rem;font-size:1.1rem;font-family:var(--font-display);font-weight:600}.cuisine-badge{display:inline-block;font-size:.72rem;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--text-secondary);background:var(--bg-primary);border:1px solid var(--border-color);border-radius:var(--radius-pill);padding:.1rem .55rem;margin-bottom:.5rem}.recipe-meta{display:flex;align-items:center;gap:.75rem;margin-bottom:.5rem}.cook-count{font-size:.8rem;color:var(--text-secondary);background:var(--bg-primary);padding:.15rem .5rem;border-radius:var(--radius-pill);white-space:nowrap}.add-to-week-picker{background:var(--bg-primary);border:1px solid var(--border-color);border-radius:var(--radius-md);padding:.5rem;margin-bottom:.5rem}.add-to-week-header{display:flex;align-items:center;gap:.75rem;margin-bottom:.4rem;flex-wrap:wrap}.add-to-week-tabs{display:flex;gap:0}.add-to-week-tab{padding:.25rem .6rem;border:1px solid var(--border-color);background:var(--bg-primary);color:var(--text-secondary);font-size:.8rem;cursor:pointer}.add-to-week-tab:first-child{border-radius:var(--radius-sm) 0 0 var(--radius-sm)}.add-to-week-tab:last-child{border-radius:0 var(--radius-sm) var(--radius-sm) 0;border-left:none}.add-to-week-tab.active{background:var(--primary-color);color:#fff;border-color:var(--primary-color)}.add-to-week-dates{font-size:.8rem;font-weight:600;color:var(--text-secondary)}.add-to-week-row{display:flex;gap:.4rem;align-items:center;flex-wrap:wrap}.add-to-week-row select{padding:.35rem .5rem;border:1px solid var(--border-color);border-radius:var(--radius-sm);font-size:.85rem;background:var(--bg-primary);color:var(--text-primary)}.star-rating{display:flex;gap:.1rem}.star-btn{background:none;border:none;cursor:pointer;font-size:1.25rem;padding:0;line-height:1;transition:transform .1s}.star-btn:hover{transform:scale(1.2)}.star-filled{color:var(--star)}.star-empty{color:var(--border-color)}.star-rating-readonly{margin-bottom:.25rem}.star-display{font-size:1rem}.recipe-link{display:inline-block;margin-bottom:.75rem;color:var(--primary-color);text-decoration:none}.recipe-link:hover{text-decoration:underline}.recipe-ingredients-preview{margin-bottom:.75rem;font-size:.9rem}.recipe-ingredients-preview ul{margin:.25rem 0 0 1.25rem;padding:0}.recipe-ingredients-preview li{color:var(--text-secondary)}.recipe-ingredients-preview .more-items{font-style:italic}.recipe-directions-preview{margin-bottom:.75rem;font-size:.9rem;color:var(--text-secondary)}.recipe-notes{font-size:.9rem;color:var(--text-secondary);font-style:italic;margin-bottom:.75rem}.recipe-card.expanded{grid-column:1 / -1;max-width:800px}.recipe-section{margin-bottom:1rem}.recipe-section strong{display:block;margin-bottom:.5rem}.recipe-ingredients-full,.recipe-directions-full{margin:0;padding-left:1.5rem;color:var(--text-secondary)}.recipe-ingredients-full li,.recipe-directions-full li{margin-bottom:.5rem;line-height:1.5}.recipe-actions{display:flex;gap:.5rem;margin-top:1rem;flex-wrap:wrap}.no-recipes{text-align:center;color:var(--text-secondary);padding:3rem 1.5rem;background:var(--bg-secondary);border:1px dashed var(--border-color);border-radius:var(--radius-lg)}.no-recipes-icon{display:block;font-size:2.5rem;margin-bottom:.75rem}.no-recipes p{margin:0}.backfill-banner{display:flex;align-items:center;gap:.75rem;flex-wrap:wrap;background:var(--warning-bg);border:1px solid var(--warning-border);border-radius:var(--radius-md);padding:.6rem 1rem;margin-bottom:1rem;font-size:.9rem;color:var(--warning-text)}.backfill-status{font-size:.85rem;color:var(--warning-text);font-style:italic}.week-planner{overflow-x:auto}.week-navigation{display:flex;justify-content:space-between;align-items:center;margin-bottom:1.5rem;flex-wrap:wrap;gap:1rem}.week-display{text-align:center}.week-display h3{margin:0 0 .25rem}.btn-link{background:none;border:none;color:var(--primary-color);cursor:pointer;font-size:.9rem;text-decoration:underline;padding:0}.week-grid{display:grid;grid-template-columns:repeat(7,minmax(150px,1fr));gap:.75rem;margin-bottom:1.5rem}.day-column{background:var(--bg-secondary);border:1px solid var(--border-color);border-radius:var(--radius-md);padding:1rem;box-shadow:var(--shadow-rest)}.day-column.is-today{border-color:var(--accent);box-shadow:0 0 0 1px var(--accent),var(--shadow-rest)}.day-column.is-today .day-header strong{color:var(--accent)}.day-header{text-align:center;margin-bottom:1rem;padding-bottom:.75rem;border-bottom:1px solid var(--border-color)}.day-header strong{display:block;font-size:1rem;font-family:var(--font-display)}.day-date{font-size:.85rem;color:var(--text-secondary)}.today-badge{display:block;width:fit-content;margin:.35rem auto 0;font-size:.6rem;font-weight:700;text-transform:uppercase;letter-spacing:.08em;color:var(--accent);background:color-mix(in srgb,var(--accent) 12%,transparent);border:1px solid color-mix(in srgb,var(--accent) 35%,transparent);border-radius:var(--radius-pill);padding:.08rem .5rem;line-height:1.4}.meal-selector{margin-bottom:1rem;padding-left:.55rem;border-left:3px solid var(--border-color)}.meal-selector--main{border-left-color:var(--cat-main)}.meal-selector--vegetable{border-left-color:var(--cat-vegetable)}.meal-selector--grain{border-left-color:var(--cat-grain)}.meal-selector--other{border-left-color:var(--cat-other)}.meal-selector label{display:block;font-size:.72rem;font-weight:700;text-transform:uppercase;letter-spacing:.05em;margin-bottom:.25rem;color:var(--text-secondary)}.meal-selector--main label{color:var(--cat-main)}.meal-selector--vegetable label{color:var(--cat-vegetable)}.meal-selector--grain label{color:var(--cat-grain)}.meal-selector--other label{color:var(--cat-other)}.meal-selector select{width:100%;padding:.5rem;border:1px solid var(--border-color);border-radius:var(--radius-sm);font-size:.9rem;background:var(--bg-primary);color:var(--text-primary)}.searchable-select{position:relative}.searchable-select-trigger{width:100%;padding:.5rem;border:1px solid var(--border-color);border-radius:var(--radius-sm);font-size:.9rem;background:var(--bg-primary);color:var(--text-primary);cursor:pointer;display:flex;justify-content:space-between;align-items:center;text-align:left;transition:border-color .15s}.searchable-select-trigger:hover{border-color:var(--primary-color)}.select-placeholder{color:var(--text-secondary);opacity:.75}.select-arrow{font-size:.6rem;color:var(--text-secondary);flex-shrink:0;margin-left:.25rem}.searchable-select-dropdown{position:absolute;top:100%;left:0;right:0;z-index:100;background:var(--bg-secondary);border:1px solid var(--border-color);border-radius:var(--radius-sm);margin-top:2px;box-shadow:var(--shadow-raised);animation:dropdown-in .12s ease-out}@keyframes dropdown-in{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}.searchable-select-search{width:100%;padding:.5rem;border:none;border-bottom:1px solid var(--border-color);font-size:.85rem;background:var(--bg-primary);color:var(--text-primary);border-radius:var(--radius-sm) var(--radius-sm) 0 0;box-sizing:border-box}.searchable-select-search:focus{outline:none;box-shadow:inset 0 -2px 0 var(--primary-color)}.searchable-select-options{max-height:180px;overflow-y:auto}.searchable-select-option{display:flex;align-items:center;justify-content:space-between;width:100%;padding:.4rem .5rem;border:none;background:none;color:var(--text-primary);font-size:.85rem;cursor:pointer;text-align:left}.searchable-select-option:hover{background:var(--bg-primary)}.option-selected{background:var(--bg-primary);font-weight:600;color:var(--primary-color)}.option-clear,.option-custom{color:var(--text-secondary);font-style:italic}.searchable-select-empty{padding:.5rem;font-size:.85rem;color:var(--text-secondary);text-align:center}.custom-input-group{display:flex;flex-direction:column;gap:.3rem}.custom-meal-input{width:100%;padding:.5rem;border:1px solid var(--border-color);border-radius:var(--radius-sm);font-size:.9rem;background:var(--bg-primary);color:var(--text-primary);box-sizing:border-box}.custom-meal-url-row{display:flex;align-items:center;gap:.3rem}.custom-meal-url-open{flex-shrink:0;padding:.3rem .45rem;background:var(--bg-secondary);border:1px solid var(--border-color);border-radius:var(--radius-sm);color:var(--primary-color);font-size:.85rem;text-decoration:none;line-height:1}.custom-meal-url-open:hover{background:var(--primary-color);color:#fff;border-color:var(--primary-color)}.custom-meal-url-input{width:100%;padding:.4rem .5rem;border:1px solid var(--border-color);border-radius:var(--radius-sm);font-size:.82rem;background:var(--bg-primary);color:var(--text-primary);box-sizing:border-box;opacity:.85}.custom-meal-url-input::placeholder{color:var(--text-secondary);font-style:italic}.btn-switch-to-dropdown{display:inline-flex;align-items:center;gap:.25rem;padding:.25rem .6rem;background:var(--bg-secondary);border:1px solid var(--border-color);border-radius:var(--radius-sm);cursor:pointer;font-size:.78rem;color:var(--primary-color);font-weight:600;align-self:flex-start}.btn-switch-to-dropdown:hover{background:var(--primary-color);color:#fff;border-color:var(--primary-color)}.planner-actions{text-align:center;display:flex;align-items:center;justify-content:center;gap:.75rem;flex-wrap:wrap}.planner-save-group{display:flex;align-items:center;gap:.6rem;flex-wrap:wrap;justify-content:center}.unsaved-badge{font-size:.8rem;font-weight:600;color:var(--warning-text);background:var(--warning-bg);border:1px solid var(--warning-border);border-radius:var(--radius-pill);padding:.2rem .65rem;white-space:nowrap}.saved-badge{font-size:.8rem;font-weight:600;color:var(--success-text);background:var(--success-bg);border:1px solid var(--success-border);border-radius:var(--radius-pill);padding:.2rem .65rem;white-space:nowrap}.btn-dirty{outline:2px solid var(--warning-border);outline-offset:2px}.sync-status{font-size:.8rem;font-weight:600;color:var(--info-text);white-space:nowrap}.autosync-toggle{display:inline-flex;align-items:center;gap:.35rem;font-size:.8rem;color:var(--text-secondary);white-space:nowrap;cursor:pointer}.autosync-toggle input{cursor:pointer;accent-color:var(--primary-color)}.week-glance{margin-top:2rem;border-top:2px solid var(--border-color);padding-top:1.5rem}.week-glance-title{font-size:.9rem;font-weight:700;font-family:var(--font-body);color:var(--text-secondary);text-transform:uppercase;letter-spacing:.08em;margin:0 0 1rem}.week-glance-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:.5rem}.week-glance-day{background:var(--bg-secondary);border:1px solid var(--border-color);border-radius:var(--radius-md);padding:.6rem .5rem;min-width:0}.week-glance-day.is-today{border-color:var(--accent);box-shadow:0 0 0 1px var(--accent)}.week-glance-day-header{display:flex;flex-direction:column;margin-bottom:.5rem;border-bottom:1px solid var(--border-color);padding-bottom:.4rem}.week-glance-day-name{font-weight:700;font-size:.8rem;color:var(--text-primary)}.week-glance-day.is-today .week-glance-day-name{color:var(--accent)}.week-glance-day-date{font-size:.7rem;color:var(--text-secondary)}.week-glance-empty{color:var(--text-secondary);font-size:.85rem}.week-glance-meals{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.3rem}.week-glance-meal{display:flex;flex-direction:column;gap:.05rem}.week-glance-meal-label{font-size:.65rem;font-weight:700;text-transform:uppercase;color:var(--text-secondary);letter-spacing:.04em}.week-glance-recipe-link{background:none;border:none;padding:0;cursor:pointer;font-size:.78rem;color:var(--primary-color);text-align:left;line-height:1.3;text-decoration:underline;text-decoration-color:transparent;transition:text-decoration-color .15s}.week-glance-recipe-link:hover{text-decoration-color:var(--primary-color)}.week-glance-recipe-name{font-size:.78rem;color:var(--text-primary);line-height:1.3}.week-glance-recipe-row{display:flex;flex-direction:column;gap:.1rem}.cook-time-badge{display:inline-flex;align-items:center;gap:.15em;font-size:.7rem;font-weight:600;color:var(--warning-text);background:var(--warning-bg);border:1px solid var(--warning-border);border-radius:var(--radius-sm);padding:.05rem .3rem;white-space:nowrap}.glance-cook-time{font-size:.65rem;align-self:flex-start}.searchable-select-option .cook-time-badge{margin-left:.4rem;flex-shrink:0}@media(max-width:1024px){.week-glance-grid{grid-template-columns:repeat(4,1fr)}}@media(max-width:600px){.week-glance-grid{grid-template-columns:repeat(2,1fr)}}.shopping-list{max-width:800px;margin:0 auto}.shopping-list h3{margin-bottom:1.5rem}.no-plan{text-align:center;color:var(--text-secondary);padding:2rem;background:var(--bg-secondary);border:1px dashed var(--border-color);border-radius:var(--radius-lg)}.recipes-used,.ingredients-section,.todoist-section{background:var(--bg-secondary);padding:1.25rem;border-radius:var(--radius-lg);margin-bottom:1.5rem;border:1px solid var(--border-color);box-shadow:var(--shadow-rest)}.recipes-used h4,.ingredients-section h4,.todoist-section h4{margin-top:0;margin-bottom:1rem}.recipes-used ul,.ingredient-list{margin:0;padding-left:1.5rem}.recipes-used li,.ingredient-list li{margin-bottom:.5rem}.ingredient-list li .amounts{color:var(--text-secondary)}.custom-badge{font-size:.75rem;color:var(--text-secondary);font-style:italic}.todoist-preview{background:var(--bg-primary);border:1px solid var(--border-color);border-radius:var(--radius-md);padding:1rem;margin-bottom:1rem;overflow-x:auto}.todoist-preview pre{margin:0;white-space:pre-wrap;word-break:break-word;font-family:SF Mono,Monaco,Consolas,monospace;font-size:.9rem}.btn-primary{background:var(--primary-color);color:#fff;border:none;padding:.75rem 1.5rem;border-radius:var(--radius-md);font-size:1rem;font-weight:600;cursor:pointer;transition:background .2s,transform .1s}.btn-primary:hover{background:var(--primary-hover)}.btn-primary:active{transform:translateY(1px)}.btn-secondary{background:var(--bg-secondary);color:var(--text-primary);border:1px solid var(--border-color);padding:.75rem 1.5rem;border-radius:var(--radius-md);font-size:1rem;font-weight:600;cursor:pointer;transition:border-color .2s,transform .1s}.btn-secondary:hover{border-color:var(--primary-color)}.btn-secondary:active{transform:translateY(1px)}.btn-secondary:disabled{opacity:.6;cursor:not-allowed}.btn-danger{background:var(--danger);color:#fff;border:none;padding:.75rem 1.5rem;border-radius:var(--radius-md);font-size:1rem;font-weight:600;cursor:pointer;transition:background .2s,transform .1s}.btn-danger:hover{background:var(--danger-hover)}.btn-danger:active{transform:translateY(1px)}.btn-sm{padding:.4rem .8rem;font-size:.875rem}.btn-remove{background:none;border:1px solid var(--danger);color:var(--danger);padding:.4rem .6rem;border-radius:var(--radius-sm);cursor:pointer;font-size:.8rem}.btn-remove:hover{background:var(--danger);color:#fff}.app-footer{text-align:center;padding:1.5rem 0;margin-top:2rem;border-top:1px solid var(--border-color);color:var(--text-secondary);font-size:.9rem}.ai-planner-section{margin-bottom:1.5rem}.btn-ai-planner{display:flex;align-items:center;gap:.5rem;padding:.75rem 1.25rem;background:linear-gradient(135deg,var(--accent) 0%,var(--accent-hover) 100%);color:#fff;border:none;border-radius:var(--radius-md);font-size:1rem;font-weight:600;cursor:pointer;transition:transform .2s,box-shadow .2s}.btn-ai-planner:hover{transform:translateY(-2px);box-shadow:0 4px 14px color-mix(in srgb,var(--accent) 40%,transparent)}.btn-ai-planner:active{transform:translateY(0)}.ai-icon{font-size:1.2rem}.ai-planner-input{background:var(--bg-secondary);border:1px solid var(--border-color);border-radius:var(--radius-lg);padding:1.25rem;box-shadow:var(--shadow-rest)}.ai-planner-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:.75rem}.ai-planner-header h4{margin:0;display:flex;align-items:center;gap:.5rem;color:var(--text-primary);font-family:var(--font-display)}.btn-close-ai{background:none;border:none;font-size:1.5rem;color:var(--text-secondary);cursor:pointer;padding:0;line-height:1}.btn-close-ai:hover{color:var(--text-primary)}.ai-planner-hint{margin:0 0 .5rem;font-size:.9rem;color:var(--text-secondary)}.ai-examples{margin:0 0 1rem;padding-left:1.25rem;font-size:.85rem;color:var(--text-secondary)}.ai-examples li{margin-bottom:.25rem;font-style:italic}.ai-error{background:var(--danger-bg);color:var(--danger-text);border:1px solid var(--danger-border);padding:.75rem 1rem;border-radius:var(--radius-sm);margin-bottom:1rem;font-size:.9rem}.ai-success{background:var(--success-bg);color:var(--success-text);border:1px solid var(--success-border);padding:.75rem 1rem;border-radius:var(--radius-sm);margin-bottom:1rem;font-size:.9rem}.ai-prompt-input{width:100%;padding:.75rem 1rem;border:1px solid var(--border-color);border-radius:var(--radius-md);font-size:1rem;resize:vertical;min-height:80px;font-family:inherit;background:var(--bg-primary);color:var(--text-primary);box-sizing:border-box}.ai-planner-actions{display:flex;gap:.75rem;margin-top:1rem;justify-content:flex-end}.ai-warning{margin:1rem 0 0;font-size:.85rem;color:var(--text-secondary);font-style:italic}.community-recipes{margin-top:1rem}.community-hint{color:var(--text-secondary);margin:0 0 1.5rem;font-size:.95rem}.community-family-badge{display:inline-block;font-size:.8rem;color:var(--text-secondary);background:var(--bg-primary);padding:.2rem .6rem;border-radius:var(--radius-pill);margin-bottom:.5rem}.community-error{text-align:center;padding:3rem;color:var(--text-secondary)}.community-error p{margin:0 0 1rem}.btn-added{background:var(--success-bg);color:var(--success-text);border:1px solid var(--success-border);padding:.4rem .8rem;border-radius:var(--radius-md);font-size:.875rem;cursor:default}.popular-meals-section{background:var(--bg-secondary);border:1px solid var(--border-color);border-radius:var(--radius-lg);padding:1.25rem;margin-bottom:2rem;box-shadow:var(--shadow-rest)}.popular-meals-section h3{margin:0 0 1rem}.popular-meals-list{display:flex;flex-direction:column;gap:.5rem}.popular-meal-item{display:flex;align-items:center;gap:.75rem;padding:.75rem;background:var(--bg-primary);border-radius:var(--radius-md)}.popular-rank{font-weight:700;font-size:.9rem;color:var(--primary-color);min-width:2rem;text-align:center}.popular-meal-info{flex:1;min-width:0;display:flex;flex-direction:column;gap:.15rem}.popular-meal-name{font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.popular-meal-meta{font-size:.8rem;color:var(--text-secondary)}.cooking-analytics{margin-top:1rem}.analytics-filter{display:flex;align-items:center;gap:.75rem;margin-bottom:1.5rem}.analytics-filter label{font-weight:600;color:var(--text-secondary)}.analytics-filter select{padding:.5rem .75rem;border:1px solid var(--border-color);border-radius:var(--radius-sm);font-size:.95rem;background:var(--bg-secondary);color:var(--text-primary)}.analytics-summary{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:1rem;margin-bottom:2rem}.stat-card{background:var(--bg-secondary);border:1px solid var(--border-color);border-radius:var(--radius-md);padding:1.25rem;text-align:center;display:flex;flex-direction:column;gap:.25rem;box-shadow:var(--shadow-rest)}.stat-value{font-size:2rem;font-weight:600;font-family:var(--font-display);color:var(--primary-color)}.stat-label{font-size:.85rem;color:var(--text-secondary)}.analytics-category{margin-bottom:2rem}.analytics-category h3{margin-bottom:1rem;padding-bottom:.5rem;border-bottom:2px solid var(--border-color)}.analytics-hint{color:var(--text-secondary);font-size:.9rem;margin:0 0 1rem}.analytics-table{width:100%;border-collapse:collapse;background:var(--bg-secondary);border-radius:var(--radius-md);overflow:hidden;border:1px solid var(--border-color);box-shadow:var(--shadow-rest)}.analytics-table thead{background:var(--bg-primary)}.analytics-table th{padding:.75rem 1rem;text-align:left;font-size:.85rem;color:var(--text-secondary);font-weight:600}.analytics-table td{padding:.75rem 1rem;border-top:1px solid var(--border-color)}.rank-cell{width:2.5rem;font-weight:700;color:var(--text-secondary)}.count-cell{width:10rem}.count-bar-container{display:flex;align-items:center;gap:.5rem}.count-bar{display:inline-block;height:1.25rem;min-width:4px;background:var(--primary-color);border-radius:var(--radius-sm);opacity:.7}.count-number{font-weight:600;font-size:.9rem;min-width:1.5rem}.date-cell{font-size:.85rem;color:var(--text-secondary);white-space:nowrap}.analytics-row-clickable{cursor:pointer}.analytics-row-clickable:hover{background:var(--bg-primary)}.recipe-name-expand{display:flex;align-items:center;gap:.5rem}.expand-arrow{font-size:.65rem;color:var(--text-secondary)}@media(max-width:768px){.week-planner{overflow-x:visible}.week-grid{display:flex;overflow-x:auto;scroll-snap-type:x mandatory;-webkit-overflow-scrolling:touch;gap:.75rem;padding-bottom:.75rem;margin-left:-1rem;margin-right:-1rem;padding-left:1rem;padding-right:1rem}.day-column{flex:0 0 80vw;max-width:330px;scroll-snap-align:center}.meal-selector select,.searchable-select-trigger,.searchable-select-option{min-height:44px}}@media(max-width:600px){.app-nav{justify-content:flex-start;flex-wrap:nowrap;overflow-x:auto;-webkit-overflow-scrolling:touch;padding-bottom:.25rem}.nav-btn{flex:0 0 auto}.app-header{padding-top:.5rem}.user-name{display:none}}.analytics-detail-row td{padding:.5rem 1rem .75rem!important;background:var(--bg-primary)}.recipe-date-list{display:flex;flex-wrap:wrap;gap:.4rem}.recipe-date-chip{font-size:.8rem;background:var(--bg-secondary);border:1px solid var(--border-color);padding:.2rem .6rem;border-radius:var(--radius-pill);color:var(--text-secondary)}.never-cooked-list{display:flex;flex-wrap:wrap;gap:.5rem}.never-cooked-chip{background:var(--bg-secondary);border:1px solid var(--border-color);padding:.4rem .8rem;border-radius:var(--radius-pill);font-size:.85rem;color:var(--text-secondary)}.csv-import-overlay{position:fixed;inset:0;background:#201a0e80;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);display:flex;justify-content:center;align-items:center;z-index:1000;padding:1rem}.csv-import-modal{background:var(--bg-secondary);border-radius:var(--radius-lg);max-width:600px;width:100%;max-height:90vh;display:flex;flex-direction:column;border:1px solid var(--border-color);box-shadow:var(--shadow-overlay)}.csv-import-preview-modal{max-width:700px}.csv-import-header{display:flex;justify-content:space-between;align-items:center;padding:1.25rem 1.5rem;border-bottom:1px solid var(--border-color)}.csv-import-header h3{margin:0;color:var(--text-primary)}.csv-import-body{padding:1.5rem;overflow-y:auto;flex:1}.csv-import-instructions p{margin:0 0 .75rem;color:var(--text-primary)}.csv-format-table{width:100%;border-collapse:collapse;margin-bottom:.75rem;font-size:.85rem;border:1px solid var(--border-color);border-radius:var(--radius-md);overflow:hidden}.csv-format-table th{background:var(--bg-primary);padding:.5rem .75rem;text-align:left;font-weight:600;color:var(--text-secondary);font-size:.8rem}.csv-format-table td{padding:.4rem .75rem;border-top:1px solid var(--border-color);color:var(--text-secondary);font-family:SF Mono,Monaco,Consolas,monospace;font-size:.8rem}.optional-label{font-weight:400;font-style:italic;opacity:.7}.csv-import-hint{font-size:.85rem;color:var(--text-secondary);margin:0}.csv-import-actions{display:flex;gap:.75rem;margin-top:1.5rem}.csv-file-label{cursor:pointer;display:inline-flex;align-items:center}.csv-import-summary{display:flex;flex-wrap:wrap;gap:.5rem;padding:.75rem 1.5rem;border-bottom:1px solid var(--border-color);background:var(--bg-primary)}.match-stat{font-size:.8rem;padding:.25rem .6rem;border-radius:var(--radius-pill);font-weight:600}.match-exact{background:var(--success-bg);color:var(--success-text)}.match-fuzzy{background:var(--warning-bg);color:var(--warning-text)}.match-unmatched{background:var(--danger-bg);color:var(--danger-text)}.match-excluded{background:var(--bg-secondary);color:var(--text-secondary)}.match-total{background:var(--bg-secondary);color:var(--text-secondary);border:1px solid var(--border-color)}.csv-import-mappings{padding:0!important;overflow-y:auto;max-height:50vh}.mapping-row{display:flex;flex-wrap:wrap;align-items:center;gap:.75rem;padding:.75rem 1.5rem;border-bottom:1px solid var(--border-color)}.mapping-row:last-child{border-bottom:none}.mapping-exact{background:color-mix(in srgb,var(--success-bg) 30%,transparent)}.mapping-fuzzy{background:color-mix(in srgb,var(--warning-bg) 30%,transparent)}.mapping-unmatched{background:color-mix(in srgb,var(--danger-bg) 30%,transparent)}.mapping-excluded{background:color-mix(in srgb,var(--bg-secondary) 30%,transparent);opacity:.6}.mapping-csv-name{display:flex;align-items:center;gap:.5rem;flex:1;min-width:180px}.match-indicator{display:inline-flex;align-items:center;justify-content:center;width:1.5rem;height:1.5rem;border-radius:50%;font-size:.8rem;font-weight:700;flex-shrink:0}.match-indicator-exact{background:var(--success-bg);color:var(--success-text)}.match-indicator-fuzzy{background:var(--warning-bg);color:var(--warning-text)}.match-indicator-unmatched{background:var(--danger-bg);color:var(--danger-text)}.match-indicator-excluded{background:var(--bg-secondary);color:var(--text-secondary)}.mapping-name{font-weight:600;color:var(--text-primary)}.mapping-name-excluded{text-decoration:line-through;opacity:.6}.mapping-exact-row{display:flex;align-items:center;gap:.75rem}.btn-exclude-small,.btn-include-small{background:none;border:1px solid var(--border-color);padding:.2rem .5rem;border-radius:var(--radius-sm);font-size:.75rem;cursor:pointer;color:var(--text-secondary);white-space:nowrap}.btn-exclude-small:hover{background:var(--danger-bg);border-color:var(--danger-border);color:var(--danger-text)}.btn-include-small:hover{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}.mapping-count{font-size:.8rem;color:var(--text-secondary)}.mapping-action{flex:1;min-width:200px}.mapping-matched-to{font-size:.9rem;color:var(--text-secondary)}.mapping-select-group select{width:100%;padding:.5rem .75rem;border:1px solid var(--border-color);border-radius:var(--radius-sm);font-size:.85rem;background:var(--bg-primary);color:var(--text-primary)}.csv-import-footer{display:flex;justify-content:flex-end;gap:.75rem;padding:1rem 1.5rem;border-top:1px solid var(--border-color)}.csv-import-done{text-align:center}.import-done-stats{display:grid;grid-template-columns:repeat(4,1fr);gap:.75rem}@media(max-width:1024px)and (min-width:769px){.week-grid{grid-template-columns:repeat(4,minmax(150px,1fr))}}@media(max-width:768px){.ingredient-row{grid-template-columns:1fr 1fr;gap:.5rem}.ingredient-row .ingredient-name,.ingredient-row .btn-remove{grid-column:1 / -1}}
