:root{--color-sidebar: #12181f;--color-sidebar-alt: #1a222c;--color-sidebar-border: #262f3a;--color-on-sidebar: #e8ecf1;--color-on-sidebar-muted: #8b96a5;--color-canvas: #eef1f5;--color-surface: #ffffff;--color-surface-alt: #f4f6f9;--color-border: #dde2e9;--color-border-strong: #c7ced8;--color-ink: #131a24;--color-ink-muted: #566072;--color-ink-subtle: #8992a1;--color-accent: #2f5fa8;--color-accent-hover: #244a86;--color-accent-soft: #eaf1fb;--color-accent-border: #c7dbf3;--color-success: #1a7f4e;--color-success-bg: #e4f7ee;--color-success-border: #a9e4c7;--color-warning: #92620a;--color-warning-bg: #fff4e0;--color-warning-border: #f3d491;--color-danger: #b3261e;--color-danger-bg: #fdecea;--color-danger-border: #f3b6b1;--color-info: #2f5fa8;--color-info-bg: #eaf1fb;--color-info-border: #c7dbf3;--color-role-admin: #6a2fb0;--color-role-admin-bg: #f1e6fb;--color-role-user: #2f5fa8;--color-role-user-bg: #eaf1fb;--color-role-auditor: #92620a;--color-role-auditor-bg: #fff4e0;--font-sans: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;--font-mono: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;--text-xs: .75rem;--text-sm: .875rem;--text-base: 1rem;--text-lg: 1.125rem;--text-xl: 1.375rem;--text-2xl: 1.75rem;--text-display: clamp(1.75rem, 2.6vw, 2.5rem);--space-1: .25rem;--space-2: .5rem;--space-3: .75rem;--space-4: 1rem;--space-5: 1.5rem;--space-6: 2rem;--space-8: 3rem;--space-10: 4rem;--radius-sm: 4px;--radius-md: 8px;--radius-lg: 10px;--shell-sidebar-width: 232px;--shell-header-height: 64px;--content-max-width: 1240px}*,*:before,*:after{box-sizing:border-box}html,body{height:100%}body{margin:0;background:var(--color-canvas);color:var(--color-ink);font-family:var(--font-sans);font-size:var(--text-base);line-height:1.5;-webkit-font-smoothing:antialiased}h1,h2,h3{margin:0 0 var(--space-4);font-weight:700;line-height:1.2;letter-spacing:-.01em;color:var(--color-ink)}h1{font-size:var(--text-display)}h2{font-size:var(--text-xl);margin-top:var(--space-8)}h3{font-size:var(--text-lg)}p{margin:0 0 var(--space-3);color:var(--color-ink-muted)}code{font-family:var(--font-mono);background:var(--color-surface-alt);padding:.1em .4em;border-radius:3px;font-size:.9em}a{color:var(--color-accent);text-decoration:none;font-weight:600}a:hover{text-decoration:underline}a:focus-visible,button:focus-visible,input:focus-visible,[tabindex]:focus-visible{outline:2px solid var(--color-accent);outline-offset:2px}.stack{display:flex;flex-direction:column;gap:var(--space-4)}.row{display:flex;align-items:center;gap:var(--space-3);flex-wrap:wrap}.row-between{display:flex;align-items:center;justify-content:space-between;gap:var(--space-3);flex-wrap:wrap}.grid-cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:var(--space-5)}.eyebrow{font-size:var(--text-xs);font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--color-ink-subtle);margin-bottom:var(--space-2);display:block}.hint{font-size:var(--text-xs);color:var(--color-ink-subtle)}.page{width:100%;max-width:var(--content-max-width);display:flex;flex-direction:column;gap:var(--space-6)}.page-head{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-5);flex-wrap:wrap;border-bottom:1px solid var(--color-border);padding-bottom:var(--space-5)}.page-head h1{margin-bottom:var(--space-1)}.page-head p{margin:0}.panel{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-lg);padding:var(--space-6)}.panel-tight{padding:0;overflow:hidden}.field{display:flex;flex-direction:column;gap:var(--space-2);margin-bottom:var(--space-4);max-width:420px}.field label{font-size:var(--text-sm);font-weight:700;color:var(--color-ink)}.field .hint{font-size:var(--text-xs);color:var(--color-ink-subtle)}.input,input[type=text],input[type=password],input[type=email]{font:inherit;padding:var(--space-3);border:1.5px solid var(--color-border-strong);border-radius:var(--radius-sm);background:#fff;color:var(--color-ink);width:100%}.input:focus,input:focus{border-color:var(--color-accent)}.input-file{border:2px dashed var(--color-border-strong);border-radius:var(--radius-md);padding:var(--space-8) var(--space-5);text-align:center;background:var(--color-surface-alt);display:block;cursor:pointer}.input-file:hover{border-color:var(--color-accent);background:var(--color-accent-soft)}.input-file strong{font-size:var(--text-lg);color:var(--color-ink)}.btn{font:inherit;font-weight:700;font-size:var(--text-sm);padding:var(--space-3) var(--space-5);border-radius:var(--radius-sm);border:1.5px solid transparent;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;gap:var(--space-2);transition:background-color .12s ease,border-color .12s ease,color .12s ease;white-space:nowrap}.btn:disabled{opacity:.5;cursor:not-allowed}.btn-primary{background:var(--color-accent);color:#fff}.btn-primary:hover:not(:disabled){background:var(--color-accent-hover)}.btn-secondary{background:transparent;color:var(--color-ink);border-color:var(--color-border-strong)}.btn-secondary:hover:not(:disabled){background:var(--color-surface-alt);border-color:var(--color-ink)}.btn-ghost{background:transparent;color:var(--color-ink-muted);border-color:transparent}.btn-ghost:hover:not(:disabled){background:var(--color-surface-alt);color:var(--color-ink)}.btn-dark{background:var(--color-ink);color:#fff;border-color:var(--color-ink)}.btn-dark:hover:not(:disabled){background:#000}.btn-sm{padding:var(--space-2) var(--space-3);font-size:var(--text-xs)}.btn-lg{padding:var(--space-4) var(--space-6);font-size:var(--text-base)}.btn-block{width:100%}.card{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-md);padding:var(--space-5)}.card-link{display:block;color:inherit}.card-link:hover{text-decoration:none;border-color:var(--color-accent)}.metric-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:var(--space-5)}.metric-card{background:var(--color-surface);border:1px solid var(--color-border);border-left:4px solid var(--color-accent);border-radius:var(--radius-md);padding:var(--space-5)}.metric-card.metric-primary{border-left-color:var(--color-success)}.metric-value{font-size:var(--text-2xl);font-weight:800;display:block;line-height:1.1;margin-top:var(--space-2);color:var(--color-ink)}.metric-label{font-size:var(--text-xs);text-transform:uppercase;letter-spacing:.06em;color:var(--color-ink-subtle);font-weight:700}.module-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:var(--space-5)}.module-link{display:flex;flex-direction:column;justify-content:space-between;gap:var(--space-3);background:var(--color-surface);color:var(--color-ink);border:1px solid var(--color-border);border-radius:var(--radius-md);padding:var(--space-5);min-height:140px;transition:border-color .15s ease,box-shadow .15s ease}.module-link:hover{text-decoration:none;border-color:var(--color-accent);box-shadow:0 2px 10px #141e2d14}.module-link h3{color:var(--color-ink);font-size:var(--text-lg);margin:0}.module-link p{margin:0}.module-link .module-arrow{font-size:var(--text-xl);font-weight:700;color:var(--color-accent);align-self:flex-end}.auth-layout{min-height:100dvh;display:grid;grid-template-columns:minmax(280px,34%) 1fr;background:var(--color-canvas)}.auth-brand-panel{background:var(--color-sidebar);color:var(--color-on-sidebar);display:flex;flex-direction:column;justify-content:space-between;padding:var(--space-8) var(--space-6)}.auth-brand-mark{display:flex;align-items:center;gap:var(--space-3)}.auth-brand-mark img{width:34px;height:34px;flex-shrink:0}.auth-brand-mark span{font-weight:800;font-size:var(--text-lg);letter-spacing:-.01em}.auth-brand-copy h1{color:var(--color-on-sidebar);font-size:clamp(1.5rem,2.4vw,2rem);max-width:18ch}.auth-brand-copy p{color:var(--color-on-sidebar-muted);max-width:34ch}.auth-brand-foot{font-size:var(--text-xs);color:var(--color-on-sidebar-muted)}.auth-panel{background:var(--color-surface);display:flex;align-items:center;justify-content:center;padding:var(--space-6)}.auth-panel-inner{width:100%;max-width:380px}@media(max-width:860px){.auth-layout{grid-template-columns:1fr}.auth-brand-panel{padding:var(--space-6) var(--space-5);flex-direction:row;align-items:center;gap:var(--space-4)}.auth-brand-copy p,.auth-brand-foot{display:none}}.badge{display:inline-flex;align-items:center;gap:var(--space-1);padding:.2em .7em;border-radius:var(--radius-sm);font-size:var(--text-xs);font-weight:700;line-height:1.6;white-space:nowrap}.badge-success{background:var(--color-success-bg);color:var(--color-success);border:1px solid var(--color-success-border)}.badge-warning{background:var(--color-warning-bg);color:var(--color-warning);border:1px solid var(--color-warning-border)}.badge-danger{background:var(--color-danger-bg);color:var(--color-danger);border:1px solid var(--color-danger-border)}.badge-info{background:var(--color-info-bg);color:var(--color-info);border:1px solid var(--color-info-border)}.badge-neutral{background:var(--color-surface-alt);color:var(--color-ink-muted);border:1px solid var(--color-border)}.badge-role-admin{background:var(--color-role-admin-bg);color:var(--color-role-admin)}.badge-role-user{background:var(--color-role-user-bg);color:var(--color-role-user)}.badge-role-auditor{background:var(--color-role-auditor-bg);color:var(--color-role-auditor)}.alert{display:flex;gap:var(--space-3);align-items:flex-start;padding:var(--space-4);border-radius:var(--radius-sm);border:1.5px solid;font-size:var(--text-sm);margin-bottom:var(--space-4)}.alert-danger{background:var(--color-danger-bg);border-color:var(--color-danger-border);color:var(--color-danger)}.alert-warning{background:var(--color-warning-bg);border-color:var(--color-warning-border);color:var(--color-warning)}.alert-info{background:var(--color-info-bg);border-color:var(--color-info-border);color:var(--color-info)}.alert-success{background:var(--color-success-bg);border-color:var(--color-success-border);color:var(--color-success)}.table-scroll{overflow:auto;max-height:520px;border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-surface)}.panel-tight .table-scroll{border:none;border-radius:0}table.data-table{width:100%;border-collapse:collapse;font-size:var(--text-sm);min-width:480px}.data-table th,.data-table td{text-align:left;padding:var(--space-3) var(--space-4);border-bottom:1px solid var(--color-border)}.data-table th{background:var(--color-surface-alt);color:var(--color-ink-muted);font-weight:700;font-size:var(--text-xs);text-transform:uppercase;letter-spacing:.04em;position:sticky;top:0;z-index:1}.data-table tbody tr:nth-child(2n){background:var(--color-surface-alt)}.data-table tbody tr:last-child td{border-bottom:none}.data-table tbody tr:hover{background:var(--color-accent-soft)}.list-plain{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:var(--space-2)}.loading-row{display:flex;align-items:center;gap:var(--space-3);color:var(--color-ink-muted);padding:var(--space-5) 0}.spinner{width:18px;height:18px;border:2px solid var(--color-border-strong);border-top-color:var(--color-accent);border-radius:50%;animation:spin .7s linear infinite;flex-shrink:0}@keyframes spin{to{transform:rotate(360deg)}}.empty-state{text-align:center;padding:var(--space-10) var(--space-5);color:var(--color-ink-subtle);border:1.5px dashed var(--color-border-strong);border-radius:var(--radius-md);background:var(--color-surface)}.dev-helper{border:1.5px dashed var(--color-border-strong);background:var(--color-accent-soft);border-radius:var(--radius-md);padding:var(--space-4);font-size:var(--text-sm);color:var(--color-ink)}.dev-helper p{color:var(--color-ink-muted)}.dev-helper-label{display:inline-block;font-size:var(--text-xs);font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--color-ink-subtle);margin-bottom:var(--space-2)}.shell{display:flex;min-height:100dvh;background:var(--color-canvas)}.shell-sidebar{width:var(--shell-sidebar-width);flex-shrink:0;background:var(--color-sidebar);padding:var(--space-5) var(--space-4);display:flex;flex-direction:column;gap:var(--space-6)}.shell-brand{display:flex;align-items:center;gap:var(--space-2);padding:0 var(--space-2)}.shell-brand img{width:30px;height:30px;flex-shrink:0}.shell-brand-text{color:var(--color-on-sidebar);font-weight:800;font-size:var(--text-base);letter-spacing:-.01em;line-height:1.15}.shell-brand-text small{display:block;font-weight:600;font-size:.6875rem;text-transform:uppercase;letter-spacing:.05em;color:var(--color-on-sidebar-muted);margin-top:2px}.shell-nav{display:flex;flex-direction:column;gap:var(--space-1)}.shell-nav a{color:var(--color-on-sidebar-muted);font-weight:600;font-size:var(--text-sm);padding:var(--space-3) var(--space-3);border-radius:var(--radius-sm)}.shell-nav a:hover{text-decoration:none;background:var(--color-sidebar-alt);color:var(--color-on-sidebar)}.shell-nav a.active{background:var(--color-sidebar-alt);color:#fff;box-shadow:inset 3px 0 0 var(--color-accent)}.shell-spacer{flex:1}.shell-sidebar-foot{font-size:var(--text-xs);color:var(--color-on-sidebar-muted);padding:0 var(--space-2);border-top:1px solid var(--color-sidebar-border);padding-top:var(--space-4)}.shell-main{flex:1;min-width:0;display:flex;flex-direction:column}.shell-header{height:var(--shell-header-height);flex-shrink:0;background:var(--color-surface);border-bottom:1px solid var(--color-border);display:flex;align-items:center;justify-content:flex-end;padding:0 var(--space-6);gap:var(--space-4)}.shell-identity{display:flex;align-items:center;gap:var(--space-3)}.shell-avatar{width:34px;height:34px;border-radius:50%;background:var(--color-accent-soft);color:var(--color-accent);border:1px solid var(--color-accent-border);display:flex;align-items:center;justify-content:center;font-weight:800;font-size:var(--text-xs);flex-shrink:0}.shell-identity-info{min-width:0;display:flex;align-items:center;gap:var(--space-2);font-size:var(--text-sm)}.shell-identity-info strong{color:var(--color-ink);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:16ch}.shell-content{flex:1;padding:var(--space-6);display:flex;justify-content:center}.shell-content>.page{flex:1}@media(max-width:900px){.shell{flex-direction:column}.shell-sidebar{width:100%;flex-direction:row;align-items:center;padding:var(--space-3) var(--space-4);gap:var(--space-4)}.shell-brand{padding:0}.shell-nav{flex-direction:row;flex-wrap:wrap;gap:var(--space-1)}.shell-spacer,.shell-sidebar-foot{display:none}.shell-header{padding:0 var(--space-4)}.shell-content{padding:var(--space-4)}}@media(max-width:480px){.grid-cards,.metric-grid,.module-grid{grid-template-columns:1fr}.panel{padding:var(--space-4)}.shell-content{padding:var(--space-3)}.shell-identity-info strong{display:none}}
