:root{font-family:system-ui,Avenir,Helvetica,Arial,sans-serif;line-height:1.5;font-weight:400;color-scheme:light dark;color:#ffffffde;background-color:#242424;font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}a{font-weight:500;color:#646cff;text-decoration:inherit}a:hover{color:#535bf2}body{margin:0;display:flex;place-items:center;min-width:320px;min-height:100vh}h1{font-size:3.2em;line-height:1.1}button{border-radius:8px;border:1px solid transparent;padding:.6em 1.2em;font-size:1em;font-weight:500;font-family:inherit;background-color:#1a1a1a;cursor:pointer;transition:border-color .25s}button:hover{border-color:#646cff}button:focus,button:focus-visible{outline:4px auto -webkit-focus-ring-color}@media(prefers-color-scheme:light){:root{color:#213547;background-color:#fff}a:hover{color:#747bff}button{background-color:#f9f9f9}}*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.pointer-events-none{pointer-events:none}.pointer-events-auto{pointer-events:auto}.visible{visibility:visible}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{inset:0}.-right-1{right:-.25rem}.-top-1{top:-.25rem}.bottom-4{bottom:1rem}.left-1\/2{left:50%}.left-3{left:.75rem}.left-4{left:1rem}.left-\[8\.5rem\]{left:8.5rem}.right-0{right:0}.right-16{right:4rem}.right-20{right:5rem}.right-4{right:1rem}.top-0{top:0}.top-0\.5{top:.125rem}.top-1\/2{top:50%}.top-20{top:5rem}.top-4{top:1rem}.z-0{z-index:0}.z-10{z-index:10}.z-20{z-index:20}.z-40{z-index:40}.z-50{z-index:50}.col-span-2{grid-column:span 2 / span 2}.mx-6{margin-left:1.5rem;margin-right:1.5rem}.mx-auto{margin-left:auto;margin-right:auto}.my-4{margin-top:1rem;margin-bottom:1rem}.mb-1{margin-bottom:.25rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-6{margin-bottom:1.5rem}.mb-8{margin-bottom:2rem}.ml-1{margin-left:.25rem}.ml-2{margin-left:.5rem}.ml-6{margin-left:1.5rem}.ml-auto{margin-left:auto}.mr-2{margin-right:.5rem}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-1\.5{margin-top:.375rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-6{margin-top:1.5rem}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.table{display:table}.grid{display:grid}.h-1\.5{height:.375rem}.h-10{height:2.5rem}.h-12{height:3rem}.h-2{height:.5rem}.h-28{height:7rem}.h-3{height:.75rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-8{height:2rem}.h-full{height:100%}.h-screen{height:100vh}.max-h-20{max-height:5rem}.max-h-64{max-height:16rem}.max-h-\[80vh\]{max-height:80vh}.max-h-\[90vh\]{max-height:90vh}.max-h-\[calc\(100vh-32px\)\]{max-height:calc(100vh - 32px)}.min-h-0{min-height:0px}.min-h-full{min-height:100%}.w-1{width:.25rem}.w-1\.5{width:.375rem}.w-12{width:3rem}.w-16{width:4rem}.w-2{width:.5rem}.w-28{width:7rem}.w-3{width:.75rem}.w-4{width:1rem}.w-40{width:10rem}.w-5{width:1.25rem}.w-8{width:2rem}.w-80{width:20rem}.w-96{width:24rem}.w-\[700px\]{width:700px}.w-fit{width:-moz-fit-content;width:fit-content}.w-full{width:100%}.w-screen{width:100vw}.min-w-0{min-width:0px}.min-w-\[1\.25rem\]{min-width:1.25rem}.min-w-\[220px\]{min-width:220px}.min-w-full{min-width:100%}.max-w-2xl{max-width:42rem}.max-w-3xl{max-width:48rem}.max-w-4xl{max-width:56rem}.max-w-\[280px\]{max-width:280px}.max-w-\[calc\(100\%-9\.5rem\)\]{max-width:calc(100% - 9.5rem)}.flex-1{flex:1 1 0%}.flex-shrink-0,.shrink-0{flex-shrink:0}.-translate-x-1\/2{--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-1\/2{--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes ping{75%,to{transform:scale(2);opacity:0}}.animate-ping{animation:ping 1s cubic-bezier(0,0,.2,1) infinite}.animate-spin{animation:spin 1s linear infinite}.cursor-pointer{cursor:pointer}.resize{resize:both}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-center{align-items:center}.items-baseline{align-items:baseline}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-1{gap:.25rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-6{gap:1.5rem}.gap-8{gap:2rem}.gap-x-3{-moz-column-gap:.75rem;column-gap:.75rem}.gap-y-0\.5{row-gap:.125rem}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse: 0;border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px * var(--tw-divide-y-reverse))}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-nowrap{white-space:nowrap}.rounded{border-radius:.25rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-b-lg{border-bottom-right-radius:.5rem;border-bottom-left-radius:.5rem}.rounded-t-lg{border-top-left-radius:.5rem;border-top-right-radius:.5rem}.border{border-width:1px}.border-t{border-top-width:1px}.border-\[\#BABABA\]{--tw-border-opacity: 1;border-color:rgb(186 186 186 / var(--tw-border-opacity, 1))}.bg-transparent{background-color:transparent}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.p-1{padding:.25rem}.p-1\.5{padding:.375rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.p-6{padding:1.5rem}.p-8{padding:2rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-12{padding-top:3rem;padding-bottom:3rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-5{padding-top:1.25rem;padding-bottom:1.25rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.pb-2\.5{padding-bottom:.625rem}.pb-3{padding-bottom:.75rem}.pb-4{padding-bottom:1rem}.pb-6{padding-bottom:1.5rem}.pb-8{padding-bottom:2rem}.pl-10{padding-left:2.5rem}.pl-4{padding-left:1rem}.pr-4{padding-right:1rem}.pt-0{padding-top:0}.pt-12{padding-top:3rem}.pt-2{padding-top:.5rem}.pt-3{padding-top:.75rem}.pt-4{padding-top:1rem}.pt-6{padding-top:1.5rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.align-middle{vertical-align:middle}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-\[10px\]{font-size:10px}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-light{font-weight:300}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.capitalize{text-transform:capitalize}.tracking-tight{letter-spacing:-.025em}.tracking-wide{letter-spacing:.025em}.tracking-wider{letter-spacing:.05em}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.opacity-75{opacity:.75}.shadow-2xl{--tw-shadow: 0 25px 50px -12px rgb(0 0 0 / .25);--tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-xl{--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.outline{outline-style:solid}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-300{transition-duration:.3s}body.argus html,body.argus,body.argus #root{font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;min-height:100vh;margin:0;padding:0;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body.argus:not(.dark) html,body.argus:not(.dark),body.argus:not(.dark) #root{background:#f4f4f4!important;color:#0f172a!important}body.argus.dark html,body.argus.dark,body.argus.dark #root{background:#0a0a0a!important;color:#fafafa!important}body.argus:not(.dark) .argus-app{background:#f4f4f4!important}body.argus:not(.dark) .argus-map-view{background:#f4f4f4!important}body.argus #root{height:100vh;width:100vw;overflow:hidden}body.argus #root>*{height:100%;min-height:0;overflow:hidden}body.argus .shell{height:100%;min-height:0;display:flex}body.argus .main{padding:0;flex:1;min-height:0;height:100%;overflow:hidden;display:flex;flex-direction:column}body.argus .main>*{flex:1;min-height:0;display:flex;flex-direction:column}body.argus .maplibregl-popup-content,body.argus .mapboxgl-popup-content{padding:0;min-width:0;max-width:none;box-shadow:none}.hover\:scale-110:hover{--tw-scale-x: 1.1;--tw-scale-y: 1.1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@media(min-width:640px){.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}@media(min-width:768px){.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}}:root{--black: #000000;--warm-dark: #4F4C44;--cool-gray: #F4F4F4;--gray: #6b6865;--light-gray: #4F4C44;--accent: #D1DAEF;--bg: #F4F4F4;--bg-elevated: #ffffff;--panel: #ffffff;--border: #8a8784;--text: #000000;--muted: #2d2b28;--blue: #D1DAEF;--ok: #19a34a;--warn: #eab308;--error: #ef4444}body.dark{--black: #0f0f0e;--warm-dark: #2a2825;--cool-gray: #E1E0E0;--gray: #8a8784;--light-gray: #b0aeab;--accent: #D1DAEF;--bg: #0f0f0e;--bg-elevated: #1c1b18;--panel: #1a1917;--border: #2f2d2a;--text: #d4d3d2;--muted: #8a8784;--blue: #D1DAEF;--ok: #22c55e;--warn: #fbbf24;--error: #f87171}body.dark .portBox.disconnected,body.dark .portsCard .portBox.off,body.dark .portBoxLarge.off{background:var(--border);color:var(--muted)}body.dark .portBox.gbe .wanIndicator,body.dark .portBox.wan .wanIndicator,body.dark .portBoxLarge .wanIndicator{background:#00000040;color:var(--text)}*{box-sizing:border-box}.numeric,.throughputValue,.latencyValue,.gwStatValue,.wanListStat .value,.statBigValue,.speedValue,.lastResultValue,.throughputDown,.throughputUp,.dlSpeed,.ulSpeed,.dl,.ul{font-variant-numeric:tabular-nums;font-feature-settings:"tnum";min-width:-moz-max-content;min-width:max-content}body{margin:0;font-family:ui-sans-serif,system-ui,-apple-system,Segoe UI,Roboto;background:var(--bg);color:var(--text)}a{text-decoration:none;color:inherit}.shell{display:flex;min-height:100vh}.main{flex:1;padding:24px 32px 40px;overflow-y:auto;overflow-x:hidden;display:flex;flex-direction:column;min-height:0}.main>*{flex:1;min-height:0}.sidenav{width:64px;min-width:64px;max-width:64px;background:var(--black);border-right:1px solid var(--warm-dark);padding:16px 0;color:var(--cool-gray);display:flex;flex-direction:column;align-items:center;position:sticky;top:0;height:100vh;overflow-y:auto}.sidenavTop{flex:1;width:100%;display:flex;flex-direction:column;align-items:center;gap:2px}.sidenavBottom{border-top:1px solid var(--warm-dark);padding-top:12px;margin-top:12px;width:100%;display:flex;flex-direction:column;align-items:center;gap:2px}.logo{display:none}.navMain{display:flex;flex-direction:column;align-items:center;gap:2px;width:100%}.navItem{display:flex;align-items:center;justify-content:center;gap:0;padding:12px;width:40px;height:40px;border-radius:10px;cursor:pointer;color:var(--gray);transition:color .15s,background .15s;font-size:14px;border:none;background:transparent;text-decoration:none}.navItem:hover{background:var(--warm-dark);color:var(--cool-gray)}.navItem.active{background:var(--warm-dark);color:var(--accent)}.themeToggle{background:none;border:none;width:40px;height:40px;padding:0;margin:0;display:flex;align-items:center;justify-content:center}.navItem.disabled{opacity:.4;cursor:not-allowed}.navIcon{font-size:20px;flex-shrink:0;width:24px;height:24px;display:flex;align-items:center;justify-content:center}.sidenav .navLabel{display:none}.sidenavInfo{padding:8px 0 0;text-align:center}.sandboxBadge{display:inline-block;font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--amber, #f59e0b);background:#f59e0b26;padding:4px 8px;border-radius:4px;margin-bottom:8px}.sidenavVersion,.sidenavSubtext{font-size:10px;color:var(--warm-dark);font-weight:500;margin:0}.sidenavSubtext{margin-top:1px}.topbar{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px}.brand h2{margin:0;font-size:20px;font-weight:700}.brand span{font-size:13px;color:var(--muted)}.status{display:flex;align-items:center;gap:10px}.connectionBanner{padding:10px 16px;border-radius:8px;margin-bottom:16px;font-size:13px;font-weight:500}.connectionBanner.connecting{background:#1f6feb1a;color:var(--blue);border:1px solid rgba(31,111,235,.2)}.connectionBanner.disconnected{background:#eab3081a;color:var(--warn);border:1px solid rgba(234,179,8,.2)}.card{background:var(--panel);border:1px solid var(--border);border-radius:12px;box-shadow:0 1px 2px #0000000a;margin-bottom:16px}.cardHeader{display:flex;align-items:center;justify-content:space-between;padding:12px 14px;border-bottom:1px solid var(--border);font-weight:700;font-size:13px;letter-spacing:.02em;text-transform:uppercase;color:var(--muted)}.cardBody{padding:14px}.stats-row{display:flex;gap:24px;flex-wrap:wrap}.stat{display:flex;flex-direction:column;gap:4px}.stat .label{font-size:12px;color:var(--muted)}.stat .value{font-weight:700;font-size:18px}.pill{padding:6px 10px;border:1px solid var(--border);border-radius:999px;font-size:12px;color:var(--muted)}.pill.good{color:var(--ok);background:#19a34a1a;border-color:#19a34a33}.pill.warn{color:var(--warn);background:#eab3081a;border-color:#eab30833}.pill.error{color:var(--error);background:#ef44441a;border-color:#ef444433}.statusPill{border-radius:999px;padding:8px 12px;font-weight:700;font-size:12px;border:1px solid var(--border)}.statusPill.small{padding:4px 8px;font-size:11px}.statusPill.ok{color:var(--ok);border-color:#19a34a40;background:#19a34a0f}.statusPill.warn{color:var(--warn);border-color:#eab30840;background:#eab3080f}.wanHeader{display:flex;align-items:flex-end;justify-content:space-between;margin-bottom:12px}.through{display:flex;gap:12px;font-weight:700;font-size:15px}.wanList{display:flex;flex-direction:column;gap:10px}.wanRow{border:1px solid var(--border);border-radius:12px;padding:12px;display:flex;justify-content:space-between;align-items:center;gap:12px}.wanName{font-weight:700}.wanStats{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.statBox{border:1px solid var(--border);border-radius:10px;padding:8px 10px;min-width:100px}.big{font-weight:700;margin-top:4px}.btn{background:var(--panel);border:1px solid rgba(31,111,235,.35);color:var(--blue);border-radius:10px;padding:10px 16px;font-weight:600;cursor:pointer;transition:all .15s}.btn:hover{background:#1f6feb0f}.btn.small{padding:6px 12px;font-size:12px}.speedtestRow{display:flex;align-items:center;gap:12px;margin-top:12px;padding-top:12px;border-top:1px solid var(--border)}.tabs{display:flex;gap:4px;margin-bottom:16px}.tab{padding:10px 16px;border:1px solid var(--border);border-radius:8px;background:var(--panel);cursor:pointer;font-weight:500;font-size:13px;color:var(--muted);transition:all .15s}.tab:hover{background:#00000005}.tab.active{background:var(--blue);color:#fff;border-color:var(--blue)}.logList{display:flex;flex-direction:column;gap:8px}.logItem{display:flex;gap:12px;padding:12px;border-radius:8px;background:#00000005;border-left:3px solid var(--border)}.logItem.success{border-left-color:var(--ok)}.logItem.warn{border-left-color:var(--warn)}.logItem.error{border-left-color:var(--error)}.logIcon{font-size:18px;width:24px;flex-shrink:0}.logContent{flex:1}.logMsg{font-size:13px;line-height:1.4;word-break:break-word}.logMeta{display:flex;gap:12px;margin-top:6px;flex-wrap:wrap}.logMeta span{font-size:11px;color:var(--muted);background:#0000000a;padding:2px 6px;border-radius:4px}.alert{padding:12px 16px;border-radius:8px;margin-bottom:16px;font-size:13px}.alert.success{background:#19a34a1a;color:var(--ok);border:1px solid rgba(25,163,74,.2)}.alert.error{background:#ef44441a;color:var(--error);border:1px solid rgba(239,68,68,.2)}.modeToggle{display:grid;grid-template-columns:1fr 1fr;gap:12px}.modeBtn{display:flex;flex-direction:column;align-items:center;padding:20px;border:2px solid var(--border);border-radius:12px;background:var(--panel);cursor:pointer;transition:all .15s}.modeBtn:hover{border-color:#1f6feb4d}.modeBtn.active{border-color:var(--blue);background:#1f6feb0a}.modeBtnIcon{font-size:28px;margin-bottom:8px}.modeBtnLabel{font-weight:700;font-size:15px;margin-bottom:4px}.modeBtnDesc{font-size:12px;color:var(--muted);text-align:center}.weightList{display:flex;flex-direction:column;gap:16px}.weightRow{display:flex;align-items:center;gap:16px}.weightLabel{min-width:140px}.weightName{font-weight:600}.weightSlider{flex:1;display:flex;align-items:center;gap:12px}.weightSlider input[type=range]{flex:1;height:8px;border-radius:4px;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:var(--border)}.weightSlider input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;width:20px;height:20px;border-radius:50%;background:var(--blue);cursor:pointer}.weightValue{min-width:48px;font-weight:700;text-align:right}.priorityList{display:flex;flex-direction:column;gap:8px}.priorityRow{display:flex;align-items:center;gap:12px;padding:12px;border:1px solid var(--border);border-radius:8px}.priorityBadge{width:28px;height:28px;border-radius:50%;background:var(--blue);color:#fff;display:flex;align-items:center;justify-content:center;font-weight:700;font-size:13px}.priorityInfo{flex:1}.priorityName{font-weight:600}.wanStatusGrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:12px}.wanStatusCard{padding:12px;border:1px solid var(--border);border-radius:8px}.wanStatusHeader{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px}.wanStatusName{font-weight:600}.wanStatusStats{display:flex;flex-direction:column;gap:4px;font-size:12px}.clientList{display:flex;flex-direction:column;gap:8px}.clientRow{display:flex;justify-content:space-between;align-items:center;padding:10px 12px;border:1px solid var(--border);border-radius:8px}.clientInfo{flex:1}.clientName{font-weight:600}.muted{color:var(--muted)}.small{font-size:12px}.loading{text-align:center;padding:24px;color:var(--muted)}.empty{text-align:center;padding:24px;color:var(--muted);font-style:italic}.row{display:flex;justify-content:space-between;align-items:center;padding:8px 0;border-bottom:1px solid var(--border)}.row:last-child{border-bottom:none}.pageHeader{display:flex;align-items:center;justify-content:space-between;margin-bottom:20px}.pageHeader h1{margin:0;font-size:24px;font-weight:600}.headerActions{display:flex;gap:8px}.tabBar{display:flex;gap:0;margin-bottom:16px;border-bottom:1px solid var(--border)}.tabBtn{padding:12px 20px;background:none;border:none;border-bottom:2px solid transparent;color:var(--muted);font-weight:500;font-size:14px;cursor:pointer;transition:all .15s}.tabBtn:hover{color:var(--text)}.tabBtn.active{color:var(--blue);border-bottom-color:var(--blue)}.tableCard{background:var(--panel);border:1px solid var(--border);border-radius:12px;margin-bottom:16px;overflow:hidden}.tableHeader{display:flex;align-items:center;gap:8px;padding:14px 16px;font-weight:600;font-size:14px;border-bottom:1px solid var(--border)}.tableIcon{font-size:16px}.logTable{width:100%;border-collapse:collapse;font-size:13px}.logTable th{text-align:left;padding:12px 16px;font-weight:500;color:var(--muted);border-bottom:1px solid var(--border);background:#00000005}.logTable td{padding:12px 16px;border-bottom:1px solid var(--border);vertical-align:middle}.logTable tr:hover td{background:#00000003}.subcategory{font-weight:500}.descCell{max-width:400px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.timeCell{color:var(--muted);white-space:nowrap}.severityBars{display:flex;gap:3px}.severityBars .bar{width:16px;height:10px;background:#e0e0e0;border-radius:2px}.severityBars .bar.active{background:var(--ok)}.tableFooter{display:flex;align-items:center;justify-content:space-between;padding:12px 16px;border-top:1px solid var(--border);font-size:12px;color:var(--muted)}.rowsSelect{display:flex;align-items:center;gap:8px}.rowsSelect select{padding:4px 8px;border:1px solid var(--border);border-radius:4px;font-size:12px}.wanTable{width:100%;border-collapse:collapse;font-size:13px}.wanTable th{text-align:left;padding:12px 16px;font-weight:500;color:var(--muted);border-bottom:1px solid var(--border)}.wanTable td{padding:12px 16px;border-bottom:1px solid var(--border)}.wanNameCell{display:flex;align-items:center;gap:8px}.statusDot{width:8px;height:8px;border-radius:50%;background:#ccc}.statusDot.online{background:var(--ok);animation:pulse 2s ease-in-out infinite;box-shadow:0 0 #19a34a66}.statusDot.offline{background:var(--error)}@keyframes pulse{0%,to{box-shadow:0 0 #19a34a66}50%{box-shadow:0 0 0 4px #19a34a00}}.ispCell{display:flex;align-items:center;gap:6px}.ispIcon{font-size:14px}.portsSection{padding:16px}.portsVisual{display:flex;gap:8px;margin-bottom:16px}.portBox{width:48px;height:48px;border-radius:6px;display:flex;flex-direction:column;align-items:center;justify-content:center;font-weight:600;font-size:14px;position:relative}.portBox.gbe{background:var(--ok);color:#fff}.portBox.gbe25{background:#0ea5e9;color:#fff}.portBox.wan{background:var(--ok);color:#fff}.portBox.disconnected{background:#e0e0e0;color:#999}.portBox .wanIcon{position:absolute;top:2px;right:2px;font-size:10px}.portNum{font-size:16px}.portsLegend{display:flex;gap:16px;margin-bottom:16px;font-size:12px;color:var(--muted)}.legendDot{display:inline-block;width:12px;height:12px;border-radius:3px;margin-right:4px;vertical-align:middle}.legendDot.gbe{background:var(--ok)}.legendDot.gbe25{background:#0ea5e9}.legendDot.disconnected{background:#e0e0e0}.portsTable{width:100%;border-collapse:collapse;font-size:13px}.portsTable th{text-align:left;padding:10px 12px;font-weight:500;color:var(--muted);border-bottom:1px solid var(--border)}.portsTable td{padding:10px 12px;border-bottom:1px solid var(--border)}.portCell{display:flex;align-items:center;gap:8px}.portIndicator{width:20px;height:20px;border-radius:4px}.portIndicator.gbe{background:var(--ok)}.portIndicator.gbe25{background:#0ea5e9}.portIndicator.wan{background:var(--ok)}.portIndicator.disconnected{background:#e0e0e0}.wanBadge{padding:2px 8px;background:#1f6feb1a;color:var(--blue);border-radius:4px;font-size:12px;font-weight:500}.lanBadge{padding:2px 8px;background:#0000000d;color:var(--muted);border-radius:4px;font-size:12px;font-weight:500}.statusOnline{color:var(--ok);font-weight:500}.statusOffline{color:var(--muted)}.ispName{font-weight:500;color:var(--text)}.speed25{color:#0ea5e9;font-weight:500}.speed1{color:var(--ok)}.connectionCell{display:flex;align-items:center;gap:6px}.wanModeSection{padding:16px}.modeRadios{display:flex;gap:24px;margin-bottom:20px}.modeRadio{display:flex;align-items:center;gap:8px;cursor:pointer;font-size:14px}.modeRadio input{display:none}.radioCircle{width:18px;height:18px;border:2px solid #ccc;border-radius:50%;position:relative}.modeRadio.active .radioCircle{border-color:var(--blue)}.modeRadio.active .radioCircle:after{content:"";position:absolute;top:3px;left:3px;width:8px;height:8px;background:var(--blue);border-radius:50%}.infoIcon{font-size:12px;color:var(--muted);margin-left:4px}.modeTable{width:100%;border-collapse:collapse;font-size:13px}.modeTable th{text-align:left;padding:10px 12px;font-weight:500;color:var(--muted);border-bottom:1px solid var(--border)}.modeTable td{padding:10px 12px;border-bottom:1px solid var(--border)}.dragHandle{color:#ccc;cursor:grab}.weightInput{display:flex;align-items:center;gap:4px}.weightInput input{width:50px;padding:4px 8px;border:1px solid var(--border);border-radius:4px;text-align:right}.statusText{font-weight:500}.statusText.online{color:var(--ok)}.statusText.offline{color:var(--error)}.clientStats{display:flex;gap:12px}.wifiSummary{display:grid;grid-template-columns:repeat(4,1fr);gap:16px;margin-bottom:16px;padding-bottom:16px;border-bottom:1px solid var(--border)}.wifiStat{text-align:center}.wifiStatValue{font-size:24px;font-weight:700;color:var(--text)}.wifiStatLabel{font-size:12px;color:var(--muted);margin-top:4px}.apList{display:flex;flex-direction:column;gap:8px}.apRow{display:flex;align-items:center;gap:16px;padding:12px;border:1px solid var(--border);border-radius:8px}.apInfo{flex:1}.apName{font-weight:600}.apMeta{margin-top:2px}.apChannels{display:flex;gap:6px}.channelBadge{padding:4px 8px;border-radius:4px;font-size:11px;font-weight:500}.channelBadge.ch2g{background:#eab3081a;color:var(--warn)}.channelBadge.ch5g{background:#1f6feb1a;color:var(--blue)}.apClients{text-align:right}.clientCount{font-size:18px;font-weight:700;margin-right:4px}.wifiNetworks{margin-bottom:16px;padding-bottom:16px;border-bottom:1px solid var(--border)}.networksHeader{font-size:12px;font-weight:600;text-transform:uppercase;color:var(--muted);margin-bottom:10px}.networksList{display:flex;flex-wrap:wrap;gap:8px}.networkItem{display:flex;align-items:center;gap:8px;padding:8px 12px;background:#00000008;border-radius:8px}.networkItem .networkName{font-weight:600;font-size:13px}.networkMeta{display:flex;align-items:center;gap:6px}.guestBadge{font-size:10px;padding:2px 6px;background:#eab30826;color:var(--warn);border-radius:4px;font-weight:600}.networkClients{font-size:12px;color:var(--muted)}.apStats{display:flex;gap:16px;align-items:center}.apPacketLoss{text-align:right}.packetLossValue{font-weight:600;font-size:14px}.packetLossValue.ok{color:var(--ok)}.packetLossValue.warn{color:var(--warn)}.wifiPacketLoss{display:flex;justify-content:space-between;align-items:center;padding:12px;background:#00000005;border-radius:8px;margin-top:12px}.packetLossLabel{font-size:13px;color:var(--muted)}.latencySimple{display:flex;justify-content:space-between;align-items:center;padding:12px 16px;background:#00000005;border-radius:10px;margin-bottom:16px}.latencyLabel{font-size:13px;color:var(--muted)}.latencyValue{font-size:16px;font-weight:600;color:var(--blue);min-width:70px;text-align:right}.weightInputSmall{display:flex;align-items:center;gap:4px}.weightInputSmall input{width:50px;padding:6px 8px;border:1px solid var(--border);border-radius:6px;text-align:right;font-size:13px;font-weight:600}.weightInputSmall input:focus{outline:none;border-color:var(--blue)}.weightInputSmall span{font-size:13px;color:var(--muted)}.overviewPage{max-width:1400px;width:100%;display:flex;flex-direction:column;flex:1;min-height:0}.pageSubtitle{font-size:13px;display:block;margin-top:2px}.headerStats{display:flex;align-items:center;gap:16px}.totalThroughputBadge{display:flex;gap:12px;padding:8px 14px;background:#00000008;border-radius:8px;font-size:13px;font-weight:600}.throughputDown{color:var(--ok);min-width:90px;text-align:right}.throughputUp{color:var(--blue);min-width:90px;text-align:right}.statusBadge{padding:6px 12px;border-radius:20px;font-size:12px;font-weight:600;text-transform:uppercase}.statusBadge.ok{background:#19a34a1a;color:var(--ok)}.statusBadge.warn{background:#eab3081a;color:var(--warn)}.overviewGrid{display:grid;grid-template-columns:1fr 1fr;gap:20px;flex:1;min-height:0;align-content:start}.overviewCol{display:flex;flex-direction:column;gap:16px;min-height:0}.gwStats{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-bottom:20px}.gwStatItem{padding:12px;background:#00000005;border-radius:8px}.gwStatLabel{font-size:11px;text-transform:uppercase;color:var(--muted);display:block;margin-bottom:4px}.gwStatValue{font-size:14px;font-weight:600;min-width:80px}.gwResources{display:flex;flex-direction:column;gap:16px}.resourceItem{flex:1}.resourceHeader{display:flex;justify-content:space-between;font-size:12px;margin-bottom:6px}.resourceHeader span:first-child{color:var(--muted)}.resourceHeader span:last-child{font-weight:600}.resourceBar{height:6px;background:#0000000f;border-radius:3px;overflow:hidden}.resourceFill{height:100%;border-radius:3px;transition:width .3s}.resourceFill.cpu{background:linear-gradient(90deg,#3b82f6,#60a5fa)}.resourceFill.mem{background:linear-gradient(90deg,#22c55e,#4ade80)}.wanListItem{padding:16px;border-bottom:1px solid var(--border)}.wanListItem:last-child{border-bottom:none}.wanListHeader{display:flex;align-items:center;gap:10px;margin-bottom:12px}.wanListName{font-weight:600;flex:1}.wanListBadge{padding:4px 10px;background:#3b82f61a;color:var(--blue);border-radius:4px;font-size:11px;font-weight:600}.wanListStats{display:grid;grid-template-columns:repeat(4,minmax(80px,1fr));gap:12px}.wanListStat{display:flex;flex-direction:column;gap:2px}.wanListStat .label{font-size:10px;text-transform:uppercase;color:var(--muted)}.wanListStat .value{font-size:13px;font-weight:500;min-width:70px;text-align:right}.wanListStat .value.ok{color:var(--ok)}.cardBody.noPad{padding:0}.overviewTop{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-bottom:16px}.overviewCard{background:var(--panel);border:1px solid var(--border);border-radius:12px;padding:16px}.gatewayCard .gatewayHeader{display:flex;align-items:center;gap:12px;margin-bottom:16px;padding-bottom:16px;border-bottom:1px solid var(--border)}.gatewayIcon{font-size:28px}.gatewayName{font-weight:700;font-size:16px}.gatewayInfo{margin-bottom:16px}.infoRow{display:flex;justify-content:space-between;font-size:13px;padding:4px 0}.wanPills{display:flex;gap:16px}.wanPill{font-size:13px;font-weight:600}.wanPill.online{color:var(--ok)}.wanPill.offline{color:var(--error)}.statsCard{display:flex;align-items:center}.statsGrid{display:grid;grid-template-columns:1fr 1fr;gap:24px;width:100%}.statItem{text-align:center}.statLabel{font-size:12px;color:var(--muted);text-transform:uppercase;margin-bottom:8px}.statBigValue{font-size:32px;font-weight:700;margin-bottom:12px}.progressBar{height:8px;background:var(--border);border-radius:4px;overflow:hidden}.progressFill{height:100%;border-radius:4px;transition:width .3s ease}.progressFill.cpu{background:var(--blue)}.progressFill.mem{background:var(--ok)}.wanSummaryRow{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:16px;margin-bottom:16px}.wanCard{padding:0;overflow:hidden}.wanCardHeader{display:flex;align-items:center;gap:8px;padding:12px 16px;background:#00000005;border-bottom:1px solid var(--border)}.wanCardName{font-weight:600;flex:1}.wanUptime{color:var(--blue);font-weight:600}.wanCardBody{padding:16px}.wanInfoRow{display:flex;justify-content:space-between;font-size:13px;padding:4px 0}.dlSpeed{color:var(--ok);font-weight:500;min-width:75px;display:inline-block}.ulSpeed{color:var(--blue);font-weight:500;min-width:75px;display:inline-block}.wanLatency{display:flex;align-items:center;gap:6px;margin-top:8px;font-size:12px;color:var(--muted)}.latencyDot{width:8px;height:8px;background:var(--blue);border-radius:2px}.speedtestCard{background:var(--panel);border:1px solid var(--border);border-radius:12px;padding:16px;min-width:320px}.speedtestHeader{display:flex;justify-content:space-between;align-items:center;margin-bottom:12px}.speedtestHeader h3{font-size:14px;font-weight:600;margin:0}.speedtestResults{display:flex;gap:12px;font-size:14px;font-weight:600}.dlResult{color:var(--ok)}.ulResult{color:var(--blue)}.runningText{color:var(--muted);font-weight:400}.wanTabs{display:flex;gap:8px;margin-bottom:12px}.wanTab{padding:6px 12px;border:1px solid var(--border);border-radius:6px;background:transparent;font-size:12px;cursor:pointer;transition:all .15s ease}.wanTab:hover{background:#00000008}.wanTab.active{background:var(--blue);color:#fff;border-color:var(--blue)}.wanTab:disabled{opacity:.5;cursor:not-allowed}.speedtestChart{height:120px;background:#00000005;border-radius:8px;margin-bottom:12px;overflow:hidden;display:flex;align-items:center;justify-content:center}.chartSvg{width:100%;height:100%}.chartSpeed{font-size:14px;font-weight:600}.chartPlaceholder{color:var(--muted);font-size:13px}.lastResult{color:var(--text)}.speedtestProvider{text-align:center;font-size:12px;color:var(--muted);margin-bottom:12px}.pingResults{display:flex;justify-content:center;gap:16px;padding:12px;background:#00000005;border-radius:8px;margin-bottom:12px}.pingItem{display:flex;align-items:center;gap:6px;font-size:13px}.pingIcon{width:24px;height:24px;display:flex;align-items:center;justify-content:center;border-radius:4px;font-size:12px;font-weight:700}.pingIcon.microsoft{background:linear-gradient(135deg,#f25022,#7fba00,#00a4ef,#ffb900);color:#fff}.pingIcon.google{background:#4285f4;color:#fff}.pingIcon.cloudflare{background:#f38020;color:#fff}.speedtestActions{display:flex;justify-content:center}.btnSpeedtest{width:100%;padding:12px 24px;background:transparent;border:1px solid var(--border);border-radius:8px;font-size:14px;cursor:pointer;transition:all .15s ease}.btnSpeedtest:hover:not(:disabled){background:#00000008}.btnSpeedtest:disabled{opacity:.6;cursor:not-allowed}.lastResultSummary{display:flex;gap:24px}.lastResultValue{font-size:16px;font-weight:600;color:var(--text)}.pingIcon.unifi{background:var(--blue);color:#fff}.pingIcon.wan1{background:var(--ok);color:#fff}.pingIcon.wan2{background:#f59e0b;color:#fff}.speedtestHistory{margin-top:12px;padding-top:12px;border-top:1px solid var(--border)}.historyTitle{font-size:11px;text-transform:uppercase;color:var(--muted);margin-bottom:8px}.historyRow{display:flex;justify-content:space-between;font-size:12px;padding:4px 0;color:var(--muted)}.historySpeed{color:var(--text)}.speedtestTime{text-align:center;font-size:11px;color:var(--muted);margin-bottom:12px}.internetPage{max-width:1100px;margin:0 auto}.internetPageFull{width:100%}.internetHeader{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:20px}.headerLeft h1{margin:0 0 4px;font-size:24px;font-weight:600}.headerLeft .gatewayName{font-size:13px;color:var(--muted)}.headerRight{text-align:right}.totalThroughput{display:flex;flex-direction:column;align-items:flex-end}.throughputLabel{font-size:11px;text-transform:uppercase;color:var(--muted);margin-bottom:4px}.throughputValue{font-size:14px;font-weight:600}.throughputValue .dl{color:var(--ok);margin-right:12px;min-width:85px;display:inline-block;text-align:right}.throughputValue .ul{color:var(--muted);min-width:85px;display:inline-block;text-align:right}.internetPage .wanTabs{display:flex;gap:0;border-bottom:2px solid var(--border);margin-bottom:20px}.internetPage .wanTab{padding:12px 24px;border:none;border-bottom:2px solid transparent;border-radius:0;background:none;font-size:14px;font-weight:500;color:var(--muted);cursor:pointer;display:flex;align-items:center;gap:8px;margin-bottom:-2px;transition:all .15s}.internetPage .wanTab:hover{color:var(--text)}.internetPage .wanTab.active{color:var(--blue);border-bottom-color:var(--blue);background:none}.internetGrid{display:grid;grid-template-columns:340px 1fr;gap:20px}.internetGridFull{display:grid;grid-template-columns:320px 1fr;gap:24px}.wanColumn{display:flex;flex-direction:column;gap:16px}.portsColumn{min-width:0}.wanTabsBar{display:flex;gap:0;margin-bottom:24px;border-bottom:2px solid var(--border)}.wanTabBtn{padding:14px 28px;border:none;border-bottom:3px solid transparent;background:none;font-size:15px;font-weight:500;color:var(--muted);cursor:pointer;display:flex;align-items:center;gap:10px;margin-bottom:-2px;transition:all .15s}.wanTabBtn:hover{color:var(--text);background:#00000005}.wanTabBtn.active{color:var(--blue);border-bottom-color:var(--blue)}.portsCardLarge{background:var(--panel);border:1px solid var(--border);border-radius:16px;padding:24px}.portsCardHeader{display:flex;justify-content:space-between;align-items:center;margin-bottom:24px}.portsCardHeader h2{margin:0;font-size:18px;font-weight:600}.portCount{font-size:14px;color:var(--muted);background:#0000000f;padding:6px 12px;border-radius:20px;border:1px solid var(--border)}.portsVisualLarge{display:flex;gap:12px;margin-bottom:20px;flex-wrap:wrap}.portBoxLarge{width:64px;height:64px;border-radius:10px;display:flex;flex-direction:column;align-items:center;justify-content:center;font-weight:600;position:relative;transition:transform .15s}.portBoxLarge:hover{transform:scale(1.05)}.portBoxLarge .portNum{font-size:20px}.portBoxLarge.gbe{background:linear-gradient(135deg,#22c55e,#16a34a);color:#fff}.portBoxLarge.gbe25{background:linear-gradient(135deg,#0ea5e9,#0284c7);color:#fff}.portBoxLarge.wan{background:linear-gradient(135deg,#22c55e,#16a34a);color:#fff}.portBoxLarge.off{background:#e5e7eb;color:#9ca3af}.portBoxLarge .wanIndicator{position:absolute;bottom:4px;font-size:9px;font-weight:700;background:#ffffff4d;padding:1px 4px;border-radius:3px}.portsLegendLarge{display:flex;gap:24px;margin-bottom:24px;padding-bottom:20px;border-bottom:1px solid var(--border);font-size:13px;color:var(--muted)}.portsLegendLarge .legendDot{display:inline-block;width:14px;height:14px;border-radius:4px;margin-right:6px;vertical-align:middle}.portsLegendLarge .legendDot.gbe{background:#22c55e}.portsLegendLarge .legendDot.gbe25{background:#0ea5e9}.portsLegendLarge .legendDot.off{background:#e5e7eb}.portsTableLarge{width:100%;border-collapse:collapse}.portsTableLarge th{text-align:left;padding:14px 16px;font-size:12px;font-weight:600;text-transform:uppercase;color:var(--muted);border-bottom:1px solid var(--border);background:#00000005}.portsTableLarge td{padding:16px;border-bottom:1px solid var(--border);font-size:14px}.portsTableLarge tr:hover td{background:#00000003}.portsTableLarge tr.disabled td{opacity:.5}.portCellLarge{display:flex;align-items:center;gap:12px}.portIndicatorLarge{width:28px;height:28px;border-radius:6px}.portIndicatorLarge.gbe{background:#22c55e}.portIndicatorLarge.gbe25{background:#0ea5e9}.portIndicatorLarge.wan{background:#22c55e}.portIndicatorLarge.off{background:#e5e7eb}.portNumCell{font-weight:600;font-size:16px}.typeBadge{display:inline-block;padding:4px 12px;border-radius:6px;font-size:12px;font-weight:600}.typeBadge.wan{background:#3b82f61a;color:var(--blue)}.typeBadge.lan{background:#0000000d;color:var(--muted)}.networkName{font-weight:500}.networkName.muted{color:var(--muted)}.speedFast{color:#0ea5e9;font-weight:600}.speedNormal,.statusConnected{color:var(--ok);font-weight:500}.statusDisconnected{color:var(--muted)}.wanInfoCard{background:var(--panel);border:1px solid var(--border);border-radius:16px;padding:20px;cursor:pointer;transition:all .2s;position:relative}.wanInfoCard:hover{box-shadow:0 4px 20px #00000014;border-color:var(--blue)}.wanInfoHeader{display:flex;align-items:flex-start;gap:12px;margin-bottom:16px}.ispLogo{width:40px;height:40px;background:linear-gradient(135deg,#3b82f6,#60a5fa);border-radius:10px;display:flex;align-items:center;justify-content:center;font-size:20px}.ispInfo{flex:1}.ispInfo .ispName{font-size:18px;font-weight:600;color:var(--blue);display:block}.ispInfo .availability{font-size:16px;font-weight:600;color:var(--ok)}.wanInfoBody{margin-bottom:16px}.wanInfoBody .infoRow{display:flex;justify-content:space-between;align-items:center;padding:8px 0;font-size:14px;min-height:32px}.wanInfoBody .label{color:var(--muted)}.wanInfoBody .value{font-weight:500}.wanInfoBody .value.throughput{display:flex;gap:12px}.wanInfoBody .dl{color:var(--ok);min-width:80px;display:inline-block}.wanInfoBody .ul{color:var(--muted);min-width:80px;display:inline-block}.miniGraph{height:60px;background:linear-gradient(180deg,#3b82f60d,#3b82f626);border-radius:8px;margin-bottom:16px;overflow:hidden}.throughputGraph{width:100%;height:100%;display:flex;align-items:flex-end;padding:8px}.graphBars{display:flex;gap:4px;height:100%;align-items:flex-end}.graphBars .bar{width:8px;border-radius:2px;transition:height .3s}.graphBars .bar.rx{background:var(--blue);opacity:.5}.graphBars .bar.tx{background:var(--ok)}.latencyRow{display:flex;gap:24px;justify-content:center;padding:12px;background:#00000005;border-radius:10px;margin-bottom:16px}.latencyItem{display:flex;align-items:center;gap:8px;font-size:14px;font-weight:500}.latencyIcon{width:28px;height:28px;display:flex;align-items:center;justify-content:center;border-radius:6px;font-size:12px;font-weight:700}.latencyIcon.icon0{background:linear-gradient(135deg,#f25022 25%,#7fba00 25% 50%,#00a4ef 50% 75%,#ffb900 75%);color:#fff}.latencyIcon.icon1{background:#ea4335;color:#fff}.latencyIcon.icon2{background:#f38020;color:#fff}.speedtestBtn{width:100%;padding:14px;background:transparent;border:2px solid var(--blue);border-radius:10px;color:var(--blue);font-size:15px;font-weight:600;cursor:pointer;display:flex;align-items:center;justify-content:center;gap:8px;transition:all .15s}.speedtestBtn:hover:not(:disabled){background:var(--blue);color:#fff}.speedtestBtn:disabled{opacity:.6;cursor:not-allowed}.btnIcon{font-size:18px}.lastSpeedtest{text-align:center;font-size:12px;color:var(--muted);margin-top:12px}.clickHint{text-align:center;font-size:11px;color:var(--muted);margin-top:16px}.internetSidebar{display:flex;flex-direction:column;gap:16px}.portsCard{background:var(--panel);border:1px solid var(--border);border-radius:12px;padding:16px}.portsHeader{font-size:14px;font-weight:600;margin-bottom:16px}.portsCard .portsVisual{display:flex;gap:6px;margin-bottom:12px;flex-wrap:wrap}.portsCard .portBox{width:40px;height:40px;border-radius:6px;display:flex;flex-direction:column;align-items:center;justify-content:center;font-weight:600;font-size:13px;position:relative}.portsCard .portBox.off{background:#e5e7eb;color:#9ca3af}.portsCard .portBox .wanDot{position:absolute;top:3px;right:3px;width:6px;height:6px;background:#fff;border-radius:50%}.portsCard .portsLegend{display:flex;gap:16px;font-size:11px;color:var(--muted)}.portsCard .dot{display:inline-block;width:10px;height:10px;border-radius:3px;margin-right:4px;vertical-align:middle}.portsCard .dot.gbe{background:var(--ok)}.portsCard .dot.gbe25{background:#0ea5e9}.portsCard .dot.off{background:#e5e7eb}.modeCard{background:var(--panel);border:1px solid var(--border);border-radius:12px;padding:16px}.modeHint{font-size:12px;color:var(--muted);margin:-4px 0 8px}.modeHeader{display:flex;justify-content:space-between;align-items:center;font-size:14px;font-weight:600;margin-bottom:16px}.modeHeader .saveBtn,.saveBtn{padding:6px 14px;background:#525252!important;color:#fff!important;border:none;border-radius:6px;font-size:12px;font-weight:500;cursor:pointer}.modeOptions{display:flex;gap:12px;margin-bottom:16px}.modeOption{flex:1;display:flex;align-items:center;gap:8px;padding:12px;border:1px solid var(--border);border-radius:8px;cursor:pointer;font-size:13px;transition:all .15s}.modeOption input{display:none}.modeOption .radio{width:16px;height:16px;border:2px solid #d1d5db;border-radius:50%;position:relative}.modeOption.active{border-color:var(--blue);background:#3b82f60d}.modeOption.active .radio{border-color:var(--blue)}.modeOption.active .radio:after{content:"";position:absolute;top:3px;left:3px;width:6px;height:6px;background:var(--blue);border-radius:50%}.wanPriorityList{display:flex;flex-direction:column;gap:8px}.priorityItem{display:flex;align-items:center;gap:10px;padding:10px 12px;background:#00000005;border-radius:6px;font-size:13px}.priorityItem .wanName{flex:1;font-weight:500}.priorityItem .wanRole{color:var(--muted);font-size:12px}.priorityItem .prioritySelect{width:48px;padding:6px 8px;border:1px solid var(--border);border-radius:6px;font-size:13px;font-weight:600;background:var(--bg);color:var(--text);cursor:pointer}.priorityItem .prioritySelect:focus{outline:none;border-color:var(--blue)}.modalOverlay{position:fixed;inset:0;background:#00000080;display:flex;align-items:center;justify-content:flex-end;z-index:1000;padding:20px}.wanModal{width:400px;max-height:calc(100vh - 40px);background:var(--panel);border-radius:16px;overflow:hidden;display:flex;flex-direction:column;box-shadow:0 20px 60px #0000004d}.modalHeader{display:flex;justify-content:space-between;align-items:center;padding:20px;border-bottom:1px solid var(--border)}.modalHeader h2{margin:0;font-size:18px;font-weight:600}.closeBtn{width:32px;height:32px;border:none;background:#0000000d;border-radius:8px;font-size:20px;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .15s}.closeBtn:hover{background:#0000001a}.modalTabs{display:flex;border-bottom:1px solid var(--border);padding:0 20px}.modalTabs button{padding:12px 16px;background:none;border:none;border-bottom:2px solid transparent;cursor:pointer;color:var(--muted);transition:all .15s}.modalTabs button:hover{color:var(--text)}.modalTabs button.active{color:var(--blue);border-bottom-color:var(--blue)}.tabIcon{font-size:18px}.modalContent{flex:1;overflow-y:auto;padding:20px}.overviewContent{display:flex;flex-direction:column}.connectionToggle{display:flex;flex-direction:column;gap:12px;padding:16px;background:#00000005;border-radius:10px;margin-bottom:8px}.connectionToggle .toggleLabel{font-size:13px;font-weight:600;color:var(--text);text-transform:uppercase;letter-spacing:.5px}.toggleButtons{display:flex;gap:8px}.toggleBtn{flex:1;padding:10px 16px;border:2px solid var(--border);border-radius:8px;background:var(--panel);font-size:14px;font-weight:500;color:var(--muted);cursor:pointer;transition:all .2s}.toggleBtn:hover:not(:disabled){border-color:var(--blue);color:var(--text)}.toggleBtn.active{background:var(--ok);border-color:var(--ok);color:#fff}.toggleBtn.danger.active{background:var(--error);border-color:var(--error);color:#fff}.toggleBtn:disabled{opacity:.6;cursor:not-allowed}.toggleError{padding:8px 12px;background:#ef44441a;border:1px solid var(--error);border-radius:6px;color:var(--error);font-size:13px}.toggleStatus{font-size:13px;color:var(--muted);font-style:italic}.toggleHint{font-size:12px;color:var(--muted);padding:8px 0 0;line-height:1.4}.portModal{background:var(--panel);border-radius:16px;width:90%;max-width:400px;max-height:90vh;overflow:hidden;display:flex;flex-direction:column;box-shadow:0 20px 60px #00000026}.portNameSection{margin-bottom:8px}.portNameLabel{display:block;font-size:12px;color:var(--muted);margin-bottom:6px}.portNameValue{padding:12px 16px;background:#00000008;border-radius:8px;font-size:15px;font-weight:500}.portIspInfo{font-size:13px;color:var(--muted);margin-bottom:8px}.portIspInfo strong{color:var(--text)}.portToggleSection{margin:16px 0}.portToggleLabel{display:block;font-size:12px;color:var(--muted);margin-bottom:10px}.radioToggle{display:flex;gap:24px}.radioOption{display:flex;align-items:center;gap:8px;cursor:pointer;font-size:14px;color:var(--text)}.radioOption input{display:none}.radioCircle{width:20px;height:20px;border:2px solid var(--border);border-radius:50%;display:flex;align-items:center;justify-content:center;transition:all .15s}.radioOption.selected .radioCircle{border-color:var(--blue)}.radioOption.selected .radioCircle:after{content:"";width:10px;height:10px;background:var(--blue);border-radius:50%}.radioOption:hover .radioCircle{border-color:var(--blue)}.radioText{font-weight:500}.wanGroupSection{margin:16px 0;display:flex;align-items:center;gap:12px}.wanGroupLabel{font-size:13px;color:var(--muted)}.wanGroupSelect{padding:8px 12px;border:1px solid var(--border);border-radius:8px;font-size:14px;background:var(--panel);color:var(--text);cursor:pointer;min-width:100px}.portLinkInfo{margin-top:8px}.linkRow{display:flex;justify-content:space-between;align-items:center;padding:10px 0;font-size:14px}.linkRow .label{color:var(--muted)}.linkRow .value{font-weight:500}.linkRow .value.connected{color:var(--ok)}.linkRow .value.disconnected{color:var(--muted)}.linkRow .value.mono{font-family:SF Mono,Monaco,monospace;font-size:13px}.portToggleStatus{font-size:13px;color:var(--blue);font-style:italic;padding:8px 0}.portRow{cursor:pointer;transition:background .15s}.portRow:hover{background:#1f6feb0a}.portRow:hover td{background:transparent}.statRow{display:flex;justify-content:space-between;align-items:center;padding:12px 0;border-bottom:1px solid var(--border)}.statRow:last-child{border-bottom:none}.statRow .label{color:var(--muted);font-size:14px}.statRow .value{font-weight:500;font-size:14px}.statRow .value.status.online{color:var(--ok)}.statRow .value.status.offline{color:var(--error)}.statRow .value.highlight{color:var(--blue);font-weight:600}.divider{height:1px;background:var(--border);margin:8px 0}.statsContent h3{font-size:14px;font-weight:600;margin:0 0 16px}.qualitySection{margin-bottom:24px}.qualityLabel{display:flex;align-items:center;gap:6px;font-size:13px;color:var(--muted);margin-bottom:12px}.latencyChart{display:flex;gap:8px;height:100px}.chartYAxis{display:flex;flex-direction:column;justify-content:space-between;font-size:10px;color:var(--muted);text-align:right;width:24px}.chartBars{flex:1;display:flex;align-items:flex-end;gap:2px;background:linear-gradient(180deg,#eab3081a,#19a34a1a);border-radius:4px;padding:4px}.chartBar{flex:1;background:linear-gradient(180deg,var(--warn) 0%,var(--ok) 100%);border-radius:2px;min-height:4px}.chartXAxis{display:flex;justify-content:space-between;font-size:10px;color:var(--muted);margin-top:4px;padding-left:32px}.throughputDisplay{display:flex;gap:24px}.throughputStat{flex:1;text-align:center;padding:16px;background:#00000005;border-radius:8px}.throughputStat .bigNum{font-size:28px;font-weight:700;display:block}.throughputStat .subLabel{font-size:12px;color:var(--muted)}.speedtestResult{background:#3b82f60d;border-radius:12px;padding:16px}.speedtestResult h4{font-size:12px;text-transform:uppercase;color:var(--muted);margin:0 0 12px}.speedtestStats{display:flex;justify-content:space-around;margin-bottom:8px}.speedtestStats div{text-align:center}.speedValue{font-size:24px;font-weight:700;display:block}.speedUnit{font-size:11px;color:var(--muted)}.speedtestResult .speedtestTime{display:block;text-align:center;font-size:11px;color:var(--muted);margin-top:8px}@media(max-width:1024px){.internetGridFull{grid-template-columns:1fr;gap:16px}.portsCardLarge{padding:16px}.portsVisualLarge{gap:8px}.portBoxLarge{width:52px;height:52px}.overviewGrid,.overviewTop{grid-template-columns:1fr}.wanListStats{grid-template-columns:repeat(2,1fr)}}@media(max-width:768px){.sidenav{position:fixed;left:0;top:0;width:64px!important;min-width:64px!important;max-width:64px!important;transform:translate(-100%);transition:transform .3s cubic-bezier(.4,0,.2,1);z-index:1001;box-shadow:4px 0 20px #0000004d}.sidenav.open{transform:translate(0)}.sidenav .navLabel{display:none!important}.sidenav .sidenavInfo{display:flex!important;flex-direction:column;align-items:center}.mobileNavOverlay{position:fixed;inset:0;background:#00000080;opacity:0;visibility:hidden;transition:all .3s ease;z-index:1000}.mobileNavOverlay.visible{opacity:1;visibility:visible}.mobileHeader{display:flex;align-items:center;justify-content:space-between;padding:12px 16px;background:var(--black);border-bottom:1px solid rgba(255,255,255,.08);position:sticky;top:0;z-index:100}.mobileHeader .logo{margin:0;font-size:16px;padding:0}.mobileHeaderLogo{height:28px;width:auto}.hamburgerBtn{width:44px;height:44px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:5px;background:transparent;border:none;cursor:pointer;padding:8px;border-radius:8px}.hamburgerBtn:active{background:#ffffff1a}.hamburgerBtn span{display:block;width:22px;height:2px;background:#fff;border-radius:2px;transition:all .3s ease}.main{padding:16px 16px 80px}.shell{flex-direction:column}.pageHeader{flex-direction:column;align-items:flex-start;gap:12px}.pageHeader h1{font-size:20px}.headerStats{width:100%;justify-content:space-between}.headerActions{width:100%;justify-content:flex-end}.internetHeader{flex-direction:column;gap:12px}.headerRight{text-align:left;width:100%}.totalThroughput{flex-direction:row;align-items:center;gap:12px}.wanTabsBar{overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none;margin:0 -16px 20px;padding:0 16px}.wanTabsBar::-webkit-scrollbar{display:none}.wanTabBtn{padding:12px 20px;white-space:nowrap;flex-shrink:0}.tabBar{overflow-x:auto;-webkit-overflow-scrolling:touch;margin:0 -16px 16px;padding:0 16px;scrollbar-width:none}.tabBar::-webkit-scrollbar{display:none}.tabBtn{white-space:nowrap;flex-shrink:0}.card{border-radius:10px;margin-bottom:12px}.cardHeader{padding:10px 12px;font-size:12px}.cardBody{padding:12px}.wanInfoCard{padding:16px;border-radius:12px}.wanInfoHeader{gap:10px;margin-bottom:12px}.ispLogo{width:36px;height:36px;font-size:18px}.ispInfo .ispName{font-size:16px}.wanInfoBody .infoRow{font-size:13px;padding:6px 0}.latencySimple{padding:10px 14px;margin-bottom:12px}.speedtestBtn{padding:12px;font-size:14px}.modeCard{padding:14px}.modeOptions{flex-direction:column;gap:8px}.modeOption{padding:14px}.priorityItem{padding:12px}.weightInputSmall input{width:60px;padding:8px 10px;font-size:14px}.portsCardLarge{padding:14px;border-radius:12px}.portsCardHeader{flex-direction:column;align-items:flex-start;gap:8px;margin-bottom:16px}.portsCardHeader h2{font-size:16px}.portsVisualLarge{gap:6px;justify-content:center}.portBoxLarge{width:44px;height:44px;border-radius:8px}.portBoxLarge .portNum{font-size:16px}.portBoxLarge .wanIndicator{font-size:7px;padding:1px 3px}.portsLegendLarge{flex-wrap:wrap;gap:12px;font-size:12px;padding-bottom:16px;margin-bottom:16px}.tableWrapper{overflow-x:auto;-webkit-overflow-scrolling:touch;margin:0 -14px;padding:0 14px}.portsTableLarge{min-width:500px;font-size:12px}.portsTableLarge th,.portsTableLarge td{padding:10px 12px}.portCellLarge{gap:8px}.portIndicatorLarge{width:24px;height:24px}.portNumCell{font-size:14px}.typeBadge{padding:3px 8px;font-size:11px}.tableCard{border-radius:10px;overflow:hidden}.logTableWrapper{overflow-x:auto;-webkit-overflow-scrolling:touch}.logTable{min-width:600px;font-size:12px}.logTable th,.logTable td{padding:10px 12px}.descCell{max-width:200px}.tableFooter{flex-direction:column;gap:12px;align-items:flex-start;padding:14px 16px}.tableFooter .pageInfo,.tableFooter .rowsSelect{font-size:13px}.tableFooter .rowsSelect select{padding:8px 12px;font-size:14px}.logsPage{max-width:100%}.logsPage .pageHeader{margin-bottom:16px}.logsPage .btn.small{padding:10px 16px;font-size:13px}.subcategory{font-size:12px;padding:3px 8px;background:#0000000a;border-radius:4px}.overviewPage{max-width:100%}.overviewPage .pageHeader{margin-bottom:16px}.headerStats{flex-wrap:wrap;gap:10px}.totalThroughputBadge{order:1;flex-grow:1}.gwStats{grid-template-columns:1fr 1fr;gap:8px}.gwStatItem{padding:10px}.gwStatLabel{font-size:10px}.gwStatValue{font-size:13px}.wanListItem{padding:12px}.wanListStats{grid-template-columns:1fr 1fr;gap:8px}.wanListStat .label{font-size:9px}.wanListStat .value{font-size:12px}.wifiSummary{grid-template-columns:repeat(2,1fr);gap:12px}.wifiStatValue{font-size:20px}.wifiStatLabel{font-size:11px}.networksList{gap:6px}.networkItem{padding:6px 10px}.apRow{flex-direction:column;align-items:flex-start;gap:10px;padding:10px}.apChannels{width:100%;justify-content:flex-start}.apStats{width:100%;justify-content:space-between}.clientRow{padding:10px}.clientName{font-size:13px}.clientStats{flex-direction:column;align-items:flex-end;gap:2px}.statusBadge{padding:4px 10px;font-size:11px}.totalThroughputBadge{padding:6px 12px;font-size:12px;gap:8px}.pill{padding:4px 8px;font-size:11px}.modalOverlay{padding:0;align-items:stretch;justify-content:stretch}.wanModal{width:100%;max-width:100%;max-height:100vh;border-radius:0}.modalHeader{padding:16px}.modalHeader h2{font-size:16px}.modalTabs{padding:0 16px}.modalContent{padding:16px}.statRow{padding:10px 0}.statRow .label,.statRow .value{font-size:13px}.throughputDisplay{gap:16px}.throughputStat{padding:12px}.throughputStat .bigNum{font-size:24px}.speedtestResult{padding:14px;border-radius:10px}.speedValue{font-size:20px}.latencyChart{height:80px;gap:6px}.chartYAxis{font-size:9px;width:20px}.connectionBanner{padding:8px 12px;font-size:12px;margin-bottom:12px;border-radius:6px}.btn{min-height:44px;padding:12px 16px}.btn.small{min-height:36px;padding:8px 14px;font-size:13px}select,input[type=number],input[type=text]{min-height:44px;font-size:16px}}@media(max-width:480px){.main{padding:12px}.pageHeader h1,.headerLeft h1{font-size:18px}.wanInfoCard{padding:14px}.ispInfo .ispName{font-size:15px}.modeCard,.portsCardLarge{padding:12px}.portBoxLarge{width:38px;height:38px}.portBoxLarge .portNum{font-size:14px}.portsLegendLarge{font-size:11px;gap:8px}.gwStats{grid-template-columns:1fr}.wifiSummary{grid-template-columns:1fr 1fr}.wifiStatValue{font-size:18px}.wanListStats{grid-template-columns:1fr;gap:6px}.throughputDisplay{flex-direction:column;gap:12px}.clientRow{flex-direction:column;align-items:flex-start;gap:8px}.clientStats{flex-direction:row;width:100%;justify-content:flex-start;gap:16px}.logTableWrapper{overflow-x:auto;margin:0 -12px;padding:0 12px}.logTable{min-width:500px;font-size:11px}.logTable th,.logTable td{padding:8px 10px}.logTable th{font-size:10px}.descCell{max-width:120px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.timeCell{font-size:10px;white-space:nowrap}.severityBars{gap:2px}.severityBars .bar{width:4px;height:12px}.tableFooter{padding:10px 12px;font-size:11px}.rowsSelect{gap:6px}.rowsSelect select{padding:6px 8px;font-size:13px}.overviewGrid,.overviewCol{gap:12px}.card .cardBody.noPad{padding:0}.wanListItem{padding:12px;border-bottom:1px solid var(--border)}.wanListItem:last-child{border-bottom:none}.wanListHeader{margin-bottom:10px}.wanListName{font-size:14px}.wanListBadge{font-size:10px;padding:2px 6px}.gwResources{gap:10px}.resourceHeader{font-size:12px}.resourceBar{height:6px}}.mobileHeader{display:none}@media(max-width:768px){.mobileHeader{display:flex}}.offlineContainer{display:flex;align-items:center;justify-content:center;min-height:calc(100vh - 120px);padding:24px}.offlineContent{text-align:center;max-width:420px;padding:48px 32px;background:var(--panel);border:1px solid var(--border);border-radius:20px;box-shadow:0 4px 24px #0000000f}.offlineIcon{position:relative;width:120px;height:120px;margin:0 auto 24px;display:flex;align-items:center;justify-content:center}.deviceSvg{width:80px;height:80px;color:#94a3b8;animation:floatDevice 3s ease-in-out infinite}@keyframes floatDevice{0%,to{transform:translateY(0)}50%{transform:translateY(-6px)}}.offlineIndicator{position:absolute;bottom:8px;right:16px}.offlineX{width:32px;height:32px;filter:drop-shadow(0 2px 4px rgba(239,68,68,.3));animation:pulse-error 2s ease-in-out infinite}@keyframes pulse-error{0%,to{transform:scale(1)}50%{transform:scale(1.1)}}.offlineTitle{font-size:24px;font-weight:700;color:var(--text);margin:0 0 12px}.offlineMessage{font-size:14px;color:var(--muted);margin:0 0 16px;line-height:1.5}.offlineReasons{text-align:left;margin:0 0 20px;padding:16px 20px;background:#00000005;border-radius:12px;list-style:none}.offlineReasons li{font-size:13px;color:var(--muted);padding:6px 0 6px 24px;position:relative}.offlineReasons li:before{content:"•";position:absolute;left:8px;color:#94a3b8}.offlineSubtext{font-size:13px;color:var(--muted);margin:0 0 24px}.retryBtn{display:inline-flex;align-items:center;justify-content:center;gap:8px;padding:14px 28px;background:var(--blue);color:#fff;border:none;border-radius:12px;font-size:15px;font-weight:600;cursor:pointer;transition:all .2s;min-width:160px}.retryBtn:hover:not(:disabled){background:#1a5fd1;transform:translateY(-1px);box-shadow:0 4px 12px #1f6feb4d}.retryBtn:disabled{opacity:.7;cursor:not-allowed}.retryIcon{width:18px;height:18px}.retrySpinner{width:16px;height:16px;border:2px solid rgba(255,255,255,.3);border-top-color:#fff;border-radius:50%;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.connectionStatus{display:flex;align-items:center;justify-content:center;gap:8px;margin-top:24px;padding-top:20px;border-top:1px solid var(--border)}.statusIndicator{width:10px;height:10px;border-radius:50%;background:#94a3b8}.statusIndicator.connecting{background:var(--blue);animation:pulse-status 1.5s ease-in-out infinite}.statusIndicator.disconnected{background:var(--error)}.statusIndicator.live{background:var(--ok)}.statusIndicator.apiError{background:var(--warn)}.offlineReasons .errorDetail{color:var(--error);font-weight:500;font-style:italic}@keyframes pulse-status{0%,to{opacity:1}50%{opacity:.4}}.connectionStatus .statusText{font-size:12px;color:var(--muted)}.retryLink{color:var(--blue);cursor:pointer;text-decoration:underline;font-weight:500}.retryLink:hover{opacity:.8}@media(max-width:768px){.offlineContainer{min-height:calc(100vh - 160px);padding:16px}.offlineContent{padding:32px 24px;border-radius:16px}.offlineIcon{width:100px;height:100px;margin-bottom:20px}.deviceSvg{width:64px;height:64px}.offlineX{width:28px;height:28px}.offlineTitle{font-size:20px}.offlineMessage{font-size:13px}.offlineReasons{padding:12px 16px}.offlineReasons li{font-size:12px;padding:5px 0 5px 20px}.retryBtn{padding:12px 24px;font-size:14px;width:100%}}@media(max-width:480px){.offlineContent{padding:24px 16px}.offlineIcon{width:80px;height:80px}.deviceSvg{width:52px;height:52px}.offlineX{width:24px;height:24px}.offlineTitle{font-size:18px}}.settingsPage{padding:24px;max-width:800px}.settingsPage h1{font-size:28px;font-weight:600;margin-bottom:24px;color:var(--text)}.settingsSection{background:var(--panel);border:1px solid var(--border);border-radius:16px;padding:24px;margin-bottom:24px}.settingsSection h2{font-size:18px;font-weight:600;margin-bottom:8px;color:var(--text)}.sectionDescription{font-size:14px;color:var(--muted);margin-bottom:20px}.networksList{display:flex;flex-direction:column;gap:16px}.networkCard{background:#00000005;border:1px solid var(--border);border-radius:12px;padding:20px}.networkHeader{display:flex;align-items:center;gap:12px;margin-bottom:20px;padding-bottom:16px;border-bottom:1px solid var(--border)}.networkIcon{font-size:28px}.networkInfo{display:flex;flex-direction:column;gap:2px}.networkName{font-size:16px;font-weight:600;color:var(--text)}.networkMeta{font-size:13px;color:var(--muted)}.networkForm{display:flex;flex-direction:column;gap:16px}.formGroup{display:flex;flex-direction:column;gap:6px}.formGroup label{font-size:13px;font-weight:500;color:var(--muted)}.formGroup input[type=text],.formGroup input[type=password]{padding:12px 14px;border:1px solid var(--border);border-radius:8px;font-size:14px;background:var(--panel);color:var(--text);transition:border-color .15s}.formGroup input:focus{outline:none;border-color:var(--blue)}.passwordInput{position:relative;display:flex}.passwordInput input{flex:1;padding-right:44px}.togglePassword{position:absolute;right:8px;top:50%;transform:translateY(-50%);background:none;border:none;cursor:pointer;font-size:16px;opacity:.6}.togglePassword:hover{opacity:1}.fieldHint{font-size:12px;color:var(--muted)}.toggleLabel{display:flex;align-items:center;gap:12px;cursor:pointer;font-size:14px;font-weight:500;color:var(--text)}.toggleLabel input[type=checkbox]{display:none}.toggleSwitch{width:44px;height:24px;background:var(--border);border-radius:12px;position:relative;transition:background .2s}.toggleSwitch:after{content:"";position:absolute;top:2px;left:2px;width:20px;height:20px;background:#fff;border-radius:50%;transition:transform .2s;box-shadow:0 1px 3px #0003}.toggleLabel input:checked+.toggleSwitch{background:var(--ok)}.toggleLabel input:checked+.toggleSwitch:after{transform:translate(20px)}.saveBtn{padding:12px 24px;background:#525252;color:#fff;border:none;border-radius:8px;font-size:14px;font-weight:600;cursor:pointer;transition:background .15s,filter .15s;align-self:flex-start}.saveBtn:hover:not(:disabled){filter:brightness(.92)}.saveBtn:disabled{opacity:.6;cursor:not-allowed}.alertError,.alertSuccess{display:flex;align-items:center;gap:8px;padding:12px 16px;border-radius:8px;margin-bottom:16px;font-size:14px}.alertError{background:#ef44441a;border:1px solid var(--error);color:var(--error)}.alertSuccess{background:#22c55e1a;border:1px solid var(--ok);color:var(--ok)}.alertError button,.alertSuccess button{margin-left:auto;background:none;border:none;font-size:18px;cursor:pointer;opacity:.6}.alertError button:hover,.alertSuccess button:hover{opacity:1}.loadingState,.emptyState{text-align:center;padding:40px;color:var(--muted);font-size:14px}@media(max-width:768px){.settingsPage{padding:16px}.settingsPage h1{font-size:22px}.settingsSection,.networkCard{padding:16px}.saveBtn{width:100%}}.tplinkCard{margin-bottom:24px}.cardHeaderActions{display:flex;gap:8px}.iconBtn{background:none;border:1px solid var(--border);border-radius:6px;padding:6px 8px;cursor:pointer;color:var(--muted);transition:all .15s;display:flex;align-items:center;justify-content:center}.iconBtn:hover:not(:disabled){background:var(--panel);color:var(--text);border-color:var(--blue)}.iconBtn:disabled{opacity:.5;cursor:not-allowed}.tplinkStatus{display:flex;flex-direction:column;gap:12px}.statusRow{display:flex;justify-content:space-between;align-items:center;padding:8px 0;border-bottom:1px solid var(--border)}.statusRow:last-child{border-bottom:none}.statusLabel{font-weight:600;color:var(--muted);font-size:13px}.statusValue{font-weight:500;display:flex;align-items:center;gap:4px}.statusValue.mono{font-family:SF Mono,Monaco,Courier New,monospace;font-size:13px}.statusBadge{padding:4px 12px;border-radius:12px;font-size:13px;font-weight:600}.statusBadge.connected{background:#19a34a1a;color:var(--ok)}.statusBadge.disconnected{background:#ef44441a;color:var(--error)}.tplinkActions{margin-top:16px;display:flex;gap:12px}.progressIndicator{margin-top:16px;padding:12px;background:#1f6feb0d;border:1px solid rgba(31,111,235,.2);border-radius:8px}.progressText{font-size:13px;color:var(--blue);margin-bottom:8px;font-weight:500}.progressBar{width:100%;height:4px;background:var(--border);border-radius:2px;overflow:hidden}.progressBarFill{height:100%;background:var(--blue);transition:width .3s ease}.networksSection{margin-top:20px;border-top:1px solid var(--border);padding-top:16px}.networksSectionHeader{display:flex;justify-content:space-between;align-items:center;margin-bottom:16px}.networksSectionHeader h4{margin:0;font-size:14px;color:var(--muted);text-transform:uppercase;letter-spacing:.5px}.networksList{display:flex;flex-direction:column;gap:8px}.networkItem{display:flex;justify-content:space-between;align-items:center;padding:14px;background:var(--panel);border:1px solid var(--border);border-radius:8px;transition:all .15s}.networkItem:hover{border-color:var(--blue);box-shadow:0 2px 8px #0000000d}.networkInfo{flex:1;display:flex;flex-direction:column;gap:6px}.networkSsid{display:flex;align-items:center;gap:8px}.networkName{font-weight:600;font-size:15px}.networkBand{font-size:11px;padding:2px 6px;background:var(--blue);color:#fff;border-radius:4px;font-weight:600}.networkMeta{display:flex;align-items:center;gap:12px;font-size:13px;color:var(--muted)}.networkSignal{display:flex;align-items:center;gap:4px;font-weight:500}.networkSecurity{font-size:12px}.networkChannel{font-size:11px;background:var(--border);padding:2px 6px;border-radius:4px}.modal{position:fixed;inset:0;background:#0009;display:flex;align-items:center;justify-content:center;z-index:9999;animation:fadeIn .2s}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.modalContent{background:var(--panel);border-radius:12px;box-shadow:0 20px 60px #0000004d;max-width:500px;width:90%;max-height:90vh;overflow:auto;animation:slideIn .2s}@keyframes slideIn{0%{opacity:0;transform:translateY(-20px)}to{opacity:1;transform:translateY(0)}}.modalHeader{display:flex;justify-content:space-between;align-items:center;padding:20px 24px;border-bottom:1px solid var(--border)}.modalHeader h3{margin:0;font-size:18px}.modalClose{background:none;border:none;font-size:28px;color:var(--muted);cursor:pointer;line-height:1;padding:0;width:32px;height:32px;display:flex;align-items:center;justify-content:center;border-radius:4px;transition:all .15s}.modalClose:hover{background:var(--border);color:var(--text)}.modalBody{padding:24px}.modalActions{padding:16px 24px;border-top:1px solid var(--border);display:flex;gap:12px;justify-content:flex-end}.formGroup{margin-bottom:20px}.formGroup:last-child{margin-bottom:0}.formGroup label{display:block;margin-bottom:8px;font-weight:600;font-size:13px;color:var(--text)}.formGroup .input{width:100%;padding:10px 12px;border:1px solid var(--border);border-radius:6px;background:var(--bg);color:var(--text);font-size:14px;font-family:inherit;transition:all .15s}.formGroup .input:focus{outline:none;border-color:var(--blue);box-shadow:0 0 0 3px #1f6feb1a}.formGroup .input:disabled{opacity:.6;cursor:not-allowed;background:var(--border)}.formError{color:var(--error);font-size:12px;margin-top:6px;font-weight:500}.btn{padding:10px 20px;border:none;border-radius:8px;font-size:14px;font-weight:600;cursor:pointer;transition:all .15s;display:inline-flex;align-items:center;gap:6px}.btn:disabled{opacity:.5;cursor:not-allowed}.btnPrimary{background:var(--blue);color:#fff}.btnPrimary:hover:not(:disabled){background:#1554d1;box-shadow:0 4px 12px #1f6feb4d}.btnSecondary{background:var(--panel);color:var(--text);border:1px solid var(--border)}.btnSecondary:hover:not(:disabled){background:var(--border);border-color:var(--blue)}.btnDanger{background:var(--error);color:#fff}.btnDanger:hover:not(:disabled){background:#dc2626;box-shadow:0 4px 12px #ef44444d}.btnSmall{padding:6px 12px;font-size:13px}.emptyState{text-align:center;padding:40px 20px;color:var(--muted)}.emptyState p{margin:0 0 16px;font-size:14px}body.dark .modal{background:#000c}body.dark .networkItem:hover{border-color:var(--blue);background:#ffffff08}.copilot-backdrop{position:fixed;inset:0;background:#00000080;backdrop-filter:blur(4px);z-index:100}.copilot-panel{position:fixed;top:0;right:0;height:100%;width:100%;max-width:420px;background:var(--bg-elevated);border-left:1px solid var(--border);box-shadow:-8px 0 32px #0000004d;z-index:101;display:flex;flex-direction:column;animation:slideInRight .25s ease-out}@keyframes slideInRight{0%{transform:translate(100%);opacity:0}to{transform:translate(0);opacity:1}}.copilot-header{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-bottom:1px solid var(--border);background:var(--panel)}.copilot-title{display:flex;align-items:center;gap:12px}.copilot-icon{width:40px;height:40px;border-radius:10px;background:var(--accent);display:flex;align-items:center;justify-content:center;color:var(--black)}.copilot-title h2{margin:0;font-size:16px;font-weight:700;color:var(--text)}.copilot-title span{display:block;font-size:12px;color:var(--muted);margin-top:2px}.copilot-actions{display:flex;gap:4px}.copilot-btn-icon{width:32px;height:32px;border:none;background:transparent;color:var(--muted);cursor:pointer;border-radius:8px;display:flex;align-items:center;justify-content:center;transition:all .15s}.copilot-btn-icon:hover{background:var(--border);color:var(--text)}.copilot-messages{flex:1;overflow-y:auto;padding:16px;display:flex;flex-direction:column;gap:12px}.copilot-message{display:flex}.copilot-message.user{justify-content:flex-end}.copilot-message.assistant{justify-content:flex-start}.copilot-bubble{max-width:85%;padding:12px 16px;border-radius:16px;font-size:14px;line-height:1.5}.copilot-message.user .copilot-bubble{background:var(--accent);color:var(--black);border-bottom-right-radius:4px}.copilot-message.assistant .copilot-bubble{background:var(--panel);color:var(--text);border:1px solid var(--border);border-bottom-left-radius:4px}.copilot-bubble p{margin:0;white-space:pre-wrap;word-break:break-word}.copilot-time{display:block;font-size:10px;margin-top:6px;opacity:.6}.copilot-spinner{animation:spin 1s linear infinite}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.copilot-input-area{display:flex;gap:12px;padding:16px 20px;border-top:1px solid var(--border);background:var(--panel)}.copilot-input-area textarea{flex:1;padding:12px 14px;border:1px solid var(--border);border-radius:12px;background:var(--bg);color:var(--text);font-size:14px;font-family:inherit;resize:none;outline:none;transition:border-color .15s}.copilot-input-area textarea:focus{border-color:var(--accent)}.copilot-input-area textarea::-moz-placeholder{color:var(--muted)}.copilot-input-area textarea::placeholder{color:var(--muted)}.copilot-send-btn{width:48px;height:48px;border:none;border-radius:12px;background:var(--accent);color:var(--black);cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .15s;flex-shrink:0}.copilot-send-btn:hover:not(:disabled){filter:brightness(1.05);transform:scale(1.02)}.copilot-send-btn:disabled{opacity:.5;cursor:not-allowed}.copilot-hint{padding:0 20px 12px;margin:0;font-size:11px;color:var(--muted);background:var(--panel)}.copilot-fab-group{position:fixed;bottom:24px;right:24px;display:flex;gap:10px;z-index:50}.copilot-fab{width:52px;height:52px;border:none;border-radius:14px;background:var(--accent);color:var(--black);cursor:pointer;display:flex;align-items:center;justify-content:center;box-shadow:0 2px 12px #00000026;transition:all .2s}.copilot-fab:hover{transform:scale(1.05);box-shadow:0 4px 16px #0003}.copilot-fab svg{width:24px;height:24px}.copilot-fab-voice{background:var(--panel);color:var(--text);border:1px solid var(--border)}.copilot-fab-voice:hover{background:var(--bg);border-color:var(--accent)}.copilot-input-area.voice-mode{flex-direction:column;align-items:center;justify-content:center;padding:24px 20px}.copilot-voice-select{margin-bottom:12px;padding:6px 10px;border-radius:8px;border:1px solid var(--border);background:var(--bg);color:var(--text);font-size:13px;cursor:pointer}.copilot-voice-select:disabled{opacity:.6;cursor:not-allowed}.copilot-voice-btn{width:72px;height:72px;border-radius:50%;border:none;background:var(--accent);color:var(--black);cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .2s}.copilot-voice-btn:hover:not(:disabled){transform:scale(1.05)}.copilot-voice-btn:disabled{opacity:.7;cursor:not-allowed}.copilot-voice-btn.recording{background:#dc2626;color:#fff;animation:copilot-voice-pulse 1.2s ease-in-out infinite}@keyframes copilot-voice-pulse{0%,to{opacity:1}50%{opacity:.7}}.copilot-voice-btn svg{width:32px;height:32px}.copilot-panel[data-mode=voice] .copilot-hint{text-align:center}@media(max-width:640px){.copilot-panel{max-width:100%}.copilot-fab-group{bottom:16px;right:16px;gap:8px}.copilot-fab{width:48px;height:48px;border-radius:14px}.copilot-fab svg{width:20px;height:20px}}
