:root{--stage:#080f1f;--teal:#1d3f78;--ink:#1d2b33;--muted:#8a949a;--line:#d3d8db;--amber:#fba526;--red:#f4503f;--yellow:#f2b705;--green:#2f9e44;--font:"Kantumruy Pro", "Noto Sans Khmer", "Khmer OS Battambang", system-ui, sans-serif}*,:before,:after{box-sizing:border-box}html,body{height:100%;margin:0}body{background:var(--stage);color:var(--ink);font:14px var(--font);-webkit-font-smoothing:antialiased;-webkit-tap-highlight-color:transparent}button,input{font:inherit;color:inherit}button{cursor:pointer;background:0 0;border:0;padding:0}button:disabled{opacity:.6;cursor:default}button:focus-visible,input:focus-visible{outline-offset:2px;outline:3px solid #fff}.stage{place-items:center;height:100dvh;display:grid}.screen{background:var(--teal);flex-direction:column;width:100%;max-width:430px;height:100%;display:flex;position:relative;overflow:hidden}@media (min-width:520px){.screen{border-radius:40px;height:min(900px,100dvh - 32px);box-shadow:0 0 0 2px #26323a,0 40px 90px #0000008c}}.content{flex-direction:column;flex:1;min-height:0;padding:16px 14px 0;display:flex;overflow:hidden auto}.content,.sheet{scrollbar-width:none;-ms-overflow-style:none}.content::-webkit-scrollbar{display:none}.sheet::-webkit-scrollbar{display:none}.center{color:#fff;flex:1;place-items:center;display:grid}.header{align-items:center;gap:11px;display:flex}.avatar{background:#dfe9f0;border:2px solid #fff;border-radius:50%;flex:none;width:46px;height:46px;overflow:hidden}.avatar svg{width:100%;height:100%;display:block}.who{flex:1;min-width:0;line-height:1.25}.hello{color:#f7a823;font-size:15px;font-weight:600}.name{color:#fff;letter-spacing:.02em;text-transform:uppercase;white-space:nowrap;text-overflow:ellipsis;font-size:15px;overflow:hidden}.icon-btn{border-radius:50%;place-items:center;width:34px;height:34px;display:grid}.icon-btn.spin svg{animation:.7s ease-out spin}@keyframes spin{to{transform:rotate(360deg)}}.card{background:#fff;border-radius:18px;flex:none;margin-top:11px}.date-row{text-align:center;padding:14px 20px 12px;font-size:14.5px;font-weight:500}.rule{background:var(--line);height:1px;margin-inline:6px}.info{text-align:center;grid-template-columns:1.5fr .95fr 1.15fr .8fr;padding:11px 6px 14px;display:grid}.info>div{min-width:0}.k{color:var(--muted);font-size:13px;line-height:1.5}.v{overflow-wrap:anywhere;font-size:14px;font-weight:500;line-height:1.6}.clock-row{align-items:center;gap:18px;padding:16px 14px 18px;display:flex}.ring{flex:none;width:125px;height:125px;position:relative}.ring svg{width:100%;height:100%;display:block}.ring .inside{flex-direction:column;justify-content:center;align-items:center;gap:4px;display:flex;position:absolute;inset:0}.l1{font-size:15px;font-weight:500}.l2{font-variant-numeric:tabular-nums;font-size:13.5px;font-weight:700}.scans{flex-direction:column;gap:10px;min-width:0;display:flex}.scan-label{font-size:15px;font-weight:500}.scan-time{font-variant-numeric:tabular-nums;align-items:center;gap:9px;margin:2px 0 0 10px;font-size:15px;font-weight:500;display:flex}.scan-time.in{color:var(--yellow)}.scan-time.out{color:var(--green)}.scan-time small{color:var(--muted);font-size:11px;display:block}.actions{flex:none;grid-template-columns:repeat(3,1fr);gap:11px;margin-top:14px;display:grid}.action{text-align:center;background:#fff;border-radius:16px;flex-direction:column;align-items:center;gap:13px;padding:18px 6px 14px;font-size:13.5px;font-weight:500;line-height:1.4;transition:transform .12s;display:flex}.action:active{transform:scale(.97)}.disc{border-radius:50%;place-items:center;width:48px;height:48px;display:grid}.d-pink{background:#f9e2fb}.d-blue{background:#e1f3fd}.d-rose{background:#fbe8e6}.scan-zone{flex:1;place-items:center;min-height:170px;padding:20px 0;display:grid}.halo{background:radial-gradient(circle,#fba5268c 0%,#fba52647 70%,#fba5261a 100%);border-radius:50%;place-items:center;width:132px;height:132px;animation:2.6s ease-in-out infinite halo;display:grid}@keyframes halo{0%,to{transform:scale(1)}50%{transform:scale(1.07)}}.scan-btn{background:var(--amber);color:#111;border-radius:50%;flex-direction:column;justify-content:center;align-items:center;gap:4px;width:113px;height:113px;font-size:14px;font-weight:500;transition:transform .12s;display:flex}.scan-btn:active{transform:scale(.94)}.footer{text-align:center;color:#ffffffe0;padding:0 0 20px;font-size:12.5px;line-height:1.5}.toast{color:#fff;opacity:0;pointer-events:none;white-space:nowrap;z-index:30;background:#0a141ceb;border-radius:14px;padding:10px 16px;font-size:13px;transition:opacity .2s,transform .2s;position:absolute;bottom:64px;left:50%;transform:translate(-50%,12px)}.toast.show{opacity:1;transform:translate(-50%)}.login-wrap{isolation:isolate;flex-direction:column;flex:1;justify-content:center;gap:26px;min-height:0;padding-bottom:12px;display:flex;position:relative}.orb{z-index:-1;pointer-events:none;border-radius:50%;position:absolute}.orb-a{background:radial-gradient(circle,#fba52673,#0000 70%);width:280px;height:280px;top:-90px;right:-110px}.orb-b{background:radial-gradient(circle,#78c8eb59,#0000 70%);width:320px;height:320px;bottom:-120px;left:-140px}.orb-c{border:1px solid #ffffff26;width:160px;height:160px;top:38%;left:-60px;box-shadow:0 0 0 28px #ffffff0a,0 0 0 58px #ffffff08}.brand{text-align:center;color:#fff}.brand-halo{background:radial-gradient(circle,#fba5268c 0%,#fba52647 70%,#fba52614 100%);border-radius:50%;place-items:center;width:112px;height:112px;margin:0 auto 14px;animation:2.6s ease-in-out infinite halo;display:grid}.brand-badge{background:var(--amber);border-radius:50%;place-items:center;width:84px;height:84px;display:grid;box-shadow:0 8px 22px #00000040}.brand h1{letter-spacing:.02em;margin:0;font-size:24px;font-weight:700}.brand p{letter-spacing:.24em;text-transform:uppercase;color:#f7c26a;margin:4px 0 0;font-size:13px}.login{background:#fffffff7;border-radius:22px;flex-direction:column;gap:12px;padding:22px 18px 20px;display:flex;box-shadow:0 18px 40px #06182459}.login-title{text-align:center;font-size:17px;font-weight:700}.login-sub{color:var(--muted);text-align:center;margin-top:-8px;font-size:12.5px}.input{border:1.5px solid var(--line);color:var(--muted);background:#fff;border-radius:12px;align-items:center;gap:10px;padding:0 12px;transition:border-color .15s,box-shadow .15s;display:flex}.input:focus-within{border-color:var(--teal);color:var(--teal);box-shadow:0 0 0 3px #1d3f782e}.input input{min-width:0;color:var(--ink);background:0 0;border:0;outline:0;flex:1;padding:13px 0}.input input:disabled{opacity:.6}.eye{color:inherit;place-items:center;display:grid}.login .btn.amber{background:var(--amber);color:#111;box-shadow:0 6px 16px #fba52666}.field{border:1px solid var(--line);background:#fff;border-radius:10px;width:100%;padding:11px 12px}.btn{background:var(--teal);color:#fff;border-radius:12px;width:100%;padding:12px;font-weight:600}.btn.green{background:#22a06b}.btn.orange{background:#e8772e}.btn.ghost{color:var(--ink);background:#eef2f5}.msg{color:var(--red);white-space:pre-wrap;text-align:center;font-size:13px}.msg.ok{color:var(--green)}.overlay{-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);z-index:20;background:#08121a8c;align-items:flex-end;display:flex;position:absolute;inset:0}.sheet{background:#fff;border-radius:22px 22px 0 0;flex-direction:column;gap:10px;width:100%;max-height:90%;padding:18px 18px 22px;display:flex;overflow-y:auto}.sheet-head{justify-content:space-between;align-items:center;display:flex}.sheet-head h2{margin:0;font-size:17px}.sheet-head button{background:#eef2f5;border-radius:50%;width:30px;height:30px}.row{border-bottom:1px solid #eef1f3;justify-content:space-between;gap:14px;padding:5px 0;display:flex}.row span:first-child{color:var(--muted);flex:none}.row span:last-child{text-align:right;overflow-wrap:anywhere;font-weight:600}.btns{gap:10px;margin-top:6px;display:flex}.note{color:#2563eb;background:#e8f1ff;border-radius:10px;padding:9px 11px;font-size:13px}.note.ok{color:#1b8a5a;background:#e6f7ee}.note.fail{color:#d64545;background:#fdeaea}.link{color:var(--teal);align-self:center;font-size:13px;text-decoration:underline}.full{z-index:25;background:#0b141a;flex-direction:column;display:flex;position:absolute;inset:0}.full-bar{background:#fff;align-items:center;gap:8px;padding:10px;display:flex}.full-bar .field{flex:1;padding:8px 10px}.full-bar .btn{width:auto;padding:8px 14px}.full-status{color:var(--muted);background:#fff;padding:0 12px 8px;font-size:12px}.map{flex:1;min-height:0}.full-foot{background:#fff;gap:10px;padding:10px;display:flex}.cam{flex:1;place-items:center;min-height:0;display:grid;position:relative;overflow:hidden}.cam video{object-fit:cover;width:100%;height:100%;position:absolute;inset:0}.frame{border:4px solid #00c853;border-radius:18px;width:240px;height:240px;position:relative;box-shadow:0 0 0 999px #00000073}.cam-msg{text-align:center;color:#fff;padding:0 16px;font-size:13px;position:absolute;bottom:16px;left:0;right:0}@media (prefers-reduced-motion:reduce){.halo,.icon-btn.spin svg{animation:none}.toast,.action,.scan-btn{transition:none}}@media (max-height:760px){.login-wrap{gap:14px}.brand-halo{width:84px;height:84px;margin-bottom:8px}.brand-badge{width:62px;height:62px}.brand-badge svg{width:34px;height:34px}.brand h1{font-size:20px}.login{gap:9px;padding:16px}}.otp-screen{z-index:15;isolation:isolate;background:linear-gradient(160deg, #2a5398 0%, var(--teal) 55%, #122a52 100%);flex-direction:column;animation:.25s ease-out otp-in;display:flex;position:absolute;inset:0;overflow:hidden}@keyframes otp-in{0%{opacity:0;transform:translateY(24px)}to{opacity:1;transform:none}}.otp-back{color:#fff;background:#ffffff24;border-radius:50%;place-items:center;width:40px;height:40px;display:grid;position:absolute;top:16px;left:12px}.otp-body{color:#fff;text-align:center;flex-direction:column;flex:1;justify-content:center;align-items:center;gap:14px;padding:0 28px;display:flex}.otp-body h1{margin:6px 0 0;font-size:22px}.otp-info{color:#cfe3ee;white-space:pre-line;margin:0;font-size:13.5px;line-height:1.6}.otp-input{text-align:center;letter-spacing:.5em;width:100%;color:var(--ink);background:#fff;border:0;border-radius:16px;outline:0;margin-top:8px;padding:16px;font-size:28px;font-weight:700;box-shadow:0 10px 28px #0618244d}.otp-input:focus{box-shadow:0 0 0 4px #fba5268c,0 10px 28px #0618244d}.otp-body .btn{margin-top:4px}.otp-resend{color:#f7c26a;font-size:13.5px;text-decoration:underline}.msg.light{color:#ffd2cc}@media (prefers-reduced-motion:reduce){.otp-screen{animation:none}}.otp-boxes{justify-content:center;gap:8px;width:100%;margin-top:8px;display:flex}.otp-box{aspect-ratio:1/1.2;text-align:center;width:100%;min-width:0;max-width:48px;color:var(--ink);caret-color:#0000;background:#fff;border:2px solid #0000;border-radius:12px;outline:0;font-size:24px;font-weight:700;box-shadow:0 8px 20px #06182440}.otp-box:focus{border-color:var(--amber);box-shadow:0 0 0 3px #fba52673,0 8px 20px #06182440}.otp-box:disabled{opacity:.7}.otp-timer{font-variant-numeric:tabular-nums;background:#ffffff24;border-radius:999px;padding:5px 14px;font-size:13px;font-weight:600}.otp-timer.warn{color:#ffd58a;background:#fba5264d}.otp-timer.expired{color:#ffd2cc;background:#f4503f59}.otp-resend.pulse{color:#111;background:var(--amber);border-radius:999px;padding:8px 18px;font-weight:600;text-decoration:none}.overlay.center-modal{justify-content:center;align-items:center;padding:20px}.center-modal .sheet{border-radius:22px;max-width:360px;animation:.18s ease-out pop;box-shadow:0 24px 60px #00000059}@keyframes pop{0%{opacity:0;transform:scale(.94)}to{opacity:1;transform:none}}@media (prefers-reduced-motion:reduce){.center-modal .sheet{animation:none}}.admin-link{z-index:10;color:#fff;white-space:nowrap;background:#ffffff24;border:1px solid #ffffff40;border-radius:999px;padding:8px 18px;font-size:13px;font-weight:600;text-decoration:none;position:absolute;bottom:64px;left:50%;transform:translate(-50%)}.admin-link:hover{background:#ffffff3d}.admin{max-width:960px;min-height:100dvh;color:var(--ink);background:#f4f6fa;margin:0 auto;padding:24px 16px 40px}.admin-head{justify-content:space-between;align-items:center;gap:12px;margin-bottom:16px;display:flex}.admin-head h1,.admin h1{margin:0;font-size:22px}.admin-head .btn{width:auto;margin-left:10px;padding:8px 14px}.admin-me{color:var(--muted);font-size:13px}.admin-form{background:#fff;border-radius:14px;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:10px;margin-bottom:12px;padding:14px;display:grid}.admin-form .btn{width:auto}.admin-table{background:#fff;border-radius:14px;margin-top:12px;overflow-x:auto}.admin table{border-collapse:collapse;width:100%;font-size:13.5px}.admin th,.admin td{text-align:left;white-space:nowrap;border-bottom:1px solid #eef1f3;padding:10px 12px}.admin th{color:var(--muted);font-weight:600}.admin .empty{text-align:center;color:var(--muted)}.admin select{border:1px solid var(--line);background:#fff;border-radius:8px;padding:5px 8px}.pill{color:#d64545;background:#fdeaea;border-radius:999px;padding:4px 12px;font-size:12.5px;font-weight:600}.pill.on{color:#1b8a5a;background:#e6f7ee}.admin-actions button{color:var(--teal);margin-right:8px;font-size:13px;text-decoration:underline}.admin-actions .danger{color:var(--red)}.status{flex:none;align-items:center;gap:6px;padding:8px 14px 14px;display:flex}.chip{color:#fff;background:#ffffff1f;border-radius:999px;flex:1 1 0;align-items:center;gap:6px;min-width:0;padding:5px 10px;font-size:11.5px;display:flex}.chip b{flex:none;font-weight:700}.chip span{text-overflow:ellipsis;white-space:nowrap;opacity:.9;min-width:0;overflow:hidden}.chip i{background:#4ade80;border-radius:50%;flex:none;width:8px;height:8px;box-shadow:0 0 0 3px #4ade8040}.chip.off i{background:#f87171;box-shadow:0 0 0 3px #f8717140}.step{color:var(--teal);letter-spacing:.06em;text-transform:uppercase;background:#e1f3fd;border-radius:999px;align-self:center;padding:3px 12px;font-size:11.5px;font-weight:700}.chip.dim{opacity:.55}.screen.theme-gdce{--amber:#22c55e;background:linear-gradient(160deg,#168a78 0%,#0f6b5e 50%,#0a4a43 100%)}.theme-gdce .orb-a{background:radial-gradient(circle,#4ade8066,#0000 70%)}.theme-gdce .orb-b{background:radial-gradient(circle,#5eead44d,#0000 70%)}.theme-gdce .brand-halo{background:radial-gradient(circle,#4ade8080 0%,#4ade8040 70%,#4ade8014 100%)}.theme-gdce .brand-badge{background:#fff}.theme-gdce .brand p{color:#9ff0c8}.theme-gdce .step{color:#166534;background:#dcfce7}.theme-gdce .input:focus-within{color:#0f6b5e;border-color:#0f6b5e;box-shadow:0 0 0 3px #0f6b5e2e}.theme-gdce .login .btn.amber,.theme-gdce .otp-body .btn.amber{color:#05260f;background:#22c55e;box-shadow:0 6px 16px #22c55e66}.theme-gdce .otp-screen{background:linear-gradient(160deg,#168a78 0%,#0f6b5e 55%,#0a4a43 100%)}.theme-gdce .otp-box:focus{border-color:#22c55e;box-shadow:0 0 0 3px #22c55e73,0 8px 20px #06182440}.theme-gdce .otp-resend{color:#9ff0c8}.theme-gdce .otp-resend.pulse{color:#05260f;background:#22c55e}.theme-gdce .otp-timer.warn{color:#fde68a;background:#facc154d}.home-link{color:#fff;background:#ffffff1f;border-radius:999px;flex:none;align-items:center;padding:5px 10px;font-size:11.5px;font-weight:600;text-decoration:none;display:flex}.web,.web-splash{min-height:100dvh;color:var(--ink);background:#f4f6fa}.web-splash{color:var(--muted);place-items:center;display:grid}.admin{background:0 0;min-height:0}.admin-back{color:var(--teal);margin-bottom:4px;font-size:13px;font-weight:600;text-decoration:none;display:inline-block}.web-login{background:#f4f6fa;grid-template-columns:1.1fr 1fr;min-height:100dvh;display:grid}.web-hero{isolation:isolate;background:linear-gradient(160deg, #2a5398 0%, var(--teal) 55%, #122a52 100%);color:#fff;flex-direction:column;justify-content:center;align-items:center;gap:28px;padding:48px 32px;display:flex;position:relative;overflow:hidden}.hero-points{color:#d6e4f7;flex-direction:column;gap:10px;margin:0;padding:0;font-size:14px;list-style:none;display:flex}.hero-points li:before{content:"";background:var(--amber);border-radius:50%;width:8px;height:8px;margin-right:10px;display:inline-block}.web-login-panel{place-items:center;padding:32px 20px;display:grid}.web-login-card{background:#fff;border-radius:20px;flex-direction:column;gap:12px;width:min(400px,100%);padding:28px 24px;display:flex;box-shadow:0 18px 50px #122a5226}@media (max-width:820px){.web-login{grid-template-rows:auto 1fr;grid-template-columns:1fr}.web-hero{gap:14px;padding:28px 20px}.hero-points{display:none}}.web-nav{background:#fff;border-bottom:1px solid #e6eaee;justify-content:space-between;align-items:center;gap:12px;padding:14px 28px;display:flex}.web-brand{align-items:center;gap:10px;font-size:16px;font-weight:700;display:flex}.web-logo{background:var(--amber);border-radius:50%;width:26px;height:26px;box-shadow:0 0 0 5px #fba52640}.web-nav-right{align-items:center;gap:10px;display:flex}.web-nav-right .btn{width:auto;padding:8px 14px}.chip-light{background:#eef2f7;border-radius:999px;align-items:center;gap:8px;padding:6px 12px;font-size:13px;display:flex}.chip-light i{background:#22c55e;border-radius:50%;width:8px;height:8px;box-shadow:0 0 0 3px #22c55e40}.role-tag{color:var(--teal);text-transform:uppercase;background:#e1f3fd;border-radius:999px;padding:3px 10px;font-size:12px;font-weight:700}.web-main{max-width:960px;margin:0 auto;padding:40px 24px}.web-main h1{margin:0 0 4px;font-size:28px}.web-main>p{color:var(--muted);margin:0 0 24px}.web-cards{grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:18px;display:grid}.web-card{color:inherit;background:#fff;border-radius:18px;flex-direction:column;gap:8px;padding:22px;text-decoration:none;transition:transform .15s,box-shadow .15s;display:flex;box-shadow:0 6px 24px #122a5214}.web-card:hover{transform:translateY(-3px);box-shadow:0 12px 32px #122a5224}.web-card h2{margin:6px 0 0;font-size:18px}.web-card p{color:var(--muted);margin:0;font-size:13.5px;line-height:1.5}.web-card-icon{border-radius:16px;place-items:center;width:56px;height:56px;display:grid}.web-card-icon.amber{background:var(--amber)}.web-card-icon.blue{background:#e1f3fd}@media (max-width:600px){.web-nav{padding:12px 16px}.web-nav .chip-light{display:none}}.modal-back{z-index:50;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);background:#0812248c;place-items:center;padding:20px;display:grid;position:fixed;inset:0}.modal-card{width:min(400px,100%);color:var(--ink);background:#fff;border-radius:18px;flex-direction:column;gap:12px;padding:22px;display:flex;box-shadow:0 24px 60px #00000059}.modal-card h2{margin:0 0 4px;font-size:17px}.modal-card .btns .btn{width:100%}.show-pw{color:var(--muted);cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:8px;font-size:13px;display:flex}.show-pw input{width:16px;height:16px;accent-color:var(--teal);cursor:pointer}.screen{padding:env(safe-area-inset-top,0px) env(safe-area-inset-right,0px) env(safe-area-inset-bottom,0px) env(safe-area-inset-left,0px)}.overlay .sheet{padding-bottom:calc(22px + env(safe-area-inset-bottom,0px))}.overlay.center-modal .sheet{padding-bottom:22px}.full{padding:env(safe-area-inset-top,0px) env(safe-area-inset-right,0px) 0 env(safe-area-inset-left,0px)}.full-foot{padding-bottom:calc(10px + env(safe-area-inset-bottom,0px))}.otp-screen{padding:env(safe-area-inset-top,0px) env(safe-area-inset-right,0px) env(safe-area-inset-bottom,0px) env(safe-area-inset-left,0px)}.otp-back{top:calc(16px + env(safe-area-inset-top,0px))}.admin-link,.toast{bottom:calc(64px + env(safe-area-inset-bottom,0px))}.modal-back{padding:calc(20px + env(safe-area-inset-top,0px)) calc(20px + env(safe-area-inset-right,0px)) calc(20px + env(safe-area-inset-bottom,0px)) calc(20px + env(safe-area-inset-left,0px))}.web-nav{padding-top:calc(14px + env(safe-area-inset-top,0px));padding-left:calc(28px + env(safe-area-inset-left,0px));padding-right:calc(28px + env(safe-area-inset-right,0px))}.web-hero{padding-top:calc(48px + env(safe-area-inset-top,0px))}.web-login-panel,.admin,.web-main{padding-bottom:calc(32px + env(safe-area-inset-bottom,0px))}.admin{padding-top:calc(24px + env(safe-area-inset-top,0px))}@media (max-width:820px){.web-hero{padding-top:calc(28px + env(safe-area-inset-top,0px))}}@media (max-width:600px){.web-nav{padding-left:calc(16px + env(safe-area-inset-left,0px));padding-right:calc(16px + env(safe-area-inset-right,0px))}}.status{padding-bottom:32px}.admin-link,.toast{bottom:calc(84px + env(safe-area-inset-bottom,0px))}.screen.has-admin .content{padding-bottom:60px}.modal-card p{color:var(--muted,#5b6677);margin:0;font-size:14px}
