:root{--bg:#f7f6f2;--surface:#fff;--ink:#23282b;--muted:#8c928d;--faint:#b7bcb6;--line:#eceae3;--accent:#2f7a5b;--accent-ink:#205740;--accent-soft:#e7f1ec;--amber:#b8801f;--amber-soft:#f6ecd8;--danger:#b4443a;--radius:18px;--radius-sm:12px}*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}html,body{margin:0;padding:0}body{background:var(--bg);color:var(--ink);-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility;font-family:-apple-system,BlinkMacSystemFont,SF Pro Text,Segoe UI,Roboto,Helvetica,Arial,sans-serif;line-height:1.45}button,input{color:inherit;font-family:inherit;font-size:16px}.app{flex-direction:column;max-width:480px;min-height:100vh;margin:0 auto;display:flex}.app-header{z-index:20;padding:calc(env(safe-area-inset-top) + 18px) 22px 14px;-webkit-backdrop-filter:saturate(180%)blur(14px);border-bottom:1px solid var(--line);background:#f7f6f2d1;position:sticky;top:0}.app-header h1{letter-spacing:-.02em;margin:0;font-size:26px;font-weight:700}.app-subtitle{color:var(--muted);margin:2px 0 0;font-size:13.5px}.content{flex-direction:column;flex:1;gap:6px;padding:18px 16px 8px;display:flex}.app-footer{padding:20px 24px calc(env(safe-area-inset-bottom) + 24px);text-align:center;color:var(--faint);font-size:12px}.day-section{margin-top:14px}.day-heading{letter-spacing:.04em;text-transform:uppercase;color:var(--muted);margin:0 6px 10px;font-size:13px;font-weight:700}.meal-card{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);margin-bottom:10px;transition:box-shadow .2s,border-color .2s;overflow:hidden}.meal-card.open{border-color:#e2e0d7;box-shadow:0 10px 30px #23282b14}.meal-summary{text-align:left;cursor:pointer;background:0 0;border:none;align-items:center;gap:12px;width:100%;padding:15px 16px;display:flex}.meal-main{flex-direction:column;flex:1;gap:8px;min-width:0;display:flex}.meal-line{align-items:center;gap:10px;display:flex}.meal-type{letter-spacing:-.01em;align-items:center;gap:6px;font-size:16px;font-weight:650;display:inline-flex}.meal-icon{font-size:15px}.meal-count{color:var(--muted);background:var(--bg);border-radius:999px;padding:2px 9px;font-size:12px}.charge-row{align-items:center;gap:10px;min-width:0;display:flex}.charge-names{color:var(--ink);font-size:14px;font-weight:500}.meal-menu{color:var(--muted);white-space:pre-wrap;font-size:13px;line-height:1.35}.todo-badge{color:var(--amber);background:var(--amber-soft);border-radius:999px;align-self:flex-start;padding:3px 10px;font-size:12.5px;font-weight:600}.outside-badge{color:#3f5b86;background:#e9eef6;border-radius:999px;align-self:flex-start;padding:3px 10px;font-size:12.5px;font-weight:600}.meal-card.outside{background:#fbfbf9;border-style:dashed}.meal-card.outside .meal-type{color:var(--muted)}.meal-card.outside .meal-icon{filter:grayscale();opacity:.6}.avatar{color:#fff;border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;font-weight:700;display:inline-flex;box-shadow:inset 0 0 0 1px #ffffff2e}.avatar-stack{display:flex}.avatar-stack .avatar{border:2px solid var(--surface);margin-left:-8px}.avatar-stack .avatar:first-child{margin-left:0}.chevron{border-right:2px solid var(--faint);border-bottom:2px solid var(--faint);flex-shrink:0;width:9px;height:9px;margin:0 4px;transition:transform .25s;transform:rotate(45deg)}.chevron.up{transform:rotate(-135deg)}.meal-editor{padding:2px 16px 16px;animation:.22s slidein}@keyframes slidein{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:none}}.editor-section{border-top:1px solid var(--line);padding:14px 0}.section-head{justify-content:space-between;align-items:center;margin-bottom:12px;display:flex}.section-head h3{letter-spacing:.04em;text-transform:uppercase;color:var(--muted);margin:0;font-size:13px;font-weight:700}.count-pill{color:var(--muted);background:var(--bg);border-radius:999px;padding:2px 10px;font-size:12px;font-weight:700}.count-pill.ok{background:var(--accent-soft);color:var(--accent-ink)}.pill-grid{flex-wrap:wrap;gap:8px;display:flex}.person-pill{border:1px solid var(--line);background:var(--surface);cursor:pointer;border-radius:999px;align-items:center;gap:8px;padding:5px 12px 5px 6px;transition:all .15s;display:inline-flex}.pill-name{white-space:nowrap;font-size:14px;font-weight:500}.charge-count{background:var(--bg);min-width:18px;height:18px;color:var(--muted);border-radius:999px;justify-content:center;align-items:center;margin-left:-2px;padding:0 5px;font-size:11px;font-weight:700;display:inline-flex}.person-pill.selected .charge-count{color:#fff;background:#ffffff3d}.person-pill.selected{background:var(--accent);border-color:var(--accent)}.person-pill.selected .pill-name{color:#fff;font-weight:600}.person-pill.selected .avatar{box-shadow:inset 0 0 0 1px #ffffff59}.present-toggle.absent{background:0 0;border-style:dashed;border-color:#dcd9cf}.present-toggle.absent .pill-name{color:var(--faint);text-decoration:line-through;-webkit-text-decoration-color:var(--faint);text-decoration-color:var(--faint)}.present-toggle.absent .avatar{filter:grayscale();opacity:.5}.person-pill.guest{border-color:var(--accent-soft);background:var(--accent-soft);padding-right:6px}.pill-remove{color:var(--muted);cursor:pointer;background:#0000000f;border:none;border-radius:50%;justify-content:center;align-items:center;width:20px;height:20px;font-size:15px;line-height:1;display:inline-flex}.add-guest-pill{color:var(--accent-ink);background:0 0;border-style:dashed;border-color:#c9d8d0;padding:8px 14px;font-size:14px;font-weight:600}.person-pill.adding{border-color:var(--accent);padding:3px 6px 3px 12px}.person-pill.adding input{background:0 0;border:none;outline:none;width:110px;padding:4px 0}.btn-delete{border-radius:var(--radius-sm);width:100%;color:var(--danger);cursor:pointer;background:0 0;border:none;margin-top:16px;padding:12px;font-size:14px;font-weight:600}.btn-delete:active{background:#fbe9e7}.holiday-range{flex-wrap:wrap;align-items:center;gap:8px;padding:2px 4px 8px;display:flex}.holiday-label{letter-spacing:.04em;text-transform:uppercase;width:100%;color:var(--muted);margin:0 0 8px 2px;font-size:13px;font-weight:700}.range-field{color:var(--muted);background:var(--surface);border:1px solid var(--line);border-radius:999px;align-items:center;gap:6px;padding:6px 12px;font-size:13px;display:inline-flex}.range-field input[type=date]{color:var(--ink);background:0 0;border:none;outline:none;padding:0;font-size:14px;font-weight:600}.muted{color:var(--muted)}.center{text-align:center}.empty{text-align:center;color:var(--muted);padding:56px 16px}.empty p{margin:4px 0}.error-banner{color:var(--danger);border-radius:var(--radius-sm);background:#fbe9e7;margin:0 0 8px;padding:11px 14px;font-size:14px}.day-section,.meal-card{scroll-margin-top:96px}.day-heading{align-items:center;display:flex}.day-section.is-today .day-heading{color:var(--accent-ink)}.day-tag{background:var(--accent);color:#fff;letter-spacing:.06em;border-radius:999px;margin-right:8px;padding:3px 8px;font-size:10px;font-weight:800;display:inline-block}.day-section.is-today .meal-card{border-color:#d7e6de}.meal-note{color:var(--muted);flex-wrap:wrap;gap:3px 10px;max-width:100%;font-size:12px;display:flex}.note-guests{color:var(--accent-ink);font-weight:600}.note-absent{color:var(--faint)}.menu-input{border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--bg);resize:vertical;width:100%;color:var(--ink);outline:none;padding:11px 12px;font-size:15px;line-height:1.4}.menu-input:focus{border-color:var(--accent);background:var(--surface)}.menu-input::placeholder{color:var(--faint)}.skeletons{flex-direction:column;gap:10px;margin-top:8px;display:flex}.skel-card{border-radius:var(--radius);background:linear-gradient(100deg,#efeee9 30%,#f7f6f2 50%,#efeee9 70%) 0 0/200% 100%;height:74px;animation:1.3s linear infinite shimmer}@keyframes shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}.meal-summary{transition:background .15s}.meal-summary:active{background:var(--bg)}.person-pill:active{transform:scale(.96)}.setup{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:22px}.setup h2{margin-top:0;font-size:19px}.setup ol{padding-left:20px;line-height:1.7}.setup code{background:var(--bg);border-radius:6px;padding:1px 6px;font-size:13px}.setup a{color:var(--accent)}
