@font-face{font-family:Be Vietnam Pro;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/be-vietnam-pro-vietnamese-400-normal-CRcqvyg1.woff2) format("woff2"),url(/assets/be-vietnam-pro-vietnamese-400-normal-BuGn0gnm.woff) format("woff")}@font-face{font-family:Be Vietnam Pro;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/be-vietnam-pro-vietnamese-500-normal-DREgrEoJ.woff2) format("woff2"),url(/assets/be-vietnam-pro-vietnamese-500-normal-CfdwVo8-.woff) format("woff")}@font-face{font-family:Be Vietnam Pro;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/be-vietnam-pro-vietnamese-600-normal-nyU-ZL2p.woff2) format("woff2"),url(/assets/be-vietnam-pro-vietnamese-600-normal-DkpCIyan.woff) format("woff")}@font-face{font-family:Be Vietnam Pro;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/be-vietnam-pro-vietnamese-700-normal-Csr0PCuG.woff2) format("woff2"),url(/assets/be-vietnam-pro-vietnamese-700-normal-By_5yT39.woff) format("woff")}@font-face{font-family:Be Vietnam Pro;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/be-vietnam-pro-latin-400-normal-PpnXBOrz.woff2) format("woff2"),url(/assets/be-vietnam-pro-latin-400-normal-bXgqVju9.woff) format("woff")}@font-face{font-family:Be Vietnam Pro;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/be-vietnam-pro-latin-500-normal-B6LVzGNe.woff2) format("woff2"),url(/assets/be-vietnam-pro-latin-500-normal-BJkVuMHw.woff) format("woff")}@font-face{font-family:Be Vietnam Pro;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/be-vietnam-pro-latin-600-normal-BZDkUTrt.woff2) format("woff2"),url(/assets/be-vietnam-pro-latin-600-normal-5IO4e7bK.woff) format("woff")}@font-face{font-family:Be Vietnam Pro;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/be-vietnam-pro-latin-700-normal-DlW1Zbsh.woff2) format("woff2"),url(/assets/be-vietnam-pro-latin-700-normal-C2EtzaOi.woff) format("woff")}@font-face{font-family:Playfair Display;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/playfair-display-vietnamese-700-normal-CaKJSIny.woff2) format("woff2"),url(/assets/playfair-display-vietnamese-700-normal-Cr1rw0mr.woff) format("woff")}@font-face{font-family:Playfair Display;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/playfair-display-latin-700-normal-CuDiGg7c.woff2) format("woff2"),url(/assets/playfair-display-latin-700-normal-Bc_1Q1cG.woff) format("woff")}:root{--brand: #1f4d35;--brand-dark: #173d2a;--brand-mid: #2e5e44;--brand-soft: #e8f1ea;--brand-line: #b9d3c1;--ink: #1c1f1a;--ink-2: #4a4e46;--ink-3: #5e6259;--bg: #f6f1e7;--card: #ffffff;--line: #e6ddcc;--line-2: #d9d2c3;--line-soft: #f0eadd;--head: #faf7f0;--warn: #7a4e0e;--warn-bg: #fbefd9;--warn-dot: #d9962f;--danger: #8e2d1b;--danger-bg: #fbe6e1;--danger-dot: #c0432b;--info: #2b4c7a;--info-bg: #e6eef7;--ok: #1e5e37;--ok-bg: #e8f1ea;--muted-bg: #efede7;--gold: #f3d9a4;--font: "Be Vietnam Pro", system-ui, -apple-system, "Segoe UI", sans-serif;--serif: "Playfair Display", Georgia, serif}*{box-sizing:border-box}html,body,#root{height:100%}body{margin:0;background:var(--bg);color:var(--ink);font:14px/1.45 var(--font);-webkit-font-smoothing:antialiased;-webkit-tap-highlight-color:transparent}a{color:var(--brand)}h1,h2,h3,p{margin:0}button,input,select,textarea{font:inherit;color:inherit}.serif{font-family:var(--serif)}.num{font-variant-numeric:tabular-nums}.muted{color:var(--ink-3)}.small{font-size:12px}.ic{fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round;flex-shrink:0}.card{background:var(--card);border:1px solid var(--line);border-radius:16px;padding:16px 18px}.card h2{font-size:18px;font-weight:700}.row{display:flex;gap:10px;align-items:center}.wrap{flex-wrap:wrap}.between{justify-content:space-between}.stack{display:flex;flex-direction:column;gap:14px}.grow{flex:1;min-width:0}.btn{height:44px;padding:0 16px;border-radius:10px;border:1px solid var(--line-2);background:var(--card);display:inline-flex;align-items:center;justify-content:center;gap:8px;font-weight:600;cursor:pointer;text-decoration:none;color:var(--ink);white-space:nowrap}.btn:hover{border-color:var(--brand-line)}.btn:disabled{opacity:.55;cursor:default}.btn.primary{background:var(--brand);border-color:var(--brand);color:#fff}.btn.primary:hover{background:var(--brand-dark)}.btn.danger{color:var(--danger);border-color:#f0d0c7}.btn.ghost{border-color:transparent;background:transparent}.btn.sm{height:36px;padding:0 12px;font-size:13px;border-radius:9px}.btn.outline-brand{border-color:var(--brand-line);color:var(--brand)}.btn.big{height:58px;border-radius:14px;font-size:17px;font-weight:700;width:100%}.field{display:flex;flex-direction:column;gap:6px;font-size:13px;color:var(--ink-2);font-weight:500}.input,.select,.textarea{height:42px;border:1px solid var(--line-2);border-radius:10px;padding:0 12px;background:#fff;font-size:15px;color:var(--ink);width:100%}.textarea{height:auto;min-height:84px;padding:10px 12px;resize:vertical}.input:focus,.select:focus,.textarea:focus,.btn:focus-visible{outline:2px solid var(--brand-line);outline-offset:1px;border-color:var(--brand)}.grid-2{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:12px}.pill{display:inline-block;padding:5px 10px;border-radius:999px;font-size:12px;font-weight:600;white-space:nowrap}.pill.ok{background:var(--ok-bg);color:var(--ok)}.pill.warn{background:var(--warn-bg);color:var(--warn)}.pill.danger{background:var(--danger-bg);color:var(--danger)}.pill.info{background:var(--info-bg);color:var(--info)}.pill.muted{background:var(--muted-bg);color:var(--ink-2)}.notice{border-radius:12px;padding:12px 14px;font-size:13.5px;display:flex;gap:10px;align-items:flex-start}.notice.warn{background:var(--warn-bg);color:var(--warn)}.notice.danger{background:var(--danger-bg);color:var(--danger)}.notice.ok{background:var(--ok-bg);color:var(--ok)}.notice.info{background:var(--info-bg);color:var(--info)}.table-wrap{overflow-x:auto}table.table{width:100%;border-collapse:collapse;font-size:14px}.table th{background:var(--head);color:var(--ink-2);text-align:left;padding:10px 12px;font-weight:600;white-space:nowrap}.table td{padding:11px 12px;border-top:1px solid var(--line-soft);vertical-align:top}.table tr.clickable{cursor:pointer}.table tr.clickable:hover td{background:#fcfaf5}.empty{padding:28px;text-align:center;color:var(--ink-3)}.spinner{width:22px;height:22px;border:3px solid var(--brand-soft);border-top-color:var(--brand);border-radius:50%;animation:spin .9s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.modal-back{position:fixed;top:0;right:0;bottom:0;left:0;background:#1c1f1a73;display:flex;align-items:center;justify-content:center;padding:16px;z-index:50}.modal{background:#fff;border-radius:18px;width:100%;max-width:520px;max-height:calc(100vh - 32px);overflow:auto;padding:20px 22px;display:flex;flex-direction:column;gap:14px}.modal h3{font-size:19px;font-weight:700}.tabs{display:flex;gap:6px;flex-wrap:wrap}.tab{height:36px;padding:0 14px;border-radius:999px;border:1px solid var(--line-2);background:#fff;font-weight:600;font-size:13px;cursor:pointer}.tab.active{background:var(--brand);border-color:var(--brand);color:#fff}.toast{position:fixed;left:50%;bottom:96px;transform:translate(-50%);background:var(--ink);color:#fff;padding:10px 16px;border-radius:12px;z-index:60;font-weight:500;max-width:calc(100vw - 32px)}.login{min-height:100%;display:flex;align-items:center;justify-content:center;padding:24px 16px}.login .card{width:100%;max-width:380px;padding:28px 24px;display:flex;flex-direction:column;gap:16px}.brand-mark{display:flex;flex-direction:column;align-items:center;gap:2px;color:var(--brand)}.brand-mark .name{font-family:var(--serif);font-size:30px;font-weight:700}.brand-mark .sub{font-size:11px;letter-spacing:2px;color:var(--ink-3);text-transform:uppercase}.m-app{min-height:100%;display:flex;flex-direction:column;max-width:560px;margin:0 auto;background:var(--bg)}.m-header{background:var(--brand);color:#fff;padding:16px 18px;padding-top:max(16px,env(safe-area-inset-top));display:flex;align-items:center;justify-content:space-between;position:sticky;top:0;z-index:10}.m-header .logo{display:flex;align-items:center;gap:10px;font-family:var(--serif);font-size:22px;font-weight:700}.m-main{flex:1;padding:18px 16px 100px;display:flex;flex-direction:column;gap:14px}.m-title{font-family:var(--serif);font-size:24px;font-weight:700}.m-nav{position:fixed;bottom:0;left:0;right:0;background:#fff;border-top:1px solid var(--line);display:grid;grid-template-columns:repeat(5,minmax(0,1fr));padding:6px 4px max(10px,env(safe-area-inset-bottom));z-index:20;max-width:560px;margin:0 auto}.m-nav a{display:flex;flex-direction:column;align-items:center;gap:4px;min-height:52px;justify-content:center;text-decoration:none;font-size:11px;font-weight:600;border-radius:10px;color:var(--ink-3)}.m-nav a.active{color:var(--brand);background:var(--brand-soft)}.shift-card{display:flex;align-items:center;gap:14px}.icon-tile{width:44px;height:44px;border-radius:12px;display:flex;align-items:center;justify-content:center;flex-shrink:0}.label-up{font-size:12px;color:var(--ink-3);text-transform:uppercase;letter-spacing:.6px;font-weight:600}.map{height:130px;position:relative;background:#eef0e8;overflow:hidden;border-radius:16px 16px 0 0}.map .road{position:absolute;background:#fff}.map .ring{position:absolute;left:50%;top:50%;width:112px;height:112px;margin:-56px 0 0 -56px;border-radius:56px;background:#1f4d3524;border:1.5px solid rgba(31,77,53,.45)}.map .pin{position:absolute;left:50%;top:50%;width:34px;height:34px;margin:-30px 0 0 -17px;border-radius:17px 17px 17px 4px;transform:rotate(-45deg);background:var(--brand)}.map .tag{position:absolute;left:12px;bottom:10px;background:#fff;font-size:12px;font-weight:600;padding:4px 8px;border-radius:8px;color:var(--brand)}.punch-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}.punch-grid>div+div{border-left:1px solid var(--line);padding-left:14px}.punch-grid .t{font-size:20px;font-weight:700;font-variant-numeric:tabular-nums}.scan-screen{position:fixed;top:0;right:0;bottom:0;left:0;background:#0f1410;color:#fff;z-index:40;display:flex;flex-direction:column}.scan-screen video{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;object-fit:cover}.scan-top{position:relative;z-index:2;padding:16px;padding-top:max(16px,env(safe-area-inset-top));display:flex;align-items:center;gap:10px;background:linear-gradient(rgba(0,0,0,.6),transparent)}.scan-frame{position:relative;z-index:2;margin:auto;width:min(72vw,280px);aspect-ratio:1;border-radius:24px;box-shadow:0 0 0 9999px #00000073;border:3px solid rgba(255,255,255,.9)}.scan-bottom{position:relative;z-index:2;padding:20px 16px max(24px,env(safe-area-inset-bottom));text-align:center;background:linear-gradient(transparent,#000000b3);display:flex;flex-direction:column;gap:12px}.result{text-align:center;display:flex;flex-direction:column;align-items:center;gap:10px;padding:26px 18px}.result .big-ic{width:76px;height:76px;border-radius:38px;display:flex;align-items:center;justify-content:center}.result .time{font-size:44px;font-weight:700;font-variant-numeric:tabular-nums;line-height:1.1}.kv{display:grid;grid-template-columns:auto 1fr;gap:6px 14px;text-align:left;font-size:14px;width:100%}.kv dt{color:var(--ink-3)}.kv dd{margin:0;font-weight:600;text-align:right}.day-item{display:flex;gap:12px;padding:12px 0;border-top:1px solid var(--line-soft)}.day-item:first-child{border-top:0}.day-badge{width:48px;text-align:center;flex-shrink:0}.day-badge .d{font-size:20px;font-weight:700;line-height:1}.day-badge .w{font-size:12px;color:var(--ink-3)}.day-item.today .day-badge .d{color:var(--brand)}.stat-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.stat{background:#fff;border:1px solid var(--line);border-radius:14px;padding:12px 14px}.stat .v{font-size:22px;font-weight:700;font-variant-numeric:tabular-nums}.d-app{display:flex;min-height:100%}.d-side{width:240px;flex-shrink:0;background:var(--brand-dark);color:#fff;padding:24px 14px;display:flex;flex-direction:column;gap:22px;position:sticky;top:0;height:100vh;overflow-y:auto}.d-side .brand-mark{color:#fff}.d-side .brand-mark .sub{color:#b9cfc0}.d-nav{display:flex;flex-direction:column;gap:3px}.d-nav a{min-height:42px;padding:0 12px;border-radius:10px;color:#dce8df;text-decoration:none;display:flex;align-items:center;gap:12px;font-size:14.5px;font-weight:500}.d-nav a:hover{background:#ffffff0f}.d-nav a.active{background:var(--brand-mid);color:#fff;font-weight:600}.d-nav .badge{margin-left:auto;font-size:12px;font-weight:700;color:var(--gold)}.d-side .select{background:var(--brand);border-color:#3f6b53;color:#fff}.d-user{display:flex;align-items:center;gap:10px;padding-top:12px;border-top:1px solid var(--brand-mid)}.avatar{width:36px;height:36px;border-radius:18px;background:#e3b865;color:var(--brand-dark);display:flex;align-items:center;justify-content:center;font-weight:700;font-size:14px;flex-shrink:0}.d-main{flex:1;min-width:0;padding:28px 32px 48px;display:flex;flex-direction:column;gap:20px}.d-title{font-family:var(--serif);font-size:30px;font-weight:700}.kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:14px}.kpi{border-radius:14px;padding:16px 18px;display:flex;gap:14px;align-items:center;border:1px solid}.kpi .v{font-size:28px;font-weight:700;font-variant-numeric:tabular-nums}.todo{display:flex;align-items:center;gap:14px;padding:12px 0;border-top:1px solid var(--line-soft)}.dot{width:10px;height:10px;border-radius:5px;flex-shrink:0}.bar{height:8px;border-radius:4px;background:var(--line-soft);overflow:hidden}.bar>div{height:8px;border-radius:4px;background:var(--brand)}.sched-grid{border-collapse:separate;border-spacing:0;width:100%;font-size:13px}.sched-grid th,.sched-grid td{border-bottom:1px solid var(--line-soft);border-right:1px solid var(--line-soft);padding:6px;vertical-align:top}.sched-grid th{background:var(--head);position:sticky;top:0;font-weight:600}.sched-grid td.name{min-width:170px;background:#fff;position:sticky;left:0}.sched-grid td.cell{min-width:120px;cursor:pointer}.sched-grid td.cell:hover{background:#fcfaf5}.chip{display:block;padding:4px 8px;border-radius:8px;background:var(--brand-soft);color:var(--brand);font-weight:600;margin-bottom:4px;font-size:12px}.chip.extra{background:var(--warn-bg);color:var(--warn)}.qr-box{background:#fff;border:1px solid var(--line);border-radius:12px;padding:10px;width:180px}.qr-box img{width:100%;display:block}@media(max-width:860px){.d-app{flex-direction:column}.d-side{width:100%;height:auto;position:static;padding:14px;gap:12px}.d-side .brand-mark{flex-direction:row;gap:10px}.d-nav{flex-direction:row;overflow-x:auto}.d-nav a{white-space:nowrap}.d-main{padding:18px 16px 40px}.d-title{font-size:24px}}@media print{.no-print{display:none!important}body{background:#fff}}
