/* COMPONENTS.CSS — modals, filters, charts, KPI, toggles, trees, reminder */

/* ── Toggle group ── */
.toggle-group{display:inline-flex;background:#e2e8f0;border-radius:0.5rem;padding:0.2rem;border:1px solid var(--border);width:100%;height:40px}
.toggle-btn{flex:1;border:none;background:transparent;cursor:pointer;border-radius:0.375rem;font-size:0.82rem;font-weight:700;color:#64748b;transition:background-color 0.15s,color 0.15s,box-shadow 0.15s;will-change:background-color}
.toggle-btn.active[data-value="Receipt"]{color:#fff;background:#16a34a;box-shadow:0 2px 6px rgba(0,0,0,0.18)}
.toggle-btn.active[data-value="Payment"]{color:#fff;background:#dc2626;box-shadow:0 2px 6px rgba(0,0,0,0.18)}

/* ── Filter panel ── */
.filter-panel{position:relative;z-index:100;background:var(--card-bg);padding:1.1rem 1.25rem;border-radius:var(--radius-card);box-shadow:var(--shadow-sm);border:var(--border-w) solid var(--border);margin-bottom:1rem;display:flex;flex-direction:column;gap:0.65rem}
.filter-header{display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid var(--border);padding-bottom:0.65rem;flex-wrap:wrap;gap:0.5rem}
.filter-header h3{font-size:0.9rem;color:var(--text-main);display:flex;align-items:center;gap:0.4rem;margin:0}
.filter-active-highlight{border-color:var(--warning)!important;box-shadow:0 0 0 3px rgba(217,119,6,0.15)!important}
.filter-active-highlight .filter-header h3{color:var(--warning)}
.filter-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(185px,1fr));gap:0.65rem;align-items:end}

/* ── Modals ── */
.modal{display:flex;position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(15,23,42,0.8);align-items:center;justify-content:center;z-index:1000;visibility:hidden;opacity:0;transition:visibility 0.22s,opacity 0.18s ease;padding:1.25rem;box-sizing:border-box}
.modal.active{visibility:visible;opacity:1}
.modal-content{background:var(--card-bg-solid);padding:2rem 2.25rem;border-radius:var(--radius-modal);width:100%!important;max-width:640px!important;max-height:92vh!important;box-shadow:var(--shadow-modal);position:relative;overflow-y:auto;color:var(--text-main);opacity:0;transform:translateY(14px) scale(0.97);transition:opacity 0.18s ease,transform 0.22s ease;will-change:transform,opacity}
.modal.active .modal-content{opacity:1;transform:translateY(0) scale(1)}
.close-btn{position:absolute;top:1rem;right:1rem;background:none;border:none;cursor:pointer;color:var(--text-muted);width:36px;height:36px;display:inline-flex;align-items:center;justify-content:center;border-radius:0.45rem;transition:color 0.15s,background-color 0.15s}
.close-btn:hover{color:var(--danger);background:var(--danger-bg)}
.modal-content h2{font-size:1.1rem;font-weight:800;margin-bottom:1.1rem;display:flex;align-items:center;gap:0.5rem}
.modal-grid{display:grid;grid-template-columns:1fr 1fr;gap:0.75rem}
.modal-grid.col-3{grid-template-columns:1fr 1fr 1fr}
.modal-grid.col-1{grid-template-columns:1fr}
.modal-footer{display:flex;justify-content:flex-end;gap:0.5rem;margin-top:1.25rem;padding-top:0.85rem;border-top:1px solid var(--border)}
/* Specific modal sizes */
#printConfigModal .modal-content{max-width:560px!important}
#salaryEntryModal .modal-content,#residentEntryModal .modal-content{max-width:95vw!important;width:1100px!important}
#printPreviewModal .modal-content{max-width:900px!important;padding:1.1rem}
/* App dialog */
#appDialogModal .modal-content{max-width:420px!important;text-align:center}
#appDialogModal .dialog-icon{width:52px;height:52px;margin:0 auto 1rem;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:1.4rem}
#appDialogModal .dialog-message{font-size:0.9rem;color:var(--text-muted);margin-bottom:1.25rem;line-height:1.6}

/* ── Excel-like column filters ── */
.excel-th{cursor:pointer;user-select:none;transition:background 0.15s;position:relative}
.excel-th:hover{background:rgba(128,128,128,0.08);color:var(--text-main)}
.excel-th-icon{opacity:0.2;transition:opacity 0.15s,color 0.15s;color:var(--text-muted);margin-left:0.3rem}
.excel-th:hover .excel-th-icon,.excel-th.filter-active .excel-th-icon{opacity:1}
.excel-th.filter-active .excel-th-icon{color:var(--primary)}
#excelFilterPopup{display:none;position:absolute;z-index:9999;width:240px;background:#fff;border:1px solid #e2e8f0;border-radius:0.6rem;box-shadow:0 10px 25px -5px rgba(0,0,0,0.1);padding:0.45rem;font-size:0.84rem;color:#1e293b;font-family:inherit}
body:not(.dark-mode):not(.solar-theme) #excelFilterPopup .filter-opt:hover{background:#f1f5f9;color:var(--primary)}
.filter-opt{display:flex;align-items:center;gap:0.55rem;padding:0.5rem 0.75rem;cursor:pointer;border-radius:0.4rem;transition:background 0.15s;font-weight:600}
.filter-opt svg{color:var(--text-muted);width:1rem;height:1rem;transition:color 0.15s}
.filter-opt:hover svg{color:var(--primary)}
.filter-div{height:1px;background:var(--border);margin:0.4rem 0;opacity:0.6}
.filter-search-box{padding:0.25rem 0.45rem;position:relative}
.filter-search-box>svg{position:absolute;left:0.9rem;top:50%;transform:translateY(-50%);width:0.85rem;height:0.85rem;color:var(--text-muted);pointer-events:none}
.filter-search-box input{width:100%;padding:0.45rem 0.45rem 0.45rem 1.85rem;border:1px solid var(--border);border-radius:0.4rem;outline:none;font-size:0.8rem;background:transparent;color:inherit}
.filter-search-box input:focus{border-color:var(--primary);box-shadow:0 0 0 2px rgba(37,99,235,0.15)}

/* ── Report section labels ── */
.report-section-label{font-size:0.68rem;font-weight:700;text-transform:uppercase;color:var(--text-muted);margin-bottom:0.5rem;padding-bottom:0.25rem;border-bottom:2px solid var(--border);display:flex;align-items:center;justify-content:space-between}

/* ── Flatpickr ── */
.flatpickr-calendar{width:auto!important;padding:4px!important;box-shadow:var(--shadow-md)!important;border:1px solid var(--border)!important;font-size:0.8rem!important;border-radius:0.5rem!important;z-index:99999!important}
.flatpickr-day{height:30px!important;line-height:30px!important}

/* ── Tree view ── */
.tree-container{background:var(--card-bg);border:var(--border-w) solid var(--border);border-radius:var(--radius-card);overflow:hidden;margin-bottom:1.25rem;box-shadow:var(--shadow-sm)}
.tree-node-container{display:block}
.tree-subgroup{display:none;border-left:1px dotted var(--border);margin-left:1.15rem}
.tree-node-container.expanded>.tree-subgroup{display:block}
.report-node{display:flex;justify-content:space-between;align-items:center;padding:0.55rem 1.15rem;border-bottom:1px solid var(--border);font-size:0.84rem;cursor:pointer;transition:background-color 0.15s;color:var(--text-main);position:relative;outline:none}
.report-node:last-child{border-bottom:none}
.report-node:hover,.report-node:focus{background:var(--surface-tint)}
.tree-group{font-weight:700;background:var(--surface-tint);font-size:0.84rem;text-transform:uppercase;letter-spacing:0.03em}
.tree-group-amount{font-variant-numeric:tabular-nums;font-weight:800;font-size:0.95rem}
.tree-amount{font-variant-numeric:tabular-nums;font-size:0.84rem}
.tree-caret{display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;transition:transform 0.18s;font-size:0.62rem;color:var(--text-muted)}
.tree-node-container.expanded>.report-node .tree-caret{transform:rotate(90deg)}
.tree-group-header{border-bottom:2px solid var(--border);user-select:none}
.tree-group-header:hover{background:rgba(37,99,235,0.04)!important}
.tree-group-header td{padding:0.6rem 0.5rem!important}
.tree-child-row td{padding:0.28rem 0.5rem!important}
.tree-child-row:last-child{border-bottom:1px solid var(--border)}
.opening-balance-row{background:rgba(37,99,235,0.05);border-bottom:2px solid var(--border)}
.drag-handle{cursor:grab;user-select:none}
.drag-handle:active{cursor:grabbing}
tr.drag-over{border-top:2px solid var(--primary)!important;background:rgba(37,99,235,0.05)}

/* ── KPI cards ── */
.kpi-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:0.75rem;margin-bottom:1rem}
.kpi-card{background:var(--card-bg);border:var(--border-w) solid var(--border);border-radius:var(--radius-card);padding:1rem 1.15rem;box-shadow:var(--shadow-sm);display:flex;flex-direction:column;gap:0.4rem;transition:transform 0.15s,box-shadow 0.15s;will-change:transform}
.kpi-card:hover{transform:translateY(-2px);box-shadow:var(--shadow-hover)}
.kpi-card .kpi-icon{width:2.1rem;height:2.1rem;border-radius:0.55rem;display:flex;align-items:center;justify-content:center;flex-shrink:0}
.kpi-card .kpi-icon svg{width:1.1rem;height:1.1rem}
.kpi-card .kpi-label{font-size:0.66rem;font-weight:700;text-transform:uppercase;letter-spacing:0.05em;color:var(--text-muted);line-height:1.3}
.kpi-card .kpi-value{font-size:1.35rem;font-weight:800;font-variant-numeric:tabular-nums;line-height:1.1;white-space:nowrap}
.kpi-card .kpi-sub{font-size:0.7rem;color:var(--text-muted);font-weight:600}
.kpi-card.kpi-blue .kpi-icon{background:rgba(37,99,235,0.12);color:var(--primary)}.kpi-card.kpi-blue .kpi-value{color:var(--primary)}
.kpi-card.kpi-green .kpi-icon{background:var(--success-bg);color:var(--success)}.kpi-card.kpi-green .kpi-value{color:var(--success)}
.kpi-card.kpi-red .kpi-icon{background:var(--danger-bg);color:var(--danger)}.kpi-card.kpi-red .kpi-value{color:var(--danger)}
.kpi-card.kpi-purple .kpi-icon{background:var(--purple-bg);color:var(--purple)}.kpi-card.kpi-purple .kpi-value{color:var(--purple)}

/* ── Chart cards ── */
.chart-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:0.85rem;margin-bottom:1.1rem}
.chart-card{background:var(--card-bg);border:var(--border-w) solid var(--border);border-radius:var(--radius-card);padding:1rem 1.1rem;box-shadow:var(--shadow-sm);display:flex;flex-direction:column;transition:box-shadow 0.15s;min-width:0}
.chart-card:hover{box-shadow:var(--shadow-hover)}
.chart-card.wide{grid-column:span 2}
.chart-card h4{font-size:0.82rem;font-weight:700;color:var(--text-main);margin-bottom:0.6rem;display:flex;align-items:center;gap:0.35rem}
.chart-canvas-wrap{position:relative;height:240px}
.chart-card.wide .chart-canvas-wrap{height:265px}
.chart-empty{display:flex;align-items:center;justify-content:center;height:240px;color:var(--text-muted);font-size:0.84rem;text-align:center}
@media(max-width:880px){.chart-grid{grid-template-columns:1fr}.chart-card.wide{grid-column:span 1}}

