/* Fallback ringan. Jalankan `npm install && npm run build` untuk hasil Tailwind CSS v4 penuh. */
*{box-sizing:border-box}body{margin:0;font-family:Inter,system-ui,sans-serif;background:#f8fafc;color:#0f172a}a{color:inherit;text-decoration:none}.max-w-7xl{max-width:80rem}.mx-auto{margin-left:auto;margin-right:auto}.p-4{padding:1rem}.p-5{padding:1.25rem}.px-4{padding-left:1rem;padding-right:1rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.mb-6{margin-bottom:1.5rem}.mt-4{margin-top:1rem}.grid{display:grid}.gap-4{gap:1rem}.flex{display:flex}.items-center{align-items:center}.justify-between{justify-content:space-between}.flex-wrap{flex-wrap:wrap}.rounded-2xl{border-radius:1rem}.border{border:1px solid #e2e8f0}.bg-white{background:#fff}.bg-slate-900{background:#0f172a}.text-white{color:#fff}.text-slate-500{color:#64748b}.font-bold{font-weight:700}.font-semibold{font-weight:600}.text-2xl{font-size:1.5rem}.text-sm{font-size:.875rem}.w-full{width:100%}.overflow-x-auto{overflow-x:auto}.card{background:white;border:1px solid #e2e8f0;border-radius:1rem;padding:1.25rem;box-shadow:0 1px 2px #0000000d}.btn,.btn-primary,.btn-soft,.btn-danger{display:inline-flex;align-items:center;justify-content:center;border-radius:.75rem;padding:.65rem 1rem;font-size:.875rem;font-weight:600;border:0;cursor:pointer}.btn-primary{background:#0f172a;color:#fff}.btn-soft{background:#f1f5f9;color:#334155}.btn-danger{background:#dc2626;color:#fff}.btn-danger:hover{background:#b91c1c}.input{width:100%;border:1px solid #cbd5e1;border-radius:.75rem;padding:.65rem .75rem;background:white}.label{display:block;margin-bottom:.35rem;font-size:.875rem;font-weight:600;color:#334155}.table-wrap{overflow-x:auto;border:1px solid #e2e8f0;border-radius:1rem;background:white}.table{width:100%;border-collapse:collapse;min-width:720px}.table th{background:#f8fafc;padding:.75rem 1rem;text-align:left}.table td{padding:.75rem 1rem;border-top:1px solid #f1f5f9}.nav{display:flex;gap:.5rem;flex-wrap:wrap}.nav a{padding:.55rem .8rem;border-radius:.7rem;background:#f1f5f9}.alert{padding:.85rem 1rem;border-radius:.8rem;margin-bottom:1rem;background:#e0f2fe}.stat{font-size:1.65rem;font-weight:800;margin-top:.35rem}@media(min-width:768px){.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md\:p-6{padding:1.5rem}}
.md\:col-span-2{grid-column:span 2/span 2}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}@media(max-width:767px){.md\:col-span-2{grid-column:auto}.md\:grid-cols-3{grid-template-columns:1fr}}

