@keyframes pulse{0%,to{opacity:1}50%{opacity:.6}}.app-sidebar{width:260px;background:#fff;border-radius:12px;padding:16px 12px;box-shadow:0 8px 30px #0f172a0f;display:flex;flex-direction:column;gap:8px;position:relative;transition:width .48s cubic-bezier(.2,.9,.2,1),padding .38s cubic-bezier(.2,.9,.2,1),box-shadow .38s ease;will-change:width,transform,box-shadow;overflow:visible}.app-sidebar.collapsed{width:64px;padding:12px 6px;box-shadow:0 6px 20px #0f172a0a}.sidebar-header{display:flex;align-items:center;justify-content:space-between;min-height:32px;margin-bottom:12px;padding-bottom:12px;border-bottom:1px solid #e6eefc}.sidebar-toggle-btn{background:#f1f5f9;border:1px solid #e6eefc;border-radius:6px;width:36px;height:36px;display:inline-flex;align-items:center;justify-content:center;cursor:pointer;transition:background .22s ease,border-color .22s ease,transform .32s ease}.sidebar-toggle-btn:active{transform:scale(.98)}.sidebar-toggle-btn:hover{background:#eef2f7;border-color:#dbe8fb}.toggle-icon{transition:transform .42s cubic-bezier(.2,.9,.2,1)}.app-sidebar.collapsed .toggle-icon{transform:rotate(180deg)}.sidebar-items{display:flex;flex-direction:column;gap:6px}.sidebar-item{display:flex;align-items:center;gap:12px;justify-content:flex-start;width:100%;padding:12px 14px;border-radius:10px;border:none;background:transparent;color:#475569;cursor:pointer;font-weight:500;font-size:14px;transition:background .32s ease,transform .32s cubic-bezier(.2,.9,.2,1),box-shadow .32s ease,color .26s ease;position:relative;overflow:hidden}.sidebar-item:hover{background:#f8fafc;color:#1e293b;transform:translate(6px)}.sidebar-item:active{transform:translate(2px) scale(.995);box-shadow:inset 0 2px 8px #0206170a}.sidebar-item.active{background:linear-gradient(135deg,#4a90e2,#357ab8);color:#fff;box-shadow:0 8px 26px #357ab838}.sidebar-item.collapsed{justify-content:center;gap:0;padding:10px 6px}.sidebar-item-label{display:inline-block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;transition:opacity .26s ease,transform .26s ease}.app-sidebar.collapsed .sidebar-item-label{opacity:0;transform:translate(-8px);width:0;height:0;pointer-events:none}.sidebar-item:focus-visible{outline:none;box-shadow:0 6px 24px #0f172a1f}.sidebar-item:after{content:"";position:absolute;left:50%;top:50%;width:0;height:0;transform:translate(-50%,-50%);background:#0206170a;border-radius:50%;transition:width .22s ease,height .22s ease,opacity .22s ease;pointer-events:none}.sidebar-item:active:after{width:180px;height:180px;opacity:1;transition:width .18s ease,height .18s ease,opacity .32s ease}@keyframes backdropFade{0%{opacity:0}to{opacity:1}}@keyframes drawerEnter{0%{transform:translate(-8%) scale(.996);opacity:0}to{transform:translate(0) scale(1);opacity:1}}.mobile-drawer-backdrop{animation:backdropFade .22s ease both}.mobile-drawer-content{animation:drawerEnter .3s cubic-bezier(.2,.9,.2,1) both}@keyframes tileIn{0%{opacity:0;transform:translateY(10px) rotateX(3deg) scale(.995)}60%{transform:translateY(-4px) rotateX(1deg) scale(1.002)}to{opacity:1;transform:translateY(0) rotateX(0) scale(1)}}@keyframes tileBreathe{0%{transform:scale(1);box-shadow:0 6px 18px #0206170f}50%{transform:scale(1.01);box-shadow:0 12px 36px #02061714}to{transform:scale(1);box-shadow:0 6px 18px #0206170f}}.mobile-section-tile{will-change:transform,box-shadow;animation:tileIn .28s cubic-bezier(.2,.9,.2,1) both,tileBreathe 8s ease-in-out .72s infinite;transform-origin:center}.mobile-section-tile:hover{transform:perspective(800px) translateY(-6px) scale(1.02) rotateX(1deg);box-shadow:0 14px 40px #0206171f}@media(prefers-reduced-motion:reduce){.mobile-section-tile{animation:tileIn .26s cubic-bezier(.2,.9,.2,1) both}.mobile-drawer-content,.mobile-drawer-backdrop{animation:none}}.login-container{max-width:350px;margin:60px auto 0;background:#fff;border-radius:12px;box-shadow:0 2px 16px #2c3e5014;padding:2.5rem 2rem 2rem;display:flex;flex-direction:column;align-items:center}.login-container h2{color:#1a2a3a;margin-bottom:1.5rem;font-weight:600;letter-spacing:.5px}.login-container form{width:100%;display:flex;flex-direction:column;gap:1rem}.login-container input{padding:.7rem 1rem;border:1px solid #cbd5e1;border-radius:6px;font-size:1rem;background:#f0f4f8;transition:border .2s}.login-container input:focus{border:1.5px solid #4a90e2;outline:none}.login-container button{background:#4a90e2;color:#fff;border:none;border-radius:6px;padding:.8rem 0;font-size:1.1rem;font-weight:600;cursor:pointer;transition:background .2s}.login-container button:hover{background:#357ab8}.login-container .error{color:#e74c3c;background:#fbeaea;border-radius:4px;padding:.5rem .7rem;font-size:.97rem;margin-top:.2rem;text-align:center}.login-tabs{display:flex;width:100%;margin-bottom:1rem;border:1px solid #cbd5e1;border-radius:6px;overflow:hidden}.login-tabs button{flex:1;padding:.6rem 0;background:#f0f4f8;border:none;cursor:pointer;font-weight:600;color:#4a5568;transition:background .2s}.login-tabs button.active{background:#4a90e2;color:#fff}.login-tabs button:not(.active):hover{background:#e6eef7}.selector-container{max-width:350px;margin:60px auto 0;background:#fff;border-radius:12px;box-shadow:0 2px 16px #2c3e5014;padding:2.5rem 2rem 2rem;background:linear-gradient(135deg,#0e2a47,#1a3a5a)!important;flex-direction:column;align-items:center}.selector-container h2{color:#1a2a3a;margin-bottom:1.5rem;font-weight:600;letter-spacing:.5px}.selector-container form{width:100%;display:flex;flex-direction:column;gap:1.2rem}.selector-container select{padding:.7rem 1rem;border:1px solid #cbd5e1;border-radius:6px;font-size:1rem;background:#f0f4f8;transition:border .2s}.selector-container select:focus{border:1.5px solid #4a90e2;outline:none}.selector-container button{background:#4a90e2;color:#fff;border:none;border-radius:6px;padding:.8rem 0;font-size:1.1rem;font-weight:600;cursor:pointer;transition:background .2s}.selector-container button:hover{background:#357ab8}.loading{margin:100px auto;text-align:center;font-size:1.3rem;color:#4a90e2}.dashboard-container{margin:0;max-width:none;background:#fff;border-radius:16px;box-shadow:0 1px 3px #0000000f,0 1px 2px #0000000d;padding:28px 32px;min-height:calc(100vh - 120px)}.modern-table{width:100%;border-collapse:separate;border-spacing:0;border-radius:12px;overflow:visible;box-shadow:0 1px 3px #0000000f}.modern-table thead{background:linear-gradient(135deg,#f1f5f9,#e2e8f0)}.modern-table th{padding:14px 16px;text-align:left;font-weight:600;font-size:14px;color:#475569;text-transform:uppercase;letter-spacing:.5px;border-bottom:2px solid #cbd5e1}.modern-table td{padding:14px 16px;border-bottom:1px solid #e2e8f0;font-size:15px;color:#1e293b;overflow:visible;position:relative}.modern-table tbody tr{transition:background .2s ease;position:relative}.modern-table tbody tr:hover{background:#f1f5f9;z-index:10}.modern-table tbody tr:last-child td{border-bottom:none}.modern-card{background:#fff;border:1px solid #cbd5e1;border-radius:16px;padding:20px;box-shadow:0 1px 3px #0000000f,0 1px 2px #0000000d;transition:all .3s cubic-bezier(.4,0,.2,1);overflow:visible;position:relative;z-index:1}.modern-card:hover{box-shadow:0 4px 6px #00000014,0 2px 4px #0000000f;transform:translateY(-2px);z-index:100}.modern-card-header{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:16px;padding-bottom:14px;border-bottom:2px solid #e2e8f0}.modern-card-title{font-size:17px;font-weight:700;color:#1e293b;margin:0}.modern-card-subtitle{font-size:13px;color:#64748b;margin:4px 0 0}.status-badge{display:inline-flex;align-items:center;gap:6px;padding:6px 12px;border-radius:20px;font-size:12px;font-weight:600;text-transform:uppercase;letter-spacing:.3px}.status-badge.online,.status-badge.connected{background:#d1fae5;color:#047857}.status-badge.offline,.status-badge.disconnected{background:#fee2e2;color:#b91c1c}.status-badge.warning,.status-badge.alerting,.status-badge.degraded{background:#fef3c7;color:#a16207}html,body{font-family:Arial,Helvetica,sans-serif;margin:0;padding:0;background:#e8ebed;overflow-x:hidden;max-width:100vw;box-sizing:border-box}@media(max-width:900px){body .dashboard-container .mobile-section-tiles-wrapper,body .dashboard-container .mobile-section-tiles-wrapper:before,body .dashboard-container .mobile-section-tiles-wrapper:after,body .dashboard-container,body .mobile-topology-graph,body .mobile-topology-graph:before,body .mobile-topology-graph:after{background:transparent!important;background-color:transparent!important;background-image:none!important;box-shadow:none!important;border:none!important;outline:none!important;-webkit-backdrop-filter:none!important;backdrop-filter:none!important}body .dashboard-container>*,body .dashboard-container>*:before,body .dashboard-container>*:after,body .mobile-section-tiles-wrapper>*,body .mobile-section-tiles-wrapper>*:before,body .mobile-section-tiles-wrapper>*:after{background:transparent!important;background-color:transparent!important;box-shadow:none!important}body .mobile-section-tiles-wrapper,body .mobile-section-tiles,body .mobile-section-tile{overflow:visible!important;-webkit-overflow-scrolling:touch!important}#root>div>div:nth-child(3)>main>div.mobile-section-tiles-wrapper>div>div:nth-child(1)>div:nth-child(2)>div:nth-child(3),#root>div>div:nth-child(3)>main>div.mobile-section-tiles-wrapper>div>div:nth-child(2)>div:nth-child(2)>div:nth-child(3),#root>div>div:nth-child(3)>main>div.mobile-section-tiles-wrapper>div>div:nth-child(4)>div:nth-child(2)>div:nth-child(3){display:none!important;color:transparent!important;text-shadow:none!important}}@media(max-width:900px){.mobile-topology-graph{background:transparent!important;box-shadow:none!important}.mobile-section-tiles{overflow:visible!important}.mobile-section-tile{overflow:visible!important;box-shadow:0 8px 22px #0206170f!important}.mobile-section-tile *{box-sizing:border-box!important;overflow:visible!important}.topbar{height:65px!important;padding-left:14px!important;padding-right:14px!important;transition:height .22s ease,padding .22s ease,box-shadow .22s ease}.mobile-hamburger,.mobile-search-toggle{width:44px!important;height:44px!important;padding:8px!important;border-radius:10px!important}.mobile-hamburger svg,.mobile-search-toggle svg{width:20px!important;height:20px!important}.topbar{position:fixed;top:0;left:0;right:0;width:100%;padding-left:12px!important;padding-right:12px!important;background:linear-gradient(180deg,#071233,#081428);color:#fff}.dashboard-container{margin-top:65px;padding-left:0!important;padding-right:0!important}.mobile-search-bar{margin-top:8px}.modern-table thead{display:none}.modern-table,.modern-table tbody,.modern-table tr,.modern-table td{display:block;width:100%}.modern-table tbody tr{margin-bottom:12px;border-radius:12px;background:#fff;border:1px solid #e6eef7;padding:10px;box-shadow:0 1px 3px #0000000a}.modern-table td{display:flex;justify-content:space-between;padding:8px 6px;border:none;font-size:14px}.modern-table td:before{content:attr(data-label) ": ";font-weight:700;color:#475569;margin-right:8px;flex:0 0 auto}.modern-table td>*{flex:1 1 auto;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.modern-card{padding:12px}.StatusCompact{display:inline-flex;gap:8px;align-items:center}.PortMatrixWrapper{padding:8px;transform-origin:top left;transform:scale(.9)}}@media(max-width:900px){.mobile-hamburger{display:inline-flex!important;align-items:center;justify-content:center;background:transparent!important;border:none!important;color:#fff!important;margin-right:8px;padding:6px;position:absolute!important;left:8px!important;top:50%!important;transform:translateY(-50%)!important;z-index:1300!important;pointer-events:auto!important}.mobile-drawer{position:fixed;inset:0;z-index:1800;display:flex;align-items:stretch;justify-content:flex-start}.mobile-drawer-backdrop{position:absolute;inset:0;background:#0006}.mobile-drawer-content{position:relative;width:75vw;max-width:520px;height:100vh;background:linear-gradient(180deg,#071233,#081428);color:#fff;padding:18px 14px;box-shadow:0 12px 40px #02061799;overflow-y:auto;-webkit-overflow-scrolling:touch}.mobile-drawer-appname{font-weight:800;font-size:18px;letter-spacing:.4px;color:#fff;margin-bottom:12px}.mobile-drawer-predio{margin:12px 0 18px}.drawer-label{font-size:12px;color:#ffffffa6;margin-bottom:6px}.drawer-predio-code{font-size:20px;font-weight:700;color:#fff;min-height:26px}.drawer-search-form{display:flex;gap:8px;margin:12px 0 18px}.drawer-search-input{flex:1;padding:10px 12px;border-radius:10px;border:none;background:#ffffff14;color:#fff;outline:none}.drawer-search-input::placeholder{color:#fff9}.drawer-search-button{background:#ffffff0f;color:#fff;border:none;padding:10px 12px;border-radius:10px;cursor:pointer}.drawer-recent{margin-top:6px;padding-bottom:40px}.drawer-section-title{font-size:13px;color:#ffffffd9;margin-bottom:8px;font-weight:700}.drawer-recent-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:6px}.drawer-recent-item{width:100%;text-align:left;display:flex;justify-content:space-between;gap:12px;padding:10px 12px;background:#ffffff08;border-radius:8px;border:1px solid rgba(255,255,255,.03);color:#fff}.drawer-recent-item:hover{background:#ffffff0f}.drawer-empty{color:#fff9;padding:6px 0}.drawer-recent-id{font-size:12px;color:#fff9}}@media(max-width:900px){.mobile-section-tiles{display:grid;grid-template-columns:repeat(2,1fr);gap:12px;margin:0!important;padding:0!important;max-width:100%;width:100%;justify-content:center;align-content:start;justify-items:stretch;align-items:stretch;box-sizing:border-box}@keyframes tileIn{0%{opacity:0;transform:translateY(8px) scale(.995)}to{opacity:1;transform:translateY(0) scale(1)}}.mobile-section-tile{background:linear-gradient(180deg,#1b4aa0,#2b65f0);color:#fff;padding:14px;border-radius:14px;border:1px solid rgba(255,255,255,.08);display:flex;flex-direction:column;justify-content:center;align-items:center;gap:8px;text-align:center;min-height:120px;width:100%;box-sizing:border-box;overflow:hidden;animation:tileIn .22s cubic-bezier(.2,.9,.2,1) both;box-shadow:0 4px 12px #0f172a26;position:relative;-webkit-tap-highlight-color:transparent;touch-action:manipulation;-webkit-user-select:none;user-select:none;cursor:pointer;transition:all .25s cubic-bezier(.4,0,.2,1)}.mobile-section-tile:after{content:"";position:absolute;left:50%;top:50%;width:120%;height:120%;transform:translate(-50%,-50%) scale(.2);background:radial-gradient(circle,rgba(255,255,255,.2) 0%,transparent 70%);opacity:0;border-radius:14px;pointer-events:none;transition:transform .3s cubic-bezier(.4,0,.2,1),opacity .25s ease}.mobile-section-tile:active:after{opacity:1;transform:translate(-50%,-50%) scale(1.1)}.mobile-section-tiles>.mobile-section-tile:nth-child(1){animation-delay:0ms}.mobile-section-tiles>.mobile-section-tile:nth-child(2){animation-delay:40ms}.mobile-section-tiles>.mobile-section-tile:nth-child(3){animation-delay:80ms}.mobile-section-tiles>.mobile-section-tile:nth-child(4){animation-delay:.12s}.mobile-section-tile:active{transform:scale(.96);box-shadow:0 2px 8px #0f172a33;opacity:.95}@media(min-width:901px){.mobile-section-tile:hover{transform:translateY(-2px) scale(1.01);box-shadow:0 8px 24px #0f172a33}}.mobile-section-tile:focus{outline:none;box-shadow:0 8px 24px #0f172a1f}h2{padding-top:16px!important;padding-left:12px!important;padding-right:12px!important}.dashboard-container>div>div:first-child{padding-top:8px}.mobile-topology-graph-wrapper,.mobile-device-list{padding-top:8px;padding-left:12px;padding-right:12px}.mobile-appliance-list{display:flex;flex-direction:column;gap:0;padding:8px 12px 2px}.drawer-predio-box{margin-top:6px;padding:8px 10px;border-radius:8px;background:#ffffff0f;color:#fff;font-weight:700;min-height:30px;display:inline-flex;align-items:center;gap:8px}.drawer-search-button{display:inline-flex;align-items:center;justify-content:center;background:#ffffff0f;border:none;color:#fff;padding:8px;border-radius:8px;cursor:pointer}.mobile-section-tile-row{display:flex;align-items:center;gap:10px;justify-content:center;width:100%}.mobile-section-tile-icon{width:40px;height:40px;background:#ffffff0f;border-radius:8px;display:flex;align-items:center;justify-content:center;color:#fff;flex:0 0 40px}.mobile-section-tiles-wrapper{display:block;width:100%;max-width:none;margin:0;background:#fff;border-radius:0;padding:12px;box-shadow:0 2px 8px #0f172a14;box-sizing:border-box;overflow:visible;position:relative;z-index:100}@keyframes tileBreathe{0%{transform:scale(1);box-shadow:0 6px 18px #0206170f}50%{transform:scale(1.008);box-shadow:0 10px 30px #02061714}to{transform:scale(1);box-shadow:0 6px 18px #0206170f}}.mobile-section-tile{will-change:transform,box-shadow;animation:tileIn .22s cubic-bezier(.2,.9,.2,1) both,tileBreathe 6s ease-in-out .4s infinite;position:relative}.mobile-section-tile:after{content:"";position:absolute;left:50%;top:50%;width:140%;height:140%;transform:translate(-50%,-50%) scale(.7);background:radial-gradient(circle at center,rgba(255,255,255,.18) 0%,rgba(255,255,255,.06) 35%,transparent 60%);opacity:0;border-radius:12px;pointer-events:none;transition:opacity .22s ease,transform .3s ease}@media(prefers-reduced-motion:reduce){.mobile-section-tile{animation:tileIn .22s cubic-bezier(.2,.9,.2,1) both}.mobile-section-tile .tile-stat:nth-child(1) .tile-stat-label:before{animation:none}}.empty-predio{display:none!important}.mobile-device-list{display:flex;flex-direction:column;gap:10px;padding:8px 12px 2px}.mobile-device-item{width:100%;background:transparent;border-radius:12px;padding:0}.mobile-device-button{width:100%;display:inline-flex;align-items:center;justify-content:space-between;gap:12px;padding:12px 14px;border-radius:12px;background:#fff;border:1px solid #e6eef7;box-shadow:0 6px 18px #0206170f;cursor:pointer;-webkit-tap-highlight-color:rgba(0,0,0,0);touch-action:manipulation;-webkit-user-select:none;user-select:none;transition:transform .14s ease,box-shadow .14s ease,border-color .16s ease,background .16s ease;position:relative;overflow:hidden}.mobile-device-button:active{transform:translateY(2px);box-shadow:0 1px 4px #0206170f inset}.mobile-device-button:after{content:"";position:absolute;left:50%;top:50%;width:120%;height:120%;transform:translate(-50%,-50%) scale(.2);background:#0206170f;opacity:0;border-radius:12px;pointer-events:none;transition:transform .26s ease,opacity .2s ease}.mobile-device-button:active:after,.mobile-device-button.touch-pressed:after{opacity:1;transform:translate(-50%,-50%) scale(1);transition-duration:.12s}.tooltip-open .mobile-device-button{border-color:#2563eb;background:linear-gradient(90deg,#2563eb0f,#2563eb05);box-shadow:0 8px 28px #2563eb1f,0 2px 6px #0206170a;transform:translateY(-2px)}.tooltip-open .mobile-device-button:before{content:"";position:absolute;left:0;top:0;bottom:0;width:4px;background:#2563eb;border-top-left-radius:12px;border-bottom-left-radius:12px;box-shadow:0 2px 8px #2563eb1f}.mobile-section-tile:focus-visible,.mobile-device-button:focus-visible{outline:none;box-shadow:0 8px 24px #0f172a1f;transform:translateY(-4px) scale(1.01)}.mobile-device-button:focus{outline:none;box-shadow:0 8px 24px #0f172a14}.mobile-section-tile-title{font-weight:700;font-size:13px;color:#fff;line-height:1.1;margin:0;text-align:center;width:calc(100% - 56px)}.mobile-section-tile-count{font-size:12px;color:#fffffff2;opacity:.95;text-align:center;width:100%}.tile-stat{display:flex;justify-content:space-between;align-items:center;gap:8px;width:100%;padding:0 6px;box-sizing:border-box}.tile-stat-value{font-size:15px;font-weight:800;color:#fffffffa;line-height:1}.tile-stat-label{font-size:11px;color:#ffffffeb;opacity:.95}.mobile-section-tile .tile-stat:nth-child(1) .tile-stat-label:before{content:"";display:inline-block;width:8px;height:8px;border-radius:50%;background:#10b981;margin-right:6px;vertical-align:middle;box-shadow:0 0 6px #10b98159;transform-origin:center;animation:statusDotPulse 1.6s infinite ease-in-out}.mobile-section-tile .tile-stat:nth-child(2) .tile-stat-label:before{content:"";display:inline-block;width:8px;height:8px;border-radius:50%;background:#ef4444;margin-right:6px;vertical-align:middle;box-shadow:0 0 6px #ef444447}@keyframes statusDotPulse{0%{transform:scale(1);opacity:1}50%{transform:scale(1.18);opacity:.9}to{transform:scale(1);opacity:1}}.mobile-device-icon{width:40px;height:40px;border-radius:8px;display:inline-flex;align-items:center;justify-content:center;background:#f1f5f9;color:#0f172a;flex:0 0 40px}.mobile-device-subline{font-size:12px;color:#64748b;margin-top:4px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mobile-topology-list{display:flex;flex-direction:column;gap:10px;padding:4px 2px 2px}.mobile-topology-item{display:flex;align-items:center;gap:12px;padding:10px 12px;border-radius:10px;background:#fff;border:1px solid #e6eefc;box-shadow:0 1px 2px #0206170a;cursor:pointer}.mobile-topology-graph-wrapper{width:100%;overflow:hidden;padding:6px 0 12px;position:relative;z-index:1}.mobile-topology-graph{width:100%;overflow-x:auto;overflow-y:visible;-webkit-overflow-scrolling:touch;touch-action:pan-x pinch-zoom;overscroll-behavior-x:contain;background:#fff;padding:8px;border-radius:12px;box-shadow:0 6px 18px #0206170f;min-height:240px;max-height:60vh;position:relative;z-index:1}.mobile-topology-graph-inner{width:max(1000px,100%);display:inline-block;vertical-align:top}.mobile-topology-graph{width:100%;overflow-x:auto;overflow-y:visible;-webkit-overflow-scrolling:touch;touch-action:pan-x pinch-zoom;overscroll-behavior-x:contain;background:transparent;padding:6px 0;min-height:220px;max-height:70vh}.mobile-topology-graph-inner{width:100%;min-width:auto;display:block}.mobile-topology-graph::-webkit-scrollbar{height:8px}.mobile-topology-graph::-webkit-scrollbar-thumb{background:#0206170f;border-radius:6px}.mobile-appliance-card{display:flex;gap:14px;align-items:flex-start;background:#fff;border:1.5px solid #e2e8f0;border-radius:16px;padding:16px;margin-bottom:16px;box-shadow:0 2px 12px #0f172a0f;transition:all .25s cubic-bezier(.4,0,.2,1);cursor:pointer;position:relative;overflow:hidden;-webkit-tap-highlight-color:transparent}.mobile-appliance-card:active{transform:scale(.98);box-shadow:0 1px 6px #0f172a1a;border-color:#cbd5e1}.mobile-appliance-card:after{content:"";position:absolute;left:50%;top:50%;width:120%;height:120%;transform:translate(-50%,-50%) scale(.2);background:radial-gradient(circle,rgba(37,99,235,.1) 0%,transparent 70%);opacity:0;border-radius:16px;pointer-events:none;transition:transform .3s cubic-bezier(.4,0,.2,1),opacity .25s ease}.mobile-appliance-card:active:after{opacity:1;transform:translate(-50%,-50%) scale(1.1)}.mobile-appliance-left{flex-shrink:0}.mobile-appliance-icon{width:48px;height:48px;border-radius:12px;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,#eff6ff,#dbeafe);border:1.5px solid #bfdbfe}.mobile-appliance-icon svg{color:#2563eb;width:24px;height:24px}.mobile-appliance-main{flex:1;min-width:0;display:flex;flex-direction:column;gap:6px}.mobile-appliance-title{font-weight:700;color:#0f172a;font-size:15px;line-height:1.3;letter-spacing:-.01em}.mobile-appliance-sub{font-size:13px;color:#64748b;font-weight:500;line-height:1.3}.mobile-appliance-meta{display:flex;gap:8px;flex-wrap:wrap;align-items:center}.mobile-appliance-meta .meta-item{font-size:12px;color:#475569;font-weight:500;line-height:1.4}.mobile-appliance-meta .meta-item strong{font-weight:700;color:#0f172a}.mobile-appliance-right{flex:0 0 80px;display:flex;align-items:center;justify-content:center}.mobile-appliance-status{padding:7px 14px;border-radius:999px;font-weight:700;font-size:13px;text-transform:capitalize;letter-spacing:.3px;box-shadow:0 2px 10px #0f172a1a;border:1px solid rgba(255,255,255,.2)}.mobile-appliance-right{margin-top:12px!important;align-self:flex-start!important}.mobile-appliance-status-label{font-size:13px;color:#0f172a;font-weight:700;line-height:1.3}.mobile-appliance-ports{margin-top:2px;display:flex;gap:6px;align-items:center;flex-wrap:wrap}.ap-port-badge{display:inline-flex;align-items:center;justify-content:center;padding:4px 9px;border-radius:999px;font-weight:700;font-size:11px;color:#fff;background:#94a3b8;box-shadow:0 2px 8px #0f172a14;border:1px solid rgba(255,255,255,.2);letter-spacing:.3px}.ap-port-badge.used{background:#10b981}.ap-port-badge.unused{background:#94a3b8;opacity:.95}.mobile-appliance-wan{display:inline-flex;gap:8px;align-items:center;margin-top:6px;flex-wrap:wrap}.ap-wan-badge{display:inline-flex;align-items:center;gap:8px;padding:7px 12px;border-radius:999px;font-weight:700;font-size:12px;color:#fff;background:#64748b;box-shadow:0 2px 10px #0f172a1a;border:1px solid rgba(255,255,255,.2);letter-spacing:.3px}.ap-wan-badge.active{background:#059669}.ap-wan-badge.inactive{background:#ef4444}.mobile-appliance-status-row{margin-top:14px;display:flex;align-items:center;gap:10px;justify-content:flex-start;width:100%}.mobile-appliance-status{padding:6px 12px;border-radius:999px;font-weight:700;font-size:13px}.topbar{height:72px!important;padding-top:12px!important;padding-bottom:12px!important;align-items:center!important}.mobile-hamburger,.mobile-search-toggle{top:50%!important;transform:translateY(-50%)!important}}@media(min-width:901px){.mobile-hamburger,.mobile-drawer,.mobile-drawer-backdrop,.mobile-drawer-content{display:none!important}}.topbar{position:relative;z-index:1200;overflow:visible!important;display:flex;align-items:center}@media(min-width:901px){.topbar-search-form{max-width:900px!important}}@media(min-width:901px){body .topbar,.topbar{padding:8px 24px!important;background:linear-gradient(135deg,#0e2a47,#1a3a5a)!important;color:#fff!important;box-shadow:0 2px 8px #0000001a!important;border-bottom:1px solid rgba(255,255,255,.1)!important;justify-content:space-between!important;gap:20px!important;height:auto!important;position:relative!important}body .topbar-brand,.topbar-brand{display:flex!important;align-items:center!important;gap:10px!important;min-width:140px!important;color:#fff!important}body .topbar-brand-icon,.topbar-brand-icon{display:flex!important;width:28px!important;height:28px!important;background:linear-gradient(135deg,#4a90e2,#357ab8)!important;border-radius:6px!important;align-items:center!important;justify-content:center!important;font-weight:700!important;font-size:15px!important;box-shadow:0 2px 6px #0003!important;color:#fff!important}body .topbar-brand-title,.topbar-brand-title{display:block!important;font-weight:700!important;font-size:15px!important;letter-spacing:.5px!important;color:#fff!important}body .topbar-search-form,.topbar-search-form{display:flex!important;align-items:center!important;gap:8px!important;max-width:500px!important;flex:1 1 auto!important}body .topbar-search-wrapper,.topbar-search-wrapper{display:flex!important;position:relative!important;width:100%!important;align-items:center!important}body .topbar-input,.topbar-input{display:block!important;width:100%!important;padding:10px 50px 10px 14px!important;border-radius:999px!important;border:1px solid rgba(255,255,255,.2)!important;background:#ffffff26!important;-webkit-backdrop-filter:blur(10px)!important;backdrop-filter:blur(10px)!important;color:#fff!important;font-size:14px!important;outline:none!important;transition:all .15s ease!important;box-sizing:border-box!important}body .topbar-input::placeholder,.topbar-input::placeholder{color:#fff9!important}body .topbar-input:focus,.topbar-input:focus{background:#ffffff40!important;border-color:#fff6!important;box-shadow:0 4px 18px #02061729!important}body .search-submit,.search-submit{display:inline-flex!important;position:absolute!important;right:6px!important;top:50%!important;transform:translateY(-50%)!important;width:38px!important;height:38px!important;padding:0!important;border-radius:50%!important;align-items:center!important;justify-content:center!important;background:linear-gradient(180deg,#3b82f6,#2563eb)!important;box-shadow:0 4px 12px #2563eb33!important;border:none!important;cursor:pointer!important;transition:transform .12s ease!important}body .search-submit:hover,.search-submit:hover{transform:translateY(-50%) scale(1.05)!important;box-shadow:0 6px 16px #2563eb4d!important}body .search-submit svg,.search-submit svg{stroke:#fff!important;width:18px!important;height:18px!important}body .topbar-actions,.topbar-actions{display:flex!important;align-items:center!important;gap:12px!important;margin-left:auto!important}body .topbar-logout,.topbar-logout{display:flex!important;align-items:center!important;gap:6px!important;padding:8px 14px!important;background:#ffffff1a!important;border:1px solid rgba(255,255,255,.2)!important;border-radius:8px!important;color:#fff!important;cursor:pointer!important;transition:all .15s ease!important}body .topbar-logout:hover,.topbar-logout:hover{background:#ffffff26!important;border-color:#ffffff4d!important}body .mobile-search-toggle,.mobile-search-toggle,body .mobile-hamburger,.mobile-hamburger,body .mobile-section-select,.mobile-section-select{display:none!important}}@media(max-width:480px){.mobile-search-toggle{display:inline-flex!important}.topbar-input,.search-submit{display:none}}@media(max-width:900px)and (min-width:481px){.mobile-search-toggle{display:none!important}.topbar-input{display:block!important}.search-submit{display:inline-flex!important}}@media(min-width:901px){.topbar-search-form{max-width:720px!important}}@media(min-width:1200px){.topbar-search-form{max-width:900px!important}}.topbar .topbar-logout svg{color:#fff;width:16px;height:16px;display:inline-block}.topbar .mobile-section-select{color:#fff;background:transparent;border:none}.topbar-actions{display:flex;align-items:center;gap:10px}.topbar-logout{white-space:nowrap}.topbar-logout .logout-label{display:inline-block}@media(max-width:900px){.topbar{padding-left:12px!important;padding-right:12px!important}.topbar form{max-width:none;flex:1 1 auto;margin-left:8px;margin-right:8px}.topbar input[type=text]{width:100%;min-width:0}.mobile-section-select{display:inline-block!important}}@media(min-width:901px){.mobile-section-select{display:none!important}}@media(max-width:480px){.modern-table td:before{font-size:13px}.NodePort{width:22px!important;height:18px!important}.NodePortTable td{font-size:10px;padding:2px 4px}.dashboard-container{padding:10px}.topbar-logout .logout-label{display:none}.topbar-logout{padding:8px!important}.topbar-search-form{margin-left:6px;margin-right:6px}.mobile-search-toggle{display:inline-flex!important;left:8px!important}.topbar-input{display:none!important}.topbar.mobile-search-open .topbar-input{display:block!important}.search-submit{display:none!important}}@media(max-width:900px){.mobile-search-toggle{z-index:1400!important;pointer-events:auto!important;display:inline-flex!important;align-items:center;justify-content:center}.mobile-section-select{display:inline-block!important;color:#fff!important;background:transparent!important;border:none!important;font-weight:600!important;padding:6px 8px!important;border-radius:8px!important;z-index:1300!important}.topbar{align-items:center;height:56px}.topbar-search-wrapper{height:38px}.topbar-input{min-height:38px!important;height:38px!important;padding-top:6px!important;padding-bottom:6px!important;line-height:1.2!important;box-sizing:border-box}.mobile-search-modal{z-index:1600}.mobile-search-backdrop{z-index:1590}}@media(max-width:900px){.mobile-search-toggle{background:transparent!important;border:none!important;box-shadow:none!important;right:12px!important;left:auto!important;position:absolute!important;top:50%!important;transform:translateY(-50%)!important;padding:6px!important;z-index:1600!important;color:#fff!important}.mobile-search-toggle svg{stroke:#fff!important}.search-submit{background:transparent!important;border:none!important;box-shadow:none!important;color:#fff!important}.mobile-section-select{position:absolute!important;left:50%!important;transform:translate(-50%)!important;top:50%!important;transform:translate(-50%,-50%)!important;display:inline-block!important;z-index:1500!important;background:#ffffff14!important;color:#fff!important;border:1px solid rgba(255,255,255,.06)!important;padding:6px 12px!important;border-radius:10px!important;box-shadow:0 4px 12px #0206170f!important}.topbar-search-wrapper{display:flex!important;align-items:center!important}.topbar-input{padding-left:16px!important;padding-right:56px!important;height:40px!important;line-height:20px!important;display:block!important;overflow:hidden!important;text-overflow:ellipsis!important}.topbar-brand{margin-left:8px}}@media(max-width:900px){.topbar{background:linear-gradient(135deg,#0e2a47,#1a3a5a)!important;color:#fff!important;border-bottom:1px solid rgba(255,255,255,.08)!important;-webkit-backdrop-filter:none;backdrop-filter:none}.topbar-brand-title{color:#fff!important}.topbar-brand-icon{box-shadow:0 2px 6px #0000002e}.topbar-search-wrapper{padding-left:8px;padding-right:8px;box-sizing:border-box}.topbar-input{display:block!important;background:#ffffff0f!important;color:#fff!important;border:1px solid rgba(255,255,255,.08)!important;padding-left:14px!important;padding-right:48px!important;border-radius:999px!important;box-shadow:none!important}.topbar-input::placeholder{color:#ffffffbf!important}.mobile-search-toggle{color:#fff!important}.mobile-search-toggle svg{stroke:#fff!important}.mobile-section-select{display:inline-block!important;background:#ffffff14!important;color:#fff!important;border:1px solid rgba(255,255,255,.06)!important;padding:6px 10px!important;border-radius:10px!important;font-weight:600!important;box-shadow:0 4px 12px #0206170f!important}.search-submit{z-index:1500!important}.topbar{padding-top:8px!important;padding-bottom:8px!important;height:auto!important}}@media(max-width:900px)and (min-width:481px){.mobile-search-toggle{display:none!important}.topbar-input{display:block!important}.search-submit{display:inline-flex!important}.mobile-section-select{display:inline-block!important}}.mobile-search-bar{display:block;background:transparent;padding:8px 12px 12px}.mobile-search-bar input{border:1px solid #cbd5e1;border-radius:10px;padding:10px 12px;font-size:14px}.mobile-search-bar button{min-width:64px}.mobile-search-modal{position:fixed;inset:0;display:flex;align-items:center;justify-content:center;z-index:1400}.mobile-search-backdrop{position:absolute;inset:0;background:#00000073;z-index:1}.mobile-search-content{position:relative;z-index:2;width:calc(100% - 40px);max-width:720px;background:#fff;border-radius:12px;padding:16px;box-shadow:0 12px 40px #0206174d}.tooltip-modal-backdrop{position:fixed;inset:0;background:#00000073;z-index:1900}.tooltip-modal-content{position:fixed;left:50%;top:60%;transform:translate(-50%,-50%);width:calc(100% - 28px);max-width:720px;background:#fff;border-radius:12px;padding:14px;z-index:1901;box-shadow:0 12px 40px #02061752;max-height:calc(100vh - 80px);overflow:auto}.tooltip-modal-close{position:absolute;right:10px;top:8px;background:transparent;border:none;font-size:18px;cursor:pointer;color:#64748b}.dashboard-grid{display:grid;grid-template-columns:auto minmax(0,1fr);gap:16px}.summary-chip{padding:8px 10px!important;min-width:80px!important;font-size:13px}.summary-chip div:first-child{font-size:11px}.summary-chip div:last-child{font-size:16px;font-weight:700}button[title^="Forzar recarga"]{padding:10px 14px!important;font-size:14px!important}*,*:before,*:after{box-sizing:border-box}h1{color:#2c3e50}.admin-container{max-width:940px;margin:30px auto;padding:24px;background:#fff;border-radius:12px;box-shadow:0 2px 16px #2c3e5014;display:flex;flex-direction:column;gap:24px}.admin-header{display:flex;justify-content:space-between;align-items:center}.admin-header h1{margin:0;font-size:1.5rem}.logout-btn{background:#ef4444;color:#fff;border:none;padding:.6rem 1.2rem;border-radius:6px;cursor:pointer;font-weight:600}.logout-btn:hover{background:#dc2626}.admin-section{background:#f1f5f9;border:1px solid #cbd5e1;border-radius:10px;padding:16px 20px}.admin-section h2{margin-top:0;color:#1a2a3a}.admin-table{width:100%;border-collapse:collapse}.admin-table th,.admin-table td{border-bottom:1px solid #cbd5e1;padding:10px;text-align:left}.admin-table tbody tr:last-child td{border-bottom:none}.danger-btn{background:#f97316;color:#fff;border:none;border-radius:6px;padding:.4rem .8rem;cursor:pointer}.danger-btn:hover{background:#ea580c}.admin-form{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px}.admin-form input{padding:.6rem .8rem;border:1px solid #cbd5e1;border-radius:6px}.admin-form button{background:#4a90e2;color:#fff;border:none;border-radius:6px;padding:.7rem;cursor:pointer;font-weight:600}.admin-form button:hover{background:#357ab8}.sync-summary{margin-top:12px;font-size:.95rem;color:#334155;display:grid;gap:4px}.sync-progress{margin-top:16px;background:#fff;border:1px solid #cbd5e1;border-radius:8px;padding:16px}.progress-info{display:flex;justify-content:space-between;margin-bottom:8px;font-size:.9rem;color:#475569;font-weight:600}.progress-bar-container{width:100%;height:24px;background:#e2e8f0;border-radius:12px;overflow:hidden;box-shadow:inset 0 1px 3px #0000001a}.progress-bar-fill{height:100%;background:linear-gradient(90deg,#059669,#10b981);transition:width .3s ease;box-shadow:0 0 10px #05966980}.progress-org{margin-top:8px;font-size:.85rem;color:#64748b;font-style:italic}.sync-logs{margin-top:16px;background:#1e293b;border-radius:8px;padding:12px;max-height:200px;overflow-y:auto;font-family:Courier New,monospace;font-size:.85rem}.sync-log-entry{padding:4px 0;color:#cbd5e1;display:flex;gap:12px}.sync-log-entry.complete{color:#10b981;font-weight:600}.sync-log-entry.error{color:#f87171}.sync-log-entry.org-complete{color:#6ee7b7}.log-time{color:#64748b;min-width:70px}.log-message{flex:1}.admin-feedback{padding:12px;border-radius:8px;font-weight:600;text-align:center}.admin-feedback.success{background:#d1fae5;color:#047857}@media(max-width:900px){.topbar{height:56px!important;padding-top:6px!important;padding-bottom:6px!important;transition:height .18s ease,padding .18s ease,box-shadow .18s ease;align-items:center!important;box-shadow:0 6px 18px #0206171a!important}.mobile-hamburger,.mobile-search-toggle{top:50%!important;transform:translateY(-50%)!important}.dashboard-container{margin-top:0!important;padding-top:0!important}}@media(max-width:900px){.dashboard-container{background:transparent!important;box-shadow:none!important;border-radius:0!important;padding-left:0!important;padding-right:0!important}}@media(max-width:900px){.mobile-topology-graph{min-height:78vh;max-height:calc(100vh - 88px);overflow:auto;touch-action:pan-x pan-y pinch-zoom;-webkit-overflow-scrolling:touch}.mobile-topology-graph-inner svg{height:74vh!important;width:auto!important;max-width:none!important;display:block;margin:0 auto}}@media(max-width:900px){.mobile-topology-graph{min-height:calc(100vh - 120px)!important;max-height:calc(100vh - 88px)!important;overflow:auto!important;touch-action:pan-x pan-y pinch-zoom!important;-webkit-overflow-scrolling:touch!important;overscroll-behavior:contain!important;z-index:1400!important}.mobile-topology-graph-inner svg{height:calc(100vh - 140px)!important;width:auto!important;max-width:none!important;display:block;margin:0 auto;pointer-events:auto!important}}@media(max-width:900px){.app-sidebar{display:none!important}.mobile-section-tiles-wrapper{background:#fff!important;padding:12px!important;margin:0!important;border-radius:0!important;box-shadow:0 2px 8px #0f172a14!important;position:relative!important;z-index:100!important;width:100%!important;box-sizing:border-box!important}.mobile-section-tiles{gap:12px!important;margin:0!important;padding:0!important}.mobile-section-tile{padding:16px!important;min-height:130px!important;border-radius:16px!important;border:1.5px solid rgba(255,255,255,.1)!important;box-shadow:0 4px 16px #0f172a2e,0 1px 4px #0f172a1a!important}.mobile-section-tile:active{transform:scale(.97)!important;box-shadow:0 2px 8px #0f172a26!important}.mobile-section-tile-icon{width:48px!important;height:48px!important;border-radius:12px!important;background:#ffffff26!important}.mobile-section-tile-icon svg{width:24px!important;height:24px!important}.mobile-device-button{padding:12px 14px!important;border-radius:12px!important;font-size:14px!important}.mobile-device-icon{width:44px!important;height:44px!important}.mobile-device-subline{font-size:11px!important;color:#94a3b8!important;margin-top:4px!important}.tooltip-open .mobile-device-button:before{width:5px!important}.mobile-section-tiles-wrapper:before,.mobile-section-tiles-wrapper:after{display:none!important}.mobile-section-tile-row{display:flex!important;align-items:center!important;gap:12px!important;justify-content:flex-start!important;width:100%!important}.tile-stat{flex:1!important;text-align:center!important}.tile-stat-value{font-size:18px!important;font-weight:800!important;color:#fff!important}.tile-stat-label{font-size:11px!important;opacity:.85!important;color:#fff!important;margin-top:2px!important}.dashboard-container{padding-left:0!important;padding-right:0!important}.mobile-section-tiles-wrapper{padding-left:0!important;padding-right:0!important;margin-left:0!important;margin-right:0!important}#root>div>div:nth-child(3)>main>div.mobile-section-tiles-wrapper>div>div:nth-child(3)>div:nth-child(2)>div:nth-child(3){display:none!important;visibility:hidden!important;opacity:0!important;pointer-events:none!important}.mobile-device-item{margin-bottom:12px}.mobile-device-button{background:#fff;border:1.5px solid #e2e8f0;border-radius:14px;padding:14px 16px;transition:all .2s cubic-bezier(.4,0,.2,1);box-shadow:0 2px 8px #0f172a0a;position:relative;overflow:hidden}.mobile-device-button:active{transform:scale(.98);box-shadow:0 1px 4px #0f172a14;border-color:#cbd5e1}.mobile-device-icon{background:linear-gradient(135deg,#eff6ff,#dbeafe);border:1.5px solid #bfdbfe;border-radius:12px;padding:10px;display:flex;align-items:center;justify-content:center;flex-shrink:0}.mobile-device-icon svg{color:#2563eb;width:22px;height:22px}.mobile-device-subline{font-size:12px;color:#64748b;margin-top:4px;font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mobile-device-button:after{transition:transform .3s cubic-bezier(.4,0,.2,1),opacity .25s ease}.mobile-device-button:active:after{transform:translate(-50%,-50%) scale(1.2)}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes fadeOut{0%{opacity:1}to{opacity:0}}@keyframes fadeInUp{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}@keyframes fadeInDown{0%{opacity:0;transform:translateY(-20px)}to{opacity:1;transform:translateY(0)}}@keyframes slideInLeft{0%{opacity:0;transform:translate(-30px)}to{opacity:1;transform:translate(0)}}@keyframes slideInRight{0%{opacity:0;transform:translate(30px)}to{opacity:1;transform:translate(0)}}@keyframes scaleIn{0%{opacity:0;transform:scale(.9)}to{opacity:1;transform:scale(1)}}@keyframes scaleOut{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.9)}}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes spinSlow{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes pulse{0%,to{opacity:1;transform:scale(1)}50%{opacity:.8;transform:scale(.95)}}@keyframes pulseGlow{0%,to{box-shadow:0 0 5px #3b82f680}50%{box-shadow:0 0 20px #3b82f6cc}}@keyframes shake{0%,to{transform:translate(0)}10%,30%,50%,70%,90%{transform:translate(-5px)}20%,40%,60%,80%{transform:translate(5px)}}@keyframes bounce{0%,20%,50%,80%,to{transform:translateY(0)}40%{transform:translateY(-10px)}60%{transform:translateY(-5px)}}@keyframes shimmer{0%{background-position:-1000px 0}to{background-position:1000px 0}}@keyframes progressBar{0%{transform:translate(-100%)}to{transform:translate(100%)}}.animate-fadeIn{animation:fadeIn .3s ease-out}.animate-fadeOut{animation:fadeOut .3s ease-out}.animate-fadeInUp{animation:fadeInUp .5s ease-out}.animate-fadeInDown{animation:fadeInDown .5s ease-out}.animate-slideInLeft{animation:slideInLeft .4s ease-out}.animate-slideInRight{animation:slideInRight .4s ease-out}.animate-scaleIn{animation:scaleIn .3s ease-out}.animate-scaleOut{animation:scaleOut .3s ease-out}.animate-spin{animation:spin 1s linear infinite}.animate-spinSlow{animation:spinSlow 3s linear infinite}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}.animate-pulseGlow{animation:pulseGlow 2s ease-in-out infinite}.animate-shake{animation:shake .5s ease-in-out}.animate-bounce{animation:bounce 1s ease-in-out infinite}.animate-shimmer{background:linear-gradient(90deg,transparent 0%,rgba(255,255,255,.3) 50%,transparent 100%);background-size:1000px 100%;animation:shimmer 2s infinite}.delay-100{animation-delay:.1s}.delay-200{animation-delay:.2s}.delay-300{animation-delay:.3s}.delay-400{animation-delay:.4s}.delay-500{animation-delay:.5s}.duration-fast{animation-duration:.2s}.duration-normal{animation-duration:.3s}.duration-slow{animation-duration:.5s}.transition-smooth{transition:all .3s cubic-bezier(.4,0,.2,1)}.transition-fast{transition:all .15s ease-in-out}.transition-slow{transition:all .5s ease-in-out}.hover-lift{transition:transform .2s ease,box-shadow .2s ease}.hover-lift:hover{transform:translateY(-4px);box-shadow:0 10px 25px #00000026}.hover-scale{transition:transform .2s ease}.hover-scale:hover{transform:scale(1.05)}.hover-glow{transition:box-shadow .3s ease}.hover-glow:hover{box-shadow:0 0 20px #3b82f680}.loading-overlay{position:fixed;inset:0;background:#ffffffe6;display:flex;align-items:center;justify-content:center;z-index:9999;animation:fadeIn .2s ease-out}.loading-overlay.dark{background:#000000e6}.loading-spinner{width:50px;height:50px;border:4px solid #e5e7eb;border-top-color:#3b82f6;border-radius:50%;animation:spin .8s linear infinite}.stagger-children>*{animation:fadeInUp .4s ease-out backwards}.stagger-children>*:nth-child(1){animation-delay:.05s}.stagger-children>*:nth-child(2){animation-delay:.1s}.stagger-children>*:nth-child(3){animation-delay:.15s}.stagger-children>*:nth-child(4){animation-delay:.2s}.stagger-children>*:nth-child(5){animation-delay:.25s}.stagger-children>*:nth-child(6){animation-delay:.3s}.stagger-children>*:nth-child(7){animation-delay:.35s}.stagger-children>*:nth-child(8){animation-delay:.4s}.gpu-accelerated{will-change:transform;transform:translateZ(0);backface-visibility:hidden}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}.PortMatrixWrapper{display:inline-flex;padding:16px;border:1px solid #e2e8f0;border-radius:12px;background:#f8fafc;margin-bottom:18px}.PortMatrixWrapper--z3{display:flex;justify-content:center;align-items:center;padding:12px;max-width:560px;margin-left:auto;margin-right:auto}.PortMatrixWrapper--z3 .NodePortTable{width:100%;max-width:520px;margin:0 auto;padding:16px 18px 12px}.SwitchBadge{display:inline-flex;align-items:center;justify-content:center;font-size:10px;line-height:1;padding:2px 6px;margin-left:6px;border-radius:6px;background:#f1f5f9;color:#334155;border:1px solid #cbd5e1}.SwitchBadge.active{background:#ecfdf5;border-color:#86efac;color:#166534}.NodePortTableSpan{display:inline-flex}.NodePortTable{display:inline-block;background-color:#ebebeb;border-collapse:initial;border-radius:4px;padding:14px 12px 10px;font-family:Inter,Segoe UI,Roboto,sans-serif;box-sizing:border-box}.NodePortTable tbody tr td{padding:4px 8px}.NodePortTable td{font-size:11px;text-align:center;vertical-align:bottom;color:#2b2f33}.NodePortTable td.label-cell{font-weight:600;color:#4b5563;text-align:left;vertical-align:middle}.NodePortTable td.firstOfGroup{padding-left:2em}.NodePortTable td.lastOfMiniGroup{padding-right:1em}.NodePortTable td.lastOfGroup{padding-right:2em}.NodePortTable svg.rotated{transform:rotate(180deg)}.NodePortTable td.Mx400Module{border-left:1px solid #cfcfd1;min-width:138px;padding:0 1em;vertical-align:middle}.NodePortTable td.Mx400Module.builtin{border:none}.NodePort{background:#d7d7d9;border:1px solid #cfcfd1;display:inline-block;height:25px;width:30px;border-radius:4px}.NodePort.disabled{background:#9ca3af;border:1px solid #6b7280}.NodePort.usb{height:1rem}.NodePort polygon{fill:#4b5563;stroke:none;transition:fill .2s ease}.NodePort.clickable polygon{cursor:pointer}.NodePort.disabled polygon{fill:#6b7280}.NodePort.passthrough{background:#9ca3af;border:1px solid #6b7280}.NodePort.passthrough polygon{fill:#6b7280}.NodePort.has_carrier:not(.disabled){border:2px solid #4ade80}.NodePort.has_carrier:not(.disabled) polygon{fill:#67b346}.NodePort.warning polygon{fill:#f59e0b}.NodePort .poeBolt{fill:#ff0;font-family:"Font Awesome 5 Free",FontAwesome,sans-serif;font-size:13px;text-shadow:-1px 0 #000}.PortMatrixWrapper .NodePort .poeBolt{display:inline-block}.NodePortCell .port-content{display:inline-flex;align-items:center;justify-content:center;gap:6px}.PoEInline{margin-left:6px;font-size:11px;line-height:1;vertical-align:middle;display:inline-block}.PoEInline.active{color:#f59e0b}.PoEInline.inactive{color:#64748b}.port-number-value{display:inline-flex;align-items:center;justify-content:center}.NodePort.rotated .poeBolt{transform:rotate(180deg);transform-origin:center}.NodePortTooltip .tooltip-inner{text-align:left}.NodePortCell{min-width:42px}.NodePortCell svg{display:block;margin:0 auto}.NodePortTable .port-number{font-size:10px;font-weight:600;color:#1f2937}.ManagementPorts{display:flex;flex-direction:column;align-items:center;gap:4px}.ManagementNumbers{display:flex;justify-content:center;gap:6px;font-size:10px;font-weight:600;color:#1f2937}.tooltip-wrapper{position:relative;display:inline-block;z-index:1}.tooltip-wrapper:hover{z-index:10000}.tooltip-content{position:absolute;z-index:99999;background:#0f172af7;color:#fff;padding:6px 18px;border-radius:8px;font-size:13px;line-height:1.5;box-shadow:0 4px 20px #0000004d,0 0 0 1px #ffffff1a;pointer-events:none;animation:tooltipFadeIn .15s ease-out;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);min-width:90px;max-width:220px;white-space:nowrap}.tooltip-top{bottom:calc(100% + 12px);left:50%;transform:translate(-50%)}.tooltip-bottom{top:calc(100% + 12px);left:50%;transform:translate(-50%)}.tooltip-left{right:calc(100% + 12px);top:50%;transform:translateY(-50%)}.tooltip-right{left:calc(100% + 12px);top:50%;transform:translateY(-50%)}.tooltip-top:after{content:"";position:absolute;bottom:-6px;left:50%;transform:translate(-50%);border:6px solid transparent;border-top-color:#0f172af7}.tooltip-bottom:after{content:"";position:absolute;top:-6px;left:50%;transform:translate(-50%);border:6px solid transparent;border-bottom-color:#0f172af7}.tooltip-left:after{content:"";position:absolute;right:-6px;top:50%;transform:translateY(-50%);border:6px solid transparent;border-left-color:#0f172af7}.tooltip-right:after{content:"";position:absolute;left:-6px;top:50%;transform:translateY(-50%);border:6px solid transparent;border-right-color:#0f172af7}@keyframes tooltipFadeIn{0%{opacity:0;transform:translate(-50%) translateY(-4px)}to{opacity:1;transform:translate(-50%) translateY(0)}}.tooltip-content .tooltip-row{display:flex;justify-content:space-between;gap:16px;padding:3px 0;border-bottom:1px solid rgba(255,255,255,.1)}.tooltip-content .tooltip-row:last-child{border-bottom:none;padding-bottom:0}.tooltip-content .tooltip-label{color:#94a3b8;font-size:11px;text-transform:uppercase;letter-spacing:.5px}.tooltip-content .tooltip-value{color:#fff;font-weight:600}.tooltip-content .tooltip-title{font-weight:700;font-size:14px;margin-bottom:8px;border-bottom:1px solid rgba(255,255,255,.2);padding-bottom:6px}.tooltip-content .tooltip-badge{display:inline-block;padding:2px 8px;border-radius:12px;font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.5px}.tooltip-badge.success{background:#059669;color:#fff}.tooltip-badge.warning{background:#f59e0b;color:#fff}.tooltip-badge.error{background:#ef4444;color:#fff}.tooltip-badge.info{background:#3b82f6;color:#fff}.tooltip-modal-content{position:fixed;left:50%;top:50%;transform:translate(-50%,-50%);width:min(720px,calc(100% - 32px));max-height:calc(100vh - 96px);overflow:auto;background:#fff;color:#0f172a;border-radius:14px;padding:14px 16px 18px;box-shadow:0 20px 60px #02061759;z-index:1910;animation:tooltipModalIn .22s cubic-bezier(.2,.9,.2,1) both}.tooltip-modal-backdrop{position:fixed;inset:0;background:#0000006b;z-index:1905}@keyframes tooltipModalIn{0%{transform:translate(-50%,-48%) scale(.99);opacity:0}to{transform:translate(-50%,-50%) scale(1);opacity:1}}.tooltip-modal-content .tooltip-modal-inner{padding-top:8px}.tooltip-modal-content .tooltip-title{color:#0f172a;font-size:16px;margin-bottom:10px;border-bottom:none;padding-bottom:0}.tooltip-modal-content .tooltip-row{display:flex;justify-content:space-between;gap:12px;padding:8px 0;border-bottom:1px solid #eef2f7}.tooltip-modal-content .tooltip-row:last-child{border-bottom:none}.tooltip-modal-content .tooltip-label{color:#64748b;font-size:12px;text-transform:none;letter-spacing:0}.tooltip-modal-content .tooltip-value{color:#0f172a;font-weight:600}.tooltip-modal-content .tooltip-title{color:#0f172a;font-size:16px;margin-bottom:10px;border-bottom:none;padding-bottom:0;font-weight:600}.tooltip-modal-content .tooltip-badge{font-size:12px;padding:4px 8px}.tooltip-modal-content .tooltip-modal-text{white-space:pre-wrap;line-height:1.45;color:#0f172a}.tooltip-modal-close{position:absolute;right:10px;top:8px;background:transparent;border:none;font-size:18px;line-height:1;cursor:pointer;color:#64748b;padding:6px;border-radius:8px}.tooltip-modal-close:focus{outline:none;box-shadow:0 6px 18px #0206171f}.tooltip-modal-close:hover{background:#0000000a;color:#0f172a}@keyframes skeleton-loading{0%{background-position:-200px 0}to{background-position:calc(200px + 100%) 0}}@keyframes skeleton-pulse{0%,to{opacity:1}50%{opacity:.5}}.skeleton{background:linear-gradient(90deg,#f0f0f0,#e0e0e0,#f0f0f0 80px);background-size:200px 100%;animation:skeleton-loading 1.5s ease-in-out infinite;border-radius:4px}.skeleton-text-line{margin-bottom:8px}.skeleton-text-line:last-child{margin-bottom:0}.skeleton-card{background:#fff;border:1px solid #e5e7eb;border-radius:12px;padding:20px;box-shadow:0 1px 3px #0000001a}.skeleton-table{background:#fff;border:1px solid #e5e7eb;border-radius:8px;overflow:hidden}.skeleton-table-header{display:grid;grid-template-columns:repeat(auto-fit,minmax(100px,1fr));gap:16px;padding:16px;background:#f9fafb;border-bottom:1px solid #e5e7eb}.skeleton-table-row{display:grid;grid-template-columns:repeat(auto-fit,minmax(100px,1fr));gap:16px;padding:16px;border-bottom:1px solid #f3f4f6}.skeleton-table-row:last-child{border-bottom:none}.skeleton-device{background:#fff;border:1px solid #e5e7eb;border-radius:8px;padding:16px;margin-bottom:12px;transition:transform .2s ease,box-shadow .2s ease}.skeleton-device:hover{transform:translateY(-2px);box-shadow:0 4px 6px #0000001a}.skeleton-device-list{display:flex;flex-direction:column;gap:12px}.skeleton-chart{background:#fff;border:1px solid #e5e7eb;border-radius:12px;padding:20px}.skeleton-topology{background:#fff;border:1px solid #e5e7eb;border-radius:12px;padding:40px;min-height:400px}.skeleton-dashboard{padding:20px}.skeleton-metric{background:#fff;border:1px solid #e5e7eb;border-radius:8px;padding:16px}.skeleton-card,.skeleton-device,.skeleton-chart{transition:all .3s ease}@media(max-width:768px){.skeleton-card,.skeleton-chart,.skeleton-topology{padding:16px}.skeleton-table-header,.skeleton-table-row{padding:12px;gap:8px}}.loading-overlay{position:fixed;inset:0;display:flex;align-items:center;justify-content:center;z-index:9999;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}.loading-overlay--light{background:#ffffffd9}.loading-overlay--dark{background:#000000d9}.loading-overlay--blur{background:#ffffffb3;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.loading-content{text-align:center}.loading-message{margin-top:16px;font-size:16px;font-weight:500;color:#374151;animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}.loading-overlay--dark .loading-message{color:#e5e7eb}.loading-spinner{border:4px solid #e5e7eb;border-top-color:#3b82f6;border-radius:50%;animation:spin .8s linear infinite;margin:0 auto}.inline-loader{display:inline-flex;align-items:center;gap:8px}.progress-bar-container{display:flex;align-items:center;gap:12px;width:100%}.progress-bar-track{flex:1;height:8px;background:#e5e7eb;border-radius:999px;overflow:hidden;position:relative}.progress-bar-fill{height:100%;background:#3b82f6;border-radius:999px;transition:width .3s ease}.progress-bar-fill--indeterminate{animation:progressBar 1.5s ease-in-out infinite}.progress-percentage{font-size:14px;font-weight:600;color:#374151;min-width:45px;text-align:right}.pulsing-dot{display:inline-block;border-radius:50%;animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite;position:relative}.pulsing-dot:before{content:"";position:absolute;inset:0;border-radius:50%;background:inherit;opacity:.5;animation:pulseRing 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes pulseRing{0%{transform:scale(1);opacity:.5}50%{transform:scale(1.5);opacity:0}to{transform:scale(1);opacity:0}}
