:root{--plum: #5b2a4e;--plum-dark: #431d39;--cream: #faf6f1;--card: #ffffff;--line: #e7ddd3;--text: #2b2230;--muted: #7d7183;--gold: #b8893b;--good: #2f7d4f;--bad: #b3261e;--warn: #b26a00;--radius: 12px}*{box-sizing:border-box}html,body,#root{margin:0;min-height:100%}body{font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif;background:var(--cream);color:var(--text);font-size:16px;line-height:1.4;-webkit-text-size-adjust:100%}h1,h2,h3{margin:.6rem 0 .4rem;line-height:1.2}h1{font-size:1.6rem;color:var(--plum)}h2{font-size:1.3rem}h3{font-size:1.05rem;color:var(--plum)}code{background:#f0e8df;padding:1px 5px;border-radius:4px}.muted{color:var(--muted)}.small{font-size:.85rem;color:var(--muted)}button.small,a.small{font-size:.85rem}.note{background:#fbf3e4;border-left:3px solid var(--gold);padding:6px 10px;margin:8px 0;border-radius:4px;white-space:pre-wrap}.error{background:#fdecea;color:var(--bad);border-radius:8px;padding:8px 12px;margin:8px 0}.bad-text{color:var(--bad)}.good-text{color:var(--good)}.center{min-height:100vh;display:grid;place-items:center;padding:16px}.app{max-width:820px;margin:0 auto;min-height:100vh}.content{padding:8px 14px 80px}.topbar{background:var(--plum);color:#fff;padding:10px 14px;display:flex;align-items:center;justify-content:space-between;position:sticky;top:0;z-index:5}.topbar .small{color:#e9d9e4}.tabs{display:flex;gap:4px;background:var(--plum-dark);padding:0 8px;overflow-x:auto;position:sticky;top:54px;z-index:4}.tab{background:none;border:0;color:#d9c3d2;padding:12px 14px;font-size:.95rem;white-space:nowrap;border-bottom:3px solid transparent;cursor:pointer}.tab.active{color:#fff;border-bottom-color:var(--gold);font-weight:600}.card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:12px 14px;margin:10px 0}.card.narrow{width:100%;max-width:380px}.list{list-style:none;margin:8px 0;padding:0}.item{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:10px 14px;margin-bottom:8px;display:flex;align-items:center;justify-content:space-between;gap:10px}.item.clickable{cursor:pointer}.item.clickable:active{background:#f6eee6}.chev{color:var(--muted);font-size:1.4rem}.row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.row.space{justify-content:space-between}.grid2{display:grid;grid-template-columns:1fr 1fr;gap:8px}@media (max-width: 380px){.grid2{grid-template-columns:1fr}}label{display:block;font-size:.85rem;color:var(--muted);margin:8px 0}label.check{display:flex;align-items:center;gap:6px;margin:8px 0}input,select,textarea{width:100%;font:inherit;color:var(--text);background:#fff;border:1px solid var(--line);border-radius:8px;padding:9px 10px;margin-top:3px}input[type=checkbox]{width:auto;margin:0}input:focus,select:focus,textarea:focus{outline:2px solid var(--gold);outline-offset:1px}.search{margin:10px 0}.inline-form{display:flex;gap:6px;flex-wrap:wrap;margin-top:8px}.inline-form input,.inline-form select{width:auto;flex:1 1 120px;margin-top:0}.btn{display:inline-block;font:inherit;background:#fff;color:var(--plum);border:1px solid var(--plum);border-radius:10px;padding:9px 14px;cursor:pointer;text-decoration:none;text-align:center}.btn.primary{background:var(--plum);color:#fff}.btn.good{background:var(--good);border-color:var(--good);color:#fff}.btn.danger{color:var(--bad);border-color:var(--bad)}.btn.ghost{border-color:transparent;background:transparent}.topbar .btn.ghost{color:#fff;border-color:#fff5}.btn.small{padding:5px 10px}.btn:disabled{opacity:.6}.chips{display:flex;flex-wrap:wrap;gap:6px;margin:8px 0}.chip{font:inherit;font-size:.85rem;background:#f3ebe3;border:1px solid var(--line);color:var(--text);border-radius:999px;padding:3px 10px}button.chip{cursor:pointer}.chip.on{background:var(--plum);color:#fff;border-color:var(--plum)}.badge{display:inline-block;font-size:.75rem;background:#efe7f0;color:var(--plum);border-radius:999px;padding:1px 8px;white-space:nowrap}.badge.warn{background:#fdf0d9;color:var(--warn)}.badge.bad{background:#fdecea;color:var(--bad)}.badge.good{background:#e3f4ea;color:var(--good)}.taskrow{display:flex;justify-content:space-between;align-items:center;gap:8px;padding:8px 0;border-top:1px dashed var(--line)}.taskrow select{width:auto;margin:0}.print-only{display:none}.invoice table{width:100%;border-collapse:collapse;margin:12px 0}.invoice th,.invoice td{border-bottom:1px solid #ccc;padding:6px;text-align:left}.invoice td:last-child,.invoice th:last-child{text-align:right}@media print{body{background:#fff}.no-print{display:none!important}.print-only{display:block!important}.content{padding:0}}input.invalid,select.invalid,textarea.invalid{border-color:var(--bad);background:#fff8f7}.field-error{color:var(--bad);font-size:.8rem;margin-top:3px}.error ul,.warning ul{margin:4px 0 0;padding-left:18px}.warning{background:#fff6e0;border:1px solid #f0d28a;color:#6b4a00;border-radius:8px;padding:8px 12px;margin:8px 0}.warning .btn{margin-top:6px}.stats{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:8px;margin:8px 0 12px}.stat{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:10px 12px}.stat-label{font-size:.8rem;color:var(--muted)}.stat-value{font-size:1.5rem;font-weight:700;line-height:1.2;color:var(--plum)}.stat.good .stat-value{color:var(--good)}.stat.warn .stat-value{color:var(--warn)}.stat.bad .stat-value{color:var(--bad)}.monthpick{width:auto;margin:0}.barrow{margin:8px 0}.bar{background:#f0e8df;border-radius:999px;height:8px;margin-top:4px;overflow:hidden}.bar>div{background:var(--plum);height:100%;border-radius:999px}.stat.clickable{cursor:pointer;text-align:left;font:inherit;width:100%;color:inherit}.stat.clickable:hover,.stat.clickable:focus-visible{border-color:var(--plum);box-shadow:0 0 0 2px #5b2a4e22;outline:none}.stat.clickable:active{background:#f6eee6}.taskrow.clickable{cursor:pointer}.item .actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap;justify-content:flex-end}.btn.good.small{padding:6px 12px}.actionbar .row{margin-top:6px}.notice{background:#e3f4ea;color:var(--good);border-radius:8px;padding:8px 12px;margin:8px 0;font-weight:600}.diffrow{padding:4px 0;border-top:1px dashed var(--line)}.diffrow .was{color:var(--muted);text-decoration:line-through}
