*,:after,:before{--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:rgba(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:rgba(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: }/*
! tailwindcss v3.4.19 | MIT License | https://tailwindcss.com
*/*,:after,:before{box-sizing:border-box;border:0 solid #e5e7eb}:after,:before{--tw-content:""}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{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,pre,samp{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,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{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}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}.sr-only{border-width:0}.\!visible{visibility:visible!important}.visible{visibility:visible}.invisible{visibility:hidden}.static{position:static}.fixed{position:fixed}.\!block{display:block!important}.block{display:block}.inline{display:inline}.flex{display:flex}.table{display:table}.hidden{display:none}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.resize{resize:both}.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)}:root{color-scheme:light;--bg:#f4f6f8;--bg-accent:#eef1f4;--panel:#fff;--panel-soft:#f8fafb;--text:#0f172a;--muted:#64748b;--line:#e2e8f0;--line-soft:#f1f5f9;--primary:#0e7490;--primary-dark:#155e75;--primary-soft:#ecfeff;--accent:#0891b2;--accent-violet:#0e7490;--success:#16a34a;--warning:#d97706;--danger:#dc2626;--radius-sm:8px;--radius-md:10px;--radius-lg:12px;--radius-xl:14px;--shadow-xs:none;--shadow-sm:none;--shadow-md:none;--shadow-lg:none;--shadow:none;--gradient-brand:#0f172a;--gradient-primary:#0e7490;--gradient-surface:#fff;--surface:#fff;--surface-raised:#fff;--surface-muted:#f8fafb;--surface-hover:#f0fdfa;--map-hud-bg:rgba(11,18,32,.88);--map-hud-border:rgba(36,48,68,.95)}*{box-sizing:border-box}html{scroll-behavior:smooth}body{min-height:100vh;margin:0;background:var(--bg);color:var(--text);font-family:var(--font-sans),ui-sans-serif,system-ui,-apple-system,sans-serif;font-size:.875rem;line-height:1.55;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}button,input,select{font:inherit}.app-frame{display:flex;flex-direction:column;min-height:100vh}.app-header{position:sticky;top:0;z-index:300;display:flex;align-items:center;justify-content:space-between;gap:16px;min-height:56px;padding:0 20px;border-bottom:1px solid var(--line);background:var(--panel)}.app-header-left,.app-header-right{display:flex;align-items:center;gap:12px;min-width:0}.app-header-menu{display:inline-flex;align-items:center;justify-content:center;width:40px;height:40px;border:none;border-radius:var(--radius-sm);background:transparent;color:#1e3a5f;cursor:pointer;transition:background .15s ease,color .15s ease}.app-header-menu:hover{background:var(--primary-soft);color:var(--primary-dark)}.app-header-brand{display:inline-flex;align-items:center;gap:8px;color:#0f172a;font-size:1.125rem;font-weight:800;letter-spacing:-.03em;text-decoration:none}.app-header-brand-icon{width:22px;height:22px;border-radius:6px;-o-object-fit:cover;object-fit:cover;flex-shrink:0}.app-header-notifs{display:flex;align-items:center;gap:6px}.app-header-notif{position:relative;display:inline-flex;align-items:center;justify-content:center;width:40px;height:40px;border-radius:var(--radius-sm);color:#1e3a5f;text-decoration:none;transition:background .15s ease,color .15s ease}.app-header-notif:hover{background:var(--panel-soft)}.app-header-badge{position:absolute;top:2px;right:2px;min-width:18px;height:18px;padding:0 5px;border-radius:999px;background:#ef4444;color:#fff;font-size:.65rem;font-weight:800;line-height:18px;text-align:center;box-shadow:0 0 0 2px #fff}.app-header-notif--orange .app-header-badge{background:#ea580c}.app-header-account{position:relative;margin-left:4px;padding-left:12px;border-left:1px solid var(--line)}.app-header-account-btn{display:inline-flex;align-items:center;gap:8px;min-height:40px;border:1px solid var(--line);border-radius:var(--radius-sm);padding:0 12px 0 6px;background:var(--panel);color:var(--text);cursor:pointer;font-weight:600;font-size:.8125rem;transition:background .15s ease,border-color .15s ease}.app-header-account-btn:hover{background:var(--surface-hover);border-color:var(--line)}.app-header-avatar{display:grid;place-items:center;width:30px;height:30px;border-radius:8px;background:var(--primary-soft);color:var(--primary)}.app-header-account-label{white-space:nowrap}.app-header-account-menu{position:absolute;top:calc(100% + 8px);right:0;z-index:400;min-width:180px;padding:6px;border:1px solid var(--line);border-radius:var(--radius-md);background:var(--panel);box-shadow:none}.app-header-account-item{display:flex;align-items:center;gap:10px;width:100%;border:none;border-radius:8px;padding:10px 12px;background:transparent;color:#334155;font-weight:600;font-size:.8125rem;text-align:left;cursor:pointer}.app-header-account-item:hover{background:var(--panel-soft)}.app-header-account-item.danger{color:#dc2626}.app-body{display:flex;flex:1;min-height:0;min-width:0}.app-main{flex:1;min-width:0;overflow:auto}.app-shell{display:flex;flex:1;min-height:0;min-width:0;gap:0;padding:0}.sidebar-menu-toggle{display:inline-flex;align-items:center;justify-content:center;width:38px;height:38px;border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--panel);color:#475569;cursor:pointer;flex-shrink:0;transition:background .15s ease,color .15s ease,border-color .15s ease}.sidebar-menu-toggle:hover{background:var(--primary-soft);border-color:var(--line);color:var(--primary-dark)}.sidebar-menu-toggle--floating{position:fixed;top:16px;left:16px;z-index:120;box-shadow:var(--shadow-sm)}.sidebar-header{display:flex;align-items:center;gap:8px;margin-bottom:12px;flex-shrink:0;min-width:0}.sidebar-header--floating{position:fixed;top:16px;left:16px;z-index:120;width:auto;max-width:calc(100vw - 32px);margin-bottom:0}.sidebar-brand{display:flex;align-items:center;gap:10px;min-width:0;flex:1;padding:10px 12px;border-radius:14px;background:var(--gradient-brand);color:#fff;font-size:.875rem;font-weight:700;letter-spacing:-.02em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;box-shadow:inset 3px 0 0 var(--accent)}.sidebar-brand svg{flex-shrink:0;opacity:.95}.sidebar-brand-text{display:grid;gap:1px;min-width:0;line-height:1.2}.sidebar-brand-text small{font-size:.65rem;font-weight:500;opacity:.75;letter-spacing:.04em;text-transform:uppercase}.sidebar-toolbar{display:flex;justify-content:flex-start;margin-bottom:10px;flex-shrink:0}.sidebar.is-collapsed{flex-basis:0;width:0;min-width:0;padding:0;margin:0;opacity:0;visibility:hidden;overflow:hidden;pointer-events:none;border-width:0}.loading-card,.map-card,.sidebar{border:1px solid var(--line);background:var(--panel)}.sidebar{position:sticky;top:0;flex:0 0 260px;width:260px;display:flex;flex-direction:column;height:calc(100vh - 56px);max-height:calc(100vh - 56px);overflow:hidden;border-radius:0;border-top:none;border-bottom:none;border-left:none;padding:16px 14px;background:var(--panel);transition:width .22s ease,flex-basis .22s ease,opacity .22s ease,padding .22s ease}.app-body.sidebar-collapsed .sidebar{flex-basis:0;width:0;min-width:0;padding:0;opacity:0;visibility:hidden;pointer-events:none;border-right-width:0;overflow:hidden}.brand-card{display:flex;align-items:center;gap:12px;flex-shrink:0;padding:16px;border-radius:var(--radius-md);background:var(--gradient-brand);color:#fff;box-shadow:inset 3px 0 0 var(--accent)}.brand-mark,.metric-icon{display:grid;place-items:center;flex:0 0 auto}.brand-mark{width:48px;height:48px;border-radius:16px;background:hsla(0,0%,100%,.18)}.brand-card h1,.map-toolbar h3,.topbar h2{margin:0}.brand-card h1{font-size:1.125rem;letter-spacing:-.02em}.eyebrow{margin:0 0 6px;color:var(--accent);font-size:.6875rem;font-weight:700;letter-spacing:.1em;text-transform:uppercase}.brand-card .eyebrow{color:hsla(0,0%,100%,.76)}.nav-list{display:grid;gap:8px;margin-top:24px}.nav-item{position:relative;display:flex;align-items:flex-start;gap:10px;padding:10px 12px 10px 14px;border-radius:var(--radius-sm);color:#475569;font-weight:600;font-size:.8125rem;line-height:1.35;text-decoration:none;transition:background .18s ease,color .18s ease,transform .18s ease}.nav-item:before{content:"";position:absolute;left:0;top:50%;width:3px;height:0;border-radius:0 4px 4px 0;background:var(--gradient-primary);transform:translateY(-50%);transition:height .18s ease}.nav-item.active,.nav-item:hover{background:var(--primary-soft);color:var(--primary-dark)}.nav-item.active{font-weight:700}.nav-item.active:before{height:55%}.sidebar .nav-item svg{flex:0 0 auto;margin-top:1px;opacity:.85}.nav-item.active svg{opacity:1;color:var(--primary)}.snmp-card{display:flex;gap:12px;margin-top:auto;padding:14px;border:1px solid var(--line);border-radius:var(--radius-md);background:var(--panel-soft)}.metric-card p,.popup-card p,.snmp-card p,.topbar span{margin:0;color:var(--muted)}.status-dot{width:10px;height:10px;margin-top:6px;border-radius:99px;background:#94a3b8}.status-dot.online{background:#22c55e;box-shadow:0 0 0 6px rgba(34,197,94,.14)}.status-dot.warning{background:#f59e0b;box-shadow:0 0 0 6px rgba(245,158,11,.14)}.status-dot.offline{background:#ef4444;box-shadow:0 0 0 6px rgba(239,68,68,.14)}.provisioning-card{margin-top:12px;align-items:flex-start}.alert-card,.empty-card,.olt-form-card,.olt-list-section,.provisioning-panel{margin-top:16px;border:1px solid var(--line);border-radius:var(--radius-md);background:var(--panel);padding:16px}.section-heading{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:14px}.section-heading h3{margin:0}.olt-form{display:grid;gap:18px}.form-section h4{margin:0 0 10px}.form-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.form-grid label{display:grid;gap:6px;color:#334155;font-size:.88rem;font-weight:700}.form-grid input,.form-grid select{min-height:44px;border:1px solid var(--line);border-radius:var(--radius-sm);padding:0 14px;background:#fff;color:var(--text);transition:border-color .15s ease,box-shadow .15s ease}.form-grid input:focus,.form-grid select:focus{outline:none;border-color:#93c5fd;box-shadow:0 0 0 3px rgba(59,130,246,.15)}.form-grid .span-2{grid-column:span 2}.checkbox-field{display:flex!important;align-items:center;gap:10px!important;min-height:42px;padding-top:24px}.form-actions{display:flex;justify-content:flex-end}.ghost-button,.icon-button{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:40px;border:1px solid var(--line);border-radius:var(--radius-sm);padding:0 14px;background:var(--panel);color:var(--text);cursor:pointer;font-weight:600;font-size:.8125rem;transition:background .15s ease,border-color .15s ease,color .15s ease}.ghost-button:hover,.icon-button:hover:not(.danger){background:var(--primary-soft);border-color:var(--line);color:var(--primary-dark)}.primary-button{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:40px;border:none;border-radius:var(--radius-sm);padding:0 18px;background:var(--gradient-primary);color:#fff;cursor:pointer;font-weight:700;font-size:.8125rem;letter-spacing:-.01em;box-shadow:0 4px 14px rgba(37,99,235,.35);transition:background .15s ease,box-shadow .15s ease,transform .15s ease,opacity .15s ease}.primary-button:hover:not(:disabled){box-shadow:0 6px 20px rgba(37,99,235,.42);transform:translateY(-1px)}.primary-button:active:not(:disabled){transform:translateY(0)}.primary-button:disabled{opacity:.55;cursor:not-allowed;box-shadow:none}.ghost-button.wide{width:100%}.icon-button{width:38px;padding:0}.refresh-button{display:inline-flex;align-items:center;gap:8px}.olt-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}.olt-card{border:1px solid var(--line);border-radius:var(--radius-md);padding:18px;background:var(--gradient-surface);transition:transform .2s ease,box-shadow .2s ease,border-color .2s ease}.olt-card:hover{transform:translateY(-2px);box-shadow:var(--shadow-sm);border-color:#dbeafe}.olt-card.disabled{opacity:.72}.olt-card-head{display:flex;justify-content:space-between;gap:12px}.olt-card-head h4,.olt-card-head small{display:block;margin:4px 0 0}.olt-actions{display:flex;gap:8px}.olt-meta{display:grid;gap:8px;margin:14px 0}.olt-meta div{display:grid;grid-template-columns:72px 1fr;gap:8px}.olt-meta dt{color:var(--muted);font-weight:800}.olt-meta dd{margin:0;font-weight:700}.test-result{display:flex;align-items:center;gap:8px;margin-bottom:10px;border-radius:12px;padding:10px 12px;font-size:.86rem;font-weight:700}.test-result.ok{background:#dcfce7;color:#166534}.test-result.warn{background:#fef3c7;color:#92400e}.test-result.fail{background:#fee2e2;color:#991b1b}.empty-card{display:grid;justify-items:center;gap:8px;text-align:center;color:var(--muted)}.alert-card.error{background:#fef2f2;color:#991b1b;font-weight:700}.provisioning-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px}.provision-item{border:1px dashed var(--line);border-radius:16px;padding:14px;background:#f8fbff}.provision-item.disabled{opacity:.7}.badge-soon{border-radius:999px;padding:4px 10px;background:#dbeafe;color:#1d4ed8;font-size:.75rem;font-weight:800}.spin{animation:spin 1s linear infinite}@keyframes spin{to{transform:rotate(1turn)}}@media (max-width:900px){.form-grid,.provisioning-grid{grid-template-columns:1fr}.form-grid .span-2{grid-column:span 1}}.content-panel{min-width:0;width:100%;border:none;border-radius:0;box-shadow:none;padding:20px 24px 28px;background:transparent;animation:panel-enter .35s ease-out}@keyframes panel-enter{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}.map-toolbar,.topbar{display:flex;align-items:center;justify-content:space-between;gap:18px}.topbar h2{font-size:clamp(1.25rem,2.5vw,1.75rem);font-weight:600;letter-spacing:-.03em}.topbar-actions{display:flex;flex-wrap:wrap;align-items:center;gap:10px}.pagination-bar{display:flex;align-items:center;justify-content:center;gap:16px;margin-top:16px;padding:8px 0 4px;font-size:.9rem;font-weight:600;color:var(--muted)}.refresh-button{min-height:40px;border:0;border-radius:var(--radius-sm);padding:0 18px;background:var(--gradient-primary);color:#fff;cursor:pointer;font-weight:700;font-size:.8125rem;letter-spacing:-.01em}.refresh-button:disabled{opacity:.6;cursor:not-allowed}.stats-grid{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:14px;margin-top:22px}.metric-card{display:flex;align-items:center;gap:14px;min-height:100px;border:1px solid var(--line);border-radius:var(--radius-md);padding:16px;background:var(--gradient-surface);transition:transform .2s ease,box-shadow .2s ease}.metric-card:hover{transform:translateY(-2px);box-shadow:var(--shadow-sm)}.metric-icon{width:46px;height:46px;border-radius:16px}.metric-card strong{display:block;margin-top:2px;font-size:1.5rem;font-weight:600;letter-spacing:-.03em}.metric-card.blue .metric-icon{background:#dbeafe;color:#1d4ed8}.metric-card.green .metric-icon{background:#dcfce7;color:#16a34a}.metric-card.red .metric-icon{background:#fee2e2;color:#dc2626}.metric-card.yellow .metric-icon{background:#fef3c7;color:#d97706}.map-card{margin-top:16px;overflow:hidden;border-radius:var(--radius-lg);padding:16px}.content-panel--map{display:flex;flex-direction:column;height:calc(100vh - 56px);min-height:0;padding:8px 10px 10px;overflow:hidden}.content-panel--map-immersive{position:fixed;inset:0;z-index:4000;height:100vh;padding:0;background:#0b1220}body.map-immersive-open{overflow:hidden}body.map-immersive-open .app-header,body.map-immersive-open .sidebar{display:none}.map-card.is-map-expanded{position:fixed;inset:0;z-index:4001;flex:none;width:100vw;height:100vh;margin:0;border:none;border-radius:0}.map-card.is-map-expanded:fullscreen{width:100%;height:100%}.map-card.is-map-expanded .map-shell{border-radius:0}.app-main:has(.content-panel--map){overflow:hidden}.map-page-topbar{flex-shrink:0;margin-bottom:0}.map-page-topbar h2{font-size:clamp(1.1rem,2vw,1.5rem)}.map-page-meta{display:block;margin-top:2px;color:var(--muted);font-size:.8125rem}.map-card--fullscreen{position:relative;flex:1;min-height:0;display:flex;flex-direction:column;margin-top:6px;padding:0;border-radius:var(--radius-lg)}.map-page-topbar--compact h2{font-size:1.125rem;margin:0}.map-page-topbar--compact{flex-wrap:wrap;align-items:center;gap:10px;padding-bottom:6px}.map-page-topbar-title{flex:0 0 auto;min-width:140px}.map-page-filters-row{display:contents}.map-page-search{flex:1 1 220px;min-width:180px;max-width:360px}.map-page-filter{min-height:40px;border:1px solid var(--line);border-radius:999px;padding:0 30px 0 12px;background:var(--panel);color:var(--text);font-size:.8125rem}.map-hud{position:absolute;z-index:600;display:flex;gap:8px;pointer-events:none}.map-hud--status{top:10px;left:52px;gap:6px;flex-wrap:wrap;max-width:min(72vw,420px)}.map-hud-chip{display:inline-flex;align-items:center;gap:5px;padding:5px 8px;border:1px solid var(--map-hud-border);border-radius:8px;background:var(--map-hud-bg);color:#f8fafc}.map-hud-chip strong{font-size:.78rem;font-weight:800;line-height:1}.map-hud-chip small{font-size:.58rem;font-weight:700;letter-spacing:.03em;text-transform:uppercase;opacity:.8}.map-hud-dot{width:6px;height:6px;border-radius:999px;box-shadow:0 0 0 2px hsla(0,0%,100%,.12)}.map-hud-chip.online .map-hud-dot{background:#4ade80}.map-hud-chip.offline .map-hud-dot{background:#f87171}.map-hud-chip.los .map-hud-dot{background:#dc2626}.map-hud-chip.dying-gasp .map-hud-dot{background:#f97316}.link-distance-icon{background:transparent;border:0}.link-distance-label{display:inline-flex;align-items:center;gap:4px;min-width:36px;padding:2px 7px;border:1px solid var(--map-hud-border);border-radius:999px;background:var(--map-hud-bg);color:#f8fafc;font-size:.6rem;font-weight:700;white-space:nowrap}.link-distance-label--total{padding:3px 10px;font-size:.68rem;letter-spacing:.01em}.link-distance-label i{width:10px}.leaflet-pane path.map-link-critical{filter:none}@keyframes map-link-flow{0%{stroke-dashoffset:0}to{stroke-dashoffset:-56}}.map-legend-line.drop-flow{background:repeating-linear-gradient(90deg,#14b8a6 0 8px,transparent 8px 18px)}.map-legend--modern{left:10px;right:auto;bottom:10px;transform:none;flex-direction:column;align-items:flex-start;gap:5px;max-width:140px;padding:8px 10px;border-radius:10px;background:var(--map-hud-bg);border:1px solid var(--map-hud-border);justify-content:flex-start}.map-legend--modern .map-legend-item{display:inline-flex;align-items:center;gap:6px;color:#e2e8f0;font-size:.64rem;font-weight:600}.map-legend-line{display:block;width:18px;height:2px;border-radius:999px;flex-shrink:0}.map-legend-line.feeder{background:repeating-linear-gradient(90deg,#fbbf24 0 8px,transparent 8px 14px)}.map-legend-line.drop{background:repeating-linear-gradient(90deg,#2dd4bf 0 5px,transparent 5px 9px)}.map-legend-line.backbone{background:repeating-linear-gradient(90deg,#4ade80 0 7px,transparent 7px 12px)}.map-pin{position:relative;display:grid;place-items:center;width:32px;height:32px}.map-pin-ring{position:absolute;inset:0;opacity:.4}.map-pin-body{position:relative;z-index:1;display:grid;place-items:center;width:100%;height:100%;border:1.5px solid hsla(0,0%,100%,.9);color:#fff}.map-pin--client .map-pin-body{border-radius:999px}.map-pin-badge{position:absolute;z-index:2;border:1.5px solid hsla(0,0%,100%,.9);border-radius:999px;background:linear-gradient(180deg,#1e293b,#0f172a);color:#f8fafc;font-weight:800;line-height:1;letter-spacing:-.02em;box-shadow:0 2px 8px rgba(15,23,42,.3)}.map-pin-label{background:var(--map-hud-bg);color:#f8fafc;line-height:1.15;text-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.map-pin--olt{width:34px;height:34px}.map-pin--odc,.map-pin--odp{width:28px;height:28px}.map-pin--client{width:26px;height:26px}.map-pin-ring{transform:scale(1.08);filter:blur(4px)}.map-pin-body{border-width:1.5px;border-radius:10px;box-shadow:0 6px 14px rgba(15,23,42,.28),inset 0 1px 0 hsla(0,0%,100%,.28)}.map-pin-body svg{width:15px;height:15px}.map-pin--client .map-pin-body svg{width:13px;height:13px}.map-pin--olt .map-pin-ring{background:#fb923c;border-radius:10px}.map-pin--olt .map-pin-body{background:linear-gradient(145deg,#fdba74,#ea580c 55%,#c2410c);border-radius:10px}.map-pin--odp .map-pin-ring{background:#facc15;border-radius:9px}.map-pin--odp .map-pin-body{background:linear-gradient(145deg,#fde047,#eab308 55%,#ca8a04);border-radius:9px}.map-pin--odc .map-pin-ring{background:#c084fc;border-radius:9px}.map-pin--odc .map-pin-body{background:linear-gradient(145deg,#d8b4fe,#a855f7 55%,#7e22ce);border-radius:9px}.map-pin--odc .map-pin-body svg,.map-pin--odp .map-pin-body svg{width:13px;height:13px}.map-pin--client .map-pin-ring{background:#2dd4bf;border-radius:999px}.map-pin--client .map-pin-body{background:linear-gradient(145deg,#5eead4,#14b8a6 55%,#0f766e)}.map-pin--client.is-critical .map-pin-ring{background:#f87171;opacity:.55}.map-pin--client.is-critical .map-pin-body{background:linear-gradient(145deg,#fca5a5,#ef4444 52%,#b91c1c);border-color:#fecaca}.map-pin--client.is-critical.is-status-dying_gasp .map-pin-ring{background:#fb923c;opacity:.55}.map-pin--client.is-critical.is-status-dying_gasp .map-pin-body{background:linear-gradient(145deg,#fdba74,#f97316 52%,#c2410c);border-color:#fed7aa}.map-pin-label.critical.is-status-dying_gasp{background:rgba(124,45,18,.88);color:#ffedd5}.map-cluster{display:grid;place-items:center;width:42px;height:42px;border-radius:999px;border:2px solid #fff;box-shadow:0 2px 8px rgba(15,23,42,.28);color:#fff;font-size:13px;font-weight:700;background:linear-gradient(145deg,#2dd4bf,#0f766e)}.map-cluster.is-critical{background:linear-gradient(145deg,#fb7185,#dc2626)}.map-legend-cluster{display:inline-grid;place-items:center;width:18px;height:18px;border-radius:999px;background:#0f766e;color:#fff;font-size:10px;font-weight:700}.map-cluster-zoom{margin-top:8px;border:0;border-radius:8px;padding:6px 10px;background:#0f766e;color:#fff;font-size:12px;font-weight:600;cursor:pointer}.popup-card--cluster p{margin:6px 0 0;color:var(--muted);font-size:12px}.map-nearest-panel{position:absolute;left:12px;top:12px;z-index:520;width:min(320px,calc(100% - 24px));border:1px solid var(--line);border-radius:12px;background:hsla(0,0%,100%,.96);box-shadow:0 8px 24px rgba(15,23,42,.12);overflow:hidden}.map-nearest-panel:not(.is-open){width:auto;max-width:calc(100% - 24px)}.map-nearest-toggle{display:inline-flex;align-items:center;gap:8px;width:100%;border:0;background:transparent;padding:10px 12px;font-weight:700;cursor:pointer;color:var(--text)}.map-nearest-panel:not(.is-open) .map-nearest-toggle{width:auto}.map-nearest-toggle span{flex:1;text-align:left}.map-nearest-panel:not(.is-open) .map-nearest-toggle span{flex:0 1 auto}.map-nearest-body{padding:0 12px 12px;display:grid;gap:8px;max-height:min(52vh,420px);overflow:auto}.map-nearest-hint{margin:0;font-size:12px;color:var(--muted);line-height:1.4}.map-nearest-form{display:grid;grid-template-columns:1fr auto auto;gap:6px}.map-nearest-form input{min-width:0}.map-nearest-action,.map-nearest-clear,.map-nearest-form input{border:1px solid var(--line);border-radius:8px;padding:8px 10px;font-size:12px}.map-nearest-action,.map-nearest-clear{background:#fff;font-weight:600;cursor:pointer}.map-nearest-action.is-active,.map-nearest-action:hover{border-color:#0f766e;color:#0f766e}.map-nearest-error{margin:0;color:#b91c1c;font-size:12px}.map-nearest-list{list-style:none;margin:0;padding:0;display:grid;gap:6px;max-height:180px;overflow:auto}.map-nearest-list button{width:100%;display:flex;gap:8px;align-items:flex-start;text-align:left;border:1px solid var(--line);border-radius:10px;background:#fff;padding:8px;cursor:pointer}.map-nearest-list button.is-active{border-color:#0f766e;background:rgba(15,118,110,.08)}.map-nearest-rank{font-size:11px;font-weight:700;color:#0f766e;min-width:22px}.map-nearest-meta{display:grid;gap:2px;min-width:0}.map-nearest-meta strong{font-size:12px}.map-nearest-meta small{font-size:11px;color:var(--muted);line-height:1.35}.map-nearest-footer{display:flex;align-items:center;justify-content:space-between;gap:8px}.map-nearest-clear{display:inline-flex;align-items:center;gap:4px;justify-self:start}.map-survey-pin{width:22px;height:22px;border-radius:999px;border:2px solid #fff;background:#0f766e;box-shadow:0 0 0 6px rgba(15,118,110,.25)}.map-survey-pin span{display:block;width:100%;height:100%;border-radius:inherit}.map-pin.is-nearest .map-pin-ring{box-shadow:0 0 0 4px rgba(15,118,110,.45)}.map-pin-label.is-nearest{background:rgba(15,118,110,.92);color:#ecfdf5}@media (max-width:900px){.map-nearest-panel{left:8px;right:auto;top:auto;bottom:68px;width:auto;max-width:calc(100% - 88px)}.map-nearest-panel.is-open{left:8px;right:8px;bottom:68px;width:auto;max-width:none}.map-nearest-hint--desktop{display:none}.map-nearest-form{grid-template-columns:1fr 1fr}.map-nearest-form input{grid-column:1/-1}.map-nearest-body{max-height:min(42vh,320px)}.map-hud--status{left:44px;right:56px;top:8px;max-width:none;gap:4px}.map-hud-chip{padding:4px 6px;border-radius:8px}.map-hud-chip strong{font-size:.72rem}.map-hud-chip small{display:none}.map-page-topbar--compact{gap:8px}.map-page-filters-row{display:grid;grid-template-columns:1fr 1fr;gap:8px}}@media (max-width:720px){.map-nearest-form{grid-template-columns:1fr 1fr}.map-nearest-form input{grid-column:1/-1}}.map-pin--mikrotik .map-pin-ring{background:#60a5fa}.map-pin--mikrotik .map-pin-body{background:linear-gradient(145deg,#93c5fd,#2563eb 55%,#1d4ed8)}.map-pin--switch .map-pin-ring{background:#818cf8}.map-pin--switch .map-pin-body{background:linear-gradient(145deg,#a5b4fc,#6366f1 55%,#4f46e5)}.map-pin.is-critical .map-pin-body{border-color:#fecaca;box-shadow:0 0 0 2px rgba(239,68,68,.45),0 10px 22px rgba(127,29,29,.35)}.map-pin-badge{top:-5px;right:-6px;min-width:24px;padding:2px 4px;border-width:1.5px;font-size:.5rem}.map-pin--odc .map-pin-badge,.map-pin--odp .map-pin-badge{top:-4px;right:-5px;min-width:20px;padding:1px 3px;font-size:.46rem}.map-pin-label{margin-top:3px;max-width:88px;padding:2px 6px;border-radius:6px;font-size:.58rem;font-weight:600}.map-pin-label.critical{background:rgba(127,29,29,.82);color:#fecaca}.map-card--fullscreen .map-shell{flex:1;min-height:0;height:100%;margin-top:0;border:none;border-radius:inherit}.map-card--fullscreen .leaflet-map,.map-card--fullscreen .map-loading{height:100%;min-height:0}.map-layer-switch{position:absolute;top:12px;right:56px;z-index:600;display:inline-flex;padding:4px;border:1px solid var(--map-hud-border);border-radius:999px;background:var(--map-hud-bg)}.map-layer-switch button{border:none;border-radius:999px;padding:6px 9px;background:transparent;color:#e2e8f0;font-size:.64rem;font-weight:700;cursor:pointer;transition:background .15s ease,color .15s ease,box-shadow .15s ease;white-space:nowrap}.map-layer-switch button:hover{background:hsla(0,0%,100%,.12);color:#fff}.map-layer-switch button.active{background:#0891b2;color:#fff}.map-expand-toggle{position:absolute;top:12px;right:12px;z-index:600;display:inline-flex;align-items:center;justify-content:center;width:34px;height:34px;border:1px solid var(--map-hud-border);border-radius:10px;background:var(--map-hud-bg);color:#f8fafc;cursor:pointer;transition:background .15s ease,color .15s ease}.map-expand-toggle:hover{background:hsla(0,0%,100%,.1)}.map-measure-toggle{position:absolute;top:52px;right:12px;z-index:600;display:inline-flex;align-items:center;justify-content:center;width:34px;height:34px;border:1px solid var(--map-hud-border);border-radius:10px;background:var(--map-hud-bg);color:#f8fafc;cursor:pointer;transition:background .15s ease,color .15s ease}.map-measure-toggle:hover{background:hsla(0,0%,100%,.1)}.map-measure-toggle.active{border-color:#0891b2;background:#0891b2;color:#fff}.map-measure-panel{position:absolute;top:12px;left:50%;z-index:650;width:min(420px,calc(100% - 120px));transform:translateX(-50%);padding:10px 12px;border:1px solid var(--map-hud-border);border-radius:10px;background:var(--map-hud-bg);color:#f8fafc;pointer-events:auto}.map-measure-panel-top{display:flex;align-items:flex-start;justify-content:space-between;gap:10px}.map-measure-panel-top strong{display:block;font-size:.82rem;font-weight:700;letter-spacing:-.01em}.map-measure-panel-top p{margin:3px 0 0;color:#cbd5e1;font-size:.68rem;font-weight:500;line-height:1.35}.map-measure-close{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;border:1px solid rgba(148,163,184,.35);border-radius:8px;background:hsla(0,0%,100%,.06);color:#e2e8f0;cursor:pointer}.map-measure-close:hover{background:hsla(0,0%,100%,.12)}.map-measure-stats{display:flex;flex-wrap:wrap;gap:8px;margin-top:8px}.map-measure-stat{display:grid;gap:1px;min-width:72px;padding:5px 8px;border-radius:8px;background:hsla(0,0%,100%,.06);border:1px solid rgba(148,163,184,.2)}.map-measure-stat span{color:#94a3b8;font-size:.58rem;font-weight:600;letter-spacing:.05em;text-transform:uppercase}.map-measure-stat strong{color:#f8fafc;font-size:.88rem;font-weight:700;letter-spacing:-.02em}.map-measure-actions{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}.map-measure-action{display:inline-flex;align-items:center;gap:5px;min-height:30px;padding:0 10px;border:1px solid rgba(148,163,184,.35);border-radius:8px;background:hsla(0,0%,100%,.06);color:#e2e8f0;font-size:.72rem;font-weight:600;cursor:pointer}.map-measure-action:hover:not(:disabled){background:hsla(0,0%,100%,.12)}.map-measure-action:disabled{opacity:.45;cursor:not-allowed}.map-measure-action--primary{margin-left:auto;border-color:#93c5fd;background:linear-gradient(135deg,#3b82f6,#2563eb);color:#fff}.map-measure-action--primary:hover{background:linear-gradient(135deg,#2563eb,#1d4ed8)}.map-measure-cursor,.map-shell.is-measuring .leaflet-container{cursor:crosshair!important}.map-measure-label-icon{background:transparent;border:0}.map-measure-segment-label{display:inline-flex;align-items:center;justify-content:center;min-width:36px;padding:2px 8px;border:1px solid hsla(0,0%,100%,.35);border-radius:999px;background:rgba(37,99,235,.88);color:#fff;font-size:.62rem;font-weight:700;white-space:nowrap;box-shadow:0 4px 12px rgba(15,23,42,.25)}.map-card.is-map-expanded .map-expand-toggle{right:12px}.map-loading-card{flex:1;min-height:240px}@media (max-width:900px){.map-page-topbar--compact{flex-direction:column;align-items:stretch}.map-page-search{max-width:none}.map-page-filters-row{display:grid;grid-template-columns:1fr 1fr;gap:8px;width:100%}.map-page-filter{width:100%}.map-expand-toggle{right:12px;top:auto;bottom:12px}.map-measure-toggle{right:12px;top:auto;bottom:52px}.map-measure-panel{top:auto;bottom:96px;width:min(420px,calc(100% - 24px))}.map-card.is-map-expanded .map-expand-toggle{top:12px;bottom:auto}.map-layer-switch{top:8px;bottom:auto;right:8px}.map-legend--modern,.map-legend-collapsed{left:8px;bottom:8px;max-width:140px}.map-hud--status{left:44px;right:110px;top:8px;max-width:none}}@media (max-width:640px){.content-panel--map{padding:8px;height:calc(100vh - 56px)}}.filters{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:10px}.filters select,.search-box{min-height:42px;border:1px solid var(--line);border-radius:999px;background:var(--surface)}.search-box{display:flex;align-items:center;gap:8px;min-width:min(330px,100%);padding:0 14px;color:var(--muted)}.search-box input{width:100%;border:0;outline:0;color:var(--text)}.filters select{padding:0 34px 0 14px;color:var(--text)}.map-shell{position:relative;min-height:640px;margin-top:12px;overflow:hidden;border:1px solid var(--line);border-radius:var(--radius-md);background:#e2e8f0}.map-shell .leaflet-tile-pane{will-change:auto}.map-shell .leaflet-tile{image-rendering:auto}.leaflet-map,.map-loading{width:100%;min-height:640px}.loading-card,.map-loading{display:grid;place-items:center;min-height:360px;border-radius:var(--radius-lg);color:var(--muted);font-weight:600}.map-legend{position:absolute;right:16px;bottom:16px;z-index:500;display:flex;flex-wrap:wrap;justify-content:flex-end;gap:8px;max-width:min(92%,620px);padding:8px 12px;border:1px solid var(--line);border-radius:var(--radius-md);background:var(--panel);box-shadow:var(--shadow-sm)}.map-legend span{display:inline-flex;align-items:center;gap:6px;color:#334155;font-size:.78rem;font-weight:800}.map-legend i{width:10px;height:10px;border-radius:99px}.ftth-div-icon{background:transparent;border:0}.leaflet-container,.leaflet-popup-content,.leaflet-popup-content-wrapper{font-family:var(--font-sans),"Plus Jakarta Sans",ui-sans-serif,system-ui,-apple-system,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.popup-card{min-width:220px;font-family:inherit;letter-spacing:-.01em}.popup-heading{display:grid;gap:4px;margin-bottom:8px}.popup-client-headline strong,.popup-heading strong,.popup-node-headline strong{color:#0f172a;font-size:.94rem;font-weight:700;letter-spacing:-.025em;line-height:1.28}.popup-heading small,.popup-node-type{color:#64748b;font-size:.62rem;font-weight:600;letter-spacing:.08em;text-transform:uppercase}.popup-card>p,.popup-node-address{margin:0;color:#64748b;font-size:.74rem;font-weight:500;line-height:1.45}.popup-node-header{display:grid;gap:4px;padding-bottom:8px;border-bottom:1px solid #e8edf3}.popup-node-headline{display:flex;align-items:center;justify-content:space-between;gap:8px}.popup-node-headline strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.popup-node-fields{display:grid;gap:5px;margin:8px 0 0}.popup-node-fields>div{display:grid;grid-template-columns:88px minmax(0,1fr);gap:2px 10px;align-items:baseline}.popup-card dt,.popup-node-fields dt{margin:0;color:#94a3b8;font-size:.6rem;font-weight:600;letter-spacing:.06em;text-transform:uppercase}.popup-node-fields dd{margin:0;color:#0f172a;font-size:.76rem;font-weight:600;letter-spacing:-.015em;line-height:1.35;overflow-wrap:anywhere}.popup-node-fields dd.popup-field-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:.7rem;font-weight:600;letter-spacing:-.03em}.popup-node-address{display:flex;align-items:flex-start;gap:4px}.popup-node-address span{min-width:0}.popup-node-address svg{flex-shrink:0;margin-top:2px;color:#94a3b8}.status-pill{width:-moz-fit-content;width:fit-content;border-radius:999px;padding:3px 8px;color:#fff;font-size:.58rem;font-weight:700;letter-spacing:.07em;text-transform:uppercase}.status-pill.online{background:#22c55e}.status-pill.warning{background:#f59e0b}.status-pill.los,.status-pill.offline{background:#dc2626}.status-pill.dying_gasp{background:#f97316}.popup-card--client{min-width:0;width:100%}.popup-client-signal{display:flex;align-items:center;gap:8px;margin-top:8px;padding:8px 10px;border-radius:10px;background:linear-gradient(135deg,#f8fafc,#f1f5f9);border:1px solid #e8edf3}.popup-client-signal svg{flex-shrink:0;opacity:.85}.popup-client-signal>div{display:grid;gap:1px;min-width:0}.popup-client-signal span{color:#94a3b8;font-size:.56rem;font-weight:600;letter-spacing:.07em;text-transform:uppercase}.popup-client-signal strong{color:inherit;font-size:.86rem;font-weight:700;letter-spacing:-.02em;line-height:1.2}.popup-client-details{display:grid;gap:0;margin:6px 0 0;padding:0;list-style:none;border-top:1px solid #eef2f7}.popup-client-details li{display:grid;grid-template-columns:72px minmax(0,1fr);gap:8px;align-items:baseline;padding:6px 0;border-bottom:1px solid #f1f5f9}.popup-client-details li:last-child{border-bottom:0}.popup-client-details span{display:inline-flex;align-items:center;gap:3px;color:#94a3b8;font-size:.58rem;font-weight:600;letter-spacing:.06em;text-transform:uppercase}.popup-client-details code,.popup-client-details em{margin:0;color:#0f172a;font-size:.72rem;font-weight:600;font-style:normal;letter-spacing:-.015em;line-height:1.35;overflow-wrap:anywhere}.popup-client-details code{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:.68rem;letter-spacing:-.03em}.popup-client-header{display:grid;gap:4px;padding-bottom:8px;border-bottom:1px solid #e8edf3}.popup-client-headline{display:flex;align-items:center;justify-content:space-between;gap:8px}.popup-client-headline strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.status-pill--compact{flex-shrink:0;padding:2px 8px;font-size:.56rem;letter-spacing:.08em}.popup-client-source{color:#64748b;font-size:.6rem;font-weight:600;letter-spacing:.08em;text-transform:uppercase}.popup-client-address{display:flex;align-items:center;gap:4px;margin:0;color:#64748b;font-size:.72rem;font-weight:500;line-height:1.35}.popup-client-address span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.popup-client-address svg{flex-shrink:0;color:#94a3b8}.popup-client-fields{display:grid;grid-template-columns:1fr 1fr;gap:5px;margin-top:8px}.popup-client-cell{display:grid;gap:2px;min-width:0;padding:5px 7px;border-radius:8px;background:#f8fafc;border:1px solid #eef2f7}.popup-client-cell.is-wide{grid-column:1/-1}.popup-client-label{color:#94a3b8;font-size:.56rem;font-weight:600;letter-spacing:.07em;text-transform:uppercase}.popup-client-value{color:#0f172a;font-size:.74rem;font-weight:600;line-height:1.3;letter-spacing:-.015em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.popup-client-value.is-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:.67rem;font-weight:600;letter-spacing:-.03em}.popup-client-cell.is-wide .popup-client-value{white-space:normal;overflow-wrap:anywhere}.rx-tone--good{color:#16a34a}.rx-tone--warn{color:#d97706}.rx-tone--bad{color:#dc2626}.popup-client-feedback{margin:7px 0 0;padding:6px 8px;border-radius:7px;background:#eff6ff;color:#1d4ed8;font-size:.68rem;font-weight:600;line-height:1.35}.popup-client-actions{display:grid;grid-template-columns:1fr 1fr;gap:6px;margin-top:8px}.popup-client-btn{display:inline-flex;align-items:center;justify-content:center;gap:5px;min-height:30px;padding:0 8px;border-radius:8px;font-size:.7rem;font-weight:600;letter-spacing:-.01em;text-decoration:none;cursor:pointer;transition:background .15s ease,border-color .15s ease,color .15s ease}.popup-client-btn--danger{border:1px solid #fecaca;background:#fef2f2;color:#dc2626}.popup-client-btn--danger:hover:not(:disabled){background:#fee2e2;border-color:#fca5a5}.popup-client-btn--danger:disabled{opacity:.6;cursor:not-allowed}.popup-client-btn--detail{border:1px solid #bfdbfe;background:#eff6ff;color:#2563eb}.popup-client-btn--detail:hover{background:#dbeafe;border-color:#93c5fd}.leaflet-popup-content-wrapper{border-radius:14px;box-shadow:0 10px 24px rgba(15,23,42,.16)}.leaflet-popup-content{width:248px!important;max-width:min(248px,86vw);margin:9px 11px;line-height:1.35;font-size:.8125rem}@media (max-width:1180px){.stats-grid{grid-template-columns:repeat(3,minmax(0,1fr))}}@media (max-width:900px){.app-header{padding:0 12px}.app-header-account-label{display:none}.app-body{position:relative}.sidebar{position:fixed;top:56px;left:0;z-index:250;flex-basis:auto;width:min(280px,88vw);height:calc(100vh - 56px);max-height:calc(100vh - 56px);border-right:1px solid var(--line);box-shadow:var(--shadow-lg)}.app-body.sidebar-collapsed .sidebar,.sidebar.is-collapsed{transform:translateX(-105%);opacity:0;pointer-events:none;visibility:hidden}.content-panel{padding:16px}.nav-list{grid-template-columns:1fr}.map-toolbar,.topbar{align-items:flex-start;flex-direction:column}.filters,.refresh-button{width:100%}.filters select,.search-box{flex:1 1 180px}}@media (max-width:640px){.content-panel,.map-card,.sidebar{border-radius:var(--radius-md);padding:14px}.nav-list,.stats-grid{grid-template-columns:1fr}.leaflet-map,.map-loading,.map-shell{min-height:520px}.map-legend{right:10px;bottom:10px;border-radius:18px}}.nav-group-label{margin:20px 0 8px;padding:0 8px;color:#94a3b8;font-size:.68rem;font-weight:800;letter-spacing:.12em;text-transform:uppercase}.nav-list.compact{margin-top:0}.sidebar-scroll{flex:1;min-height:0;overflow-y:auto;overflow-x:hidden;margin-top:12px;padding-right:2px;padding-bottom:4px;scrollbar-gutter:stable}.sidebar-scroll::-webkit-scrollbar{width:6px}.sidebar-scroll::-webkit-scrollbar-thumb{border-radius:999px;background:#cbd5e1}.sidebar-scroll::-webkit-scrollbar-track{background:transparent}.sidebar .nav-list,.sidebar .sidebar-main-nav{margin-top:0}.sidebar .nav-group-label{margin:14px 0 6px}.sidebar .nav-group-label:first-child{margin-top:0}.sidebar-footer{margin-top:14px;padding-top:12px;border-top:1px solid var(--line)}.sidebar-footer .nav-group-label{margin-top:0}.dashboard-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px;margin-top:16px}.dashboard-card{border:1px solid var(--line);border-radius:var(--radius-md);padding:16px;background:var(--surface)}.dashboard-olt-list{display:grid;gap:10px;margin-top:12px}.dashboard-olt-item{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:12px;border:1px solid var(--line);border-radius:10px;background:var(--surface-muted)}.dashboard-olt-item strong a{color:inherit;text-decoration:none}.dashboard-olt-item small{display:block;margin-top:4px;color:var(--muted)}.dashboard-smart .dash-summary-grid{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:12px;margin-top:18px}.dash-summary-card{position:relative;display:flex;align-items:flex-start;gap:14px;min-height:108px;padding:16px;overflow:hidden;border:1px solid var(--line);border-radius:var(--radius-md);background:var(--panel)}.dash-summary-card:before{content:"";position:absolute;left:0;top:0;bottom:0;width:3px;background:var(--muted)}.dash-summary-card.blue:before{background:var(--accent)}.dash-summary-card.green:before{background:#22c55e}.dash-summary-card.orange:before{background:#f59e0b}.dash-summary-card.red:before{background:#ef4444}.dash-summary-card.slate:before{background:#64748b}.dash-summary-icon{display:grid;place-items:center;width:42px;height:42px;border-radius:10px;flex-shrink:0}.dash-summary-card.blue .dash-summary-icon{background:rgba(14,116,144,.12);color:#0e7490}.dash-summary-card.green .dash-summary-icon{background:rgba(22,163,74,.12);color:#16a34a}.dash-summary-card.orange .dash-summary-icon{background:rgba(234,88,12,.12);color:#ea580c}.dash-summary-card.red .dash-summary-icon{background:rgba(220,38,38,.12);color:#dc2626}.dash-summary-card.slate .dash-summary-icon{background:rgba(100,116,139,.12);color:#475569}.dash-summary-body{min-width:0;flex:1}.dash-summary-body p{margin:0;font-size:.78rem;font-weight:700;letter-spacing:.02em;text-transform:uppercase;color:var(--muted)}.dash-summary-body strong{display:block;margin-top:6px;font-size:1.7rem;font-weight:700;line-height:1;letter-spacing:-.03em}.dash-summary-body small{display:block;margin-top:6px;color:var(--muted);font-size:.75rem}.dash-pct-badge{position:absolute;top:12px;right:12px;padding:2px 8px;border-radius:999px;background:var(--surface-muted);border:1px solid var(--line);font-size:.7rem;font-weight:700;color:var(--muted)}.dash-summary-meter{display:block;height:3px;margin-top:12px;border-radius:999px;background:var(--line);overflow:hidden}.dash-summary-meter i{display:block;height:100%;border-radius:inherit;background:currentColor}.dash-summary-card.blue .dash-summary-meter i{background:var(--accent)}.dash-summary-card.green .dash-summary-meter i{background:#22c55e}.dash-summary-card.orange .dash-summary-meter i{background:#f59e0b}.dash-summary-card.red .dash-summary-meter i{background:#ef4444}.dash-summary-card.slate .dash-summary-meter i{background:#64748b}.dash-olt-stack{display:grid;gap:14px;margin-top:18px}.dash-refresh-hint{margin:0 0 8px}.dash-olt-skeleton-stack{display:grid;gap:14px}.dash-olt-card.skeleton{min-height:148px;background:var(--surface-muted);pointer-events:none}.dash-olt-card{border:1px solid var(--line);border-radius:var(--radius-md);padding:18px;background:var(--panel)}.dash-olt-header{display:flex;align-items:flex-start;gap:14px}.dash-olt-thumb{display:grid;place-items:center;width:48px;height:48px;border-radius:10px;background:rgba(14,116,144,.12);color:var(--primary);flex-shrink:0}.dash-olt-title{flex:1;min-width:0}.dash-olt-title-row{display:flex;flex-wrap:wrap;align-items:center;gap:10px}.dash-olt-title h3{margin:0;font-size:1.08rem}.dash-olt-title h3 a{color:inherit;text-decoration:none}.dash-olt-title h3 a:hover{color:var(--primary)}.dash-olt-meta{margin:6px 0 0;color:var(--muted);font-size:.82rem}.dash-temp-badge{display:inline-flex;align-items:center;gap:6px;padding:6px 10px;border-radius:999px;background:rgba(217,119,6,.14);border:1px solid rgba(217,119,6,.22);color:#b45309;font-size:.8rem;font-weight:700;white-space:nowrap}.dash-olt-health{display:grid;gap:6px;margin-top:14px}.dash-olt-health-label{display:flex;justify-content:space-between;gap:8px;font-size:.75rem;font-weight:700;color:var(--muted)}.dash-olt-health-bar{height:6px;border-radius:999px;background:var(--line);overflow:hidden}.dash-olt-health-bar i{display:block;height:100%;border-radius:inherit;background:#22c55e}.dash-olt-health-bar.is-warn i{background:#f59e0b}.dash-olt-health-bar.is-bad i{background:#ef4444}.dash-olt-stats{display:flex;flex-wrap:wrap;gap:8px;margin-top:14px}.dash-olt-stats.olt-onu-summary{margin-top:12px;padding-top:0;border-top:none}.dash-stat-chip{display:flex;flex-direction:column;gap:2px;min-width:76px;padding:8px 10px;border-radius:8px;background:var(--surface-muted);border:1px solid var(--line)}.dash-stat-chip span{font-size:.7rem;font-weight:700;color:var(--muted)}.dash-stat-chip strong{font-size:1rem}.dash-stat-chip.green{background:rgba(22,163,74,.1);border-color:rgba(22,163,74,.22)}.dash-stat-chip.red{background:rgba(220,38,38,.1);border-color:rgba(220,38,38,.22)}.dash-stat-chip.orange{background:rgba(234,88,12,.1);border-color:rgba(234,88,12,.22)}.dash-stat-chip.green strong{color:#16a34a}.dash-stat-chip.red strong{color:#dc2626}.dash-stat-chip.orange strong{color:#ea580c}.dash-fan-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:10px;margin-top:14px}.dash-fan-card{padding:12px;border:1px solid var(--line);border-radius:10px;background:var(--surface-muted)}.dash-fan-head{display:flex;align-items:center;gap:8px}.dash-fan-head strong{flex:1;font-size:.88rem}.dash-fan-rpm{margin:10px 0 4px;font-size:1.02rem;font-weight:700}.dash-fan-level{margin:0 0 10px;font-size:.75rem;color:var(--muted)}.dash-fan-bar{height:6px;border-radius:999px;background:var(--line);overflow:hidden}.dash-fan-bar-fill{display:block;height:100%;border-radius:inherit;background:#22c55e}.dash-env-hint{margin-top:12px}.dash-quick-links{margin-top:16px}.dash-link-row{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;margin-top:10px}.dash-quick-link{display:flex;align-items:center;gap:10px;min-height:52px;padding:10px 12px;border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--surface-muted);color:var(--text);text-decoration:none;font-weight:700;font-size:.82rem}.dash-quick-link:hover{border-color:var(--accent);color:var(--primary)}.dash-quick-link svg{flex-shrink:0;color:var(--primary)}@media (max-width:1100px){.dash-link-row,.dashboard-smart .dash-summary-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (max-width:640px){.dashboard-smart .dash-summary-grid{grid-template-columns:1fr}.dash-olt-header{flex-wrap:wrap}.dash-link-row{grid-template-columns:1fr}}.popup-client-signal.rx-tone--good{color:#16a34a;border-color:#bbf7d0;background:linear-gradient(135deg,#f0fdf4,#ecfdf5)}.popup-client-signal.rx-tone--warn{color:#d97706;border-color:#fde68a;background:linear-gradient(135deg,#fffbeb,#fef3c7)}.popup-client-signal.rx-tone--bad{color:#dc2626;border-color:#fecaca;background:linear-gradient(135deg,#fef2f2,#fee2e2)}.popup-client-signal.rx-tone--na{color:#475569}.empty-card.compact{padding:20px}@media (max-width:1100px){.dashboard-grid{grid-template-columns:1fr}}.onu-panel{background:var(--surface);color:var(--text)}.onu-panel .topbar{align-items:flex-start}.onu-topbar-actions{flex-wrap:wrap;flex-shrink:0;justify-content:flex-end;gap:8px}.onu-enrichment-toolbar{display:flex;align-items:center;justify-content:space-between;gap:12px;margin:0 0 12px;padding:10px 12px;border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--surface-muted)}.onu-enrichment-label{margin:0;font-size:.75rem;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:var(--muted);white-space:nowrap}.onu-enrichment-actions{display:flex;flex-wrap:wrap;gap:8px;justify-content:flex-end}.onu-enrichment-banner{margin:0 0 12px}.onu-enrichment-banner .form-error,.onu-enrichment-banner .hint-text{margin:0}@media (max-width:900px){.onu-enrichment-toolbar{flex-direction:column;align-items:stretch}.onu-enrichment-actions{justify-content:stretch}.onu-enrichment-actions .ghost-button{flex:1;justify-content:center}}.sync-action-group{display:inline-flex;align-items:stretch;border:1px solid var(--line);border-radius:var(--radius-sm);overflow:hidden;background:var(--surface);box-shadow:0 1px 2px rgba(15,23,42,.04)}.sync-action-group .refresh-button{border-radius:0;min-height:40px;white-space:nowrap}.sync-action-group .sync-action-secondary{border:0;border-left:1px solid var(--line);border-radius:0;min-height:40px;padding:0 14px;font-size:.8125rem;font-weight:600;color:var(--muted);white-space:nowrap;background:var(--surface-muted)}.sync-action-group .sync-action-secondary:hover:not(:disabled){background:var(--surface-hover);color:var(--text)}@media (max-width:900px){.onu-panel .topbar{flex-direction:column;align-items:stretch}.onu-topbar-actions{flex-wrap:wrap;width:100%}.onu-topbar-actions .ghost-button{flex:1 1 auto;justify-content:center}.sync-action-group{flex:1 1 100%}.sync-action-group .refresh-button,.sync-action-group .sync-action-secondary{flex:1 1 50%;justify-content:center}}.tab-switch.light{display:inline-flex;margin-top:16px;border:1px solid var(--line);border-radius:var(--radius-sm);overflow:hidden;background:var(--panel-soft);padding:4px;gap:4px}.tab-switch.light a{padding:9px 18px;border-radius:8px;background:transparent;color:var(--muted);text-decoration:none;font-weight:700;font-size:.8125rem;transition:background .15s ease,color .15s ease,box-shadow .15s ease}.tab-switch.light a.active{background:var(--surface-raised);color:var(--primary-dark);box-shadow:var(--shadow-xs)}.tab-switch.tech-switch{margin-top:8px;padding:4px;gap:4px}.tab-switch.tech-switch button{border:0;background:transparent;color:var(--muted);text-decoration:none;font-weight:700;font-size:.8125rem;padding:9px 18px;cursor:pointer;border-radius:8px;transition:background .15s ease,color .15s ease,box-shadow .15s ease}.tab-switch.tech-switch button.active{background:var(--surface-raised);color:var(--primary-dark);box-shadow:var(--shadow-xs);border-radius:8px}.uncfg-toolbar-actions{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.uncfg-scan-summary{display:flex;flex-wrap:wrap;gap:8px;margin-top:14px}.uncfg-scan-chip{display:inline-flex;align-items:center;gap:8px;border:1px solid var(--line);border-radius:999px;padding:6px 12px;background:var(--surface-muted);font-size:.82rem}.uncfg-scan-chip strong{color:var(--text)}.uncfg-scan-chip span{color:var(--muted)}.uncfg-row-relocated{background:var(--surface-hover)}.uncfg-relocate-hint{display:block;margin-top:4px;color:#b45309;font-size:.72rem;font-weight:600}.onu-move-lead{margin:0 0 14px;line-height:1.55;color:var(--text)}.onu-move-path{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-bottom:14px;padding:14px;border:1px solid var(--line);border-radius:12px;background:var(--surface-muted)}.onu-move-end{display:flex;flex-direction:column;gap:4px;min-width:0;flex:1}.onu-move-label{font-size:.72rem;font-weight:700;letter-spacing:.05em;text-transform:uppercase}.onu-move-end--from .onu-move-label,.onu-move-end--from strong{color:#dc2626}.onu-move-end--to .onu-move-label,.onu-move-end--to strong{color:#16a34a}.onu-move-arrow{flex-shrink:0;color:var(--muted)}.primary-button.compact{min-height:34px;padding:0 10px;font-size:.75rem;white-space:nowrap}html[data-theme=dark] .uncfg-relocate-hint{color:#fbbf24}html[data-theme=dark] .onu-move-end--from strong{color:#f87171}html[data-theme=dark] .onu-move-end--to strong{color:#4ade80}.filter-groups{display:flex;flex-wrap:wrap;align-items:center;gap:16px;margin-top:14px;padding:12px 14px;border:1px solid var(--line);border-radius:14px;background:var(--surface-hover)}.filter-groups .switch-port-search{min-width:220px;flex:1;padding:8px 12px;border:1px solid var(--line);border-radius:10px;background:var(--surface)}.filter-group{display:flex;align-items:center;gap:10px}.filter-label{min-width:52px;color:var(--muted);font-size:.82rem;font-weight:800}.filter-buttons{display:flex;flex-wrap:wrap;gap:8px}.filter-chip{display:inline-flex;align-items:center;justify-content:center;width:38px;height:38px;border:1px solid var(--line);border-radius:10px;background:var(--surface);cursor:pointer;transition:.15s ease}.filter-chip:hover{border-color:#93c5fd;background:var(--primary-soft)}.filter-chip.has-count{width:auto;min-width:38px;padding:0 8px;gap:4px}.filter-chip-count{font-size:.72rem;font-weight:700;color:var(--text)}.filter-chip.status-chip.online .filter-chip-count{color:#16a34a}.filter-chip.status-chip.dying_gasp .filter-chip-count{color:#ea580c}.filter-chip.status-chip.los .filter-chip-count{color:#dc2626}.icon-online{color:#16a34a}.icon-power{color:#94a3b8}.icon-los{color:#dc2626}.icon-offline{color:#64748b}.status-icon-chip{display:inline-flex;align-items:center;justify-content:center;width:38px;height:38px;border:1px solid var(--line);border-radius:10px;background:var(--surface-muted)}.status-icon-chip--online{background:rgba(22,163,74,.12);border-color:rgba(22,163,74,.28)}.status-icon-chip--offline{background:rgba(100,116,139,.1);border-color:rgba(100,116,139,.22)}.status-icon-chip--los{background:rgba(220,38,38,.12);border-color:rgba(220,38,38,.28)}.status-icon-chip--dying_gasp{background:rgba(217,119,6,.12);border-color:rgba(217,119,6,.28)}.signal-bars{display:inline-flex;align-items:flex-end;gap:2px;height:14px}.signal-bars i{display:block;width:3px;border-radius:2px;background:#cbd5e1}.signal-bars i:first-child{height:5px}.signal-bars i:nth-child(2){height:9px}.signal-bars i:nth-child(3){height:13px}.signal-bars.good i.on{background:#22c55e}.signal-bars.warn i.on{background:#f59e0b}.signal-bars.bad i.on{background:#ef4444}.signal-bars.muted i.on{background:#94a3b8}.toolbar-row{display:flex;flex-wrap:wrap;gap:12px;margin-top:16px}.toolbar-filters{display:flex;flex-wrap:wrap;gap:8px}.toolbar-filters select{min-height:42px;border:1px solid var(--line);border-radius:10px;background:#fff;color:#334155;padding:0 12px}.table-meta{margin:12px 0;font-size:.86rem;font-weight:700;color:var(--muted)}.table-wrap.light{overflow:auto;border:1px solid var(--line);border-radius:16px;background:var(--surface)}.onu-table.light{width:100%;border-collapse:collapse;font-size:.82rem;table-layout:auto;color:var(--text)}.onu-table.light td,.onu-table.light th{padding:8px 10px;border-bottom:1px solid var(--line);text-align:left;vertical-align:middle}.onu-table.light th{background:var(--surface-muted);color:var(--muted);font-size:.75rem;text-transform:uppercase;white-space:nowrap}.onu-table.light td{white-space:nowrap;color:var(--text)}.onu-table.light .col-status{width:44px;padding-inline:8px;text-align:center}.onu-table.light .col-view{width:52px;padding-inline:8px}.onu-table.light .col-name{width:140px;max-width:160px;white-space:normal}.onu-table.light .col-sn{width:132px;padding-left:6px}.onu-table.light .col-onu{width:176px;white-space:normal}.onu-table.light .col-zone{min-width:110px;max-width:160px;white-space:normal;line-height:1.35}.onu-table.light .col-odb{width:72px}.onu-table.light .col-signal{width:118px}.onu-table.light .col-compact{width:72px}.onu-table.light .col-date{width:92px}.onu-table.light tbody tr:hover{background:var(--surface-hover)}.status-globe{display:inline-block;width:14px;height:14px;border-radius:999px;background:#94a3b8}.status-globe.online{background:#22c55e}.status-globe.offline{background:#ef4444}.status-globe.los{background:#dc2626}.status-globe.dying_gasp{background:#f97316}.link-button{border:0;background:transparent;color:#1d4ed8;font-weight:800}.stack-cell small,.stack-cell strong{display:block}.stack-cell small{color:var(--muted)}.onu-path-cell .onu-line-no{color:var(--muted);font-size:.78rem}.name-cell,.zone-cell{color:var(--text)}.name-cell{font-weight:700}.sn-cell{padding-left:4px!important}.sn-cell .stack-cell strong{font-size:.8rem;letter-spacing:.01em}.mode-badge,.sn-cell .stack-cell small{font-size:.72rem}.mode-badge{display:inline-block;border-radius:6px;padding:3px 8px;background:#0f172a;color:#fff;font-weight:700}.signal-pill{display:inline-flex;align-items:center;gap:6px;border:1px solid transparent;border-radius:8px;padding:4px 8px;font-weight:800}.signal-pill.good{background:rgba(22,163,74,.14);border-color:rgba(22,163,74,.22);color:#166534}.signal-pill.warn{background:rgba(217,119,6,.14);border-color:rgba(217,119,6,.22);color:#92400e}.signal-pill.bad{background:rgba(220,38,38,.12);border-color:rgba(220,38,38,.22);color:#991b1b}.signal-pill.muted{background:var(--surface-muted);border-color:var(--line);color:var(--muted)}.auto-actions-bar.light{display:flex;flex-wrap:wrap;gap:10px;margin-top:16px;padding:12px;border:1px solid var(--line);border-radius:14px;background:var(--surface-muted)}.unconfigured-grid{display:grid;gap:14px;margin-top:16px}.unconfigured-card.light{border:1px solid var(--line);border-radius:16px;padding:16px;background:var(--surface)}.unconfigured-card.light header h3{display:flex;align-items:center;gap:8px;margin:0;color:var(--text)}.uncfg-list.light{list-style:none;margin:12px 0 0;padding:0;display:grid;gap:8px}.uncfg-list.light li{display:grid;grid-template-columns:1fr 1fr auto;gap:10px;align-items:center;padding:10px 0;border-top:1px solid var(--line);color:var(--text)}.empty-scan{color:#94a3b8;margin:12px 0 0}.olt-detail-tabs{display:flex;flex-wrap:wrap;gap:8px;margin-top:16px}.olt-detail-tabs button{border:1px solid var(--line);border-radius:var(--radius-sm);padding:9px 14px;background:var(--surface);color:var(--text);cursor:pointer;font-weight:600;font-size:.8125rem;transition:background .15s ease,color .15s ease,box-shadow .15s ease}.olt-detail-tabs button.active{background:var(--primary-soft);color:var(--primary-dark);border-color:#bfdbfe;box-shadow:var(--shadow-xs)}.olt-detail-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:16px;margin-top:16px}.olt-detail-grid dt{font-size:12px;color:#64748b;font-weight:700;text-transform:uppercase}.olt-detail-grid dd{margin:4px 0 0;font-weight:600}.onu-detail-body{margin-top:16px}.onu-detail-summary{display:flex;align-items:center;gap:16px;padding:16px;border:1px solid var(--line);border-radius:14px;background:var(--panel);margin-bottom:16px}.onu-detail-summary p{margin:4px 0 0;color:var(--muted);font-size:.9rem}.status-icon-chip.large{width:44px;height:44px;border-radius:12px;display:grid;place-items:center}.onu-detail-actions{display:flex;flex-wrap:wrap;gap:10px;margin-top:20px}.onu-edit-form{margin-top:16px;max-width:960px}.form-grid.two-col{grid-template-columns:repeat(2,minmax(0,1fr))}.form-grid .full-width{grid-column:1/-1}.onu-detail-page .topbar{align-items:flex-start}.onu-topbar-compact h2{margin-bottom:0}.onu-unified{margin-top:12px;border:1px solid var(--line);border-radius:var(--radius-lg);overflow:hidden;background:var(--panel);color:var(--text);box-shadow:var(--shadow-sm)}.onu-detail-tabs{display:flex;gap:0;padding:0 12px;background:var(--panel-soft);border-bottom:1px solid var(--line)}.onu-detail-tab{border:none;border-bottom:2px solid transparent;background:transparent;color:var(--muted);padding:12px 16px;font-size:13px;font-weight:700;cursor:pointer;margin-bottom:-1px}.onu-detail-tab:hover{color:var(--text)}.onu-detail-tab.active{color:var(--primary);border-bottom-color:var(--primary);background:var(--panel)}.onu-toolbar-hint{align-self:center;font-size:12px;color:var(--muted);font-weight:600}.onu-unified-header{display:grid;grid-template-columns:1fr 1fr;gap:0;border-bottom:1px solid var(--line)}@media (max-width:900px){.onu-unified-header{grid-template-columns:1fr}}.onu-info-col{padding:16px 20px}.onu-info-col+.onu-info-col{border-left:1px solid var(--line)}@media (max-width:900px){.onu-info-col+.onu-info-col{border-left:none;border-top:1px solid var(--line)}}.onu-info-row{display:grid;grid-template-columns:150px 1fr;gap:8px;padding:6px 0;font-size:14px;align-items:baseline}.onu-info-label{color:var(--muted);font-size:12px;text-transform:uppercase;letter-spacing:.03em}.onu-info-value{display:inline-flex;align-items:center;gap:6px;flex-wrap:wrap;font-weight:600;color:var(--text);word-break:break-word}.onu-edit-icon{border:none;background:transparent;color:var(--primary);cursor:pointer;padding:2px;display:inline-flex}.onu-toolbar{display:flex;flex-wrap:wrap;gap:8px;padding:12px 16px;background:var(--panel-soft);border-bottom:1px solid var(--line)}.toolbar-btn{border:1px solid var(--line);background:var(--panel);color:var(--text);border-radius:8px;padding:8px 14px;font-weight:700;font-size:13px;cursor:pointer;display:inline-flex;align-items:center;gap:6px;text-decoration:none}.toolbar-btn:hover:not(:disabled){background:var(--primary-soft);border-color:var(--line);color:var(--primary)}.toolbar-btn:disabled{opacity:.45;cursor:not-allowed}.toolbar-btn.live{background:rgba(22,163,74,.12);border-color:rgba(22,163,74,.28);color:#15803d}.toolbar-btn.live.active{background:#16a34a;color:#fff;border-color:#16a34a}.onu-inline-edit-panel{margin:0;padding:16px 20px;background:var(--panel-soft);border-bottom:1px solid var(--line)}.onu-inline-edit-panel h4{margin:0 0 12px;color:var(--text);font-size:14px}.onu-inline-edit-panel label{color:var(--muted)}.onu-inline-edit-panel input,.onu-inline-edit-panel select{background:var(--bg);border-color:var(--line);color:var(--text)}.onu-inline-edit-actions{display:flex;gap:10px;margin-top:12px}.onu-flash-message{margin:0;padding:10px 16px;background:#f0fdf4;color:#166534;font-size:14px;border-bottom:1px solid #bbf7d0}.onu-charts-row{display:grid;grid-template-columns:1fr 1fr;gap:0;border-bottom:1px solid var(--line)}@media (max-width:900px){.onu-charts-row{grid-template-columns:1fr}}.onu-unified .onu-chart-card{border:none;border-radius:0;background:transparent;color:var(--text);padding:16px 20px}.onu-unified .onu-chart-card+.onu-chart-card{border-left:1px solid var(--line)}@media (max-width:900px){.onu-unified .onu-chart-card+.onu-chart-card{border-left:none;border-top:1px solid var(--line)}}.onu-unified .onu-chart-card h4,.onu-unified .onu-chart-head h4{margin:0 0 4px;font-size:15px;color:var(--text)}.onu-chart-y-label{margin:0 0 8px;font-size:12px;color:var(--muted)}.onu-unified .onu-chart-empty{color:var(--muted)}.onu-unified .onu-chart-axis{fill:var(--muted)}.onu-unified .onu-chart-grid{stroke:var(--line)}.onu-unified .onu-chart-foot{color:var(--muted)}.onu-chart-stats{display:flex;flex-wrap:wrap;gap:16px;margin-top:10px;font-size:13px;color:var(--muted)}.onu-chart-stat-group{display:flex;flex-wrap:wrap;gap:10px;align-items:center}.onu-chart-stat-label{font-weight:700}.onu-config-block{padding:16px 20px;border-bottom:1px solid var(--line)}.onu-config-block.muted{opacity:.85}.onu-config-block h3{margin:0 0 12px;font-size:15px;color:var(--text)}.onu-config-head{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:14px}.onu-config-head h3{margin-bottom:4px}.onu-config-head p{margin:0;color:var(--muted);font-size:13px}.onu-wan-service-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}@media (max-width:800px){.onu-wan-service-grid{grid-template-columns:1fr}}.onu-wan-service-card{min-height:86px;border:1px solid var(--line);border-radius:12px;background:var(--panel-soft);padding:12px 14px}.onu-wan-service-card.active{background:var(--primary-soft);border-color:var(--accent)}.onu-wan-service-card.muted{opacity:.72}.onu-wan-service-title{display:flex;align-items:center;gap:8px;color:var(--text);font-size:14px}.onu-wan-service-edit{margin-left:auto;display:inline-grid;place-items:center;width:28px;height:28px;border:1px solid var(--line);border-radius:8px;background:var(--panel);color:var(--muted);cursor:pointer}.onu-wan-service-edit:hover{color:var(--accent);border-color:var(--accent)}.onu-overview-wan-block{margin-top:18px}.onu-wan-service-unsupported{display:grid;gap:12px;padding:4px 0 8px}.onu-wan-service-check,.onu-wan-service-empty{display:inline-grid;place-items:center;width:16px;height:16px;border-radius:4px;border:1px solid var(--accent);background:var(--accent);color:var(--bg);font-size:11px;font-weight:800;line-height:1}.onu-wan-service-empty{background:var(--surface-muted);border-color:var(--line);color:transparent}.onu-wan-service-body{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px 18px;margin-top:12px;padding-left:24px;color:var(--muted);font-size:13px}.onu-wan-service-body span{display:grid;gap:2px;min-width:0}.onu-wan-service-body strong{color:var(--text);font-size:13px;overflow-wrap:anywhere}.onu-config-actions{display:flex;flex-wrap:wrap;align-items:center;gap:10px;margin-top:14px}.onu-unified .onu-config-inline{color:var(--muted)}.onu-unified .onu-config-inline strong{color:var(--text)}.onu-unified .link-button{color:var(--primary)}.onu-config-table{width:100%}.onu-unified .data-table{background:var(--panel-soft)}.onu-unified .data-table th{color:var(--muted);border-color:var(--line)}.onu-unified .data-table td{color:var(--text);border-color:var(--line)}.onu-wifi-enable{display:flex;align-items:center;gap:8px;margin-bottom:10px;color:#475569;font-size:14px}.onu-catv-status{margin:0;color:var(--muted);font-size:14px}.onu-unified .onu-action-bar{padding:16px 20px;margin:0;background:var(--panel-soft)}.onu-unified .secret-field{color:var(--text)}.onu-unified .icon-button{color:var(--primary)}.onu-status-panel .onu-info-row{align-items:center}.onu-status-text.online{color:#16a34a}.onu-status-text.offline{color:#64748b}.onu-status-text.los{color:#dc2626}.onu-status-text.dying_gasp{color:#d97706}.onu-status-time{color:var(--muted);font-weight:500;margin-left:4px}.onu-signal-chip{display:inline-flex;align-items:center;gap:6px;padding:4px 10px;border-radius:999px;font-size:13px;font-weight:700;white-space:nowrap;background:#f1f5f9;border:1px solid var(--line)}.onu-signal-values{display:inline;letter-spacing:-.01em}.onu-signal-chip.good{color:#16a34a}.onu-signal-chip.warn{color:#d97706}.onu-signal-chip.bad{color:#dc2626}.onu-signal-chip.muted{color:#64748b}.onu-link-value{border:none;background:none;color:var(--primary);font-weight:600;cursor:pointer;padding:0;text-align:left}.onu-link-value:hover{text-decoration:underline}.onu-wan-modal{width:min(560px,100%)}.cdata-wan-modal{width:min(600px,100%)}.cdata-wan-modal-lead{margin-top:4px;max-width:34rem}.cdata-config-tabs{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin:0 0 18px}.cdata-config-tab{display:flex;flex-direction:column;align-items:flex-start;gap:2px;padding:12px 14px;border:1px solid var(--line);border-radius:12px;background:var(--surface-muted);color:var(--muted);cursor:pointer;text-align:left;transition:border-color .15s,background .15s,box-shadow .15s}.cdata-config-tab:hover{border-color:var(--accent);background:var(--panel);color:var(--text)}.cdata-config-tab.active{border-color:var(--accent);background:var(--primary-soft);color:var(--primary-dark);box-shadow:0 0 0 1px var(--primary-soft)}.cdata-config-tab-label{font-size:14px;font-weight:700}.cdata-config-tab-hint{font-size:12px;color:var(--muted)}.cdata-config-tab.active .cdata-config-tab-hint{color:var(--primary)}.cdata-wan-form{display:flex;flex-direction:column;gap:12px}.cdata-wan-panel{border:1px solid var(--line);border-radius:14px;padding:14px 14px 12px;background:var(--panel)}.cdata-wan-section-title{margin:0 0 12px;font-size:11px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:#64748b}.cdata-field-columns{display:grid;gap:10px;align-items:stretch}.cdata-field-columns.cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.cdata-field-columns.cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.cdata-field-cell{display:flex;flex-direction:column;gap:6px;margin:0;padding:10px 12px;min-width:0;border:1px solid var(--line);border-radius:10px;background:var(--surface-muted);cursor:default}.cdata-field-cell.span-2{grid-column:span 2}.cdata-field-cell.span-3{grid-column:span 3}.cdata-field-label{font-size:11px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:#64748b}.cdata-field-cell input,.cdata-field-cell select{width:100%;box-sizing:border-box;padding:8px 10px;border:1px solid var(--line);border-radius:8px;font-size:14px;font-weight:500;color:var(--text);background:var(--bg)}.cdata-field-cell input:focus,.cdata-field-cell select:focus{outline:none;border-color:#3b82f6;box-shadow:0 0 0 3px rgba(59,130,246,.12)}.cdata-wan-preview{margin:0;max-height:140px;font-size:11px}.cdata-wan-loading{margin:12px 0 20px}.onu-charts-row--signal-only{grid-template-columns:1fr}@media (max-width:560px){.cdata-field-columns.cols-2,.cdata-field-columns.cols-3{grid-template-columns:1fr}.cdata-field-cell.span-2,.cdata-field-cell.span-3{grid-column:span 1}.cdata-config-tabs{grid-template-columns:1fr}}.wan-form-field{display:flex;flex-direction:column;gap:6px;margin-bottom:14px;font-size:14px;font-weight:600;color:var(--text)}.wan-radio-group{border:1px solid var(--line);border-radius:12px;padding:12px 14px;margin:0 0 14px}.wan-radio-group legend{font-size:13px;font-weight:700;color:var(--muted);padding:0 4px}.wan-radio-group label{display:flex;align-items:center;gap:8px;margin:6px 0;font-weight:600;color:var(--text)}.wan-sub-options{margin:8px 0 0 20px;display:grid;gap:6px;font-size:13px;color:var(--muted)}.wan-sub-options label{font-weight:600;color:var(--muted)}.disabled-option{opacity:.55}.wan-running-toggle{margin:8px 0 12px}.onu-running-config-preview{max-height:220px;overflow:auto;background:#0f172a;color:#e2e8f0;border-radius:10px;padding:12px;font-size:12px;line-height:1.5;white-space:pre-wrap;word-break:break-word;margin-bottom:12px}.onu-running-config-preview.full{max-height:60vh}.modal-card.wide{width:min(920px,96vw)}.onu-acs-modal{width:min(520px,100%)}.acs-tag-hint{margin:-6px 0 14px;font-size:12px;font-weight:500;color:#64748b;line-height:1.4}.acs-tag-hint code{font-size:11px;color:#475569}.onu-vlan-modal{width:min(480px,100%)}.vlan-multiselect{position:relative;margin-bottom:14px}.vlan-multiselect-trigger{width:100%;text-align:left;border:1px solid var(--line);border-radius:10px;padding:10px 12px;background:var(--panel);color:var(--text);font-weight:600;cursor:pointer}.vlan-multiselect-panel{position:absolute;z-index:5;left:0;right:0;margin-top:6px;border:1px solid var(--line);border-radius:12px;background:var(--panel);box-shadow:0 12px 32px rgba(15,23,42,.28);max-height:280px;display:flex;flex-direction:column}.vlan-search{display:flex;align-items:center;gap:8px;padding:10px 12px;border-bottom:1px solid var(--line)}.vlan-search input{border:none;outline:none;width:100%;font-size:14px;background:transparent;color:var(--text)}.vlan-option{display:flex;align-items:center;gap:8px;padding:8px 12px;font-size:14px;cursor:pointer}.vlan-option:hover{background:var(--primary-soft)}.vlan-option-list{overflow:auto;flex:1}.vlan-selected-preview{font-size:13px;color:var(--muted);margin-bottom:12px}.vlan-command-hint{margin-bottom:14px;font-size:13px;color:#64748b}.vlan-command-hint pre{margin-top:8px;background:#0f172a;color:#e2e8f0;padding:10px;border-radius:8px;font-size:11px;overflow:auto}.onu-refresh-badge{font-size:13px;padding:6px 10px;border-radius:8px;border:1px solid var(--line)}.onu-refresh-badge,.onu-refresh-badge.subtle{color:var(--muted);background:var(--surface-muted)}.onu-refresh-badge.subtle{font-size:12px}.onu-detail-columns{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;margin-top:16px}@media (max-width:900px){.onu-detail-columns{grid-template-columns:1fr}}.onu-detail-panel{border:1px solid var(--line);border-radius:14px;padding:16px;background:var(--panel)}.onu-detail-panel h3{margin:0 0 12px;font-size:15px;color:var(--text)}.onu-detail-list{margin:0}.onu-detail-row{display:grid;grid-template-columns:160px 1fr;gap:8px;padding:8px 0;border-bottom:1px solid var(--line)}.onu-detail-row:last-child{border-bottom:none}.onu-detail-row dt{margin:0;font-size:12px;color:var(--muted);font-weight:700;text-transform:uppercase}.onu-detail-row dd{margin:0;font-weight:600;word-break:break-word}.onu-status-inline{display:inline-flex;align-items:center;gap:6px}.onu-config-section{margin-top:20px;padding:16px;border:1px solid var(--line);border-radius:14px;background:var(--panel)}.onu-config-section.muted-section{background:var(--surface-muted)}.onu-config-section h3{margin:0 0 12px;font-size:15px}.onu-config-inline{display:flex;flex-wrap:wrap;align-items:center;gap:16px;color:var(--muted)}.link-button{border:none;background:none;color:var(--primary);font-weight:700;cursor:pointer;padding:0}.secret-field{display:inline-flex;align-items:center;gap:8px}.onu-charts-grid{margin-top:16px;display:grid;gap:16px}.onu-chart-range-bar{display:flex;flex-wrap:wrap;gap:8px;margin:12px 0 10px}.onu-chart-range-btn{border:1px solid var(--line);border-radius:999px;background:var(--panel);color:var(--muted);font-size:12px;font-weight:700;padding:6px 12px;cursor:pointer}.onu-chart-range-btn.active{border-color:var(--accent);background:var(--primary-soft);color:var(--primary-dark)}.onu-chart-card{border:1px solid var(--line);border-radius:14px;padding:16px;background:var(--panel)}.onu-chart-head{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px;margin-bottom:8px}.onu-chart-head h4{margin:0;font-size:15px}.onu-chart-legend{display:flex;flex-wrap:wrap;gap:12px;font-size:13px;color:#64748b}.onu-chart-legend span{display:inline-flex;align-items:center;gap:6px}.onu-chart-legend i{width:10px;height:10px;border-radius:999px;display:inline-block}.onu-chart-svg{width:100%;height:auto;display:block}.onu-chart-grid{stroke:#e2e8f0;stroke-width:1}.onu-chart-axis{fill:#94a3b8;font-size:11px}.onu-chart-empty{color:#94a3b8;margin:24px 0}.onu-chart-foot{margin:8px 0 0;font-size:12px;color:#94a3b8}.onu-action-bar{display:flex;flex-wrap:wrap;gap:10px;margin:20px 0}.danger-button,.warn-button{display:inline-flex;align-items:center;gap:8px;padding:10px 14px;border-radius:10px;border:1px solid transparent;font-weight:700;cursor:pointer}.warn-button{background:#fef9c3;color:#854d0e;border-color:#fde047}.warn-button:disabled{opacity:.5;cursor:not-allowed}.danger-button{background:#fee2e2;color:#b91c1c;border-color:#fecaca}.danger-button:disabled{opacity:.5;cursor:not-allowed}.readonly-block{margin:16px 0;padding:12px;border-radius:10px;background:#f8fafc}.hint-text{color:#64748b;font-size:14px;margin:8px 0 16px;overflow-wrap:anywhere}.badge-count{display:inline-flex;align-items:center;justify-content:center;min-width:28px;height:28px;padding:0 8px;border-radius:999px;background:#eff6ff;color:#1d4ed8;font-weight:700;font-size:13px}.inline-form-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:12px;align-items:end;margin-bottom:16px}.inline-form-grid label{display:flex;flex-direction:column;gap:6px;font-size:13px;font-weight:600;color:#475569}.inline-form-grid input[type=number],.inline-form-grid input[type=text]{padding:8px 10px;border:1px solid #dbe3ef;border-radius:8px}.detail-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:16px;margin-top:16px}.detail-grid .dashboard-card.wide{grid-column:1/-1}.detail-list{display:grid;gap:10px;margin:0}.detail-list div{display:grid;gap:4px}.detail-list dt{font-size:12px;color:#64748b;font-weight:700;text-transform:uppercase}.detail-list dd{margin:0;font-weight:600;word-break:break-word}.source-badge{display:inline-flex;align-items:center;padding:2px 8px;border-radius:999px;background:#eff6ff;color:#1d4ed8;font-size:11px;font-weight:700;margin-right:4px}.source-badge.zabbix{background:#fef3c7;color:#b45309}.pagination-row{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-top:16px}.ont-table code{font-size:12px;word-break:break-all}.onu-unified .ont-table-wrap{width:100%;max-width:100%;overflow-x:hidden}.ont-table{width:100%;table-layout:fixed}.ont-table td,.ont-table th{overflow:hidden;text-overflow:ellipsis}.ont-table .ont-col-status{width:88px}.ont-table .ont-col-zone{width:100px;max-width:100px}.ont-table .ont-col-name{width:auto;min-width:0}.ont-table .ont-col-wan{width:120px;max-width:120px}.ont-table .ont-col-clients{width:64px;text-align:center;font-weight:700}.ont-table .ont-col-rx{width:108px;white-space:nowrap}.ont-table .ont-col-rx .signal-pill{display:inline-flex;min-width:88px;justify-content:center;font-size:12px;padding:4px 8px}.ont-table .ont-col-managed{width:100px;text-align:right}.ont-wan-line,.ont-wan-sub{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ont-wan-sub{color:#64748b;font-size:12px}.ont-filter-buttons .ont-filter-chip{width:auto;min-width:72px;height:36px;padding:0 14px;font-size:13px;font-weight:600;color:#334155}.ont-toolbar-row{align-items:flex-end}.ont-list-page{width:100%;max-width:none}.ont-list-page .hint-text,.ont-list-page .ont-toolbar-row,.ont-list-page .pagination-row,.ont-list-page .topbar{width:100%}.ont-list-page .ont-toolbar-row{display:grid;grid-template-columns:minmax(220px,1fr) repeat(3,minmax(130px,160px));gap:12px;align-items:end}.ont-list-page .search-box{flex:1;min-width:0;width:100%;max-width:none}.ont-list-page .ont-table-wrap{width:100%;max-width:none;margin-top:4px}@media (max-width:1100px){.ont-list-page .ont-toolbar-row{grid-template-columns:1fr 1fr}.ont-list-page .search-box{grid-column:1/-1}}@media (max-width:640px){.ont-list-page .ont-toolbar-row{grid-template-columns:1fr}}.ont-managed-page{width:100%;max-width:none}.ont-managed-page .form-error,.ont-managed-page .hint-text,.ont-managed-page .topbar{width:100%}.ont-managed-page .ont-managed-page-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px;width:100%;padding:0;margin-top:4px}.ont-managed-page .ont-managed-page-grid .dashboard-card{margin:0;border:1px solid var(--line);border-radius:var(--radius-lg);padding:16px 20px;background:#fff;box-shadow:var(--shadow-xs)}.ont-managed-page .ont-managed-page-grid h4{margin:0 0 12px;font-size:.95rem}.ont-info-table{width:100%;border-collapse:collapse;table-layout:fixed;font-size:.875rem}.ont-info-table td,.ont-info-table th{padding:9px 12px;border-bottom:1px solid var(--line);text-align:left;vertical-align:middle}.ont-info-table th{width:42%;color:#64748b;font-size:.7rem;font-weight:700;text-transform:uppercase;letter-spacing:.04em;background:#f8fafc}.ont-info-table td{font-weight:600;color:var(--text);word-break:break-word}.ont-info-table tbody tr:last-child td,.ont-info-table tbody tr:last-child th{border-bottom:none}.ont-info-table-foot{margin:10px 0 0}.ont-managed-page .ont-location-card{grid-column:1/-1}.ont-managed-bottom-row{grid-column:1/-1;display:grid;grid-template-columns:minmax(240px,1fr) minmax(0,2.2fr) minmax(200px,.8fr);gap:16px;align-items:stretch}.ont-managed-bottom-row .dashboard-card{margin:0}.ont-managed-bottom-row .ont-clients-card,.ont-managed-bottom-row .ont-wifi-card{height:100%}.ont-managed-bottom-row .ont-maintenance-card{align-self:start;display:flex;flex-direction:column;align-items:flex-start;justify-content:flex-start}.ont-managed-bottom-row .ont-maintenance-card .hint-text{margin-bottom:12px}.ont-managed-bottom-row .ont-maintenance-card .danger-button{width:auto}.ont-clients-table{width:100%;border-collapse:collapse;font-size:.84rem}.ont-clients-table td,.ont-clients-table th{padding:9px 12px;border-bottom:1px solid var(--line);text-align:left;vertical-align:middle}.ont-clients-table th{font-size:.68rem;font-weight:700;text-transform:uppercase;letter-spacing:.04em;color:#64748b;background:#f8fafc}.ont-clients-table td{word-break:break-word}.ont-clients-table tbody tr:last-child td{border-bottom:none}.ont-clients-empty{text-align:center;color:#64748b;padding:18px 12px!important}.ont-managed-page .ont-location-picker-loading,.ont-managed-page .ont-location-picker-map{height:min(42vh,360px)}@media (max-width:1200px){.ont-managed-page .ont-managed-page-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.ont-managed-bottom-row{grid-template-columns:1fr}}@media (max-width:720px){.ont-managed-page .ont-managed-page-grid{grid-template-columns:1fr}}.ont-name-text{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ont-zone-filter{display:flex;flex-direction:column;gap:4px;min-width:150px}.ont-zone-filter span{font-size:12px;color:#64748b}.ont-zone-filter select,.ont-zone-input{padding:8px 10px;border:1px solid #dbe3ef;border-radius:8px;font-size:14px;background:#fff}.ont-zone-input{width:120px;min-width:100px}.ont-row-actions{display:flex;align-items:center;gap:4px}.ont-location-picker-shell{display:grid;gap:8px}.ont-location-picker-loading,.ont-location-picker-map{width:100%;height:260px;border:1px solid #dbe3ef;border-radius:12px;overflow:hidden}.ont-location-marker{background:transparent;border:none}.ont-location-marker-dot{display:block;width:18px;height:18px;border-radius:999px;background:#2563eb;border:2px solid #fff;box-shadow:0 0 0 2px rgba(37,99,235,.35)}.ont-col-tikor{width:88px}.ont-tikor-badge{display:inline-flex;align-items:center;gap:4px;font-size:12px;font-weight:600;padding:4px 8px;border-radius:999px}.ont-tikor-badge.ok{color:#166534;background:#dcfce7}.ont-tikor-badge.missing{color:#9a3412;background:#ffedd5}.ont-import-button{cursor:pointer;display:inline-flex;align-items:center;gap:8px}.ont-managed-button{display:inline-flex;align-items:center;gap:6px;padding:6px 10px;font-size:13px;white-space:nowrap}.ont-managed-modal{width:min(620px,calc(100vw - 40px))}.ont-managed-sections{display:flex;flex-direction:column;gap:18px}.ont-managed-section{padding-top:14px;border-top:1px solid var(--line)}.ont-managed-section:first-of-type{border-top:none;padding-top:0}.ont-managed-section h4{margin:0 0 10px;font-size:.95rem}.detail-list.compact{display:grid;gap:8px}.detail-list.compact div{display:grid;grid-template-columns:120px 1fr;gap:8px}.detail-list.compact dt{color:#64748b;font-size:13px}.detail-list.compact dd{margin:0;font-size:14px;word-break:break-word}.checkbox-inline{flex-direction:row!important;align-items:center;gap:8px!important;padding-bottom:8px}.loading-inline{display:inline-flex;align-items:center;gap:8px;color:#64748b;margin:16px 0}.icon-button.danger{color:#dc2626;border:none;background:transparent;cursor:pointer;padding:4px}.data-table.compact td,.data-table.compact th{padding:10px 12px;font-size:14px}.olt-title-link{color:inherit;text-decoration:none}.olt-title-link:hover{color:#1d4ed8}.section-actions{display:flex;align-items:center;gap:10px}.modal-overlay{position:fixed;inset:0;z-index:1000;display:flex;align-items:center;justify-content:center;padding:20px;overflow-x:hidden;overflow-y:auto;background:rgba(11,18,32,.72)}@keyframes overlay-enter{0%{opacity:0}to{opacity:1}}.modal-card.provision-modal{width:min(560px,calc(100vw - 40px));box-sizing:border-box}.modal-card.provision-modal .modal-meta dd{overflow-wrap:anywhere;word-break:break-word}.modal-card.provision-modal .hint-text{margin:0;line-height:1.45;overflow-wrap:anywhere}.modal-card.provision-modal .modal-actions{flex-wrap:wrap}.provision-section-title{margin:16px 0 8px;font-size:.95rem}.provision-wan-section{margin-top:4px;padding-top:12px;border-top:1px solid var(--line)}.provision-wan-toggle{margin-top:8px}.provision-wan-fieldset{margin:8px 0 0;padding:12px 14px 4px;border:1px solid var(--line,#e2e8f0);border-radius:10px;display:grid;gap:10px}.provision-wan-fieldset legend{padding:0 4px;font-size:.9rem;font-weight:600}.modal-card{width:min(520px,calc(100vw - 40px));max-height:min(90vh,calc(100vh - 40px));overflow-x:hidden;overflow-y:auto;box-sizing:border-box;border-radius:var(--radius-lg);border:1px solid var(--line);background:var(--panel);color:var(--text);padding:24px;box-shadow:var(--shadow-lg);flex-shrink:0;animation:modal-enter .25s ease-out}@keyframes modal-enter{0%{opacity:0;transform:translateY(12px) scale(.98)}to{opacity:1;transform:translateY(0) scale(1)}}.modal-header{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;margin-bottom:12px}.modal-header h3{margin:4px 0 0}.modal-meta{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin:0 0 16px;padding:12px;border-radius:12px;background:var(--surface-muted)}.modal-meta dt{font-size:12px;color:var(--muted)}.modal-meta dd{margin:4px 0 0;font-weight:700;font-size:14px}.modal-form{display:grid;gap:12px;min-width:0}.modal-form label{display:grid;gap:6px;min-width:0;font-size:13px;font-weight:600;color:var(--muted)}.modal-form input:not([type=checkbox]):not([type=radio]),.modal-form select{width:100%;max-width:100%;min-width:0;box-sizing:border-box;min-height:40px;border:1px solid var(--line);border-radius:10px;padding:0 12px;background:var(--bg);color:var(--text)}.modal-form input[type=checkbox],.modal-form input[type=radio]{width:16px;height:16px;min-height:0;margin:0;padding:0;flex-shrink:0;accent-color:var(--primary,#2563eb)}.modal-form .wan-radio-group label,.modal-form label.checkbox-inline{display:flex;flex-direction:row;align-items:center;gap:8px}.modal-form .wan-radio-group{margin-bottom:0}.modal-actions{display:flex;justify-content:flex-end;gap:10px;margin-top:8px}.onu-reboot-notes{margin:0 0 16px;padding-left:1.2rem;color:var(--muted-foreground,#64748b);font-size:.92rem;display:grid;gap:6px}.input-with-action{display:flex;gap:8px;align-items:stretch}.input-with-action input{flex:1}.uncfg-pick-list ul{list-style:none;margin:8px 0 0;padding:0;display:grid;gap:6px}.uncfg-pick-list li{padding:6px 10px;border:1px solid #dbe3ef;border-radius:8px;background:#f8fafc}.state-pill{display:inline-block;border-radius:999px;padding:2px 10px;font-size:12px;font-weight:700;text-transform:capitalize}.state-pill.enabled,.state-pill.up{background:#dcfce7;color:#166534}.state-pill.disabled,.state-pill.down{background:#fee2e2;color:#991b1b}.load-bar{width:100%;max-width:120px;height:8px;border-radius:999px;background:#e2e8f0;overflow:hidden;margin-bottom:4px}.load-bar i{display:block;height:100%;background:#3b82f6}.block-muted{display:block;color:#64748b;font-size:12px;margin-top:2px}.vlan-list-cell{max-width:280px;font-size:12px}.threshold-form{margin-top:20px;padding-top:16px;border-top:1px solid var(--line)}.threshold-form h4{margin:0 0 12px}.uplink-checklist{display:grid;gap:8px}.uplink-check-grid{display:flex;flex-wrap:wrap;gap:8px 16px}.span-full{grid-column:1/-1}.map-admin-stats{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px;margin-bottom:22px}@media (max-width:900px){.map-admin-stats{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (max-width:560px){.map-admin-stats{grid-template-columns:1fr}}.map-admin-stat-card{display:flex;align-items:flex-start;gap:14px;padding:16px 18px;border:1px solid var(--line);border-radius:var(--radius-md);background:var(--gradient-surface);transition:transform .2s ease,box-shadow .2s ease,border-color .2s ease}.map-admin-stat-card:hover{transform:translateY(-2px);box-shadow:var(--shadow-sm)}.map-admin-stat-card--blue{border-top:3px solid #2563eb}.map-admin-stat-card--violet{border-top:3px solid #7c3aed}.map-admin-stat-card--green{border-top:3px solid #16a34a}.map-admin-stat-card--orange{border-top:3px solid #ea580c}.map-admin-stat-card--slate{border-top:3px solid #64748b}.map-admin-stat-card--cyan{border-top:3px solid #0891b2}.map-admin-stat-icon{display:grid;place-items:center;width:42px;height:42px;border-radius:12px;flex-shrink:0;background:var(--primary-soft);color:var(--primary-dark)}.map-admin-stat-card--violet .map-admin-stat-icon{background:#ede9fe;color:#6d28d9}.map-admin-stat-card--green .map-admin-stat-icon{background:#dcfce7;color:#15803d}.map-admin-stat-card--orange .map-admin-stat-icon{background:#ffedd5;color:#c2410c}.map-admin-stat-card--slate .map-admin-stat-icon{background:#f1f5f9;color:#475569}.map-admin-stat-card--cyan .map-admin-stat-icon{background:#cffafe;color:#0e7490}.map-admin-stat-body{min-width:0;flex:1}.map-admin-stat{padding:16px 18px;border:1px solid var(--line);border-radius:var(--radius-md);background:var(--gradient-surface);transition:transform .2s ease,box-shadow .2s ease}.map-admin-stat:hover{transform:translateY(-2px);box-shadow:var(--shadow-sm)}.map-admin-stat-label{display:block;font-size:12px;color:var(--muted);margin-bottom:6px}.map-admin-stat-value{font-size:22px;line-height:1.1}.map-admin-stat-value small{font-size:14px;color:var(--muted);font-weight:500}.map-admin-stat-bar{height:6px;margin-top:10px;border-radius:999px;background:#e2e8f0;overflow:hidden}.map-admin-stat-bar i{display:block;height:100%;border-radius:inherit;background:linear-gradient(90deg,#3b82f6,#2563eb)}.map-admin-stat-card--orange .map-admin-stat-bar i{background:linear-gradient(90deg,#fb923c,#ea580c)}.map-admin-stat-pct{display:block;margin-top:6px;font-size:.72rem;color:var(--muted);font-weight:600}.map-admin-missing-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:16px}.map-admin-missing-block.is-complete{background:linear-gradient(180deg,#f0fdf4,#fff);border-color:#bbf7d0}.map-admin-missing-head{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:10px}.map-admin-missing-head h4{margin:0;font-size:14px}.map-admin-missing-badge{display:inline-flex;align-items:center;gap:4px;padding:3px 8px;border-radius:999px;font-size:.72rem;font-weight:700}.map-admin-missing-badge.ok{background:#dcfce7;color:#166534}.map-admin-missing-badge.warn{background:#ffedd5;color:#9a3412}.map-admin-missing-empty{margin:0}.map-admin-missing-list{margin:0;padding:0;list-style:none;max-height:200px;overflow-y:auto;font-size:13px}.map-admin-missing-list li+li{margin-top:8px;padding-top:8px;border-top:1px solid var(--line-soft)}.map-admin-missing-list a{display:grid;gap:2px;color:var(--primary-dark);text-decoration:none}.map-admin-missing-list a:hover strong{text-decoration:underline}.map-admin-missing-list strong{font-size:.8125rem}.map-admin-missing-list small{color:var(--muted);font-size:.75rem}.map-route-form-grid{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:14px}.map-route-field{display:grid;gap:6px;min-width:0}.map-route-field>span{font-size:.75rem;font-weight:700;letter-spacing:.03em;text-transform:uppercase;color:var(--muted)}.map-route-field:first-child,.map-route-field:nth-child(2){grid-column:span 3}.map-route-field--wide,.map-route-field:nth-child(3),.map-route-field:nth-child(4){grid-column:span 2}.map-route-field input,.map-route-field select{width:100%;min-width:0;min-height:44px;border:1px solid var(--line);border-radius:var(--radius-sm);padding:0 12px;background:#fff}.endpoint-select{text-overflow:ellipsis}.map-route-form-actions{display:flex;justify-content:flex-end;margin-top:4px}.endpoint-cell{display:grid;gap:2px;min-width:0}.endpoint-cell-group{font-size:.68rem;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:#94a3b8}.endpoint-cell strong{font-size:.8125rem;line-height:1.3}.endpoint-cell-id{font-size:.68rem;color:#94a3b8;word-break:break-all}.map-route-status-pill,.map-route-type-pill{display:inline-flex;padding:3px 8px;border-radius:999px;font-size:.72rem;font-weight:700;text-transform:capitalize;background:#eff6ff;color:#1d4ed8}.map-route-status-pill.online{background:#dcfce7;color:#166534}.map-route-status-pill.offline{background:#fee2e2;color:#991b1b}.map-route-status-pill.warning{background:#fef3c7;color:#92400e}@media (max-width:900px){.map-route-form-grid{grid-template-columns:1fr}.map-route-field--wide,.map-route-field:first-child,.map-route-field:nth-child(2),.map-route-field:nth-child(3),.map-route-field:nth-child(4){grid-column:span 1}}.map-admin-tabs{display:inline-flex;flex-wrap:wrap;gap:6px;margin-bottom:24px;padding:5px;border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--panel-soft)}.map-admin-tab{padding:10px 18px;border:none;border-radius:8px;background:transparent;color:var(--muted);font-weight:600;font-size:.8125rem;cursor:pointer;transition:background .15s ease,color .15s ease,box-shadow .15s ease}.map-admin-tab:hover{color:var(--text);background:hsla(0,0%,100%,.7)}.map-admin-tab.active{color:var(--primary-dark);background:#fff;box-shadow:var(--shadow-xs);font-weight:700}.map-admin-panel{display:grid;gap:20px}.map-admin-intro{margin:0}.map-admin-edit-card,.map-admin-form{padding:22px;border:1px solid var(--line);border-radius:var(--radius-md);background:linear-gradient(180deg,#fafcff,#f8fafc);box-shadow:var(--shadow-xs)}.map-admin-edit-card h4{margin:0 0 14px}.map-admin-edit-actions{display:flex;gap:10px;justify-content:flex-end;margin-top:14px}.map-admin-table{margin-top:4px}.map-admin-error{margin-bottom:12px}.map-admin-missing-block{padding:16px;border:1px solid var(--line);border-radius:var(--radius-md);background:#fff}.data-table{width:100%;border-collapse:collapse;font-size:.8125rem}.data-table th{padding:12px 14px;text-align:left;font-size:.72rem;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:var(--muted);background:var(--panel-soft);border-bottom:1px solid var(--line)}.data-table td{padding:12px 14px;border-bottom:1px solid var(--line-soft);color:var(--text);vertical-align:middle}.data-table tbody tr{transition:background .12s ease}.data-table tbody tr:hover{background:#f8fbff}.data-table tbody tr:last-child td{border-bottom:none}.table-wrap{overflow:auto;border:1px solid var(--line);border-radius:var(--radius-md);background:var(--surface);box-shadow:var(--shadow-xs)}.table-actions{display:flex;gap:4px;justify-content:flex-end}.map-admin-topbar span{display:block;margin-top:4px;color:var(--muted);font-size:14px}.topbar span{color:var(--muted);font-size:.875rem}.search-box{box-shadow:var(--shadow-xs);transition:border-color .15s ease,box-shadow .15s ease}.search-box:focus-within{border-color:var(--primary);box-shadow:none}.map-shell{box-shadow:none}.map-legend.map-legend--modern{backdrop-filter:none}.map-legend-panel .map-legend.map-legend--modern{position:static;left:auto;right:auto;bottom:auto;z-index:auto;display:flex;flex-direction:column;align-items:stretch;gap:6px;width:min(168px,46vw);max-width:none;padding:8px 10px 10px;border:1px solid rgba(148,163,184,.28);border-radius:10px;background:rgba(15,23,42,.78);box-shadow:0 6px 18px rgba(15,23,42,.28);justify-content:flex-start;pointer-events:auto}.map-legend-panel{position:absolute;left:10px;bottom:10px;z-index:500;pointer-events:none}.map-legend-panel>*{pointer-events:auto}.map-legend-header{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:2px}.map-legend-header strong{color:#f8fafc;font-size:.7rem;font-weight:800;letter-spacing:.04em;text-transform:uppercase}.map-legend-toggle{display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;border:1px solid rgba(148,163,184,.35);border-radius:6px;background:hsla(0,0%,100%,.06);color:#e2e8f0;cursor:pointer}.map-legend-toggle:hover{background:hsla(0,0%,100%,.12)}.map-legend-section{display:flex;flex-direction:column;gap:4px}.map-legend-section+.map-legend-section{margin-top:4px;padding-top:6px;border-top:1px solid rgba(148,163,184,.2)}.map-legend-section-title{color:#94a3b8;font-size:.58rem;font-weight:700;letter-spacing:.06em;text-transform:uppercase}.map-legend-pin{display:inline-grid;place-items:center;width:20px;height:20px;flex-shrink:0;border:1px solid hsla(0,0%,100%,.85);border-radius:8px;color:#fff;box-shadow:0 2px 6px rgba(15,23,42,.25)}.map-legend-pin svg{width:12px;height:12px}.map-legend-pin--olt{background:linear-gradient(145deg,#fdba74,#ea580c 55%,#c2410c);border-radius:7px}.map-legend-pin--odp{background:linear-gradient(145deg,#fde047,#eab308 55%,#ca8a04);border-radius:8px}.map-legend-pin--odc{background:linear-gradient(145deg,#e9d5ff,#a855f7 55%,#7e22ce);border-radius:8px}.map-legend-pin--client{background:linear-gradient(145deg,#5eead4,#14b8a6 55%,#0f766e);border-radius:999px}.map-legend-pin--mikrotik{background:linear-gradient(145deg,#93c5fd,#2563eb 55%,#1d4ed8)}.map-legend-pin--switch{background:linear-gradient(145deg,#a5b4fc,#6366f1 55%,#4f46e5)}.map-legend-collapsed{display:inline-flex;align-items:center;gap:6px;padding:7px 10px;border:1px solid var(--map-hud-border);border-radius:10px;background:var(--map-hud-bg);color:#f1f5f9;font-size:.68rem;font-weight:700;cursor:pointer}.map-legend-collapsed:hover{background:rgba(30,41,59,.9)}.map-legend-panel .map-legend.map-legend--modern .map-legend-item{display:inline-flex;align-items:center;gap:6px;color:#f1f5f9;font-size:.68rem;font-weight:600;letter-spacing:.01em}.toolbar-btn:hover{background:var(--primary-soft);border-color:var(--accent);color:var(--primary-dark)}.hint-text{color:var(--muted);font-size:.875rem;line-height:1.5}.form-error{padding:10px 14px;border-radius:var(--radius-sm);background:#fef2f2;color:#991b1b;font-weight:600;font-size:.8125rem;border:1px solid #fecaca}.map-route-editor-shell{display:grid;gap:10px;margin-top:14px}.map-route-editor-empty{padding:16px;border:1px dashed var(--line);border-radius:var(--radius-md);background:var(--panel-soft)}.map-route-editor-toolbar{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:10px}.map-route-editor-toolbar .hint-text{margin:0;flex:1 1 220px}.map-route-editor-actions{display:flex;gap:8px}.map-route-editor-map{width:100%;height:320px;border:1px solid var(--line);border-radius:var(--radius-md);overflow:hidden}.map-route-editor-meta{display:flex;flex-wrap:wrap;gap:12px 18px;font-size:.8125rem;color:var(--muted);font-weight:600}.map-route-editor-tip{color:#94a3b8;font-weight:500}.map-route-endpoint-icon,.map-route-waypoint-icon{background:transparent;border:none}.map-route-waypoint-icon span{display:grid;place-items:center;width:22px;height:22px;border-radius:999px;background:#f97316;color:#fff;font-size:.68rem;font-weight:800;border:2px solid #fff;box-shadow:0 2px 8px rgba(249,115,22,.45)}.map-route-endpoint-icon span{display:grid;place-items:center;width:26px;height:26px;border-radius:999px;color:#fff;font-size:.72rem;font-weight:800;border:3px solid #fff;box-shadow:0 2px 8px rgba(15,23,42,.25)}.map-route-endpoint-icon--source span{background:#16a34a}.map-route-endpoint-icon--target span{background:#2563eb}.content-panel--planner{display:grid;grid-template-columns:minmax(300px,360px) minmax(0,1fr);gap:0;height:calc(100vh - 64px);padding:0;overflow:hidden}.planner-sidebar{display:flex;flex-direction:column;gap:12px;padding:16px;border-right:1px solid var(--line);background:var(--panel);overflow:auto}.planner-sidebar-header{display:grid;gap:10px}.planner-sidebar-header h2{margin:0;font-size:1.2rem}.planner-sidebar-header span{color:var(--muted);font-size:.8rem;line-height:1.45}.planner-sidebar-links{display:flex;gap:8px}.planner-tool-tabs{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:6px}.planner-tool-tabs button{display:inline-flex;flex-direction:column;align-items:center;gap:4px;min-height:58px;padding:8px 6px;border:1px solid var(--line);border-radius:12px;background:#fff;color:#64748b;font-size:.68rem;font-weight:700;cursor:pointer}.planner-tool-tabs button.active{border-color:#93c5fd;background:linear-gradient(180deg,#eff6ff,#dbeafe);color:#1d4ed8;box-shadow:0 4px 14px rgba(37,99,235,.12)}.planner-panel{display:grid;gap:10px;padding:12px;border:1px solid var(--line);border-radius:14px;background:var(--panel-soft)}.planner-panel h3{margin:0;font-size:.92rem}.planner-field{display:grid;gap:4px}.planner-field>span{color:#64748b;font-size:.68rem;font-weight:700;letter-spacing:.04em;text-transform:uppercase}.planner-field-input{width:100%;min-height:38px;padding:0 10px;border:1px solid var(--line);border-radius:10px;background:#fff;color:var(--text);font:inherit;font-size:.82rem}.planner-inline-stats{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:8px 10px;border-radius:10px;background:#fff;border:1px solid var(--line)}.planner-inline-stats span{color:#64748b;font-size:.75rem;font-weight:600}.planner-inline-stats strong{color:#0f172a;font-size:.95rem;font-weight:800}.planner-panel-actions{display:flex;flex-wrap:wrap;gap:8px}.planner-summary-list{display:grid;gap:6px;margin:0;padding:0;list-style:none}.planner-summary-list li{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:7px 9px;border-radius:8px;background:#fff;border:1px solid var(--line)}.planner-summary-list span{color:#64748b;font-size:.75rem;font-weight:600}.planner-summary-list strong{font-size:.82rem}.planner-alert{margin:0;padding:8px 10px;border-radius:10px;font-size:.78rem;font-weight:600}.planner-alert--error{background:#fef2f2;color:#b91c1c;border:1px solid #fecaca}.planner-alert--ok{background:#ecfdf5;color:#047857;border:1px solid #a7f3d0}.planner-map-wrap{position:relative;display:flex;flex-direction:column;min-width:0;min-height:0;background:#e2e8f0}.planner-map-toolbar{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:10px 12px;border-bottom:1px solid var(--line);background:hsla(0,0%,100%,.92)}.planner-map-toolbar-label{display:inline-flex;align-items:center;gap:6px;color:#334155;font-size:.8rem;font-weight:700}.planner-layer-switch{position:static;box-shadow:none}.planner-leaflet-map,.planner-map-loading{flex:1;width:100%;min-height:0}.planner-map-loading{display:grid;place-items:center;color:var(--muted);font-weight:600}.planner-map-cursor{cursor:crosshair!important}.planner-waypoint-icon span{display:grid;place-items:center;width:22px;background:#2563eb;color:#fff;font-size:.68rem;box-shadow:0 4px 12px rgba(37,99,235,.35)}.planner-odp-draft-icon span,.planner-waypoint-icon span{height:22px;border:2px solid #fff;border-radius:999px;font-weight:800}.planner-odp-draft-icon span{display:inline-flex;align-items:center;justify-content:center;min-width:34px;padding:0 8px;background:linear-gradient(135deg,#fde047,#eab308);color:#713f12;font-size:.62rem;box-shadow:0 4px 12px rgba(234,179,8,.35)}.planner-tool-tabs--5{grid-template-columns:repeat(5,minmax(0,1fr))}.planner-tool-tabs--5 button{min-height:54px;font-size:.62rem}.planner-budget-total{display:grid;gap:4px;padding:12px;border-radius:12px;background:linear-gradient(135deg,#eff6ff,#dbeafe);border:1px solid #bfdbfe}.planner-budget-total span{color:#1e40af;font-size:.72rem;font-weight:700;text-transform:uppercase;letter-spacing:.04em}.planner-budget-total strong{color:#0f172a;font-size:1.15rem;font-weight:800}.planner-check{display:inline-flex;align-items:center;gap:8px;color:#475569;font-size:.78rem;font-weight:600}.planner-list-block h4{margin:0;font-size:.82rem}.planner-item-list{display:grid;gap:6px;margin:0;padding:0;list-style:none}.planner-item-list li{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:6px;align-items:center;border:1px solid var(--line);border-radius:10px;background:#fff;overflow:hidden}.planner-item-list li.is-active{border-color:#93c5fd;box-shadow:0 0 0 1px #dbeafe}.planner-item-list li button:first-child{display:grid;gap:2px;padding:8px 10px;border:0;background:transparent;text-align:left;cursor:pointer}.planner-item-list li strong{font-size:.8rem}.planner-item-list li span{color:#64748b;font-size:.72rem}.planner-item-delete{display:grid;place-items:center;width:34px;height:34px;margin-right:4px;border:0;border-radius:8px;background:#f8fafc;color:#64748b;cursor:pointer}.planner-item-delete:hover{background:#fef2f2;color:#b91c1c}.planner-item-list--compact li{grid-template-columns:1fr}.planner-point-type-tabs{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:6px}.planner-point-type-tabs button{min-height:36px;border:1px solid var(--line);border-radius:10px;background:#fff;color:#64748b;font-size:.72rem;font-weight:700;cursor:pointer}.planner-point-type-tabs button.active{border-color:#93c5fd;background:#eff6ff;color:#1d4ed8}.planner-point-reset-row{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:6px}.planner-point-reset-row button{justify-content:center;font-size:.68rem}.planner-rab-table{display:grid;gap:4px;padding:8px;border:1px solid var(--line);border-radius:10px;background:#fff}.planner-rab-table-head,.planner-rab-table-row{display:grid;grid-template-columns:minmax(0,1.4fr) .7fr 1fr;gap:8px;align-items:center}.planner-rab-table-head{padding-bottom:6px;border-bottom:1px solid var(--line);color:#64748b;font-size:.68rem;font-weight:700;text-transform:uppercase}.planner-rab-table-row{font-size:.76rem}.planner-rab-table-row strong{text-align:right;font-size:.76rem}.planner-infra-div-icon{background:transparent!important;border:0!important}.planner-infra-div-icon--selected{z-index:1200!important}.planner-map-pin,.planner-map-pin-visual{position:relative;width:40px}.planner-map-pin-visual{height:48px}.planner-map-pin svg{display:block;width:40px;height:48px;filter:drop-shadow(0 5px 12px rgba(15,23,42,.28))}.planner-map-pin-type{position:absolute;top:10px;left:50%;z-index:2;transform:translateX(-50%);padding:2px 5px;border:1.5px solid #fff;border-radius:999px;color:#fff;font-size:.48rem;font-weight:800;line-height:1;letter-spacing:.02em;white-space:nowrap;box-shadow:0 2px 8px rgba(15,23,42,.25);pointer-events:none}.planner-map-pin--odc .planner-map-pin-type{background:#5b21b6}.planner-map-pin--odp .planner-map-pin-type{background:#b91c1c}.planner-map-pin--selekon .planner-map-pin-type{background:#0369a1}.planner-map-pin.is-selected .planner-map-pin-visual svg{filter:drop-shadow(0 0 0 3px rgba(37,99,235,.35)) drop-shadow(0 6px 16px rgba(37,99,235,.35));transform:scale(1.05)}.planner-map-pin.is-selected .planner-map-pin-type{box-shadow:0 0 0 2px rgba(37,99,235,.45),0 4px 12px rgba(15,23,42,.22)}.planner-draft-bar{display:grid;gap:8px}.planner-field--grow{min-width:0}.planner-draft-actions{display:flex;flex-wrap:wrap;gap:6px}.planner-draft-hint{display:inline-flex;align-items:center;gap:6px}.planner-ppn-options{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:6px}.planner-ppn-options button{min-height:34px;border:1px solid var(--line);border-radius:10px;background:#fff;color:#64748b;font-size:.68rem;font-weight:700;cursor:pointer}.planner-ppn-options button.active{border-color:#93c5fd;background:linear-gradient(180deg,#eff6ff,#dbeafe);color:#1d4ed8}.planner-budget-breakdown{display:grid;gap:6px;padding:10px;border:1px solid var(--line);border-radius:10px;background:#fff}.planner-budget-breakdown>div{display:flex;align-items:center;justify-content:space-between;gap:10px}.planner-budget-breakdown span{color:#64748b;font-size:.75rem;font-weight:600}.planner-budget-breakdown strong{font-size:.82rem}.planner-pole-mode{display:grid;grid-template-columns:1fr 1fr;gap:6px}.planner-pole-mode button{min-height:36px;border:1px solid var(--line);border-radius:10px;background:#fff;color:#64748b;font-size:.74rem;font-weight:700;cursor:pointer}.planner-pole-mode button.active{border-color:#86efac;background:linear-gradient(180deg,#ecfdf5,#d1fae5);color:#047857}.planner-route-edit{display:grid;gap:8px;padding:10px;border:1px dashed #bfdbfe;border-radius:10px;background:#f8fafc}.planner-route-edit strong{font-size:.8rem}.planner-list-block-head{display:flex;align-items:center;justify-content:space-between;gap:8px}.planner-additional-list{display:grid;gap:10px;margin:0;padding:0;list-style:none}.planner-additional-list li{display:grid;gap:6px;padding:10px;border:1px solid var(--line);border-radius:10px;background:#fff}.planner-additional-row{display:grid;grid-template-columns:minmax(0,1fr) 72px auto;gap:6px;align-items:end}.planner-additional-row label{display:grid;gap:3px}.planner-additional-row label>span{color:#64748b;font-size:.62rem;font-weight:700;text-transform:uppercase}.planner-additional-subtotal{font-size:.78rem;text-align:right;color:#0f172a}.planner-pole-icon span{display:block;width:8px;height:8px;border:1.5px solid #fff;border-radius:999px;background:#64748b;box-shadow:0 2px 6px rgba(15,23,42,.25)}@media (max-width:1100px){.content-panel--planner{grid-template-columns:1fr;grid-template-rows:auto minmax(420px,1fr);height:auto;min-height:calc(100vh - 64px)}.planner-sidebar{border-right:0;border-bottom:1px solid var(--line);max-height:46vh}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.customization-page{display:flex;flex-direction:column;gap:20px;max-width:920px}.customization-grid{display:grid;grid-template-columns:1fr;gap:16px}@media (min-width:768px){.customization-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.customization-card--wide{grid-column:1/-1}}.customization-card{display:flex;flex-direction:column;gap:18px;padding:20px}.customization-card-head{display:flex;align-items:flex-start;gap:14px;color:var(--primary)}.customization-card-head-icon{display:grid;place-items:center;width:40px;height:40px;flex-shrink:0;border-radius:12px;background:var(--primary-soft);border:1px solid var(--line)}.customization-card-head h2{margin:0 0 4px;font-size:1.05rem;color:var(--text)}.customization-preview{display:flex;flex-direction:column;gap:10px;padding:14px;border:1px dashed var(--line);border-radius:12px;background:var(--surface-muted)}.customization-preview-label{margin:0;font-size:.72rem;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--muted)}.customization-preview-bar{display:flex;align-items:center;gap:10px;padding:10px 14px;border:1px solid var(--line);border-radius:10px;background:var(--surface)}.customization-preview-menu{display:grid;place-items:center;width:32px;height:32px;border-radius:8px;background:var(--panel-soft);color:var(--muted);font-size:1rem;line-height:1}.customization-preview-bar img{width:22px;height:22px;border-radius:4px}.customization-preview-bar strong{font-size:.95rem;color:var(--text)}.customization-preview-tab{margin:0;font-size:.82rem;color:var(--muted)}.customization-theme-row{display:flex;flex-wrap:wrap;gap:10px}.customization-theme-btn{display:inline-flex;align-items:center;gap:8px;min-height:42px;padding:0 16px;border:1px solid var(--line);border-radius:999px;background:var(--surface);color:var(--text);font-weight:600;font-size:.875rem;cursor:pointer;transition:background .15s ease,border-color .15s ease,color .15s ease}.customization-theme-btn:hover:not(:disabled){border-color:#93c5fd;background:var(--surface-hover)}.customization-theme-btn.active{background:var(--primary-soft);border-color:#3b82f6;color:var(--primary-dark)}.customization-theme-btn:disabled{opacity:.6;cursor:not-allowed}.customization-form{display:flex;flex-direction:column;gap:12px}.customization-form-actions{display:flex;align-items:center;gap:10px;margin-top:4px}.customization-favicon-row{display:flex;align-items:center;gap:20px;flex-wrap:wrap;padding:14px;border:1px solid var(--line);border-radius:12px;background:var(--surface-muted)}.customization-favicon-preview{width:64px;height:64px;border-radius:16px;border:1px solid var(--line);background:var(--surface);display:grid;place-items:center;overflow:hidden;flex-shrink:0}.customization-favicon-preview img{width:32px;height:32px;-o-object-fit:contain;object-fit:contain}.customization-favicon-actions{display:flex;flex-wrap:wrap;gap:8px}.customization-favicon-inline{width:16px;height:16px;vertical-align:middle;margin-left:4px}.customization-favicon-hint{margin:0}.customization-footer{display:flex;justify-content:flex-start;border-top:1px solid var(--line);margin-top:4px;padding-top:16px}.page-header h1{margin:0 0 6px;font-size:1.5rem;letter-spacing:-.02em}.page-lead{margin:0;color:var(--muted);max-width:42rem;line-height:1.55}.page-lead code{font-size:.85em;padding:2px 6px;border-radius:6px;background:var(--surface-muted);border:1px solid var(--line)}html[data-theme=dark]{color-scheme:dark;--bg:#0b1220;--bg-accent:#0e1628;--panel:#151c2c;--panel-soft:#121926;--text:#e8eef7;--muted:#8b9bb4;--line:#243044;--line-soft:#1a2333;--primary:#22d3ee;--primary-dark:#67e8f9;--primary-soft:rgba(34,211,238,.12);--accent:#22d3ee;--accent-violet:#67e8f9;--gradient-brand:#121926;--gradient-primary:#0891b2;--gradient-surface:#151c2c;--surface:#151c2c;--surface-raised:#1a2333;--surface-muted:#121926;--surface-hover:#1c2738;--shadow-xs:none;--shadow-sm:none;--shadow-md:none;--shadow-lg:none}html[data-theme=dark] body{background:var(--bg)}html[data-theme=dark] .app-header{background:var(--panel);border-color:var(--line)}html[data-theme=dark] .app-header-menu,html[data-theme=dark] .app-header-notif{color:#cbd5e1}html[data-theme=dark] .app-header-brand{color:var(--text)}html[data-theme=dark] .app-header-badge{box-shadow:0 0 0 2px var(--panel)}html[data-theme=dark] .sidebar{background:var(--panel);border-color:var(--line)}html[data-theme=dark] .content-panel,html[data-theme=dark] .loading-card{background:var(--panel);border-color:var(--line);color:var(--text)}html[data-theme=dark] .nav-item{color:#cbd5e1}html[data-theme=dark] .nav-item:hover{background:var(--primary-soft);color:var(--text)}html[data-theme=dark] .nav-item.active{background:var(--primary-soft);color:var(--primary)}html[data-theme=dark] .nav-group-label{color:#64748b}html[data-theme=dark] input,html[data-theme=dark] select,html[data-theme=dark] textarea{background:var(--bg);border-color:var(--line);color:var(--text)}html[data-theme=dark] .ghost-button,html[data-theme=dark] .toolbar-btn{background:var(--surface-muted);border-color:var(--line);color:var(--text)}html[data-theme=dark] .toolbar-btn:hover:not(:disabled){background:var(--primary-soft);border-color:var(--accent);color:var(--primary)}html[data-theme=dark] .toolbar-btn.live{background:rgba(34,197,94,.14);border-color:rgba(34,197,94,.28);color:#86efac}html[data-theme=dark] .app-header-account-btn{background:var(--surface-muted);color:var(--text)}html[data-theme=dark] .app-header-account-menu{background:var(--panel)}html[data-theme=dark] .app-header-account-item{color:var(--text)}html[data-theme=dark] .icon-button,html[data-theme=dark] .sidebar-menu-toggle{background:var(--surface-muted);color:var(--text)}html[data-theme=dark] .data-table th{background:#172033;color:#94a3b8}html[data-theme=dark] .data-table td{border-color:var(--line)}html[data-theme=dark] .cdata-field-cell{background:#172033;border-color:var(--line)}html[data-theme=dark] .cdata-field-cell input,html[data-theme=dark] .cdata-field-cell select{background:#0f172a}html[data-theme=dark] .onu-running-config-preview{background:#020617}html[data-theme=dark] .tab-switch.light a.active,html[data-theme=dark] .tab-switch.tech-switch button.active{color:var(--primary)}html[data-theme=dark] .dash-pct-badge{background:rgba(148,163,184,.08);color:var(--muted)}html[data-theme=dark] .dash-summary-card.blue .dash-summary-icon{background:rgba(34,211,238,.12);color:#22d3ee}html[data-theme=dark] .dash-summary-card.green .dash-summary-icon{background:rgba(34,197,94,.14);color:#4ade80}html[data-theme=dark] .dash-summary-card.orange .dash-summary-icon{background:rgba(249,115,22,.14);color:#fb923c}html[data-theme=dark] .dash-summary-card.red .dash-summary-icon{background:hsla(0,91%,71%,.14);color:#f87171}html[data-theme=dark] .dash-summary-card.slate .dash-summary-icon{background:rgba(148,163,184,.1);color:#94a3b8}html[data-theme=dark] .dash-olt-thumb{background:rgba(34,211,238,.12);color:#22d3ee}html[data-theme=dark] .dash-temp-badge{background:rgba(245,158,11,.14);border-color:rgba(245,158,11,.28);color:#fcd34d}html[data-theme=dark] .dash-stat-chip.green{background:rgba(34,197,94,.12);border-color:rgba(34,197,94,.28)}html[data-theme=dark] .dash-stat-chip.red{background:hsla(0,91%,71%,.12);border-color:hsla(0,91%,71%,.28)}html[data-theme=dark] .dash-stat-chip.orange{background:rgba(249,115,22,.12);border-color:rgba(249,115,22,.28)}html[data-theme=dark] .dash-stat-chip.green strong{color:#86efac}html[data-theme=dark] .dash-stat-chip.red strong{color:#fca5a5}html[data-theme=dark] .dash-stat-chip.orange strong{color:#fdba74}html[data-theme=dark] .dashboard-smart .status-pill.online{background:rgba(34,197,94,.18);color:#86efac}html[data-theme=dark] .dashboard-smart .status-pill.los,html[data-theme=dark] .dashboard-smart .status-pill.offline{background:hsla(0,91%,71%,.18);color:#fca5a5}html[data-theme=dark] .link-button{color:var(--primary)}html[data-theme=dark] .search-box,html[data-theme=dark] .search-box input{background:var(--surface);color:var(--text)}html[data-theme=dark] .table-wrap,html[data-theme=dark] .table-wrap.light{background:var(--surface)}html[data-theme=dark] .onu-table.light th{background:var(--surface-muted);color:var(--muted)}html[data-theme=dark] .onu-table.light td{color:var(--text);border-color:var(--line)}html[data-theme=dark] .onu-table.light tbody tr:hover{background:var(--surface-hover)}html[data-theme=dark] .status-icon-chip{background:rgba(232,238,247,.04);border-color:var(--line)}html[data-theme=dark] .status-icon-chip--online{background:rgba(34,197,94,.14);border-color:rgba(34,197,94,.32)}html[data-theme=dark] .status-icon-chip--offline{background:rgba(148,163,184,.08);border-color:rgba(148,163,184,.2)}html[data-theme=dark] .status-icon-chip--los{background:hsla(0,91%,71%,.14);border-color:hsla(0,91%,71%,.32)}html[data-theme=dark] .status-icon-chip--dying_gasp{background:rgba(251,146,60,.14);border-color:rgba(251,146,60,.32)}html[data-theme=dark] .signal-pill.good{background:rgba(34,197,94,.14);border-color:rgba(34,197,94,.28);color:#86efac}html[data-theme=dark] .signal-pill.warn{background:rgba(245,158,11,.14);border-color:rgba(245,158,11,.28);color:#fcd34d}html[data-theme=dark] .signal-pill.bad{background:hsla(0,91%,71%,.14);border-color:hsla(0,91%,71%,.28);color:#fca5a5}html[data-theme=dark] .signal-pill.muted{color:#94a3b8}html[data-theme=dark] .onu-signal-chip,html[data-theme=dark] .signal-pill.muted{background:rgba(148,163,184,.08);border-color:var(--line)}html[data-theme=dark] .onu-signal-chip.good{color:#86efac}html[data-theme=dark] .onu-signal-chip.warn{color:#fcd34d}html[data-theme=dark] .onu-signal-chip.bad{color:#fca5a5}html[data-theme=dark] .onu-signal-chip.muted{color:#94a3b8}html[data-theme=dark] .customization-preview-bar{background:var(--surface-muted);border-color:var(--line)}html[data-theme=dark] .customization-theme-btn.active{background:var(--primary-soft);border-color:var(--accent);color:var(--primary)}.login-page-loading{min-height:100vh;display:grid;place-items:center;color:var(--muted)}.login-page{position:relative;min-height:100vh;overflow:hidden;background:var(--bg);color:var(--text)}.login-page--dark{background:#0b1220}.login-page-backdrop{position:absolute;inset:0;pointer-events:none;overflow:hidden}.login-page-mesh{position:absolute;inset:-20%;background:radial-gradient(circle at 20% 20%,rgba(59,130,246,.22),transparent 34%),radial-gradient(circle at 80% 10%,rgba(99,102,241,.18),transparent 30%),radial-gradient(circle at 70% 80%,rgba(14,165,233,.16),transparent 32%);animation:loginMeshDrift 18s ease-in-out infinite alternate}.login-page-orb{position:absolute;border-radius:999px;filter:blur(48px);opacity:.65;animation:loginOrbFloat 12s ease-in-out infinite alternate}.login-page-orb--1{width:360px;height:360px;top:-120px;left:-80px;background:#3b82f6}.login-page-orb--2{width:300px;height:300px;right:8%;bottom:-80px;background:#6366f1;animation-delay:-4s}.login-page-orb--3{width:220px;height:220px;top:42%;left:38%;background:#0ea5e9;opacity:.35;animation-delay:-7s}.login-page-grid{position:absolute;inset:0;background-image:linear-gradient(rgba(37,99,235,.06) 1px,transparent 0),linear-gradient(90deg,rgba(37,99,235,.06) 1px,transparent 0);background-size:40px 40px;-webkit-mask-image:radial-gradient(circle at 30% 30%,#000,transparent 78%);mask-image:radial-gradient(circle at 30% 30%,#000,transparent 78%)}.login-page-shell{position:relative;z-index:1;min-height:100vh;display:grid;place-items:center;padding:24px 20px}.login-page-shell--centered{grid-template-columns:1fr}.login-page-card{position:relative;width:min(100%,420px);padding:36px 32px 32px;border-radius:var(--radius-xl);background:var(--panel);border:1px solid var(--line)}.login-page-card-brand{display:grid;justify-items:center;text-align:center;margin-bottom:28px}.login-page-card-brand .login-page-logo-wrap{margin:0 auto 18px}.login-page-card-brand h1{margin:0 0 10px;font-size:clamp(1.5rem,4vw,1.85rem);line-height:1.15;letter-spacing:-.03em}.login-page-card-brand .login-page-subtitle{margin:0;font-size:.94rem}.login-page-logo-wrap{position:relative;width:-moz-fit-content;width:fit-content}.login-page-logo-ring{position:absolute;inset:-10px;border-radius:28px;background:linear-gradient(135deg,rgba(59,130,246,.35),rgba(99,102,241,.15));filter:blur(8px)}.login-page-logo{position:relative;width:72px;height:72px;border-radius:22px;box-shadow:0 16px 40px rgba(37,99,235,.22)}.login-page-eyebrow{margin:0 0 10px;font-size:.78rem;font-weight:800;letter-spacing:.14em;text-transform:uppercase;color:var(--primary)}.login-page-subtitle{margin:0;color:var(--muted);line-height:1.6;font-size:.94rem;max-width:36ch}.login-page--dark .login-page-card{background:#151c2c;border-color:#243044}.login-page-card-glow{position:absolute;top:-80px;right:-60px;width:180px;height:180px;border-radius:999px;background:radial-gradient(circle,rgba(59,130,246,.28),transparent 68%);pointer-events:none}.login-page-form{display:grid;gap:18px}.login-field{display:grid;gap:8px;font-size:.9rem;font-weight:700}.login-field-input{display:flex;align-items:center;gap:10px;padding:0 14px;min-height:52px;border:1px solid var(--line);border-radius:var(--radius-md);background:var(--bg);transition:border-color .15s ease}.login-page--dark .login-field-input{background:#0b1220}.login-field--focus .login-field-input{border-color:var(--primary)}.login-field-input input{flex:1;border:0;background:transparent;color:var(--text);outline:none;min-width:0;font-size:.96rem}.login-field-input svg{color:var(--muted);flex-shrink:0}.login-field-toggle{border:0;background:transparent;color:var(--muted);cursor:pointer;display:grid;place-items:center}.login-error{padding:12px 14px;border-radius:14px;background:#fef2f2;border:1px solid #fecaca;color:#b91c1c;font-size:.9rem}.login-submit{position:relative;width:100%;min-height:52px;margin-top:4px;border:0;border-radius:var(--radius-md);background:var(--gradient-primary);color:#fff;font-weight:700;font-size:.98rem;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;gap:8px}.login-submit:hover:not(:disabled){opacity:.92}.login-submit:disabled{opacity:.72;cursor:wait}.login-submit-shine{position:absolute;inset:0 auto 0 -40%;width:40%;background:linear-gradient(90deg,transparent,hsla(0,0%,100%,.28),transparent);transform:skewX(-18deg);animation:loginButtonShine 4.5s ease-in-out infinite}@keyframes loginMeshDrift{0%{transform:translateZ(0) scale(1)}to{transform:translate3d(2%,-2%,0) scale(1.04)}}@keyframes loginOrbFloat{0%{transform:translateZ(0)}to{transform:translate3d(0,-18px,0)}}@keyframes loginButtonShine{0%,75%{transform:translateX(0) skewX(-18deg);opacity:0}85%{opacity:1}to{transform:translateX(320%) skewX(-18deg);opacity:0}}.customization-preview--login{margin-top:8px}.customization-login-preview{display:grid;gap:8px;padding:16px;border-radius:16px;background:var(--surface-muted);border:1px solid var(--line)}.customization-login-preview img{width:40px;height:40px;border-radius:12px}.customization-login-preview p{margin:0;color:var(--muted);font-size:.9rem}.users-page-shell{display:grid;gap:22px;max-width:1120px}.users-hero{display:flex;align-items:flex-start;justify-content:space-between;gap:20px;padding:28px 30px;border-radius:24px;background:linear-gradient(135deg,rgba(37,99,235,.08),rgba(79,70,229,.04)),var(--surface);border:1px solid var(--line);box-shadow:0 18px 50px rgba(15,23,42,.05)}.users-hero h1{margin:0 0 8px;font-size:clamp(1.7rem,3vw,2.2rem);letter-spacing:-.03em}.users-hero-badges{display:flex;flex-wrap:wrap;gap:10px}.users-hero-badge{display:inline-flex;align-items:center;gap:8px;padding:10px 14px;border-radius:999px;background:linear-gradient(135deg,#2563eb,#4f46e5);color:#fff;font-size:.82rem;font-weight:700;white-space:nowrap}.users-hero-badge--soft{background:var(--surface-muted);color:var(--text);border:1px solid var(--line)}.users-page{display:grid;gap:18px}.users-stats{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}@media (min-width:900px){.users-stats{grid-template-columns:repeat(4,minmax(0,1fr))}}.users-stat-card{display:flex;align-items:center;gap:14px;padding:18px;border-radius:18px;background:var(--surface);border:1px solid var(--line);box-shadow:0 10px 30px rgba(15,23,42,.04)}.users-stat-card strong{display:block;font-size:1.5rem;line-height:1;margin-bottom:4px}.users-stat-card span{color:var(--muted);font-size:.86rem}.users-stat-icon{display:grid;place-items:center;width:42px;height:42px;border-radius:14px;flex-shrink:0}.users-stat-icon--blue{background:#dbeafe;color:#1d4ed8}.users-stat-icon--green{background:#dcfce7;color:#15803d}.users-stat-icon--purple{background:#ede9fe;color:#6d28d9}.users-stat-icon--amber{background:#fef3c7;color:#b45309}.users-page-toolbar{display:flex;align-items:center;justify-content:space-between;gap:12px}.users-page-toolbar h2{margin:0 0 4px;font-size:1.15rem}.users-add-btn{box-shadow:0 12px 28px rgba(37,99,235,.18)}.users-table-panel{padding:0;overflow:hidden;border-radius:22px}.users-empty,.users-loading{display:grid;justify-items:center;gap:10px;padding:48px 24px;text-align:center;color:var(--muted)}.users-empty strong{color:var(--text);font-size:1.05rem}.users-table-wrap{overflow-x:auto}.users-table{width:100%;border-collapse:collapse}.users-table td,.users-table th{padding:16px 18px;text-align:left;border-bottom:1px solid var(--line);vertical-align:top}.users-table th{font-size:.76rem;text-transform:uppercase;letter-spacing:.08em;color:var(--muted);background:var(--surface-muted)}.users-table tbody tr{transition:background .15s ease}.users-table tbody tr:hover{background:var(--surface-hover)}.users-person{display:flex;align-items:center;gap:12px}.users-person span{display:block;color:var(--muted);font-size:.86rem}.users-avatar{display:grid;place-items:center;width:42px;height:42px;border-radius:14px;font-size:.82rem;font-weight:800;color:#fff;flex-shrink:0}.users-avatar--admin{background:linear-gradient(135deg,#2563eb,#4f46e5)}.users-avatar--operator{background:linear-gradient(135deg,#059669,#10b981)}.users-avatar--viewer{background:linear-gradient(135deg,#d97706,#f59e0b)}.users-zone-cell{display:grid;gap:8px;color:var(--text);font-size:.92rem}.users-zone-cell>span{display:inline-flex;align-items:center;gap:6px}.users-zone-tags{display:flex;flex-wrap:wrap;gap:6px}.users-zone-tag{padding:4px 10px;border-radius:999px;background:var(--surface-muted);border:1px solid var(--line);font-size:.76rem;color:var(--muted)}.users-row-actions{display:flex;justify-content:flex-end;gap:8px}.users-action-btn{border-radius:12px;box-shadow:0 4px 14px rgba(15,23,42,.06)}.users-role{display:inline-flex;align-items:center;padding:6px 12px;border-radius:999px;font-size:.78rem;font-weight:800;text-transform:capitalize;background:var(--surface-muted);color:var(--muted)}.users-role--admin,.users-role--noc_pusat{background:#dbeafe;color:#1d4ed8}.users-role--helpdesk{background:#ede9fe;color:#6d28d9}.users-role--noc_cabang,.users-role--operator{background:#dcfce7;color:#15803d}.users-role--jointer,.users-role--teknisi,.users-role--viewer{background:#fef3c7;color:#b45309}.users-role--client{background:#f3f4f6;color:#374151}.users-status{display:inline-flex;align-items:center;gap:8px;color:var(--muted);font-size:.9rem}.users-status-dot{width:8px;height:8px;border-radius:999px;background:#94a3b8}.users-status--active{color:#15803d;font-weight:700}.users-status--active .users-status-dot{background:#22c55e;box-shadow:0 0 0 4px rgba(34,197,94,.18)}.users-modal-overlay{backdrop-filter:none}.users-modal{width:min(100%,640px);border-radius:24px}.users-modal-header{padding-bottom:0}.users-form{display:grid;gap:16px}.users-form-grid{display:grid;grid-template-columns:1fr;gap:0 14px}@media (min-width:640px){.users-form-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}.users-role-picker-label,.users-zone-picker-head>span{display:block;margin-bottom:8px;font-size:.9rem;font-weight:700}.users-role-options{display:grid;gap:10px}.users-role-option{display:grid;gap:4px;padding:14px 16px;text-align:left;border-radius:16px;border:1px solid var(--line);background:var(--surface);cursor:pointer;transition:border-color .15s ease,box-shadow .15s ease,transform .15s ease}.users-role-option strong{display:inline-flex;align-items:center;gap:8px;font-size:.95rem}.users-role-option span{color:var(--muted);font-size:.82rem;line-height:1.45}.users-role-option.active{border-color:#3b82f6;box-shadow:0 0 0 4px rgba(59,130,246,.12);transform:translateY(-1px)}.users-zone-picker{padding:16px;border-radius:18px;background:var(--surface-muted);border:1px solid var(--line)}.users-zone-chips{display:flex;flex-wrap:wrap;gap:8px}.users-zone-chip{display:inline-flex;align-items:center;gap:6px;padding:8px 12px;border-radius:999px;border:1px solid var(--line);background:var(--surface);color:var(--text);font-size:.82rem;cursor:pointer}.users-zone-chip.active{border-color:#3b82f6;background:#eff6ff;color:#1d4ed8}.users-zone-empty{margin:0;color:var(--muted);font-size:.86rem}.users-active-toggle{display:inline-flex;align-items:center;gap:10px;font-weight:600}.app-header-account-meta{display:grid;gap:4px;padding:10px 12px 12px;border-bottom:1px solid var(--line)}.app-header-account-meta strong{font-size:.95rem}.app-header-account-meta span{font-size:.82rem;color:var(--muted)}html[data-theme=dark] .users-role--admin{background:rgba(37,99,235,.18);color:#93c5fd}html[data-theme=dark] .users-role--operator{background:rgba(34,197,94,.16);color:#86efac}html[data-theme=dark] .users-role--viewer{background:rgba(245,158,11,.16);color:#fcd34d}html[data-theme=dark] .users-zone-chip.active{background:rgba(37,99,235,.16);color:#93c5fd}html[data-theme=dark] .users-stat-icon--blue{background:rgba(37,99,235,.18);color:#93c5fd}html[data-theme=dark] .users-stat-icon--green{background:rgba(34,197,94,.16);color:#86efac}html[data-theme=dark] .users-stat-icon--purple{background:rgba(109,40,217,.18);color:#c4b5fd}html[data-theme=dark] .users-stat-icon--amber{background:rgba(245,158,11,.16);color:#fcd34d}.switch-page{display:grid;gap:18px}.switch-summary{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:12px}.switch-summary-chip{display:grid;gap:2px;padding:14px 16px;border:1px solid var(--line);border-radius:var(--radius-md);background:var(--gradient-surface);box-shadow:var(--shadow-xs)}.switch-summary-chip span{font-size:.72rem;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:var(--muted)}.switch-summary-chip strong{font-size:1.45rem;letter-spacing:-.03em;line-height:1.15}.switch-summary-chip small{color:var(--muted);font-size:.78rem}.switch-summary-chip.green strong{color:var(--success)}.switch-summary-chip.red strong{color:var(--danger)}.switch-summary-chip.orange strong{color:var(--warning)}.switch-list-toolbar,.switch-ports-head,.switch-ports-toolbar{display:flex;flex-wrap:wrap;align-items:flex-end;justify-content:space-between;gap:12px}.switch-list-toolbar h3,.switch-ports-head h3{margin:0;font-size:1.05rem}.switch-list-toolbar p{margin:2px 0 0;color:var(--muted);font-size:.82rem}.switch-search{display:flex;align-items:center;gap:8px;min-width:240px;flex:1;max-width:360px;padding:0 12px;border:1px solid var(--line);border-radius:12px;background:var(--surface)}.switch-search input{width:100%;border:0;background:transparent;padding:10px 0;outline:none}.switch-search svg{color:var(--muted);flex-shrink:0}.switch-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:16px;margin-top:14px}.switch-card{display:grid;gap:12px;padding:18px;border-radius:var(--radius-lg);background:var(--gradient-surface);box-shadow:var(--shadow-xs);border:1px solid var(--line);border-left-width:4px;transition:transform .18s ease,box-shadow .18s ease,border-color .18s ease}.switch-card.vendor-huawei{border-left-color:#c41425}.switch-card.vendor-ruijie{border-left-color:#2563eb}.switch-card.vendor-mikrotik{border-left-color:#ea580c}.switch-card.vendor-juniper{border-left-color:#059669}.switch-card:hover{transform:translateY(-2px);box-shadow:var(--shadow-sm);border-color:#dbeafe}.switch-card.disabled{opacity:.72}.switch-card-head{display:flex;align-items:flex-start;justify-content:space-between;gap:10px}.switch-card-badges{display:flex;flex-wrap:wrap;gap:6px}.switch-card h4{margin:0;font-size:1.08rem;letter-spacing:-.02em}.switch-title-link{color:inherit;text-decoration:none}.switch-title-link:hover{color:var(--primary-dark)}.switch-card-meta{display:flex;flex-wrap:wrap;gap:6px 10px;margin:0;color:var(--muted);font-size:.82rem;font-weight:600}.switch-card-meta span:not(:last-child):after{content:"·";margin-left:10px;color:#cbd5e1}.switch-vendor-pill{display:inline-flex;align-items:center;border-radius:999px;padding:3px 10px;font-size:.72rem;font-weight:800;letter-spacing:.02em}.switch-vendor-pill.huawei{background:#fee2e2;color:#b91c1c}.switch-vendor-pill.ruijie{background:#dbeafe;color:#1d4ed8}.switch-vendor-pill.mikrotik{background:#ffedd5;color:#c2410c}.switch-vendor-pill.juniper{background:#d1fae5;color:#047857}.switch-ip-chip{display:inline-flex;align-items:center;border-radius:999px;padding:4px 10px;background:var(--surface-muted);border:1px solid var(--line);color:var(--muted);font-size:.78rem;font-weight:700}.switch-port-meter{display:grid;gap:6px}.switch-port-meter-top{display:flex;justify-content:space-between;font-size:.78rem;color:var(--muted);font-weight:700}.switch-port-bar{height:8px;border-radius:999px;background:#e2e8f0;overflow:hidden}.switch-port-bar.empty{background:repeating-linear-gradient(90deg,#e2e8f0,#e2e8f0 8px,#f8fafc 0,#f8fafc 16px)}.switch-port-bar i{display:block;height:100%;border-radius:inherit;background:linear-gradient(90deg,#22c55e,#16a34a)}.switch-port-meter-legend{display:flex;justify-content:space-between;font-size:.75rem;font-weight:700}.switch-port-meter-legend .up{color:var(--success)}.switch-port-meter-legend .down{color:var(--danger)}.switch-card-actions{display:flex;flex-wrap:wrap;gap:8px}.switch-primary-link{display:inline-flex;align-items:center;gap:6px;padding:8px 14px;border-radius:12px;background:var(--gradient-primary);color:#fff;font-weight:700;text-decoration:none}.switch-primary-link:hover{filter:brightness(1.05)}.switch-card .test-result{margin:0}.switch-empty{margin-top:18px;padding:36px 20px;border:1px dashed var(--line);border-radius:var(--radius-lg);background:var(--surface-muted)}.switch-detail-topbar .button-row{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.switch-sysdescr{margin:0;padding:10px 14px;border-radius:12px;background:var(--surface-muted);border:1px solid var(--line);color:var(--muted);font-size:.82rem}.switch-ports-card{border:1px solid var(--line);border-radius:var(--radius-lg);background:var(--surface);box-shadow:var(--shadow-xs);padding:16px 16px 8px}.switch-ports-toolbar{margin:14px 0;padding:10px 12px;border:1px solid var(--line);border-radius:14px;background:var(--surface-hover)}.switch-filter{display:inline-flex;align-items:center;height:34px;padding:0 12px;border:1px solid var(--line);border-radius:999px;background:var(--surface);font-size:.8rem;font-weight:700;color:var(--muted);cursor:pointer}.switch-filter:hover{border-color:#bfdbfe;color:var(--text)}.switch-filter.active{background:#eff6ff;border-color:#93c5fd;color:#1d4ed8}.switch-filter.up.active{background:#dcfce7;border-color:#86efac;color:#166534}.switch-filter.down.active{background:#fee2e2;border-color:#fca5a5;color:#991b1b}.switch-filter.sfp.active{background:#ffedd5;border-color:#fdba74;color:#9a3412}.switch-filter.telegram.active{background:var(--primary-soft);border-color:var(--accent);color:var(--primary-dark)}.switch-alert-actions{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.switch-alert-col{width:92px;text-align:center}.switch-alert-col .switch-notify-btn{display:inline-flex;align-items:center;justify-content:center;margin-top:4px;padding:2px 7px;border:1px solid var(--line);border-radius:6px;background:#fff;color:#0f766e;font-size:.68rem;font-weight:800;cursor:pointer}.switch-alert-col .switch-notify-btn:disabled{opacity:.5;cursor:not-allowed}.switch-alert-col .switch-notify-btn:hover:not(:disabled){background:#ccfbf1}.switch-alert-check{display:inline-flex;align-items:center;justify-content:center;margin:0;cursor:pointer}.switch-alert-check input{width:16px;height:16px;accent-color:var(--accent)}.switch-table-wrap{overflow-x:auto}.switch-port-table .switch-port-name{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:.82rem}.switch-port-table .switch-num{font-variant-numeric:tabular-nums;white-space:nowrap}.switch-port-table tbody tr.is-down{background:#fff7f7}.switch-media{display:inline-flex;border-radius:999px;padding:2px 9px;font-size:.72rem;font-weight:800}.switch-media.fiber{background:#ede9fe;color:#6d28d9}.switch-media.copper{background:#ffedd5;color:#9a3412}.switch-media.trunk{background:#dbeafe;color:#1d4ed8}.switch-media.unknown{background:#f1f5f9;color:#475569}@media (max-width:720px){.switch-card-actions,.switch-list-toolbar,.switch-ports-toolbar{display:grid}.switch-search{max-width:none}}html[data-theme=dark] .switch-card,html[data-theme=dark] .switch-ip-chip,html[data-theme=dark] .switch-ports-card,html[data-theme=dark] .switch-ports-toolbar,html[data-theme=dark] .switch-search,html[data-theme=dark] .switch-summary-chip,html[data-theme=dark] .switch-sysdescr{background:var(--surface-muted);border-color:var(--line)}html[data-theme=dark] .switch-card:hover{border-color:#334155}html[data-theme=dark] .switch-port-bar{background:#1e293b}html[data-theme=dark] .switch-vendor-pill.huawei{background:rgba(220,38,38,.18);color:#fca5a5}html[data-theme=dark] .switch-vendor-pill.ruijie{background:rgba(37,99,235,.18);color:#93c5fd}html[data-theme=dark] .switch-vendor-pill.mikrotik{background:rgba(234,88,12,.2);color:#fdba74}html[data-theme=dark] .switch-vendor-pill.juniper{background:rgba(5,150,105,.2);color:#6ee7b7}html[data-theme=dark] .switch-filter{background:#0f172a;color:#cbd5e1}html[data-theme=dark] .switch-filter.active{background:var(--primary-soft);border-color:#0891b2;color:var(--primary)}html[data-theme=dark] .switch-port-table tbody tr.is-down{background:rgba(127,29,29,.18)}.switch-chart-toolbar{display:flex;flex-wrap:wrap;align-items:flex-end;justify-content:space-between;gap:12px;margin:12px 0 8px}.switch-chart-toolbar label{display:grid;gap:4px;font-size:.78rem;font-weight:700;color:var(--muted)}.switch-chart-toolbar select{min-width:260px;padding:8px 10px;border:1px solid var(--line);border-radius:10px;background:var(--surface);color:var(--text)}.switch-telegram-card .form-actions{display:flex;flex-wrap:wrap;gap:8px}
.modal-card.onu-ethernet-modal{width:min(640px,calc(100vw - 40px))}
.onu-ethernet-modal .form-grid.two-col.ethernet-vlan-grid{grid-template-columns:1fr!important;gap:10px}
.onu-ethernet-modal .ethernet-vlan-grid>*{min-width:0}
.onu-ethernet-modal .ethernet-vlan-grid select{width:100%;max-width:100%;box-sizing:border-box}
.onu-ethernet-modal .ethernet-trunk-list{display:flex;flex-direction:column;gap:6px;max-height:220px;overflow:auto;min-width:0;padding:4px 0}
.onu-ethernet-modal .wan-form-field.disabled-option{display:none}
.onu-ethernet-modal .checkbox-inline{align-items:flex-start!important;flex-wrap:nowrap;min-width:0;white-space:normal;font-weight:500}
.onu-ethernet-modal .checkbox-inline input{flex-shrink:0;margin-top:3px}
.onu-ethernet-modal .eth-vlan-label{min-width:0;overflow-wrap:anywhere;word-break:break-word;line-height:1.35;font-weight:500}

.map-kml-import{display:grid;gap:8px;margin:0 0 16px;padding:12px;border:1px dashed var(--line);border-radius:12px;background:var(--surface)}
.map-kml-file-label{position:relative;display:inline-flex;align-items:center;justify-content:center;cursor:pointer;width:fit-content}
.map-kml-file-label input[type=file]{position:absolute;inset:0;opacity:0;cursor:pointer;width:100%;height:100%}
.map-kml-result{color:var(--accent,#67e8f9);font-weight:600}
