/* ── Topbar (replaces the old header-bar + ip-bar) ──────────────── */ .topbar { display: flex; align-items: center; gap: 14px; padding: 13px 26px; background: var(--surface); border-bottom: 1px solid var(--border); flex-shrink: 0; position: relative; z-index: 5; } .page-title { font-size: 1.02rem; font-weight: 800; letter-spacing: -0.01em; white-space: nowrap; } /* ── Search ─────────────────────────────────────────────────────── */ .search-box { display: flex; align-items: center; gap: 9px; background: var(--card); border: 1px solid var(--border); border-radius: 99px; padding: 8px 16px; flex: 1; max-width: 400px; min-width: 140px; margin-left: 18px; color: var(--text-3); transition: border-color 0.15s, box-shadow 0.15s; } .search-box:focus-within { border-color: rgba(66, 243, 154, 0.35); box-shadow: 0 0 0 3px rgba(66, 243, 154, 0.09); } .search-box svg { width: 15px; height: 15px; flex-shrink: 0; } .search-box input { background: none; border: 0; outline: 0; color: var(--text); width: 100%; font: inherit; font-size: 0.87rem; } .search-box input::placeholder { color: var(--text-3); } /* ── Network chip — LAN + WAN always on one line ────────────────── */ .net-chip { display: flex; align-items: center; gap: 10px; padding: 8px 17px; border-radius: 99px; background: var(--card); border: 1px solid var(--border); font-family: var(--mono); font-size: 0.73rem; color: var(--text-3); white-space: nowrap; order: 4; } .net-chip svg { width: 15px; height: 15px; color: var(--text-3); flex-shrink: 0; } .net-chip .int-wrap, .net-chip .ext-wrap { display: inline-flex; align-items: center; gap: 7px; } .net-chip .ip-label { font-size: 0.6rem; font-weight: 800; letter-spacing: 0.08em; color: var(--text-3); margin-right: 7px; } .net-chip .ip-value { color: var(--text); font-weight: 600; font-family: var(--mono); } .net-separator { width: 1px; height: 15px; background: var(--border-strong); margin: 0 3px; flex-shrink: 0; color: transparent; } .top-actions { display: flex; gap: 9px; margin-left: auto; order: 5; } /* Below 1160px the chip wraps to its own full-width topbar row — it never stacks LAN over WAN and never hides the external IP. */ @media (max-width: 1160px) { .topbar { flex-wrap: wrap; row-gap: 10px; } .net-chip { order: 6; flex-basis: 100%; justify-content: center; } } /* ── Legacy badges (still used inside dialogs) ──────────────────── */ .role-badge { display: inline-flex; align-items: center; justify-content: center; gap: 7px; background: rgba(255, 255, 255, 0.05); border: 1px solid var(--border-strong); color: var(--text-2); font-size: 0.72rem; font-weight: 750; padding: 6px 12px; border-radius: 99px; letter-spacing: 0.02em; } .os-version-badge { background: rgba(255, 255, 255, 0.05); color: var(--text-2); font-size: 0.66rem; font-weight: 600; padding: 2px 9px; border-radius: 99px; border: 1px solid var(--border); letter-spacing: 0.02em; display: inline-flex; align-items: center; white-space: nowrap; flex-shrink: 0; } @media (max-width: 480px) { .btn-header-reboot { padding: 5px 10px; font-size: 0.72rem; } }