@import"https://fonts.googleapis.com/css2?family=DM+Sans:wght@300;400;500;600;700&family=DM+Mono:wght@400;500&display=swap";:root{--red: #cc0000;--red-dark: #990000;--red-light: #ff1a1a;--bg: #0d0d0d;--surface: #161616;--surface-2: #1e1e1e;--surface-3: #272727;--border: #2a2a2a;--border-light: #333;--text-primary: #f0f0f0;--text-secondary: #9a9a9a;--text-muted: #555;--green: #2ecc71;--orange: #e67e22;--blue: #3498db;--purple: #9b59b6;--sidebar-w: 240px;--topbar-h: 56px;--radius: 8px;--radius-sm: 5px;--radius-lg: 12px;--font: "DM Sans", system-ui, sans-serif;--mono: "DM Mono", monospace;--shadow: 0 4px 24px rgba(0,0,0,.4);--shadow-sm: 0 2px 8px rgba(0,0,0,.3)}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}html,body,#root{height:100%}body{font-family:var(--font);background:var(--bg);color:var(--text-primary);font-size:14px;line-height:1.5;-webkit-font-smoothing:antialiased}button{cursor:pointer;font-family:inherit}input,select,textarea{font-family:inherit;font-size:14px;background:var(--surface-2);border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--text-primary);outline:none;transition:border-color .15s;width:100%;padding:8px 12px}input:focus,select:focus,textarea:focus{border-color:var(--red)}select option{background:var(--surface-2)}a{color:var(--red);text-decoration:none}code{font-family:var(--mono);font-size:12px}.spinner{width:36px;height:36px;border:3px solid var(--border);border-top-color:var(--red);border-radius:50%;animation:spin .7s linear infinite}.spinner-sm{display:inline-block;width:16px;height:16px;border:2px solid rgba(255,255,255,.3);border-top-color:#fff;border-radius:50%;animation:spin .7s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.btn{display:inline-flex;align-items:center;gap:6px;padding:8px 16px;border-radius:var(--radius-sm);border:none;font-size:13px;font-weight:500;transition:all .15s;white-space:nowrap}.btn-primary{background:var(--red);color:#fff}.btn-primary:hover{background:var(--red-dark)}.btn-primary:disabled{opacity:.5;cursor:not-allowed}.btn-ghost{background:transparent;border:1px solid var(--border-light);color:var(--text-secondary)}.btn-ghost:hover{background:var(--surface-2);color:var(--text-primary)}.btn-full{width:100%;justify-content:center}.btn.sm{padding:5px 10px;font-size:12px}.icon-btn{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;background:transparent;border:none;border-radius:var(--radius-sm);color:var(--text-secondary);transition:all .15s}.icon-btn:hover{background:var(--surface-3);color:var(--text-primary)}.icon-btn.sm{width:24px;height:24px}.icon-btn.danger:hover{background:#c002;color:var(--red)}.app-shell{display:flex;height:100vh;overflow:hidden}.sidebar{width:var(--sidebar-w);background:var(--surface);border-right:1px solid var(--border);display:flex;flex-direction:column;transition:width .2s;overflow:hidden;flex-shrink:0}.sidebar.collapsed{width:60px}.sidebar.mobile{width:100%;border-right:none}.sidebar-logo{padding:16px;border-bottom:1px solid var(--border);display:flex;align-items:center;gap:10px;min-height:var(--topbar-h)}.logo-img{height:28px;object-fit:contain;flex-shrink:0}.logo-sub{font-size:11px;font-weight:600;color:var(--text-muted);letter-spacing:.08em;text-transform:uppercase;white-space:nowrap}.sidebar-nav{flex:1;padding:12px 8px;display:flex;flex-direction:column;gap:2px;overflow-y:auto}.nav-item{display:flex;align-items:center;gap:10px;padding:9px 10px;border-radius:var(--radius-sm);border:none;background:transparent;color:var(--text-secondary);font-size:13.5px;font-weight:400;transition:all .15s;width:100%;position:relative;white-space:nowrap}.nav-item:hover{background:var(--surface-2);color:var(--text-primary)}.nav-item.active{background:var(--red);color:#fff;font-weight:500}.nav-arrow{margin-left:auto;opacity:.5}.sidebar-footer{border-top:1px solid var(--border);padding:12px 8px;display:flex;flex-direction:column;gap:8px}.user-card{display:flex;align-items:flex-start;gap:10px;padding:8px;border-radius:var(--radius-sm);background:var(--surface-2)}.user-avatar{width:36px;height:36px;border-radius:50%;background:var(--red);color:#fff;display:flex;align-items:center;justify-content:center;font-weight:700;font-size:14px;flex-shrink:0}.user-avatar.sm{width:28px;height:28px;font-size:12px}.user-info{flex:1;min-width:0}.user-name{font-size:13px;font-weight:500;color:var(--text-primary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.user-dept{font-size:11px;color:var(--text-muted);margin-top:1px}.role-badge{display:inline-flex;align-items:center;gap:3px;font-size:10px;font-weight:600;padding:2px 6px;border-radius:3px;margin-top:4px;letter-spacing:.05em}.btn-logout{display:flex;align-items:center;gap:8px;padding:8px 10px;border:none;background:transparent;color:var(--text-muted);border-radius:var(--radius-sm);font-size:13px;transition:all .15s;width:100%}.btn-logout:hover{background:#cc000018;color:var(--red)}.mobile-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#000000b3;z-index:100;display:flex}.mobile-sidebar{width:260px;height:100%;background:var(--surface);position:relative}.close-mobile{position:absolute;top:10px;right:10px;background:transparent;border:none;color:var(--text-secondary)}.main-content{flex:1;display:flex;flex-direction:column;overflow:hidden;min-width:0}.topbar{height:var(--topbar-h);background:var(--surface);border-bottom:1px solid var(--border);display:flex;align-items:center;justify-content:space-between;padding:0 20px;flex-shrink:0}.topbar-left{display:flex;align-items:center;gap:14px}.topbar-right{display:flex;align-items:center;gap:8px}.page-title{font-size:15px;font-weight:600;color:var(--text-primary)}.topbar-avatar{width:32px;height:32px;border-radius:50%;background:var(--red);color:#fff;display:flex;align-items:center;justify-content:center;font-weight:700;font-size:13px}.collapse-btn{color:var(--text-secondary)}.page-body{flex:1;overflow-y:auto;padding:24px}.login-shell{min-height:100vh;display:flex;align-items:center;justify-content:center;position:relative}.login-bg{position:fixed;top:0;right:0;bottom:0;left:0;background:radial-gradient(ellipse at 30% 50%,#1a0000,#0d0d0d 60%)}.login-card{position:relative;width:100%;max-width:400px;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);padding:40px 36px;box-shadow:var(--shadow),0 0 60px #cc00000f}.login-logo{margin-bottom:24px}.login-logo img{height:36px;object-fit:contain}.login-header{margin-bottom:24px}.login-header h2{font-size:20px;font-weight:700;color:var(--text-primary);margin-bottom:4px}.login-header p{color:var(--text-secondary);font-size:13px}.login-header svg{margin-bottom:8px}.login-form{display:flex;flex-direction:column;gap:16px}.login-footer{text-align:center;margin-top:20px;font-size:12px;color:var(--text-muted)}.field{display:flex;flex-direction:column;gap:5px}.field label{font-size:12px;font-weight:500;color:var(--text-secondary);letter-spacing:.03em}.input-wrap{position:relative;display:flex;align-items:center}.input-wrap input{padding-left:36px}.input-icon{position:absolute;left:10px;color:var(--text-muted);pointer-events:none}.pw-toggle{position:absolute;right:10px;background:transparent;border:none;color:var(--text-muted);display:flex;align-items:center}.pw-toggle:hover{color:var(--text-primary)}.form-row{display:flex;gap:12px}.form-row .field{flex:1}.color-wrap{display:flex;align-items:center;gap:10px}.color-wrap input[type=color]{width:40px;height:32px;padding:2px 4px;cursor:pointer}.color-wrap span{font-size:12px;color:var(--text-secondary);font-family:var(--mono)}.alert{display:flex;align-items:center;gap:8px;padding:10px 14px;border-radius:var(--radius-sm);font-size:13px;margin-bottom:16px}.alert-error{background:#c002;color:#f66;border:1px solid #cc000040}.dashboard{display:flex;flex-direction:column;gap:24px}.stats-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:16px}.stat-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:20px;display:flex;align-items:center;gap:16px}.stat-icon{width:44px;height:44px;border-radius:var(--radius-sm);display:flex;align-items:center;justify-content:center;flex-shrink:0}.stat-value{font-size:26px;font-weight:700;color:var(--text-primary);line-height:1}.stat-label{font-size:12px;color:var(--text-secondary);margin-top:4px}.dash-grid-2{display:grid;grid-template-columns:repeat(auto-fit,minmax(340px,1fr));gap:16px}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);overflow:hidden}.card-header{display:flex;align-items:center;gap:8px;padding:14px 16px;border-bottom:1px solid var(--border);font-size:13px;font-weight:500;color:var(--text-secondary)}.spark-chart{padding:16px}.bar-chart{display:flex;align-items:flex-end;gap:2px;height:100px}.bar-col{flex:1;display:flex;align-items:flex-end;height:100%}.bar-fill{width:100%;background:var(--red);border-radius:2px 2px 0 0;min-height:2px;opacity:.8;transition:opacity .15s}.bar-col:hover .bar-fill{opacity:1}.top-list{display:flex;flex-direction:column}.top-item{display:flex;align-items:center;gap:12px;padding:12px 16px;border-bottom:1px solid var(--border)}.top-item:last-child{border-bottom:none}.top-rank{width:22px;height:22px;border-radius:50%;background:var(--surface-3);font-size:11px;font-weight:700;display:flex;align-items:center;justify-content:center;color:var(--text-muted)}.top-info{flex:1;min-width:0}.top-name{font-size:13px;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.top-meta{font-size:11px;color:var(--text-muted);margin-top:2px}.top-count{font-size:14px;font-weight:700;color:var(--red)}.bar-list{padding:16px;display:flex;flex-direction:column;gap:12px}.mini-bar{display:flex;flex-direction:column;gap:5px}.mini-bar-label{display:flex;justify-content:space-between;font-size:12px;color:var(--text-secondary)}.mini-bar-track{height:4px;background:var(--surface-3);border-radius:2px}.mini-bar-fill{height:100%;background:var(--red);border-radius:2px;transition:width .6s}.toolbar{display:flex;align-items:center;gap:12px;margin-bottom:20px;flex-wrap:wrap}.toolbar .btn{margin-left:auto}.search-wrap{position:relative;flex:1;min-width:180px;max-width:320px}.search-icon{position:absolute;left:10px;top:50%;transform:translateY(-50%);color:var(--text-muted);pointer-events:none}.search-input{padding-left:34px!important}.select-filter{width:auto;min-width:140px}.table-wrap{overflow-x:auto;border-radius:var(--radius);border:1px solid var(--border)}.data-table{width:100%;border-collapse:collapse;font-size:13px}.data-table th{padding:10px 14px;text-align:left;font-size:11px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--text-muted);background:var(--surface);border-bottom:1px solid var(--border);white-space:nowrap}.data-table td{padding:11px 14px;border-bottom:1px solid var(--border);color:var(--text-secondary);vertical-align:middle}.data-table tr:last-child td{border-bottom:none}.data-table tr:hover td{background:var(--surface-2)}.data-table tbody tr{background:var(--surface)}.dept-badge{display:inline-block;padding:2px 8px;border-radius:3px;background:var(--surface-3);font-size:11px;color:var(--text-secondary)}.status-pill{display:inline-block;padding:3px 8px;border-radius:4px;font-size:11px;font-weight:500}.status-pill.active{background:#2ecc7122;color:#2ecc71}.status-pill.inactive{background:#c002;color:#c66}.role-pill,.action-pill{display:inline-block;padding:2px 8px;border-radius:3px;font-size:11px;font-weight:500}.qr-name{font-weight:500;color:var(--text-primary)}.qr-campaign{font-size:11px;color:var(--text-muted);margin-top:1px}.qr-url-row{display:flex;align-items:center;gap:4px;margin-top:3px}.qr-url-text{font-size:11px;color:var(--text-muted);font-family:var(--mono)}.scan-count{display:inline-flex;align-items:center;gap:4px;background:transparent;border:none;color:var(--red);font-size:13px;font-weight:600;cursor:pointer}.scan-count:hover{text-decoration:underline}.unique-count{color:var(--text-secondary);font-weight:500}.toggle-btn{display:inline-flex;align-items:center;gap:5px;background:transparent;border:none;font-size:12px;transition:color .15s}.toggle-btn.on{color:var(--green)}.toggle-btn.off{color:var(--text-muted)}.action-row{display:flex;align-items:center;gap:2px}.date-text{font-size:12px;color:var(--text-muted);white-space:nowrap}.dropdown-menu{position:absolute;right:0;top:34px;background:var(--surface-2);border:1px solid var(--border);border-radius:var(--radius-sm);z-index:50;min-width:140px;box-shadow:var(--shadow)}.dropdown-item{display:block;width:100%;padding:9px 14px;background:transparent;border:none;text-align:left;font-size:13px;color:var(--text-secondary)}.dropdown-item:hover{background:var(--surface-3);color:var(--text-primary)}.modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#000000b3;z-index:200;display:flex;align-items:center;justify-content:center;padding:20px}.modal{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);width:100%;max-width:760px;max-height:90vh;overflow-y:auto;box-shadow:var(--shadow)}.modal.sm{max-width:400px}.modal-header{display:flex;align-items:center;justify-content:space-between;padding:16px 24px;border-bottom:1px solid var(--border);position:sticky;top:0;background:var(--surface);z-index:1}.modal-title{display:flex;align-items:center;gap:8px;font-size:15px;font-weight:600}.modal-body{padding:24px;display:flex;flex-direction:column;gap:16px}.modal-cols{display:flex;gap:24px}.modal-left{flex:1;display:flex;flex-direction:column;gap:14px}.modal-right{width:220px;flex-shrink:0}.modal-footer{display:flex;justify-content:flex-end;gap:10px;padding-top:16px;border-top:1px solid var(--border)}.qr-preview-box{border:1px solid var(--border);border-radius:var(--radius);padding:16px;display:flex;flex-direction:column;align-items:center;gap:12px;background:var(--surface-2);height:fit-content}.qr-preview-label{font-size:11px;color:var(--text-muted);letter-spacing:.06em;text-transform:uppercase}.qr-preview-img{width:180px;height:180px;border-radius:var(--radius-sm)}.qr-preview-empty{width:180px;height:180px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;color:var(--text-muted);font-size:12px;border:1px dashed var(--border-light);border-radius:var(--radius-sm)}.qr-preview-url{font-size:10px;color:var(--text-muted);word-break:break-all;text-align:center}.drawer-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#0009;z-index:200;display:flex;justify-content:flex-end}.drawer{width:100%;max-width:720px;height:100%;background:var(--surface);border-left:1px solid var(--border);display:flex;flex-direction:column}.drawer-header{display:flex;align-items:flex-start;justify-content:space-between;padding:20px 24px;border-bottom:1px solid var(--border);flex-shrink:0}.drawer-title{font-size:15px;font-weight:600}.drawer-sub{font-size:12px;color:var(--text-muted);margin-top:2px}.drawer-body{flex:1;overflow-y:auto;padding:16px}.device-cell{display:inline-flex;align-items:center;gap:5px}.ip-code{font-size:11px;color:var(--text-muted)}.badge-yes{color:var(--green);font-size:11px;font-weight:600}.badge-no{color:var(--text-muted);font-size:11px}.temp-pass-box{background:var(--surface-2);border:1px solid var(--border);border-radius:var(--radius-sm);padding:14px;text-align:center}.temp-pass-box code{font-size:16px;font-weight:600;color:var(--red);letter-spacing:.05em}.details-text{font-size:11px;color:var(--text-muted);font-family:var(--mono)}.pagination{display:flex;align-items:center;justify-content:center;gap:16px;margin-top:16px}.page-section{display:flex;flex-direction:column}.loading-block{display:flex;align-items:center;justify-content:center;padding:60px}.empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:60px 20px;color:var(--text-muted);gap:12px;text-align:center}.empty-state.small{padding:20px}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:var(--surface)}::-webkit-scrollbar-thumb{background:var(--border-light);border-radius:3px}::-webkit-scrollbar-thumb:hover{background:#444}@media (max-width: 768px){.sidebar:not(.mobile){display:none}.modal-cols{flex-direction:column}.modal-right{width:100%}.dash-grid-2{grid-template-columns:1fr}.stats-grid{grid-template-columns:repeat(2,1fr)}.page-body{padding:16px}}
