@import url('https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;500;600;700&display=swap');
:root{--navy:#17213d;--blue:#4f6ef7;--bg:#f5f7fb;--text:#263047;--muted:#788199;--line:#e6eaf1;--green:#18a36b;--orange:#e99226}*{box-sizing:border-box}body{margin:0;font-family:'DM Sans',Arial,sans-serif;color:var(--text);background:var(--bg)}a{text-decoration:none;color:var(--blue)}button,input{font:inherit}.admin-body{display:flex;min-height:100vh}.sidebar{width:245px;background:var(--navy);color:#fff;padding:30px 20px;position:fixed;inset:0 auto 0 0;display:flex;flex-direction:column}.brand{color:#fff;font-size:21px;font-weight:700;display:flex;align-items:center;gap:10px}.brand .brand-mark,.login-logo{display:grid;place-items:center;background:linear-gradient(145deg,#5d73f6 0%,#7048c8 100%);color:#fff;border-radius:11px;width:42px;height:38px;font-size:11px;font-weight:900;letter-spacing:-.7px;line-height:1;text-shadow:0 1px 2px #24327a55;box-shadow:inset 0 1px 0 #ffffff35,0 5px 12px #111a3a25;transform:skew(-5deg)}.sidebar nav{margin-top:42px;display:grid;gap:7px}.sidebar nav a{color:#aeb7d1;padding:12px 14px;border-radius:10px;display:flex;gap:13px}.sidebar nav a:hover,.sidebar nav a.active{color:#fff;background:#293553}.sidebar-foot{margin-top:auto;border-top:1px solid #33405e;padding:20px 8px 0;display:grid;gap:4px}.sidebar-foot small{color:#919bb7}.sidebar-foot a{margin-top:10px;color:#fd9a9a}.main{margin-left:245px;padding:34px 42px;width:calc(100% - 245px)}.topbar{display:flex;align-items:center;justify-content:space-between;margin-bottom:27px}.topbar h1{margin:3px 0;font-size:28px}.topbar small{color:var(--muted)}.btn{border:0;border-radius:9px;padding:11px 17px;display:inline-block;cursor:pointer;font-weight:600}.btn-primary{background:var(--blue);color:#fff;box-shadow:0 5px 14px #4f6ef733}.btn-light{background:#edf0f6;color:#4f5870}.btn:disabled{opacity:.55;cursor:not-allowed}.full{width:100%;text-align:center}.stats{display:grid;grid-template-columns:repeat(4,1fr);gap:18px;margin-bottom:22px}.stats article{background:#fff;border:1px solid var(--line);border-radius:14px;padding:21px;display:flex;align-items:center;gap:15px}.stats small{display:block;color:var(--muted);margin-bottom:4px}.stats strong{font-size:28px}.stat-icon{width:45px;height:45px;border-radius:12px;display:grid;place-items:center;font-size:21px}.blue{background:#e9efff;color:#4f6ef7}.purple{background:#f1eafe;color:#8b5bd7}.green{background:#e5f7ef;color:#18a36b}.orange{background:#fff2df;color:#e99226}.card{background:#fff;border:1px solid var(--line);border-radius:14px;padding:24px;margin-bottom:22px}.card-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:21px}.card-head h2{margin:0 0 5px;font-size:19px}.card-head p{margin:0;color:var(--muted);font-size:14px}.table-wrap{overflow:auto}table{width:100%;border-collapse:collapse;font-size:14px}th{text-align:left;color:var(--muted);font-size:12px;text-transform:uppercase;letter-spacing:.04em;padding:12px;border-bottom:1px solid var(--line)}td{padding:14px 12px;border-bottom:1px solid #eef1f5}.empty{text-align:center;color:var(--muted);padding:36px}.block,.person small{display:block;color:var(--muted);margin-top:3px}.person{display:flex;align-items:center;gap:10px}.person>span{width:35px;height:35px;border-radius:50%;background:#e9efff;color:var(--blue);display:grid;place-items:center;font-weight:700}.badge{display:inline-block;border-radius:20px;padding:5px 9px;font-size:12px}.badge.ok{background:#e5f7ef;color:#138456}.badge.warn{background:#fff2df;color:#b46a0c}.badge.muted{background:#edf0f5;color:#737b90}.actions{white-space:nowrap}.actions a,.actions button{margin-right:10px;background:none;border:0;color:var(--blue);padding:0;cursor:pointer}.actions button{color:#df4b55}.inline{display:inline}.alert{border-radius:10px;padding:12px 15px;margin-bottom:18px}.alert.success{background:#e7f8f0;color:#147d56}.alert.error{background:#feecee;color:#b73a48}.alert.pending{background:#fff5df;color:#93600e}.actions .approve-action{color:#138456}.form-card{max-width:800px}.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:18px}.form-card label,.login-card label,.filters label{font-size:13px;font-weight:600;display:grid;gap:7px}.form-card input,.login-card input,.filters input,.filters select{border:1px solid #dce1ea;border-radius:9px;padding:11px 12px;outline:0;background:#fff;color:var(--text)}.form-card input:focus,.login-card input:focus{border-color:var(--blue);box-shadow:0 0 0 3px #4f6ef714}.check{display:flex!important;margin:20px 0;align-items:center}.form-actions{display:flex;justify-content:flex-end;gap:10px;margin-top:20px}.filters{display:flex;align-items:end;gap:12px;margin-bottom:22px}.login-page{min-height:100vh;display:grid;place-items:center;background:linear-gradient(135deg,#eef2ff,#f8f5ff)}.login-card{width:min(420px,92vw);background:#fff;border:1px solid var(--line);border-radius:18px;padding:38px;box-shadow:0 18px 60px #26304718}.login-logo{margin:auto;width:64px;height:58px;font-size:17px;letter-spacing:-1.2px;border-radius:16px}.login-card h1{text-align:center;margin:18px 0 5px}.login-card>p{text-align:center;color:var(--muted);margin:0 0 25px}.login-card label{margin-bottom:16px}.back-link{display:block;text-align:center;margin-top:22px;font-size:13px}.face-card{max-width:850px}.camera-box{position:relative;background:#11182c;border-radius:15px;overflow:hidden;aspect-ratio:16/9;max-height:500px}.camera-box video,.camera-box canvas{position:absolute;width:100%;height:100%;object-fit:cover}.camera-message{position:absolute;bottom:15px;left:50%;transform:translateX(-50%);background:#111a;color:#fff;padding:8px 14px;border-radius:20px;font-size:13px;white-space:nowrap}.tips{display:flex;gap:18px;padding:15px;background:#f5f7fb;border-radius:10px;margin-top:15px;font-size:13px}.tips span{color:var(--muted)}
.kiosk-page{min-height:100vh;background:#f7f8fc}.kiosk-head{height:78px;background:#fff;border-bottom:1px solid var(--line);padding:0 6vw;display:flex;align-items:center;justify-content:space-between}.kiosk-head .brand{color:var(--navy)}.clock{text-align:center;display:grid}.clock strong{font-size:20px}.clock span{color:var(--muted);font-size:12px}.admin-link{color:var(--muted);border:1px solid var(--line);padding:8px 14px;border-radius:8px}.kiosk-main{display:grid;grid-template-columns:1fr 520px;align-items:center;gap:7vw;max-width:1200px;margin:auto;padding:50px 25px}.eyebrow{color:var(--blue);font-size:12px;font-weight:700;letter-spacing:.14em}.kiosk-copy h1{font-size:48px;line-height:1.12;color:var(--navy);margin:14px 0}.kiosk-copy em{font-style:normal;color:var(--blue)}.kiosk-copy p{color:var(--muted);font-size:17px;line-height:1.7;max-width:520px}.privacy{color:#667087;font-size:13px;margin-top:30px}.scanner-card{background:#fff;border:1px solid var(--line);border-radius:22px;padding:17px;box-shadow:0 25px 70px #26304718}.scanner{height:360px;background:#161e35;border-radius:15px;overflow:hidden;position:relative}.scanner video,.scanner canvas{position:absolute;width:100%;height:100%;object-fit:cover}.scanner video{transform:scaleX(-1)}.scanner canvas{transform:scaleX(-1)}.corner{position:absolute;width:48px;height:48px;border-color:#7085ff;border-style:solid;z-index:3}.tl{left:20px;top:20px;border-width:3px 0 0 3px}.tr{right:20px;top:20px;border-width:3px 3px 0 0}.bl{left:20px;bottom:20px;border-width:0 0 3px 3px}.br{right:20px;bottom:20px;border-width:0 3px 3px 0}.scan-line{position:absolute;z-index:2;left:8%;right:8%;height:2px;background:#7085ff;box-shadow:0 0 16px #7085ff;animation:scan 3s ease-in-out infinite}@keyframes scan{0%,100%{top:15%}50%{top:82%}}.scan-status{display:flex;align-items:center;justify-content:center;gap:12px;padding:17px}.scan-status div{display:grid}.scan-status small{color:var(--muted);margin-top:2px}.pulse{width:10px;height:10px;border-radius:50%;background:var(--green);box-shadow:0 0 0 6px #18a36b20}.result-modal{position:fixed;inset:0;background:#10162dbb;display:none;place-items:center;z-index:10}.result-modal.show{display:grid}.result-box{background:#fff;border-radius:20px;padding:35px;text-align:center;width:min(420px,90vw)}.result-icon{width:65px;height:65px;background:#e5f7ef;color:var(--green);font-size:35px;border-radius:50%;display:grid;place-items:center;margin:auto}.result-box h2{margin:18px 0 8px}.result-box p{color:var(--muted);line-height:1.5}.result-box>strong{font-size:35px;display:block;margin:14px}.result-box .btn{margin-top:10px;min-width:130px}@media(max-width:900px){.stats{grid-template-columns:1fr 1fr}.kiosk-main{grid-template-columns:1fr}.kiosk-copy{text-align:center}.kiosk-copy p{margin:auto}.kiosk-copy h1{font-size:38px}.scanner-card{max-width:560px;width:100%;margin:auto}.sidebar{width:75px;padding:25px 12px}.sidebar .brand{font-size:0}.sidebar nav span,.sidebar-foot{display:none}.sidebar nav a{justify-content:center}.main{margin-left:75px;width:calc(100% - 75px);padding:25px}}@media(max-width:600px){.stats,.form-grid{grid-template-columns:1fr}.topbar .btn{display:none}.main{padding:18px}.card{padding:16px}.tips{display:grid}.filters{flex-wrap:wrap}.kiosk-head{padding:0 15px}.kiosk-main{padding:30px 15px}.kiosk-copy h1{font-size:32px}.scanner{height:300px}}@media(max-width:600px){.kiosk-page{min-height:100svh}.kiosk-head{height:68px;padding:0 12px;gap:8px;position:sticky;top:0;z-index:8}.kiosk-head .brand{font-size:17px;gap:7px;flex-shrink:0}.kiosk-head .brand-mark{width:38px;height:35px}.kiosk-links{gap:6px!important}.logged-employee{display:none}.admin-link{padding:8px 10px;font-size:12px}.clock strong{font-size:17px}.clock span{font-size:10px}.kiosk-main{display:flex;flex-direction:column;gap:18px;padding:22px 12px 28px;max-width:600px}.kiosk-copy{width:100%;text-align:left}.kiosk-copy .eyebrow{font-size:11px}.kiosk-copy h1{font-size:27px;line-height:1.15;margin:8px 0}.kiosk-copy p{font-size:14px;line-height:1.5;margin:0}.privacy{font-size:11px;margin-top:10px}.scanner-card{width:calc(100% + 4px);margin:0 -2px;padding:10px;border-radius:18px;box-shadow:0 14px 35px #26304720}.scanner{height:clamp(340px,56svh,480px);border-radius:13px}.corner{width:58px;height:58px}.tl{left:16px;top:16px}.tr{right:16px;top:16px}.bl{left:16px;bottom:16px}.br{right:16px;bottom:16px}.scan-status{justify-content:flex-start;padding:16px 10px;min-height:72px}.scan-status strong{font-size:15px}.scan-status small{font-size:12px;line-height:1.35}.scanner-card>.btn{min-height:54px;border-radius:12px;font-size:16px}.result-box{width:calc(100% - 24px);padding:28px 20px}.result-box .btn{min-height:48px;width:100%}}@media(max-width:390px){.kiosk-head .brand{font-size:0}.kiosk-head .brand-mark{font-size:10px}.clock span{display:none}.admin-link{padding:8px}.kiosk-main{padding-top:16px}.kiosk-copy h1{font-size:24px}.scanner{height:54svh;min-height:330px}}@media(max-width:600px){.admin-body{display:block}.admin-body>.sidebar{position:sticky;inset:0 0 auto;width:100%;height:auto;min-height:66px;padding:9px 10px;display:flex;flex-direction:row;align-items:center;gap:8px;z-index:20;box-shadow:0 4px 18px #10162d26}.admin-body>.sidebar .brand{flex:0 0 auto;font-size:0;gap:0}.admin-body>.sidebar .brand-mark{width:40px;height:38px;font-size:10px}.admin-body>.sidebar nav{display:flex;align-items:center;gap:6px;margin:0;min-width:0;flex:1;overflow-x:auto;overscroll-behavior-x:contain;scroll-snap-type:x proximity;scrollbar-width:none;-webkit-overflow-scrolling:touch}.admin-body>.sidebar nav::-webkit-scrollbar{display:none}.admin-body>.sidebar nav a{flex:0 0 auto;min-width:48px;min-height:44px;padding:10px 12px;align-items:center;justify-content:center;gap:7px;scroll-snap-align:start;white-space:nowrap}.admin-body>.sidebar nav span{display:inline;font-size:13px}.admin-body>.sidebar .sidebar-foot{display:block;flex:0 0 auto;margin:0;padding:0;border:0}.admin-body>.sidebar .sidebar-foot small,.admin-body>.sidebar .sidebar-foot strong{display:none}.admin-body>.sidebar .sidebar-foot a{display:grid;place-items:center;min-height:44px;margin:0;padding:9px 11px;border-radius:9px;background:#ffffff12;color:#ffb0b0;font-size:13px;font-weight:700}.admin-body>.main{margin-left:0;width:100%;padding:18px}.admin-body>.main .topbar{margin-bottom:20px}}@media(max-width:420px){.admin-body>.sidebar{gap:6px;padding-inline:8px}.admin-body>.sidebar nav a{min-width:44px;padding-inline:10px}.admin-body>.sidebar nav span{display:none}.admin-body>.sidebar .sidebar-foot a{font-size:0;width:44px;padding:0}.admin-body>.sidebar .sidebar-foot a::before{content:"Keluar";font-size:11px}}@media(max-width:600px){.self-face-card .card-head{align-items:flex-start;gap:12px}.self-face-card .card-head .badge{flex:0 0 auto}.self-face-card .camera-box{aspect-ratio:3/4;max-height:62svh}.self-face-card .form-actions{display:grid;grid-template-columns:1fr;gap:10px}.self-face-card .form-actions .btn{min-height:50px;text-align:center}.self-face-card .form-actions .btn-primary{order:-1}}.face-approval-list{display:grid;gap:18px}.face-approval-item{border:1px solid var(--line);border-radius:15px;padding:20px}.face-approval-head{display:flex;align-items:center;justify-content:space-between;gap:16px}.face-comparison{display:grid;grid-template-columns:minmax(0,1fr) 36px minmax(0,1fr);align-items:center;gap:12px;margin:18px 0}.face-comparison figure{margin:0}.face-comparison figcaption{font-size:13px;font-weight:700;margin-bottom:8px}.face-comparison img,.face-placeholder{width:100%;height:260px;border-radius:13px;border:1px solid var(--line);object-fit:cover;background:#f1f3f8}.face-placeholder{display:grid;place-items:center;padding:20px;text-align:center;color:var(--muted);font-size:13px}.face-arrow{text-align:center;font-size:25px;color:var(--blue)}.face-approval-actions{display:flex;justify-content:flex-end;gap:10px}.face-approval-actions form{margin:0}.reject-face{color:#c53e49}@media(max-width:600px){.face-approval-item{padding:14px}.face-approval-head{align-items:flex-start}.face-comparison{grid-template-columns:1fr;gap:10px}.face-arrow{transform:rotate(90deg)}.face-comparison img,.face-placeholder{height:300px}.face-approval-actions{display:grid;grid-template-columns:1fr 1fr}.face-approval-actions .btn{width:100%;min-height:48px}}.person-avatar{display:block;flex:0 0 auto;width:44px;height:44px;border-radius:50%;overflow:hidden;border:2px solid #fff;box-shadow:0 0 0 2px #dce3f5;background:#edf0f6}.person-avatar img{display:block;width:100%;height:100%;object-fit:cover}.person-avatar:hover{box-shadow:0 0 0 3px #4f6ef744}.form-card select,.form-card textarea,.request-card input{border:1px solid #dce1ea;border-radius:9px;padding:11px 12px;outline:0;background:#fff;color:var(--text);font:inherit}.field-label{display:grid;gap:7px;margin-top:18px;font-size:13px;font-weight:600}.location-map{height:340px;border-radius:13px;margin:16px 0;border:1px solid var(--line);z-index:1}.request-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}.request-card{border:1px solid var(--line);border-radius:13px;padding:18px}.request-card>p{color:var(--muted);line-height:1.5}.request-actions{display:grid;grid-template-columns:1fr 1fr;gap:10px}.request-actions form{display:grid;gap:8px}.pending-summary{display:flex;align-items:center;justify-content:space-between;background:#fff9eb;border-color:#f5d48c}.pending-summary p{margin:5px 0 0;color:var(--muted)}@media(max-width:700px){.request-grid{grid-template-columns:1fr}.request-actions{grid-template-columns:1fr}.location-map{height:300px}}.shift-form{margin-bottom:14px}.shift-checks{display:flex;align-items:center;gap:18px;margin-bottom:24px}.shift-checks label{display:flex;align-items:center;gap:7px}.bulk-shift-form{align-items:end}.bulk-shift-form label,.shift-form label{display:grid;gap:7px;font-size:13px;font-weight:600}.bulk-shift-form input,.bulk-shift-form select,.shift-form input,.form-grid select{border:1px solid #dce1ea;border-radius:9px;padding:11px 12px;background:#fff;color:var(--text);font:inherit}.delete-link{border:0;background:none;color:#df4b55;cursor:pointer}.shift-calendar-list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.shift-day{display:flex;align-items:center;gap:14px;border:1px solid var(--line);border-radius:12px;padding:13px}.shift-day.today{border-color:var(--blue);background:#f4f6ff}.shift-date{width:45px;text-align:center;display:grid}.shift-date strong{font-size:22px}.shift-date span,.shift-day>div:last-child span{font-size:12px;color:var(--muted);display:block;margin-top:3px}.shift-now{display:block;margin-top:8px;color:var(--blue);font-weight:700}@media(max-width:600px){.shift-checks{align-items:flex-start;flex-direction:column}.shift-calendar-list{grid-template-columns:1fr}}@media(min-width:601px){.sidebar nav{overflow-y:auto;padding-right:3px;scrollbar-width:thin}}
