*,:before,:after{box-sizing:border-box;margin:0;padding:0}:root{--bg:#f7f4ef;--surface:#fff;--nav-bg:#5c7a6e;--nav-active:#3d5c52;--nav-text:#e8f4f0;--primary:#5c7a6e;--primary-hover:#4a6558;--accent:#e8a87c;--text:#2d3748;--text-muted:#718096;--border:#e2d9cf;--danger:#c0392b;--admin-badge:#9b59b6}html,body,#root{height:100%}body{background:var(--bg);color:var(--text);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;line-height:1.6}button{cursor:pointer;font-family:inherit}.app{flex-direction:column;min-height:100vh;display:flex}.page-content{flex:1;width:100%;max-width:800px;margin:0 auto;padding:24px 16px}.navbar{background:var(--nav-bg);color:var(--nav-text);padding:0 16px}.navbar-header{justify-content:space-between;align-items:center;padding:14px 0;display:flex}.navbar-title{letter-spacing:.02em;font-size:1.1rem;font-weight:700}.navbar-subtitle{opacity:.75;margin-top:1px;font-size:.7rem}.navbar-right{align-items:center;gap:10px;display:flex}.admin-badge{background:var(--admin-badge);color:#fff;letter-spacing:.05em;text-transform:uppercase;border-radius:10px;padding:2px 7px;font-size:.65rem;font-weight:700}.signout-btn{color:var(--nav-text);background:#ffffff26;border:1px solid #ffffff40;border-radius:6px;padding:5px 12px;font-size:.8rem;transition:background .15s}.signout-btn:hover{background:#ffffff40}.navbar-tabs{scrollbar-width:none;gap:2px;display:flex;overflow-x:auto}.navbar-tabs::-webkit-scrollbar{display:none}.nav-tab{color:#ffffffb3;white-space:nowrap;background:0 0;border:none;border-bottom:3px solid #0000;padding:10px 14px;font-size:.82rem;font-weight:500;transition:color .15s,border-color .15s}.nav-tab:hover{color:#fff}.nav-tab.active{color:#fff;border-bottom-color:var(--accent)}.nav-tab.admin-tab{color:#dcb4ffcc}.nav-tab.admin-tab.active{color:#ddb8ff;border-bottom-color:var(--admin-badge)}.tab-unread-badge{background:var(--accent);color:#fff;vertical-align:middle;border-radius:8px;margin-left:5px;padding:2px 5px;font-size:.62rem;font-weight:700;line-height:1;display:inline-block}.login-wrapper{background:var(--bg);justify-content:center;align-items:center;min-height:100vh;padding:24px 16px;display:flex}.login-card{background:var(--surface);border-radius:16px;width:100%;max-width:400px;padding:40px 36px;box-shadow:0 4px 24px #00000014}.login-logo{text-align:center;margin-bottom:28px}.login-logo .logo-icon{font-size:2.8rem;line-height:1}.login-logo h1{color:var(--primary);margin-top:8px;font-size:1.5rem;font-weight:700}.login-logo p{color:var(--text-muted);margin-top:4px;font-size:.85rem}.login-form{flex-direction:column;gap:16px;display:flex}.form-group{flex-direction:column;gap:6px;display:flex}.form-group label{color:var(--text);font-size:.85rem;font-weight:600}.form-group input{border:1.5px solid var(--border);color:var(--text);background:var(--surface);border-radius:8px;outline:none;padding:10px 14px;font-family:inherit;font-size:.95rem;transition:border-color .15s}.form-group input:focus{border-color:var(--primary)}.submit-btn{background:var(--primary);color:#fff;border:none;border-radius:8px;margin-top:4px;padding:12px;font-size:.95rem;font-weight:600;transition:background .15s}.submit-btn:hover:not(:disabled){background:var(--primary-hover)}.submit-btn:disabled{opacity:.6;cursor:not-allowed}.error-msg{color:var(--danger);background:#fee;border:1px solid #fcc;border-radius:8px;padding:10px 14px;font-size:.85rem}.page-header{margin-bottom:24px}.page-header h2{color:var(--primary);font-size:1.4rem;font-weight:700}.page-header p{color:var(--text-muted);margin-top:4px;font-size:.88rem}.card{background:var(--surface);border:1px solid var(--border);border-radius:12px;margin-bottom:14px;padding:20px;box-shadow:0 1px 4px #0000000a}.card-meta{color:var(--text-muted);margin-bottom:6px;font-size:.78rem}.card h3{margin-bottom:6px;font-size:1rem;font-weight:600}.card p{color:var(--text-muted);font-size:.88rem}.placeholder-empty{text-align:center;color:var(--text-muted);padding:48px 24px}.placeholder-empty .empty-icon{margin-bottom:12px;font-size:2.5rem}.placeholder-empty p{font-size:.9rem}.admin-panel{background:#f8f4ff;border:1.5px solid #d8c4ff;border-radius:12px;margin-bottom:16px;padding:20px}.announcement-textarea{border:1.5px solid var(--border);color:var(--text);background:var(--surface);resize:vertical;box-sizing:border-box;border-radius:8px;outline:none;width:100%;padding:10px 14px;font-family:inherit;font-size:.95rem;transition:border-color .15s}.announcement-textarea:focus{border-color:var(--primary)}.announcement-admin-card{background:var(--surface);border:1px solid #d8c4ff;border-radius:10px;margin-bottom:10px;padding:14px 16px}.announcement-admin-meta{flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:12px;margin-bottom:6px;display:flex}.announcement-admin-meta strong{color:var(--text);font-size:.95rem}.announcement-admin-body{color:var(--text-muted);white-space:pre-wrap;font-size:.88rem}.admin-panel h3{color:var(--admin-badge);letter-spacing:.05em;text-transform:uppercase;margin-bottom:14px;font-size:.85rem;font-weight:700}.admin-actions{flex-wrap:wrap;gap:10px;display:flex}.admin-btn{background:var(--admin-badge);color:#fff;border:none;border-radius:8px;padding:9px 16px;font-size:.85rem;font-weight:600;transition:background .15s}.admin-btn:hover{background:#8e44ad}.request-access-link{text-align:center;color:var(--text-muted);margin-top:4px;font-size:.82rem}.link-btn{color:var(--primary);cursor:pointer;background:0 0;border:none;padding:0;font-size:.82rem;font-weight:600;text-decoration:underline}.link-btn:hover{color:var(--primary-hover)}.back-link{color:var(--text-muted);text-align:center;cursor:pointer;background:0 0;border:none;padding:0;font-size:.82rem;text-decoration:underline}.back-link:hover{color:var(--text)}.child-name-row{align-items:center;gap:8px;margin-bottom:6px;display:flex}.child-name-row input{flex:1}.remove-child-btn{border:1.5px solid var(--border);color:var(--text-muted);cursor:pointer;background:0 0;border-radius:6px;flex-shrink:0;padding:4px 8px;font-size:1.1rem;line-height:1}.remove-child-btn:hover{border-color:var(--danger);color:var(--danger)}.add-child-btn{border:1.5px dashed var(--border);color:var(--primary);cursor:pointer;text-align:center;background:0 0;border-radius:8px;width:100%;margin-top:2px;padding:7px 12px;font-size:.82rem;font-weight:600;transition:border-color .15s,color .15s}.add-child-btn:hover{border-color:var(--primary)}.pending-badge{color:#fff;vertical-align:middle;background:#e07b39;border-radius:10px;margin-left:8px;padding:2px 7px;font-size:.7rem;font-weight:700}.admin-empty{color:var(--text-muted);font-size:.88rem}.request-card{background:var(--surface);border:1px solid #d8c4ff;border-radius:10px;flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:12px;margin-bottom:10px;padding:14px 16px;display:flex}.request-info{color:var(--text-muted);flex-direction:column;gap:3px;min-width:0;font-size:.88rem;display:flex}.request-info strong{color:var(--text);font-size:.95rem}.children-names{font-size:.8rem}.request-date{font-size:.78rem}.request-actions{flex-wrap:wrap;flex-shrink:0;align-items:center;gap:8px;display:flex}.role-select{border:1.5px solid var(--border);color:var(--text);background:var(--surface);cursor:pointer;border-radius:7px;outline:none;padding:7px 10px;font-family:inherit;font-size:.82rem}.role-select:focus{border-color:var(--admin-badge)}.approve-btn{background:#27ae60}.approve-btn:hover:not(:disabled){background:#1e8449}.deny-btn{background:var(--danger)}.deny-btn:hover:not(:disabled){background:#a93226}.admin-btn:disabled{opacity:.5;cursor:not-allowed}.settings-row{flex-wrap:wrap;align-items:flex-end;gap:16px;display:flex}.settings-row .form-group{flex:1;min-width:140px}.saved-msg{color:#27ae60;margin-top:10px;font-size:.82rem}.billing-msg{color:var(--text-muted);margin-top:10px;font-size:.85rem}.family-billing-card{background:var(--surface);border:1px solid #d8c4ff;border-radius:10px;margin-bottom:12px;padding:14px 16px}.family-billing-header{cursor:pointer;text-align:left;background:0 0;border:none;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;width:100%;margin-bottom:0;padding:0;font-family:inherit;display:flex}.card-chevron{color:var(--text-muted);font-size:.65rem}.family-billing-header strong{color:var(--text);font-size:.92rem;display:block}.family-child-count{color:var(--text-muted);font-size:.78rem}.balance-tag{white-space:nowrap;border-radius:10px;padding:3px 10px;font-size:.78rem;font-weight:700}.balance-owing{color:#c05621;background:#fef3e2;border:1px solid #fbd38d}.balance-clear{color:#276749;background:#edfaf4;border:1px solid #a8e6c8}.invoice-row{border-top:1px solid var(--border);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;padding:8px 0;display:flex}.invoice-meta{flex-wrap:wrap;align-items:center;gap:10px;font-size:.85rem;display:flex}.invoice-label{color:var(--text);font-weight:500}.invoice-amount{color:var(--text);font-weight:700}.invoice-status{text-transform:uppercase;letter-spacing:.03em;border-radius:10px;padding:2px 8px;font-size:.72rem;font-weight:700}.status-pending{color:#c05621;background:#fef3e2;border:1px solid #fbd38d}.status-paid{color:#276749;background:#edfaf4;border:1px solid #a8e6c8}.status-past_due{color:var(--danger);background:#fee;border:1px solid #fcc}.pay-controls{flex-shrink:0;align-items:center;gap:8px;display:flex}.families-table-wrap{margin-top:4px;overflow-x:auto}.families-table{border-collapse:collapse;width:100%;font-size:.85rem}.families-table th{text-align:left;text-transform:uppercase;letter-spacing:.04em;color:var(--text-muted);border-bottom:1.5px solid var(--border);white-space:nowrap;padding:8px 10px;font-size:.75rem;font-weight:700}.families-table td{border-bottom:1px solid var(--border);color:var(--text);vertical-align:middle;padding:10px}.family-row-inactive td{opacity:.45}.family-email-cell{color:var(--text-muted);font-size:.8rem}.table-actions{align-items:center;gap:6px;display:flex}.table-input{border:1.5px solid var(--border);color:var(--text);background:var(--surface);border-radius:6px;outline:none;width:100%;padding:5px 8px;font-family:inherit;font-size:.85rem}.table-input:focus{border-color:var(--admin-badge)}.role-badge{text-transform:capitalize;border-radius:10px;padding:2px 8px;font-size:.72rem;font-weight:700}.role-parent{color:#2b6cb0;background:#ebf8ff;border:1px solid #bee3f8}.role-admin{color:var(--admin-badge);background:#f8f4ff;border:1px solid #d8c4ff}.role-owner{color:#92400e;background:#fffbeb;border:1px solid #fcd34d}.owner-badge{background:#92400e}.owing-text{color:#c05621;font-size:.85rem;font-weight:600}.paid-text{color:#276749;font-size:.85rem}.active-view-btn{outline-offset:1px;background:#6b3fa0;outline:2px solid #d8c4ff}.roles-list{flex-direction:column;gap:8px;margin-top:4px;display:flex}.role-list-row{border-bottom:1px solid var(--border);align-items:center;gap:12px;padding:8px 0;display:flex}.role-list-name{color:var(--text);flex:1;font-size:.88rem}.role-lock-msg{color:var(--text-muted);font-size:.75rem;font-style:italic}.role-saving-msg{color:var(--text-muted);font-size:.75rem}.success-msg{color:#276749;background:#edfaf4;border:1px solid #a8e6c8;border-radius:8px;padding:10px 14px;font-size:.85rem}.billing-toolbar{flex-wrap:wrap;gap:10px;margin-bottom:14px;display:flex}.custom-invoice-form{background:var(--surface);border:1.5px solid #d8c4ff;border-radius:10px;flex-direction:column;gap:14px;margin-bottom:16px;padding:16px;display:flex}.family-checklist{border:1.5px solid var(--border);background:var(--bg);border-radius:8px;flex-direction:column;gap:6px;max-height:200px;padding:10px 12px;display:flex;overflow-y:auto}.family-check-row{color:var(--text);cursor:pointer;align-items:center;gap:10px;font-size:.88rem;display:flex}.family-check-row input[type=checkbox]{width:15px;height:15px;accent-color:var(--admin-badge);cursor:pointer;flex-shrink:0}.family-check-row .family-child-count{margin-left:auto}.balance-summary{color:#c05621;background:#fef3e2;border:1px solid #fbd38d;border-radius:10px;justify-content:space-between;align-items:center;margin-bottom:20px;padding:14px 18px;font-size:.9rem;display:flex}.balance-summary strong{font-size:1.15rem}.invoice-section-title{text-transform:uppercase;letter-spacing:.06em;color:var(--text-muted);margin:20px 0 8px;font-size:.75rem;font-weight:700}.invoice-card{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;display:flex}.invoice-card-left{align-items:center;gap:12px;display:flex}.invoice-card-left strong{color:var(--text);font-size:.92rem}.invoice-card-right{align-items:center;gap:8px;display:flex}.invoice-method{color:var(--text-muted);font-size:.78rem}.admin-tab-nav{border-bottom:2px solid #d8c4ff;gap:4px;margin-bottom:16px;padding-bottom:0;display:flex}.admin-tab-btn{color:var(--text-muted);cursor:pointer;background:0 0;border:none;border-bottom:3px solid #0000;margin-bottom:-2px;padding:8px 18px;font-family:inherit;font-size:.88rem;font-weight:600;transition:color .15s,border-color .15s}.admin-tab-btn:hover{color:var(--admin-badge)}.admin-tab-btn.active{color:var(--admin-badge);border-bottom-color:var(--admin-badge)}.finance-stats-grid{grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:12px;margin-top:8px;display:grid}.stat-card{background:var(--surface);border:1.5px solid var(--border);border-radius:10px;flex-direction:column;gap:6px;padding:14px 16px;display:flex}.stat-label{text-transform:uppercase;letter-spacing:.04em;color:var(--text-muted);font-size:.73rem;font-weight:600}.stat-value{color:var(--text);font-size:1.35rem;font-weight:700;line-height:1.1}.stat-value-sm{font-size:1.1rem}.stat-note{color:var(--text-muted);font-size:.72rem;font-style:italic}.stat-blue{background:#ebf8ff;border-color:#bee3f8}.stat-blue .stat-value{color:#2b6cb0}.stat-green{background:#edfaf4;border-color:#a8e6c8}.stat-green .stat-value{color:#276749}.stat-orange{background:#fef3e2;border-color:#fbd38d}.stat-orange .stat-value{color:#c05621}.stat-red{background:#fff5f5;border-color:#feb2b2}.stat-red .stat-value{color:#c53030}.finance-season-label{color:var(--text-muted);margin-bottom:12px;font-size:.82rem}.finance-section-label{text-transform:uppercase;letter-spacing:.05em;color:var(--text-muted);margin-bottom:10px;font-size:.73rem;font-weight:700}.finance-cat-breakdown{flex-direction:column;gap:0;display:flex}.finance-cat-row{border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;gap:8px;padding:9px 0;display:flex}.finance-cat-row:last-child{border-bottom:none}.finance-cat-total{border-top:1.5px solid var(--border);border-bottom:none;margin-top:2px;padding-top:10px}.cat-dot{border-radius:50%;flex-shrink:0;width:10px;height:10px;display:inline-block}.finance-cat-name{color:var(--text);font-size:.88rem}.finance-cat-amount{color:var(--text);font-size:.88rem;font-weight:600}.expense-table-wrap{margin-top:8px;overflow-x:auto}.expense-table{border-collapse:collapse;width:100%;font-size:.83rem}.expense-table th{text-align:left;text-transform:uppercase;letter-spacing:.04em;color:var(--text-muted);border-bottom:1.5px solid var(--border);white-space:nowrap;padding:7px 8px;font-size:.72rem;font-weight:700}.expense-table td{border-bottom:1px solid var(--border);color:var(--text);vertical-align:middle;padding:9px 8px}.expense-table tr:last-child td{border-bottom:none}.exp-desc{max-width:200px;font-weight:500}.exp-amount{white-space:nowrap;font-weight:700}.exp-date{white-space:nowrap;color:var(--text-muted);font-size:.8rem}.exp-cat-pill{white-space:nowrap;align-items:center;gap:5px;font-size:.8rem;display:inline-flex}.exp-cat-none{color:var(--text-muted)}.exp-type-badge{white-space:nowrap;border-radius:10px;padding:2px 7px;font-size:.7rem;font-weight:700}.exp-onetime{color:#2b6cb0;background:#ebf8ff;border:1px solid #bee3f8}.exp-recurring{color:var(--admin-badge);background:#f8f4ff;border:1px solid #d8c4ff}.finance-cat-grid{flex-wrap:wrap;gap:8px;margin-bottom:16px;display:flex}.cat-manage-pill{background:var(--surface);border:1.5px solid var(--border);color:var(--text);border-radius:20px;align-items:center;gap:6px;padding:5px 12px;font-size:.82rem;display:inline-flex}.cat-add-form{margin-top:4px}.cat-add-row{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.cat-color-wrap{flex-direction:column;flex-shrink:0;align-items:center;gap:3px;display:flex}.cat-color-label{color:var(--text-muted);font-size:.72rem;font-weight:600}.cat-color-input{border:1.5px solid var(--border);cursor:pointer;background:var(--surface);border-radius:6px;width:38px;height:32px;padding:2px}.finance-season-banner{color:var(--text-muted);background:var(--surface);border:1px solid var(--border);border-radius:8px;margin-bottom:16px;padding:8px 14px;font-size:.82rem;display:inline-block}.finance-summary-grid{grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:12px;margin-bottom:20px;display:grid}.finance-summary-card{background:var(--surface);border:1.5px solid var(--border);border-radius:12px;flex-direction:column;gap:8px;padding:18px 16px;display:flex;box-shadow:0 1px 4px #0000000a}.fscard-label{text-transform:uppercase;letter-spacing:.04em;color:var(--text-muted);font-size:.73rem;font-weight:600}.fscard-value{font-size:1.5rem;font-weight:700;line-height:1.1}.fscard-green{color:#276749}.fscard-red{color:#c53030}.schedule-hint{color:var(--text-muted);margin-bottom:14px;font-size:.82rem;line-height:1.5}.meeting-days-row{flex-wrap:wrap;gap:8px;margin-bottom:4px;display:flex}.day-chip{border:1.5px solid var(--border);background:var(--surface);width:44px;height:36px;color:var(--text-muted);cursor:pointer;-webkit-user-select:none;user-select:none;border-radius:8px;justify-content:center;align-items:center;font-size:.78rem;font-weight:600;transition:background .12s,border-color .12s,color .12s;display:inline-flex}.day-chip:hover{border-color:var(--admin-badge);color:var(--admin-badge)}.day-chip-active{background:var(--admin-badge);border-color:var(--admin-badge);color:#fff}.schedule-container{margin-top:12px}.schedule-view-toggle{gap:4px;margin-bottom:14px;display:flex}.view-toggle-btn{background:var(--surface);border:1.5px solid var(--border);color:var(--text-muted);cursor:pointer;border-radius:8px;padding:6px 16px;font-family:inherit;font-size:.82rem;font-weight:600;transition:background .12s,color .12s,border-color .12s}.view-toggle-btn:hover{border-color:var(--primary);color:var(--primary)}.view-toggle-btn.active{background:var(--primary);border-color:var(--primary);color:#fff}.schedule-list{flex-direction:column;gap:10px;display:flex}.schedule-empty{color:var(--text-muted);font-size:.88rem}.session-list-card{background:var(--surface);border:1px solid var(--border);border-radius:10px;justify-content:space-between;align-items:flex-start;gap:12px;padding:14px 16px;display:flex;box-shadow:0 1px 3px #0000000a}.session-list-card.session-past{opacity:.45}.session-list-left{flex-direction:column;gap:3px;min-width:0;display:flex}.session-title{color:var(--text);font-size:.95rem;font-weight:600}.session-date-label{color:var(--text-muted);font-size:.82rem}.session-time-label{color:var(--primary);font-size:.82rem;font-weight:500}.session-notes{color:var(--text-muted);margin-top:4px;font-size:.8rem;line-height:1.4}.session-title-row{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.cancelled-badge{text-transform:uppercase;letter-spacing:.04em;color:#c05621;white-space:nowrap;background:#fef3e2;border:1px solid #fbd38d;border-radius:10px;padding:2px 7px;font-size:.68rem;font-weight:700}.cancelled-badge-admin{color:#6b7280;background:#f3f4f6;border-color:#d1d5db}.session-cancelled-admin{opacity:.5}.session-cancelled-family{background:#fff7ed;border-color:#fdba74}.session-admin-actions{flex-shrink:0;align-items:center;gap:6px;display:flex}.session-action-btn{cursor:pointer;background:0 0;border-radius:6px;padding:4px 10px;font-family:inherit;font-size:.78rem;transition:background .12s,color .12s}.session-cancel-btn{color:#c05621;border:1.5px solid #fdba74}.session-cancel-btn:hover:not(:disabled){background:#fef3e2}.session-uncancel-btn{color:#276749;border:1.5px solid #a8e6c8}.session-uncancel-btn:hover:not(:disabled){background:#edfaf4}.session-action-btn:disabled{opacity:.5;cursor:not-allowed}.session-delete-btn{border:1.5px solid var(--border);color:var(--text-muted);cursor:pointer;background:0 0;border-radius:6px;flex-shrink:0;padding:4px 10px;font-family:inherit;font-size:.78rem;transition:border-color .12s,color .12s}.session-delete-btn:hover:not(:disabled){border-color:var(--danger);color:var(--danger)}.session-delete-btn:disabled{opacity:.5;cursor:not-allowed}.cal-wrap{overflow-x:auto}.cal-header{justify-content:space-between;align-items:center;margin-bottom:10px;display:flex}.cal-month-label{color:var(--text);font-size:1rem;font-weight:700}.cal-nav-btn{border:1.5px solid var(--border);color:var(--text-muted);cursor:pointer;background:0 0;border-radius:6px;padding:4px 12px;font-family:inherit;font-size:1.1rem;line-height:1;transition:border-color .12s,color .12s}.cal-nav-btn:hover{border-color:var(--primary);color:var(--primary)}.cal-grid{grid-template-columns:repeat(7,1fr);gap:2px;min-width:420px;display:grid}.cal-day-header{text-align:center;text-transform:uppercase;letter-spacing:.04em;color:var(--text-muted);padding:6px 2px;font-size:.7rem;font-weight:700}.cal-cell{background:var(--surface);border:1px solid var(--border);vertical-align:top;border-radius:6px;min-height:64px;padding:6px 5px}.cal-cell-other{background:var(--bg);opacity:.5}.cal-cell-today{border-color:var(--primary);background:#f0f9f5}.cal-cell-past{opacity:.45}.cal-day-num{color:var(--text-muted);margin-bottom:4px;font-size:.72rem;font-weight:600;display:block}.cal-cell-today .cal-day-num{color:var(--primary)}.cal-session-list{flex-direction:column;gap:2px;display:flex}.cal-session-entry{background:var(--admin-badge);border-radius:4px;justify-content:space-between;align-items:center;gap:2px;padding:2px 4px;display:flex}.cal-session-title{color:#fff;text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;font-size:.65rem;font-weight:600;overflow:hidden}.cal-entry-cancelled-admin{opacity:.6;background:#9ca3af}.cal-entry-cancelled-family{background:#fb923c}.cal-entry-actions{flex-shrink:0;align-items:center;gap:1px;display:flex}.cal-action-btn{color:#fffc;cursor:pointer;background:0 0;border:none;flex-shrink:0;padding:0 2px;font-family:inherit;font-size:.72rem;line-height:1}.cal-action-btn:hover:not(:disabled){color:#fff}.cal-action-btn:disabled{opacity:.4;cursor:not-allowed}.cal-delete-btn{color:#ffffffbf;cursor:pointer;background:0 0;border:none;flex-shrink:0;padding:0 2px;font-family:inherit;font-size:.75rem;line-height:1}.cal-delete-btn:hover:not(:disabled){color:#fff}@media (width<=480px){.login-card{padding:28px 20px}.nav-tab{padding:10px;font-size:.78rem}}.session-absence-reported{border-left:3px solid #e8a87c}.absence-badge{color:#c05621;text-transform:uppercase;letter-spacing:.04em;background:#fef3e2;border:1px solid #f6ad55;border-radius:10px;flex-shrink:0;padding:1px 7px;font-size:.65rem;font-weight:700}.absence-summary{color:var(--text-muted);margin-top:4px;font-size:.78rem}.absence-summary.absence-own{color:#c05621;font-weight:600}.absence-count{color:#c05621;font-weight:700}.absence-names{color:var(--text-muted)}.absence-count-badge{color:#c05621;white-space:nowrap;background:#fef3e2;border:1px solid #f6ad55;border-radius:8px;padding:1px 5px;font-size:.6rem;font-weight:700}.absence-own-badge{color:#c05621;background:#fef3e2;border:1px solid #f6ad55;border-radius:8px;padding:1px 5px;font-size:.6rem;font-weight:700}.assigned-tasks-count-badge{color:#276749;white-space:nowrap;cursor:default;background:#f0fff4;border:1px solid #9ae6b4;border-radius:8px;padding:1px 5px;font-size:.6rem;font-weight:700}.assigned-tasks-count-badge.assigned-tasks-has-own{color:#1a5276;background:#ebf5fb;border-color:#85c1e9}.assigned-tasks-summary{color:var(--text-muted);margin-top:6px;font-size:.8rem}.assigned-tasks-section-label{text-transform:uppercase;letter-spacing:.04em;color:var(--text-muted);margin-bottom:4px;font-size:.72rem;font-weight:700;display:block}.assigned-task-summary-row{border-left:3px solid #0000;border-radius:4px;justify-content:space-between;align-items:baseline;gap:6px;margin-bottom:2px;padding:3px 6px;display:flex}.assigned-task-summary-row.assigned-task-own{background:#ebf5fb;border-left-color:#3498db}.assigned-task-summary-text{color:var(--text);font-size:.82rem;font-weight:600}.assigned-task-summary-assignee{color:var(--text-muted);white-space:nowrap;font-size:.78rem}.volunteer-open-badge{color:#2b6cb0;white-space:nowrap;background:#ebf8ff;border:1px solid #bee3f8;border-radius:10px;flex-shrink:0;padding:1px 7px;font-size:.65rem;font-weight:700}.cal-entry-badges{flex-direction:column;flex-shrink:0;align-items:flex-end;gap:2px;display:flex}.cal-entry-top{justify-content:space-between;align-items:flex-start;gap:4px;width:100%;display:flex}.session-clickable{cursor:pointer}.session-clickable:hover{background:#f0ede8}.cal-entry-clickable{cursor:pointer}.cal-entry-clickable:hover{filter:brightness(1.08)}.modal-overlay{z-index:1000;background:#00000073;justify-content:center;align-items:center;padding:16px;display:flex;position:fixed;inset:0}.modal-card{background:var(--surface);border-radius:16px;width:100%;max-width:480px;max-height:85vh;padding:28px 24px;overflow-y:auto;box-shadow:0 8px 32px #0000002e}.modal-header{justify-content:space-between;align-items:flex-start;gap:12px;margin-bottom:12px;display:flex}.modal-title{color:var(--primary);margin:0;font-size:1.1rem;font-weight:700}.modal-date{color:var(--text-muted);margin-top:3px;font-size:.85rem}.modal-time{color:var(--text-muted);margin-bottom:8px;font-size:.88rem}.modal-notes{color:var(--text);background:#f7f4ef;border-radius:8px;margin-bottom:12px;padding:10px 12px;font-size:.88rem}.modal-close-btn{color:var(--text-muted);background:0 0;border:none;flex-shrink:0;margin-top:-2px;padding:0 4px;font-size:1.4rem;line-height:1}.modal-close-btn:hover{color:var(--text)}.modal-absence-notice{color:#c05621;background:#fef3e2;border:1px solid #f6ad55;border-radius:8px;margin-bottom:14px;padding:8px 12px;font-size:.85rem;font-weight:600}.modal-volunteer-section{border-top:1.5px solid var(--border);margin-top:16px;padding-top:16px}.modal-section-title{text-transform:uppercase;letter-spacing:.05em;color:var(--text-muted);margin-bottom:12px;font-size:.78rem;font-weight:700}.modal-no-tasks{color:var(--text-muted);border-top:1.5px solid var(--border);margin-top:16px;padding-top:16px;font-size:.85rem}.modal-assigned-tasks-section{border-top:1.5px solid var(--border);margin-top:16px;padding-top:14px}.modal-assigned-task-row{background:var(--surface-alt,#f9f9f9);border-left:3px solid #0000;border-radius:6px;flex-direction:column;gap:2px;margin-top:8px;padding:8px 10px;display:flex}.modal-assigned-task-row.modal-assigned-task-own{background:#ebf5fb;border-left-color:#3498db}.modal-assigned-task-header{justify-content:space-between;align-items:baseline;gap:8px;display:flex}.modal-assigned-task-text{color:var(--text-primary);font-size:.88rem;font-weight:600}.modal-assigned-task-assignee{color:var(--text-muted);white-space:nowrap;font-size:.8rem}.modal-assigned-task-notes{color:var(--text-muted);margin-top:2px;font-size:.8rem;font-style:italic}.volunteer-slot-card{border:1.5px solid var(--border);background:#f7f4ef;border-radius:10px;margin-bottom:10px;padding:12px 14px}.volunteer-slot-card.slot-full{opacity:.75}.volunteer-slot-header{justify-content:space-between;align-items:center;gap:8px;margin-bottom:6px;display:flex}.volunteer-task-name{font-size:.92rem;font-weight:600}.slot-count-badge{border-radius:10px;flex-shrink:0;padding:2px 8px;font-size:.72rem;font-weight:700}.slot-count-open{color:#2b6cb0;background:#ebf8ff;border:1px solid #bee3f8}.slot-count-full{color:#276749;background:#f0fff4;border:1px solid #9ae6b4}.slot-full-label{color:#276749;font-size:.78rem;font-weight:700}.volunteer-signups-list{flex-wrap:wrap;gap:4px;margin-bottom:4px;display:flex}.volunteer-name-chip{background:var(--surface);border:1px solid var(--border);color:var(--text);border-radius:12px;padding:2px 10px;font-size:.78rem}.volunteer-task-row{align-items:center;gap:8px;margin-bottom:6px;display:flex}.volunteers-list{flex-direction:column;gap:16px;display:flex}.volunteer-session-card{padding:18px 20px}.volunteer-session-header{border-bottom:1.5px solid var(--border);justify-content:space-between;align-items:flex-start;gap:12px;margin-bottom:14px;padding-bottom:12px;display:flex}.volunteer-session-title{color:var(--primary);font-size:1rem;font-weight:700;display:block}.volunteer-session-date{color:var(--text-muted);margin-top:3px;font-size:.82rem;display:block}.vol-task-list{flex-direction:column;gap:10px;display:flex}.vol-task-row{border:1.5px solid var(--border);background:#f7f4ef;border-radius:10px;justify-content:space-between;align-items:flex-start;gap:12px;padding:10px 14px;display:flex}.vol-task-row.vol-task-full{opacity:.72}.vol-task-info{flex:1;min-width:0}.vol-task-top{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.vol-task-name{font-size:.9rem;font-weight:600}.vol-task-action{flex-shrink:0;align-items:center;padding-top:2px;display:flex}.doc-list{flex-direction:column;gap:10px;display:flex}.doc-card{background:var(--surface);border:1px solid var(--border);border-radius:12px;align-items:center;gap:14px;padding:14px 16px;transition:box-shadow .15s;display:flex;box-shadow:0 1px 4px #0000000a}.doc-card:hover{box-shadow:0 2px 10px #00000014}.doc-icon-wrap{border-radius:10px;flex-shrink:0;justify-content:center;align-items:center;width:44px;height:44px;display:flex}.doc-type-icon{font-size:1.3rem;line-height:1}.doc-info{flex-direction:column;flex:1;gap:4px;min-width:0;display:flex}.doc-name-link{color:var(--primary);text-overflow:ellipsis;white-space:nowrap;font-size:.95rem;font-weight:600;text-decoration:none;display:block;overflow:hidden}.doc-name-link:hover{text-decoration:underline}.doc-meta-row{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.doc-type-pill{color:var(--text);text-transform:uppercase;letter-spacing:.04em;border-radius:8px;padding:2px 8px;font-size:.65rem;font-weight:700}.doc-date{color:var(--text-muted);font-size:.78rem}.doc-edit-row{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.doc-edit-row .table-input{flex:1;min-width:120px}.doc-actions{flex-shrink:0;align-items:center;gap:6px;display:flex}.doc-open-btn{background:var(--bg);border:1px solid var(--border);width:32px;height:32px;color:var(--primary);border-radius:8px;justify-content:center;align-items:center;font-size:1rem;font-weight:700;text-decoration:none;transition:background .15s;display:flex}.doc-open-btn:hover{background:#e8efe8}.doc-action-btn{background:var(--bg);border:1px solid var(--border);width:32px;height:32px;color:var(--text-muted);cursor:pointer;border-radius:8px;justify-content:center;align-items:center;font-family:inherit;font-size:.95rem;transition:background .15s,color .15s;display:flex}.doc-action-btn:hover:not(:disabled){color:var(--text);background:#e8efe8}.doc-delete-btn:hover:not(:disabled){color:var(--danger);background:#fee;border-color:#fcc}.doc-action-btn:disabled{opacity:.4;cursor:not-allowed}.doc-mode-tabs{gap:6px;margin-bottom:16px;display:flex}.doc-mode-tab{border:1.5px solid var(--border);background:var(--bg);color:var(--text-muted);cursor:pointer;border-radius:8px;flex:1;padding:8px 12px;font-family:inherit;font-size:.85rem;font-weight:600;transition:border-color .15s,color .15s,background .15s}.doc-mode-tab.active{border-color:var(--primary);background:var(--surface);color:var(--primary)}.doc-hint{color:var(--text-muted);margin-top:4px;font-size:.78rem;display:block}.doc-upload-label{cursor:pointer;flex-wrap:wrap;align-items:center;gap:10px;display:flex}.doc-file-hidden{opacity:0;pointer-events:none;width:0;height:0;position:absolute}.doc-upload-btn{border:1.5px solid var(--border);background:var(--bg);color:var(--text);white-space:nowrap;border-radius:8px;align-items:center;padding:7px 14px;font-size:.85rem;font-weight:600;transition:background .15s;display:inline-flex}.doc-upload-label:hover .doc-upload-btn{background:#e8efe8}.doc-file-chosen{color:var(--text-muted);word-break:break-all;font-size:.82rem}.doc-progress-wrap{background:var(--border);border-radius:2px;height:4px;margin-top:8px;overflow:hidden}.doc-progress-bar{background:var(--primary);border-radius:2px;height:100%;transition:width .2s}.assigned-tasks-edit-section{border-top:1px solid var(--border);margin-top:4px;padding-top:14px}.assigned-tasks-edit-header{justify-content:space-between;align-items:center;margin-bottom:10px;display:flex}.assigned-task-row{border:1.5px solid var(--border);background:#f7f4ef;border-radius:8px;justify-content:space-between;align-items:flex-start;gap:8px;margin-bottom:6px;padding:8px 12px;display:flex}.assigned-task-info{flex-direction:column;flex:1;gap:2px;min-width:0;display:flex}.assigned-task-name{font-size:.88rem;font-weight:600}.assigned-task-assignee{color:var(--primary);font-size:.78rem;font-weight:600}.assigned-task-notes{color:var(--text-muted);font-size:.76rem;font-style:italic}.assign-task-inline-form{border:1.5px solid var(--border);background:#f7f4ef;border-radius:8px;flex-direction:column;margin-top:8px;padding:12px 14px;display:flex}.assigned-tasks-group{margin-bottom:18px}.assigned-tasks-group:last-child{margin-bottom:0}.assigned-tasks-group-header{border-bottom:1.5px solid var(--border);align-items:center;gap:10px;margin-bottom:8px;padding:4px 0 8px;display:flex}.assigned-tasks-session-title{color:var(--text);font-size:.88rem;font-weight:700}.assigned-tasks-session-date{color:var(--text-muted);font-size:.78rem}.assigned-task-admin-row{border-bottom:1px solid var(--border);justify-content:space-between;align-items:flex-start;gap:10px;padding:8px 0;display:flex}.assigned-task-admin-row:last-child{border-bottom:none}.assigned-task-admin-info{flex-direction:column;flex:1;gap:2px;min-width:0;display:flex}.assigned-task-description{font-size:.88rem;font-weight:600}.assigned-task-assignee-name{color:var(--primary);font-size:.8rem;font-weight:600}.assigned-task-notes-text{color:var(--text-muted);font-size:.76rem;font-style:italic}.my-assigned-tasks-section{margin-bottom:28px}.my-assigned-tasks-header{color:var(--text);margin-bottom:12px;font-size:1rem;font-weight:700}.my-assigned-task-card{background:var(--surface);border:1.5px solid var(--border);border-left:4px solid var(--primary);border-radius:10px;margin-bottom:10px;padding:14px 16px;box-shadow:0 1px 4px #0000000a}.my-assigned-task-title{color:var(--text);margin-bottom:4px;font-size:.95rem;font-weight:700}.my-assigned-task-session{color:var(--text-muted);font-size:.82rem}.my-assigned-task-notes{color:var(--text-muted);border-top:1px solid var(--border);margin-top:6px;padding-top:6px;font-size:.82rem;font-style:italic}.msg-toolbar{justify-content:space-between;align-items:center;margin-bottom:16px;display:flex}.msg-view-toggle{gap:4px;display:flex}.msg-toggle-btn{border:1px solid var(--border);background:var(--surface);color:var(--text-muted);cursor:pointer;border-radius:8px;padding:7px 18px;font-size:.85rem;font-weight:500;transition:background .15s,color .15s}.msg-toggle-btn:hover{background:var(--bg);color:var(--text)}.msg-toggle-btn.active{background:var(--admin-badge);color:#fff;border-color:var(--admin-badge)}.msg-list{border:1px solid var(--border);border-radius:10px;flex-direction:column;display:flex;overflow:hidden}.msg-item{background:var(--surface);cursor:pointer;border-bottom:1px solid var(--border);align-items:flex-start;gap:0;padding:13px 16px;transition:background .1s;display:flex}.msg-item:last-child{border-bottom:none}.msg-item:hover{background:var(--bg)}.msg-item.msg-unread{background:#faf8ff}.msg-item.msg-unread:hover{background:#f2edff}.msg-item-dot-col{flex-shrink:0;align-items:center;width:18px;padding-top:3px;display:flex}.msg-dot{background:var(--admin-badge);border-radius:50%;flex-shrink:0;width:8px;height:8px;display:block}.msg-item-content{flex:1;min-width:0}.msg-item-top{justify-content:space-between;align-items:baseline;gap:8px;display:flex}.msg-sender{color:var(--text-muted);white-space:nowrap;text-overflow:ellipsis;font-size:.88rem;font-weight:500;overflow:hidden}.msg-item.msg-unread .msg-sender{color:var(--text);font-weight:700}.msg-date{color:var(--text-muted);flex-shrink:0;font-size:.75rem}.msg-subject-preview{color:var(--text-muted);white-space:nowrap;text-overflow:ellipsis;margin-top:3px;font-size:.85rem;overflow:hidden}.msg-item.msg-unread .msg-subject-preview{color:var(--text)}.msg-item-sent .msg-sender{font-weight:500}.msg-detail{background:var(--surface);border:1px solid var(--border);border-radius:10px;padding:22px 24px}.msg-back-btn{color:var(--primary);cursor:pointer;background:0 0;border:none;margin-bottom:18px;padding:0;font-size:.85rem;font-weight:600;display:inline-block}.msg-back-btn:hover{color:var(--primary-hover)}.msg-detail-subject{color:var(--text);margin-bottom:8px;font-size:1.15rem;font-weight:700;line-height:1.3}.msg-detail-meta{color:var(--text-muted);border-bottom:1px solid var(--border);flex-wrap:wrap;gap:16px;margin-bottom:18px;padding-bottom:18px;font-size:.82rem;display:flex}.msg-detail-date{color:var(--text-muted)}.msg-detail-body{color:var(--text);white-space:pre-wrap;margin-bottom:22px;font-size:.95rem;line-height:1.75}.msg-detail-actions{border-top:1px solid var(--border);gap:10px;padding-top:16px;display:flex}.msg-compose{background:var(--surface);border:1px solid var(--border);border-radius:10px;padding:22px 24px}.msg-secondary-btn{background:var(--bg)!important;color:var(--text)!important;border:1px solid var(--border)!important}.msg-secondary-btn:hover{background:var(--border)!important}.msg-reply-banner{color:var(--text-muted);background:var(--bg);border:1px solid var(--border);border-radius:6px;margin-bottom:18px;padding:8px 12px;font-size:.83rem}.msg-recipient-list{border:1px solid var(--border);border-radius:8px;max-height:210px;overflow-y:auto}.msg-recipient-row{cursor:pointer;border-bottom:1px solid var(--border);align-items:center;gap:9px;padding:9px 12px;font-size:.85rem;display:flex}.msg-recipient-row:last-child{border-bottom:none}.msg-recipient-row:hover{background:var(--bg)}.msg-recipient-name{color:var(--text);flex:1}.msg-recipient-count{color:var(--text-muted);margin:6px 0 0;font-size:.78rem}.msg-thread{flex-direction:column;gap:0;display:flex}.msg-thread-header{border-bottom:1px solid var(--border);margin:12px 0 20px;padding-bottom:16px}.msg-thread-header h3{color:var(--text);margin:0 0 4px;font-size:1.05rem;font-weight:700}.msg-thread-participants{color:var(--text-muted);margin:0;font-size:.82rem}.msg-thread-messages{flex-direction:column;gap:12px;margin-bottom:24px;display:flex}.msg-bubble{background:var(--card-bg);border:1px solid var(--border);border-radius:10px;padding:12px 16px}.msg-bubble-own{background:#5c7a6e14;border-color:#5c7a6e40}.msg-bubble-meta{align-items:baseline;gap:10px;margin-bottom:8px;display:flex}.msg-bubble-sender{color:var(--text);font-size:.85rem;font-weight:600}.msg-bubble-time{color:var(--text-muted);font-size:.78rem}.msg-bubble-body{color:var(--text);white-space:pre-wrap;word-break:break-word;font-size:.9rem;line-height:1.65}.msg-reply-box{border-top:1px solid var(--border);flex-direction:column;gap:10px;padding-top:16px;display:flex}.msg-body-preview{color:var(--text-muted);white-space:nowrap;text-overflow:ellipsis;margin-top:2px;font-size:.8rem;overflow:hidden}.settings-page{max-width:560px;margin:0 auto;padding:8px 0 32px}.settings-page h2{color:var(--text);margin:0 0 4px;font-size:1.2rem;font-weight:700}.settings-page .section-desc{color:var(--text-muted);margin:0 0 24px;font-size:.85rem}.pref-list{border:1px solid var(--border);border-radius:10px;flex-direction:column;gap:0;display:flex;overflow:hidden}.pref-row{background:var(--card-bg);border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;gap:16px;padding:14px 16px;display:flex}.pref-row:last-child{border-bottom:none}.pref-info{flex:1;min-width:0}.pref-label{color:var(--text);margin:0 0 2px;font-size:.92rem;font-weight:600}.pref-desc{color:var(--text-muted);margin:0;font-size:.8rem}.toggle-switch{cursor:pointer;flex-shrink:0;width:44px;height:24px;display:inline-block;position:relative}.toggle-switch input{opacity:0;width:0;height:0;position:absolute}.toggle-slider{background:#cbd5e0;border-radius:24px;transition:background .2s;position:absolute;inset:0}.toggle-slider:before{content:"";background:#fff;border-radius:50%;width:18px;height:18px;transition:transform .2s;position:absolute;top:3px;left:3px;box-shadow:0 1px 3px #0003}.toggle-switch input:checked+.toggle-slider{background:#5c7a6e}.toggle-switch input:checked+.toggle-slider:before{transform:translate(20px)}
