:root{--bg-primary: #0d1117;--bg-secondary: #161b22;--bg-tertiary: #1c2128;--bg-hover: #21262d;--bg-active: #2d333b;--bg-input: #0d1117;--border: #30363d;--border-light: #21262d;--border-strong: #484f58;--text-primary: #e6edf3;--text-secondary: #8b949e;--text-muted: #6e7681;--accent-blue: #388bfd;--accent-green: #3fb950;--accent-red: #f85149;--accent-yellow: #d29922;--accent-purple: #bc8cff;--focus-ring: rgba(56, 139, 253, .55);--sp-1: 4px;--sp-2: 8px;--sp-3: 12px;--sp-4: 16px;--sp-5: 24px;--sp-6: 32px;--gap: var(--sp-2);--radius: 6px;--radius-sm: 4px;--sidebar-w: 232px;--topbar-h: 52px;--row-h: 38px;--font-sans: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;--font-mono: "Consolas", "SF Mono", "Fira Code", ui-monospace, monospace;color-scheme:dark}*,*:before,*:after{box-sizing:border-box}html,body,#root{height:100%}body{margin:0;background:var(--bg-primary);color:var(--text-primary);font-family:var(--font-sans);font-size:14px;line-height:1.5;-webkit-font-smoothing:antialiased}h1,h2,h3,h4{margin:0;font-weight:600;line-height:1.3}p{margin:0}a{color:var(--accent-blue);text-decoration:none}a:hover{text-decoration:underline}:focus-visible{outline:2px solid var(--focus-ring);outline-offset:2px;border-radius:var(--radius-sm)}:focus:not(:focus-visible){outline:none}.layout{display:grid;grid-template-columns:var(--sidebar-w) minmax(0,1fr);height:100vh;overflow:hidden}.sidebar{display:flex;flex-direction:column;min-width:0;background:var(--bg-secondary);border-right:1px solid var(--border);padding:var(--sp-4) 0;overflow-y:auto}.sidebar h1{padding:0 var(--sp-4) var(--sp-1);font-size:15px;letter-spacing:-.01em;color:var(--text-primary)}.sidebar__email{padding:0 var(--sp-4) var(--sp-4);font-size:12px;color:var(--text-secondary);overflow-wrap:anywhere;border-bottom:1px solid var(--border-light);margin-bottom:var(--sp-3)}.sidebar nav{display:flex;flex-direction:column;gap:2px;padding:0 var(--sp-2);flex:1 1 auto;min-height:0}.sidebar nav a{display:block;padding:7px var(--sp-3);border-radius:var(--radius-sm);color:var(--text-secondary);font-size:13.5px;text-decoration:none;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.sidebar nav a:hover{background:var(--bg-hover);color:var(--text-primary);text-decoration:none}.sidebar nav a.active{background:var(--bg-active);color:var(--text-primary);font-weight:600;box-shadow:inset 2px 0 0 var(--accent-blue)}.sidebar__foot{padding:var(--sp-3) var(--sp-4) 0;margin-top:auto;border-top:1px solid var(--border-light)}.main{min-width:0;overflow-y:auto;overflow-x:hidden;padding:var(--sp-5) var(--sp-5) var(--sp-6)}.page-title{margin:0 0 var(--sp-1);font-size:20px;letter-spacing:-.015em}.page-lead{margin:0 0 var(--sp-4);color:var(--text-secondary);font-size:13px;max-width:78ch}.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;min-height:32px;padding:0 var(--sp-3);border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--bg-tertiary);color:var(--text-primary);font-family:inherit;font-size:13px;font-weight:500;white-space:nowrap;cursor:pointer;transition:background .12s ease,border-color .12s ease}.btn:hover:not(:disabled){background:var(--bg-hover);border-color:var(--border-strong)}.btn:disabled{opacity:.45;cursor:not-allowed}.btn-primary{background:var(--accent-blue);border-color:var(--accent-blue);color:#06121f;font-weight:600}.btn-primary:hover:not(:disabled){background:#58a6ff;border-color:#58a6ff}.btn-danger{background:transparent;border-color:#f8514980;color:var(--accent-red)}.btn-ghost{background:transparent;border-color:var(--border);color:var(--text-secondary)}.btn-ghost:hover:not(:disabled){background:var(--bg-hover);border-color:var(--border-strong);color:var(--text-primary)}.btn-danger:hover:not(:disabled){background:#f851491f;border-color:var(--accent-red)}.btn-expand{width:26px;min-height:26px;height:26px;padding:0;background:transparent;border-color:transparent;color:var(--text-secondary);font-size:13px;line-height:1}.btn-expand:hover:not(:disabled){background:var(--bg-hover);border-color:var(--border);color:var(--text-primary)}.action-row,.toolbar-actions{display:flex;flex-wrap:wrap;align-items:center;gap:var(--gap)}.cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(148px,1fr));gap:var(--sp-3)}.card{display:flex;flex-direction:column;justify-content:center;gap:var(--gap);min-width:0;min-height:74px;padding:var(--sp-3) var(--sp-4);background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius)}.card .label{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:var(--text-secondary)}.card .value{font-family:var(--font-sans);font-size:24px;font-weight:600;line-height:1.15;color:var(--text-primary)}.panel{display:flex;flex-direction:column;gap:var(--gap);background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius);padding:var(--sp-4);min-width:0}.panel>*{min-width:0}.panel>.note{margin-top:0}.main>*+*{margin-top:var(--gap)}.back-link{margin:0;font-size:12.5px}.back-link a{text-decoration:none}.back-link a:hover{text-decoration:underline}.panel h2{font-size:14px;margin-bottom:0;color:var(--text-primary)}.policy{display:flex;flex-wrap:wrap;gap:var(--sp-3) var(--sp-6);margin:0}.policy dt{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:var(--text-secondary)}.policy dd{margin:2px 0 0;font-size:15px;font-weight:600;color:var(--text-primary)}.toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:var(--gap);padding:var(--sp-3);background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius)}.toolbar>*{min-width:0}.input,.select{min-height:32px;padding:0 var(--sp-3);background:var(--bg-input);color:var(--text-primary);border:1px solid var(--border);border-radius:var(--radius-sm);font-family:inherit;font-size:13px;min-width:0;max-width:100%}.input::placeholder{color:var(--text-muted)}.input:focus,.select:focus{border-color:var(--accent-blue);outline:none;box-shadow:0 0 0 3px var(--focus-ring)}.select{cursor:pointer}.label{display:block;margin-bottom:var(--sp-1);font-size:12px;font-weight:500;color:var(--text-secondary)}.value{font-family:var(--font-mono);font-size:12.5px;color:var(--text-primary);overflow-wrap:anywhere}.table-wrap{min-width:0;overflow-x:auto;border:1px solid var(--border);border-radius:var(--radius);background:var(--bg-secondary)}table{width:100%;border-collapse:collapse;font-size:13px}thead th{position:sticky;top:0;z-index:1;background:var(--bg-tertiary);color:var(--text-secondary);font-size:11.5px;font-weight:600;text-transform:uppercase;letter-spacing:.04em;text-align:left;padding:var(--sp-2) var(--sp-3);border-bottom:1px solid var(--border);white-space:nowrap}tbody td{padding:var(--sp-2) var(--sp-3);border-bottom:1px solid var(--border-light);vertical-align:middle;color:var(--text-primary)}tbody tr:last-child td{border-bottom:none}tbody tr:hover td{background:var(--bg-hover)}td.col-select,td.col-expand{width:34px}td.col-actions,th.col-actions{white-space:nowrap;text-align:left}.col-actions-empty{color:var(--muted, #888)}.action-row{flex-wrap:nowrap}th.col-num,td.col-num{text-align:right}tbody tr{height:var(--row-h)}tbody td{padding-top:10px;padding-bottom:10px}tbody tr.row-selectable{cursor:pointer}tbody tr.row-selected td{background:#388bfd1a}.cell-email{font-weight:500}.cell-stack--badges{gap:4px;align-items:flex-start}.badge-gap{margin-left:4px}.dash{color:var(--text-muted)}.note{margin-top:var(--sp-2);font-size:12px;color:var(--text-secondary)}p.note{margin-top:var(--sp-3)}.bulk-bar .note{align-self:center}.panel-notice{margin:0;font-size:12.5px;color:var(--text-muted)}.panel-notice--warn{color:var(--accent-yellow)}.btn-inert{opacity:.45;cursor:not-allowed;pointer-events:none}.cell-mono{font-family:var(--font-mono);font-size:12.5px}.cell-clip{max-width:260px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cell-stack{display:flex;flex-direction:column;gap:2px;min-width:0}.cell-stack--tight{gap:3px}.cell-mono.cell-wrap{max-width:100%;white-space:normal;overflow-wrap:anywhere;word-break:break-all;line-height:1.35}.cell-stack-secondary{color:var(--text-secondary);font-size:12px}.cell-device__name{font-weight:500}.badge{display:inline-flex;align-items:center;padding:2px 8px;border-radius:999px;font-size:11.5px;font-weight:600;line-height:1.6;white-space:nowrap;border:1px solid transparent}.badge-green{background:#3fb95024;color:var(--accent-green);border-color:#3fb95059}.badge-red{background:#f8514924;color:var(--accent-red);border-color:#f8514959}.badge-yellow{background:#d2992224;color:var(--accent-yellow);border-color:#d2992259}.badge-blue{background:#388bfd24;color:var(--accent-blue);border-color:#388bfd59}.badge-muted{background:var(--bg-active);color:var(--text-secondary);border-color:var(--border)}.error{padding:var(--sp-3) var(--sp-4);border:1px solid rgba(248,81,73,.4);border-left:3px solid var(--accent-red);border-radius:var(--radius-sm);background:#f851491a;color:#ffb3ae;font-size:13px;overflow-wrap:anywhere}.success{padding:var(--sp-3) var(--sp-4);border:1px solid rgba(63,185,80,.4);border-left:3px solid var(--accent-green);border-radius:var(--radius-sm);background:#3fb9501a;color:#7ee787;font-size:13px}.row-detail--values{padding:var(--sp-3) var(--sp-4);background:var(--bg-primary);border-top:1px solid var(--border-light)}.row-detail--group1,.row-detail--group2{min-width:0}.detail-subheader{font-size:11.5px;font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:var(--text-muted);margin-bottom:var(--sp-2)}.chart-bars{display:grid;grid-template-columns:repeat(auto-fill,minmax(74px,1fr));gap:var(--sp-2)}.chart-bar-wrap{display:flex;flex-direction:column;align-items:stretch;gap:var(--sp-1);padding:var(--sp-2);background:var(--bg-primary);border:1px solid var(--border);border-radius:var(--radius-sm);min-width:0}.chart-bar-wrap:hover{border-color:var(--border-strong)}.chart-bar{height:56px;display:flex;align-items:flex-end}.chart-bar>i{display:block;width:100%;min-height:2px;background:var(--accent-blue);border-radius:2px 2px 0 0;opacity:.85}.chart-bar-wrap:hover .chart-bar>i{opacity:1}.chart-label{font-size:10.5px;font-family:var(--font-mono);color:var(--text-secondary);text-align:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.chart-count{font-size:15px;font-weight:600;color:var(--text-primary);text-align:center;line-height:1.1}.bulk-bar-slot{min-height:0}.bulk-bar{display:flex;flex-wrap:wrap;align-items:center;gap:var(--gap);padding:var(--sp-3);background:var(--bg-secondary);border:1px solid var(--accent-blue);border-radius:var(--radius)}.bulk-bar--idle{border-color:var(--border);background:transparent}.bulk-bar-count{font-size:12.5px;font-weight:600;color:var(--text-primary);flex:0 0 auto}.copyable-id{display:flex;align-items:center;gap:var(--gap);min-width:0;max-width:100%}.copyable-id--inline{flex-direction:row}.copyable-id--stacked{flex-direction:column;align-items:flex-start;gap:var(--sp-1)}.copyable-id__value{color:var(--text-primary)}.copyable-id__value--ellipsis{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.btn-copy{min-height:24px;height:24px;padding:0 8px;font-size:11.5px;background:transparent;border-color:var(--border);color:var(--text-secondary)}.btn-copy:hover:not(:disabled){color:var(--text-primary)}.btn-menu{width:28px;min-height:26px;height:26px;padding:0;background:transparent;border-color:var(--border);color:var(--text-secondary);font-weight:700}.btn-menu:hover:not(:disabled){color:var(--text-primary)}.row-actions-menu{position:relative;display:inline-block}.row-actions-menu__panel{position:absolute;right:0;top:calc(100% + 4px);z-index:40;min-width:170px;display:flex;flex-direction:column;gap:2px;padding:var(--sp-1);background:var(--bg-tertiary);border:1px solid var(--border-strong);border-radius:var(--radius-sm);box-shadow:0 8px 24px #00000080}.row-actions-menu__item{display:block;width:100%;padding:7px var(--sp-3);background:transparent;border:none;border-radius:var(--radius-sm);color:var(--text-primary);font-family:inherit;font-size:13px;text-align:left;white-space:nowrap;cursor:pointer}.row-actions-menu__item:hover:not(:disabled){background:var(--bg-hover)}.row-actions-menu__item:disabled{opacity:.45;cursor:not-allowed}.row-actions-menu__item--danger{color:var(--accent-red)}.row-actions-menu__item--danger:hover:not(:disabled){background:#f851491f}.row-detail{background:var(--bg-primary);border-top:1px solid var(--border-light)}.row-detail--labels{padding:var(--sp-3) var(--sp-4);background:var(--bg-secondary)}.detail-text{color:var(--text-primary);overflow-wrap:anywhere}.detail-text--ellipsis{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.form-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(320px,1fr));gap:var(--gap)}.form-grid>.panel{margin:0}.form-row{display:flex;align-items:center;gap:var(--gap);flex-wrap:wrap}.form-row>*{min-width:0}.input-narrow{width:120px;flex:0 0 auto}.mono{font-family:var(--font-mono);font-size:12.5px}.truncate{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cell-stack-primary{color:var(--text-primary);font-weight:500;overflow-wrap:anywhere}.cell-device{min-width:0}.cell-device__name{font-weight:500;color:var(--text-primary)}.ip-risk-badges{display:inline-flex;gap:4px;flex-wrap:wrap}.login-box{display:flex;flex-direction:column;gap:var(--sp-1)}.col-email{min-width:190px}.col-device{min-width:210px}.col-client{min-width:170px}.col-status{min-width:96px}.col-seen{min-width:150px}.col-time{min-width:150px;white-space:nowrap}.col-version{min-width:110px}.table-devices,.table-logins,.table-user-devices,.table-user-logins{font-size:12.5px}.table-devices th,.table-logins th,.table-user-devices th,.table-user-logins th{font-size:11px}.login-page{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:var(--sp-5);background:var(--bg-primary)}.login-page form,.login-page>div{width:100%;max-width:460px;background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius);padding:var(--sp-5)}.login-page input{width:100%}.login-page .btn{width:100%;margin-top:var(--sp-3)}.login-page .error{margin-bottom:var(--sp-3)}.input-mono{font-family:var(--font-mono);font-size:11.5px;letter-spacing:-.01em}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-track{background:var(--bg-primary)}::-webkit-scrollbar-thumb{background:var(--border);border-radius:5px;border:2px solid var(--bg-primary)}::-webkit-scrollbar-thumb:hover{background:var(--border-strong)}.dim{color:var(--text-secondary)}.dim-muted{color:var(--text-muted)}.warn-text{color:var(--accent-yellow)}.empty-state{margin:0;font-size:12.5px;color:var(--text-secondary)}.hint{margin:0;font-size:12px;color:var(--text-muted)}.cell-small{font-size:11px}.cell-detail{max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.btn-ghosted{opacity:.55;cursor:not-allowed}.check-row{display:flex;align-items:center;gap:var(--gap);margin-bottom:var(--sp-4);cursor:pointer}.crash-page{min-height:100vh;padding:var(--sp-5);background:#0d1117;color:#e6edf3;font-family:var(--font-sans)}.crash-title{margin:0 0 var(--sp-3);font-size:18px}.crash-pre{margin:0 0 var(--sp-4);padding:var(--sp-3);border-radius:var(--radius-sm);background:#161b22;color:#f85149;white-space:pre-wrap}.crash-btn{margin-top:0;padding:var(--sp-2) var(--sp-3)}@media (max-width: 900px){.layout{grid-template-columns:1fr;grid-template-rows:auto minmax(0,1fr)}.sidebar{flex-direction:row;align-items:center;overflow-x:auto;padding:var(--sp-2) var(--sp-3);border-right:none;border-bottom:1px solid var(--border)}.sidebar h1,.sidebar__email{display:none}.sidebar nav{flex-direction:row;padding:0}.sidebar__foot{margin-top:0;border-top:none;padding:0 0 0 var(--sp-3)}.main{padding:var(--sp-4)}}@media (prefers-reduced-motion: reduce){*,*:before,*:after{transition:none!important;animation:none!important}}.btn-sm{padding:2px 8px;font-size:11px;line-height:1.4}.panel-warning{color:var(--warn, #b26a00);font-size:12px}.table-user-audit{width:100%;border-collapse:collapse}.table-user-audit th,.table-user-audit td{text-align:left;padding:6px 8px;border-bottom:1px solid var(--border);font-size:12px;vertical-align:top}.row-actions{display:inline-flex;align-items:center;gap:8px}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#0009;display:flex;align-items:center;justify-content:center;z-index:100}.modal{background:var(--bg-secondary, #161b22);border:1px solid var(--border);border-radius:8px;width:min(900px,92vw);max-height:80vh;overflow:auto;padding:16px}.modal-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}
