:root{font-family:system-ui,-apple-system,"Segoe UI",sans-serif;color:#183a35;background:#f3f5f1;line-height:1.5;font-synthesis:none}*{box-sizing:border-box}body{margin:0}main{max-width:1440px;margin:auto;padding:36px}header,.toolbar,.month-nav,.actions,.list-heading,.dialog-heading{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}.eyebrow{letter-spacing:.14em;font-size:11px;font-weight:750;color:#648077}h1{font-size:36px;letter-spacing:-1px;margin:0}h2{font-size:20px;margin:0}h3{font-size:16px;margin:0}.subtitle,.hint{color:#60776e}.hint{font-size:12px}.notice{background:#e7eee6;border-left:3px solid #759887;padding:14px 18px;font-size:13px;border-radius:4px}button,.button,input,textarea,select{font:inherit}button,.button{background:#fff;border:1px solid #ccdacf;color:#244d41;padding:9px 14px;border-radius:9px;cursor:pointer;font-size:13px}button:hover,.button:hover{background:#eaf1eb}button.primary{background:#285a46;color:#fff;border-color:#285a46}button:disabled{opacity:.55;cursor:wait}:focus-visible{outline:3px solid #d9ab4e;outline-offset:2px}label{font-size:13px}input:not([type=checkbox]),textarea,select{display:block;width:100%;border:1px solid #ccdacf;border-radius:8px;background:#fff;padding:9px;color:#244d41;margin-top:5px}input[type=checkbox]{accent-color:#28654e;width:17px;height:17px;flex-shrink:0}.toolbar{margin:24px 0}.month-nav h2{min-width:190px;text-align:center}.stats{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin-bottom:24px}.stat{padding:18px;border:1px solid #dee5dc;border-radius:12px;background:#fff}.stat strong{display:block;font-size:27px}.stat span{font-size:12px;color:#697e73}.layout{display:grid;grid-template-columns:minmax(310px,.85fr) minmax(350px,1.15fr);gap:24px;align-items:start}.panel{padding:22px;border:1px solid #dee5dc;background:#fff;border-radius:14px}.calendar-panel{position:sticky;top:20px}.weekdays,.calendar{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:5px}.weekdays{text-align:center;font-size:12px;color:#78857b;margin-bottom:10px}.day{min-height:70px;padding:7px 2px;display:flex;flex-direction:column;align-items:center;gap:5px}.day.has-events{background:#eaf2ea}.day.selected{background:#285a46;color:#fff}.day small{font-size:10px}.wide{width:100%}.check{display:flex;align-items:center;gap:7px;margin-top:12px}.list-heading{margin:24px 0 12px}.record{border:1px solid #dde5da;border-radius:10px;padding:15px;margin-bottom:10px;overflow-wrap:anywhere}.record.complete{background:#f2f7ef}.record.cancelled{opacity:.65}.record p{font-size:13px;margin:6px 0;white-space:pre-wrap}.record a{color:#326a54}.links,.marks{display:flex;gap:14px;flex-wrap:wrap;margin:10px 0;font-size:12px}.marks{border-top:1px solid #e6ebe2;padding-top:8px}.marks .check{margin:0}.record .actions{justify-content:flex-start;margin-top:12px}.amount{font-weight:650}.status{display:inline-block;font-size:11px;background:#f6f0de;color:#86671e;padding:3px 7px;border-radius:5px}footer{margin-top:24px;padding-top:16px;border-top:1px solid #dce4d8}footer .actions{justify-content:flex-start}#message:empty{display:none}#message:not(:empty){padding:12px;background:#fff2d7;border-radius:8px}dialog{width:min(620px,calc(100% - 24px));max-height:90vh;border:1px solid #ccdacf;border-radius:14px;color:#183a35;padding:24px}dialog::backdrop{background:#173b3466}form>label,#series-fields,#event-fields{display:block;margin:14px 0}.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px}.form-grid label{min-width:0}#form-error{color:#a13122;font-size:13px}[hidden]{display:none!important}@media(max-width:900px){main{padding:24px 16px}.layout{grid-template-columns:1fr}.calendar-panel{position:static}}@media(max-width:520px){h1{font-size:29px}.stats{grid-template-columns:1fr 1fr;gap:8px}.stat{padding:12px}.panel{padding:14px}.day{min-height:58px}.month-nav{width:100%}.month-nav h2{min-width:0}.form-grid{grid-template-columns:1fr}dialog{padding:18px}.actions{gap:8px}}

dialog{width:min(760px,calc(100% - 24px))}
.money-summary{font-size:13px;color:#3d5a50;background:#fff;border:1px solid #dee5dc;border-radius:10px;padding:10px 14px;margin:-12px 0 24px;overflow-wrap:anywhere}.money-summary:empty{display:none}
.day.all-paid{background:#d6ead9;box-shadow:inset 0 0 0 1px #8fbf9b}.day.some-paid{box-shadow:inset 0 0 0 2px #e4c26a}.day.selected{background:#285a46;color:#fff;box-shadow:none}.day .paid-mark{color:#2c6a45;font-weight:650}.day.selected .paid-mark{color:#fff}
.record-head{display:flex;justify-content:space-between;align-items:flex-start;gap:10px}.pill{flex-shrink:0;font-size:11px;font-weight:650;border-radius:20px;padding:3px 9px;background:#fff2d7;color:#86671e}.pill.paid{background:#dcefdf;color:#2c6a45}.pill.partial{background:#fde8c4;color:#8a5a12}.pill.cancelled{background:#eceeea;color:#6c776f}
.record.paid{background:#f2f7ef}.record.partial{border-left:3px solid #e4c26a}.recipient-line{color:#3d5a50}
.parts-list{border-top:1px solid #e6ebe2;margin-top:10px;padding-top:6px;display:grid;gap:6px}.part-line{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;font-size:13px}.part-line .check{margin:0;font-weight:600}.part-line.paid .check{color:#2c6a45}.part-info{color:#60776e;font-size:12px}
.part-amount{display:flex;gap:6px;align-items:center;flex-wrap:wrap}.part-amount input{width:170px;margin:0;padding:6px 8px}.part-amount button{padding:6px 10px;font-size:12px}
fieldset.parts{border:1px solid #dee5dc;border-radius:10px;padding:10px 14px 14px;margin:14px 0;min-width:0}fieldset.parts legend{font-weight:650;font-size:13px;padding:0 6px}
.part-row{display:grid;grid-template-columns:auto minmax(110px,1.3fr) minmax(110px,.9fr) minmax(110px,1fr) minmax(100px,.9fr) auto;gap:8px;align-items:center;margin:8px 0}.part-row input:not([type=checkbox]),.part-row select{margin:0}.part-row .check{margin:0;font-size:12px;white-space:nowrap}
#add-part{font-size:12px;padding:6px 10px}
.part-head{margin:4px 0 0;font-size:11px;color:#60776e;font-weight:600}.part-row input:disabled{background:#f3f5f1;color:#8a978f}
.part-row .blank{visibility:hidden}
@media(max-width:640px){.part-head{display:none}.part-row .blank{display:none}}
.recipient-section{border:1px solid #dee5dc;border-radius:10px;padding:10px 14px;margin:14px 0}.recipient-section summary{cursor:pointer;font-weight:650;font-size:13px}
.form-grid .full{grid-column:1/-1}
#recipient-error{color:#a13122;font-size:13px}#recipient-error:empty{display:none}.actions .spacer{flex:1}button.danger{color:#a13122;border-color:#e3c3bd}
@media(max-width:640px){.part-row{grid-template-columns:auto 1fr;}.part-row .part-name{grid-column:2}.part-row select,.part-row .part-amount-input,.part-row .part-estimate,.part-row .part-paid{grid-column:2}.part-amount input{width:100%}.part-amount{width:100%}}
.sync-panel{margin-top:18px;padding:16px 20px}.sync-panel .list-heading{margin:0}.sync-panel h2{font-size:17px}#sync-status{font-size:13px;margin:10px 0}#sync-error,.sync-event-error{color:#a13122;font-size:13px;overflow-wrap:anywhere}#sync-error:empty{display:none}
/* Shell: header with the signed-in user, tabs, messages */
.topbar{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;flex-wrap:wrap}.topbar .eyebrow{margin:0 0 4px}
.userbar{display:flex;align-items:center;gap:8px;flex-wrap:wrap;justify-content:flex-end}.user-name{display:flex;align-items:center;gap:8px;flex-wrap:wrap;font-size:14px;min-width:0;overflow-wrap:anywhere}
.tabs{display:flex;flex-wrap:wrap;gap:6px;margin:20px 0 4px;border-bottom:1px solid #dce4d8;padding-bottom:8px}.tab-button{display:inline-flex;align-items:center;gap:6px;font-weight:600}.tab-button.active{background:#285a46;color:#fff;border-color:#285a46}
.badge{display:inline-block;min-width:20px;padding:0 6px;border-radius:10px;background:#d9ab4e;color:#183a35;font-size:11px;line-height:18px;text-align:center}.tab-button.active .badge{background:#fff}
.tab-panel{margin-top:16px}.tab-heading{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;margin-bottom:12px}.tab-heading .subtitle{margin:0}
.tab-modules:empty{display:none}.tab-module:empty{display:none}.tab-module{margin-bottom:16px}
#message.error:not(:empty){background:#fbe3df;color:#8a2a1c}
.settings-section{margin-bottom:18px}.settings-section h2{margin-bottom:8px}
/* Users */
.user-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:10px 12px;align-items:end;margin:12px 0}.user-grid label{min-width:0}.user-grid button{height:fit-content}
.users-list{display:grid;gap:10px;margin-top:16px}.user-card{border:1px solid #dde5da;border-radius:10px;padding:12px 14px;overflow-wrap:anywhere}.user-card.inactive{background:#f4f5f2;opacity:.8}
.user-head{display:flex;align-items:center;gap:6px 10px;flex-wrap:wrap}.user-card .actions{justify-content:flex-start}.user-reset{display:flex;gap:10px;align-items:end;flex-wrap:wrap;margin-top:10px}.user-reset label{flex:1 1 180px}
.user-error,#password-error,#login-error{color:#a13122;font-size:13px}.user-error:empty,#password-error:empty,#login-error:empty{display:none}
/* Login page */
.login-page main{max-width:440px;padding-top:10vh}.login-form{display:grid;gap:12px}.login-form h1{font-size:30px}.login-form .hint{margin:0}
.login-setup{border-top:1px solid #e6ebe2;padding-top:12px;font-size:13px}.login-setup code{display:block;background:#f3f5f1;border:1px solid #dee5dc;border-radius:8px;padding:8px;margin:8px 0;white-space:pre-wrap;overflow-wrap:anywhere;font-size:12px}
@media(max-width:520px){.topbar h1{font-size:26px}.userbar{justify-content:flex-start}.tabs{gap:4px}.tab-button{padding:8px 10px}.login-page main{padding-top:24px}}
@media(max-width:360px){main{padding:16px 12px}.panel{padding:12px}.toolbar label{width:100%}.month-nav h2{font-size:17px}.day{min-height:52px}.stat strong{font-size:22px}}
.user-grid>label,.user-reset>label,.login-form>label{margin:0}
.login-form h1,.topbar h1{line-height:1.15}
