
:root{
  --bg:#f6f8fc; --card:#ffffff; --text:#101828; --muted:#667085; --primary:#2563eb; --secondary:#7c3aed; --accent:#16a34a; --green:#16a34a; --red:#dc2626; --amber:#d97706; --line:#e5e7eb; --radius:20px; --shadow:0 18px 45px rgba(15,23,42,.08); --soft-gradient:linear-gradient(135deg,#eef5ff 0%,#f4efff 48%,#ecfdf5 100%);
}
*{box-sizing:border-box} html,body{min-height:100%;overflow-x:hidden} body{margin:0;font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Arial,sans-serif;background:var(--soft-gradient);color:var(--text);font-size:14px} a{text-decoration:none;color:inherit} h1,h2,h3{letter-spacing:-.025em} h3{font-size:19px;margin:0 0 14px}.muted{color:var(--muted);font-size:14px;line-height:1.6}.small{font-size:12px}.app{display:flex;height:100vh;overflow:hidden}.sidebar{width:276px;background:linear-gradient(180deg,#0f172a,#1e1b4b);color:#e5e7eb;padding:22px;position:fixed;inset:0 auto 0 0;height:100vh;overflow-y:auto;overflow-x:hidden;scrollbar-width:thin}.sidebar h2{margin:0 0 4px;font-size:21px}.school-logo{width:50px;height:50px;border-radius:16px;object-fit:cover;background:#fff;display:block;color:var(--primary);font-weight:900;margin-bottom:12px;box-shadow:0 10px 24px rgba(15,23,42,.14)}.school-logo.placeholder{display:grid;place-items:center;background:linear-gradient(135deg,var(--primary),var(--secondary));color:#fff}.rolebox{background:rgba(255,255,255,.08);border:1px solid rgba(255,255,255,.14);border-radius:16px;padding:13px;margin-top:14px;color:#e2e8f0}.nav{margin-top:20px;display:flex;flex-direction:column;gap:7px;padding-bottom:28px}.nav a{padding:12px 13px;border-radius:14px;color:#cbd5e1;font-weight:700;display:flex;align-items:center;gap:10px}.nav a.active,.nav a:hover{background:rgba(255,255,255,.12);color:#fff}.main{margin-left:276px;width:calc(100% - 276px);height:100vh;overflow-y:auto;overflow-x:hidden;padding:28px}.topbar{display:flex;align-items:center;justify-content:space-between;margin-bottom:22px;padding:22px 24px;border-radius:24px;background:rgba(255,255,255,.58);border:1px solid rgba(255,255,255,.72);box-shadow:0 10px 30px rgba(15,23,42,.05);backdrop-filter:blur(12px)}.topbar h1{font-size:31px}.card{background:rgba(255,255,255,.94);border:1px solid rgba(226,232,240,.85);border-radius:var(--radius);box-shadow:var(--shadow);padding:20px}.hero-card,.report-hero{background:linear-gradient(135deg,rgba(255,255,255,.96),rgba(239,246,255,.88));border:1px solid rgba(148,163,184,.24);box-shadow:var(--shadow)}.grid{display:grid;grid-template-columns:repeat(4,1fr);gap:16px}.two{display:grid;grid-template-columns:minmax(0,2fr) minmax(320px,1fr);gap:16px}.settings-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}.stat{position:relative;overflow:hidden}.stat:after{content:"";position:absolute;right:-32px;top:-32px;width:110px;height:110px;border-radius:999px;background:linear-gradient(135deg,var(--primary),transparent);opacity:.13}.stat b{display:block;font-size:25px;margin-top:7px;line-height:1.15}.stat small{display:block;color:#64748b;margin-top:7px}.field{display:flex;flex-direction:column;gap:7px;margin:14px 0}.field label,.filter-label{font-size:12px;font-weight:800;color:#475569;text-transform:uppercase;letter-spacing:.04em}.field input,.field select,.field textarea,.search,.report-filter input,.report-filter select{border:1px solid #d8dee9;border-radius:14px;padding:12px 13px;background:#fff;width:100%;min-height:45px;outline:none;transition:.15s}.field input:focus,.field select:focus,.field textarea:focus,.search:focus,.report-filter input:focus,.report-filter select:focus{border-color:var(--primary);box-shadow:0 0 0 4px rgba(37,99,235,.10)}.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;border:0;border-radius:14px;padding:12px 16px;background:linear-gradient(135deg,var(--primary),#3b82f6);color:white;font-weight:800;cursor:pointer;box-shadow:0 9px 18px rgba(37,99,235,.18);white-space:nowrap}.btn:hover{filter:brightness(.98);transform:translateY(-1px)}.btn.secondary{background:#0f172a;color:#fff;box-shadow:0 9px 18px rgba(15,23,42,.12)}.btn.ghost{background:#eef2ff;color:#1d4ed8;box-shadow:none}.btn.alt{background:linear-gradient(135deg,var(--secondary),#a855f7)}.btn.ok,.btn-success{background:linear-gradient(135deg,var(--accent),#22c55e);box-shadow:0 9px 18px rgba(22,163,74,.18)}.table-wrap{overflow:auto}.table{width:100%;border-collapse:separate;border-spacing:0;background:#fff;border-radius:18px;overflow:hidden;border:1px solid #e6edf5}.table th,.table td{padding:13px 14px;border-bottom:1px solid #eef2f7;font-size:14px;text-align:left;vertical-align:middle}.table th{background:linear-gradient(180deg,#f8fafc,#eef2f7);color:#334155;text-transform:uppercase;font-size:11px;letter-spacing:.06em}.table tr:last-child td{border-bottom:0}.table tbody tr:nth-child(even){background:#fbfdff}.table tbody tr:hover{background:#f1f7ff}.modern-table{min-width:980px}.num{text-align:right!important;font-variant-numeric:tabular-nums}.badge{display:inline-flex;align-items:center;justify-content:center;padding:6px 10px;border-radius:999px;font-size:12px;font-weight:800}.lunas{background:#dcfce7;color:#166534}.sebagian{background:#fef3c7;color:#92400e}.belum{background:#fee2e2;color:#991b1b}.toolbar{display:grid;grid-template-columns:2fr 1fr auto auto auto;gap:10px;margin:14px 0 18px;align-items:center}.alert{padding:14px 16px;border-radius:16px;background:#ecfdf5;color:#166534;margin:12px 0;border:1px solid #bbf7d0;font-weight:700}.import-box{border:1px dashed #94a3b8;background:#f8fafc;border-radius:16px;padding:14px;margin-top:14px}.pill,.chip{display:inline-flex;align-items:center;justify-content:center;padding:6px 11px;border-radius:999px;background:#eef2ff;color:#3730a3;font-size:12px;font-weight:800}.chip.soft{background:#f0fdf4;color:#166534}.color-row{display:grid;grid-template-columns:1fr 86px;gap:10px;align-items:center}.section-head{display:flex;justify-content:space-between;gap:12px;align-items:flex-start;margin-bottom:12px}.student-cell{display:flex;flex-direction:column;gap:3px}.student-cell span{font-weight:800}.student-cell small{color:#64748b}.empty{text-align:center!important;color:#64748b;padding:30px!important}.report-hero{display:flex;align-items:center;justify-content:space-between;gap:18px;padding:24px;margin-bottom:16px;border-radius:26px}.report-hero h2{margin:10px 0 4px;font-size:30px}.report-actions{display:flex;gap:10px;flex-wrap:wrap}.report-filter{display:grid;grid-template-columns:1fr 1fr 2fr auto;gap:14px;align-items:end;margin-bottom:16px}.report-filter label{display:flex;flex-direction:column;gap:8px}.filter-buttons{display:flex;gap:9px}.report-stats{margin-bottom:16px}.report-card{margin-top:16px}.login-page{background:var(--soft-gradient)!important;min-height:100vh;position:relative}.login-bg{position:fixed;inset:0;background:var(--soft-gradient);z-index:-2}.login-wrap{min-height:100vh;display:grid;place-items:center;padding:20px;position:relative;z-index:1}.login-card{width:100%;max-width:430px;padding:30px;text-align:left;backdrop-filter:blur(14px);background:rgba(255,255,255,.88);border:1px solid rgba(255,255,255,.7);box-shadow:0 26px 80px rgba(15,23,42,.16);border-radius:26px}.login-logo{display:flex;justify-content:center;margin-bottom:12px}.login-logo .school-logo{width:84px;height:84px;border-radius:25px;margin:0}.brand{text-align:center;font-weight:900;font-size:27px;margin:0;color:var(--primary)}.login-card .muted{text-align:center}.login-card .btn{width:100%;background:linear-gradient(135deg,var(--primary),var(--secondary))}.sidebar::-webkit-scrollbar,.main::-webkit-scrollbar{width:8px}.sidebar::-webkit-scrollbar-thumb,.main::-webkit-scrollbar-thumb{background:rgba(148,163,184,.55);border-radius:999px}.sidebar::-webkit-scrollbar-track,.main::-webkit-scrollbar-track{background:transparent}@media(max-width:1100px){.grid{grid-template-columns:repeat(2,1fr)}.two,.settings-grid{grid-template-columns:1fr}.toolbar,.report-filter{grid-template-columns:1fr 1fr}.filter-buttons{grid-column:1/-1}.main{padding:20px}}@media(max-width:900px){.app{display:block;height:auto;min-height:100vh;overflow:visible}.sidebar{position:relative;width:auto;height:auto;max-height:50vh}.main{margin:0;width:100%;height:auto;overflow:visible;padding:16px}.topbar{align-items:flex-start;gap:10px;flex-direction:column}.grid,.toolbar,.report-filter{grid-template-columns:1fr}.filter-buttons,.report-actions{width:100%;flex-direction:column}.filter-buttons .btn,.report-actions .btn{width:100%}.report-hero{flex-direction:column;align-items:flex-start}.report-hero h2{font-size:24px}.card{padding:16px}}
@media print{body{background:#fff!important}.sidebar,.topbar,.report-filter,.report-actions,.import-box{display:none!important}.main{margin:0!important;width:100%!important;height:auto!important;overflow:visible!important;padding:0!important}.card,.report-hero{box-shadow:none!important;border:1px solid #ddd!important}.modern-table{min-width:0;font-size:11px}.table th,.table td{padding:8px}}

/* v9: pembayaran wali dan UI profesional */
.page-head{display:flex;justify-content:space-between;align-items:flex-end;gap:16px;margin:8px 0 18px}.page-head h2{margin:0;font-size:24px}.modern-card{border:1px solid rgba(15,23,42,.08);box-shadow:0 18px 45px rgba(15,23,42,.08)}.modern-table{border-collapse:separate;border-spacing:0 8px;background:transparent}.modern-table tr:first-child{background:transparent}.modern-table th{background:#f8fafc;color:#475569;font-size:12px;text-transform:uppercase;letter-spacing:.04em}.modern-table td{background:#fff;border-top:1px solid #eef2f7;border-bottom:1px solid #eef2f7}.modern-table td:first-child,.modern-table th:first-child{border-radius:12px 0 0 12px}.modern-table td:last-child,.modern-table th:last-child{border-radius:0 12px 12px 0}.hero-card{border-radius:24px;padding:24px;background:linear-gradient(135deg,rgba(37,99,235,.13),rgba(20,184,166,.13),rgba(255,255,255,.85));border:1px solid rgba(37,99,235,.12);display:flex;justify-content:space-between;align-items:center;gap:18px;box-shadow:0 20px 55px rgba(15,23,42,.08)}.hero-card h2{margin:2px 0 6px;font-size:28px}.eyebrow{margin:0;color:#2563eb;font-weight:800;font-size:12px;text-transform:uppercase;letter-spacing:.08em}.hero-amount{background:#fff;border-radius:20px;padding:18px 22px;min-width:230px;text-align:right;box-shadow:0 12px 28px rgba(15,23,42,.08)}.hero-amount span{display:block;color:#64748b;font-size:13px}.hero-amount b{display:block;font-size:25px;margin-top:4px}.dashboard-grid{grid-template-columns:repeat(4,minmax(0,1fr))}.pay-methods{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;margin:14px 0}.pay-methods button{border:1px solid #dbeafe;background:linear-gradient(135deg,#fff,#eff6ff);color:#1e40af;border-radius:14px;padding:12px;font-weight:700;text-align:left;cursor:pointer}.pay-methods button:hover{border-color:#2563eb;transform:translateY(-1px)}.pay-form{margin-top:10px}.alert.soft{background:#f8fafc;color:#334155;border:1px solid #e2e8f0}.inline-actions{display:flex;gap:8px;flex-wrap:wrap}.btn.small{padding:7px 10px;font-size:12px;border-radius:10px}.badge{white-space:nowrap}code{background:#f1f5f9;padding:2px 5px;border-radius:6px}@media(max-width:900px){.hero-card{flex-direction:column;align-items:stretch}.hero-amount{text-align:left;min-width:0}.dashboard-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.pay-methods{grid-template-columns:1fr}.page-head{display:block}}

/* v10: alur bayar detail, instruksi metode, QRIS, dan konfirmasi admin */
.payment-step-card{position:sticky;top:18px;align-self:start}.empty-pay-state{text-align:center;padding:36px 12px}.pay-icon{width:64px;height:64px;border-radius:22px;background:linear-gradient(135deg,#dbeafe,#f5d0fe);display:grid;place-items:center;margin:0 auto 12px;font-size:30px}.pay-summary{background:linear-gradient(135deg,#eff6ff,#f8fafc);border:1px solid #dbeafe;border-radius:18px;padding:14px;margin:12px 0}.pay-summary span{display:block;color:#64748b;font-size:12px}.pay-summary b{font-size:24px}.required{color:#dc2626;font-weight:900}.payment-instruction{border:1px solid #dbeafe;background:#f8fbff;border-radius:18px;padding:14px;margin:12px 0}.instruction-head{display:flex;justify-content:space-between;gap:12px;align-items:flex-start;margin-bottom:12px}.instruction-head b{font-size:17px}.instruction-head p{margin:4px 0 0;color:#64748b;font-size:12px;line-height:1.5}.instruction-head span{background:#fff;border:1px solid #dbeafe;border-radius:999px;padding:8px 11px;font-weight:900;color:#1d4ed8;white-space:nowrap}.copy-box{display:flex;align-items:center;justify-content:space-between;gap:12px;background:#fff;border:1px solid #e2e8f0;border-radius:16px;padding:14px}.copy-box span{display:block;color:#64748b;font-size:11px;text-transform:uppercase;letter-spacing:.05em;font-weight:800}.copy-box b{display:block;font-size:20px;letter-spacing:.03em}.copy-box small{display:block;color:#64748b;margin-top:4px}.qris-box{display:grid;grid-template-columns:148px 1fr;gap:14px;align-items:center;background:#fff;border:1px solid #e2e8f0;border-radius:16px;padding:14px}.fake-qr{width:132px;height:132px;background:#fff;border:8px solid #fff;box-shadow:0 0 0 1px #cbd5e1;border-radius:10px;display:grid;grid-template-columns:repeat(9,1fr);grid-template-rows:repeat(9,1fr);gap:2px}.fake-qr i{background:#f1f5f9;border-radius:2px}.fake-qr i.on{background:#0f172a}.compact-billing{min-width:760px}.proof-list{display:flex;flex-direction:column;gap:14px}.proof-card{display:grid;grid-template-columns:1fr 330px;gap:16px;padding:16px;border:1px solid #e2e8f0;border-radius:20px;background:linear-gradient(135deg,#fff,#fbfdff);box-shadow:0 12px 28px rgba(15,23,42,.05)}.proof-main{display:flex;gap:14px}.proof-avatar{width:50px;height:50px;border-radius:16px;background:#eef2ff;display:grid;place-items:center;font-size:24px;flex:0 0 auto}.proof-meta{display:flex;gap:8px;flex-wrap:wrap;margin:8px 0}.proof-meta span{background:#f1f5f9;color:#334155;border-radius:999px;padding:6px 10px;font-size:12px;font-weight:800}.proof-side{display:flex;flex-direction:column;gap:10px}.proof-preview{display:block;text-align:center;border:1px dashed #94a3b8;border-radius:14px;padding:12px;background:#f8fafc;color:#1d4ed8;font-weight:800}.confirm-form textarea{width:100%;border:1px solid #dbe3ef;border-radius:14px;padding:10px;margin-bottom:8px;resize:vertical}.btn.ok{background:linear-gradient(135deg,#16a34a,#22c55e)}@media(max-width:1050px){.payment-step-card{position:static}.proof-card{grid-template-columns:1fr}.qris-box{grid-template-columns:1fr}.instruction-head,.copy-box{flex-direction:column;align-items:stretch}.instruction-head span{text-align:center}.fake-qr{margin:auto}}

/* v12 - Database restore panel */
.db-restore-card{position:relative;overflow:hidden}
.db-restore-card:before{content:"";position:absolute;inset:0 0 auto auto;width:180px;height:180px;background:linear-gradient(135deg,rgba(37,99,235,.12),rgba(22,163,74,.08));border-radius:999px;transform:translate(45px,-65px);pointer-events:none}
.db-form{position:relative;z-index:1;margin-top:14px}
.form-grid.four{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:14px}
.form-grid label,.db-form label{font-size:12px;font-weight:700;color:#475569;display:flex;flex-direction:column;gap:7px}
.form-grid input,.upload-box input[type=file]{border:1px solid rgba(15,23,42,.12);border-radius:14px;padding:12px 13px;background:#fff;color:#0f172a;outline:none;box-shadow:0 1px 0 rgba(15,23,42,.02)}
.form-grid input:focus{border-color:#2563eb;box-shadow:0 0 0 4px rgba(37,99,235,.10)}
.form-actions{display:flex;gap:10px;flex-wrap:wrap;align-items:center;margin-top:16px}
.btn.success,.success{background:#16a34a;color:#fff;border-color:#16a34a}
.upload-box{margin-top:14px;border:1px dashed rgba(37,99,235,.35);background:linear-gradient(135deg,#f8fbff,#f7fff9);border-radius:18px;padding:16px;display:flex;flex-direction:column;gap:9px}
.upload-box span{font-size:12px;color:#64748b;font-weight:500}
.success-alert{border-color:rgba(22,163,74,.25);background:#ecfdf5;color:#166534}
.danger-alert{border-color:rgba(220,38,38,.25);background:#fef2f2;color:#991b1b}
@media(max-width:900px){.form-grid.four{grid-template-columns:1fr 1fr}}
@media(max-width:560px){.form-grid.four{grid-template-columns:1fr}.form-actions .btn{width:100%;justify-content:center}}

/* v13 - Database form rapi + hybrid sync */
.nice-form,.db-form{width:100%}
.form-grid.two-col{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}
.form-grid.four{grid-template-columns:repeat(4,minmax(180px,1fr))!important;gap:16px!important}
.form-grid label,.nice-form label,.db-form label,.upload-card label{font-size:12px;font-weight:800;color:#475569;letter-spacing:.02em;display:flex;flex-direction:column;gap:8px;min-width:0}
.form-grid input,.form-grid select,.nice-form input,.nice-form select,.db-form input,.db-form select,.upload-card input[type=file]{width:100%;min-height:46px;border:1px solid #dbe3ef!important;border-radius:14px!important;padding:12px 14px!important;background:#fff!important;color:#0f172a;outline:none;box-shadow:0 1px 2px rgba(15,23,42,.03);font-size:14px}
.form-grid input:focus,.form-grid select:focus,.nice-form input:focus,.nice-form select:focus,.db-form input:focus,.db-form select:focus{border-color:var(--primary)!important;box-shadow:0 0 0 4px rgba(37,99,235,.10)!important}
.db-restore-card{padding:24px!important;margin-bottom:18px;border-radius:24px!important;background:linear-gradient(135deg,rgba(255,255,255,.98),rgba(248,251,255,.92))!important}
.db-restore-card .section-head{align-items:center;border-bottom:1px solid #eef2f7;padding-bottom:14px;margin-bottom:18px}
.upload-box{display:grid!important;grid-template-columns:minmax(220px,1fr) minmax(220px,2fr);align-items:center;gap:14px!important}
.upload-box input[type=file]{background:#fff!important}
.upload-box span{align-self:center;background:#f8fafc;border-radius:12px;padding:11px 12px}
.hybrid-hero{display:flex;justify-content:space-between;align-items:center;gap:18px;margin-bottom:16px;background:linear-gradient(135deg,rgba(37,99,235,.14),rgba(124,58,237,.10),rgba(22,163,74,.10));border:1px solid rgba(37,99,235,.15)}
.hybrid-hero h2{font-size:34px;margin:4px 0 6px}.sync-status{background:#fff;border:1px solid #e2e8f0;border-radius:20px;padding:17px 20px;min-width:260px;text-align:right;box-shadow:0 10px 25px rgba(15,23,42,.06)}.sync-status span{display:block;color:#64748b;font-size:12px;font-weight:800;text-transform:uppercase}.sync-status b{display:block;margin-top:5px;font-size:18px}
.stack-actions{margin:0 0 10px}.wide{width:100%;margin-bottom:10px}.upload-card{margin-top:14px;border:1px dashed #93c5fd;background:linear-gradient(135deg,#eff6ff,#f8fafc);border-radius:18px;padding:14px;display:flex;flex-direction:column;gap:12px}.sync-flow{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:14px}.sync-flow div{background:#fff;border:1px solid #e2e8f0;border-radius:18px;padding:16px}.sync-flow b{width:34px;height:34px;border-radius:12px;background:linear-gradient(135deg,var(--primary),var(--secondary));color:#fff;display:grid;place-items:center;margin-bottom:10px}.sync-flow h4{margin:0 0 6px;font-size:16px}.sync-flow p{margin:0;color:#64748b;line-height:1.55;font-size:13px}
@media(max-width:1150px){.form-grid.four{grid-template-columns:repeat(2,minmax(0,1fr))!important}.sync-flow{grid-template-columns:repeat(2,minmax(0,1fr))}.hybrid-hero{flex-direction:column;align-items:stretch}.sync-status{text-align:left;min-width:0}}
@media(max-width:700px){.form-grid.four,.form-grid.two-col{grid-template-columns:1fr!important}.upload-box{grid-template-columns:1fr!important}.sync-flow{grid-template-columns:1fr}.form-actions .btn,.upload-card .btn{width:100%}}

/* v15 - Data Kelas layout */
.class-list-card{margin-bottom:18px}.class-section-head{align-items:center}.class-summary{min-width:118px;border-radius:18px;background:linear-gradient(135deg,#eef2ff,#ecfeff);padding:12px 16px;text-align:center;border:1px solid #dbeafe}.class-summary span{display:block;font-size:24px;font-weight:900;color:#1d4ed8;line-height:1}.class-summary small{display:block;color:#64748b;margin-top:4px;font-weight:700}.level-filter-card{display:flex;align-items:center;justify-content:space-between;gap:14px;background:linear-gradient(135deg,#f8fafc,#eef6ff);border:1px solid #e2e8f0;border-radius:18px;padding:12px 14px;margin:12px 0 16px}.level-filter-title{font-size:12px;font-weight:900;color:#475569;text-transform:uppercase;letter-spacing:.06em;white-space:nowrap}.level-tabs{display:flex;gap:8px;flex-wrap:wrap}.level-tab{padding:10px 14px;border-radius:999px;background:#fff;border:1px solid #dbeafe;color:#1e40af;font-weight:900;box-shadow:0 6px 14px rgba(15,23,42,.04)}.level-tab.active,.level-tab:hover{background:linear-gradient(135deg,var(--primary),#3b82f6);color:#fff;border-color:transparent;box-shadow:0 10px 20px rgba(37,99,235,.18)}.class-form-card{margin-top:18px}.form-actions.wide{grid-column:1/-1;display:flex;gap:10px;flex-wrap:wrap;align-items:center}@media(max-width:700px){.class-section-head,.level-filter-card{display:block}.class-summary{margin-top:12px;text-align:left}.level-tabs{margin-top:10px}.level-tab{flex:1;text-align:center}.form-actions.wide .btn{width:100%}}

/* v16 - Naik kelas dan naik jenjang */
.promotion-summary{margin-bottom:0}.promotion-filter{display:grid;grid-template-columns:1fr 1fr 1fr auto;gap:14px;align-items:end}.promotion-filter .field{margin:0}.promotion-filter .form-actions{display:flex;gap:9px;align-items:end}.promotion-form .two{grid-template-columns:minmax(0,2fr) minmax(330px,1fr)}.btn.small{padding:8px 11px;border-radius:11px;font-size:12px}.promotion-form textarea{min-height:96px}.student-check{width:18px;height:18px;accent-color:var(--primary)}@media(max-width:1100px){.promotion-filter{grid-template-columns:1fr 1fr}.promotion-filter .form-actions{grid-column:1/-1}.promotion-form .two{grid-template-columns:1fr}}@media(max-width:700px){.promotion-filter{grid-template-columns:1fr}.promotion-filter .form-actions{flex-direction:column}.promotion-filter .form-actions .btn{width:100%}}

/* v18 - sorting and role access */
.sort-tabs{display:flex;gap:8px;flex-wrap:wrap;margin-top:12px}
.role-table th,.role-table td{text-align:center;vertical-align:middle}
.role-table td:first-child,.role-table th:first-child{text-align:left;min-width:220px}
.switch-check{display:inline-flex;align-items:center;gap:8px;padding:8px 10px;border:1px solid #e5e7eb;border-radius:999px;background:#fff;cursor:pointer;font-size:12px;font-weight:700;color:#475569;min-width:96px;justify-content:center}
.switch-check input{width:16px;height:16px;accent-color:var(--primary,#2563eb)}
.switch-check:has(input:checked){background:linear-gradient(135deg,rgba(37,99,235,.12),rgba(22,163,74,.10));border-color:rgba(37,99,235,.35);color:#0f172a}
.soft-card{background:linear-gradient(135deg,rgba(37,99,235,.08),rgba(20,184,166,.08));border:1px solid rgba(37,99,235,.12);border-radius:18px;padding:16px;margin-top:16px;color:#334155}
@media(max-width:760px){.role-table{min-width:760px}.switch-check{min-width:84px;padding:7px 8px}.toolbar select{width:100%}}

/* v19: layout revisi naik kelas dan WhatsApp */
.promotion-stack{display:grid;grid-template-columns:1fr;gap:16px}
.promotion-target-card{max-width:none;width:100%}
.promotion-target-card .field{max-width:760px}
.wa-card .wa-form-grid{display:grid;grid-template-columns:1fr 2fr;gap:14px;align-items:end}
.wa-card .wa-field{margin:0}.wa-card .field:first-child{margin:0}
.wa-actions{display:grid;grid-template-columns:auto minmax(280px,1fr);gap:16px;align-items:start;margin-top:14px}
.wa-note-card{background:linear-gradient(135deg,rgba(255,255,255,.98),rgba(239,246,255,.78))}
@media(max-width:900px){.wa-card .wa-form-grid,.wa-actions{grid-template-columns:1fr}.wa-actions .btn{width:100%}}

/* v20: searchable student picker for WhatsApp single-send mode */
.wa-student-picker{gap:8px}.wa-student-search{border:1px solid #d8dee9;border-radius:14px;padding:12px 13px;background:#fff;width:100%;min-height:45px;outline:none;transition:.15s}.wa-student-search:focus{border-color:var(--primary);box-shadow:0 0 0 4px rgba(37,99,235,.10)}#waStudentSelect{min-height:190px;padding:8px}#waStudentSelect option{padding:9px 10px;border-radius:10px;margin:2px 0}#waStudentSelect option:checked{background:linear-gradient(135deg,var(--primary),#3b82f6);color:#fff}

/* v21: WhatsApp student picker clickable result list */
.wa-selected-student{border:1px dashed #cbd5e1;background:#f8fafc;border-radius:14px;padding:11px 13px;color:#64748b;font-weight:700}
.wa-selected-student.is-selected{border-color:rgba(37,99,235,.35);background:linear-gradient(135deg,rgba(37,99,235,.10),rgba(14,165,233,.08));color:#12305f}
.wa-student-results{border:1px solid #d8dee9;border-radius:16px;background:#fff;max-height:250px;overflow:auto;padding:8px;display:flex;flex-direction:column;gap:7px}
.wa-student-option{width:100%;border:1px solid transparent;background:#f8fafc;border-radius:13px;padding:10px 12px;text-align:left;cursor:pointer;display:flex;flex-direction:column;gap:3px;transition:.15s}
.wa-student-option:hover{background:#eef4ff;border-color:rgba(37,99,235,.25);transform:translateY(-1px)}
.wa-student-option.is-active{background:linear-gradient(135deg,var(--primary),#3b82f6);color:#fff;box-shadow:0 10px 22px rgba(37,99,235,.22)}
.wa-student-name{font-weight:800}.wa-student-meta{font-size:12px;color:#64748b}.wa-student-option.is-active .wa-student-meta{color:rgba(255,255,255,.85)}

/* v25 profile & announcements */
.form-card input,.form-card select,.form-card textarea{width:100%;box-sizing:border-box;border:1px solid #d9e1ef;border-radius:14px;padding:12px 14px;background:#fff;outline:none;transition:.2s}
.form-card input:focus,.form-card select:focus,.form-card textarea:focus{border-color:#3b82f6;box-shadow:0 0 0 4px rgba(59,130,246,.12)}
.grid-form{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;align-items:start}.grid-form.one-col{grid-template-columns:1fr}.grid-form label{font-weight:700;color:#1f2a44;font-size:13px}.grid-form label input,.grid-form label select,.grid-form label textarea{margin-top:7px;font-weight:500;color:#111827}.grid-form .full{grid-column:1/-1}.divider-title{border-top:1px dashed #d8e0ef;padding-top:16px;margin-top:4px;font-size:15px;font-weight:800;color:#0f172a}.actions{display:flex;gap:10px;align-items:center;flex-wrap:wrap}.alert{padding:14px 16px;border-radius:16px;margin-bottom:16px;font-weight:700}.alert.success{background:#dcfce7;color:#166534}.alert.danger{background:#fee2e2;color:#991b1b}.grid-2{display:grid;grid-template-columns:1.25fr .75fr;gap:18px}.announcement-list{display:grid;gap:14px}.announcement-list.compact{grid-template-columns:repeat(auto-fit,minmax(220px,1fr))}.announcement-item{background:linear-gradient(135deg,#fff,#f8fbff);border:1px solid #e6edf8;border-radius:20px;padding:16px;box-shadow:0 10px 26px rgba(15,23,42,.05)}.announcement-item h3{margin:8px 0;font-size:18px}.announcement-item p{color:#526179;line-height:1.55}.announce-meta{display:flex;gap:8px;flex-wrap:wrap}.announce-meta span,.pill{background:#eef4ff;color:#1d4ed8;border-radius:999px;padding:6px 10px;font-size:12px;font-weight:800}.status.ok{background:#dcfce7;color:#166534}.status.off{background:#f1f5f9;color:#475569}.small-actions{margin-top:12px}.small-actions form{display:inline}.btn.danger{background:#ef4444;color:white}.announcement-dashboard{margin-top:18px}@media(max-width:900px){.grid-form,.grid-2{grid-template-columns:1fr}}

/* v26 Live Chat CS */
.chat-list{display:flex;flex-direction:column;gap:12px;max-height:620px;overflow:auto;padding-right:4px}
.chat-item{border:1px solid rgba(15,23,42,.10);background:linear-gradient(180deg,#fff,#f8fafc);border-radius:18px;padding:14px;box-shadow:0 8px 24px rgba(15,23,42,.04)}
.chat-top{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:6px}
.note-box{background:#eff6ff;border:1px solid #bfdbfe;color:#1e3a8a;border-radius:14px;padding:10px;margin-top:10px;font-size:13px}
.status.new{background:#dbeafe;color:#1d4ed8}.status.wait{background:#fef3c7;color:#92400e}.status.off{background:#e5e7eb;color:#374151}
.compact-text{max-width:420px;margin:6px 0 0;color:#475569;line-height:1.5}
.vertical-actions{flex-direction:column;align-items:stretch;gap:8px}.vertical-actions .btn{width:100%;text-align:center;justify-content:center}.btn.wa{background:#16a34a;color:white;border-color:#16a34a}.inline-status-form{display:flex;flex-direction:column;gap:8px}.inline-status-form select,.inline-status-form textarea{width:100%;border:1px solid #e2e8f0;border-radius:12px;padding:9px;background:#fff}.filter-modern .wide{min-width:260px;flex:2}.small{font-size:12px}
@media(max-width:900px){.compact-text{max-width:none}.vertical-actions{min-width:180px}}