/* ── Collapsible sections ── */
.collapsible-section{margin-bottom:0.4rem}
.collapsible-header{display:flex;align-items:center;justify-content:space-between;cursor:pointer;padding:0.45rem 0.1rem;user-select:none;gap:0.5rem;flex-wrap:wrap}
.collapsible-header h3{font-size:0.9rem;font-weight:700;display:flex;align-items:center;gap:0.4rem;color:var(--text-main);margin:0}
.collapsible-header .tree-caret{transition:transform 0.18s;color:var(--text-muted)}
.collapsible-section.collapsed .tree-caret{transform:rotate(-90deg)}
.collapsible-section.collapsed .collapsible-body{display:none}

/* ── Period chip bar ── */
.period-quick-bar{display:flex;gap:0.35rem;flex-wrap:wrap;align-items:center;padding-top:0.6rem;border-top:1px solid var(--border)}
.period-quick-label{font-size:0.68rem;font-weight:700;color:var(--text-muted);text-transform:uppercase;letter-spacing:0.06em;margin-right:0.3rem}
.period-chip{padding:0.35rem 0.8rem;border-radius:999px;border:1px solid var(--border);background:transparent;color:var(--text-muted);font-size:0.76rem;font-weight:700;cursor:pointer;transition:border-color 0.15s,color 0.15s,background 0.15s;white-space:nowrap}
.period-chip:hover{border-color:var(--purple);color:var(--purple)}
.period-chip.active{background:var(--purple);border-color:var(--purple);color:#fff}

/* ── Print config ── */
.pconf-section{border:1px solid var(--border);border-radius:0.6rem;padding:0.9rem 1rem;margin-bottom:0.85rem}
.pconf-section-title{font-size:0.68rem;font-weight:800;text-transform:uppercase;letter-spacing:0.07em;color:var(--text-muted);margin-bottom:0.65rem;display:flex;align-items:center;gap:0.35rem}
.pconf-row{display:flex;gap:0.6rem;margin-bottom:0.55rem}
.pconf-row:last-child{margin-bottom:0}

/* ── Report table borders (print) ── */
#report table,#report th,#report td,#accountPage table,#accountPage th,#accountPage td{border:1px solid #000!important;color:#000!important}
#report th,#accountPage th{background:#e2e8f0!important;color:#000!important}
#accountPage td.balance-col{background:#f1f5f9!important;color:#000!important}
#report .amt-danger,#accountPage .amt-danger{color:#b91c1c!important}
#report .amt-success,#accountPage .amt-success{color:#15803d!important}

/* ── Reminder button ── */
.rf-reminder-btn{position:relative;display:inline-flex;align-items:center;gap:0.4rem;height:38px;padding:0 1rem;font-size:0.78rem;font-weight:700;color:#fff;background:linear-gradient(135deg,#7c3aed 0%,#5b21b6 100%);border:none;border-radius:10px;cursor:pointer;overflow:hidden;transition:transform 0.2s,box-shadow 0.2s;box-shadow:0 2px 8px rgba(124,58,237,0.35);will-change:transform}
.rf-reminder-btn:hover{transform:translateY(-1px);box-shadow:0 4px 16px rgba(124,58,237,0.5)}
.rf-reminder-btn:active{transform:translateY(0)}
.rf-bell-icon{transition:transform 0.3s ease}
.rf-reminder-btn:hover .rf-bell-icon{animation:rfBellRing 0.6s ease-in-out}
@keyframes rfBellRing{0%,100%{transform:rotate(0)}15%{transform:rotate(14deg)}30%{transform:rotate(-12deg)}45%{transform:rotate(10deg)}60%{transform:rotate(-8deg)}75%{transform:rotate(4deg)}90%{transform:rotate(-2deg)}}
.rf-reminder-badge{position:absolute;top:7px;right:9px;width:7px;height:7px;border-radius:50%;background:#f43f5e;animation:rfBadgePulse 2s ease-in-out infinite}
@keyframes rfBadgePulse{0%,100%{box-shadow:0 0 0 2px rgba(244,63,94,0.3)}50%{box-shadow:0 0 0 5px rgba(244,63,94,0)}}

/* ── Segmented toggle (RF detail/summary) ── */
.rf-view-toggle{position:relative;display:inline-flex;height:38px;border-radius:10px;background:#f1f5f9;border:1.5px solid var(--border);padding:3px;overflow:hidden;box-shadow:inset 0 1px 3px rgba(0,0,0,0.06)}
.rf-toggle-slider{position:absolute;top:3px;left:3px;height:calc(100% - 6px);width:calc(50% - 3px);border-radius:7px;background:linear-gradient(135deg,#4f46e5 0%,#6366f1 100%);box-shadow:0 2px 8px rgba(79,70,229,0.35);transition:transform 0.3s cubic-bezier(0.34,1.56,0.64,1);z-index:1;pointer-events:none}
.rf-toggle-slider.slide-right{transform:translateX(100%)}
.rf-toggle-btn{position:relative;z-index:10;display:inline-flex;align-items:center;justify-content:center;gap:0.35rem;padding:0 0.85rem;height:100%;font-size:0.76rem;font-weight:700;border:none;background:transparent;color:var(--text-muted);cursor:pointer;transition:color 0.2s;white-space:nowrap;border-radius:7px;min-width:88px;user-select:none}
.rf-toggle-btn:hover:not(.active){color:var(--primary)}
.rf-toggle-btn.active{color:#fff}

/* ── Voucher print ── */
.vpc-narration{margin-bottom:12px;padding:8px 12px;border:1px solid #c8c6be;border-radius:2px;background:#f7f6f2}
.vpc-narration-label{font-size:8px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:#9090b0;margin-bottom:4px}
.vpc-narration-text{font-size:11px;color:#1a1a2e}
.vpc-sig-row{display:flex;justify-content:space-between;align-items:flex-end;padding:28px 20px 12px;border-top:1px dashed #c8c6be;gap:12px}
.vpc-sig-box{text-align:center;padding-top:18px}
.vpc-sig-line{width:120px;height:2px;background:#c8c6be;margin:0 auto 10px}
.vpc-sig-label{font-size:8px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:#1a1a2e}
.vpc-footer{background:#0f3460;padding:7px 20px;display:flex;justify-content:space-between;align-items:center;gap:8px}
.vpc-footer p{font-size:8px;color:rgba(255,255,255,.6)}
.vpc-footer .vpc-stamp{font-size:8px;color:#f0d98a;font-weight:700;letter-spacing:.1em;text-transform:uppercase}
.vpc-ribbon{position:absolute;top:14px;right:-28px;font-size:8px;font-weight:700;letter-spacing:.15em;text-transform:uppercase;padding:4px 38px;transform:rotate(45deg);box-shadow:0 2px 6px rgba(0,0,0,.2);pointer-events:none;z-index:10;color:#fff}
.vpc-ribbon.payment{background:#b91c1c}
.vpc-ribbon.receipt{background:#1a6b3a}
.vp-editable{cursor:pointer;border-bottom:1.5px dashed #c9a84c!important;transition:background 0.2s;border-radius:2px;padding:0 2px}
.vp-editable:hover{background:#fef9ec}
.vp-editable:focus{outline:1.5px dashed #c9a84c;background:#fffde7}

/* Maligai matrix (light) */
.maligai-matrix{background:#fff;color:#0d1b2e}
.maligai-matrix th{background:var(--primary)!important;color:#fff!important;border-color:var(--primary)!important}
.maligai-matrix td{border-color:#b9c8e6!important;color:#0d1b2e!important;background:#edf3fd!important}
.maligai-matrix td.date-col{background:var(--primary)!important;color:#fff!important;font-weight:700}
.maligai-matrix td.mr-cell-value{background:#d4e6fb!important;color:#0a2a60!important;font-weight:600}
.maligai-matrix td.mr-cell-zero{background:#edf3fd!important;color:#8ba4cc!important}
.maligai-matrix td.total-col{background:#f5c518!important;color:#3a2000!important;font-weight:700}
.maligai-matrix td.grand-total{background:#0a7a4a!important;color:#fff!important;font-weight:800}
.maligai-matrix tr.mr-col-totals-row td{background:#b8d0f5!important;color:#0a2060!important;font-weight:700}
.maligai-matrix tr.mr-col-totals-row td.date-col{background:var(--primary)!important;color:#fff!important}
.maligai-matrix td.mr-col-total-cell{background:#b8d0f5!important;color:#0a2060!important;font-weight:700}
.maligai-matrix tbody tr:hover td{background:#c2d8f8!important}
.maligai-matrix tbody tr:hover td.date-col{background:#163e80!important}
/* Addl matrix (light) */
.addl-matrix{background:#fff;color:#0d1b2e}
.addl-matrix th{background:var(--primary)!important;color:#fff!important}
.addl-matrix td{border-color:#b7ddb9!important;color:#0d1b2e!important;background:#e8f5e9!important}
.addl-matrix td.date-col{background:var(--primary)!important;color:#fff!important;font-weight:700}
.addl-matrix td.ae-cell-value{background:#c8e6c9!important;color:var(--primary)!important;font-weight:600}
.addl-matrix td.ae-cell-zero{background:#e8f5e9!important;color:#81c784!important}
.addl-matrix td.total-col{background:#f5c518!important;color:#3a2000!important;font-weight:700}
.addl-matrix td.grand-total{background:#0a7a4a!important;color:#fff!important;font-weight:800}
.addl-matrix tr.ae-col-totals-row td{background:#c8e6c9!important;color:#14401a!important;font-weight:700}
.addl-matrix tr.ae-col-totals-row td.date-col{background:var(--primary)!important;color:#fff!important}
.addl-matrix td.ae-col-total-cell{background:#c8e6c9!important;color:#14401a!important;font-weight:700}
.addl-matrix tbody tr:hover td{background:#b9dcbb!important}
.mr-row-active:hover td,.mr-row-empty:hover td{background:rgba(255,193,7,0.2)!important;color:#000!important}
body.dark-mode .mr-row-active:hover td,.dark-mode .mr-row-empty:hover td{background:rgba(255,255,255,0.15)!important;color:#fff!important}
.ae-row-active:hover td,.ae-row-empty:hover td{background:rgba(255,193,7,0.2)!important;color:#000!important}
body.dark-mode .ae-row-active:hover td,.dark-mode .ae-row-empty:hover td{background:rgba(255,255,255,0.15)!important;color:#fff!important}

/* ── Skeleton loader ── */
.skeleton{background:linear-gradient(90deg,#e2e8f0 25%,#f1f5f9 50%,#e2e8f0 75%);background-size:200% 100%;animation:shimmer 1.2s ease-in-out infinite;border-radius:0.4rem}
body.dark-mode .skeleton{background:linear-gradient(90deg,#1e293b 25%,#334155 50%,#1e293b 75%);background-size:200% 100%}
@keyframes shimmer{0%{background-position:200% 0}100%{background-position:-200% 0}}
.skeleton-row td{padding:0.6rem 0.75rem}
.skeleton-cell{height:14px;border-radius:3px}

/* ── Sponsor/Resident summary bar ── */
#sdSummaryBar .sum-card,.rf-summary .sum-card{border:1px solid var(--rf-border)!important}

@media print{
    @page{margin:0;size:A4 portrait}
    body>*:not(#printPreviewModal){display:none!important}
    .preview-toolbar{display:none!important}
    #printPreviewModal{background:transparent!important;align-items:flex-start!important}
    .modal-content{padding:0!important;box-shadow:none!important;width:100%!important;max-width:100%!important;background:transparent!important}
    #previewScrollBox{padding:0!important;overflow:visible!important;background:transparent!important}
    #voucherPrintArea{padding:0!important;box-shadow:none!important;margin:0!important;width:100%!important}
    .vpc-header,.vpc-footer,.vpc-ribbon,.vpc-amount-pill .vpc-currency{-webkit-print-color-adjust:exact!important;print-color-adjust:exact!important}
}
