:root{--fg:#1b1b1b;--muted:#6b6b6b;--line:#dcdcd6;--bg:#faf9f6;--accent:#1f6f4f;--danger:#a32020;color:var(--fg);background:var(--bg);font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif}*{box-sizing:border-box}body{margin:0}#root{max-width:760px;margin:0 auto;padding:12px 12px 64px}h1{margin:0;font-size:1.15rem}h2{margin:20px 0 8px;font-size:1rem}h3{text-transform:capitalize;margin:0;font-size:.9rem}.app-header{justify-content:space-between;align-items:center;padding-bottom:8px;display:flex}.tabs{background:var(--bg);z-index:2;border-bottom:1px solid var(--line);gap:6px;padding:8px 0;display:flex;position:sticky;top:0}.tabs a{text-align:center;border:1px solid var(--line);color:var(--fg);border-radius:8px;flex:1;padding:10px 8px;font-size:.9rem;text-decoration:none}.tabs a.active{background:var(--accent);color:#fff;border-color:var(--accent)}.panel,.entry{border:1px solid var(--line);background:#fff;border-radius:10px;margin-bottom:10px;padding:12px}.row-between{justify-content:space-between;align-items:center;gap:8px;display:flex}.field{margin:8px 0;display:block}.field>span{color:var(--muted);margin-bottom:2px;font-size:.75rem;display:block}.field.inline{align-items:center;gap:8px;display:flex}.field.inline>span{color:var(--fg);margin:0;font-size:.85rem}input,select{border:1px solid var(--line);width:100%;color:inherit;background:#fff;border-radius:7px;padding:9px 8px;font-size:16px}.field.inline input[type=checkbox]{width:20px;height:20px}button{border:1px solid var(--line);color:inherit;background:#fff;border-radius:7px;padding:9px 12px;font-size:.9rem}button.link{color:var(--accent);background:0 0;border:none;padding:4px}button.danger{color:var(--danger)}.hint{color:var(--muted);margin:6px 0;font-size:.75rem}.status{color:var(--accent);min-height:1.1em;margin:6px 0;font-size:.8rem}.error{color:var(--danger);font-size:.8rem}.badge{background:var(--accent);color:#fff;border-radius:20px;margin-left:8px;padding:2px 6px;font-size:.7rem}.alt-block{border-left:3px solid var(--accent);margin-top:8px;padding-left:10px}.alt-summary{margin:8px 0 0;padding:0;list-style:none}.day-block{margin-bottom:18px}.subs{border-top:1px dashed var(--line);margin-top:10px;padding-top:8px}.gate{max-width:320px;margin:15vh auto 0}.gate form{margin-top:12px}.gate button{width:100%;margin-top:10px}.grid-scroll{-webkit-overflow-scrolling:touch;overflow-x:auto}.grid{border-collapse:collapse;font-size:.75rem}.grid th,.grid td{border:1px solid var(--line);padding:0}.grid thead th{white-space:nowrap;background:#f0efea;padding:4px 6px}.grid .unit{color:var(--muted);font-size:.65rem;font-weight:400;display:block}.grid .rowhead{text-align:left;white-space:nowrap;background:#f0efea;padding:4px 6px;position:sticky;left:0}.grid .corner{z-index:1;position:sticky;left:0}.grid input.cell{text-align:center;border:none;border-radius:0;width:100%;min-width:54px;padding:8px 4px;font-size:16px}.grid input.cell:focus{outline:2px solid var(--accent);outline-offset:-2px}.grid input.cell.invalid{color:var(--danger);background:#ffe6e6}.flatmate{padding-bottom:40px}.header-actions{align-items:center;gap:10px;display:flex}.name-list{flex-direction:column;gap:8px;margin:10px 0;display:flex}.name-btn{text-align:left;width:100%;padding:14px;font-size:1rem}.picked-name{margin:4px 0 10px;font-size:1.1rem;font-weight:600}.day{margin-top:18px}.day h2{justify-content:space-between;align-items:baseline;margin:0 0 8px;display:flex}.daydate{color:var(--muted);font-size:.8rem;font-weight:400}.slot{border:1px solid var(--line);border-left:6px solid var(--accent);background:#fff;border-radius:12px;margin-bottom:10px;padding:12px}.slot.is-skipping{background:#f2f1ec;border-left-color:#b9b9b3}.slot.is-skipping .dish{color:var(--muted);text-decoration:line-through}.slot.is-locked{opacity:.75}.slot-head{justify-content:space-between;align-items:flex-start;gap:10px;display:flex}.slot-head h3{letter-spacing:.06em;text-transform:uppercase;color:var(--muted);font-size:.75rem}.dish{margin:2px 0 0;font-size:1.05rem;font-weight:600}.swap{color:var(--accent);font-weight:600}.note{color:var(--muted);margin:2px 0 0;font-size:.8rem}.state-pill{letter-spacing:.08em;border-radius:20px;flex:none;padding:5px 10px;font-size:.7rem;font-weight:700}.state-pill.in{background:var(--accent);color:#fff}.state-pill.out{color:#55554f;background:#d9d8d2}.lock-note{color:var(--danger);margin:8px 0;font-size:.75rem}.lock-note.open{color:var(--muted)}.eat-toggle{gap:8px;margin:8px 0;display:flex}.eat-toggle button{flex:1;min-height:46px;font-weight:600}.eat-toggle button.on{background:var(--accent);border-color:var(--accent);color:#fff}.eat-toggle button.off{color:#fff;background:#55554f;border-color:#55554f}.eat-toggle button:disabled{opacity:1}.eat-toggle button:disabled:not(.on):not(.off){opacity:.45}.qty{border-top:1px solid var(--line);justify-content:space-between;align-items:center;gap:10px;padding:6px 0;display:flex}.qty-name{text-transform:capitalize;font-size:.9rem}.qty-controls{flex:none;align-items:center;gap:6px;display:flex}.qty-controls button{width:44px;height:44px;padding:0;font-size:1.2rem;line-height:1}input.qty-value{text-align:center;width:62px;padding:11px 4px;font-size:16px}input.qty-value.invalid{color:var(--danger);background:#ffe6e6}.swap-choice{border-top:1px solid var(--line);margin-top:4px;padding-top:8px}.swap-choice .eat-toggle button{font-size:.85rem}.guests{border-top:1px solid var(--line);margin-top:8px;padding-top:8px}.guest{background:var(--bg);border:1px solid var(--line);border-radius:8px;margin-top:8px;padding:8px 10px}.guest .qty:first-of-type{border-top:none}.save-bar{z-index:5;background:#fff4d6;border:1px solid #e0c675;border-radius:10px;justify-content:space-between;align-items:center;gap:10px;margin-bottom:10px;padding:10px 12px;font-size:.85rem;font-weight:600;display:flex;position:sticky;top:0}.save-bar-actions{align-items:center;gap:8px;display:flex}button.primary{background:var(--accent);border-color:var(--accent);color:#fff;min-height:40px;padding:8px 18px;font-weight:600}.slot.is-dirty{border-left-color:#d19a12;box-shadow:inset 0 0 0 2px #f5e2b0}.guest.is-dirty{background:#fffdf5;border-color:#e0c675}.head-right{flex:none;align-items:center;gap:6px;display:flex}.badge.unsaved{background:#d19a12}.add-component{margin:8px 0 0}.add-component select{font-size:16px}button.qty-remove{color:var(--danger);background:0 0;border:none;min-height:0;margin-left:4px;padding:2px 6px;font-size:1.05rem;line-height:1}.cook{color:#000;-webkit-user-select:none;user-select:none;background:#fff;max-width:640px;margin:0 auto;padding:16px 16px 40px}.cook-date{color:#333;margin:0;font-size:1.25rem}.cook-slot{border-bottom:3px solid #000;margin:2px 0 14px;padding-bottom:10px;font-size:1.85rem;font-weight:700}.cook-dishes{margin-bottom:6px}.cook-components{border-top:2px dashed #999;margin-top:6px;padding-top:6px}.cook-line{flex-wrap:wrap;justify-content:flex-start;align-items:baseline;gap:0 10px;margin:0;padding:5px 0;display:flex}.cook-label{font-size:1.8rem;font-weight:600;line-height:1.15}.cook-dash{color:#555;font-size:1.6rem}.cook-count{font-variant-numeric:tabular-nums;font-size:2.4rem;font-weight:800;line-height:1.05}.cook-unit{font-size:1.8rem;font-weight:600;line-height:1.15}.cook-line.broken{background:#ffe08a;border:3px solid #b00020;padding:5px 8px}.cook-line.broken .cook-count,.cook-line.broken .cook-unit{color:#b00020}.cook-offline{background:#fff4f4;border:4px solid #b00020;margin-top:12px;padding:18px}.cook-offline-title{color:#b00020;margin:0 0 10px;font-size:2.2rem;font-weight:800;line-height:1.15}.cook-offline-detail{margin:0 0 10px;font-size:1.5rem;line-height:1.35}.cook-offline-retry{color:#555;margin:0;font-size:1.2rem}.cook-people{border-top:3px solid #000;margin:18px 0 0;padding:10px 0 0;list-style:none}.cook-people li{font-size:1.5rem;line-height:1.4}.cook-people li.away{color:#c00000;text-decoration:line-through}.cook-status{color:#333;font-size:1.5rem}.tabs{scrollbar-width:none;overflow-x:auto}.tabs::-webkit-scrollbar{display:none}.tabs a{flex:none;padding:9px 10px;font-size:.82rem}.slot-card{border:1px solid var(--line);background:#fff;border-radius:10px;margin-bottom:14px;padding:12px}.slot-card-head{border-bottom:1px solid var(--line);justify-content:space-between;align-items:flex-start;gap:8px;padding-bottom:8px;display:flex}.slot-card-head h2{text-transform:capitalize;margin:0 0 2px}.slot-card .dish{margin:0;font-size:1rem;font-weight:600}.tag{border:1px solid var(--line);color:var(--muted);white-space:nowrap;text-transform:none;border-radius:999px;margin-left:6px;padding:2px 7px;font-size:.7rem;font-weight:600;display:inline-block}.tag-override{background:var(--accent);border-color:var(--accent);color:#fff}.tag-locked{color:#fff;background:#55554f;border-color:#55554f}.tag-open{color:var(--accent);border-color:var(--accent)}.tag-away{color:var(--danger);border-color:var(--danger)}.muted{color:var(--muted);font-size:.8rem}.attendance-list{margin:10px 0}.person-row{border-bottom:1px dashed var(--line);padding:7px 0}.person-row:last-child{border-bottom:none}.person-row-head{align-items:center;gap:6px;display:flex}.person-row.away .person-row-head strong{color:var(--danger);text-decoration:line-through}.qty-line{flex-wrap:wrap;gap:4px 10px;margin:3px 0 0;font-size:.85rem;display:flex}.qty-line.guest{border-left:2px solid var(--line);margin-top:4px;padding-left:12px}.qty{white-space:nowrap}.qty em{font-style:normal}.totals{border-top:2px solid var(--fg);margin-top:6px;padding-top:8px}.totals p{margin:2px 0;font-size:.95rem}.slot-controls{border-top:1px solid var(--line);margin-top:10px;padding-top:10px}.slot-controls>button{width:100%}.override-form h3{text-transform:none}.override-form{display:block}.override-form label{color:var(--muted);margin-top:8px;font-size:.8rem;display:block}.override-form input,.override-form select{border:1px solid var(--line);width:100%;color:var(--fg);background:#fff;border-radius:8px;margin-top:3px;padding:9px;font-size:1rem;display:block}.override-form .row{flex-wrap:wrap;align-items:center;gap:8px;margin-top:12px;display:flex}.voice{margin-top:10px}.voice>button{width:100%}.voice-notes{flex-direction:column;gap:6px;margin-bottom:8px;display:flex}.voice-note{align-items:center;gap:8px;display:flex}.voice-note audio{flex:1;min-width:0;height:34px}.summary-strip{border:1px solid var(--line);background:#fff;border-radius:10px;flex-wrap:wrap;gap:8px;margin-bottom:12px;padding:10px;display:flex}.summary-cell{flex-direction:column;flex:130px;gap:1px;font-size:.8rem;display:flex}.summary-n{font-size:1.5rem;font-weight:700;line-height:1}.summary-label{color:var(--muted);text-transform:uppercase;letter-spacing:.03em;font-size:.7rem}.history-nav{align-items:center;gap:8px;margin-bottom:12px;display:flex}.history-nav select{border:1px solid var(--line);color:var(--fg);background:#fff;border-radius:8px;flex:1;padding:9px;font-size:.95rem}.prov{color:var(--muted);margin-left:3px;font-size:.68rem;font-style:normal}.prov-warn{color:var(--danger);border:1px solid var(--danger);border-radius:4px;padding:0 3px}.prov-banner{color:var(--danger);border:1px solid var(--danger);background:#fff6f6;border-radius:8px;margin:8px 0 0;padding:7px 9px;font-size:.78rem}.cook-notes{flex-direction:column;gap:10px;margin:18px 0 0;display:flex}.cook-note-btn{color:#fff;background:#1f6f4f;border:3px solid #14503a;border-radius:12px;align-items:center;gap:12px;width:100%;min-height:68px;padding:12px 16px;font-size:1.8rem;font-weight:700;display:flex}.cook-note-icon{font-size:1.6rem;line-height:1}.cook-note audio{display:none}.subtabs{border-bottom:1px solid #ddd;gap:.25rem;margin-bottom:.75rem;display:flex}.subtabs button{color:#555;background:0 0;border:none;border-bottom:2px solid #0000;border-radius:0;padding:.5rem .9rem;font-size:1rem}.subtabs button.active{color:#111;border-bottom-color:#2b6cb0;font-weight:600}.table-scroll{overflow-x:auto}.master-table{border-collapse:collapse;width:100%;font-size:.95rem}.master-table th,.master-table td{text-align:left;vertical-align:middle;border-bottom:1px solid #eee;padding:.5rem .6rem}.master-table th{text-transform:uppercase;letter-spacing:.04em;color:#666;font-size:.8rem}.master-table td.num{text-align:right;font-variant-numeric:tabular-nums}.master-table td.actions{text-align:right;white-space:nowrap}.master-table td.actions button{margin-left:.5rem}.master-table .mr{color:#444}.prewrap{white-space:pre-wrap}.modal-backdrop{z-index:50;background:#00000073;justify-content:center;align-items:flex-start;padding:1rem;display:flex;position:fixed;inset:0;overflow-y:auto}.modal{background:#fff;border-radius:10px;width:min(34rem,100%);margin:auto;padding:1rem 1.1rem 1.2rem;box-shadow:0 12px 40px #00000040}.modal h3{margin:0 0 .75rem}.modal fieldset{border:1px solid #ddd;border-radius:6px;padding:.5rem .75rem .25rem}.modal legend{color:#555;padding:0 .3rem;font-size:.85rem}.boxed{border-radius:6px;margin:.6rem 0;padding:.6rem .75rem}.hint.boxed{background:#f4f6f8;border:1px solid #e0e4e8}.warn.boxed{color:#6b4a05;background:#fff6e5;border:1px solid #e6b96b}.preview.boxed{background:#eef6ee;border:1px solid #a8ceab}.preview ul{margin:.4rem 0 .5rem;padding-left:1.1rem}.preview li{margin:.15rem 0}.preview b{font-size:1.05rem}.dish-select{position:relative}.dish-button{text-align:left;background:#fff;border:1px solid #ccc;border-radius:6px;flex-wrap:wrap;align-items:baseline;gap:.5rem;width:100%;padding:.5rem .6rem;font-size:1rem;display:flex}.dish-button.empty{color:#888}.dish-en{font-weight:500}.dish-mr{color:#666;font-size:.92rem}.dish-popup{z-index:20;background:#fff;border:1px solid #ccc;border-radius:6px;margin-top:.2rem;position:absolute;top:100%;left:0;right:0;overflow:hidden;box-shadow:0 8px 24px #0000002e}.dish-search{border:none;border-bottom:1px solid #eee;border-radius:0;width:100%;padding:.55rem .6rem;font-size:1rem}.dish-search:focus{outline-offset:-2px;outline:2px solid #2b6cb0}.dish-list{max-height:15rem;margin:0;padding:0;list-style:none;overflow-y:auto}.dish-option,.dish-add{text-align:left;background:0 0;border:none;border-radius:0;flex-wrap:wrap;align-items:baseline;gap:.5rem;width:100%;padding:.5rem .6rem;font-size:.98rem;display:flex}.dish-option:hover,.dish-add:hover{background:#eef3fa}.dish-option.selected{background:#e3edf9;font-weight:600}.dish-add{color:#2b6cb0;background:#fff;border-bottom:1px solid #eee;font-weight:600;position:sticky;top:0}.dish-empty{padding:.6rem;font-size:.92rem}.menu-blocks{flex-direction:column;gap:.4rem;display:flex}.menu-block{background:#fff;border:1px solid #e2e2e2;border-radius:8px}.menu-block.open{border-color:#2b6cb0;box-shadow:inset 0 0 0 1px #2b6cb0}.menu-block-head{text-align:left;background:0 0;border:none;border-radius:8px;grid-template-columns:1fr;gap:.1rem .75rem;width:100%;padding:.55rem .7rem;font-size:.95rem;display:grid}.menu-block-head:hover{background:#f7f9fc}.mb-when{text-transform:uppercase;letter-spacing:.04em;color:#666;gap:.4rem;font-size:.78rem;display:flex}.mb-slot{color:#2b6cb0;font-weight:600}.mb-dish{font-weight:600}.mb-sub{color:#555;font-weight:400}.mb-components{color:#666;font-size:.86rem}.menu-block-body{border-top:1px solid #eee;padding:0 .7rem .8rem}@media (width>=34rem){.menu-block-head{grid-template-columns:12.5rem 1fr auto;align-items:baseline}.mb-components{text-align:right}}.override-row{background:#fff;border:1px solid #e2e2e2;border-radius:8px;margin-bottom:.6rem;padding:.7rem .8rem}.override-row.overridden{background:#fffdf5;border-color:#b8860b}.override-row h3{margin:0 0 .2rem;font-size:1rem}.override-row .dish{margin:.1rem 0;font-weight:600}.field.inline input[type=radio]{flex:none;width:20px;height:20px}.modal fieldset .field.inline{align-items:flex-start;margin:.4rem 0}.modal fieldset .field.inline input[type=radio]{margin-top:.15rem}.modal fieldset .field.inline>span{flex:1}.row-between>button{white-space:nowrap;flex:none;align-self:start}.menu-admin .warn.boxed{display:block}.menu-admin .warn.boxed code{word-break:break-all;font-size:.85em}
