@font-face{font-family:Plex Sans;src:url(../assets/plex/plex-sans-latin-400.woff2)format("woff2");font-weight:400;font-display:swap;unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Plex Sans;src:url(../assets/plex/plex-sans-latin-500.woff2)format("woff2");font-weight:500 700;font-display:swap;unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Plex Sans;src:url(../assets/plex/plex-sans-cyrillic-400.woff2)format("woff2");font-weight:400;font-display:swap;unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Plex Sans;src:url(../assets/plex/plex-sans-cyrillic-500.woff2)format("woff2");font-weight:500 700;font-display:swap;unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Plex Mono;src:url(../assets/plex/plex-mono-latin-400.woff2)format("woff2");font-weight:400;font-display:swap;unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Plex Mono;src:url(../assets/plex/plex-mono-latin-500.woff2)format("woff2");font-weight:500 700;font-display:swap;unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Plex Mono;src:url(../assets/plex/plex-mono-cyrillic-400.woff2)format("woff2");font-weight:400;font-display:swap;unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Plex Mono;src:url(../assets/plex/plex-mono-cyrillic-500.woff2)format("woff2");font-weight:500 700;font-display:swap;unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}:root{--bg:#141415;--sidebar:#0f0f10;--surface:#19191b;--surface-2:#1e1e20;--surface-3:#232325;--surface-4:#2c2c2f;--hover:#ededed0a;--line:#ededed14;--line-strong:#ededed1f;--line-hover:#ededed33;--text:#ededed;--text-2:#a1a1a6;--muted:#85858b;--faint:#85858b;--accent:#3d9df2;--accent-ink:#7dbcf6;--primary:#ededed;--primary-hover:#fff;--on-primary:#141415;--focus:#7dbcf6;--ok:#4cc38a;--ok-tint:#4cc38a1f;--warn:#e0a740;--warn-tint:#e0a7401f;--danger:#e5484d;--danger-tint:#e5484d1f;--info:#7dbcf6;--idle:#5c5c61;--radius-sm:6px;--radius:8px;--radius-lg:12px;--sidebar-width:240px;--header-height:56px;--ease:cubic-bezier(.22, 1, .36, 1);--sans:"Plex Sans", -apple-system, "Segoe UI", Roboto, sans-serif;--mono:"Plex Mono", ui-monospace, "SF Mono", Menlo, Consolas, monospace;font-family:var(--sans);color:var(--text);background:var(--bg);--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;font-synthesis:none;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;scrollbar-color:var(--surface-4) var(--bg);scrollbar-width:thin;font-size:14px;line-height:20px}*{box-sizing:border-box}body{background:var(--bg);min-width:320px;margin:0}button,input,select,textarea{font:inherit}button{cursor:pointer}a{color:var(--text);text-underline-offset:3px}:focus-visible{outline:2px solid var(--focus);outline-offset:2px}::selection{color:#fff;background:#3d9df266}button:disabled{cursor:not-allowed;opacity:.42}svg{vertical-align:middle;flex:none;width:18px;height:18px}[hidden]{display:none!important}h1,h2,h3,p{margin-top:0}h1{letter-spacing:-.01em;font-size:28px;line-height:32px}h1,h2,h3{margin-bottom:0;font-weight:500}h2,h3{font-size:14px;line-height:20px}p{margin-bottom:16px}.mono,code,kbd{font-family:var(--mono);font-size:12px}code{background:var(--surface-3);border-radius:4px;padding:0 4px}code,pre{border:1px solid var(--line);color:var(--text-2)}pre{border-radius:var(--radius);background:var(--sidebar);font:12px/20px var(--mono);margin:0;padding:12px 16px;overflow-x:auto}.muted{color:var(--muted)}.numeric{font-variant-numeric:tabular-nums}.sr-only{clip:rect(0 0 0 0);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.topbar{z-index:20;height:var(--header-height);margin-left:var(--sidebar-width);border-bottom:1px solid var(--line);background:var(--bg);gap:16px;padding:0 32px;position:sticky;top:0}.topbar,.topbar-tools{align-items:center;display:flex}.topbar-tools{gap:8px;margin-left:auto}.brand{color:var(--text);white-space:nowrap;align-items:center;gap:8px;font-size:16px;font-weight:500;line-height:20px;text-decoration:none;display:inline-flex}.brand-mark{width:20px;height:20px;color:var(--accent);flex:none;place-items:center;display:grid}.brand-mark svg{stroke-width:2.2px;width:20px;height:20px}.mobile-brand{display:none}.menu-button{border:1px solid var(--line-strong);background:var(--surface);width:36px;height:36px;color:var(--text);flex:none;display:none}.header-icon,.menu-button{border-radius:var(--radius);place-items:center;padding:0}.header-icon{width:32px;height:32px;color:var(--muted);transition:background-color .15s var(--ease),color .15s var(--ease);background:0 0;border:1px solid #0000;display:grid}.header-icon svg{stroke-width:1.5px;width:16px;height:16px}.header-icon:hover:not(:disabled){background:var(--surface-3);color:var(--text)}.header-icon.spinning svg{animation:.9s linear infinite spin}.badge-dot,.calm-dot,.connection:before,.incident-pulse,.state-dot{background:var(--idle);border-radius:1px;flex:none;width:6px;height:6px;display:inline-block}.connection{height:32px;color:var(--text-2);font:12px var(--mono);white-space:nowrap;align-items:center;gap:8px;padding:0 8px;display:inline-flex}.connection:before{content:""}.connection.ok:before{background:var(--ok)}.connection.warn:before{background:var(--warn)}.connection.bad{color:var(--danger)}.connection.bad:before{background:var(--danger)}.app-shell{min-height:calc(100dvh - var(--header-height));margin-left:var(--sidebar-width);padding:32px 32px 64px}.app-shell>main{max-width:1600px}.sidebar{z-index:30;width:var(--sidebar-width);border-right:1px solid var(--line);background:var(--sidebar);color:var(--text-2);flex-direction:column;padding:0 12px 16px;display:flex;position:fixed;inset:0 auto 0 0;overflow-y:auto}.sidebar-brand{height:var(--header-height);border-bottom:1px solid var(--line);align-items:center;margin:0 -12px 16px;padding:0 24px;display:flex}.sidebar-section-label{color:var(--muted);margin:0;padding:0 12px 8px;font-size:12px;line-height:16px}.sidebar-menu{gap:2px;margin-bottom:24px;display:grid}.nav-link{border-radius:var(--radius);min-height:36px;color:var(--text-2);transition:background-color .15s var(--ease),color .15s var(--ease);align-items:center;gap:10px;padding:8px 12px;font-size:14px;text-decoration:none;display:flex}.nav-link>svg{stroke-width:1.5px;width:16px;height:16px;color:var(--muted)}.nav-link:hover{color:var(--text);background:var(--hover)}.nav-link.router-link-active{color:var(--text);background:var(--surface-3);box-shadow:inset 0 1px #ffffff0f}.nav-link.router-link-active>svg{color:var(--text)}.nav-count{color:var(--muted);font:12px/16px var(--mono);margin-left:auto}.nav-count.nav-alert{color:var(--danger);align-items:center;gap:6px;display:inline-flex}.nav-count.nav-alert:before{content:"";background:var(--danger);border-radius:1px;width:6px;height:6px}.sidebar-system{border-top:1px solid var(--line);color:var(--muted);font:12px/16px var(--mono);margin:auto 0 0;padding:16px 12px 0}.menu-backdrop{display:none}.page-heading{align-items:flex-end;gap:16px;margin-bottom:24px;display:flex}.page-heading .heading-text{flex:1;min-width:0}.page-heading p{color:var(--text-2);margin:8px 0 0;font-size:14px;line-height:20px}.heading-actions{flex-wrap:wrap;gap:8px;margin-left:auto;display:flex}.button{border:1px solid var(--line-strong);border-radius:var(--radius);background:var(--surface-3);min-height:36px;color:var(--text);white-space:nowrap;transition:background-color .15s var(--ease),border-color .15s var(--ease),transform .15s var(--ease);justify-content:center;align-items:center;gap:8px;padding:8px 16px;font-size:13px;font-weight:500;line-height:18px;text-decoration:none;display:inline-flex}.button>svg{stroke-width:1.5px;width:16px;height:16px}.button:hover:not(:disabled){border-color:var(--line-hover);background:var(--surface-4)}.button:active:not(:disabled){transform:scale(.98)}.button-primary{background:var(--primary);color:var(--on-primary);border-color:#0000;box-shadow:inset 0 1px #ffffff1f}.button-primary:hover:not(:disabled){background:var(--primary-hover);border-color:#0000}.button-quiet{color:var(--text-2);background:0 0;border-color:#0000}.button-quiet:hover:not(:disabled){background:var(--hover);color:var(--text);border-color:#0000}.button-small{border-radius:var(--radius-sm);min-height:28px;padding:4px 12px;font-size:12px}.button kbd{border:1px solid #14141540;border-radius:4px;padding:0 4px;font-size:11px}.icon-button{border-radius:var(--radius-sm);width:28px;height:28px;color:var(--muted);background:0 0;border:1px solid #0000;place-items:center;padding:0;display:inline-grid}.icon-button svg{width:16px;height:16px}.icon-button:hover:not(:disabled){background:var(--surface-3);color:var(--text)}.panel{border:1px solid var(--line);border-radius:var(--radius-lg);background:var(--surface)}.panel-header{border-bottom:1px solid var(--line);align-items:center;gap:12px;min-height:52px;padding:12px 20px;display:flex}.panel-header p{color:var(--muted);margin:0;font-size:12px;line-height:16px}.panel-header .actions{gap:8px;margin-left:auto;display:flex}.panel-body{padding:20px}.stat-grid{grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin-bottom:24px;display:grid}.stat{border:1px solid var(--line);border-radius:var(--radius-lg);background:var(--surface);min-width:0;padding:16px 20px}.stat>div{gap:4px;display:grid}.stat-label{color:var(--text-2);font-size:13px;line-height:16px}.stat-value{color:var(--text);font:500 28px/32px var(--mono);letter-spacing:-.02em;white-space:nowrap;text-overflow:ellipsis;display:block;overflow:hidden}.stat-value small{font-family:var(--sans);letter-spacing:0}.stat-value.lead{color:var(--accent-ink)}.stat-value.name{font:500 22px/32px var(--sans);letter-spacing:0}.stat-note{color:var(--muted);font-size:12px;line-height:16px}.stat-note .up,.stat-note.up{color:var(--ok)}.stat-note .down,.stat-note.down{color:var(--warn)}.section-heading{align-items:baseline;gap:12px;margin:32px 0 12px;display:flex}.section-heading p{color:var(--muted);margin:0;font-size:13px}.widget-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;display:grid}.abuse .incident-kind{color:var(--warn)}.abuse .incident-pulse{background:var(--warn)}.toplist{gap:2px;padding:8px 8px 12px;display:grid}.toplist-row{border-radius:var(--radius-sm);min-height:40px;color:var(--text-2);text-align:left;transition:background-color .15s var(--ease),color .15s var(--ease);background:0 0;border:0;grid-template-columns:1fr auto;align-items:center;gap:12px;padding:4px 12px 10px;font-size:13px;text-decoration:none;display:grid;position:relative;overflow:hidden}.toplist-row:after{content:"";background:var(--line);border-radius:1px;height:2px;position:absolute;bottom:5px;left:12px;right:12px}.toplist-row:hover{background:var(--hover);color:var(--text)}.toplist-bar{z-index:1;background:var(--muted);border-radius:1px;max-width:calc(100% - 24px);height:2px;position:absolute;bottom:5px;left:12px}.toplist-row:hover .toplist-bar{background:var(--text)}.toplist-row>span:not(.toplist-bar){text-overflow:ellipsis;white-space:nowrap;min-width:0;position:relative;overflow:hidden}.toplist-row .value{color:var(--text);font:12px var(--mono)}.toplist-row .share{min-width:36px;color:var(--muted);font:12px var(--mono);text-align:right;margin-left:8px;display:inline-block}.badge{border:1px solid var(--line-strong);background:var(--surface-3);color:var(--text-2);white-space:nowrap;border-radius:4px;align-items:center;gap:6px;padding:2px 8px;font-size:12px;line-height:16px;display:inline-flex}.badge-green{background:var(--ok-tint);color:var(--ok);border-color:#4cc38a40}.badge-green .badge-dot{background:var(--ok)}.badge-amber{background:var(--warn-tint);color:var(--warn);border-color:#e0a74040}.badge-amber .badge-dot{background:var(--warn)}.badge-red{background:var(--danger-tint);color:#f07c80;border-color:#e5484d47}.badge-red .badge-dot{background:var(--danger)}.state-dot.ok{background:var(--ok)}.state-dot.warn{background:var(--warn)}.state-dot.bad{background:var(--danger)}input,select,textarea{border:1px solid var(--line-strong);border-radius:var(--radius);background:var(--sidebar);width:100%;min-height:36px;color:var(--text);transition:border-color .15s var(--ease);padding:8px 12px;font-size:14px;line-height:18px}input:hover,select:hover,textarea:hover{border-color:var(--line-hover)}input:focus,select:focus,textarea:focus{border-color:var(--focus);box-shadow:0 0 0 1px var(--focus);outline:none}input::-moz-placeholder{color:var(--muted);opacity:1}textarea::-moz-placeholder{color:var(--muted);opacity:1}input::placeholder,textarea::placeholder{color:var(--muted);opacity:1}input[type=number]{font-family:var(--mono);font-size:13px}select{appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='none'%3E%3Cpath d='m4 6 4 4 4-4' stroke='%2385858b' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");background-position:right 12px center;background-repeat:no-repeat;padding-right:36px}select option{background:var(--surface-2);color:var(--text)}input[type=checkbox]{width:16px;height:16px;min-height:0;accent-color:var(--accent);margin:0;padding:0}input[type=datetime-local]{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;font-family:var(--mono);font-size:12px}.field{gap:8px;display:grid}.field-label,.field>span{color:var(--text-2);font-size:12px;line-height:16px}.field-row{grid-template-columns:1fr 1fr;gap:12px;display:grid}.check{color:var(--text-2);cursor:pointer;align-items:center;gap:8px;font-size:13px;display:flex}.segmented{border:1px solid var(--line-strong);border-radius:var(--radius);background:var(--sidebar);flex-wrap:wrap;gap:2px;padding:2px;display:flex}.segmented button{border-radius:var(--radius-sm);min-height:28px;color:var(--text-2);white-space:nowrap;transition:background-color .15s var(--ease),color .15s var(--ease);background:0 0;border:0;flex:1;padding:4px 8px;font-size:13px}.segmented button:hover{color:var(--text)}.segmented button.active{background:var(--surface-4);color:var(--text);box-shadow:inset 0 1px #ffffff0f}.table-shell{scrollbar-width:thin;overflow-x:auto}.table{border-collapse:collapse;text-align:left;width:100%}.table th{height:36px;color:var(--muted);font-size:12px;font-weight:400;line-height:16px}.table td,.table th{border-bottom:1px solid var(--line);white-space:nowrap;padding:8px 16px}.table td{height:48px;font-size:13px;line-height:20px}.table tbody tr:last-child td{border-bottom:0}.table tbody tr{transition:background-color .15s var(--ease)}.table tbody tr:hover{background:var(--hover)}.table tr.clickable{cursor:pointer}.table .num{text-align:right}.table td.num{font-family:var(--mono);font-size:12px}.table td.num .button{font-family:var(--sans)}.table tr.dimmed td{opacity:.45}.swatch{vertical-align:0;border-radius:2px;width:8px;height:8px;margin-right:8px;display:inline-block}.query-error{border-radius:var(--radius);background:var(--danger-tint);color:#f7b9bb;border:1px solid #e5484d4d;align-items:flex-start;gap:12px;margin:16px 20px 0;padding:12px 16px;font-size:13px;display:flex}.query-error svg{width:16px;height:16px;color:var(--danger)}.query-note{border:1px solid var(--line);border-radius:var(--radius);color:var(--text-2);align-items:flex-start;gap:12px;margin:16px 20px 0;padding:12px 16px;font-size:13px;display:flex}.query-note svg{flex:none;width:16px;height:16px}.empty,.empty svg,.query-note svg{color:var(--muted)}.empty{text-align:center;place-items:center;gap:8px;min-height:240px;padding:32px;display:grid}.empty svg{stroke-width:1.5px;width:24px;height:24px}.empty strong{color:var(--text);font-size:14px;font-weight:500}.hint{color:var(--muted);margin:0;font-size:12px;line-height:16px}.hint kbd{border:1px solid var(--line-strong);color:var(--text-2);border-radius:4px;padding:0 4px;font-size:11px}.kv{grid-template-columns:max-content 1fr;gap:8px 20px;font-size:13px;display:grid}.kv dt{color:var(--muted)}.kv dd{color:var(--text-2);margin:0}.login{background:var(--bg);place-items:center;min-height:100dvh;padding:24px 16px;display:grid}.login-card{border:1px solid var(--line);border-radius:var(--radius-lg);background:var(--surface);gap:16px;width:min(380px,100%);padding:32px;display:grid}.login-card .brand{margin-bottom:8px;font-size:18px}.login-card p{color:var(--text-2);margin:0}.form-error{color:#f07c80;font-size:13px}.form-ok{color:var(--ok);font-size:13px}.form-stack,.profile-grid{gap:16px;display:grid}.profile-grid{grid-template-columns:repeat(2,minmax(0,1fr));align-items:start}.totp-setup{flex-wrap:wrap;align-items:flex-start;gap:20px;display:flex}.totp-qr{border-radius:var(--radius);background:#fff;flex:none;width:184px;padding:8px}.totp-qr svg{width:100%;height:auto;display:block}.user-form{grid-template-columns:minmax(0,1fr) minmax(0,1.4fr) auto auto;align-items:end;gap:16px;display:grid}.user-chip{border:1px solid var(--line);border-radius:var(--radius);height:32px;color:var(--text-2);font:12px var(--mono);transition:background-color .15s var(--ease),color .15s var(--ease);align-items:center;gap:8px;padding:0 12px;text-decoration:none;display:inline-flex}.user-chip svg{stroke-width:1.5px;width:14px;height:14px}.user-chip:hover{color:var(--text);background:var(--hover)}.block-gap,.page-alert{margin:0 0 16px}.text-bad{color:#f07c80!important}.text-warn{color:var(--warn)!important}dl.kv{margin:0}.cell-wrap{min-width:160px;white-space:normal!important}.state-dot.off{background:var(--surface-4);box-shadow:inset 0 0 0 1px var(--line-hover)}.state-dot.idle{background:var(--idle)}.state-dot.big{border-radius:2px;width:10px;height:10px}.legend{color:var(--muted);flex-wrap:wrap;gap:12px;font-size:12px;display:flex}.legend>span{align-items:center;gap:6px;display:inline-flex}.toolbar{flex-wrap:wrap;gap:12px;margin-bottom:16px}.search,.toolbar{align-items:center;display:flex}.search{flex:1;min-width:220px;max-width:480px;position:relative}.search svg{width:16px;height:16px;color:var(--muted);pointer-events:none;position:absolute;left:12px}.search input{padding-left:36px}.search.small{min-width:180px;max-width:260px}.search.small input{min-height:28px;padding-top:4px;padding-bottom:4px;font-size:12px}.form-actions{flex-wrap:wrap;gap:8px;display:flex}.inline-form{align-items:center;gap:8px;display:flex}.inline-form input{flex:1;min-width:0}.back-link{color:var(--muted);align-items:center;gap:4px;margin-bottom:8px;font-size:13px;text-decoration:none;display:inline-flex}.back-link svg{width:14px;height:14px}.back-link:hover{color:var(--text)}.pending-banner,.unsaved-banner{border-radius:var(--radius);background:var(--warn-tint);border:1px solid #e0a74059;flex-wrap:wrap;align-items:center;gap:12px;margin-bottom:16px;padding:12px 16px;font-size:13px;display:flex}.unsaved-banner{border-color:var(--line-strong);background:var(--surface);color:var(--text-2)}.unsaved-banner>span:nth-child(2){flex:1;min-width:240px}.pending-led{background:var(--warn);border-radius:1px;flex:none;width:8px;height:8px;animation:1s steps(2,jump-none) infinite blink}@keyframes blink{50%{opacity:.3}}.pending-text{min-width:240px;color:var(--text-2);flex:1;gap:2px;display:grid}.pending-text strong{color:var(--text);font-weight:500}.switch-pick{border-radius:var(--radius);width:100%;min-height:32px;color:var(--text-2);text-align:left;transition:background-color .15s var(--ease),color .15s var(--ease);background:0 0;border:0;align-items:center;gap:10px;padding:4px 12px;font-size:13px;display:flex}.switch-pick:hover{color:var(--text);background:var(--hover)}.switch-pick.active{color:var(--text);background:var(--surface-3)}.switch-pick span:nth-child(2){text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.switch-pick .rate{color:var(--muted);font:12px var(--mono);margin-left:auto}.sidebar-system>div+div{margin-top:2px}.panel-scroll{scrollbar-width:thin;overflow-x:auto}.front-panel{border:1px solid var(--line-strong);border-radius:var(--radius);background:linear-gradient(var(--sidebar),#0b0b0c);flex-wrap:wrap;align-items:flex-start;gap:16px;width:fit-content;max-width:100%;padding:16px 20px;display:flex;box-shadow:inset 0 1px #ffffff0a}.cage-block{gap:6px;display:grid}.cage-block.mgmt,.cage-block.uplinks{border-left:1px solid var(--line);padding-left:16px}.cage-row{gap:4px;display:flex}.cage{border:1px solid var(--line-strong);width:32px;height:34px;color:var(--muted);transition:border-color .15s var(--ease),background-color .15s var(--ease);background:#0d0d0e;border-radius:3px;align-content:center;place-items:center;gap:4px;text-decoration:none;display:grid;position:relative}.cage.wide{width:48px}.cage:hover{border-color:var(--line-hover);background:var(--surface-2);color:var(--text)}.cage-led{background:var(--idle);border-radius:1px;width:8px;height:4px}.cage.ok .cage-led{background:var(--ok);box-shadow:0 0 6px #4cc38a8c}.cage.off .cage-led{background:#2a2a2d}.cage.bad .cage-led{background:var(--danger);box-shadow:0 0 6px #e5484d8c}.cage.off{opacity:.6}.cage-num{font:11px/12px var(--mono)}.cage-load{background:var(--accent);border-radius:1px;max-width:calc(100% - 6px);height:2px;position:absolute;bottom:2px;left:3px}.cage-caption{color:var(--muted);font:11px var(--mono)}.env-grid{-moz-column-gap:1px;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));column-gap:1px;margin-top:-1px;display:grid}.env-item{border-top:1px solid var(--line);align-items:center;gap:12px;padding:12px 16px;display:flex}.env-item>div{flex:1;min-width:0;display:grid}.env-item>div span{color:var(--text-2);text-overflow:ellipsis;white-space:nowrap;font-size:13px;overflow:hidden}.env-item small{color:var(--muted);font-size:11px}.env-item strong{font:500 13px var(--mono);white-space:nowrap}.port-name{align-items:center;gap:10px;display:inline-flex}.util-bar{background:var(--line);border-radius:1px;height:2px;margin-top:4px;overflow:hidden}.util-bar span{background:var(--accent);height:100%;display:block}.port-title{align-items:center;gap:12px;display:flex}.port-title .mono{font-size:inherit;letter-spacing:-.02em}.port-layout{grid-template-columns:minmax(0,1fr) 440px;align-items:start;gap:16px;display:grid}.port-col{gap:16px;min-width:0;display:grid}.port-form{top:calc(16px + var(--header-height));max-height:calc(100dvh - 32px - var(--header-height));overscroll-behavior:contain;position:sticky;overflow-y:auto}.dom-grid{grid-template-columns:repeat(5,minmax(0,1fr));gap:8px;padding:16px 20px;display:grid}.dom-grid div{border-radius:var(--radius-sm);background:var(--surface-3);gap:4px;padding:8px 12px;display:grid}.dom-grid span{color:var(--muted);font-size:12px}.dom-grid strong{font:500 13px var(--mono);white-space:nowrap}.port-chips{flex-wrap:wrap;gap:4px;display:flex}.port-chip{border:1px solid var(--line);color:var(--text-2);border-radius:4px;padding:0 6px;font-size:11px;line-height:20px;text-decoration:none}.port-chip:hover{border-color:var(--line-hover);color:var(--text)}.vlan-form{grid-template-columns:160px minmax(0,1fr) auto;align-items:end;gap:16px;display:grid}.route-result{gap:8px;margin-top:16px;display:grid}.route-card{border:1px solid var(--line);border-radius:var(--radius);gap:4px;padding:12px 16px;display:grid}.route-card .badge{margin:0 6px}.config-pre{border-radius:0 0 var(--radius-lg) var(--radius-lg);white-space:pre;border:0;max-height:420px;margin:0}.config-pre.tall{min-height:320px;max-height:calc(100dvh - 300px)}.config-pre.small{border:1px solid var(--line);border-radius:var(--radius);max-height:240px}.config-input{min-height:280px;font:13px/20px var(--mono);resize:vertical;tab-size:3;white-space:pre}.tabs button{position:relative}.tab-dot{background:var(--warn);vertical-align:1px;border-radius:1px;width:6px;height:6px;margin-left:6px;display:inline-block}.editor-layout{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}.editor-layout,.snap-layout{align-items:start;gap:16px;display:grid}.snap-layout{grid-template-columns:340px minmax(0,1fr)}.snap-layout>.panel{min-width:0}.snap-list{max-height:calc(100dvh - 300px);padding:4px;display:grid;overflow-y:auto}.snap-item{border-radius:var(--radius-sm);color:var(--text-2);text-align:left;background:0 0;border:0;gap:2px;padding:8px 12px;font-size:13px;display:grid}.snap-item .mono{color:var(--text)}.snap-item:hover{background:var(--hover)}.snap-item.active{background:var(--surface-3)}.restore-box{gap:12px;padding:16px 20px;display:grid}.restore-box p{color:var(--text-2);margin:0;font-size:13px}.restore-box .diff{border:1px solid var(--line);border-radius:var(--radius);max-height:360px}.restore-actions{flex-wrap:wrap;justify-content:space-between;align-items:flex-end;gap:16px;display:flex}.diff{border-radius:0 0 var(--radius-lg) var(--radius-lg);white-space:pre;border:0;max-height:calc(100dvh - 300px);margin:0;padding:8px 0}.diff span{padding:0 16px;display:block}.d-add{color:#8fdcb5;background:#4cc38a1a}.d-del{color:#f5a3a6;background:#e5484d1a}.d-hunk{color:var(--info);opacity:.8}.d-head{color:var(--muted)}.quick{flex-wrap:wrap;gap:8px;margin-bottom:12px;display:flex}.saved-cmd{border:1px dashed var(--line-strong);color:var(--text-2);font:12px var(--mono);background:0 0;border-radius:4px;padding:2px 8px}.saved-cmd:hover{color:var(--text);border-style:solid}.console{flex-direction:column;height:calc(100dvh - 260px);min-height:360px;display:flex;overflow:hidden}.console-out{background:var(--sidebar);flex:1;padding:8px 0;overflow-y:auto}.console-entry+.console-entry{border-top:1px solid var(--line)}.console-cmd{color:var(--text);padding:8px 16px 0}.console-cmd,.prompt{font:12px/20px var(--mono)}.prompt{color:var(--accent-ink);margin-right:8px}.console-entry pre{background:0 0;border:0;padding:4px 16px 12px}.console-error{color:#f5a3a6!important}.console-in{border-top:1px solid var(--line);align-items:center;gap:8px;padding:8px 12px;display:flex}.console-in textarea{min-height:36px;max-height:160px;font:13px/18px var(--mono);resize:none;field-sizing:content;flex:1}.log-pre span{display:block}.log-bad{color:#f5a3a6}.log-warn{color:var(--warn)}.detail-row td{white-space:normal;background:var(--surface-2);height:auto;padding:0 16px 16px}@keyframes spin{to{transform:rotate(1turn)}}@media (prefers-reduced-motion:reduce){.header-icon.spinning svg,.pending-led{animation:none}}@media (width<=1280px){.stat-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.port-layout{grid-template-columns:minmax(0,1fr) 340px}.dom-grid{grid-template-columns:repeat(3,minmax(0,1fr))}}@media (width<=1100px){.editor-layout,.port-layout,.profile-grid,.snap-layout,.user-form,.widget-grid{grid-template-columns:1fr}.port-form{position:static}.snap-list{max-height:280px}}@media (width<=900px){.topbar{gap:8px;margin-left:0;padding:0 16px}.menu-button{display:grid}.mobile-brand{display:inline-flex}.connection span{display:none}.app-shell{margin-left:0;padding:20px 16px 48px}.sidebar{transition:transform .3s var(--ease);transform:translate(-100%)}body.menu-open .sidebar{transform:none;box-shadow:16px 0 48px #00000080}body.menu-open .menu-backdrop{z-index:25;background:#0000008c;border:0;display:block;position:fixed;inset:0}.page-heading{flex-wrap:wrap;align-items:flex-start}h1{font-size:24px;line-height:28px}.vlan-form{grid-template-columns:1fr}}@media (width<=640px){.stat-grid{gap:8px}.stat{padding:12px 16px}.stat-value{font-size:20px;line-height:24px}.user-chip .user-name{display:none}.heading-actions{margin-left:0}.dom-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.panel-header{flex-wrap:wrap}.panel-header .actions{flex-wrap:wrap;margin-left:0}}.port-form .form-stack{grid-template-columns:minmax(0,1fr)}.form-section{border:1px solid var(--line);border-radius:var(--radius);background:var(--surface-2,transparent);min-width:0}.form-section>summary{cursor:pointer;-webkit-user-select:none;user-select:none;align-items:baseline;gap:12px;padding:10px 12px;list-style:none;display:flex}.form-section>summary::-webkit-details-marker{display:none}.form-section>summary:before{content:"";border-right:1.5px solid var(--muted);border-bottom:1.5px solid var(--muted);width:6px;height:6px;transition:transform .15s var(--ease);flex:none;transform:translateY(-2px)rotate(-45deg)}.form-section[open]>summary:before{transform:translateY(-4px)rotate(45deg)}.form-section>summary span{color:var(--text);white-space:nowrap;font-size:13px;font-weight:500}.form-section>summary small{min-width:0;color:var(--muted);text-overflow:ellipsis;white-space:nowrap;margin-left:auto;font-size:12px;overflow:hidden}.form-section>.form-stack{padding:4px 12px 14px}.field-row.three{grid-template-columns:repeat(3,1fr)}.field small{color:var(--muted);font-size:11px}textarea{resize:vertical;min-height:0}.table td.pick,.table th.pick{width:36px;padding-right:0}.pick input{width:16px;height:16px;min-height:0;accent-color:var(--accent,#4f8ff7);cursor:pointer;padding:0}.bulk-panel{border-color:var(--line-strong);scroll-margin-top:calc(16px + var(--header-height))}.bulk-grid{grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:12px 16px;display:grid}.bulk-wide{grid-column:1/-1}.block-top{margin-top:16px}.bulk-bar{z-index:5;border:1px solid var(--line-strong);border-radius:var(--radius-lg);background:var(--surface-3);width:fit-content;max-width:100%;color:var(--text-2);flex-wrap:wrap;align-items:center;gap:8px 12px;margin:16px auto 0;padding:8px 8px 8px 16px;font-size:13px;display:flex;position:sticky;bottom:16px;box-shadow:0 8px 24px #0006}.bulk-bar strong{color:var(--text)}.dialog-backdrop{z-index:60;background:#0009;place-items:start center;padding:8vh 16px 16px;display:grid;position:fixed;inset:0;overflow-y:auto}.dialog{width:min(720px,100%);box-shadow:0 24px 64px #00000080}.dialog .config-pre.small{max-height:320px}.split{grid-template-columns:300px minmax(0,1fr);align-items:start;gap:16px;display:grid}.pick-list{max-height:calc(100dvh - 260px);display:grid;overflow-y:auto}.pick-list button{border:0;border-bottom:1px solid var(--line);min-height:40px;color:var(--text-2);text-align:left;cursor:pointer;background:0 0;align-items:center;gap:8px;padding:8px 16px;font-size:13px;display:flex}.pick-list button:hover{background:var(--surface-2);color:var(--text)}.pick-list button.active{background:var(--surface-3);color:var(--text);box-shadow:inset 2px 0 0 var(--accent)}.pick-list button small{color:var(--muted);margin-left:auto}.row-actions{white-space:nowrap;justify-content:flex-end;gap:4px;display:flex}.add-row{border-top:1px solid var(--line);grid-template-columns:repeat(auto-fit,minmax(120px,1fr));align-items:end;gap:8px 12px;padding:16px 20px;display:grid}.add-row .wide{grid-column:span 2}.add-row .button{min-height:36px}.chips{flex-wrap:wrap;gap:4px;display:flex}.chip{border:1px solid var(--line-strong);color:var(--text-2);white-space:nowrap;border-radius:999px;align-items:center;gap:4px;padding:1px 8px;font-size:11px;line-height:18px;display:inline-flex}.chip.on{border-color:color-mix(in srgb,var(--accent) 50%,transparent);color:var(--accent-ink)}.chip.warn{color:#e7bb62;border-color:#e0a83a80}.rm-entry{border-bottom:1px solid var(--line);padding:14px 20px}.rm-entry header{align-items:center;gap:10px;margin-bottom:8px;display:flex}.rm-entry pre{color:var(--text-2);white-space:pre-wrap;margin:0;font-size:12px}.check-grid{grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:8px 16px;display:grid}.panel-body.flush{padding:0}@media (width<=900px){.split{grid-template-columns:1fr}.pick-list{max-height:260px}}.port-form.static{max-height:none;position:static;overflow:visible}
