:root{--background:0 0% 100%;--foreground:240 10% 3.9%;--card:0 0% 100%;--muted:240 4.8% 95.9%;--muted-foreground:240 3.8% 46.1%;--border:240 5.9% 90%;--input:240 5.9% 90%;--primary:240 5.9% 10%;--primary-foreground:0 0% 98%;--accent:240 4.8% 95.9%;--ring:240 5.9% 10%;--sidebar:0 0% 98.5%;--sidebar-accent:240 4.8% 94%;--green:142 71% 45%;--green-bg:142 71% 96%;--amber:38 92% 50%;--amber-bg:38 92% 96%;--red:0 72% 51%;--red-bg:0 72% 97%;--blue:221 83% 53%;--blue-bg:221 83% 97%;--radius:.6rem}[data-theme=dark]{--background:240 10% 3.9%;--foreground:0 0% 98%;--card:240 10% 5.5%;--muted:240 3.7% 15.9%;--muted-foreground:240 5% 64.9%;--border:240 3.7% 15.9%;--input:240 3.7% 15.9%;--primary:0 0% 98%;--primary-foreground:240 5.9% 10%;--accent:240 3.7% 15.9%;--ring:240 4.9% 83.9%;--sidebar:240 10% 5%;--sidebar-accent:240 3.7% 14%;--green:142 65% 55%;--green-bg:142 40% 12%;--amber:38 92% 60%;--amber-bg:38 60% 12%;--red:0 72% 61%;--red-bg:0 50% 14%;--blue:221 83% 63%;--blue-bg:221 50% 14%;--radius:.6rem}*{box-sizing:border-box;margin:0;padding:0}body{font-family:Inter,system-ui,sans-serif;background:hsl(var(--background));color:hsl(var(--foreground));font-size:14px;line-height:1.5;-webkit-font-smoothing:antialiased}.ic{width:19px;height:19px;flex-shrink:0;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;vertical-align:-3px}.app{display:flex;min-height:100vh}.sidebar{width:260px;flex-shrink:0;background:hsl(var(--sidebar));border-right:1px solid hsl(var(--border));display:flex;flex-direction:column;transition:width .18s ease;position:sticky;top:0;height:100vh}.sidebar.collapsed{width:70px}.sb-head{height:64px;display:flex;align-items:center;gap:11px;padding:0 18px;border-bottom:1px solid hsl(var(--border))}.logo{width:34px;height:34px;flex-shrink:0;border-radius:9px;background:hsl(var(--primary));color:hsl(var(--primary-foreground));display:flex;align-items:center;justify-content:center;font-weight:600;font-size:16px}.brand{font-weight:600;font-size:16px;white-space:nowrap;overflow:hidden;letter-spacing:.02em}.brand small{display:block;font-weight:400;font-size:11px;color:hsl(var(--muted-foreground));letter-spacing:0}.sidebar.collapsed .brand,.sidebar.collapsed .sb-section,.sidebar.collapsed .nav-item span,.sidebar.collapsed .user-chip .meta,.sidebar.collapsed .user-chip .logout{display:none}.sb-nav{flex:1;overflow-y:auto;padding:14px 12px}.sb-section{font-size:10.5px;font-weight:600;text-transform:uppercase;letter-spacing:.07em;color:hsl(var(--muted-foreground));padding:16px 10px 7px}.nav-group{margin-top:6px}.group-head{display:flex;align-items:center;gap:12px;padding:9px 11px;border-radius:var(--radius);color:hsl(var(--muted-foreground));cursor:pointer;font-weight:600;white-space:nowrap;border:none;background:none;width:100%;text-align:left;font-size:12px;font-family:inherit;text-transform:uppercase;letter-spacing:.04em}.group-head:hover{background:hsl(var(--sidebar-accent));color:hsl(var(--foreground))}.group-head .gh-ico{width:18px;height:18px}.group-head .chev{width:16px;height:16px;margin-left:auto;transition:transform .18s ease}.nav-group.open .group-head .chev{transform:rotate(90deg)}.group-body{overflow:hidden;max-height:0;transition:max-height .22s ease;padding-left:8px}.nav-group.open .group-body{max-height:400px}.nav-item.sub{padding-left:16px;font-size:13.5px}.sidebar.collapsed .group-head span,.sidebar.collapsed .group-head .chev{display:none}.sidebar.collapsed .group-head{justify-content:center;padding:9px}.sidebar.collapsed .group-body{max-height:none!important;padding-left:0}.sidebar.collapsed .nav-item.sub{padding-left:9px}.nav-item{display:flex;align-items:center;gap:12px;padding:9px 11px;border-radius:var(--radius);color:hsl(var(--muted-foreground));cursor:pointer;font-weight:500;white-space:nowrap;margin-bottom:2px;border:none;background:none;width:100%;text-align:left;font-size:14px;font-family:inherit}.nav-item:hover{background:hsl(var(--sidebar-accent));color:hsl(var(--foreground))}.nav-item.active{background:hsl(var(--primary));color:hsl(var(--primary-foreground))}.sidebar.collapsed .nav-item{justify-content:center;padding:9px}.sb-foot{padding:12px;border-top:1px solid hsl(var(--border))}.user-chip{display:flex;align-items:center;gap:11px;padding:9px 10px;border-radius:var(--radius)}.sidebar.collapsed .user-chip{justify-content:center;padding:9px 0}.avatar{width:36px;height:36px;border-radius:50%;flex-shrink:0;background:hsl(var(--primary));color:hsl(var(--primary-foreground));display:flex;align-items:center;justify-content:center;font-weight:600;font-size:13px}.user-chip .meta{overflow:hidden;white-space:nowrap;flex:1}.user-chip .meta b{font-weight:500;font-size:13px;display:block}.user-chip .meta span{font-size:11px;color:hsl(var(--muted-foreground))}.user-chip .logout{background:none;border:none;color:hsl(var(--muted-foreground));cursor:pointer;padding:6px;border-radius:8px;display:flex}.user-chip .logout:hover{background:hsl(var(--accent));color:hsl(var(--foreground))}.main{flex:1;min-width:0;display:flex;flex-direction:column}.topbar{height:64px;flex-shrink:0;position:sticky;top:0;z-index:5;background:hsl(var(--background)/.88);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border-bottom:1px solid hsl(var(--border));display:flex;align-items:center;gap:14px;padding:0 26px}.icon-btn{width:38px;height:38px;border-radius:var(--radius);border:1px solid transparent;background:none;color:hsl(var(--foreground));cursor:pointer;display:flex;align-items:center;justify-content:center}.icon-btn:hover{background:hsl(var(--accent))}.crumb{font-size:13px;color:hsl(var(--muted-foreground))}.crumb b{color:hsl(var(--foreground));font-weight:500}.top-spacer{flex:1}.search{display:flex;align-items:center;gap:9px;height:38px;padding:0 13px;background:hsl(var(--muted));border-radius:var(--radius);color:hsl(var(--muted-foreground));width:300px;font-size:13px;border:1px solid hsl(var(--border))}.search .kbd{margin-left:auto;font-family:JetBrains Mono,monospace;font-size:11px;background:hsl(var(--card));border:1px solid hsl(var(--border));padding:1px 6px;border-radius:5px}.theme-seg{display:inline-flex;gap:2px;padding:3px;background:hsl(var(--muted));border-radius:var(--radius)}.seg-btn{width:32px;height:32px;border:none;background:none;border-radius:calc(var(--radius) - 3px);color:hsl(var(--muted-foreground));cursor:pointer;display:flex;align-items:center;justify-content:center}.seg-btn:hover{color:hsl(var(--foreground))}.seg-btn.active{background:hsl(var(--card));color:hsl(var(--foreground));box-shadow:0 1px 2px #18181b14}.content{padding:28px 32px;width:100%}.page{display:none}.page.active{display:block;animation:fade .2s ease}@keyframes fade{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}.page-title{font-size:30px;font-weight:600;letter-spacing:-.02em}.page-sub{color:hsl(var(--muted-foreground));font-size:14px;margin-top:5px}.row{display:flex;align-items:center;justify-content:space-between;gap:12px}.btn{height:40px;padding:0 16px;border-radius:var(--radius);cursor:pointer;font-weight:500;font-size:13px;font-family:inherit;display:inline-flex;align-items:center;gap:8px;border:1px solid hsl(var(--border));background:hsl(var(--card));color:hsl(var(--foreground))}.btn:hover{background:hsl(var(--accent))}.btn.primary{background:hsl(var(--primary));color:hsl(var(--primary-foreground));border-color:hsl(var(--primary))}.btn.primary:hover{opacity:.92}.btn .ic{width:16px;height:16px}.card{background:hsl(var(--card));border:1px solid hsl(var(--border));border-radius:14px;padding:22px}.grid{display:grid;gap:18px}.stat-card{background:hsl(var(--card));border:1px solid hsl(var(--border));border-radius:14px;padding:22px}.stat-top{display:flex;align-items:flex-start;justify-content:space-between}.stat-label{font-size:11px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:hsl(var(--muted-foreground))}.stat-ico{width:34px;height:34px;border-radius:9px;display:flex;align-items:center;justify-content:center}.stat-ico .ic{width:18px;height:18px}.stat-val{font-size:28px;font-weight:600;letter-spacing:-.02em;margin-top:16px}.stat-delta{font-size:12px;margin-top:7px;color:hsl(var(--muted-foreground))}.up{color:hsl(var(--green))}.down{color:hsl(var(--red))}.badge{display:inline-flex;align-items:center;gap:4px;height:23px;padding:0 10px;border-radius:999px;font-size:12px;font-weight:500}.b-green{background:hsl(var(--green-bg));color:hsl(var(--green))}.b-amber{background:hsl(var(--amber-bg));color:hsl(var(--amber))}.b-red{background:hsl(var(--red-bg));color:hsl(var(--red))}.b-blue{background:hsl(var(--blue-bg));color:hsl(var(--blue))}.b-muted{background:hsl(var(--muted));color:hsl(var(--muted-foreground))}.section-head{display:flex;align-items:center;gap:9px;margin:30px 0 16px;font-size:17px;font-weight:600}.section-head .ic{color:hsl(var(--foreground));width:20px;height:20px}table{width:100%;border-collapse:collapse;font-size:13px}th{text-align:left;font-weight:500;color:hsl(var(--muted-foreground));padding:11px 14px;border-bottom:1px solid hsl(var(--border));font-size:12px}td{padding:13px 14px;border-bottom:1px solid hsl(var(--border))}tr:last-child td{border-bottom:none}tbody tr:hover{background:hsl(var(--muted)/.5)}.tbl-card{background:hsl(var(--card));border:1px solid hsl(var(--border));border-radius:14px;overflow:hidden}.tbl-head{padding:18px 20px;border-bottom:1px solid hsl(var(--border));display:flex;justify-content:space-between;align-items:center}.tbl-head h3{font-size:15px;font-weight:600}.mini-user{display:flex;align-items:center;gap:10px}.mini-user .avatar{width:30px;height:30px;font-size:11px}.input{height:40px;width:100%;padding:0 13px;border-radius:var(--radius);border:1px solid hsl(var(--input));background:hsl(var(--card));color:hsl(var(--foreground));font-family:inherit;font-size:13px}.input:focus{outline:none;border-color:hsl(var(--ring));box-shadow:0 0 0 3px hsl(var(--ring)/.15)}.label{font-size:13px;font-weight:500;margin-bottom:7px;display:block}.switch{width:40px;height:23px;border-radius:999px;background:hsl(var(--muted));position:relative;cursor:pointer;flex-shrink:0}.switch.on{background:hsl(var(--green))}.switch:after{content:"";position:absolute;top:2px;left:2px;width:19px;height:19px;border-radius:50%;background:#fff;transition:.15s}.switch.on:after{left:18px}.chk{width:17px;height:17px;border-radius:5px;border:1.5px solid hsl(var(--border));display:inline-flex;align-items:center;justify-content:center;color:hsl(var(--primary-foreground))}.chk.on{background:hsl(var(--primary));border-color:hsl(var(--primary))}.info-item{display:flex;justify-content:space-between;align-items:center;padding:13px 0;border-bottom:1px solid hsl(var(--border))}.info-item:last-child{border-bottom:none}.chart{display:flex;align-items:flex-end;gap:12px;height:200px;padding-top:12px}.chart .col{flex:1;display:flex;flex-direction:column;justify-content:flex-end;gap:6px;align-items:center;height:100%}.chart .bars{display:flex;gap:4px;align-items:flex-end;width:100%;justify-content:center;height:100%}.chart .bar{width:14px;border-radius:4px 4px 0 0}.chart .bar.rev{background:hsl(var(--primary))}.chart .bar.exp{background:hsl(var(--muted-foreground)/.4)}.chart .lbl{font-size:11px;color:hsl(var(--muted-foreground))}.dot{width:9px;height:9px;border-radius:3px;display:inline-block}.uploadzone{border:1.5px dashed hsl(var(--border));border-radius:14px;padding:40px;text-align:center;color:hsl(var(--muted-foreground));background:hsl(var(--muted)/.35)}.uploadzone .ic{width:34px;height:34px;display:block;margin:0 auto 12px;color:hsl(var(--foreground))}.tag{font-family:JetBrains Mono,monospace;font-size:12px;background:hsl(var(--muted));padding:2px 8px;border-radius:6px}.info-ico{width:17px;height:17px;color:hsl(var(--foreground));stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}.role-row{padding:14px 18px;border-bottom:1px solid hsl(var(--border));cursor:pointer;display:flex;flex-direction:column;gap:3px}.role-row:last-child{border-bottom:none}.role-row:hover{background:hsl(var(--muted)/.5)}.role-row.active{background:hsl(var(--accent))}.role-row.active .role-name{color:hsl(var(--foreground))}.role-top{display:flex;justify-content:space-between;align-items:center}.role-name{font-weight:600;font-size:14px;display:flex;align-items:center;gap:8px}.role-count{font-size:11px;color:hsl(var(--muted-foreground))}.role-desc{font-size:12px;color:hsl(var(--muted-foreground));line-height:1.4}.perm-mod{border:1px solid hsl(var(--border));border-radius:12px;margin-bottom:10px;overflow:hidden}.perm-mod-head{display:flex;align-items:center;gap:12px;padding:14px 16px;cursor:pointer;-webkit-user-select:none;user-select:none}.perm-mod-head:hover{background:hsl(var(--muted)/.35)}.perm-mod-head .modico{width:36px;height:36px;border-radius:9px;background:hsl(var(--muted));display:flex;align-items:center;justify-content:center;flex-shrink:0}.perm-mod-head .modico .ic{width:18px;height:18px;color:hsl(var(--foreground))}.perm-mod-title{flex:1}.perm-mod-title b{font-size:14px;font-weight:600;display:block}.perm-mod-title .sum{font-size:12px;color:hsl(var(--muted-foreground))}.perm-mod-head .modpill{font-size:11px;font-weight:600;padding:3px 10px;border-radius:999px;background:hsl(var(--muted));color:hsl(var(--muted-foreground))}.perm-mod-head .modpill.full{background:hsl(var(--green-bg));color:hsl(var(--green))}.perm-mod-head .modpill.none{background:hsl(var(--muted));color:hsl(var(--muted-foreground))}.perm-mod-head .acc-chev{width:18px;height:18px;color:hsl(var(--muted-foreground));transition:transform .18s ease}.perm-mod.open .acc-chev{transform:rotate(90deg)}.perm-mod-body{max-height:0;overflow:hidden;transition:max-height .24s ease}.perm-mod.open .perm-mod-body{max-height:500px}.perm-line{display:flex;justify-content:space-between;align-items:center;padding:13px 16px 13px 64px;border-top:1px solid hsl(var(--border))}.perm-line b{font-weight:500;font-size:13.5px}.login-screen{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:20px;background:hsl(var(--muted)/.4)}.login-card{width:100%;max-width:400px;background:hsl(var(--card));border:1px solid hsl(var(--border));border-radius:16px;padding:34px}.login-card .logo{width:48px;height:48px;font-size:20px;margin:0 auto 20px}.hidden{display:none!important}
