:root{font-family:Inter,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;--kit-bg: #e8eef6;--kit-surface: #ffffff;--kit-primary: #2563eb;--kit-primary-hover: #1d4ed8;--kit-primary-soft: #eff6ff;--kit-primary-muted: #bfdbfe;--kit-text: #102a43;--kit-text-secondary: #475569;--kit-text-muted: #64748b;--kit-border: #dbe3ef;--kit-shadow-sm: 0 8px 24px rgba(15, 23, 42, .08);--kit-shadow-md: 0 18px 40px rgba(15, 23, 42, .1);--kit-shadow-lg: 0 24px 60px rgba(15, 23, 42, .14);--kit-radius-sm: 12px;--kit-radius-md: 16px;--kit-radius-lg: 20px;--kit-radius-xl: 28px;--kit-success: #059669;--kit-warning: #d97706;--kit-danger: #dc2626;--kit-info: #2563eb;--sidebar-bg-top: #1e3a8a;--sidebar-bg-bottom: #0f172a;background:var(--kit-bg);color:var(--kit-text)}*{box-sizing:border-box}body{margin:0;min-height:100vh;background:radial-gradient(circle at top left,rgba(59,130,246,.1),transparent 28%),radial-gradient(circle at bottom right,rgba(37,99,235,.08),transparent 25%),#f8fbff}.dashboard-layout{display:grid;grid-template-columns:260px 1fr;min-height:100vh}.auth-layout{min-height:100vh;display:grid;place-items:center;padding:24px}.login-top-bar{position:fixed;top:20px;right:24px;z-index:10}.auth-layout .login-panel{width:min(1100px,100%)}.dashboard-sidebar{padding:28px 20px;display:flex;flex-direction:column;justify-content:space-between;min-height:100vh;background:linear-gradient(180deg,var(--sidebar-bg-top) 0%,var(--sidebar-bg-bottom) 100%);color:#f8fafc;border-right:none;box-shadow:4px 0 24px #0f172a2e}.sidebar-body{flex:1;display:flex;flex-direction:column;gap:28px}.dashboard-brand{display:flex;align-items:center;gap:14px;margin-bottom:0}.brand-icon{width:48px;height:48px;display:grid;place-items:center;border-radius:14px;background:#ffffff1f;color:#fff;font-size:1.3rem;box-shadow:none}.brand-title{font-size:1.15rem;font-weight:700;color:#f8fafc}.brand-subtitle{font-size:.92rem;color:#f8fafcb8}.dashboard-nav{display:grid;gap:18px}.nav-section{display:grid;gap:8px}.nav-section-label{padding:0 10px;font-size:.72rem;font-weight:800;letter-spacing:.08em;text-transform:uppercase;color:#bfdbfeb8}.nav-link{width:100%;text-align:left;padding:12px 14px;border-radius:var(--kit-radius-md);border:none;background:#ffffff0a;color:#dbeafe;font-size:.94rem;font-weight:600;cursor:pointer;transition:background .2s ease,color .2s ease,transform .2s ease;display:flex;align-items:center;gap:12px;min-height:46px}.nav-link.active{background:#ffffff29;box-shadow:inset 3px 0 #60a5fa;color:#fff}.nav-icon-wrap{width:34px;height:34px;display:grid;place-items:center;border-radius:10px;background:#ffffff14;flex-shrink:0;color:#dbeafe}.nav-link.active .nav-icon-wrap{background:#60a5fa47;color:#fff;box-shadow:none}.menu-toggle .nav-icon-wrap{width:auto;height:auto;background:transparent;color:#0f172a}.menu-toggle{display:none;width:44px;height:44px;border:1px solid #cbd5e1;border-radius:14px;background:#fff;cursor:pointer;flex-shrink:0;padding:0;place-items:center}.sidebar-footer{display:flex;flex-direction:column;gap:14px}.logout-button{width:100%;padding:14px 18px;border:none;border-radius:var(--kit-radius-md);background:#f97316;color:#fff;font-weight:700;cursor:pointer;transition:opacity .2s ease,transform .2s ease}.logout-button:hover{opacity:.92;transform:translateY(-1px)}.sidebar-note{font-size:.95rem;color:#cbd5e1;line-height:1.65}.dashboard-main{padding:32px 40px;min-width:0;overflow-x:clip}.dashboard-header{display:flex;justify-content:space-between;align-items:flex-start;gap:20px;margin-bottom:28px}.dashboard-header-main{display:flex;align-items:flex-start;gap:14px}.nav-link:hover{background:#ffffff1f;color:#fff;transform:translate(2px)}.nav-link:hover .nav-icon-wrap{color:#fff}.dashboard-sidebar .language-switcher{background:#ffffff14;border-color:#ffffff1f}.dashboard-sidebar .lang-btn{color:#dbeafe}.dashboard-sidebar .lang-btn.active{background:#ffffff2e;color:#fff;box-shadow:none}.sidebar-overlay{display:none;position:fixed;top:0;right:0;bottom:0;left:0;border:none;background:#0f172a73;z-index:90;cursor:pointer}.dashboard-header h1{margin:0;font-size:2.2rem;color:var(--kit-text);letter-spacing:-.02em}.dashboard-header p{margin:10px 0 0;color:var(--kit-text-secondary);max-width:620px}.status-chip{display:inline-flex;align-items:center;gap:8px;padding:12px 18px;border-radius:999px;background:var(--kit-primary-soft);color:var(--kit-primary);font-weight:700}.header-actions{display:flex;align-items:center;gap:12px;flex-shrink:0}.language-switcher{display:inline-flex;padding:4px;border-radius:999px;background:#f1f5f9;border:1px solid #e2e8f0;gap:4px}.lang-btn{border:none;background:transparent;color:#475569;font-weight:600;font-size:.85rem;padding:8px 12px;border-radius:999px;cursor:pointer}.lang-btn.active{background:#fff;color:var(--kit-primary);box-shadow:0 1px 3px #0f172a1f}.sidebar-lang{width:100%;justify-content:center}.dashboard-content{display:grid;gap:24px;min-width:0}.login-panel{display:grid;grid-template-columns:1.2fr .95fr;gap:28px;align-items:center}.auth-badge{display:inline-flex;align-items:center;padding:10px 16px;border-radius:999px;background:var(--kit-primary-soft);color:var(--kit-primary);font-weight:700;margin-bottom:22px;letter-spacing:.02em}.login-visual{display:grid;place-items:center;padding:24px;border-radius:32px;background:linear-gradient(180deg,#4318ff1a,#ffffffe6);box-shadow:var(--kit-shadow-md)}.login-visual img{width:100%;border-radius:24px;object-fit:contain;max-height:420px}.visual-note{margin-top:22px;color:#334155;font-size:.98rem;line-height:1.75}.hero-card{display:grid;grid-template-columns:1fr 420px;gap:28px;align-items:center;padding:32px;background:linear-gradient(135deg,#fff,#eff6ff);border:1px solid rgba(148,163,184,.2);border-radius:32px;box-shadow:0 22px 60px #0f172a14}.dashboard-summary-grid,.dashboard-quad-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:18px}.dashboard-stats-row .stat-card{min-height:132px}.client-traffic-page{display:grid;gap:20px}.client-traffic-toolbar .table-header{margin-bottom:0}.client-traffic-toolbar .client-filters{display:flex;flex-wrap:wrap;align-items:center;gap:10px}.client-traffic-day-picker{margin:0}.form-actions-inline{display:flex;flex-wrap:wrap;gap:10px;align-items:center}.client-traffic-stats{gap:20px}.client-traffic-stats .stat-card .stat-value{font-size:1.45rem;line-height:1.3;word-break:break-word}.client-traffic-table-card .table-wrap{margin-top:0}.client-traffic-chart-card .table-header,.client-traffic-chart-card h2{margin:0}.client-traffic-chart-card>p{margin:6px 0 0;color:var(--kit-text-muted)}.client-traffic-overview-charts{display:grid;gap:24px}.client-traffic-overview-chart-header h3{margin:0 0 4px;font-size:1rem}.nginx-log-page{display:grid;gap:20px}.nginx-log-meta{display:flex;flex-wrap:wrap;gap:12px 20px;margin-top:8px}.nginx-log-filters{display:flex;flex-wrap:wrap;gap:1rem;margin-top:12px}.nginx-log-filter{display:flex;flex-direction:column;gap:.35rem;min-width:220px}.nginx-log-filter span{font-size:.85rem;color:var(--muted, #64748b)}.nginx-log-filter select{min-width:220px}.nginx-log-section{display:grid;gap:12px}.nginx-log-section-header h2{margin:0 0 4px}.nginx-log-section-header p{margin:0;color:var(--muted, #64748b);font-size:.92rem}.nginx-log-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:16px}.nginx-log-top-card .table-header{margin-bottom:8px}.nginx-log-top-card h3{margin:0;font-size:1rem}.chart-card{background:#fff;border:1px solid #e2e8f0;border-radius:24px;padding:20px;box-shadow:0 20px 45px #0f172a0f;min-height:320px;display:flex;flex-direction:column}.chart-card-header h3{margin:0;font-size:1.05rem;color:#0f172a}.chart-card-header p{margin:8px 0 0;color:#64748b;font-size:.88rem;line-height:1.45}.chart-card-body{flex:1;display:flex;align-items:center;justify-content:center;margin-top:16px}.chart-card-body-table{align-items:stretch;justify-content:flex-start;width:100%}.chart-stack{display:grid;gap:18px;width:100%}.port-usage-bar{width:100%;max-width:280px;margin:0 auto}.port-usage-track{height:10px;border-radius:999px;background:#e2e8f0;overflow:hidden}.port-usage-fill{height:100%;border-radius:999px;background:linear-gradient(90deg,#f97316,#ef4444)}.port-usage-meta{display:flex;justify-content:space-between;gap:12px;margin-top:10px;font-size:.84rem;color:#64748b}.port-usage-meta strong{color:#0f172a;font-size:.95rem}.dashboard-client-charts{grid-template-columns:repeat(2,minmax(0,1fr))}.chart-card-assignment{min-height:auto;width:100%;margin-bottom:18px;padding:24px 28px}.chart-card-assignment .chart-card-body-table{margin-top:20px;min-height:0}.table-wrap-assignment{width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:1px solid #e2e8f0;border-radius:16px;background:#f8fafc}.chart-card-assignment .user-table{width:100%;min-width:760px}.chart-card-assignment .user-table th,.chart-card-assignment .user-table td{padding:16px 18px;font-size:.95rem}.chart-card-assignment .user-table th{background:#f1f5f9;font-size:.88rem;text-transform:uppercase;letter-spacing:.03em}.table-wrap-flat{border:none;box-shadow:none}.chart-empty{color:#94a3b8;font-weight:600;text-align:center;padding:24px 12px}.donut-chart-wrap{display:grid;gap:16px;width:100%}.donut-chart{width:148px;height:148px;border-radius:50%;margin:0 auto;display:grid;place-items:center}.donut-hole{width:88px;height:88px;border-radius:50%;background:#fff;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;box-shadow:inset 0 0 0 1px #e2e8f0}.donut-hole strong{font-size:1.35rem;color:#0f172a}.donut-hole span{font-size:.75rem;color:#64748b}.chart-legend{list-style:none;margin:0;padding:0;display:grid;gap:8px}.chart-legend li{display:grid;grid-template-columns:12px 1fr auto;gap:8px;align-items:center;font-size:.85rem;color:#475569}.legend-dot{width:10px;height:10px;border-radius:50%}.legend-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.bar-chart{width:100%}.vertical-bar-chart{display:grid;grid-template-columns:repeat(auto-fit,minmax(42px,1fr));gap:10px;align-items:end;min-height:180px}.bar-col{display:flex;flex-direction:column;align-items:center;gap:8px;min-width:0}.bar-value{font-size:.78rem;font-weight:700;color:#334155}.bar-track{width:100%;max-width:36px;height:120px;background:#f1f5f9;border-radius:10px;display:flex;align-items:flex-end;overflow:hidden}.bar-fill{width:100%;border-radius:10px 10px 4px 4px;transition:height .3s ease}.bar-label{font-size:.72rem;color:#64748b;text-align:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:100%}.line-chart-wrap{width:100%}.line-chart{width:100%;height:auto;display:block}.line-chart-area{fill:#0ea5e926}.line-chart-line{fill:none;stroke:#0ea5e9;stroke-width:3;stroke-linecap:round;stroke-linejoin:round}.line-chart-dot{fill:#0ea5e9;stroke:#fff;stroke-width:2}.line-chart-labels{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:4px;margin-top:8px;font-size:.72rem;color:#64748b;text-align:center}.horizontal-bar-chart{display:grid;gap:10px;width:100%}.hbar-row{display:grid;grid-template-columns:minmax(0,72px) 1fr auto;gap:8px;align-items:center}.hbar-label{font-size:.78rem;color:#475569;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.hbar-track{height:10px;background:#f1f5f9;border-radius:999px;overflow:hidden}.hbar-fill{height:100%;border-radius:999px}.hbar-value{font-size:.78rem;font-weight:700;color:#334155;min-width:20px;text-align:right}.stat-card{background:var(--kit-surface);border:1px solid var(--kit-border);border-radius:var(--kit-radius-xl);padding:24px;box-shadow:var(--kit-shadow-md)}.stat-card .stat-label{font-size:.95rem;color:var(--kit-text-muted);margin-bottom:10px;font-weight:600}.stat-card .stat-value{font-size:2rem;font-weight:800;color:var(--kit-text);letter-spacing:-.02em}.stat-card .stat-detail{margin-top:10px;color:var(--kit-text-secondary);font-weight:700}.stat-purple{border-color:#d9cffd;background:linear-gradient(180deg,#fff,#faf8ff)}.stat-green{border-color:#b7f0df;background:linear-gradient(180deg,#fff,#f6fffc)}.stat-blue{border-color:#c9d8ff;background:linear-gradient(180deg,#fff,#f8faff)}.stat-orange{border-color:#ffe2b8;background:linear-gradient(180deg,#fff,#fffaf3)}.compact-table th,.compact-table td{font-size:.8rem;padding:8px 10px}.activity-log-wrap{width:100%;max-height:min(420px,48vh);overflow:auto;-webkit-overflow-scrolling:touch;border:1px solid #e2e8f0;border-radius:14px;background:#fff}.activity-log-page-wrap{max-height:min(560px,62vh)}.activity-log-wrap .user-table,.activity-log-page-wrap .user-table{min-width:720px}.activity-log-table--admin{min-width:980px}.activity-log-wrap .user-table thead th,.activity-log-page-wrap .user-table thead th{position:sticky;top:0;z-index:1;background:#f3f4f6fa;box-shadow:0 1px #e2e8f0}.activity-log-wrap .user-table th,.activity-log-wrap .user-table td,.activity-log-page-wrap .user-table th,.activity-log-page-wrap .user-table td{padding:9px 12px;vertical-align:middle;font-size:.84rem}.activity-log-col-time{min-width:140px;white-space:nowrap}.activity-log-col-target{min-width:120px;max-width:200px;word-break:break-word;overflow-wrap:anywhere}.activity-log-col-ip,.activity-log-col-request{min-width:110px;max-width:180px;word-break:break-all;overflow-wrap:anywhere}.activity-log-col-details{min-width:180px;max-width:320px;word-break:break-word;overflow-wrap:anywhere}.activity-log-wrap .rule-subtext,.activity-log-page-wrap .rule-subtext{max-width:none;margin-top:4px;word-break:break-word;overflow-wrap:anywhere}.activity-log-card{min-width:0;overflow:hidden}.activity-log-filters{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:14px;margin-bottom:18px}.table-search-bar{display:flex;flex-wrap:wrap;align-items:center;gap:10px;margin-bottom:16px}.table-search-bar input[type=search]{flex:1 1 220px;min-width:0;max-width:360px}.activity-log-filters label{display:grid;gap:6px;font-size:.85rem;color:#475569}.activity-log-filters select,.activity-log-filters input{width:100%;border:1px solid #e2e8f0;border-radius:12px;padding:10px 12px;font:inherit;background:#fff}.activity-log-pagination{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-top:16px;color:#64748b;font-size:.9rem}.pagination-controls{display:flex;align-items:center;gap:10px}.grants-form{display:grid;gap:24px;margin-top:8px}.grants-section{display:grid;gap:12px;padding:18px;border:1px solid #e2e8f0;border-radius:18px;background:#f8fafc}.grants-section-header{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.grants-section-header h3{margin:0;font-size:1rem}.grants-section-header p{margin:6px 0 0;color:#64748b;font-size:.88rem}.grants-empty{margin:0;color:#94a3b8;font-size:.9rem}.grant-row{display:grid;grid-template-columns:minmax(180px,1fr) 1fr auto;gap:12px;align-items:end}.grant-row-server{align-items:start}.permission-checkboxes{display:grid;gap:8px}.permission-checkboxes-label{font-size:.85rem;color:#475569}.permission-checkboxes-row{display:flex;flex-wrap:wrap;gap:10px 14px}.permission-checkbox{display:inline-flex;align-items:center;gap:6px;font-size:.85rem;color:#334155;cursor:pointer}.permission-checkbox.disabled{opacity:.45;cursor:not-allowed}.permission-checkbox input{width:16px;height:16px;accent-color:#2563eb}.grant-row label{display:grid;gap:6px;font-size:.85rem;color:#475569}.grant-row select{width:100%;border:1px solid #e2e8f0;border-radius:12px;padding:10px 12px;font:inherit;background:#fff}.log-action-chip{display:inline-flex;padding:4px 10px;border-radius:999px;background:#eff6ff;color:#1d4ed8;font-size:.85rem;font-weight:600;white-space:nowrap}.dashboard-panel-grid{display:grid;grid-template-columns:2fr 1fr;gap:20px}.dashboard-tables-row,.dashboard-small-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.panel-card{background:#fff;border:1px solid #e2e8f0;border-radius:28px;padding:24px;box-shadow:0 22px 55px #0f172a0f}.panel-header{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-bottom:18px}.panel-header h3{margin:0;font-size:1.15rem}.panel-badge{display:flex;gap:8px}.badge-pill{display:inline-flex;align-items:center;justify-content:center;padding:8px 12px;border-radius:999px;font-size:.8rem;font-weight:700;color:#fff}.badge-income{background:#f43f5e}.badge-outcome{background:#8b5cf6}.port-block-status{display:inline-flex;align-items:center;padding:4px 10px;border-radius:999px;font-size:.78rem;font-weight:700;line-height:1.2}.port-block-status-available{background:#dcfce7;color:#166534;border:1px solid #86efac}.port-block-status-assigned{background:#fee2e2;color:#991b1b;border:1px solid #fca5a5}.action-list{display:grid;gap:14px}.action-item{display:flex;justify-content:space-between;align-items:center;padding:16px;border-radius:18px;background:#f8fafc;color:#0f172a;font-weight:700}.info-icon{width:28px;height:28px;display:inline-flex;align-items:center;justify-content:center;border-radius:50%;background:#eef2ff;color:#4338ca;font-size:.9rem}.tab-pill-group{display:inline-flex;gap:8px}.tab-pill{border:none;border-radius:999px;padding:8px 14px;background:#f1f5f9;color:#475569;cursor:pointer;font-weight:700}.tab-pill.active{background:#4338ca;color:#fff}.panel-card img{width:100%;border-radius:22px;margin-top:10px}.hero-card img{width:100%;max-width:100%;border-radius:26px}.hero-card .eyebrow{margin:0 0 12px;font-size:.95rem;color:#2563eb;font-weight:700}.hero-card h2{margin:0 0 16px;font-size:2rem;line-height:1.1}.auth-panel,.form-card{background:#fffffff5;border:1px solid rgba(148,163,184,.2);border-radius:28px;box-shadow:0 24px 60px #0f172a14;padding:32px}.auth-panel h2,.form-card h2{margin:0 0 10px;font-size:1.65rem}.auth-panel p,.form-card p{margin:0 0 24px;color:#475569}.form-card{max-width:720px}.form-card-wide{max-width:960px}.form-card-top{display:flex;justify-content:space-between;align-items:flex-start;gap:16px;margin-bottom:8px}.firewall-form{margin-top:8px}.form-section{border:1px solid #e2e8f0;border-radius:22px;background:#f8fafc;overflow:hidden}.form-section-header{padding:18px 20px 0}.form-section-header h3{margin:0;font-size:1.05rem;color:#0f172a}.form-section-header p{margin:6px 0 0;color:#64748b;font-size:.92rem}.form-section-body{display:grid;gap:16px;padding:18px 20px 20px}.feature-grants-list{display:grid;gap:12px}.feature-grant-row{display:grid;gap:10px;padding:14px 16px;border:1px solid #e2e8f0;border-radius:10px;background:#fff}.feature-grant-toggle{display:flex;align-items:flex-start;gap:10px}.feature-grant-toggle strong{display:block}.feature-grant-toggle small{display:block;margin-top:4px;color:#64748b;font-size:.88rem}.admin-user-security-section{margin-top:20px}.admin-user-security-status{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:12px 14px;border-radius:10px;background:#f8fafc;border:1px solid #e2e8f0}.admin-user-reset-password{display:grid;gap:12px}.form-row{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:16px}.ip-list{display:grid;gap:10px}.ip-list-header strong{display:block;margin-bottom:4px}.ip-list-header p{margin:0;color:#64748b;font-size:.92rem}.ip-list-row{display:grid;grid-template-columns:1fr auto;gap:10px;align-items:center}.ip-list-add{justify-self:start}.ip-chip-row{display:flex;flex-wrap:wrap;gap:6px;font-weight:600}.ip-chip{display:inline-flex;align-items:center;padding:4px 10px;border-radius:999px;background:#e2e8f0;color:#334155;font-size:.85rem;font-weight:600}.client-management{display:grid;gap:20px}.client-management .table-wrap{max-height:min(440px,52vh);overflow:auto;-webkit-overflow-scrolling:touch;border:1px solid #e2e8f0;border-radius:14px;background:#fff}.client-management .user-table thead th{position:sticky;top:0;z-index:1;background:#f3f4f6fa;box-shadow:0 1px #e2e8f0}.client-management .user-table th,.client-management .user-table td{padding:12px 14px}.client-management .table-card{min-height:0}.client-toolbar{display:flex;flex-wrap:wrap;gap:12px;align-items:end;justify-content:space-between}.client-toolbar-filter{display:grid;gap:6px;min-width:220px}.client-toolbar-filter span{color:#64748b;font-size:.92rem;font-weight:600}.tab-row{display:flex;flex-wrap:wrap;gap:10px}.tab-btn{border:1px solid #cbd5e1;background:#fff;color:#334155;border-radius:999px;padding:10px 16px;font-weight:700;cursor:pointer}.tab-btn.active{background:#0f172a;border-color:#0f172a;color:#fff}.client-tab-grid{display:grid;grid-template-columns:minmax(0,2fr) minmax(280px,1fr);gap:20px;align-items:start}.pagination-row{display:flex;align-items:center;justify-content:flex-end;gap:12px;padding:16px 20px 20px}.table-pagination{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;padding:14px 20px 18px;border-top:1px solid #e2e8f0;color:#64748b;font-size:.9rem}.table-pagination-total{font-weight:600;color:#475569}.table-pagination-controls{display:flex;align-items:center;gap:10px;flex-wrap:nowrap;margin-left:auto}.table-pagination-page-select{display:inline-flex;align-items:center;gap:8px;font-weight:600;color:#334155;white-space:nowrap}.table-pagination-page-select select{width:auto;min-width:72px;padding:8px 10px;border-radius:10px}.stacked-bar-chart{display:grid;gap:12px}.stacked-bar-row{display:grid;grid-template-columns:88px 1fr 36px;gap:10px;align-items:center}.stacked-bar-label{font-size:.82rem;font-weight:600;color:#334155;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.stacked-bar-track{display:flex;gap:2px;min-height:14px;align-items:stretch}.stacked-bar-used{background:#ef4444;border-radius:999px 0 0 999px;min-width:4px}.stacked-bar-available{background:#22c55e;border-radius:0 999px 999px 0;min-width:4px}.stacked-bar-value{font-size:.82rem;font-weight:700;text-align:right}.stacked-bar-legend{display:flex;gap:16px;flex-wrap:wrap;font-size:.82rem;color:#64748b}.stacked-bar-legend .legend-dot{display:inline-block;width:10px;height:10px;border-radius:999px;margin-right:6px}.client-assignment-card{margin-bottom:4px}.login-mode-tabs{display:flex;gap:8px;margin-bottom:16px}.login-mode-tab{flex:1;border:1px solid #cbd5e1;background:#fff;border-radius:10px;padding:10px 12px;font-weight:700;cursor:pointer}.login-mode-tab.active{background:#0f172a;color:#fff;border-color:#0f172a}.form-hint{margin:0;color:#64748b;font-size:.92rem}@media (max-width: 960px){.client-tab-grid{grid-template-columns:1fr}}.protocol-toggle{align-items:flex-start}.protocol-toggle strong{display:block;margin-bottom:4px}.protocol-toggle small{display:block;color:#64748b;font-weight:500}.protocol-fields-disabled{opacity:.55}.flag-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(110px,1fr));gap:10px}.flag-checkbox{margin:0}.rule-name-cell{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.rule-meta-chip,.protocol-badge,.action-pill{display:inline-flex;align-items:center;padding:4px 10px;border-radius:999px;font-size:.78rem;font-weight:700}.rule-meta-chip{background:#e0f2fe;color:#0369a1}.protocol-badge-row{display:flex;gap:6px;flex-wrap:wrap}.protocol-badge{color:#fff}.protocol-tcp{background:#2563eb}.protocol-udp{background:#059669}.protocol-icmp{background:#7c3aed}.protocol-any{background:#94a3b8;color:#fff}.action-pill{color:#fff}.action-allow{background:#16a34a}.action-drop{background:#dc2626}.rule-subtext{margin-top:6px;color:#64748b;font-size:.85rem;line-height:1.45;max-width:320px}.field-hint{font-weight:400;color:#64748b;font-size:.85rem}.priority-cell{font-variant-numeric:tabular-nums;font-weight:600;color:#475569;white-space:nowrap}.rules-drag-hint{margin-top:6px;font-size:.85rem;color:#64748b;font-weight:400}.rule-drag-handle{cursor:grab;color:#94a3b8;font-size:.95rem;line-height:1;-webkit-user-select:none;user-select:none;display:inline-block;margin-right:8px;vertical-align:middle}.rule-drag-handle:active{cursor:grabbing}tr.rule-row-dragging{opacity:.55}tr.rule-row-drop-target{outline:2px solid #3b82f6;outline-offset:-2px}tr.rule-row-inactive td{opacity:.72}.firewall-presets-modal .preset-list{display:grid;gap:10px}.firewall-presets-modal .preset-item{display:grid;grid-template-columns:auto 1fr;gap:12px;align-items:start;padding:12px 14px;border:1px solid #e2e8f0;border-radius:12px;cursor:pointer}.firewall-presets-modal .preset-item strong{display:block;margin-bottom:4px}.firewall-presets-modal .preset-item small{color:#64748b;font-weight:400;line-height:1.45}.firewall-presets-modal .preset-category-toggle{margin-top:6px}.firewall-presets-modal .modal-actions{display:flex;justify-content:flex-end;gap:10px;margin-top:8px}.table-action.rule-toggle-active{color:#166534;border-color:#86efac;background:#f0fdf4}.table-action.rule-toggle-inactive{color:#64748b}.form-stack{display:grid;gap:18px}label{display:grid;gap:10px;font-weight:600;color:#1e293b}.form-checkbox{display:flex;align-items:center;gap:10px;padding:14px 16px;border-radius:16px;background:#f8fafc;border:1px solid #cbd5e1;cursor:pointer;font-weight:700}.form-checkbox input{width:auto;margin:0}.form-checkbox.disabled{opacity:.55;cursor:not-allowed}.form-checkbox.disabled input{cursor:not-allowed}.proxy-port-usage{display:flex;flex-wrap:wrap;align-items:center;gap:12px;padding:14px 16px;border-radius:16px;background:#f8fafc;border:1px solid #cbd5e1}.proxy-port-usage .form-hint{flex-basis:100%;margin:0}.client-proxy-panel{width:100%}.client-proxy-vts-detail{display:grid;gap:14px}.proxy-form-card{width:100%;max-width:none}.proxy-form-card .form-stack{width:100%}.proxy-form-card .form-card-top{margin-bottom:8px}.assignment-picker{display:grid;gap:10px}.assignment-picker-head{display:flex;align-items:center;justify-content:space-between;gap:12px}.assignment-picker-count{font-size:.84rem;font-weight:600;color:#64748b}.assignment-picker-search input,.port-single-search{width:100%;margin-top:2px}.port-single-search{margin-bottom:8px}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.proxy-port-collapsible{border:1px solid #e2e8f0;border-radius:16px;background:#f8fafc;overflow:hidden}.proxy-port-collapsible-toggle{width:100%;display:grid;grid-template-columns:auto 1fr auto;gap:12px;align-items:center;padding:14px 16px;border:none;background:transparent;cursor:pointer;text-align:left}.proxy-port-collapsible-toggle:hover{background:#f1f5f9}.proxy-port-collapsible-title{font-weight:700;color:#0f172a;white-space:nowrap}.proxy-port-collapsible-summary{color:#64748b;font-size:.88rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.proxy-port-collapsible-icon{color:#64748b;font-size:1.1rem;line-height:1}.proxy-port-collapsible-body{display:grid;gap:14px;padding:0 16px 16px;border-top:1px solid #e2e8f0}.proxy-advanced-collapsible{margin-top:4px}.advanced-fields-grid{display:grid;gap:14px;grid-template-columns:repeat(auto-fill,minmax(220px,1fr))}.advanced-field{display:grid;gap:6px;font-size:.9rem}.advanced-field>span:first-child{font-weight:600;color:#334155}.multi-tag-input{border:1px solid #cbd5e1;border-radius:8px;background:#fff;min-height:42px;padding:6px 8px}.multi-tag-list{display:flex;flex-wrap:wrap;gap:6px;align-items:center}.multi-tag-chip{display:inline-flex;align-items:center;gap:4px;padding:2px 8px;border-radius:999px;background:#e2e8f0;color:#334155;font-size:.85rem}.multi-tag-chip button{border:none;background:transparent;color:#64748b;cursor:pointer;font-size:1rem;line-height:1;padding:0}.multi-tag-field{flex:1 1 120px;min-width:120px;border:none;outline:none;background:transparent;font:inherit;padding:4px 2px}.assignment-options{display:grid;gap:8px}.assignment-options-scroll{max-height:280px;overflow:auto;padding-right:4px}.proxy-access-control{display:grid;gap:16px;padding:18px;border:1px solid #e2e8f0;border-radius:16px;background:#f8fafc}.proxy-access-control-head strong{display:block;color:#0f172a;margin-bottom:4px}.access-rule-section{display:grid;gap:10px}.access-rule-section-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.access-rule-section-title{display:grid;gap:8px;flex:1}.access-policy-select{display:flex;align-items:center;gap:8px;font-size:.92rem;color:#475569}.access-policy-select select{min-width:160px}.server-monitor-card{display:grid;gap:14px}.server-monitor-status{display:flex;align-items:center;gap:12px;flex-wrap:wrap}.server-monitor-grid{display:grid;gap:12px;grid-template-columns:repeat(auto-fit,minmax(180px,1fr))}.server-metric-bar{display:grid;gap:6px;padding:12px;border-radius:12px;background:#fff;border:1px solid #e2e8f0}.server-metric-bar-head{display:flex;justify-content:space-between;gap:8px}.server-metric-track{height:8px;border-radius:999px;background:#e2e8f0;overflow:hidden}.server-metric-fill{height:100%;border-radius:999px;background:#22c55e}.metric-warning .server-metric-fill,.metric-danger .server-metric-fill{background:#f59e0b}.metric-danger .server-metric-fill{background:#ef4444}.server-monitor-meta{display:grid;gap:8px;grid-template-columns:repeat(auto-fit,minmax(220px,1fr))}.server-monitor-meta div{display:grid;gap:4px}.nginx-vts-filters{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:12px}.nginx-vts-filters label{display:grid;gap:6px;font-size:.82rem;color:#64748b}.nginx-vts-filters select{width:100%}.nginx-vts-card{display:grid;gap:14px}.nginx-vts-summary{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:12px}.nginx-vts-summary div{display:grid;gap:4px;padding:12px 14px;border-radius:12px;background:#fff;border:1px solid #e2e8f0}.nginx-vts-summary span{font-size:.82rem;color:#64748b}.nginx-vts-summary strong{font-size:.95rem}.nginx-vts-summary small{color:#475569}.nginx-vts-table-block{display:grid;gap:10px}.nginx-vts-table-block h3{margin:0;font-size:1rem}.nginx-vts-table-wrap{max-height:360px;overflow:auto}.firewall-rules-table-wrap{max-height:min(480px,58vh);overflow:auto;-webkit-overflow-scrolling:touch}.firewall-rules-table-wrap .user-table thead th{position:sticky;top:0;z-index:1;background:#f3f4f6fa;box-shadow:0 1px #e2e8f0}.nginx-vts-table code{font-size:.82rem;word-break:break-all}.nginx-vts-responses{display:flex;flex-wrap:wrap;gap:6px 10px;font-size:.78rem;color:#475569}.nginx-vts-cache span{color:#0369a1}.nginx-vts-table-wide{min-width:960px}.server-alert-list{display:grid;gap:8px}.server-alert-item{display:flex;align-items:center;gap:10px;padding:10px 12px;border-radius:10px;background:#fef2f2;border:1px solid #fecaca}.server-monitor-network-chart{display:grid;gap:10px;padding:14px;border-radius:14px;background:#fff;border:1px solid #e2e8f0}.server-monitor-chart-head{display:flex;align-items:baseline;justify-content:space-between;gap:12px;flex-wrap:wrap}.server-monitor-chart-head h3{margin:0;font-size:1rem}.nginx-vts-intraday-header{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;flex-wrap:wrap}.nginx-vts-day-picker{display:grid;gap:6px;font-size:.82rem;min-width:140px}.nginx-vts-day-picker select{width:100%}.proxy-vts-intraday-chart-wrap,.proxy-vts-daily-chart-wrap{display:grid;gap:8px}.proxy-vts-daily-chart{width:100%;height:auto}.proxy-vts-bar-rcvd{fill:#22c55e}.proxy-vts-bar-sent{fill:#2563eb}.proxy-vts-daily-chart-labels{display:flex;justify-content:space-between;gap:8px;font-size:.78rem;color:#64748b}.proxy-vts-daily-chart-label-live{color:#0369a1;font-weight:600}.nginx-vts-chart-block-header{display:grid;gap:4px}.nginx-vts-chart-block-header h3{margin:0}.host-network-chart-wrap{display:grid;gap:8px}.area-line-chart-wrap{display:grid;gap:10px;width:100%}.area-line-chart-canvas{position:relative;width:100%;aspect-ratio:2 / 1}.area-line-chart-y-labels{position:absolute;inset:0 auto 0 0;pointer-events:none;z-index:1}.area-line-chart-y-label{position:absolute;right:8px;transform:translateY(-50%);color:#64748b;font-size:.78rem;line-height:1;white-space:nowrap}.area-line-chart{width:100%;height:auto;display:block}.area-line-chart-legend{display:flex;flex-wrap:wrap;gap:14px;font-size:.85rem;font-weight:600;color:#334155}.area-line-chart-legend-item{display:inline-flex;align-items:center;gap:8px}.area-line-chart-legend-dot{width:10px;height:10px;border-radius:999px}.area-line-chart-grid{stroke:#e2e8f0;stroke-width:1;stroke-dasharray:5 5}.area-line-chart-axis{stroke:#cbd5e1;stroke-width:1}.area-line-chart-line{fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round}.area-line-chart-hover-line{stroke:#94a3b8;stroke-width:1}.area-line-chart-hover-dot{stroke:#fff;stroke-width:2}.area-line-chart-hit{cursor:crosshair}.area-line-chart-tooltip{position:absolute;top:8px;transform:translate(-50%);min-width:140px;padding:10px 12px;border-radius:10px;background:#fff;border:1px solid #e2e8f0;box-shadow:0 10px 24px #0f172a1f;pointer-events:none;z-index:2}.area-line-chart-tooltip-date{font-size:.82rem;font-weight:700;color:#0f172a;margin-bottom:8px}.area-line-chart-tooltip-row{display:grid;grid-template-columns:auto 1fr auto;gap:8px;align-items:center;font-size:.8rem;color:#475569}.area-line-chart-tooltip-row+.area-line-chart-tooltip-row{margin-top:6px}.area-line-chart-tooltip-dot{width:8px;height:8px;border-radius:999px}.area-line-chart-x-labels{display:flex;justify-content:space-between;gap:8px;color:#64748b;font-size:.78rem;box-sizing:border-box}.ddos-line-chart-wrap{display:grid;gap:6px}.host-network-chart-legend{display:flex;gap:16px;font-size:.85rem;font-weight:600}.host-network-legend-rx:before,.host-network-legend-tx:before{content:"";display:inline-block;width:10px;height:10px;border-radius:999px;margin-right:6px}.host-network-legend-rx:before{background:#22c55e}.host-network-legend-tx:before{background:#2563eb}.host-network-chart{width:100%;height:auto}.host-network-axis{stroke:#cbd5e1;stroke-width:1}.host-network-grid-line{stroke:#e2e8f0;stroke-width:1;stroke-dasharray:4 4}.host-network-y-label{fill:#64748b;font-size:10px;font-family:ui-sans-serif,system-ui,sans-serif}.host-network-line-rx{fill:none;stroke:#22c55e;stroke-width:2.5;stroke-linejoin:round;stroke-linecap:round}.host-network-line-tx{fill:none;stroke:#2563eb;stroke-width:2.5;stroke-linejoin:round;stroke-linecap:round}.host-network-chart-labels{display:flex;justify-content:space-between;gap:8px;color:#64748b;font-size:.78rem;box-sizing:border-box}.status-pill{display:inline-flex;align-items:center;padding:4px 10px;border-radius:999px;font-size:.82rem;font-weight:600}.status-ok{background:#dcfce7;color:#166534}.status-danger{background:#fee2e2;color:#991b1b}.form-error-inline{color:#b91c1c;margin:0}.access-rule-list{display:grid;gap:10px}.access-rule-row{display:grid;grid-template-columns:140px 1fr auto;gap:10px;align-items:center}.access-rule-row select,.access-rule-row input{width:100%}.page-rule-list{display:grid;gap:16px}.page-rule-section-head{display:flex;justify-content:flex-end;margin-bottom:12px}.page-rule-card{display:grid;gap:16px;padding:18px;border:1px solid #dbeafe;border-radius:16px;background:#fff;min-width:0;overflow:hidden}.page-rule-card-head{display:flex;align-items:center;justify-content:space-between;gap:12px}.page-rule-header-list{display:grid;gap:10px}.page-rule-header-list-head{display:flex;align-items:center;justify-content:space-between;gap:12px}.page-rule-header-rows{display:grid;gap:10px}.page-rule-header-row{display:grid;grid-template-columns:1fr 1fr auto;gap:10px;align-items:center}.page-rule-fields-grid{display:grid;gap:14px;grid-template-columns:minmax(0,1fr)}.page-rule-fields-grid>label{display:grid;gap:6px;min-width:0}.page-rule-field-label{font-weight:600;color:#334155;font-size:.9rem}@media (min-width: 720px){.page-rule-fields-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (min-width: 1100px){.page-rule-fields-grid{grid-template-columns:repeat(3,minmax(0,1fr))}}.page-rule-cache-field{grid-column:1 / -1;display:grid;gap:8px;min-width:0}.page-rule-cache-controls{display:flex;flex-wrap:wrap;gap:8px;align-items:center}.page-rule-cache-controls select,.page-rule-cache-controls input{flex:1 1 180px;width:auto;min-width:0;max-width:100%}.page-rule-cache-field span{color:#334155;font-size:.92rem}.proxy-page-rules-collapsible,.proxy-waf-collapsible{margin-top:4px}.waf-enable-toggle{margin-bottom:12px}.waf-groups-section{display:grid;gap:10px;margin-bottom:16px}.waf-groups-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:8px 12px}.waf-custom-section{display:grid;gap:12px;margin-bottom:16px}.page-rule-fields-span-2{grid-column:1 / -1}@media (max-width: 680px){.access-rule-row,.page-rule-header-row{grid-template-columns:1fr}}input,select{width:100%;padding:14px 16px;border-radius:16px;border:1px solid #cbd5e1;background:#f8fafc;font-size:.97rem;color:#102a43}input:focus,select:focus{outline:none;border-color:var(--kit-primary);box-shadow:0 0 0 4px #4318ff1f}button,.primary-btn,.secondary-btn,.danger-btn,.outline-btn,.ghost-btn{border:none;border-radius:var(--kit-radius-md);padding:12px 20px;font-weight:700;font-size:.94rem;cursor:pointer;transition:transform .15s ease,box-shadow .15s ease,background .15s ease,opacity .15s ease}.primary-btn{background:linear-gradient(135deg,#2563eb,#1d4ed8);color:#fff;box-shadow:0 12px 24px #2563eb3d}.primary-btn:hover:not(:disabled){transform:translateY(-1px);box-shadow:0 16px 28px #2563eb47}.primary-btn:disabled,.secondary-btn:disabled{opacity:.55;cursor:not-allowed;transform:none;box-shadow:none}.secondary-btn{background:var(--kit-surface);color:var(--kit-text);border:1px solid var(--kit-border);box-shadow:var(--kit-shadow-sm)}.secondary-btn:hover{background:var(--kit-primary-soft);border-color:var(--kit-primary-muted);color:var(--kit-primary)}.outline-btn{background:var(--kit-surface);color:var(--kit-primary);border:1px solid var(--kit-primary-muted);box-shadow:none;padding:8px 14px;font-size:.84rem}.outline-btn:hover{background:var(--kit-primary-soft);border-color:var(--kit-primary)}.ghost-btn{background:transparent;color:var(--kit-text-secondary);border:1px solid transparent;padding:8px 14px;font-size:.84rem}.ghost-btn:hover{background:var(--kit-bg);color:var(--kit-primary)}.danger-btn{background:linear-gradient(135deg,#ee5d50,#dc2626);color:#fff;box-shadow:0 12px 24px #ee5d503d}button:hover,.danger-btn:hover,.logout-button:hover{opacity:1}.card-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:20px}.metric-card{background:#fff;border:1px solid #e2e8f0;border-radius:24px;padding:24px;box-shadow:0 18px 40px #0f172a0f}.metric-card h3{margin:0 0 12px;font-size:1.1rem}.metric-card p{margin:0 0 20px;color:#475569}.table-card{background:#fffffff5;border:1px solid rgba(148,163,184,.22);border-radius:var(--kit-radius-xl);box-shadow:var(--kit-shadow-md);padding:28px;min-width:0;max-width:100%}.form-card,.chart-card,.panel-card,.metric-card{min-width:0;max-width:100%}.server-detail-layout{display:grid;gap:20px}.server-info-card{margin-bottom:0}.server-info-grid{display:grid;grid-template-columns:1fr;gap:14px}.server-info-card,.server-info-range-block{display:grid;gap:6px;padding:14px 16px;border-radius:16px;background:#f8fafc;border:1px solid #e2e8f0}.server-info-card-label{color:#64748b;font-size:.85rem;font-weight:600}.server-info-empty{color:#0f172a;min-height:120px;display:flex;align-items:flex-start}.server-info-stats-row,.server-info-range-row,.server-info-triple-row,.server-info-pair-row{display:grid;gap:14px}.server-info-stats-row{grid-template-columns:repeat(5,minmax(0,1fr))}.server-info-range-row{grid-template-columns:repeat(2,minmax(0,1fr));align-items:stretch}.server-info-triple-row{grid-template-columns:repeat(3,minmax(0,1fr))}.server-info-pair-row{grid-template-columns:repeat(2,minmax(0,1fr))}.server-info-range-block{grid-template-rows:auto minmax(120px,1fr);min-height:168px}.server-info-range-row>.server-info-range-block:only-child{grid-column:1 / -1}.server-info-grid span{color:#64748b;font-size:.85rem;font-weight:600}.server-info-grid strong{color:#0f172a}.server-info-span-2{grid-column:1 / -1}.server-info-range-block .cidr-chip-scroll{height:120px;max-height:120px;min-height:120px;overflow:auto;-webkit-overflow-scrolling:touch;padding:2px 2px 2px 0}@media (max-width: 1100px){.server-info-stats-row{grid-template-columns:repeat(3,minmax(0,1fr))}}@media (max-width: 900px){.server-info-stats-row,.server-info-triple-row,.server-info-pair-row,.server-info-range-row{grid-template-columns:1fr}}.cidr-chip-row{display:flex;flex-wrap:wrap;gap:6px}.cidr-chip{display:inline-flex;align-items:center;padding:4px 8px;border-radius:8px;background:#eef2ff;color:#3730a3;font-size:.78rem;font-weight:600;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.3}.code-textarea{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:.82rem;line-height:1.45}.locked-server-banner{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:14px 16px;border-radius:16px;background:#eff6ff;border:1px solid #bfdbfe}.locked-server-banner span{color:#64748b;font-weight:600}.locked-server-banner strong{color:#1d4ed8}.impersonation-banner{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;margin:-8px 0 20px;padding:14px 18px;border-radius:16px;border:1px solid #fcd34d;background:#fffbeb;color:#92400e;font-weight:600}.impersonation-banner span{flex:1 1 220px}.table-action-primary{background:#0f172a;color:#fff;border-color:#0f172a}.table-header{display:flex;justify-content:space-between;align-items:center;gap:18px;margin-bottom:22px}.table-header-actions{display:flex;align-items:center;gap:10px;flex-wrap:nowrap;flex-shrink:0}.table-header-actions select{width:auto;min-width:180px;max-width:min(260px,42vw);flex:0 1 auto;padding:10px 14px}.table-header-actions .secondary-btn,.table-header-actions .primary-btn{flex:0 0 auto;white-space:nowrap;padding:8px 14px;font-size:.82rem}.table-header-actions .form-checkbox{width:auto;flex:0 0 auto;white-space:nowrap;padding:10px 14px;margin:0}.client-filters{display:flex;flex-wrap:wrap;gap:10px;align-items:center;justify-content:flex-end}@media (max-width: 980px){.table-header{flex-direction:column;align-items:stretch}.table-header-actions,.client-filters{flex-wrap:wrap;width:100%;justify-content:flex-start}.table-header-actions select{max-width:100%;flex:1 1 180px}.form-card-top{flex-direction:column;align-items:stretch}.form-card-top .table-action,.form-card-top .secondary-btn,.form-card-top .primary-btn{align-self:flex-start}.dashboard-panel-grid{grid-template-columns:1fr}.header-actions{flex-wrap:wrap}}@media (max-width: 768px){.table-header-actions select{flex:1 1 100%}}.filter-select{display:grid;gap:8px;font-weight:600;color:#1e293b;min-width:220px}.filter-select select{padding:12px 14px}.table-header h2{margin:0;font-size:1.6rem}.table-header p{margin:6px 0 0;color:#475569}.table-wrap{overflow-x:auto;-webkit-overflow-scrolling:touch;max-width:100%}.table-card>.table-wrap:not(.activity-log-wrap){border:1px solid #e2e8f0;border-radius:14px}.user-table{width:100%;border-collapse:collapse}.user-table th,.user-table td{padding:10px 12px;text-align:left;border-bottom:1px solid #e2e8f0;vertical-align:middle;font-size:.84rem;line-height:1.35}.user-table th{font-weight:700;font-size:.72rem;letter-spacing:.04em;text-transform:uppercase;color:#64748b;background:#f3f4f6e6}.user-table tr:hover{background:#f8fafc}.user-table .rule-subtext{word-break:break-word;overflow-wrap:anywhere}.table-actions{display:flex;flex-wrap:wrap;gap:6px;align-items:center}.table-action{padding:5px 11px;border:1px solid #cbd5e1;border-radius:8px;background:#fff;color:#1f2937;font-size:.78rem;font-weight:600;line-height:1.25;cursor:pointer}.danger-action{border-color:#fca5a5;background:#fee2e2;color:#991b1b}.table-action:hover{opacity:.95}.metric-value{padding:16px 18px;border-radius:16px;background:#eff6ff;color:#1d4ed8;font-weight:700;display:inline-flex}.alert{margin-top:18px;padding:16px 18px;border-radius:16px;background:#f1f5f9;border-left:4px solid #2563eb;color:#0f172a}.toast-viewport{position:fixed;top:20px;right:20px;z-index:9999;display:flex;flex-direction:column;gap:12px;width:min(420px,calc(100vw - 32px));pointer-events:none}.toast{display:flex;align-items:flex-start;gap:12px;padding:14px 16px;border-radius:14px;background:#fff;border:1px solid #e2e8f0;box-shadow:0 12px 32px #0f172a24;color:#0f172a;pointer-events:auto;animation:toast-in .24s ease-out}.toast-success{border-left:4px solid #16a34a}.toast-error{border-left:4px solid #dc2626}.toast-info{border-left:4px solid #2563eb}.toast-icon{flex:0 0 22px;width:22px;height:22px;border-radius:999px;display:grid;place-items:center;font-size:12px;font-weight:800;line-height:1}.toast-success .toast-icon{background:#dcfce7;color:#15803d}.toast-error .toast-icon{background:#fee2e2;color:#b91c1c}.toast-info .toast-icon{background:#dbeafe;color:#1d4ed8}.toast-message{flex:1;font-size:14px;line-height:1.45;padding-top:2px}.toast-close{flex:0 0 auto;border:none;background:transparent;color:#64748b;font-size:20px;line-height:1;cursor:pointer;padding:0 2px}.toast-close:hover{color:#0f172a}@keyframes toast-in{0%{opacity:0;transform:translate(16px)}to{opacity:1;transform:translate(0)}}@media (max-width: 640px){.toast-viewport{top:auto;bottom:16px;right:16px;left:16px;width:auto}}@media (max-width: 980px){.dashboard-layout{grid-template-columns:1fr}.menu-toggle{display:grid}.sidebar-overlay{display:block}.dashboard-sidebar{position:fixed;top:0;left:0;bottom:0;width:260px;z-index:100;transform:translate(-100%);transition:transform .22s ease;box-shadow:0 20px 50px #0f172a40}.dashboard-sidebar.open{transform:translate(0)}.dashboard-main{padding:24px;width:100%}.table-card,.form-card,.chart-card,.panel-card{padding:20px}.table-header-actions{flex-wrap:wrap}.metric-card{padding:20px}.card-grid{grid-template-columns:1fr}.dashboard-quad-grid,.dashboard-summary-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.login-panel,.hero-card{grid-template-columns:1fr}}@media (max-width: 680px){.dashboard-sidebar{padding:24px 18px}.dashboard-header{flex-direction:column;align-items:flex-start}.dashboard-nav{display:grid;gap:10px}.login-visual,.auth-panel,.hero-card,.metric-card,.form-card{padding:22px}.dashboard-quad-grid,.dashboard-summary-grid,.dashboard-panel-grid,.dashboard-client-charts{grid-template-columns:1fr}.chart-card{min-height:280px;padding:16px}.chart-card-assignment{padding:16px}.table-card,.form-card,.panel-card{padding:16px;border-radius:20px}.dashboard-main{padding:16px}.table-header h2{font-size:1.3rem}.table-action{padding:8px 12px;font-size:.88rem}.table-header-actions .secondary-btn,.table-header-actions .primary-btn{padding:10px 14px;font-size:.9rem}.client-toolbar{flex-direction:column;align-items:stretch}.client-toolbar-filter,.filter-select{min-width:0;width:100%}.tab-row{gap:8px}.tab-btn{padding:8px 12px;font-size:.88rem}.table-pagination{flex-direction:column;align-items:stretch}.table-pagination-controls{flex-wrap:wrap;justify-content:center;margin-left:0;width:100%}.stacked-bar-row{grid-template-columns:56px 1fr 28px;gap:6px}.stacked-bar-label{font-size:.78rem}.auth-layout{padding:16px}.login-top-bar{top:12px;right:12px}.activity-log-filters{grid-template-columns:1fr}.activity-log-pagination{flex-direction:column;align-items:stretch;gap:10px}.activity-log-pagination .pagination-controls{justify-content:center;flex-wrap:wrap}.activity-log-page-wrap{max-height:min(480px,55vh)}.grant-row,.client-profile-info{grid-template-columns:1fr}.assignment-picker-head{flex-direction:column;align-items:stretch}.dashboard-header h1{font-size:1.6rem}}.client-profile-layout,.admin-profile-layout{display:grid;gap:20px}.admin-totp-status{margin-bottom:16px}.status-pill{display:inline-flex;align-items:center;padding:8px 12px;border-radius:999px;font-size:.88rem;font-weight:700}.status-pill-on{background:#dcfce7;color:#166534}.status-pill-off{background:#f1f5f9;color:#475569}.admin-totp-setup{display:grid;gap:16px}.admin-totp-qr{width:220px;height:220px;border-radius:16px;border:1px solid #e2e8f0;background:#fff}.admin-totp-confirm-form,.admin-totp-reset-form{max-width:420px}.login-totp-actions{display:flex;flex-wrap:wrap;gap:10px}.client-profile-info{display:grid;gap:14px;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));padding:0 4px 4px}.client-profile-field{display:grid;gap:6px;padding:14px 16px;border:1px solid #e2e8f0;border-radius:12px;background:#f8fafc}.client-profile-field>span{font-size:.85rem;color:#64748b}.client-profile-password-form{display:grid;gap:16px;padding:0 4px 4px}.client-profile-password-grid{display:grid;gap:14px;grid-template-columns:repeat(3,minmax(0,1fr))}.client-profile-password-grid label{display:grid;gap:6px}.client-profile-password-grid input{width:100%}@media (max-width: 900px){.client-profile-password-grid{grid-template-columns:1fr}}.inline-actions{display:flex;flex-wrap:wrap;gap:10px;align-items:center}.table-row-actions{display:flex;flex-wrap:wrap;gap:10px}.link-btn{border:none;background:transparent;color:var(--kit-primary);font-weight:700;cursor:pointer;padding:0}.link-btn:hover{color:var(--kit-primary-hover);text-decoration:underline}.link-btn:disabled{opacity:.5;cursor:not-allowed}.danger-link{color:#dc2626}.muted-text{color:#64748b}.compact-form{max-width:520px}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#0f172a8c;display:grid;place-items:center;padding:24px;z-index:1000}.modal-card{width:min(100%,480px);background:#fff;border-radius:20px;padding:24px;box-shadow:0 24px 60px #0f172a40;display:grid;gap:14px}.modal-card-wide{width:min(100%,760px);max-height:min(90vh,900px);overflow:auto}.modal-card-header{display:flex;justify-content:space-between;align-items:center;gap:12px}.modal-card-header h3{margin:0}.ddos-period-tabs{flex-wrap:wrap}.ddos-client-page-layout{display:grid;grid-template-columns:minmax(240px,300px) 1fr;gap:16px;align-items:start}@media (max-width: 960px){.ddos-client-page-layout{grid-template-columns:1fr}}.modal-actions{display:flex;justify-content:flex-end;gap:10px;margin-top:8px}.ddos-client-grid{display:grid;gap:16px}.ddos-client-card{background:#fff;border:1px solid #e2e8f0;border-radius:20px;padding:20px}.ddos-client-card-alert{border-color:#fecaca;box-shadow:0 0 0 1px #ef444414}.ddos-client-card-header{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;margin-bottom:14px}.ddos-client-card-header h3{margin:0 0 4px}.ddos-alert-badge{background:#fee2e2;color:#b91c1c;font-weight:700;font-size:.82rem;padding:6px 10px;border-radius:999px}.ddos-ip-list{display:grid;gap:10px;margin-bottom:16px}.ddos-ip-row{display:flex;justify-content:space-between;gap:12px;padding:12px 14px;border-radius:14px;background:#f8fafc;border:1px solid #e2e8f0}.ddos-ip-active,.ddos-ip-mitigated{background:#fef2f2;border-color:#fecaca}.ddos-ip-meta{display:flex;flex-wrap:wrap;gap:8px;align-items:center;font-size:.9rem}.ddos-client-charts{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:16px;margin-bottom:12px}.ddos-client-charts h4{margin:0 0 8px;font-size:.92rem}.ddos-line-chart .ddos-line-area{fill:#ef44441f}.ddos-attack-timeline-chart{margin-bottom:12px}.ddos-attack-timeline-chart h4{margin:0;font-size:.92rem}.ddos-chart-section-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:8px}.ddos-chart-backfill-btn{font-size:.82rem;padding:4px 10px}.table-header-actions{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.ddos-mirrored-chart-wrap{border:1px solid #e2e8f0;border-radius:10px;padding:12px;background:#fff}.ddos-chart-source-note{margin:0 0 .5rem;font-size:.8rem;color:#64748b}.ddos-chart-source-estimate{color:#b45309}.ddos-mirrored-chart-head{display:flex;justify-content:space-between;gap:12px;flex-wrap:wrap;margin-bottom:8px;font-size:.9rem}.ddos-mirrored-chart{width:100%;height:auto;display:block}.ddos-mirrored-axis{stroke:#cbd5e1;stroke-width:1}.ddos-mirrored-y-label{fill:#64748b;font-size:10px}.ddos-mirrored-in-area{fill:#ef444459}.ddos-mirrored-out-area{fill:#22c55e47}.ddos-mirrored-in-line{stroke:#dc2626;stroke-width:2}.ddos-mirrored-out-line{stroke:#16a34a;stroke-width:2}.ddos-mirrored-x-labels{display:flex;justify-content:space-between;font-size:.78rem;color:#64748b;margin-top:4px;padding:0 28px}.ddos-mirrored-stats{margin-top:12px;border-top:1px solid #e2e8f0;padding-top:10px;font-size:.82rem}.ddos-mirrored-stats-row{display:grid;grid-template-columns:minmax(120px,1.4fr) repeat(4,minmax(70px,1fr));gap:8px;padding:4px 0;align-items:center}.ddos-mirrored-stats-head{color:#64748b;font-weight:600}.ddos-mirrored-in-legend:before,.ddos-mirrored-out-legend:before{content:"";display:inline-block;width:10px;height:10px;border-radius:2px;margin-right:6px;vertical-align:middle}.ddos-mirrored-in-legend:before{background:#ef4444}.ddos-mirrored-out-legend:before{background:#22c55e}@media (max-width: 720px){.ddos-mirrored-stats-row{grid-template-columns:1fr 1fr}.ddos-mirrored-stats-head span:not(:first-child){display:none}}.ddos-line-stroke{stroke:#ef4444}.ddos-chart-peak{font-size:.85rem;color:#64748b;margin-bottom:4px}.chart-empty-compact{min-height:80px;display:grid;place-items:center}.ddos-client-attacks{margin-top:10px;padding-top:10px;border-top:1px solid #e2e8f0}.ddos-mini-attack{padding:8px 0;font-size:.92rem}.status-active{background:#fee2e2;color:#b91c1c}.status-mitigated{background:#ffedd5;color:#c2410c}.status-ended{background:#dcfce7;color:#15803d}.ddos-alerts-layout{display:grid;grid-template-columns:minmax(260px,320px) 1fr;gap:16px;align-items:start}@media (max-width: 960px){.ddos-alerts-layout{grid-template-columns:1fr}}.ddos-type-breakdown-card{position:sticky;top:16px}.ddos-type-donut{display:grid;gap:16px;padding:8px 0 16px}.ddos-alerts-list{display:grid;gap:16px}.ddos-alert-card{background:#fff;border:1px solid #e2e8f0;border-radius:20px;padding:20px}.ddos-alert-card-collapsed{padding-bottom:14px}.ddos-alert-card-header-toggle{cursor:pointer;-webkit-user-select:none;user-select:none}.ddos-alert-card-header-toggle:hover h3 strong{color:#0f172a}.ddos-alert-header-end{display:flex;align-items:center;gap:8px;flex-shrink:0}.ddos-alert-toggle{font-size:1.1rem;color:#64748b;line-height:1}.ddos-detail-page{display:grid;gap:16px}.ddos-detail-toolbar{display:flex;align-items:center;gap:12px;flex-wrap:wrap}.ddos-detail-charts{margin:0}.iptables-rules-cell details{max-width:420px}.iptables-rules-cell summary{cursor:pointer;font-size:.85rem}.iptables-rules-pre{margin:8px 0 0;padding:8px 10px;max-height:220px;overflow:auto;font-size:.72rem;line-height:1.35;background:#0f172a;color:#e2e8f0;border-radius:6px;white-space:pre-wrap;word-break:break-word}.ddos-row-alert{background:#fff7ed}.ddos-row-alert:hover{background:#ffedd5}.ddos-alert-card-header{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;margin-bottom:12px}.ddos-alert-card-header h3{margin:4px 0;display:flex;flex-wrap:wrap;align-items:center;gap:8px}.ddos-alert-id{font-size:.82rem;font-weight:700;color:#64748b;text-transform:uppercase;letter-spacing:.04em}.ddos-type-pill{font-size:.78rem;font-weight:700;padding:4px 10px;border-radius:999px}.ddos-alert-metrics{display:flex;flex-wrap:wrap;gap:12px;font-size:.92rem;color:#475569;margin-bottom:14px}.ddos-client-alerts-section{margin-top:20px;padding-top:20px;border-top:1px solid #e2e8f0}.ddos-client-alerts-section h3{margin:0 0 6px}.ddos-client-alerts-breakdown{max-width:320px;margin:12px 0 16px}.kit-page{display:grid;gap:20px}.kit-toolbar{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:16px}.segment-control{display:inline-flex;flex-wrap:wrap;gap:8px;padding:6px;background:#ffffffe0;border:1px solid var(--kit-border);border-radius:999px;box-shadow:var(--kit-shadow-sm)}.segment-control .segment-btn{border:none;background:transparent;color:var(--kit-text-muted);font-weight:700;font-size:.88rem;padding:10px 18px;border-radius:999px;cursor:pointer;transition:background .2s ease,color .2s ease,box-shadow .2s ease}.segment-control .segment-btn:hover{color:var(--kit-primary);background:var(--kit-primary-soft)}.segment-control .segment-btn.active{background:linear-gradient(135deg,#2563eb,#1d4ed8);color:#fff;box-shadow:0 10px 20px #2563eb3d}.kit-filter-card{background:var(--kit-surface);border:1px solid var(--kit-border);border-radius:var(--kit-radius-xl);padding:20px 24px;box-shadow:var(--kit-shadow-sm)}.kit-filter-row{display:flex;flex-wrap:wrap;align-items:flex-end;gap:14px}.kit-filter-row label{display:grid;gap:8px;font-size:.88rem;font-weight:700;color:var(--kit-text-secondary)}.kit-filter-row input[type=date]{min-width:160px;background:var(--kit-bg);border:1px solid var(--kit-border);border-radius:var(--kit-radius-md);padding:12px 14px}.kit-stat-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:18px}@media (max-width: 1100px){.kit-stat-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (max-width: 640px){.kit-stat-grid{grid-template-columns:1fr}}.summary-card,.kit-stat-card{display:flex;align-items:flex-start;gap:16px;background:var(--kit-surface);border:1px solid var(--kit-border);border-radius:var(--kit-radius-xl);padding:22px 24px;box-shadow:var(--kit-shadow-md);min-height:118px}.kit-stat-icon{width:52px;height:52px;border-radius:16px;display:grid;place-items:center;font-size:1.35rem;flex-shrink:0}.kit-stat-body{display:grid;gap:6px;min-width:0}.summary-label,.kit-stat-label{font-size:.9rem;font-weight:700;color:var(--kit-text-muted)}.summary-value,.kit-stat-value{font-size:1.75rem;font-weight:800;color:var(--kit-text);letter-spacing:-.02em;line-height:1.1}.summary-card.tone-violet .kit-stat-icon,.kit-stat-violet .kit-stat-icon{background:var(--kit-primary-soft);color:var(--kit-primary)}.summary-card.tone-blue .kit-stat-icon,.kit-stat-blue .kit-stat-icon{background:#e8f0ff;color:#4318ff}.summary-card.tone-green .kit-stat-icon,.kit-stat-green .kit-stat-icon{background:#e6faf5;color:var(--kit-success)}.summary-card.tone-orange .kit-stat-icon,.kit-stat-orange .kit-stat-icon{background:#fff4e5;color:var(--kit-warning)}.summary-card.tone-purple .kit-stat-icon,.kit-stat-purple .kit-stat-icon{background:#f1e9ff;color:#9f7aea}.data-table{width:100%;border-collapse:collapse}.data-table th,.data-table td{padding:9px 12px;text-align:left;border-bottom:1px solid var(--kit-border);font-size:.84rem;line-height:1.35;vertical-align:middle}.data-table th{color:var(--kit-text-muted);font-weight:700;font-size:.72rem;text-transform:uppercase;letter-spacing:.04em;background:var(--kit-bg);padding-top:8px;padding-bottom:8px}.data-table tbody tr{transition:background .15s ease}.data-table tbody tr:hover{background:#fafbff}.data-table tbody tr:last-child td{border-bottom:none}.data-table code{background:var(--kit-primary-soft);color:var(--kit-primary);padding:2px 8px;border-radius:6px;font-weight:700;font-size:.76rem}.data-table .status-pill,.data-table .ddos-type-pill,.user-table .status-pill,.user-table .ddos-type-pill{padding:3px 8px;font-size:.72rem}.data-table button,.user-table button,.table-row-actions button,.table-row-actions .link-btn{padding:5px 10px;font-size:.76rem;font-weight:600;border-radius:8px;line-height:1.2}.data-table .link-btn,.user-table .link-btn,.table-row-actions .link-btn{padding:4px 6px;font-size:.76rem}.table-header h2{color:var(--kit-text);letter-spacing:-.02em}.table-header p{color:var(--kit-text-secondary)}.status-pill{display:inline-flex;align-items:center;padding:6px 12px;border-radius:999px;font-size:.8rem;font-weight:700}.modal-backdrop{background:#2b367473;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}.modal-card{border:1px solid var(--kit-border);border-radius:var(--kit-radius-xl);box-shadow:var(--kit-shadow-lg)}.checkbox-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:8px 12px}.policy-attack-types{border:1px solid var(--kit-border);border-radius:var(--kit-radius-md);padding:12px 14px}.policy-attack-types legend{font-weight:600;padding:0 4px}.form-hint{margin:6px 0 0;font-size:.8rem;color:#5b6b86}.sensor-id-cell{font-size:.84rem;margin-right:8px}.blacklist-page-layout{display:flex;flex-direction:column;gap:16px}.blacklist-rule-hint{margin:0;font-size:.82rem;color:#5b6b86;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace}.blacklist-form-grid{margin-bottom:12px}.blacklist-meta{display:flex;flex-wrap:wrap;gap:16px;align-items:center;font-size:.84rem;color:#4a5872}.blacklist-add-form{gap:12px;align-items:flex-end;flex-wrap:wrap}.blacklist-add-form label{display:flex;flex-direction:column;gap:6px;min-width:220px}.ddos-type-pill{display:inline-flex;align-items:center;padding:6px 12px;border-radius:999px;font-size:.8rem;font-weight:700}.ddos-alert-card{box-shadow:var(--kit-shadow-sm)}.ddos-chart-peak,.muted-text{color:var(--kit-text-muted)}.table-pagination{border-top:1px solid var(--kit-border);padding-top:12px;margin-top:6px;font-size:.82rem}.table-pagination .table-action{padding:5px 10px;font-size:.76rem}.table-pagination-page-select{font-size:.82rem}.table-action{border:1px solid var(--kit-border);background:var(--kit-surface);color:var(--kit-text);border-radius:8px;padding:5px 11px;font-size:.76rem;font-weight:600;line-height:1.25;cursor:pointer}.table-action:hover:not(:disabled){background:var(--kit-primary-soft);border-color:var(--kit-primary-muted);color:var(--kit-primary)}.table-action-primary{background:var(--kit-primary);color:#fff;border-color:var(--kit-primary)}
