:root{--primary: #4f46e5;--primary-dark: #4338ca;--primary-soft: #eef2ff;--bg: #f5f7fb;--card: #fff;--text: #1f2937;--muted: #6b7280;--border: #e5e7eb;--success: #16a34a;--danger: #dc2626;--warning: #d97706;--radius: 14px;--shadow: 0 2px 10px rgba(15, 23, 42, .06);font-family:Segoe UI,system-ui,-apple-system,Roboto,sans-serif;color:var(--text);background:var(--bg)}*{box-sizing:border-box}body{margin:0}h1,h2,h3,h4{margin:0 0 .5rem}a{color:var(--primary)}code{background:#f3f4f6;padding:1px 6px;border-radius:6px;font-size:.9em}.muted{color:var(--muted)}.text-danger{color:var(--danger)}.text-success{color:var(--success)}.danger-text{color:var(--danger)!important}.mt{margin-top:.75rem}.mb{margin-bottom:.5rem}.nowrap{white-space:nowrap}.center{min-height:60vh;display:grid;place-items:center;gap:1rem;text-align:center}.row{display:flex;align-items:center}.row.wrap,.wrap{flex-wrap:wrap}.gap{gap:.75rem}.gap-sm{gap:.4rem}.between{justify-content:space-between}.end{justify-content:flex-end}.grow{flex:1}.btn{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;background:var(--primary);color:#fff;border:1px solid transparent;padding:.6rem 1.1rem;border-radius:10px;font-size:.95rem;font-weight:600;cursor:pointer;text-decoration:none;transition:background .15s,transform .05s}.btn:hover{background:var(--primary-dark)}.btn:active{transform:scale(.98)}.btn:disabled{opacity:.5;cursor:not-allowed}.btn.ghost{background:transparent;color:var(--text);border-color:var(--border)}.btn.ghost:hover{background:#f3f4f6}.btn.danger{background:var(--danger)}.btn.wa{background:#25d366}.btn.sm{padding:.35rem .7rem;font-size:.85rem}.btn.full{width:100%;margin-top:.75rem}.star-btn{background:#fbbf24;color:#78350f;padding:.45rem .7rem}.star-btn:hover{background:#f59e0b}input,select,textarea{font:inherit;padding:.55rem .7rem;border:1px solid var(--border);border-radius:10px;background:#fff;color:var(--text);min-width:0}input:focus,select:focus,textarea:focus{outline:2px solid var(--primary-soft);border-color:var(--primary)}.form{display:flex;flex-direction:column;gap:.8rem}.form label{display:flex;flex-direction:column;gap:.3rem;font-size:.9rem;font-weight:600}.form label.check,label.check{flex-direction:row;align-items:center;gap:.5rem;font-weight:400;cursor:pointer}fieldset{border:1px solid var(--border);border-radius:10px;padding:.7rem}legend{font-weight:600;font-size:.9rem;padding:0 .3rem}.inline-label{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap;margin-bottom:.75rem;font-weight:600}.check-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:.35rem 1rem;max-height:280px;overflow:auto}.chip-btn{border:1px solid var(--border);background:#fff;border-radius:999px;padding:.35rem .8rem;cursor:pointer;font:inherit}.chip-btn.on{background:var(--primary);color:#fff;border-color:var(--primary)}.switch{display:inline-flex;align-items:center;gap:.4rem;cursor:pointer;font-weight:600}.switch input{width:20px;height:20px;accent-color:var(--success)}.switch.big{padding:.5rem .8rem;border:1px solid var(--border);border-radius:10px;align-self:flex-end}.card{background:var(--card);border-radius:var(--radius);box-shadow:var(--shadow);padding:1.1rem;margin-bottom:1rem}.table-wrap{overflow-x:auto}.table{width:100%;border-collapse:collapse;font-size:.93rem}.table th,.table td{text-align:left;padding:.6rem .5rem;border-bottom:1px solid var(--border);vertical-align:top}.table th{font-size:.8rem;text-transform:uppercase;color:var(--muted);letter-spacing:.03em}.table.inner{background:#fafafa}.table tfoot td{border-bottom:none}.chip{display:inline-block;padding:.15rem .55rem;border-radius:999px;font-size:.78rem;font-weight:600;background:#f3f4f6;color:#374151;border:none;margin:1px 2px}button.chip{cursor:pointer}.absen-hadir{background:#dcfce7;color:#166534}.absen-izin{background:#e0f2fe;color:#075985}.absen-sakit{background:#fef3c7;color:#92400e}.absen-alpa{background:#fee2e2;color:#991b1b}.siswa-aktif{background:#dcfce7;color:#166534}.siswa-cuti{background:#fef3c7;color:#92400e}.siswa-alumni{background:#e5e7eb;color:#4b5563}.bayar-lunas{background:#dcfce7;color:#166534}.bayar-sebagian{background:#fef3c7;color:#92400e}.bayar-belum{background:#fee2e2;color:#991b1b}.bayar-kosong{background:#f3f4f6;color:#6b7280}.sync-badge{font-size:.8rem;padding:.25rem .6rem;border-radius:999px;border:none;font-weight:600;white-space:nowrap}.sync-badge.ok{background:#dcfce7;color:#166534}.sync-badge.wait{background:#fef3c7;color:#92400e}.sync-badge.err{background:#fee2e2;color:#991b1b;cursor:pointer}.sync-badge.local{background:#e0e7ff;color:#3730a3}.alert{padding:.8rem 1rem;border-radius:10px;margin-bottom:1rem}.alert.info{background:var(--primary-soft)}.alert.danger{background:#fee2e2;color:#991b1b}.page-head{display:flex;justify-content:space-between;align-items:center;gap:1rem;margin-bottom:1rem;flex-wrap:wrap}.section-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:.6rem}.toolbar{display:flex;gap:.6rem;flex-wrap:wrap;margin-bottom:1rem;align-items:center}.tabs{display:inline-flex;background:#e5e7eb;border-radius:10px;padding:3px}.tabs button{border:none;background:transparent;padding:.4rem .8rem;border-radius:8px;cursor:pointer;font:inherit;font-size:.88rem}.tabs button.active{background:#fff;box-shadow:var(--shadow);font-weight:600}.back-link{display:inline-block;margin-bottom:.75rem;text-decoration:none}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#0f172a80;display:grid;place-items:center;z-index:50;padding:1rem}.modal{width:100%;max-width:520px;max-height:92vh;overflow:auto}.modal.wide{max-width:760px}.modal-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:.75rem}.preview-img{max-width:95vw;max-height:90vh;border-radius:10px}.home{min-height:100vh;background:linear-gradient(135deg,#4f46e5,#7c3aed,#ec4899);padding:2rem 1rem;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2rem}.home-hero{text-align:center;color:#fff}.home-hero h1{font-size:2.4rem}.home-logo{font-size:4rem}.home-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:1.2rem;width:100%;max-width:820px}.home-card{background:#fff;border-radius:20px;padding:1.8rem 1.2rem;text-align:center;text-decoration:none;color:var(--text);display:flex;flex-direction:column;gap:.3rem;box-shadow:0 10px 30px #00000026;transition:transform .15s}.home-card:hover{transform:translateY(-4px)}.home-card span{font-size:3rem}.home-card b{font-size:1.3rem}.home-card small{color:var(--muted)}.kiosk-locked{min-height:100vh;display:flex;flex-direction:column;align-items:center;padding:1.5rem 1rem;background:linear-gradient(180deg,var(--primary-soft),var(--bg))}.kiosk-locked>.back-link{align-self:flex-start}.kiosk-locked h1{margin-bottom:1rem;text-align:center}.pinpad{width:100%;max-width:340px;text-align:center}.pin-dots{font-size:1.8rem;letter-spacing:.4rem;min-height:2.6rem;margin:.5rem 0}.pin-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:.6rem;margin-top:.5rem}.pin-key{font-size:1.5rem;padding:.9rem 0;border-radius:14px;border:1px solid var(--border);background:#fff;cursor:pointer;font-weight:600}.pin-key:active{background:var(--primary-soft)}.pin-key.primary{background:var(--primary);color:#fff;border-color:var(--primary)}.shake{animation:shake .35s;color:var(--danger)}@keyframes shake{25%{transform:translate(-8px)}75%{transform:translate(8px)}}.picker{width:100%;max-width:480px}.picker h4{margin-top:1rem;color:var(--muted)}.picker-item{display:flex;justify-content:space-between;width:100%;padding:1rem;margin-bottom:.5rem;border-radius:12px;border:1px solid var(--border);background:#fff;cursor:pointer;font:inherit;font-size:1.05rem}.picker-item.today{border-color:var(--primary);background:var(--primary-soft)}.kiosk{min-height:100vh;display:flex;flex-direction:column;background:#0f172a;color:#fff}.kiosk-head{display:flex;justify-content:space-between;align-items:center;padding:1rem 1.5rem;background:var(--primary)}.kiosk-head p{margin:0;opacity:.85}.kiosk-count{text-align:center;font-size:1.4rem}.kiosk-count b{font-size:2.4rem}.kiosk-count small{display:block;font-size:.8rem;opacity:.8}.kiosk-body{flex:1;display:grid;grid-template-columns:1.4fr 1fr;gap:1rem;padding:1rem}.kiosk-scan{display:flex;flex-direction:column;gap:1rem}.scanner{background:#000;border-radius:16px;overflow:hidden;min-height:300px}.scanner-view{width:100%}.scanner-view video{width:100%!important;height:auto!important;display:block}.scan-hint,.scan-result{border-radius:16px;padding:1.2rem;text-align:center;font-size:1.3rem;display:flex;flex-direction:column;gap:.3rem}.scan-hint{background:#1e293b;color:#cbd5e1}.scan-result.ok{background:var(--success);animation:pop .25s}.scan-result.err{background:var(--danger);animation:pop .25s}.scan-result b{font-size:1.7rem}@keyframes pop{0%{transform:scale(.9);opacity:.5}to{transform:scale(1);opacity:1}}.kiosk-list{background:#1e293b;border-radius:16px;padding:1rem;overflow:auto;max-height:calc(100vh - 220px)}.kiosk-list ul{list-style:none;padding:0;margin:0}.kiosk-list li{display:flex;gap:.6rem;align-items:center;padding:.6rem .4rem;border-bottom:1px solid #334155;font-size:1.05rem}.kiosk-list li b{flex:1;font-weight:500}.kiosk-list li.done b{color:#86efac}.kiosk-foot{display:flex;gap:.75rem;align-items:center;justify-content:space-between;padding:.75rem 1rem;background:#1e293b;flex-wrap:wrap}.kiosk-foot .btn.ghost{color:#fff;border-color:#475569}.manual-form{display:flex;gap:.4rem}.manual-form input{background:#0f172a;color:#fff;border-color:#475569;width:160px}.admin{display:flex;min-height:100vh}.sidebar{width:240px;background:#fff;border-right:1px solid var(--border);padding:1rem;display:flex;flex-direction:column;position:sticky;top:0;height:100vh}.sidebar-brand{font-weight:700;font-size:1.1rem;margin-bottom:1rem}.sidebar nav{display:flex;flex-direction:column;gap:2px;flex:1;overflow:auto}.sidebar nav a{padding:.6rem .75rem;border-radius:10px;text-decoration:none;color:var(--text);display:flex;gap:.6rem}.sidebar nav a:hover{background:#f3f4f6}.sidebar nav a.active{background:var(--primary-soft);color:var(--primary);font-weight:600}.admin-main{flex:1;min-width:0}.topbar{display:flex;align-items:center;gap:.75rem;padding:.75rem 1.25rem;background:#fff;border-bottom:1px solid var(--border);position:sticky;top:0;z-index:10}.brand{font-weight:700;text-decoration:none;color:var(--text)}.menu-btn{display:none}.container{max-width:1100px;margin:0 auto;padding:1.25rem}.page .container{max-width:900px}.stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:.8rem;margin:1rem 0}.stat{background:#fff;border-radius:var(--radius);box-shadow:var(--shadow);padding:1rem;display:flex;flex-direction:column;gap:.15rem}.stat span{font-size:1.5rem}.stat b{font-size:1.35rem}.stat small{color:var(--muted)}.stat.link{text-decoration:none;color:inherit}.stat.link:hover{outline:2px solid var(--primary-soft)}.grid-cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:.8rem}.sesi-card{border:1px solid var(--border);border-radius:12px;padding:.9rem;display:flex;flex-direction:column;gap:.4rem}.sesi-card.mine{border-color:var(--primary);background:var(--primary-soft)}.week{display:grid;grid-template-columns:repeat(7,1fr);gap:.5rem;margin-bottom:1rem}.week-day{background:#fff;border-radius:12px;padding:.6rem;box-shadow:var(--shadow);min-height:90px}.week-day h4{font-size:.85rem;color:var(--muted)}.week-item{display:block;width:100%;text-align:left;border:none;background:var(--primary-soft);border-radius:8px;padding:.4rem;margin-bottom:.3rem;font:inherit;font-size:.82rem;cursor:pointer}.materi-item{border:1px solid var(--border);border-radius:12px;padding:.8rem;margin-bottom:.6rem}.note{margin:.5rem 0 0;background:#fffbeb;padding:.5rem .7rem;border-radius:8px;font-size:.92rem}.thumbs{display:flex;gap:.5rem;flex-wrap:wrap;margin-top:.5rem}.thumbs img{width:90px;height:90px;object-fit:cover;border-radius:8px;cursor:pointer}.thumb-wrap{position:relative}.thumb-wrap button{position:absolute;top:2px;right:2px;border:none;background:#0009;color:#fff;border-radius:50%;width:22px;height:22px;cursor:pointer}.poin-row{display:flex;align-items:center;gap:.75rem;padding:.6rem 0;border-bottom:1px solid var(--border);flex-wrap:wrap}.poin-history{margin-top:.2rem}.stars{font-weight:700;color:#b45309;white-space:nowrap}.tier{display:flex;flex-direction:column;gap:4px}.tier-badge{display:inline-block;color:#fff;padding:.2rem .6rem;border-radius:999px;font-size:.8rem;font-weight:700;white-space:nowrap;width:fit-content}.tier-progress{height:6px;background:#e5e7eb;border-radius:999px;overflow:hidden;width:140px}.tier-progress div{height:100%}.tier-legend{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:.6rem}.tier-legend-item{display:flex;flex-direction:column;gap:.2rem}.podium{display:flex;justify-content:center;align-items:flex-end;gap:.8rem;margin-bottom:1rem}.podium-item{background:#fff;border-radius:var(--radius);box-shadow:var(--shadow);padding:1rem;text-align:center;display:flex;flex-direction:column;gap:.2rem;min-width:150px}.podium-item.p1{order:2;padding-top:1.8rem;border:2px solid #fbbf24}.podium-item.p2{order:1}.podium-item.p3{order:3}.medal{font-size:2.2rem}.qr-sheet{display:grid;grid-template-columns:repeat(auto-fill,8.5cm);gap:.4cm}.qr-card{width:8.5cm;height:5.4cm;border:1px dashed #9ca3af;border-radius:10px;background:#fff;display:flex;align-items:center;gap:.4cm;padding:.4cm;break-inside:avoid}.qr-info{display:flex;flex-direction:column;gap:.2rem}.qr-info b{font-size:1.05rem}.qr-info small{color:var(--primary);font-weight:700}.report{background:#fff;max-width:21cm;margin:0 auto 1.5rem;padding:1.2cm;box-shadow:var(--shadow);border-radius:6px;font-size:.92rem}.report h4{margin:1rem 0 .4rem;color:var(--primary)}.report-head{display:flex;justify-content:space-between;align-items:flex-start;border-bottom:3px solid var(--primary);padding-bottom:.6rem;margin-bottom:.8rem}.report-head .right{text-align:right}.report-id{width:100%;margin-bottom:.8rem}.report-id td{padding:.2rem .4rem}.report-id td:nth-child(odd){color:var(--muted);width:18%}.report-summary{display:grid;grid-template-columns:repeat(5,1fr);gap:.5rem}.report-summary div{background:var(--primary-soft);border-radius:10px;padding:.6rem;text-align:center;display:flex;flex-direction:column}.report-summary b{font-size:1.3rem}.report-summary small{color:var(--muted)}.report-table td,.report-table th{padding:.4rem;font-size:.85rem}.report-cols{display:grid;grid-template-columns:1fr 1fr;gap:1.2rem}.report-bill{width:100%;border-collapse:collapse}.report-bill td{padding:.35rem .4rem;border-bottom:1px solid var(--border)}.report-bill td:last-child{text-align:right}.report-bill .total td{font-weight:700;font-size:1.05rem;border-top:2px solid var(--text)}.report-fotos{display:grid;grid-template-columns:repeat(4,1fr);gap:.4rem}.report-fotos img{width:100%;aspect-ratio:1;object-fit:cover;border-radius:6px}.report-sign{display:flex;justify-content:flex-end;margin-top:1.5rem;text-align:center}ul.compact{margin:.3rem 0;padding-left:1.1rem}@media (max-width: 900px){.kiosk-body{grid-template-columns:1fr}.kiosk-list{max-height:none}.week{grid-template-columns:repeat(2,1fr)}.menu-btn{display:inline-flex}.sidebar{position:fixed;left:0;top:0;z-index:40;transform:translate(-100%);transition:transform .2s;box-shadow:var(--shadow)}.sidebar.open{transform:none}.report{padding:.6cm}.report-summary{grid-template-columns:repeat(3,1fr)}.report-cols{grid-template-columns:1fr}}@media print{@page{size:A4;margin:1cm}body,:root{background:#fff}.no-print,.sidebar,.topbar,.page-head .btn,.toolbar{display:none!important}.container{padding:0;max-width:none}.card{box-shadow:none}.report{box-shadow:none;margin:0;padding:0;max-width:none;page-break-after:always}.report:last-child{page-break-after:auto}.qr-card{border-color:#6b7280}*{-webkit-print-color-adjust:exact;print-color-adjust:exact}}