/* Pencarian pegawai tanpa mengganti dropdown lama. */
[data-employee-search]{position:relative}.employee-search-hint{font-size:.75rem;color:#64748b;margin:.35rem 0 .5rem}.employee-search-results{position:absolute;z-index:20;left:0;right:0;top:4.55rem;max-height:15rem;overflow-y:auto;background:#fff;border:1px solid #cbd5e1;border-radius:.75rem;box-shadow:0 10px 25px #0f172a1a;padding:.35rem}.employee-search-result{display:block;width:100%;border:0;background:#fff;text-align:left;padding:.65rem .75rem;border-radius:.55rem;color:#0f172a;cursor:pointer;font:inherit}.employee-search-result:hover,.employee-search-result:focus{background:#f1f5f9;outline:none}.employee-search-empty{padding:.65rem .75rem;font-size:.875rem;color:#64748b}

/* Tambahan fallback untuk fitur pekerja/GPS/session. */
.gap-2{gap:.5rem}.mb-4{margin-bottom:1rem}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.pt-4{padding-top:1rem}.text-xs{font-size:.75rem;line-height:1rem}.font-medium{font-weight:500}.whitespace-nowrap{white-space:nowrap}.min-h-11{min-height:2.75rem}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.border-t{border-top:1px solid #e2e8f0}.border-slate-200{border-color:#e2e8f0}.alert-error{background:#fef2f2;border:1px solid #fecaca;color:#b91c1c}.btn-primary:disabled,.btn-soft:disabled,.btn-danger:disabled{opacity:.55;cursor:not-allowed}.attendance-location-status{min-height:1.25rem}
@media(min-width:768px){.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}

/* Alur absensi: lokasi terlebih dahulu, lalu selfie dengan frame di browser. */
.attendance-selfie-flow{display:grid;gap:.25rem}.selfie-file-input{position:absolute!important;width:1px!important;height:1px!important;opacity:0!important;pointer-events:none!important}.selfie-camera{position:relative;width:100%;max-width:360px;aspect-ratio:3/4;margin-left:auto;margin-right:auto;overflow:hidden;border-radius:1rem;background:#0f172a;border:1px solid #cbd5e1}.selfie-camera video,.selfie-camera img{display:block;width:100%;height:100%;object-fit:cover}.selfie-camera video{transform:scaleX(-1)}.selfie-frame{position:absolute;inset:0;pointer-events:none;border:3px solid rgba(255,255,255,.9);border-radius:1rem;box-shadow:inset 0 0 0 999px rgba(15,23,42,.20)}.selfie-frame::before{content:"";position:absolute;left:50%;top:12%;width:58%;height:58%;transform:translateX(-50%);border:3px solid rgba(255,255,255,.95);border-radius:48% 48% 44% 44% / 42% 42% 58% 58%;box-shadow:0 0 0 2px rgba(15,23,42,.18)}.selfie-frame::after{content:"Posisikan wajah di dalam frame";position:absolute;left:50%;bottom:1rem;transform:translateX(-50%);white-space:nowrap;padding:.4rem .65rem;border-radius:999px;background:rgba(15,23,42,.72);color:#fff;font-size:.75rem;font-weight:600}.selfie-actions{display:flex;gap:.5rem;flex-wrap:wrap;justify-content:center}.selfie-actions .btn-primary,.selfie-actions .btn-soft{flex:1;min-width:140px}

/* Fitur admin tambahan: bulk action, pagination, laporan, dashboard live. */
.pagination{display:flex;gap:.5rem;align-items:center;flex-wrap:wrap}.filter-actions{display:flex;align-items:end;gap:.5rem;flex-wrap:wrap}.metric-mini{padding:1rem;border:1px solid #e2e8f0;border-radius:.85rem;background:#f8fafc;display:flex;justify-content:space-between;gap:1rem;align-items:center}.metric-mini span{font-size:.8rem;color:#64748b}.metric-mini strong{font-size:1.35rem}.chart-shell{width:100%;min-height:300px;border:1px solid #e2e8f0;border-radius:1rem;padding:.75rem;background:#fff}.chart-shell canvas{display:block;width:100%;height:300px}.dashboard-screensaver{position:fixed;inset:0;z-index:9999;background:linear-gradient(135deg,#020617,#0f172a 55%,#111827);color:#fff;padding:clamp(1rem,3vw,3rem);overflow:auto}.dashboard-screensaver[hidden]{display:none}.screensaver-inner{min-height:calc(100vh - 6rem);display:flex;flex-direction:column;justify-content:center;max-width:1500px;margin:0 auto}.screensaver-kicker{font-size:.8rem;letter-spacing:.25em;color:#94a3b8;font-weight:700}.screensaver-inner h2{font-size:clamp(2rem,5vw,4.5rem);margin:.4rem 0 1.5rem}.screensaver-stats{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:1rem;margin-bottom:1.5rem}.screensaver-stats>div{border:1px solid #334155;border-radius:1rem;padding:1rem;background:#0f172acc}.screensaver-stats span{display:block;color:#94a3b8;font-size:.85rem}.screensaver-stats strong{font-size:clamp(1.8rem,4vw,3.5rem)}.dashboard-screensaver canvas{display:block;width:100%;height:min(42vh,500px);border:1px solid #334155;border-radius:1rem;background:#020617aa}.screensaver-footer{margin-top:1rem;color:#94a3b8;font-size:.85rem}.screensaver-close{position:fixed;right:1.2rem;top:1rem;width:2.8rem;height:2.8rem;border-radius:999px;border:1px solid #475569;background:#0f172a;color:#fff;font-size:1.5rem;cursor:pointer}

/* Live Camera + Microphone, selalu opt-in dan terlihat oleh pekerja. */
.live-worker-card{max-width:760px}.live-consent{padding:1rem;border:1px solid #bae6fd;background:#f0f9ff;border-radius:.85rem;margin-bottom:1rem}.live-consent p{margin:.35rem 0 0}.live-video-shell,.live-remote-shell{position:relative;overflow:hidden;border-radius:1rem;background:#020617;aspect-ratio:16/9;border:1px solid #334155}.live-video-shell video,.live-remote-shell video{display:block;width:100%;height:100%;object-fit:cover;background:#020617}.live-worker-card .live-video-shell{max-width:680px}.live-worker-card .live-video-shell video{transform:scaleX(-1)}.live-placeholder{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;text-align:center;padding:2rem;color:#94a3b8;background:#020617}.live-badge{position:absolute;left:1rem;top:1rem;padding:.45rem .7rem;border-radius:999px;background:#dc2626;color:#fff;font-size:.75rem;font-weight:800;letter-spacing:.05em}.live-status,.live-admin-status{font-size:.875rem;color:#475569}.live-monitor-grid{grid-template-columns:minmax(300px,.75fr) minmax(0,1.5fr);gap:1rem}.live-stream-item{padding:1rem;border:1px solid #e2e8f0;border-radius:.85rem;display:flex;align-items:center;justify-content:space-between;gap:1rem;margin-bottom:.65rem}.live-stream-item:last-child{margin-bottom:0}.live-stream-meta{min-width:0}.live-stream-meta strong{display:block}.live-stream-dot{display:inline-block;width:.55rem;height:.55rem;border-radius:999px;background:#16a34a;margin-right:.35rem}.live-remote-shell .live-placeholder[hidden],.live-video-shell .live-placeholder[hidden]{display:none}

@media(max-width:900px){.live-monitor-grid{grid-template-columns:1fr}.screensaver-stats{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:600px){.screensaver-stats{grid-template-columns:1fr 1fr}.dashboard-screensaver{padding:1rem}.screensaver-inner{min-height:calc(100vh - 2rem)}}
