.ports-panel{display:flex;flex-direction:column;gap:1.5rem}.ports-header{align-items:flex-start;display:flex;flex-wrap:wrap;gap:1rem;justify-content:space-between}.ports-header-actions{align-items:center;display:flex;flex-shrink:0;gap:.65rem}.ports-btn-secondary{background:#fff;border:1px solid #d1d5db;border-radius:.5rem;color:#1f2937;cursor:pointer;font-weight:600;padding:.55rem 1.2rem}.ports-btn-secondary:hover{background:#f9fafb;border-color:#9ca3af}.ports-header h1{color:#111827;font-size:1.75rem;font-weight:700;margin:0}.ports-subtitle{color:#4b5563;margin:.35rem 0 0}.ports-header button{align-self:center;background:#2563eb;border:none;border-radius:.5rem;color:#fff;cursor:pointer;font-weight:600;padding:.55rem 1.2rem}.ports-header button:disabled{background:#93c5fd;cursor:not-allowed}.ports-banner{border-radius:.75rem;font-weight:600;padding:.9rem 1.1rem}.ports-banner.warning{background:#fef3c7;border:1px solid #f59e0b;color:#92400e}.ports-content{display:block}.ports-list-section{background:#fff;border-radius:1rem;box-shadow:0 8px 24px #0f172a14;display:flex;flex-direction:column;gap:1rem;padding:1.25rem}.ports-table{border-collapse:collapse;width:100%}.ports-table td,.ports-table th{border-bottom:1px solid #94a3b840;color:#1f2937;font-size:.9rem;padding:.6rem .75rem;text-align:left}.ports-table th{background:#94a3b81f;color:#6b7280;font-size:.75rem;letter-spacing:.05em;text-transform:uppercase}.ports-table-wrap{overflow-x:auto}.ports-status-cell{text-align:center;vertical-align:middle}.ports-status-cell .ports-switch,.ports-switch{display:inline-flex}.ports-switch{align-items:center;cursor:pointer;flex-shrink:0;position:relative;-webkit-user-select:none;user-select:none}.ports-switch input{height:0;margin:0;opacity:0;position:absolute;width:0}.ports-switch-track{background:#d1d5db;border-radius:999px;box-sizing:border-box;display:block;height:1.5rem;position:relative;transition:background .2s ease;width:2.75rem}.ports-switch-thumb{background:#fff;border-radius:50%;box-shadow:0 1px 3px #0f172a40;height:1.25rem;left:2px;position:absolute;top:2px;transition:transform .2s ease;width:1.25rem}.ports-switch input:checked+.ports-switch-track{background:#10b981}.ports-switch input:checked+.ports-switch-track .ports-switch-thumb{transform:translateX(1.25rem)}.ports-switch:has(input:focus-visible) .ports-switch-track{box-shadow:0 0 0 2px #fff,0 0 0 4px #2563eb}.ports-switch input:disabled+.ports-switch-track{cursor:not-allowed;opacity:.55}.ports-switch:has(input:disabled){cursor:not-allowed}.ports-isp-cell{max-width:14rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ports-ts{font-feature-settings:"tnum";color:#64748b;font-size:.85rem;font-variant-numeric:tabular-nums;white-space:nowrap}.ports-actions{display:flex;gap:.5rem;justify-content:flex-end}.ports-actions button{background:#e5e7eb;border:none;border-radius:.5rem;color:#111827;cursor:pointer;font-size:.85rem;padding:.35rem .75rem}.ports-actions button:hover{background:#cbd5f5}.ports-actions .danger{background:#f87171;color:#fff}.ports-actions .danger:hover{background:#dc2626}.ports-placeholder{background:#94a3b81f;border-radius:.75rem;color:#475569;padding:1.5rem 1rem;text-align:center}.ports-placeholder p{margin:0 0 1rem}.ports-placeholder-add{background:#2563eb;border:none;border-radius:.5rem;color:#fff;cursor:pointer;font-weight:600;padding:.5rem 1.1rem}.ports-placeholder-add:hover{background:#1d4ed8}.ports-modal-backdrop{align-items:center;background:#0f172a73;box-sizing:border-box;display:flex;inset:0;justify-content:center;padding:1rem;position:fixed;z-index:1200}.ports-modal{background:#fff;border-radius:1rem;box-shadow:0 25px 50px #0f172a33;display:flex;flex-direction:column;max-height:min(90vh,640px);overflow:auto;width:min(520px,100%)}.ports-modal-header{align-items:center;border-bottom:1px solid #94a3b859;display:flex;flex-shrink:0;gap:1rem;justify-content:space-between;padding:1rem 1.25rem}.ports-modal-header h2{color:#111827;font-size:1.2rem;font-weight:700;margin:0}.ports-modal-close{align-items:center;background:#f3f4f6;border:none;border-radius:.5rem;color:#4b5563;cursor:pointer;display:flex;flex-shrink:0;font-size:1.5rem;height:2.25rem;justify-content:center;line-height:1;width:2.25rem}.ports-modal-close:hover:not(:disabled){background:#e5e7eb;color:#111827}.ports-modal-close:disabled{cursor:not-allowed;opacity:.5}.ports-form-modal{padding:1.25rem}.ports-modal-error{grid-column:1/-1}.ports-form{grid-gap:1rem;display:grid;gap:1rem;grid-template-columns:repeat(auto-fit,minmax(200px,1fr))}.ports-form label{color:#374151;display:flex;flex-direction:column;font-weight:600;gap:.4rem}.ports-form input{border:1px solid #d1d5db;border-radius:.55rem;font-size:.95rem;padding:.5rem .75rem}.ports-form input:disabled{background:#f3f4f6}.ports-form select{background:#fff;border:1px solid #d1d5db;border-radius:.55rem;font-size:.95rem;padding:.5rem .75rem}.ports-form select:disabled{background:#f3f4f6}.ports-form-actions{display:flex;gap:.75rem;margin-top:.25rem}.ports-form-actions button{background:#2563eb;border:none;border-radius:.6rem;color:#fff;cursor:pointer;font-weight:600;padding:.55rem 1.2rem}.ports-form-actions button.secondary{background:#e5e7eb;color:#1f2937}.ports-form-actions button:disabled{background:#93c5fd;cursor:not-allowed}*{box-sizing:border-box;margin:0;padding:0}#root,.App,body,html{height:100%;overflow:hidden}body{background-color:#f8f9fa;color:#333;font-family:Segoe UI,Tahoma,Geneva,Verdana,sans-serif;font-size:12px}.App{display:flex;flex-direction:column;min-height:100vh}.content-area,.main-content{display:flex;flex:1 1;overflow:hidden}.content-area{flex-direction:column;padding:0}.page-content{flex:1 1;overflow-y:auto;padding:2rem}.two-column-layout{grid-gap:2rem;display:grid;gap:2rem;grid-template-columns:minmax(0,1fr) 320px}.panel{background:#fff;border-radius:1rem;box-shadow:0 12px 32px #0f172a14;display:flex;flex-direction:column;gap:1.25rem;padding:1.5rem}.panel.slim{max-width:420px}.panel-header h1,.panel-header h2{color:#0f172a;margin:0}.panel-subtitle{color:#6b7280;margin-top:.4rem}.panel-meta{color:#6b7280;display:flex;font-size:.82rem;gap:1rem}.panel-banner.warning{background:#fef3c7;border:1px solid #f59e0b;border-radius:.75rem;color:#92400e;padding:.9rem 1rem}.panel-table-wrapper{border:1px solid #e2e8f0cc;border-radius:.75rem;overflow:auto}.panel-table{border-collapse:collapse;width:100%}.panel-table td,.panel-table th{border-bottom:1px solid #e2e8f0cc;padding:.75rem .9rem;text-align:left;vertical-align:top}.panel-table th{color:#64748b;font-size:.75rem;letter-spacing:.05em;text-transform:uppercase}.panel-table tbody tr:hover{background:#2563eb0d}.table-primary{color:#0f172a;font-weight:600}.table-secondary{color:#6b7280;font-size:.82rem}.table-actions{display:flex;gap:.5rem}.table-actions button{background:#2563eb;border:none;border-radius:.45rem;color:#fff;cursor:pointer;font-size:.85rem;padding:.35rem .75rem}.table-actions button.danger{background:#ef4444}.panel-placeholder{background:#94a3b82e;border-radius:.75rem;color:#475569;padding:1rem 1.25rem}.panel-form{gap:1rem}.panel-form,.panel-form label{display:flex;flex-direction:column}.panel-form label{color:#1f2937;font-weight:600;gap:.45rem}.panel-form input,.panel-form select,.panel-form textarea{border:1px solid #d1d5db;border-radius:.6rem;font-size:.95rem;padding:.55rem .75rem}.panel-form textarea{resize:vertical}.panel-form label.checkbox{align-items:center;flex-direction:row;font-weight:500;gap:.6rem}.panel-form-actions{display:flex;gap:.75rem}.panel-form-actions button{background:#2563eb;border:none;border-radius:.6rem;color:#fff;cursor:pointer;font-weight:600;padding:.55rem 1.2rem}.panel-form-actions button.secondary{background:#e2e8f0;color:#1f2937}.side-nav{background:#fff;border-right:1px solid #e0e0e0;box-shadow:2px 0 5px #0000001a;display:flex;flex-direction:column;flex-shrink:0;width:200px}.nav-header{background:#f8f9fa;border-bottom:1px solid #e0e0e0;padding:1rem}.nav-header h3{color:#495057;font-size:.9rem;font-weight:600;margin:0}.nav-links{flex:1 1;list-style:none;padding:.5rem 0}.nav-links>li{margin:0}.nav-section-label.parent{color:#1f2937;display:block;font-size:.8rem;font-weight:600;letter-spacing:.1em;padding:.5rem 1rem .25rem;text-transform:uppercase}.nav-sub-links{border-left:1px solid #e5e7eb;list-style:none;margin:0 0 .25rem 1.25rem;padding:0 0 0 .5rem}.nav-sub-links li{margin:0}.nav-sub-links .nav-link{font-size:.9rem;padding:.5rem 1rem .5rem 1.5rem}.alert{border-radius:6px;margin-bottom:1rem;padding:.75rem 1rem}.alert-error{background:#fee2e2;border:1px solid #fecaca;color:#b91c1c}.nav-link{align-items:center;border-left:3px solid #0000;color:#495057;display:flex;font-weight:500;gap:.75rem;padding:.75rem 1rem;text-decoration:none;transition:all .3s ease}.nav-link.active,.nav-link:hover{background:#f8f9fa;border-left-color:#007bff;color:#007bff}.nav-link.active{background:#e7f3ff}.nav-icon{font-size:1rem;text-align:center;width:20px}.bandwidth-dashboard,.history-panel,.status-table-container,.table-container{display:flex;flex:1 1;flex-direction:column;overflow:hidden;padding:1rem}.status-table-container{background:#f8f9fa}.bandwidth-dashboard,.dashboard-header,.history-panel,.panel-header,.table-header{background:#fff;border-radius:8px;box-shadow:0 2px 4px #0000001a}.dashboard-header,.panel-header,.table-header{align-items:center;display:flex;flex-shrink:0;flex-wrap:wrap;gap:1rem;justify-content:space-between;margin-bottom:1rem;padding:1rem}.dashboard-header h1,.panel-header h2,.table-header h2{color:#2c3e50;font-size:1.5rem;font-weight:600;margin:0}.dashboard-header{flex-direction:column;gap:.5rem;text-align:center}.dashboard-header p{color:#666;margin:0}.controls{flex-wrap:wrap;gap:1.5rem}.control-group,.controls{align-items:center;display:flex}.control-group{gap:1rem}.column-width-group{flex-wrap:wrap;margin-top:.5rem}.control-item{align-items:center;display:flex;gap:.5rem}.control-item label{color:#495057;font-size:.9rem;font-weight:600;white-space:nowrap}.control-item select{background:#fff;max-width:250px;overflow:hidden;padding:.5rem .75rem;text-overflow:ellipsis;transition:border-color .3s ease}.control-item input[type=number],.control-item select{border:2px solid #e9ecef;border-radius:6px;font-size:.9rem}.control-item input[type=number]{padding:.4rem .5rem;width:80px}.control-item input[type=number]:focus{border-color:#007bff;outline:none}.control-item .control-value{color:#6c757d;font-size:.8rem}.control-item select:focus{border-color:#007bff;outline:none}.control-item select option{font-size:.85rem;max-width:250px;overflow:hidden;padding:.5rem;text-overflow:ellipsis;white-space:nowrap}.btn{background:#007bff;border:none;border-radius:6px;color:#fff;cursor:pointer;display:inline-block;font-size:.9rem;font-weight:600;text-align:center;text-decoration:none;transition:all .3s ease;white-space:nowrap}.btn:hover:not(:disabled){background:#0056b3;box-shadow:0 2px 4px #0003;transform:translateY(-1px)}.btn:disabled{background:#6c757d;box-shadow:none;cursor:not-allowed;transform:none}.btn-primary{background:#007bff;padding:.75rem 1.5rem}.btn-success{background:#28a745;padding:.75rem 1.5rem}.btn-success:hover:not(:disabled){background:#218838}.btn-refresh{background:#007bff;padding:.75rem 1.5rem}.status-info{color:#666;display:flex;flex-direction:column;font-size:.8rem;gap:.25rem;line-height:1.2}.error-message{background:#fff3cd;border:1px solid #ffeaa7;border-radius:6px;color:#856404;flex-shrink:0;font-size:.9rem;margin-bottom:1rem;padding:1rem 2.5rem 1rem 1rem;position:relative}.error-close{align-items:center;background:none;border:none;color:#856404;cursor:pointer;display:flex;font-size:1.2rem;height:20px;justify-content:center;padding:0;position:absolute;right:.5rem;top:.5rem;width:20px}.error-close:hover{background:#ffeaa7;border-radius:50%}.table-scroll-container{background:#fff;border-radius:8px;box-shadow:0 2px 4px #0000001a;flex:1 1;overflow:auto;position:relative}.rtt-table{border-collapse:collapse;font-size:.8rem;min-width:-webkit-min-content;min-width:min-content;width:100%}.rtt-table th{background:#f8f9fa;border:1px solid #dee2e6;border-left:none;box-shadow:0 1px 2px #0000001a;color:#495057;font-weight:600;min-width:60px;overflow:hidden;padding:.75rem .5rem;position:-webkit-sticky;position:sticky;text-align:center;text-overflow:ellipsis;top:0;white-space:nowrap;z-index:100}.rtt-table th:first-child{border-left:1px solid #dee2e6}.fixed-column{background:#e9ecef!important;box-shadow:2px 0 2px #0000001a;position:-webkit-sticky;position:sticky;z-index:150}.number-col{max-width:60px;min-width:60px;z-index:200}.number-col,.target-col{border-left:none!important;border-right:2px solid #dee2e6!important}.target-col{z-index:180}.company-col{z-index:170}.avg-col,.company-col{border-left:none!important;border-right:2px solid #dee2e6!important}.avg-col{z-index:160}.rtt-table td{border:1px solid #dee2e6;border-left:none;font-family:Courier New,monospace;font-weight:600;height:40px;min-width:60px;overflow:hidden;padding:.5rem .4rem;text-align:center;text-overflow:ellipsis;white-space:nowrap}.rtt-table td:first-child{border-left:1px solid #dee2e6}.row-number{background:#f8f9fa!important;border-left:none!important;border-right:2px solid #dee2e6!important;box-shadow:2px 0 2px #0000001a;max-width:60px;min-width:60px;position:-webkit-sticky;position:sticky;z-index:120}.target-cell{box-shadow:2px 0 2px #0000001a;z-index:110}.company-cell,.target-cell{background:#f8f9fa;border-left:none!important;border-right:2px solid #dee2e6!important;padding:.5rem .75rem!important;position:-webkit-sticky;position:sticky;text-align:left}.company-cell{z-index:105}.avg-rtt{background:#f8f9fa;border-left:none!important;border-right:2px solid #dee2e6!important;position:-webkit-sticky;position:sticky;z-index:104}.server-ping-flat-table{border-collapse:collapse;width:100%}.server-ping-th-sort-wrap{padding:.5rem .4rem;vertical-align:bottom}.server-ping-th-sort{align-items:center;background:#0000;border:none;border-radius:4px;color:#2c3e50;cursor:pointer;display:inline-flex;font:inherit;font-weight:600;gap:.15rem;margin:0;padding:.25rem .15rem;text-align:inherit;width:100%}.server-ping-th-sort:hover{background:#007bff14;color:#0056b3}.server-ping-sort-indicator{color:#007bff;flex-shrink:0;font-size:.65rem}.server-ping-ip-edit{font-family:ui-monospace,Cascadia Code,Courier New,monospace;font-size:.85rem;max-width:14rem}.server-ping-readonly-text{color:#212529;font-size:.9rem;line-height:1.4}.server-ping-ip-plain{color:#212529;font-family:ui-monospace,Cascadia Code,Courier New,monospace;font-size:.85rem;word-break:break-all}.server-ping-actions-cell{padding:.35rem .5rem;vertical-align:middle;white-space:nowrap}.server-ping-icon-btn{align-items:center;background:#0000;border:none;border-radius:6px;color:#495057;cursor:pointer;display:inline-flex;height:2.25rem;justify-content:center;margin-right:.2rem;padding:0;transition:color .15s ease,background .15s ease;width:2.25rem}.server-ping-icon-btn:last-child{margin-right:0}.server-ping-icon-btn:hover:not(:disabled){background:#e9ecef;color:#212529}.server-ping-icon-btn:disabled{cursor:not-allowed;opacity:.35}.server-ping-icon-save{color:#198754}.server-ping-icon-save:hover:not(:disabled){background:#d1e7dd;color:#0f5132}.server-ping-icon-danger{color:#9ca3af}.server-ping-icon-danger:hover:not(:disabled){background:#fee2e2;color:#dc2626}.server-ping-group-meta{color:#6c757d;font-size:.85rem}.server-ping-header-row{align-items:center;display:flex;flex-wrap:wrap;gap:1rem;justify-content:space-between;margin-bottom:.5rem}.server-ping-header-row h2{margin:0}.server-ping-modal-backdrop{align-items:center;background:#0f172a73;box-sizing:border-box;display:flex;inset:0;justify-content:center;padding:1rem;position:fixed;z-index:1200}.server-ping-modal{background:#fff;border-radius:12px;box-shadow:0 25px 50px #0f172a33;max-height:min(90vh,560px);overflow:auto;width:min(440px,100%)}.server-ping-modal-header{align-items:center;border-bottom:1px solid #e9ecef;display:flex;gap:1rem;justify-content:space-between;padding:1rem 1.25rem}.server-ping-modal-header h2{color:#212529;font-size:1.15rem;font-weight:700;margin:0}.server-ping-modal-close{align-items:center;background:#f1f3f5;border:none;border-radius:8px;color:#495057;cursor:pointer;display:flex;flex-shrink:0;font-size:1.5rem;height:2.25rem;justify-content:center;line-height:1;width:2.25rem}.server-ping-modal-close:hover:not(:disabled){background:#e9ecef;color:#212529}.server-ping-modal-close:disabled{cursor:not-allowed;opacity:.5}.server-ping-modal-form{display:flex;flex-direction:column;gap:1rem;padding:1.25rem}.server-ping-modal-geo-hint{background:#fff3cd;border:1px solid #ffc107;border-radius:6px;color:#856404;font-size:.82rem;margin:0;padding:.5rem .65rem}.server-ping-modal-field{display:flex;flex-direction:column;gap:.35rem}.server-ping-modal-field label{color:#495057;font-size:.88rem;font-weight:600}.server-ping-modal-field input,.server-ping-modal-field select{border:1px solid #ced4da;border-radius:6px;font-size:.9rem;padding:.5rem .65rem}.server-ping-modal-field input:focus,.server-ping-modal-field select:focus{border-color:#80bdff;box-shadow:0 0 0 .15rem #007bff33;outline:none}.server-ping-modal-field input#spPort{max-width:8rem}.server-ping-modal-actions{border-top:1px solid #e9ecef;display:flex;gap:.65rem;justify-content:flex-end;margin-top:.25rem;padding-top:.5rem}.server-ping-modal-btn-cancel{background:#6c757d;padding:.65rem 1.25rem}.server-ping-modal-btn-cancel:hover:not(:disabled){background:#5a6268}.server-ping-status-pill{border-radius:12px;color:#fff;display:inline-block;font-size:.75rem;font-weight:600;padding:.25rem .75rem}.server-ping-ip-cell{align-items:center;display:flex;gap:.5rem;justify-content:space-between;padding:.75rem .5rem;text-align:left;vertical-align:middle}.server-ping-ip-text{font-family:monospace;font-size:.85rem;min-width:0;word-break:break-all}.server-ping-remove-icon{align-items:center;background:#0000;border:none;border-radius:6px;color:#9ca3af;cursor:pointer;display:inline-flex;flex-shrink:0;height:2rem;justify-content:center;padding:0;transition:color .15s ease,background .15s ease;width:2rem}.server-ping-table-input{border:1px solid #ced4da;border-radius:4px;box-sizing:border-box;font-size:.9rem;max-width:12rem;padding:.35rem .5rem;width:100%}.server-ping-table-input:focus{border-color:#80bdff;box-shadow:0 0 0 .15rem #007bff33;outline:none}.server-ping-port-input{max-width:4.5rem;width:4.5rem}.server-ping-remove-icon:hover:not(:disabled){background:#fee2e2;color:#dc2626}.server-ping-remove-icon:disabled{cursor:not-allowed;opacity:.4}.data-cell{background:#f8fff9;color:#28a745;font-size:.8rem;transition:background-color .2s ease}.data-cell.empty{background-color:#f8f9fa;color:#6c757d;font-style:italic}.data-cell.high-rtt{background-color:#ffebee!important;color:#c62828!important;font-weight:700}.data-cell.status-success{background:#f0fff0;color:#28a745}.data-cell.status-error,.data-cell.status-failed,.data-cell.status-proxy_rejected,.data-cell.status-timeout{background:#6b7280!important;color:#f1f1f1!important}.data-cell.status-pending{background:#fffbf0;color:#ffc107}.target-content{align-items:flex-start;display:flex;flex-direction:column;gap:6px;justify-content:center}.target-main,.target-with-info{display:flex;flex-direction:column;gap:2px}.target-ip{color:#374151;flex-shrink:0;font-family:Courier New,monospace;font-size:.8rem;font-weight:600}.target-meta{color:#6b7280;font-size:.7rem;line-height:1.2}.status-group-row td{left:0;position:-webkit-sticky;position:sticky;z-index:4}.status-group-cell{background:#f3f4f6;border-bottom:1px solid #d1d5db;border-top:1px solid #d1d5db;padding:0!important}.status-group-toggle{align-items:center;background:#0000;border:none;color:#374151;cursor:pointer;display:flex;font-weight:600;gap:.6rem;padding:.45rem .75rem;text-align:left;width:100%}.status-group-toggle:hover{background:#e5e7eb}.status-group-chevron{color:#4b5563;font-size:.75rem;width:14px}.status-group-name{font-size:.85rem}.status-group-meta{color:#6b7280;font-size:.78rem;font-weight:500}.status-table-container .rtt-table td{font-size:.72rem;height:28px;padding:.25rem .3rem}.status-table-container .company-cell,.status-table-container .target-cell{padding:.2rem .45rem!important}.status-table-container .target-content{gap:2px}.status-table-container .target-ip{font-size:.72rem}.status-table-container .target-meta{font-size:.64rem;line-height:1.1}.target-company{color:#6b7280;flex-grow:1;font-size:.75rem;font-weight:600;max-width:120px;overflow:hidden;text-align:right;text-overflow:ellipsis;white-space:nowrap}.target-ip-only{font-family:Courier New,monospace;font-size:.85rem;font-weight:600}.target-details{color:#6b7280;font-size:.7rem}.company{color:#374151;font-weight:600}.chart-area{background:#fff;border-radius:8px;flex:1 1;overflow:hidden}.chart-area,.heatmap-container{display:flex;flex-direction:column;min-height:0}.heatmap-container{flex:1 1}.heatmap-scroll-container{background:#fff;border:1px solid #e5e7eb;border-radius:8px;flex:1 1;min-height:500px;overflow:auto}.heatmap-wrapper{display:flex;min-width:-webkit-fit-content;min-width:fit-content;position:relative}.ip-panel{background:#f8f9fa;border-right:2px solid #e5e7eb;display:flex;flex-direction:column;left:0;position:-webkit-sticky;position:sticky;width:220px;z-index:10}.ip-panel-header{align-items:center;background:#f1f5f9;border-bottom:1px solid #e5e7eb;color:#374151;display:flex;flex-shrink:0;font-size:12px;font-weight:600;height:60px;justify-content:center;padding:0 15px}.ip-panel-content{flex:1 1;overflow:hidden}.ip-row{align-items:center;background:#fff;border-bottom:1px solid #f1f5f9;display:grid;font-size:10px;grid-template-columns:1fr auto;height:20px;overflow:hidden;padding:0 10px;white-space:nowrap}.ip-row:nth-child(2n){background:#fafafa}.ip-info{align-items:center;display:flex;gap:6px;justify-content:space-between;overflow:hidden;width:100%}.ip-address{color:#374151;cursor:text;flex-shrink:0;font-family:Courier New,monospace;font-size:10px;font-weight:600;-webkit-user-select:text;user-select:text}.ip-company{flex:1 1;overflow:hidden;text-align:left;text-overflow:ellipsis;white-space:nowrap}.ip-company,.ip-rtt{color:#6b7280;font-size:9px}.ip-rtt{flex-shrink:0;font-weight:600;min-width:35px;text-align:right}.heatmap-content{flex:1 1;min-width:800px;position:relative}.heatmap-chart{height:100%;width:100%}.heatmap-cell{rx:2;cursor:pointer;transition:all .2s ease}.heatmap-cell:hover{stroke:#000;stroke-width:1.5}.charts-grid{grid-template-columns:1fr}.chart-wrapper{box-shadow:0 2px 10px #0000001a;height:400px;padding:20px;width:100%}.chart-container{height:100%;position:relative}.chart-loading{color:#666;font-size:16px}.loading-more,.no-more-data{color:#666;font-size:16px;padding:20px;text-align:center}.pagination-container{background:#f8f9fa;border-radius:6px;justify-content:space-between;margin:1rem 0;padding:.75rem}.pagination-container,.pagination-controls{align-items:center;display:flex;flex-wrap:wrap;gap:1rem}.pagination-buttons{align-items:center;display:flex;gap:.5rem}.pagination-btn{background:#fff;border:1px solid #d1d5db;border-radius:4px;color:#374151;cursor:pointer;font-size:.9rem;min-width:80px;padding:.375rem .75rem}.pagination-btn:disabled{background:#f3f4f6;color:#9ca3af;cursor:not-allowed}.pagination-info{color:#374151;font-size:.9rem;font-weight:500;min-width:100px;text-align:center}.pagination-stats{color:#6b7280;font-size:.9rem}.panel-footer,.table-footer{background:#fff;border-radius:6px;box-shadow:0 2px 4px #0000001a;color:#666;font-size:.9rem;margin-top:1rem;padding:1rem;text-align:center}.panel-footer{align-items:center;display:flex;flex-shrink:0;height:60px;overflow:hidden}.loading,.no-data{color:#6c757d;font-size:1rem;font-style:italic;padding:3rem;text-align:center}.loading{font-size:1.1rem}.not-found{color:#dc3545;font-size:1.2rem;padding:3rem;text-align:center}.heatmap-scroll-container::-webkit-scrollbar,.table-scroll-container::-webkit-scrollbar{height:12px;width:12px}.heatmap-scroll-container::-webkit-scrollbar-track,.table-scroll-container::-webkit-scrollbar-track{background:#f1f5f9;border-radius:6px}.heatmap-scroll-container::-webkit-scrollbar-thumb,.table-scroll-container::-webkit-scrollbar-thumb{background:#cbd5e1;border:2px solid #f1f5f9;border-radius:6px}.heatmap-scroll-container::-webkit-scrollbar-thumb:hover,.table-scroll-container::-webkit-scrollbar-thumb:hover{background:#94a3b8}@media (min-width:1200px){.charts-grid{grid-template-columns:1fr 1fr}.ip-panel{width:200px}}@media (min-width:768px){.charts-grid{grid-template-columns:1fr 1fr}}@media (min-width:1200px){.charts-grid{grid-template-columns:1fr 1fr 1fr 1fr}}@media (max-width:768px){.main-content{flex-direction:column}.side-nav{border-bottom:1px solid #e0e0e0;border-right:none;height:auto;width:100%}.nav-links{display:flex;padding:0}.nav-link{border-bottom:3px solid #0000;border-left:none;flex:1 1;justify-content:center}.nav-link.active,.nav-link:hover{border-bottom-color:#007bff;border-left:none}.controls,.panel-header,.table-header{align-items:flex-start;flex-direction:column}.controls{width:100%}.control-group{justify-content:space-between;width:100%}.control-item select{min-width:150px}.status-info{flex-direction:row;justify-content:space-between;width:100%}.rtt-table{font-size:.7rem}.rtt-table td,.rtt-table th{min-width:50px;padding:.4rem .3rem}.number-col{max-width:50px;min-width:50px}.target-col{left:50px;max-width:140px;min-width:140px}.row-number{max-width:50px;min-width:50px}.target-cell{left:50px;max-width:140px;min-width:140px}.pagination-container{align-items:flex-start;flex-direction:column;gap:1rem}.ip-panel{width:180px}}.dashboard-info{background:#e8f5e8;border-radius:4px;color:#2d5016;font-size:14px;margin-top:10px;padding:10px}.dashboard-info p{margin:5px 0}.charts-container{flex:1 1;overflow-y:auto}.load-more-container{background:#fff;border-radius:8px}.load-more-hint{color:#666;font-size:14px;margin-top:10px}.loading-more .spinner{font-size:24px;margin-bottom:10px}.bandwidth-dashboard{display:flex;flex-direction:column;height:100%;padding-bottom:1rem}.load-more-container{margin:20px 0;padding:20px;text-align:center}.load-more-btn{background:#007bff;border:none;border-radius:6px;color:#fff;cursor:pointer;font-size:16px;padding:12px 24px;transition:background .3s}.load-more-btn:hover:not(:disabled){background:#0056b3}.load-more-btn:disabled{background:#6c757d;cursor:not-allowed}.charts-grid{min-height:0}.chart-wrapper{height:100%;position:relative;z-index:1}.chart-header{flex-wrap:wrap;gap:10px;margin-bottom:15px}.chart-title-block{display:flex;flex-direction:column;gap:4px}.chart-subtitle{color:#6b7280;font-size:.75em}.live-badge{color:green;font-size:.9em;font-weight:700}.avg-bandwidth{color:#666;font-size:.8em}.date-range-picker{gap:20px}.date-range-picker label{font-weight:600}.scroll-down-btn{background:#007bff;border-radius:50%;bottom:20px;box-shadow:0 2px 10px #0000004d;font-size:20px;height:50px;position:fixed;right:20px;width:50px;z-index:9999}.scroll-down-btn:hover{background:#0056b3}.bandwidth-dashboard{height:100vh;overflow-y:auto;padding:20px}.dashboard-header{border-bottom:1px solid #e5e7eb;margin-bottom:20px;padding-bottom:15px}.dashboard-header h1{color:#1f2937;margin:0 0 5px}.dashboard-header p{color:#6b7280;margin:0 0 15px}.date-range-picker{align-items:center;display:flex;flex-wrap:wrap;gap:15px}.date-range-picker label{align-items:center;color:#374151;display:flex;font-size:14px;gap:5px}.date-range-picker input{border:1px solid #d1d5db;border-radius:4px;font-size:14px;padding:6px 10px}.charts-grid{grid-gap:20px;display:grid;gap:20px;grid-template-columns:repeat(auto-fill,minmax(500px,1fr));margin-bottom:20px}.chart-wrapper{background:#fff;border:1px solid #e5e7eb;border-radius:8px;box-shadow:0 1px 3px #0000001a;overflow:hidden}.chart-container{background:#fff;display:flex;flex-direction:column;height:400px}.chart-header{align-items:center;background:#f8f9fa;border-bottom:1px solid #e5e7eb;display:flex;flex-shrink:0;justify-content:space-between;padding:12px 15px}.live-badge{color:#22c55e;font-size:12px;font-weight:600}.avg-bandwidth{color:#6b7280;font-size:12px;font-weight:500}.chart-wrapper{flex:1 1;min-height:0;padding:10px 15px 15px}.chartjs-render-monitor{max-height:100%!important}.chart-loading{align-items:center;color:#6b7280;display:flex;font-style:italic;height:100%;justify-content:center}.loading-more{color:#6b7280;padding:20px;text-align:center}.no-data,.no-more-data{color:#6b7280;font-style:italic;padding:40px 20px;text-align:center}.scroll-down-btn{background:#3b82f6;border:none;border-radius:6px;color:#fff;cursor:pointer;display:block;font-size:16px;margin:20px auto;padding:10px 20px}.scroll-down-btn:hover{background:#2563eb}.scroll-down-btn:disabled{background:#9ca3af;cursor:not-allowed}@media (max-width:768px){.charts-grid{grid-template-columns:1fr}.chart-container{height:350px}.date-range-picker{align-items:flex-start;flex-direction:column}}.data-cell.dynamic{color:#fff;transition:background-color .3s ease,color .3s ease}.data-cell.rtt-0-100{background-color:#00c853;color:#fff}.data-cell.rtt-100-300{background-color:#aeea00;color:#212121}.data-cell.rtt-300-500{background-color:#ffd600;color:#212121}.data-cell.rtt-500-700{background-color:#ff9100;color:#212121}.data-cell.rtt-700-1000{background-color:#ff5252;color:#fff}.data-cell.rtt-1000-plus{background-color:#b71c1c;color:#fff}.data-cell.error-0-20{background-color:#212121;color:#e0e0e0}.data-cell.error-20-40{background-color:#424242;color:#e0e0e0}.data-cell.error-40-60{background-color:#616161;color:#f5f5f5}.data-cell.error-60-80{background-color:#9e9e9e;color:#fff}.data-cell.error-80-100{background-color:#cfcfcf;color:#212121}.data-cell{transition:background-color .4s ease,color .3s ease}
/*# sourceMappingURL=main.2427bbf2.css.map*/