:root{--bg:#fff;--panel:#f6f7f2;--panel-2:#eef1e7;--ink:#23261f;--ink-2:#585d50;--ink-3:#7c8173;--primary:#5c7d3f;--primary-hover:#4b6733;--primary-tint:#eef3e6;--accent:#c06b39;--accent-tint:linen;--success:#3f7d4c;--warn:#a9661f;--danger:#b23a2c;--border:#e7e8e1;--border-strong:#d3d5c9;--space-1:4px;--space-2:8px;--space-3:12px;--space-4:16px;--space-5:20px;--space-6:24px;--space-7:32px;--space-8:40px;--space-9:48px;--space-10:64px;--r-sm:8px;--r-md:12px;--r-lg:16px;--r-pill:999px;--t-xs:0.75rem;--t-sm:0.8125rem;--t-base:0.9375rem;--t-md:1.0625rem;--t-lg:1.25rem;--t-xl:1.5rem;--t-2xl:1.875rem;--t-3xl:2.375rem;--sh-sm:0 1px 2px rgba(35,38,31,.06);--sh-md:0 4px 12px rgba(35,38,31,.1);--sh-lg:0 12px 32px rgba(35,38,31,.16);--container-reading:720px;--container-data:960px}*{box-sizing:border-box;margin:0;padding:0}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;background:var(--bg);color:var(--ink);line-height:1.6}.container-reading{max-width:var(--container-reading);margin:0 auto;padding:var(--space-10) var(--space-6)}.container-data{max-width:var(--container-data);margin:0 auto;padding:var(--space-6) var(--space-4)}.page-header{display:flex;align-items:flex-start;justify-content:space-between;margin-bottom:var(--space-6)}.page-header-back{color:var(--ink-2);font-size:var(--t-sm);text-decoration:none;transition:color .15s ease}.page-header-back:hover{color:var(--ink)}.page-header-title{font-size:var(--t-2xl);font-weight:800;letter-spacing:-.5px;margin-top:var(--space-1)}.page-header-subtitle{color:var(--ink-2);font-size:var(--t-base)}.page-header-actions,.page-header-subtitle{margin-top:var(--space-1)}a:focus-visible,button:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible{outline:2px solid var(--primary);outline-offset:2px}a:focus,button:focus,input:focus,select:focus,textarea:focus{outline:none}.btn{display:inline-flex;padding:11px 16px;border:none;border-radius:var(--r-sm);font-size:var(--t-base);font-weight:600;cursor:pointer;transition:all .2s ease;min-height:40px;line-height:1;align-items:center;justify-content:center;gap:var(--space-2)}.btn-primary{background:var(--primary);color:#fff}.btn-primary:hover{background:var(--primary-hover)}.btn-primary:focus-visible{outline:2px solid var(--primary);outline-offset:2px}.btn-primary:active{opacity:.9}.btn-primary.is-loading,.btn-primary:disabled{opacity:.6;cursor:not-allowed}.btn-secondary{background:var(--bg);color:var(--ink);border:1px solid var(--border)}.btn-secondary:hover{background:var(--panel);border-color:var(--border-strong)}.btn-secondary:active{background:var(--panel-2)}.btn-secondary.is-loading,.btn-secondary:disabled{opacity:.6;cursor:not-allowed}.btn-ghost{background:transparent;color:var(--primary);padding:8px 12px}.btn-ghost:hover{background:color-mix(in srgb,var(--primary) 5%,transparent)}.btn-ghost:active{background:color-mix(in srgb,var(--primary) 10%,transparent)}.btn-ghost.is-loading,.btn-ghost:disabled{opacity:.6;cursor:not-allowed}.btn-danger{background:var(--danger);color:#fff}.btn-danger:hover{opacity:.9}.btn-danger:active{opacity:.8}.btn-danger.is-loading,.btn-danger:disabled{opacity:.6;cursor:not-allowed}.field-group{margin-bottom:var(--space-4)}.field-label{display:block;font-size:var(--t-sm);font-weight:600;color:var(--ink);margin-bottom:var(--space-2)}.field-input,.field-textarea{display:block;width:100%;padding:10px 12px;border:1px solid var(--border);border-radius:var(--r-sm);font-size:var(--t-base);font-family:inherit;color:var(--ink);transition:border-color .2s ease}.field-input:hover:not(:disabled),.field-textarea:hover:not(:disabled){border-color:var(--border-strong)}.field-input:focus-visible,.field-textarea:focus-visible{outline:2px solid var(--primary);outline-offset:2px;border-color:var(--primary)}.field-input:active:not(:disabled),.field-textarea:active:not(:disabled){border-color:var(--primary)}.field-input:disabled,.field-textarea:disabled{background:var(--panel);color:var(--ink-3);cursor:not-allowed}.field-input[aria-invalid=true],.field-textarea[aria-invalid=true]{border-color:var(--danger)}.field-hint{color:var(--ink-2)}.field-error,.field-hint{font-size:var(--t-sm);margin-top:var(--space-1)}.field-error{color:var(--danger)}.card{background:var(--bg);border:1px solid var(--border);border-radius:var(--r-md);box-shadow:var(--sh-sm);overflow:hidden}.card-row{padding:var(--space-4);border-bottom:1px solid var(--border)}.card-row:last-child{border-bottom:none}.badge{display:inline-block;padding:4px 8px;border-radius:var(--r-pill);font-size:var(--t-xs);font-weight:600;white-space:nowrap}.badge-neutral{background:var(--panel);color:var(--ink)}.badge-success{background:color-mix(in srgb,var(--success) 10%,transparent);color:var(--success)}.badge-warn{background:color-mix(in srgb,var(--warn) 10%,transparent);color:var(--warn)}.badge-danger{background:color-mix(in srgb,var(--danger) 10%,transparent);color:var(--danger)}.avatar{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:50%;background:var(--primary-tint);color:var(--primary);font-weight:600;font-size:var(--t-sm)}.avatar-lg{width:48px;height:48px;font-size:var(--t-base)}.avatar-sm{width:24px;height:24px;font-size:var(--t-xs)}.empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:var(--space-8);text-align:center;color:var(--ink-2)}.empty-state-icon{font-size:48px;margin-bottom:var(--space-4)}.empty-state-text{font-size:var(--t-base);color:var(--ink);margin-bottom:var(--space-4)}.empty-state-action{margin-top:var(--space-4)}.toast-provider{position:fixed;bottom:var(--space-4);right:var(--space-4);z-index:9999;pointer-events:none}.toast{background:var(--ink);color:#fff;border-radius:var(--r-sm);padding:var(--space-3) var(--space-4);margin-bottom:var(--space-2);font-size:var(--t-sm);box-shadow:var(--sh-md);pointer-events:auto;animation:slideIn .2s ease-out}.toast-success{background:var(--success)}.toast-error{background:var(--danger)}@keyframes slideIn{0%{transform:translateX(400px);opacity:0}to{transform:translateX(0);opacity:1}}.dialog-overlay{position:fixed;inset:0;background:rgba(0,0,0,.5);display:flex;align-items:center;justify-content:center;z-index:1000}.dialog-content{background:var(--bg);border-radius:var(--r-lg);padding:var(--space-6);max-width:400px;box-shadow:var(--sh-lg);animation:dialogSlideIn .2s ease-out}.dialog-title{font-size:var(--t-lg);font-weight:600;color:var(--ink);margin-bottom:var(--space-3)}.dialog-body{font-size:var(--t-base);color:var(--ink-2);margin-bottom:var(--space-4)}.dialog-actions{display:flex;gap:var(--space-3);justify-content:flex-end}@keyframes dialogSlideIn{0%{transform:scale(.95);opacity:0}to{transform:scale(1);opacity:1}}.invite-hero{background:linear-gradient(135deg,var(--primary) 0,var(--accent) 100%);color:#fff;padding:var(--space-8) var(--space-6);border-radius:var(--r-lg);margin-bottom:var(--space-6);text-align:center}.invite-hero-title{font-size:var(--t-2xl);font-weight:700;margin:0 0 var(--space-2)}.invite-hero-subtitle{font-size:var(--t-base);opacity:.95;margin:0}.card-success{background:color-mix(in srgb,var(--success) 5%,var(--bg));border-color:color-mix(in srgb,var(--success) 20%,var(--border))}.card-warn{background:color-mix(in srgb,var(--warn) 5%,var(--bg));border-color:color-mix(in srgb,var(--warn) 20%,var(--border))}.card-primary-tint{background:var(--primary-tint);border-color:var(--border)}.card-neutral{background:var(--bg);border-color:var(--border)}.app-main{max-width:var(--container-reading);margin:0 auto;padding:var(--space-10) var(--space-6)}.dashboard-header{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:var(--space-7)}.dashboard-title{font-size:var(--t-2xl);font-weight:800;letter-spacing:-.5px;display:flex;align-items:center;gap:8px}.dashboard-emoji{font-size:24px}.dashboard-subtitle{color:var(--ink-2);margin-top:4px;font-size:var(--t-base)}.progress-header{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:var(--space-3)}.progress-label{font-weight:700;font-size:var(--t-base)}.progress-value{font-size:26px;font-weight:800;color:var(--primary)}.progress-sub{font-size:var(--t-sm);font-weight:500;color:var(--ink-2)}.progress-bar-container{background:var(--border);border-radius:var(--r-pill);height:10px;overflow:hidden}.progress-bar-fill{background:var(--primary);border-radius:var(--r-pill);height:10px;min-width:20px;transition:width .3s ease}.progress-bar-success{background:var(--success)}.progress-text{margin-top:10px;font-size:var(--t-sm);color:var(--ink-2)}.progress-icon{color:var(--primary)}.quick-links-grid{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:var(--space-8)}.quick-link{flex:1 1;min-width:120px;text-align:center;padding:9px 12px;border:1px solid var(--border);border-radius:var(--r-sm);text-decoration:none;font-size:var(--t-sm);font-weight:600;color:var(--ink);background:var(--bg);display:inline-flex;align-items:center;justify-content:center;gap:4px;transition:all .15s ease}.quick-link:hover{background:var(--panel);border-color:var(--border-strong)}.due-section{margin-bottom:var(--space-8)}.section-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:10px}.section-title{font-size:var(--t-xs);font-weight:700;text-transform:uppercase;letter-spacing:.08em;color:var(--ink-2)}.section-link{font-size:var(--t-sm);font-weight:600;color:var(--primary);text-decoration:none;display:inline-flex;align-items:center;gap:4px}.section-link:hover{text-decoration:underline}.due-list{display:flex;flex-direction:column;gap:6px}.due-card{display:flex;align-items:center;justify-content:space-between;padding:10px 14px;border-radius:var(--r-sm);background:var(--bg)}.due-card.overdue{border-left:1px solid var(--danger);border:1px solid var(--danger);border-left-width:4px}.due-card.birthday{border-left:1px solid var(--warn);border:1px solid var(--warn);border-left-width:4px}.due-content{display:flex;align-items:center;gap:10px}.due-info{display:flex;flex-direction:column}.due-name{font-weight:600;font-size:var(--t-base)}.due-label{font-size:var(--t-xs)}.empty-meals-state{text-align:center;padding:var(--space-9) var(--space-6);border:1px dashed var(--border);border-radius:var(--r-md);color:var(--ink-2);margin-bottom:var(--space-8)}.empty-meals-title{font-weight:700;color:var(--ink);margin:12px 0 6px;font-size:var(--t-md)}.empty-meals-text{font-size:var(--t-sm)}.meals-section{margin-bottom:var(--space-8)}.meals-list{display:flex;flex-direction:column;gap:8px;padding:var(--space-4)}.meal-row{display:block;padding:12px 16px;border:1px solid var(--border);border-radius:var(--r-sm);text-decoration:none;color:inherit;background:var(--bg);transition:all .15s ease}.meal-row:hover{border-color:var(--border-strong)}.meal-row-content{display:flex;align-items:center;gap:8px}.meal-info{flex:1 1}.meal-type{font-weight:600;font-size:var(--t-base)}.meal-location{margin-left:6px}.meal-date,.meal-location{color:var(--ink-2);font-size:var(--t-sm)}.meal-date{flex-shrink:0}.meal-attendees{margin-top:4px;font-size:var(--t-sm)}.meal-attendees,.meal-notes{color:var(--ink-2);padding-left:26px}.meal-notes{margin-top:5px;font-size:var(--t-xs);font-style:italic}.stats-grid{display:grid;grid-template-columns:repeat(4,1fr);grid-gap:12px;gap:12px}.stat-card{padding:12px;background:var(--panel);border-radius:var(--r-sm);text-align:center}.stat-value{font-size:20px;font-weight:800}.stat-label{font-size:var(--t-xs);color:var(--ink-2);margin-top:4px;font-weight:600}.stat-success .stat-value{color:var(--success)}.stat-planned .stat-value{color:var(--primary)}.stat-cancelled .stat-value{color:var(--danger)}.stat-total .stat-value{color:var(--ink)}.history-emoji{color:var(--primary);flex-shrink:0}.stats-section{margin-bottom:var(--space-6)}.stats-section-title{font-size:var(--t-base);font-weight:700;margin:0}.progress-header-row,.stat-row{display:flex;justify-content:space-between;align-items:baseline}.stat-row{padding:var(--space-3) var(--space-4);border-bottom:1px solid var(--border)}.stat-row:last-child{border-bottom:none}.stat-row-label{font-size:var(--t-sm);font-weight:600;color:var(--ink)}.stat-row-value{font-size:var(--t-md);font-weight:800;color:var(--ink)}.top-friends-list{padding:var(--space-4)}.top-friends-header{font-size:var(--t-xs);font-weight:600;color:var(--ink-2);margin-bottom:var(--space-3);text-transform:uppercase;letter-spacing:.08em}.top-friend-row{display:flex;align-items:center;gap:var(--space-3);padding:var(--space-2) var(--space-3);background:var(--panel);border-radius:var(--r-sm);font-size:var(--t-sm);margin-bottom:var(--space-2)}.top-friend-count{margin-left:auto;font-weight:600;color:var(--ink-2)}.seat-fill-rate{padding:var(--space-4)}.seat-fill-header{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:var(--space-3)}.seat-fill-label{font-size:var(--t-sm);font-weight:600;color:var(--ink)}.seat-fill-value{font-size:var(--t-lg);font-weight:800;color:var(--ink)}.meal-type-bars{gap:var(--space-4);padding:var(--space-4)}.meal-type-bars,.meal-type-row{display:flex;flex-direction:column}.meal-type-row{gap:var(--space-2)}.meal-type-header{display:flex;justify-content:space-between;align-items:baseline}.meal-type-label{text-transform:capitalize}.meal-type-count,.meal-type-label{font-size:var(--t-sm);font-weight:600}.meal-type-count{color:var(--ink-2)}.place-list{display:flex;flex-direction:column;gap:var(--space-2);padding:var(--space-4)}.place-row{display:flex;justify-content:space-between;align-items:center;padding:var(--space-2) var(--space-3);background:var(--panel);border-radius:var(--r-sm);font-size:var(--t-sm)}.place-count{font-weight:600;color:var(--ink-2)}.rating-header{display:flex;justify-content:space-between;align-items:baseline}.rating-value{font-size:var(--t-xl);font-weight:800}.rating-success{color:var(--success)}.rating-warn{color:var(--warn)}.connections-header{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:var(--space-4)}.connections-total{font-size:var(--t-xl);font-weight:800;color:var(--accent)}.recent-connections{margin-top:var(--space-5)}.recent-connections-header{font-size:var(--t-xs);font-weight:600;color:var(--ink-2);margin-bottom:var(--space-3);text-transform:uppercase;letter-spacing:.08em}.recent-connection-row{display:flex;justify-content:space-between;align-items:center;padding:var(--space-2) var(--space-3);background:var(--panel);border-radius:var(--r-sm);font-size:var(--t-sm);margin-bottom:var(--space-2)}.recent-connection-date{font-size:var(--t-xs);color:var(--ink-2)}.chart-bar-grid{display:flex;align-items:flex-end;gap:var(--space-3);padding:var(--space-4)}.chart-bar-wrapper{display:flex;flex-direction:column;align-items:center;gap:var(--space-2)}.chart-bar{position:relative;background:var(--primary);border-radius:4px 4px 0 0;height:100%;width:100%}.chart-bar-label{font-size:var(--t-xs);color:var(--ink-2);font-weight:600}.chart-bar-fill{border-radius:var(--r-pill);height:8px}.chart-breakfast{background:var(--warn)}.chart-lunch{background:var(--success)}.chart-dinner{background:var(--primary)}.chart-connections{background:var(--accent)}.reliability-badge{display:inline-block;padding:2px 8px;border-radius:4px;font-size:var(--t-xs);font-weight:600;text-transform:uppercase}.reliability-on-track{background:var(--success);color:#fff}.reliability-overdue{background:var(--danger);color:#fff}.reliability-caution{background:var(--warn);color:#fff}.calendar-page{max-width:var(--container-data);margin:var(--space-10) auto;padding:0 var(--space-6)}.calendar-header{display:flex;align-items:center;margin-bottom:var(--space-8);gap:var(--space-4)}.calendar-back-link{display:inline-flex;align-items:center;gap:var(--space-2);color:var(--ink-2);font-size:var(--t-sm);text-decoration:none;transition:color .15s ease}.calendar-back-link:hover{color:var(--ink)}.calendar-title{font-size:var(--t-2xl);font-weight:700;margin:0}.calendar-nav{display:flex;justify-content:space-between;align-items:center;margin-bottom:var(--space-8)}.calendar-nav-link{display:inline-flex;align-items:center;gap:var(--space-2);color:var(--primary);text-decoration:none;font-weight:600;font-size:var(--t-sm);transition:opacity .15s ease}.calendar-nav-link:hover{opacity:.8}.calendar-month-label{font-size:var(--t-xl);font-weight:700;margin:0}.calendar-grid{display:grid;grid-template-columns:repeat(7,1fr);grid-gap:1px;gap:1px;background:var(--border);border-radius:var(--r-sm);padding:1px;overflow:hidden}.calendar-weekday-header{background:var(--panel);padding:var(--space-3) var(--space-2);text-align:center;font-weight:600;font-size:var(--t-xs);color:var(--ink-2);text-transform:uppercase;letter-spacing:.08em}.calendar-day{background:var(--bg);min-height:100px;padding:var(--space-2);display:flex;flex-direction:column;position:relative}.calendar-day-muted{opacity:.5}.calendar-day-today{border:2px solid var(--primary)}.calendar-day-number{font-size:var(--t-sm);font-weight:600;margin-bottom:var(--space-2);color:var(--ink)}.calendar-day-meals{display:flex;flex-direction:column;gap:var(--space-1)}.calendar-meal-link{display:inline-flex;align-items:center;font-size:var(--t-xs);color:var(--primary);text-decoration:none;gap:var(--space-1);padding:var(--space-1) var(--space-2);border-radius:var(--r-pill);background:var(--primary-tint);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;transition:all .15s ease}.calendar-meal-link:hover{background:var(--primary);color:#fff}.calendar-meal-icon{flex-shrink:0}.calendar-meal-text{overflow:hidden;text-overflow:ellipsis;flex:1 1;min-width:0}.topnav{position:-webkit-sticky;position:sticky;top:0;z-index:100;background:#fff;border-bottom:1px solid var(--border)}.topnav-content{max-width:1000px;margin:0 auto;padding:var(--space-3) var(--space-4);display:flex;align-items:center;gap:var(--space-4)}.topnav-logo{font-size:var(--t-xl);font-weight:700}.topnav-nav{display:flex;gap:var(--space-1)}.topnav-link{padding:8px 12px;border-radius:var(--r-pill);text-decoration:none;font-size:var(--t-sm);font-weight:500;color:var(--ink-2);transition:all .15s ease}.topnav-link:hover{background:var(--panel);color:var(--ink)}.topnav-link.is-active{background:var(--primary-tint);color:var(--primary);font-weight:600}.topnav-actions{flex:1 1;display:flex;justify-content:flex-end}.topnav-avatar{position:relative}.topnav-avatar-btn{background:transparent;border:none;padding:4px;cursor:pointer;border-radius:50%;display:flex;align-items:center;justify-content:center}.topnav-avatar-btn:hover{background:var(--panel)}.topnav-avatar-menu{position:absolute;top:100%;right:0;margin-top:var(--space-2);background:#fff;border:1px solid var(--border);border-radius:var(--r-md);box-shadow:var(--sh-md);min-width:160px;overflow:hidden}.topnav-avatar-menu-item{display:block;padding:10px 14px;text-decoration:none;font-size:var(--t-sm);color:var(--ink);transition:background .15s ease}.topnav-avatar-menu-item:hover{background:var(--panel)}.topnav-avatar-menu-divider{height:1px;background:var(--border);margin:var(--space-2) 0}@media (max-width:720px){.topnav-actions-desktop,.topnav-nav-desktop{display:none!important}.topnav-avatar-menu-mobile{position:fixed;top:0;left:0;right:0;bottom:0;margin:0;border-radius:0;min-width:auto}.topnav-mobile-menu-desktop-hidden{display:flex}}@media (min-width:721px){.topnav-mobile-menu-desktop-hidden{display:none!important}}