: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}
