*{margin:0;padding:0;box-sizing:border-box}:root{--bg-primary: #0a0e14;--bg-secondary: #1a1f2e;--bg-card: #1e2433;--bg-sidebar: #111620;--text-primary: #e6edf3;--text-secondary: #8b949e;--text-muted: #484f58;--border-color: #30363d;--accent-blue: #58a6ff;--accent-green: #3fb950;--accent-red: #f85149;--accent-yellow: #d29922;--accent-purple: #a371f7;--admin-down-bg: #21262d;--admin-down-border: #484f58;--sidebar-width: 280px}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif;background:var(--bg-primary);color:var(--text-primary);min-height:100vh}.app-shell{display:flex;min-height:100vh}.sidebar{width:var(--sidebar-width);min-width:var(--sidebar-width);background:var(--bg-sidebar);border-right:1px solid var(--border-color);display:flex;flex-direction:column;position:fixed;top:0;left:0;height:100vh;z-index:10}.sidebar-header{padding:16px 16px 12px;border-bottom:1px solid var(--border-color);display:flex;flex-direction:column;gap:8px}.sidebar-title{font-size:.75rem;font-weight:700;text-transform:uppercase;letter-spacing:.08em;color:var(--text-secondary)}.sidebar-header .connection-status{display:flex;align-items:center;gap:6px}.sidebar-header .status-label{font-size:.75rem;color:var(--text-secondary)}.sidebar-search{padding:12px 12px 8px}.search-input{width:100%;background:var(--bg-secondary);border:1px solid var(--border-color);border-radius:6px;padding:7px 10px;font-size:.8125rem;color:var(--text-primary);outline:none;transition:border-color .15s}.search-input::placeholder{color:var(--text-muted)}.search-input:focus{border-color:var(--accent-blue)}.device-list{flex:1;overflow-y:auto;padding:4px 8px}.device-list::-webkit-scrollbar{width:4px}.device-list::-webkit-scrollbar-track{background:transparent}.device-list::-webkit-scrollbar-thumb{background:var(--border-color);border-radius:2px}.device-list-empty{padding:24px 8px;text-align:center;font-size:.8125rem;color:var(--text-muted)}.device-item{width:100%;display:flex;align-items:center;gap:10px;padding:9px 10px;border-radius:6px;border:none;background:transparent;color:var(--text-primary);cursor:pointer;text-align:left;font-size:.8125rem;transition:background .12s;margin-bottom:2px}.device-item:hover{background:var(--bg-secondary)}.device-item.active{background:var(--bg-card);border:1px solid var(--accent-blue)}.device-item.active .device-name{color:var(--accent-blue)}.device-icon{font-size:1rem;flex-shrink:0;line-height:1}.device-name{flex:1;font-family:SF Mono,Fira Code,monospace;font-size:.75rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.device-port-count{font-size:.625rem;color:var(--text-muted);flex-shrink:0}.sidebar-footer{padding:10px 16px;border-top:1px solid var(--border-color)}.fleet-count{font-size:.6875rem;color:var(--text-muted)}.main-content{margin-left:var(--sidebar-width);flex:1;display:flex;flex-direction:column;min-height:100vh}.app-header{display:flex;justify-content:space-between;align-items:flex-start;padding:20px 28px 16px;border-bottom:1px solid var(--border-color);background:var(--bg-secondary)}.header-left{display:flex;flex-direction:column;gap:4px}.app-title{font-size:1.375rem;font-weight:600;color:var(--text-primary)}.header-device-info{font-size:.8125rem;color:var(--text-secondary)}.hostname{color:var(--accent-blue);font-family:SF Mono,Fira Code,monospace}.header-right{display:flex;align-items:center}.last-update{font-size:.8125rem;color:var(--text-secondary)}.content-body{padding:20px 28px;flex:1}.connection-status{display:flex;align-items:center;gap:8px;font-size:.875rem}.status-dot{width:8px;height:8px;border-radius:50%;background:var(--accent-green);animation:pulse 2s infinite;flex-shrink:0}.status-dot.disconnected{background:var(--accent-red);animation:none}.status-dot.reconnecting{background:var(--accent-yellow);animation:blink .5s infinite}@keyframes pulse{0%,to{opacity:1}50%{opacity:.5}}@keyframes blink{0%,to{opacity:1}50%{opacity:.3}}.port-grid-container{background:var(--bg-secondary);border:1px solid var(--border-color);border-radius:8px;padding:20px;margin-bottom:20px}.port-grid-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:16px}.port-grid-title{font-size:1.125rem;font-weight:600}.port-grid-stats{color:var(--text-secondary);font-size:.875rem}.port-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(100px,1fr));gap:12px}.port-card{background:var(--bg-card);border:2px solid var(--border-color);border-radius:6px;padding:12px;cursor:pointer;transition:border-color .15s ease,transform .15s ease,box-shadow .15s ease;position:relative;min-height:90px;display:flex;flex-direction:column;gap:6px}.port-card:hover{border-color:var(--accent-blue);transform:translateY(-2px);box-shadow:0 4px 12px #0000004d}.port-card.admin-down{background:var(--admin-down-bg);border-color:var(--admin-down-border);border-width:3px;opacity:.6}.port-card.admin-down:hover{border-color:var(--accent-red);opacity:.85}.port-card-header{display:flex;justify-content:space-between;align-items:flex-start}.port-name{font-size:.6875rem;font-family:SF Mono,Fira Code,monospace;color:var(--text-primary);word-break:break-all;line-height:1.2}.port-description{font-size:.625rem;color:var(--text-secondary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.port-vlans{display:flex;flex-wrap:wrap;gap:3px}.vlan-badge{font-size:.5rem;padding:1px 4px;border-radius:2px;font-weight:700;color:#000;line-height:1.4}.port-card-footer{display:flex;justify-content:space-between;align-items:center;margin-top:auto}.port-status{font-size:.5625rem;padding:2px 5px;border-radius:3px;font-weight:600;text-transform:uppercase}.port-status.up{background:#3fb95033;color:var(--accent-green)}.port-status.down{background:#f8514933;color:var(--accent-red)}.poe-indicator{position:absolute;top:5px;right:5px;width:14px;height:14px;color:var(--accent-yellow);filter:drop-shadow(0 0 3px rgba(210,153,34,.6))}.lag-indicator{color:var(--accent-purple);display:inline-flex;align-items:center}.tooltip{position:fixed;background:var(--bg-secondary);border:1px solid var(--accent-blue);border-radius:6px;padding:12px;z-index:1000;width:280px;box-shadow:0 8px 24px #00000080;pointer-events:none}.tooltip-title{font-weight:700;margin-bottom:10px;color:var(--accent-blue);font-family:SF Mono,Fira Code,monospace;font-size:.8125rem;border-bottom:1px solid var(--border-color);padding-bottom:6px}.tooltip-row{display:flex;justify-content:space-between;align-items:baseline;gap:12px;font-size:.75rem;margin-bottom:5px}.tooltip-label{color:var(--text-secondary);flex-shrink:0}.tooltip-value{color:var(--text-primary);font-family:SF Mono,Fira Code,monospace;font-size:.6875rem;text-align:right;word-break:break-all}.legend-container{background:var(--bg-secondary);border:1px solid var(--border-color);border-radius:8px;padding:16px 20px}.legend-title{font-size:.875rem;font-weight:600;margin-bottom:12px;color:var(--text-secondary)}.legend-items{display:flex;flex-wrap:wrap;gap:16px}.legend-item{display:flex;align-items:center;gap:8px}.legend-color{width:20px;height:20px;border-radius:4px;border:1px solid var(--border-color);flex-shrink:0}.legend-label{font-size:.8125rem}.legend-vlan-id{color:var(--text-secondary);font-size:.6875rem;font-family:SF Mono,Fira Code,monospace;margin-left:4px}.empty-state{text-align:center;padding:80px 20px;color:var(--text-secondary);display:flex;flex-direction:column;align-items:center;gap:12px}.empty-state-icon{font-size:3.5rem;margin-bottom:8px;opacity:.6}.empty-state-title{font-size:1.25rem;font-weight:600;color:var(--text-primary)}.empty-state-subtitle{font-size:.875rem;color:var(--text-secondary);max-width:360px}
