:root{--app-green:#0b6b4f;--app-green-dark:#074936;--app-green-soft:#eaf7f2;--app-accent:#19a974;--app-bg:#f3f6f8;--app-text:#21312b;--sidebar-w:268px}*{box-sizing:border-box}body{background:var(--app-bg);color:var(--app-text);font-family:Inter,system-ui,-apple-system,"Segoe UI",Roboto,Arial,sans-serif;font-size:15px}.app-topbar{background:linear-gradient(100deg,var(--app-green-dark),var(--app-green));min-height:62px}.navbar-brand{display:flex;align-items:center;gap:.55rem;max-width:62vw}.brand-mark{width:34px;height:34px;border-radius:11px;background:rgba(255,255,255,.18);display:inline-grid;place-items:center}.btn-topbar{background:rgba(255,255,255,.13);color:#fff;border:1px solid rgba(255,255,255,.18)}.btn-topbar:hover{background:#fff;color:var(--app-green)}.app-sidebar{background:#fff;min-height:calc(100vh - 62px);border-right:1px solid #e5ece9}.sidebar-user{display:flex;align-items:center;gap:.75rem;border-bottom:1px solid #eef2f0}.avatar-sm{width:42px;height:42px;border-radius:50%;display:grid;place-items:center;background:var(--app-green-soft);color:var(--app-green);font-size:1.3rem}.min-w-0{min-width:0}.sidebar-nav{padding:.55rem}.sidebar-nav .nav-link{display:flex;align-items:center;gap:.8rem;color:#4b5d55;padding:.72rem .8rem;margin:.12rem 0;border-radius:11px;font-weight:600}.sidebar-nav .nav-link:hover{background:#f1f7f4;color:var(--app-green)}.sidebar-nav .nav-link.active{background:var(--app-green);color:#fff;box-shadow:0 6px 16px rgba(11,107,79,.23)}.nav-icon{width:22px;text-align:center;font-size:1.08rem}.nav-section{padding:1rem .8rem .35rem;color:#8b9b94;font-size:.72rem;text-transform:uppercase;letter-spacing:.08em;font-weight:800}.app-main{padding-bottom:90px!important}.card{border:0;border-radius:16px;box-shadow:0 3px 16px rgba(26,55,44,.065)}.card-header{background:#fff;border-bottom:1px solid #eef2f0;border-radius:16px 16px 0 0!important;padding:1rem 1.15rem}.stat-card{height:100%;transition:transform .18s}.stat-card:hover{transform:translateY(-2px)}.stat-icon{width:48px;height:48px;border-radius:14px;display:grid;place-items:center;background:var(--app-green-soft);color:var(--app-green);font-size:1.35rem}.quick-action{display:flex;align-items:center;gap:.8rem;padding:1rem;border:1px solid #e6eeea;border-radius:14px;text-decoration:none;color:var(--app-text);background:#fff}.quick-action:hover{border-color:#9fd8c3;background:#f4fbf8;color:var(--app-green)}.quick-action i{font-size:1.35rem;color:var(--app-green)}.feed-card .feed-avatar{width:44px;height:44px;object-fit:cover;border-radius:50%;background:#e8f1ed}.feed-body{white-space:pre-wrap}.table>thead th{white-space:nowrap;background:#f7faf8;color:#51635b}.table td{vertical-align:middle}.form-control,.form-select{border-radius:11px;min-height:44px}.btn{border-radius:11px}.btn-success{background:var(--app-green);border-color:var(--app-green)}.btn-success:hover{background:var(--app-green-dark);border-color:var(--app-green-dark)}.login-bg{background:radial-gradient(circle at top,#d6f2e6,#eef7f3 42%,#f5f7f9)}.logo-circle{width:76px;height:76px;border-radius:24px;background:linear-gradient(135deg,var(--app-green),#24bd83);color:#fff;display:grid;place-items:center;margin:auto;font-size:34px}.profile-photo{width:150px;height:150px;object-fit:cover;border-radius:50%;border:5px solid var(--app-green-soft)}.profile-placeholder{width:150px;height:150px;border-radius:50%;display:grid;place-items:center;background:var(--app-green-soft);font-size:68px;color:var(--app-green)}.public-navbar{background:rgba(255,255,255,.96);backdrop-filter:blur(10px)}.public-hero{background:linear-gradient(120deg,#063f30,#0b6b4f 58%,#18a272);color:#fff;padding:5rem 0 4rem}.hero-badge{display:inline-flex;gap:.5rem;align-items:center;background:rgba(255,255,255,.14);border:1px solid rgba(255,255,255,.2);border-radius:999px;padding:.45rem .8rem}.public-section{padding:4rem 0}.public-footer{background:#072f24;color:#dbe9e4}.fund-number{font-size:1.85rem;font-weight:800}.mobile-bottom-nav{position:fixed;z-index:1040;left:0;right:0;bottom:0;height:68px;background:#fff;border-top:1px solid #dfe8e4;display:grid;grid-template-columns:repeat(5,1fr);padding-bottom:env(safe-area-inset-bottom);box-shadow:0 -5px 20px rgba(0,0,0,.08)}.mobile-bottom-nav a{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.15rem;color:#687a72;text-decoration:none;font-size:.72rem}.mobile-bottom-nav i{font-size:1.25rem}.mobile-bottom-nav .pay-action{color:#fff;background:var(--app-green);width:58px;height:58px;border-radius:50%;margin:-18px auto 0;box-shadow:0 7px 18px rgba(11,107,79,.35)}.pwa-install{position:fixed;right:18px;bottom:82px;z-index:1050;box-shadow:0 8px 22px rgba(0,0,0,.22)}.empty-state{text-align:center;padding:3rem 1rem;color:#718179}.empty-state i{font-size:3rem;color:#abc2b8}.page-title{font-size:1.55rem;font-weight:800}.small-label{font-size:.75rem;color:#7a8b84;text-transform:uppercase;font-weight:800;letter-spacing:.05em}@media(min-width:992px){.app-sidebar{position:sticky;top:62px;height:calc(100vh - 62px);overflow-y:auto}.app-main{padding-bottom:2rem!important}}@media(max-width:575.98px){body{font-size:14px}.app-main{padding-left:.75rem!important;padding-right:.75rem!important}.card{border-radius:14px}.public-hero{padding:3.4rem 0 3rem}.page-title{font-size:1.35rem}.btn-lg{font-size:1rem}.mobile-stack .btn{width:100%;margin-bottom:.5rem}}@media print{.app-topbar,.app-sidebar,.mobile-bottom-nav,.btn,.no-print{display:none!important}.app-main{width:100%!important;margin:0!important;padding:0!important}.card{box-shadow:none;border:1px solid #ddd}}

/* v3.2 fee session calendar signals */
.fee-status-legend{display:flex;flex-wrap:wrap;gap:.55rem 1rem;align-items:center}.fee-status-key{display:inline-flex;align-items:center;gap:.4rem;font-size:.83rem;font-weight:700;color:#52635c}.fee-status-dot{width:11px;height:11px;border-radius:50%;display:inline-block}.fee-dot-paid{background:#198754}.fee-dot-due{background:#dc3545}.fee-dot-upcoming{background:#0d6efd}.fee-month-card{border:2px solid transparent!important;position:relative;transition:transform .15s ease,box-shadow .15s ease,border-color .15s ease;cursor:pointer}.fee-month-card:hover{transform:translateY(-1px);box-shadow:0 6px 18px rgba(22,50,40,.09)}.fee-state-paid{border-color:#198754!important;background:#eaf7ef!important}.fee-state-due{border-color:#dc3545!important;background:#fff0f1!important}.fee-state-advance{border-color:#0d6efd!important;background:#edf5ff!important}.fee-month-check{width:1.25rem;height:1.25rem;flex:0 0 auto}.fee-state-paid .fee-month-check{accent-color:#198754}.fee-state-due .fee-month-check{accent-color:#dc3545}.fee-state-advance .fee-month-check{accent-color:#0d6efd}.fee-status-text{font-size:.75rem;font-weight:800}.fee-state-paid .fee-status-text{color:#146c43}.fee-state-due .fee-status-text{color:#b02a37}.fee-state-advance .fee-status-text{color:#0a58ca}

/* v3.4 fee calendar: high-visibility traffic-light signals */
.fee-month-card{overflow:hidden}.fee-month-signal{display:inline-flex;align-items:center;gap:.35rem;padding:.24rem .55rem;border-radius:999px;font-size:.72rem;font-weight:800;line-height:1.1;border:1px solid currentColor;white-space:nowrap}.fee-signal-paid{color:#146c43;background:#d1e7dd}.fee-signal-due{color:#b02a37;background:#f8d7da}.fee-signal-advance{color:#0a58ca;background:#cfe2ff}.fee-state-paid .fee-month-check:checked,.fee-state-paid .fee-month-check:disabled:checked{background-color:#198754!important;border-color:#198754!important;opacity:1!important;filter:none!important}.fee-state-due .fee-month-check{border-color:#dc3545!important;border-width:2px!important;opacity:1!important;box-shadow:0 0 0 .10rem rgba(220,53,69,.10)}.fee-state-advance .fee-month-check{border-color:#0d6efd!important;border-width:2px!important;opacity:1!important;box-shadow:0 0 0 .10rem rgba(13,110,253,.10)}.fee-state-paid{box-shadow:inset 0 4px 0 #198754}.fee-state-due{box-shadow:inset 0 4px 0 #dc3545}.fee-state-advance{box-shadow:inset 0 4px 0 #0d6efd}

/* v3.5: active-session fee calendars intentionally use only Paid (green), Overdue (red), and Current/Upcoming (blue). */


/* v3.6 mobile install + hosted update notification */
.mobile-app-landing{background:linear-gradient(145deg,#effaf4,#f5f7f9 55%,#e9f8ef);min-height:100vh}.mobile-app-hero{border:1px solid #dfece6}.mobile-app-brand{background:linear-gradient(145deg,#07543f,#0b6b4f 58%,#19a974);color:#fff;display:flex;align-items:center}.mobile-app-logo{width:min(250px,72vw);aspect-ratio:1;object-fit:contain;border-radius:50%;background:#fff;box-shadow:0 18px 40px rgba(0,0,0,.18)}.platform-install-card{border:1px solid #dce8e3;border-radius:18px;padding:1rem;display:flex;align-items:center;gap:1rem;background:#fff;min-height:112px;transition:.18s ease;cursor:pointer}.platform-install-card:hover{transform:translateY(-2px);box-shadow:0 12px 28px rgba(12,87,65,.12)}.platform-install-card .platform-icon{width:54px;height:54px;border-radius:16px;display:grid;place-items:center;font-size:1.8rem;flex:0 0 auto}.platform-install-card small,.platform-install-card span{display:block;color:#6b7d75}.platform-install-card strong{display:block;font-size:1.2rem}.platform-install-card.android{border-color:#9fd8c3}.platform-install-card.android .platform-icon{background:#e7f8ef;color:#0b8f52}.platform-install-card.ios{border-color:#cbd4d1}.platform-install-card.ios .platform-icon{background:#151a18;color:#fff}.mobile-update-note{display:flex;gap:.85rem;align-items:flex-start;padding:1rem;border-radius:16px;background:#eef8ff;border:1px solid #cfe6f7}.mobile-update-note>i{font-size:1.35rem;color:#0d6efd}.app-update-banner{position:fixed;z-index:2000;left:50%;bottom:86px;transform:translateX(-50%);width:min(760px,calc(100% - 24px));background:#063f30;color:#fff;border:1px solid rgba(255,255,255,.2);box-shadow:0 16px 42px rgba(0,0,0,.25);border-radius:18px;padding:.9rem 1rem;display:flex;align-items:center;gap:.85rem}.app-update-icon{width:44px;height:44px;border-radius:14px;background:rgba(255,255,255,.14);display:grid;place-items:center;font-size:1.35rem;flex:0 0 auto}.app-update-copy{min-width:0;flex:1}.app-update-copy>strong,.app-update-copy>div,.app-update-copy>small{display:block}.app-update-copy>div{opacity:.9;font-size:.88rem}.app-update-copy>small{opacity:.72;margin-top:.15rem}.app-update-actions{display:flex;gap:.5rem;flex:0 0 auto}@media(max-width:575.98px){.app-update-banner{bottom:78px;align-items:flex-start;flex-wrap:wrap}.app-update-copy{width:calc(100% - 60px)}.app-update-actions{width:100%;justify-content:flex-end}.mobile-app-logo{width:min(210px,68vw)}}
