:root{--brand-color:#16242f;--brand-color-hover:#24384a;--accent:#2f6fed;--accent-hover:#1d5bd6;--accent-soft:#eaf1fe;--accent-text:#1b4fb0;--success:#15803d;--success-soft:#e7f6ec;--danger:#b42318;--danger-hover:#912018;--danger-soft:#fdeceb;--warning:#b54708;--warning-soft:#fdf3e6;--info-soft:#eef2f7;--bg:#f4f6fa;--surface:#fff;--surface-alt:#f8fafc;--text:#17202a;--text-soft:#5b6774;--text-mute:#8b95a1;--line:#e6eaf0;--line-strong:#d3dae3;--radius:10px;--radius-lg:14px;--shadow-sm:0 1px 2px rgba(16,24,40,.05);--shadow-md:0 4px 14px rgba(16,24,40,.08);--shadow-lg:0 16px 40px rgba(16,24,40,.16);--sidebar-w:244px}*{box-sizing:border-box}body,html{margin:0;padding:0}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif;background:var(--bg);color:var(--text);font-size:14px;line-height:1.5;-webkit-font-smoothing:antialiased}h1{font-size:22px;letter-spacing:-.01em}h1,h2{font-weight:600;margin:0 0 4px}h2{font-size:18px}h3{font-size:16px}h3,h4{font-weight:600;margin:0 0 4px}h4{font-size:14px}a{color:var(--accent)}.layout{display:flex;align-items:stretch;min-height:100vh}.sidebar{flex:0 0 var(--sidebar-w);width:var(--sidebar-w);background:var(--brand-color);color:#fff;padding:16px 12px 14px;display:flex;flex-direction:column;position:-webkit-sticky;position:sticky;top:0;height:100vh;overflow-y:auto}.sidebar::-webkit-scrollbar{width:6px}.sidebar::-webkit-scrollbar-thumb{background:hsla(0,0%,100%,.16);border-radius:3px}.brand{display:flex;flex-direction:column;align-items:center;gap:6px;background:#fff;border-radius:var(--radius);padding:14px 12px;margin-bottom:16px}.brandLogo{width:100%;max-width:150px;height:auto;object-fit:contain}.brandSubtitle{font-size:11px;font-weight:600;letter-spacing:.4px;text-transform:uppercase;color:var(--brand-color);text-align:center}.navGroup{font-size:10px;font-weight:700;letter-spacing:.9px;text-transform:uppercase;color:hsla(0,0%,100%,.42);padding:14px 10px 6px}.sidebar nav{display:block}.sidebar a{display:flex;align-items:center;gap:10px;color:hsla(0,0%,100%,.82);text-decoration:none;padding:9px 10px;border-radius:8px;margin-bottom:2px;font-size:13.5px;line-height:1.3;transition:background .15s,color .15s}.sidebar a svg{flex:0 0 18px;opacity:.85}.sidebar a:hover{background:hsla(0,0%,100%,.09);color:#fff}.sidebar a.navActive{background:hsla(0,0%,100%,.14);color:#fff;font-weight:600}.sidebar a.navActive svg{opacity:1}.sidebarLogout{margin-top:auto;display:flex;align-items:center;gap:10px;background:transparent;border:1px solid hsla(0,0%,100%,.22);color:hsla(0,0%,100%,.85);padding:9px 10px;border-radius:8px;font-size:13.5px;cursor:pointer;text-align:left;width:100%}.sidebarLogout:hover{background:hsla(0,0%,100%,.09);border-color:hsla(0,0%,100%,.38);color:#fff}.content{flex:1 1;min-width:0;padding:0 28px 40px}.adminHeader{position:-webkit-sticky;position:sticky;top:0;z-index:30;display:flex;align-items:center;justify-content:space-between;gap:16px;background:rgba(244,246,250,.9);-webkit-backdrop-filter:saturate(180%) blur(8px);backdrop-filter:saturate(180%) blur(8px);border-bottom:1px solid var(--line);margin:0 -28px 22px;padding:12px 28px}.adminHeaderTitle{font-size:17px;font-weight:600;margin:0;letter-spacing:-.01em}.adminHeaderRight{display:flex;align-items:center;gap:12px}.adminUserChip{display:flex;align-items:center;gap:8px;background:var(--surface);border:1px solid var(--line);border-radius:999px;padding:4px 12px 4px 4px;font-size:12.5px;color:var(--text-soft);white-space:nowrap}.adminUserAvatar{width:26px;height:26px;border-radius:50%;background:var(--accent-soft);color:var(--accent-text);display:flex;align-items:center;justify-content:center;font-size:11px;font-weight:700}.adminBellBtn,.adminBellWrap{position:relative}.adminBellBtn{background:var(--surface);border:1px solid var(--line);border-radius:999px;cursor:pointer;color:var(--text-soft);padding:8px;display:flex}.adminBellBtn:hover{border-color:var(--line-strong);color:var(--text)}.adminBellBadge{position:absolute;top:-5px;right:-5px;background:#e5484d;color:#fff;font-size:10px;font-weight:700;line-height:1;border-radius:999px;padding:3px 5px;min-width:14px;text-align:center;border:2px solid var(--bg)}.adminBellPanel{position:absolute;top:46px;right:0;background:var(--surface);border:1px solid var(--line);border-radius:12px;box-shadow:var(--shadow-lg);padding:6px;min-width:250px;z-index:40}.adminBellItem{display:block;padding:9px 10px;border-radius:8px;font-size:13px;color:var(--text);text-decoration:none}.adminBellItem:hover{background:var(--surface-alt)}.adminBellEmpty{padding:10px;font-size:12.5px;color:var(--text-mute);margin:0}.card{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius-lg);padding:18px 20px;box-shadow:var(--shadow-sm);margin-bottom:16px}.card>h3:first-child,.card>h4:first-child{margin-top:0}.cardHead{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;margin-bottom:14px}.cardTitle{font-size:15px;font-weight:600;margin:0}.cardHint{font-size:12.5px;color:var(--text-soft);margin:2px 0 0;line-height:1.45}.statGrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(168px,1fr));grid-gap:12px;gap:12px;margin-bottom:16px}.stat{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius-lg);padding:14px 16px;box-shadow:var(--shadow-sm)}.statLabel{font-size:12px;color:var(--text-soft);margin:0 0 6px;display:flex;align-items:center;gap:6px}.statValue{font-size:22px;font-weight:700;letter-spacing:-.02em;margin:0;line-height:1.15}.statSub{font-size:11.5px;color:var(--text-mute);margin:4px 0 0}.stat-accent{background:var(--accent-soft);border-color:#cfe0fc}.stat-accent .statLabel{color:var(--accent-text)}.stat-accent .statValue{color:#16408f}.stat-success{background:var(--success-soft);border-color:#c9e9d5}.stat-success .statLabel{color:#17643a}.stat-success .statValue{color:#0f4f2c}.stat-danger{background:var(--danger-soft);border-color:#f7cfcc}.stat-danger .statLabel{color:#8f2019}.stat-danger .statValue{color:#6f1811}.stat-warning{background:var(--warning-soft);border-color:#f6ddbb}.stat-warning .statLabel{color:#8a3a08}.stat-warning .statValue{color:#6b2d06}.stat-click{cursor:pointer;transition:transform .12s,box-shadow .12s}.stat-click:hover{transform:translateY(-1px);box-shadow:var(--shadow-md)}.tabbar{display:flex;gap:2px;border-bottom:1px solid var(--line);margin-bottom:18px;overflow-x:auto;position:-webkit-sticky;position:sticky;top:57px;z-index:20;background:var(--bg)}.tabbar::-webkit-scrollbar{height:0}.tab{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:none;border-bottom:2px solid transparent;padding:10px 14px;font-size:13.5px;color:var(--text-soft);cursor:pointer;white-space:nowrap;font-family:inherit;display:flex;align-items:center;gap:7px}.tab:hover{color:var(--text)}.tab.tabActive{color:var(--accent);border-bottom-color:var(--accent);font-weight:600}.tab:disabled{cursor:default;opacity:1}.tableWrap{overflow-x:auto;border:1px solid var(--line);border-radius:var(--radius-lg);background:var(--surface)}.tableWrap>table{border:none;border-radius:0;box-shadow:none}table{width:100%;border-collapse:collapse;background:var(--surface);border:1px solid var(--line);border-radius:var(--radius-lg);overflow:hidden;font-size:13.5px}td,th{text-align:left;padding:11px 14px;border-bottom:1px solid var(--line);vertical-align:middle}th{background:var(--surface-alt);font-size:11.5px;font-weight:600;letter-spacing:.4px;text-transform:uppercase;color:var(--text-soft);white-space:nowrap}tbody tr:last-child td{border-bottom:none}tbody tr:hover td{background:#fbfcfe}td table{border:none;border-radius:8px;font-size:12.5px}td table th{background:transparent;border-bottom:1px solid var(--line)}.num{text-align:right;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}input:not([type]),input[type=date],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],select,textarea{font-family:inherit;font-size:13.5px;color:var(--text);background:var(--surface);border:1px solid var(--line-strong);border-radius:8px;padding:8px 11px;outline:none;transition:border-color .15s,box-shadow .15s;max-width:100%}input:hover:not(:disabled),select:hover:not(:disabled),textarea:hover:not(:disabled){border-color:#b9c3cf}input:focus,select:focus,textarea:focus{border-color:var(--accent);box-shadow:0 0 0 3px rgba(47,111,237,.14)}input:disabled,select:disabled,textarea:disabled{background:var(--surface-alt);color:var(--text-mute);cursor:not-allowed}input::placeholder,textarea::placeholder{color:var(--text-mute)}select{cursor:pointer;padding-right:30px;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14' viewBox='0 0 24 24' fill='none' stroke='%235b6774' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 9px center;-moz-appearance:none;appearance:none;-webkit-appearance:none}input[type=file]{font-size:13px;color:var(--text-soft);border:1px dashed var(--line-strong);border-radius:8px;padding:9px 11px;background:var(--surface-alt);width:100%}input[type=checkbox],input[type=radio]{width:15px;height:15px;accent-color:var(--accent);cursor:pointer;vertical-align:-2px}label{font-size:12.5px}.field{display:flex;flex-direction:column;gap:5px;margin-bottom:12px}.field>label{color:var(--text-soft);font-weight:500}.fieldRow{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));grid-gap:12px;gap:12px}.filterBar{display:flex;gap:10px;flex-wrap:wrap;align-items:flex-end;padding:12px 14px;background:var(--surface-alt);border:1px solid var(--line);border-radius:var(--radius);margin-bottom:14px}button{font-family:inherit;font-size:13.5px;font-weight:500;color:#fff;background:var(--accent);border:1px solid transparent;border-radius:8px;padding:8px 14px;cursor:pointer;transition:background .15s,border-color .15s,opacity .15s;display:inline-flex;align-items:center;justify-content:center;gap:7px;white-space:nowrap}button:hover:not(:disabled){background:var(--accent-hover)}button:disabled{opacity:.55;cursor:not-allowed}.btn-secondary{background:var(--surface);color:var(--text);border-color:var(--line-strong)}.btn-secondary:hover:not(:disabled){background:var(--surface-alt);border-color:#b9c3cf}.btn-ghost{background:transparent;color:var(--text-soft);border-color:transparent}.btn-ghost:hover:not(:disabled){background:var(--info-soft);color:var(--text);border-color:transparent}.btn-sm{padding:5px 10px;font-size:12.5px;border-radius:7px}.btn-block{width:100%}.btn-danger{background:var(--danger);color:#fff;border-color:var(--danger)}.btn-danger:hover:not(:disabled){background:var(--danger-hover);border-color:var(--danger-hover)}.btn-danger-sm{background:transparent;color:var(--danger);border:1px solid #f0c4c0;border-radius:7px;padding:5px 10px;font-size:12.5px;font-weight:500;cursor:pointer}.btn-danger-sm:hover:not(:disabled){background:var(--danger-soft);border-color:#e7a9a3}.btn-danger-sm:disabled{opacity:.55;cursor:not-allowed}.btnRow{display:flex;gap:8px;flex-wrap:wrap}.badge,.btnRow{align-items:center}.badge{display:inline-flex;gap:5px;padding:3px 9px;border-radius:999px;font-size:11.5px;font-weight:600;white-space:nowrap;border:1px solid transparent}.badge-paid{background:var(--success-soft);color:#14663a;border-color:#c9e9d5}.badge-pending{background:var(--info-soft);color:#4a5765;border-color:#dde3ea}.badge-overdue{background:var(--danger-soft);color:#8f2019;border-color:#f7cfcc}.badge-partial{background:var(--warning-soft);color:#8a3a08;border-color:#f6ddbb}.chip{display:inline-flex;align-items:center;gap:6px;background:var(--surface-alt);border:1px solid var(--line);border-radius:999px;padding:5px 11px;font-size:12.5px;color:var(--text-soft)}.chip strong{color:var(--text);font-weight:600}.notice{border-radius:var(--radius);padding:11px 14px;font-size:13px;margin-bottom:14px;border:1px solid transparent;line-height:1.5}.notice-success{background:var(--success-soft);color:#14663a;border-color:#c9e9d5}.notice-error{background:var(--danger-soft);color:#8f2019;border-color:#f7cfcc}.notice-warning{background:var(--warning-soft);color:#8a3a08;border-color:#f6ddbb}.notice-info{background:var(--accent-soft);color:var(--accent-text);border-color:#cfe0fc}.emptyState{text-align:center;padding:40px 20px;color:var(--text-mute);font-size:13.5px}.emptyState svg{opacity:.35;margin-bottom:10px}.chartBars{gap:14px;height:150px;padding-bottom:4px;border-bottom:1px solid var(--line)}.chartBars,.chartCol{display:flex;align-items:flex-end}.chartCol{flex:1 1;gap:3px;height:100%;min-width:0}.chartBar{flex:1 1;border-radius:4px 4px 0 0;min-height:2px;transition:height .3s ease-out}.chartBar-in{background:#58c295}.chartBar-out{background:#f0a07f}.chartAxis{display:flex;gap:14px;margin-top:6px}.chartAxis>span{flex:1 1;text-align:center;font-size:11px;color:var(--text-mute);min-width:0}.chartLegend{display:flex;gap:16px;margin-top:10px;font-size:12.5px;color:var(--text-soft)}.chartDot{display:inline-block;width:9px;height:9px;border-radius:2px;margin-right:6px;vertical-align:0}.barRow{display:flex;align-items:center;gap:12px;margin-bottom:8px}.barRowLabel{font-size:12.5px;color:var(--text-soft);width:96px;flex:0 0 96px}.barRowTrack{flex:1 1;height:18px;background:var(--surface-alt);border-radius:4px;overflow:hidden;min-width:0}.barRowFill{display:block;height:100%;background:#8f86e0;border-radius:4px;transition:width .3s ease-out}.barRowValue{font-size:12.5px;width:92px;flex:0 0 92px;text-align:right;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.pager{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:11px 4px 0;font-size:12.5px;flex-wrap:wrap}.muted,.pager{color:var(--text-soft)}.tiny{font-size:12px}.right{text-align:right}.mt0{margin-top:0}.mb0{margin-bottom:0}.pos{color:var(--success)}.neg,.pos{font-weight:600}.neg{color:var(--danger)}.rowLink{cursor:pointer}@keyframes shimmer{0%{opacity:.5}50%{opacity:1}to{opacity:.5}}.skeleton{background:var(--surface-alt);border-radius:6px;height:14px;animation:shimmer 1.4s ease-in-out infinite}@keyframes fadeInUp{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}.fadeIn{animation:fadeInUp .22s ease-out}.modalOverlay{position:fixed;inset:0;background:rgba(15,23,32,.5);display:flex;align-items:center;justify-content:center;z-index:100;padding:16px}.modalBox{background:var(--surface);border-radius:var(--radius-lg);width:100%;max-width:500px;max-height:90vh;display:flex;flex-direction:column;box-shadow:var(--shadow-lg);overflow:hidden}.modalHead{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:15px 20px;border-bottom:1px solid var(--line)}.modalTitle{font-size:15px;font-weight:600;margin:0}.modalClose{background:transparent;border:none;color:var(--text-mute);cursor:pointer;padding:4px;border-radius:6px;display:flex}.modalClose:hover{background:var(--surface-alt);color:var(--text);border-color:transparent}.modalBody{padding:18px 20px;overflow-y:auto}@media (max-width:900px){.layout{flex-direction:column}.sidebar{position:static;height:auto;width:100%;flex:none;flex-wrap:wrap;align-items:center;gap:4px;padding:10px;overflow-x:auto}.brand,.sidebar{flex-direction:row}.brand{margin-bottom:0;padding:6px 10px;gap:8px}.brandLogo{max-width:96px}.brandSubtitle,.navGroup{display:none}.sidebar a{margin-bottom:0;padding:7px 9px;font-size:12.5px}.sidebarLogout{margin-top:0;width:auto;padding:7px 10px;font-size:12.5px}.content{padding:0 14px 32px}.adminHeader{margin:0 -14px 16px;padding:10px 14px}.tabbar{top:0}.barRowLabel{width:74px;flex:0 0 74px}.barRowValue{width:78px;flex:0 0 78px}}.residentShell{min-height:100vh;background:#e9ebee;display:flex;justify-content:center}.residentApp{width:100%;max-width:480px;min-height:100vh;background:#f5f6f8;position:relative;box-shadow:0 0 24px rgba(0,0,0,.06)}.residentHeader{display:flex;align-items:center;gap:10px;padding:14px 18px;background:#fff;border-bottom:1px solid #eceff2;position:-webkit-sticky;position:sticky;top:0;z-index:5}.residentHeaderLogo{height:26px;width:auto}.residentHeaderTitle{font-size:16px;font-weight:700;color:var(--brand-color);margin:0;flex:1 1}.residentBellWrap{position:relative;margin-left:auto}.residentBellBtn{background:none;border:none;cursor:pointer;color:#4b5563;padding:4px;position:relative;display:flex}.residentBellBtn:hover{background:none}.residentBellBadge{position:absolute;top:-4px;right:-6px;background:#dc2626;color:#fff;font-size:10px;font-weight:700;line-height:1;border-radius:999px;padding:3px 5px;min-width:14px;text-align:center}.residentBellPanel{position:absolute;top:32px;right:0;background:#fff;border-radius:12px;box-shadow:var(--shadow-lg);padding:8px;min-width:190px;z-index:20}.residentBellItem{display:block;padding:8px 10px;border-radius:8px;font-size:13px;color:#1f2937;text-decoration:none}.residentBellItem:hover{background:#f3f4f6}.residentBellEmpty{padding:8px 10px;font-size:12px;color:#9ca3af;margin:0}.residentContent{padding:16px 16px 90px}.residentTabbar{bottom:0;padding:6px 4px calc(6px + env(safe-area-inset-bottom, 0px));z-index:10}.residentMessageBar,.residentTabbar{position:fixed;left:50%;transform:translateX(-50%);width:100%;max-width:480px;display:flex;background:#fff;border-top:1px solid #eceff2}.residentMessageBar{bottom:58px;gap:8px;padding:10px 12px calc(10px + env(safe-area-inset-bottom, 0px));z-index:15;transition:bottom .1s ease-out}.residentMessageBar--bottom{bottom:0}.residentTab{flex:1 1;display:flex;flex-direction:column;align-items:center;gap:2px;padding:6px 2px;text-decoration:none;color:#93999f;font-size:11px;border-radius:8px}.residentTabActive{color:var(--brand-color)}.rCard{background:#fff;border-radius:14px;padding:16px;margin-bottom:12px;box-shadow:0 1px 2px rgba(0,0,0,.05)}.rCardLink{display:flex;align-items:center;justify-content:space-between;text-decoration:none;color:inherit}.rTitle{font-size:15px;font-weight:700;color:#1f2937;margin:0 0 4px}.rMuted{color:#8a8f98;font-size:13px}.rInput{padding:12px 14px;border:1px solid #e2e5e9;border-radius:10px;margin-bottom:10px;background:#fff}.rButton,.rInput{width:100%;font-size:14px}.rButton{padding:13px;border:none;border-radius:10px;background:var(--brand-color);color:#fff;font-weight:700;cursor:pointer}.rButton:hover:not(:disabled){background:var(--brand-color-hover);border-color:var(--brand-color-hover)}.rButton:disabled{opacity:.5}.rButtonSecondary{background:transparent;color:var(--brand-color);border:1px solid var(--brand-color)}.rButtonSecondary:hover:not(:disabled){background:#eef1f5;border-color:var(--brand-color);color:var(--brand-color)}.rLink{color:var(--brand-color);text-decoration:none;font-size:13px;font-weight:600}.rError{color:#b91c1c}.rError,.rSuccess{font-size:13px;margin-bottom:10px}.rSuccess{color:#166534}.rEmpty{text-align:center;color:#9ca3af;font-size:13px;padding:30px 0}@keyframes badgePop{0%{transform:scale(0);opacity:0}60%{transform:scale(1.15);opacity:1}to{transform:scale(1)}}.rCardBadge{position:absolute;top:-6px;right:-6px;background:#dc2626;color:#fff;font-size:11px;font-weight:700;line-height:1;border-radius:999px;padding:4px 7px;min-width:16px;text-align:center;box-shadow:0 1px 3px rgba(0,0,0,.25);animation:badgePop .3s ease-out}