:root { color-scheme: dark; --bg: #131615; --panel: #1b1f1d; --panel2: #202622; --line: #323a34; --muted: #a0aaa0; --text: #edf0e9; --accent: #f69b74; --green: #bdd293; --red: #ffaaa2; --sidebar-bg: #101310; --brand-secondary: #cfe0ac; --nav-active-bg: #242b23; --nav-hover-bg: #20251f; --text-subtle: #879082; --separator: #596454; --border-hover: #89917c; --field-bg: #131813; --field-line: #47523f; --placeholder: #778070; --row-line: #2b332c; --outline-line: #717b67; --chart-grid: #333c33; --code-bg: #101810; --code-alt-bg: #101922; --code-alt-text: #d3e4ec; --nav-selected-bg: #34412a; --accent-ink: #221810; --accent-hover: #ffb090; --selected-ink: #10251e; --notice-text: #c9b99c; --notice-line: #554833; --notice-bg: #29251c; --pill-line: #6d5a45; --pill-live-line: #576847; --toast-bg: #d0dfb4; --toast-text: #1c2818; --toast-line: #ebf2de; --toast-error-bg: #ffd2bd; --toast-error-line: #ff9f7a; --toast-error-text: #42241b; --danger-line: #644a47; --danger-line-strong: #79514e; --warn-line: #786647; --blue: #8ebcff; --transform-chart: #d7adff; --backdrop: rgb(0 0 0 / .68); --backdrop-soft: #070d12b8; --shadow-mid: #0006; --shadow-strong: #0009; --neutral-soft: rgba(127, 127, 127, .05); --scrollbar-track: #151a16; --scrollbar-thumb: #4f5d50; --scrollbar-thumb-hover: #6b7b69; --mono: ui-monospace, SFMono-Regular, Consolas, monospace; --sans: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif } html[data-theme="light"] { color-scheme: light; --bg: #f4f6f2; --panel: #ffffff; --panel2: #edf1eb; --line: #cbd3c7; --muted: #5e685f; --text: #1d241f; --accent: #b85b38; --green: #5f783f; --red: #b64a43; --sidebar-bg: #eef2ec; --brand-secondary: #6b8249; --nav-active-bg: #e1e8dc; --nav-hover-bg: #e8ede6; --text-subtle: #687369; --separator: #9ba69b; --border-hover: #839083; --field-bg: #ffffff; --field-line: #b7c1b5; --placeholder: #7a867b; --row-line: #e0e5dd; --outline-line: #98a497; --chart-grid: #d4dbd1; --code-bg: #edf3e9; --code-alt-bg: #eef3f6; --code-alt-text: #2d4049; --nav-selected-bg: #e1e9db; --accent-ink: #ffffff; --accent-hover: #a84f30; --selected-ink: #ffffff; --notice-text: #685b45; --notice-line: #d4c2a5; --notice-bg: #fff9ef; --pill-line: #cbb28f; --pill-live-line: #a8ba8d; --danger-line: #d7a29d; --danger-line-strong: #c98f89; --warn-line: #c6b27e; --blue: #4f77a9; --transform-chart: #7d4fa3; --shadow-mid: rgb(31 39 33 / .16); --shadow-strong: rgb(31 39 33 / .26); --neutral-soft: rgba(70, 78, 72, .05); --scrollbar-track: #e7ece4; --scrollbar-thumb: #a9b5a6; --scrollbar-thumb-hover: #879684 } * { box-sizing: border-box; scrollbar-color: var(--scrollbar-thumb) var(--scrollbar-track); scrollbar-width: thin } *::-webkit-scrollbar { width: 10px; height: 10px } *::-webkit-scrollbar-track { background: var(--scrollbar-track) } *::-webkit-scrollbar-thumb { background: var(--scrollbar-thumb); border: 2px solid var(--scrollbar-track); border-radius: 999px } *::-webkit-scrollbar-thumb:hover { background: var(--scrollbar-thumb-hover) } *::-webkit-scrollbar-corner { background: var(--scrollbar-track) } html.app-loading { background: var(--bg) } html.app-loading body { visibility: hidden } body { margin: 0; background: var(--bg); color: var(--text); font-family: var(--sans); font-size: 14px; line-height: 1.5 } button, input, select, textarea { font: inherit } button, a, input, textarea, select { -webkit-tap-highlight-color: transparent } button, a { touch-action: manipulation } button { cursor: pointer } button:disabled { opacity: .5; cursor: wait } [hidden] { display: none !important } a { color: inherit; text-decoration: none } h1, h2, h3, p { margin: 0 } button:focus-visible, a:focus-visible { outline: 2px solid var(--accent); outline-offset: 4px } button { border: 0 } h2 { font-size: 20px; letter-spacing: -.5px } h3 { font-size: 17px; margin-bottom: 16px } .shell { display: grid; grid-template-columns: 218px minmax(0, 1fr); min-height: 100vh } .sidebar { position: sticky; top: 0; height: 100vh; background: var(--sidebar-bg); border-right: 1px solid var(--line); padding: 34px 22px; display: flex; flex-direction: column } .brand { display: flex; gap: 12px; align-items: center; font-weight: 780; letter-spacing: 2px; font-size: 17px; line-height: 1.1 } .brand-mark { font: 700 33px var(--mono); letter-spacing: -5px; width: 63px; height: 61px; border: 1px solid var(--accent); color: var(--accent); display: grid; place-content: center; position: relative } .brand-mark span { position: absolute; font-size: 22px; left: 29px; top: 19px; color: var(--brand-secondary) } .edition { font: 9px/1.6 var(--mono); color: var(--muted); letter-spacing: 1px; margin: 22px 0 52px } .edition span { display: block; color: var(--accent); margin-top: 5px } nav { display: flex; flex-direction: column; gap: 9px } .nav { display: flex; align-items: center; gap: 13px; text-align: left; padding: 13px 12px; background: transparent; color: var(--muted); border-left: 2px solid transparent } .nav span { font: 11px var(--mono); opacity: .65 } .nav b { font-weight: 530 } .nav.active { background: var(--nav-active-bg); color: var(--green); border-left-color: var(--green) } .nav:hover { background: var(--nav-hover-bg) } .sidebar-bottom { margin-top: auto; padding-top: 32px } .small-label { font: 10px var(--mono); letter-spacing: 1.6px; color: var(--muted) } .sidebar-bottom p { font-size: 11px; line-height: 1.9; color: var(--text-subtle); margin: 13px 0 26px } .local-tag { font: 9px var(--mono); color: var(--green); display: flex; gap: 8px; align-items: center } .local-tag i, .signal { display: inline-block; width: 6px; height: 6px; border-radius: 50%; background: var(--green) } main { min-width: 0; padding: 0 44px; max-width: 1700px; width: 100%; margin: auto } .topbar { height: 86px; border-bottom: 1px solid var(--line); display: flex; justify-content: space-between; align-items: center; gap: 14px } .breadcrumb { font: 10px var(--mono); color: var(--muted); letter-spacing: 1px } .breadcrumb span { margin: 0 13px; color: var(--separator) } .breadcrumb b { font-weight: 400; color: var(--text) } .top-actions { display: flex; gap: 12px; align-items: center } .version { font: 10px var(--mono); color: var(--muted) } .quiet { background: transparent; color: var(--muted); border: 1px solid var(--line); padding: 8px 13px; border-radius: 3px } .quiet:hover { color: var(--text); border-color: var(--border-hover) } .primary { background: var(--accent); color: var(--accent-ink); border: 1px solid var(--accent); font-weight: 650; border-radius: 3px; padding: 11px 18px; white-space: nowrap } .primary:hover { background: var(--accent-hover) } .outline { display: inline-flex; justify-content: center; align-items: center; border: 1px solid var(--outline-line); background: transparent; color: var(--text); border-radius: 3px; padding: 10px 16px; font-size: 12px; white-space: nowrap } .outline:hover { border-color: var(--accent) } .eyebrow { font: 10px var(--mono); letter-spacing: 2px; color: var(--green); display: flex; gap: 8px; align-items: center; margin-bottom: 16px } h1 { font-size: clamp(32px, 3.6vw, 52px); line-height: 1.1; font-weight: 520; letter-spacing: -2px } .lead { font-size: 13px; line-height: 1.7; color: var(--muted); margin-top: 15px; max-width: 690px } .page-intro { padding: 38px 0 28px; display: flex; justify-content: space-between; align-items: center; gap: 25px } .notice { display: flex; gap: 13px; padding: 12px 15px; font-size: 11px; line-height: 1.65; color: var(--notice-text); border: 1px solid var(--notice-line); background: var(--notice-bg); margin-bottom: 25px; border-radius: 3px } .notice b { font-family: var(--mono); color: var(--accent) } .stats-grid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 15px; margin-bottom: 21px } .stat { padding: 21px 22px; border: 1px solid var(--line); background: var(--panel); position: relative } .stat:first-child { border-top: 2px solid var(--accent) } .stat>span { color: var(--muted); font-size: 12px } .stat strong { display: block; font-family: var(--mono); font-size: clamp(24px, 2.8vw, 36px); font-weight: 450; letter-spacing: -1px; margin: 10px 0 8px } .stat small { color: var(--muted); font-size: 10px } .stat:first-child small { color: var(--green) } .overview-grid { display: grid; grid-template-columns: minmax(0, 1.8fr) minmax(255px, 1fr); gap: 21px; margin-bottom: 23px } .card { border: 1px solid var(--line); background: var(--panel); padding: 23px; min-width: 0 } .card-heading { display: flex; align-items: center; justify-content: space-between; gap: 15px; margin-bottom: 20px } .card-heading .small-label { display: block; margin-bottom: 8px } .pill { padding: 4px 8px; border: 1px solid var(--pill-line); color: var(--accent); font: 9px var(--mono); letter-spacing: 1px } .pill.live { border-color: var(--pill-live-line); color: var(--green) } #traffic-chart { width: 100%; height: 144px; margin: 8px 0 5px } .chart-grid { stroke: var(--chart-grid); stroke-width: 1; fill: none; stroke-dasharray: 2 5 } #sparkline { stroke: var(--accent); stroke-width: 2; fill: none; vector-effect: non-scaling-stroke } .chart-footer { display: flex; justify-content: space-between; color: var(--muted); font: 9px var(--mono); gap: 10px } .runtime-card dl { margin: 18px 0 0 } .runtime-card dl div { display: flex; justify-content: space-between; gap: 12px; margin-top: 13px; padding-bottom: 11px; border-bottom: 1px solid var(--line) } .runtime-card dl div:last-child { border-bottom: 0; padding-bottom: 0 } .runtime-card dt { color: var(--muted); font-size: 11px } .runtime-card dd { font: 12px var(--mono); margin: 0 } .table-scroll { overflow: auto } table { width: 100%; border-collapse: collapse; text-align: left; font-size: 11px; white-space: nowrap } th { font: 10px var(--mono); color: var(--muted); font-weight: 400; padding: 9px 12px 12px; border-bottom: 1px solid var(--line) } td { padding: 12px; border-bottom: 1px solid var(--row-line); font-family: var(--mono); max-width: 260px; overflow: hidden; text-overflow: ellipsis } td:first-child { color: var(--muted) } .status-good { color: var(--green) } .status-error { color: var(--red) } .meta, .fine { font-size: 11px; line-height: 1.7; color: var(--muted) } .empty { padding: 26px 4px; color: var(--muted); font-size: 12px } .section-heading { display: flex; justify-content: space-between; align-items: center; gap: 10px; margin: 25px 0 17px } .section-heading h2 { margin-top: 7px } .config-columns { display: grid; grid-template-columns: minmax(0, 1.25fr) minmax(0, 1fr); gap: 20px } .entity { padding: 17px 0; border-bottom: 1px solid var(--line) } .entity:first-child { padding-top: 0 } .entity:last-child { border-bottom: 0; padding-bottom: 0 } .entity-top { display: flex; justify-content: space-between; align-items: center; gap: 12px } .entity-title { font-weight: 650; font-size: 14px } .entity-details { font: 11px/1.8 var(--mono); color: var(--muted); margin: 10px 0; overflow-wrap: anywhere } .entity-actions { display: flex; gap: 8px; flex-wrap: wrap } .entity-actions button { padding: 5px 9px; font-size: 10px } .entity small { font: 9px var(--mono); color: var(--green) } .edit-form label, .login-card label { display: block; color: var(--muted); font-size: 11px; margin: 16px 0 7px } input:not([type="checkbox"]):not([type="radio"]), select, textarea { display: block; width: 100%; background: var(--field-bg); border: 1px solid var(--field-line); border-radius: 3px; padding: 11px 12px; color: var(--text); font-size: 12px; min-width: 0 } input:not([type="checkbox"]):not([type="radio"]):focus, select:focus, textarea:focus { outline: 1px solid var(--green); border-color: var(--green) } input::placeholder { color: var(--placeholder) } input[type="checkbox"], input[type="radio"] { display: inline-block; width: 15px; height: 15px; min-width: 15px; min-height: 15px; padding: 0; margin: 0; accent-color: var(--green); vertical-align: middle } input.field-invalid, select.field-invalid, textarea.field-invalid { border-color: var(--red) !important; outline: 1px solid rgb(255 170 162 / .72); } .listener-choices.field-invalid, .host-chip-editor.field-invalid { border-color: var(--red) !important; box-shadow: 0 0 0 1px rgb(255 170 162 / .38); } .settings-tabs button.has-unsaved::after { content: ""; display: inline-block; width: 6px; height: 6px; margin-left: 7px; border-radius: 50%; background: currentColor; vertical-align: middle; opacity: .78; } button.is-saving { cursor: progress; } .check { display: flex !important; align-items: center; gap: 9px; margin-top: 13px !important } .form-actions { display: flex; align-items: center; gap: 13px; flex-wrap: wrap; margin-top: 20px } #config-editor { font: 12px/1.7 var(--mono); resize: vertical; min-height: 330px; margin-top: 16px; tab-size: 2; white-space: pre } #settings-page-manual-config>p { margin-top: 20px } .page-footer { display: flex; justify-content: space-between; gap: 15px; padding: 30px 0; margin-top: 30px; border-top: 1px solid var(--line); font: 9px var(--mono); color: var(--muted); letter-spacing: .5px } .page-footer b { color: var(--accent); font-weight: 400; margin-left: 9px } .page-footer .footer-update { color: var(--green); text-decoration: underline; text-underline-offset: 2px } .page-footer .footer-update:hover { color: var(--text) } .login-section { padding: 62px 0 40px; max-width: 720px } .login-section h1 { font-size: clamp(42px, 5vw, 68px); letter-spacing: -3px; max-width: 640px } .login-section .lead { font-size: 15px; max-width: 570px } .login-card { margin-top: 32px; max-width: 470px; background: var(--panel); border: 1px solid var(--line); padding: 27px } .login-card>p { font-size: 12px; color: var(--muted); line-height: 1.7 } .command { display: block; padding: 12px 15px; background: var(--code-bg); border-left: 2px solid var(--green); font-size: 13px; color: var(--green); margin: 15px 0 20px } .login-card .primary { width: 100%; margin-top: 18px } .login-card .fine { font-size: 10px; margin-top: 16px } .login-footer { font: 9px var(--mono); letter-spacing: 1.7px; color: var(--muted); margin-top: 30px; line-height: 2 } .login-footer span { margin: 0 11px; color: var(--accent) } .toast { position: fixed; bottom: 26px; right: 26px; max-width: min(580px, calc(100vw - 40px)); background: var(--toast-bg); color: var(--toast-text); border: 1px solid var(--toast-line); padding: 14px 20px; font-size: 13px; z-index: 50; box-shadow: 0 6px 35px var(--shadow-mid); white-space: pre-wrap; overflow-wrap: anywhere } .toast.error { background: var(--toast-error-bg); border-color: var(--toast-error-line); color: var(--toast-error-text) } .sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0 } @media(min-width:1600px) { main { padding: 0 58px } } @media(max-width:1150px) { .shell { grid-template-columns: 184px minmax(0, 1fr) } .sidebar { padding: 29px 17px } main { padding: 0 25px } .stats-grid { gap: 10px } .stat { padding: 18px 15px } .card { padding: 20px } .overview-grid { grid-template-columns: minmax(0, 1.5fr) minmax(210px, 1fr) } } @media(max-width:850px) { .shell { display: block } .sidebar { position: static; height: auto; flex-direction: row; align-items: center; padding: 16px 22px; border-right: 0; border-bottom: 1px solid var(--line); gap: 24px } .brand { font-size: 11px; letter-spacing: 1px; gap: 9px } .brand-mark { width: 39px; height: 38px; font-size: 24px; letter-spacing: -4px } .brand-mark span { font-size: 15px; left: 18px; top: 12px } .edition, .sidebar-bottom { display: none } nav { flex-direction: row; margin-left: auto; gap: 5px } .nav { padding: 9px 12px; gap: 7px; font-size: 11px; border-left: 0; border-bottom: 2px solid transparent } .nav.active { border-bottom-color: var(--green) } .topbar { height: 65px } .page-intro { padding-top: 29px } h1 { font-size: 36px } .stats-grid { grid-template-columns: repeat(2, minmax(0, 1fr)) } .overview-grid { grid-template-columns: 1fr 1fr } .config-columns { grid-template-columns: 1fr 1fr } .login-section { padding-top: 42px } } @media(max-width:600px) { main { padding: 0 17px } .sidebar { padding: 13px 15px; gap: 10px } .nav { padding: 9px 7px; font-size: 10px } .nav span { display: none } .brand { font-size: 10px } .brand-mark { width: 33px; height: 33px; font-size: 21px } .brand-mark span { left: 15px; top: 11px } .topbar { height: 58px } .breadcrumb { font-size: 8px; letter-spacing: .4px } .breadcrumb span { margin: 0 5px } .top-actions { gap: 6px } .version { display: none } .quiet { font-size: 11px; padding: 7px 9px } .page-intro { display: block; padding-top: 25px } .page-intro .outline { margin-top: 19px } .eyebrow { font-size: 9px; letter-spacing: 1.2px } h1 { font-size: 34px; letter-spacing: -1.4px } .lead { font-size: 12px } .notice { font-size: 10px } .stats-grid { gap: 10px } .stat strong { font-size: 30px } .overview-grid, .config-columns { grid-template-columns: 1fr; gap: 16px } .card { padding: 17px } .card-heading { gap: 10px } .card-heading h2 { font-size: 18px } .meta { font-size: 9px; max-width: 106px; text-align: right } .section-heading h2 { font-size: 20px } .chart-footer { font-size: 8px } .page-footer { font-size: 8px; flex-wrap: wrap } .login-section h1 { font-size: 47px; letter-spacing: -2px } .login-card { padding: 20px } .login-footer { font-size: 8px } .login-footer span { margin: 0 5px } .toast { right: 17px; bottom: 17px } #config-editor { font-size: 11px } } @media(prefers-reduced-motion:reduce) { * { scroll-behavior: auto !important } } .brand-mark { display: flex; align-items: center; justify-content: center; letter-spacing: -3px } .brand-mark span { position: static } .brand { letter-spacing: -.6px; font-size: 17px; gap: 8px } .brand-mark { flex-shrink: 0; width: 47px; height: 47px; font-size: 29px } .route-advanced { margin-top: 20px; border-top: 1px solid var(--line); padding-top: 13px } .route-advanced summary { cursor: pointer; color: var(--green); font-size: 12px } .route-advanced textarea, #policy-rules { font: 11px/1.6 var(--mono); resize: vertical } .route-advanced .fine { margin-top: 8px } .session-user { margin: 17px 0 12px } .security-note { margin: 22px 0 } .audit-card { margin-top: 24px } .entity-details { white-space: pre-wrap } .login-card { max-width: 510px } .signal.status-error { background: var(--red) } @media(max-width:850px) { .brand { font-size: 14px } .brand-mark { width: 34px; height: 34px; font-size: 22px } .sidebar { gap: 10px } .nav { padding: 9px 8px } } @media(max-width:600px) { .sidebar { flex-wrap: wrap } .brand { font-size: 16px } .sidebar nav { width: 100%; justify-content: space-between; margin-top: 5px } .nav { font-size: 11px; padding: 10px 9px; flex: 1; justify-content: center } .sidebar { padding: 12px 16px } .login-section { padding-top: 28px } .login-section h1 { font-size: 40px } .login-card .primary { white-space: normal } .security-note { overflow-wrap: anywhere } } @media(max-width:360px) { .nav { font-size: 10px; padding: 8px 4px } .sidebar { padding-left: 12px; padding-right: 12px } } .transport-grid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 12px; margin: 0 0 22px } .transport-grid>div { display: flex; flex-direction: column; gap: 8px; padding: 16px; border: 1px solid var(--line, #d8dfdb); border-radius: 10px; min-width: 0 } .transport-grid span { font-size: 12px; opacity: .7 } .transport-grid b { font-size: 18px; overflow-wrap: anywhere } .transport-grid .transport-meta { display: flex; flex-wrap: wrap; gap: 4px 10px; margin-top: 1px } .transport-grid .transport-meta small, .transport-grid .transport-footer small { font-size: 9px; opacity: .7; white-space: nowrap } .transport-grid .transport-meta span, .transport-grid .transport-footer span { font-size: inherit; opacity: 1 } .transport-grid .transport-meta strong, .transport-grid .transport-footer strong { font-size: 10px; font-weight: 700 } .transport-grid .transport-footer { display: flex; align-items: center; justify-content: space-between; gap: 8px; margin-top: auto } .transport-details { margin-top: 14px } .transport-details>label { display: block; margin-top: 14px } .transport-details>select, .transport-details>textarea { width: 100% } .command { white-space: normal; overflow-wrap: anywhere } #panel-tls .section-heading { flex-wrap: wrap; gap: 12px } @media(max-width:600px) { .sidebar nav { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 4px } .sidebar nav .nav { min-width: 0; justify-content: center; padding: 9px 5px } .transport-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px } .transport-grid>div { padding: 12px } .transport-grid b { font-size: 16px } } main { padding: 0 24px; max-width: none } .topbar { height: 58px } .sidebar { padding-top: 24px; padding-bottom: 22px } .edition { margin: 17px 0 28px } .nav { padding: 9px 10px } nav { gap: 5px } .top-actions { gap: 8px } .language-select { width: auto; max-width: 160px; padding: 6px 9px; font-size: 11px } .page-intro { padding: 21px 0 16px; gap: 16px } .page-intro h1 { font-size: 29px; letter-spacing: -1px } .page-intro .eyebrow { margin-bottom: 8px; font-size: 9px } .page-intro .lead { margin-top: 7px; font-size: 12px } .notice { padding: 8px 11px; margin-bottom: 14px; font-size: 10px } .stats-grid { grid-template-columns: repeat(6, minmax(0, 1fr)); gap: 10px; margin-bottom: 12px } .stat { padding: 12px 13px } .stat>span { font-size: 11px } .stat strong { font-size: 25px; margin: 5px 0 3px; line-height: 1.3 } .stat small { font-size: 9px } .transport-grid { margin-bottom: 12px !important; gap: 10px } .transport-grid>div { padding: 9px 12px !important } .overview-grid { grid-template-columns: minmax(0, 1.35fr) minmax(0, 1fr) minmax(190px, .85fr); gap: 12px; margin-bottom: 12px } .card { padding: 15px } h2 { font-size: 17px } h3 { font-size: 14px; margin-bottom: 10px } .card-heading { margin-bottom: 10px; gap: 10px } .card-heading .small-label { margin-bottom: 5px } .small-label { font-size: 9px; letter-spacing: 1.2px } #traffic-chart { height: 107px; margin: 3px 0 } .runtime-card dl { margin: 8px 0 0 } .runtime-card dl div { margin-top: 7px; padding-bottom: 6px } .runtime-card dt { font-size: 10px } .runtime-card dd { font-size: 11px } .system-card h2 { font: 23px var(--mono) } .system-card h2 small { font: 10px var(--mono); color: var(--muted) } #system-chart { display: block; width: 100%; height: 65px } #system-sparkline { fill: none; stroke: var(--green); stroke-width: 2; vector-effect: non-scaling-stroke } .memory-line { display: flex; justify-content: space-between; gap: 8px; font-size: 9px; color: var(--muted); margin-top: 4px } .memory-line b { font-weight: 400; font-family: var(--mono) } progress { display: block; width: 100%; height: 5px; accent-color: var(--green); margin: 6px 0 9px } .diagnostics-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 12px; margin-bottom: 12px } .mini-heading { display: flex; align-items: center; justify-content: space-between; gap: 8px } .mini-heading h3 { font-size: 12px; margin: 0 } .mini-metrics { margin: 8px 0 0 } .mini-metrics div { display: flex; align-items: baseline; justify-content: space-between; gap: 10px; margin-top: 6px } .mini-metrics dt { font-size: 10px; color: var(--muted) } .mini-metrics dd { font: 10px var(--mono); margin: 0; text-align: end; overflow-wrap: anywhere } .mini-live-chart-stack { display: grid; gap: 8px; margin-top: 10px } .mini-live-chart { min-width: 0; margin-top: 10px; border-top: 1px solid var(--line); padding-top: 8px } .mini-live-chart-stack .mini-live-chart { margin-top: 0 } .mini-live-chart-head { display: flex; justify-content: space-between; align-items: baseline; gap: 8px; margin-bottom: 5px; color: var(--muted); font: 10px var(--mono) } .mini-live-chart-head b { color: var(--text); font-weight: 600; text-align: right } .mini-live-chart-actions { display: inline-flex; align-items: center; justify-content: flex-end; gap: 7px; min-width: 0 } .mini-live-chart svg { display: block; width: 100%; height: 60px; overflow: visible } .diagnostic-line { fill: none; stroke: var(--accent); stroke-width: 2; vector-effect: non-scaling-stroke } .network-tx-line { stroke: var(--muted) } .cache-hit-line { stroke: var(--green) } .cache-miss-line { stroke: var(--accent) } .cache-bypass-line { stroke: var(--muted) } .process-rss-line { stroke: var(--green) } .mini-chart-legend { display: flex; justify-content: flex-end; gap: 10px; margin-top: 3px; font: 9px var(--mono); color: var(--muted) } .mini-chart-legend span::before { content: ""; display: inline-block; width: 12px; height: 2px; margin-right: 4px; vertical-align: middle; background: currentColor } .cache-hit-key { color: var(--green) } .cache-miss-key { color: var(--accent) } .cache-bypass-key { color: var(--muted) } .log-column-picker { position: relative; font-size: 10px } .log-column-picker>summary { list-style: none; cursor: pointer; user-select: none; padding: 6px 9px; border: 1px solid var(--line); border-radius: 4px; min-height: 30px; display: flex; align-items: center } .log-column-picker>summary::-webkit-details-marker { display: none } .log-column-picker[open]>summary { border-color: var(--green) } .log-column-options { position: absolute; z-index: 80; inset-inline-end: 0; top: calc(100% + 4px); width: min(190px, calc(100vw - 24px)); overflow: visible; padding: 4px; display: grid; grid-template-columns: minmax(0, 1fr); gap: 1px; background: var(--panel2); border: 1px solid var(--line); border-radius: 5px; box-shadow: 0 10px 26px var(--shadow-mid) } .log-column-option { min-width: 0; min-height: 22px; margin: 0 !important; padding: 3px 5px; gap: 7px; border-radius: 3px; font-size: 10px; line-height: 1.2; white-space: nowrap } .log-column-option:hover { background: var(--panel) } @media(max-height:620px) { .log-column-options { top: auto; bottom: calc(100% + 4px); width: min(360px, calc(100vw - 24px)); grid-template-columns: repeat(2, minmax(0, 1fr)) } } .logs-card .table-scroll { max-height: 260px } .logs-card th { position: sticky; top: 0; background: var(--panel) } th { padding: 7px 8px } td { padding: 8px } .page-footer { padding: 16px 0; margin-top: 18px } .config-columns, .settings-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 14px; align-items: start } .settings-grid>.card { height: 100% } .edit-form label { margin: 10px 0 5px } .edit-form input:not([type="checkbox"]):not([type="radio"]), .edit-form select, .edit-form textarea { padding: 8px 10px } .edit-form .check { margin-top: 9px !important } .form-actions { gap: 9px; margin-top: 13px } .primary { padding: 9px 14px; font-size: 12px } .quiet { padding: 7px 10px } .outline { padding: 8px 12px } .entity { padding: 12px 0 } .entity-details { margin: 6px 0; line-height: 1.6 } .entity-actions { gap: 6px } .entity-title { font-size: 13px } .section-heading { margin: 16px 0 12px } .section-heading h2 { margin-top: 4px } .subheading { margin-top: 17px; margin-bottom: 7px !important } .field-grid, .switch-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 0 12px } .pending-note { font-size: 11px; color: var(--accent); padding: 9px 0 } .header-rule { display: grid; grid-template-columns: 86px minmax(90px, 1fr) minmax(80px, 1.2fr) auto; gap: 6px; margin: 8px 0 } .header-rule input, .header-rule select { padding: 7px !important; font-size: 11px } .header-rule button { font-size: 10px; padding: 6px } .header-rules { margin-bottom: 9px } .edit-form>.fine { margin-top: 8px } .empty { padding: 17px 3px } .login-section { padding-top: 40px } .login-card { margin-top: 23px } .chart-footer { line-height: 1.5 } .fine, .meta { overflow-wrap: anywhere } .mini-metrics dd, .chart-footer>span { min-width: 0 } .cache-status-good { color: var(--green) } [dir="rtl"] .nav { text-align: right; border-left: 0; border-right: 2px solid transparent } [dir="rtl"] .nav.active { border-right-color: var(--green) } [dir="rtl"] table { text-align: right } [dir="rtl"] .entity-details, [dir="rtl"] input[type="url"], [dir="rtl"] #config-editor { direction: ltr; text-align: left } @media(min-width:1800px) { .settings-grid { grid-template-columns: repeat(2, minmax(0, 1fr)) } .overview-grid { grid-template-columns: 1.6fr 1.1fr 1fr } } @media(max-width:1200px) { main { padding: 0 18px } .stats-grid { grid-template-columns: repeat(3, minmax(0, 1fr)) } .overview-grid { grid-template-columns: minmax(0, 1.3fr) minmax(0, 1fr) } .runtime-card { grid-column: 1/-1 } .runtime-card dl { display: flex; flex-wrap: wrap; gap: 18px; margin-top: 4px } .runtime-card dl div { border: 0; padding: 0; flex: 1; min-width: 90px } .diagnostics-grid { gap: 10px } .header-rule { grid-template-columns: 80px 1fr auto } .header-rule .header-value { grid-column: 2; grid-row: 2 } .header-rule button { grid-column: 3; grid-row: 1/3 } } @media(max-width:850px) { .sidebar { padding: 13px 18px; gap: 18px } .sidebar nav { flex-wrap: wrap; gap: 4px } .nav { padding: 8px } .page-intro { padding-top: 18px } .settings-grid, .config-columns { gap: 12px } .diagnostics-grid { grid-template-columns: repeat(2, minmax(0, 1fr)) } .diagnostics-grid>.card:last-child { grid-column: 1/-1 } .topbar { height: 54px } } @media(max-width:620px) { main { padding: 0 12px } .sidebar { align-items: flex-start; flex-direction: column; gap: 12px } .sidebar nav { width: 100%; display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)) } .nav { padding: 8px 7px; min-width: 0 } .nav b { font-size: 11px } .nav span { display: none } .top-actions { gap: 5px } .breadcrumb { font-size: 9px; letter-spacing: 0 } .breadcrumb span { margin: 0 5px } .topbar .version { display: none } .language-select { max-width: 110px; font-size: 10px } .page-intro h1 { font-size: 25px } .page-intro { align-items: flex-start } .page-intro .lead { font-size: 11px } .page-intro .outline { font-size: 10px; padding: 7px; white-space: normal; max-width: 95px } .page-intro .eyebrow { letter-spacing: .5px; font-size: 8px } .notice { font-size: 10px; gap: 8px } .stats-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px } .stat { padding: 10px } .stat strong { font-size: 24px } .overview-grid, .diagnostics-grid, .settings-grid, .config-columns { grid-template-columns: minmax(0, 1fr) } .runtime-card, .diagnostics-grid>.card:last-child { grid-column: auto } .runtime-card dl { display: block } .runtime-card dl div { margin-top: 8px } .logs-card>.card-heading { align-items: flex-start; flex-direction: column } .log-tools { width: 100% } .log-tools input:not([type="checkbox"]):not([type="radio"]) { flex: 1; min-width: 95px; width: 95px } .log-tools select { width: 95px } .log-tools button { white-space: normal; max-width: 85px } .card { padding: 13px } .page-footer { flex-direction: column; gap: 7px } .field-grid { gap: 0 9px } .header-rule { grid-template-columns: 76px minmax(0, 1fr) auto } .header-rule button { max-width: 65px; overflow-wrap: anywhere } .switch-grid { grid-template-columns: minmax(0, 1fr) } .form-actions { gap: 8px } .primary, .outline { white-space: normal } .settings-grid h2 { font-size: 16px } .mini-metrics { margin-top: 9px } .memory-line { font-size: 10px } .login-section { padding-top: 25px } .login-card { padding: 18px } .topbar { gap: 7px } .breadcrumb b { display: none } } .vhost-layout { display: grid; grid-template-columns: minmax(220px, .7fr) minmax(0, 2fr); gap: 12px; align-items: start } .vh-form, .vhost-layout>.card { min-width: 0 } .vh-group { border: 1px solid var(--line); border-radius: 6px; margin: 0 0 10px; padding: 10px; min-width: 0 } .vh-group legend, .vh-group>summary { font-size: 12px; font-weight: 600; padding: 0 5px; color: var(--text) } .vh-group>summary { cursor: pointer; margin-bottom: 6px } .vh-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 8px; align-items: start } .vh-field { display: flex; flex-direction: column; gap: 4px; min-width: 0; margin: 0; font-size: 11px; color: var(--muted) } .vh-field input, .vh-field select, .vh-field textarea { width: 100%; min-width: 0; max-width: 100%; padding: 6px 7px; font-size: 12px; margin: 0; box-sizing: border-box } .vh-field textarea { resize: vertical; font-family: var(--mono) } .vh-check { font-size: 11px; min-height: 28px; margin: 0; align-items: center; gap: 6px } .vh-check input { flex: 0 0 auto } .vh-enable-control { display: grid !important; grid-template-columns: auto minmax(0, 1fr) auto; grid-template-rows: auto auto; align-items: center; gap: 2px 10px; margin-top: 5px !important; padding: 11px 12px; border: 1px solid var(--pill-live-line); background: var(--panel2); box-shadow: inset 3px 0 0 var(--green) } .vh-enable-control>input { grid-column: 1; grid-row: 1/3; width: 18px; height: 18px; accent-color: var(--green) } .vh-enable-control>span { grid-column: 2; grid-row: 1; color: var(--text); font-size: 12px; font-weight: 700 } .vh-enable-hint { grid-column: 2; grid-row: 2; color: var(--muted); font-size: 10px } .vh-enable-state { grid-column: 3; grid-row: 1/3; padding: 3px 7px; border: 1px solid var(--pill-live-line); color: var(--green); font: 600 10px var(--mono); text-transform: uppercase; letter-spacing: .04em } .vh-enable-control.is-disabled { border-color: var(--danger-line-strong); box-shadow: inset 3px 0 0 var(--red) } .vh-enable-control.is-disabled .vh-enable-state { border-color: var(--danger-line); color: var(--red) } .vh-wide { grid-column: 1/-1; min-width: 0 } .vh-frontends, .vh-members { display: grid; gap: 8px } .vh-row { padding: 8px; border: 1px solid var(--line); border-radius: 5px; min-width: 0; background: var(--bg) } .vh-frontend { display: grid; grid-template-columns: minmax(140px, 1fr) auto minmax(120px, 1fr) auto; align-items: center; gap: 8px } .vh-member>.quiet { margin-top: 6px } .vh-member details { font-size: 11px } .vh-member details>summary { cursor: pointer; color: var(--muted); padding: 3px 0 } .vh-migration { margin-top: 16px; padding-top: 12px; border-top: 1px solid var(--line); display: grid; gap: 6px } .vh-migration label { font-size: 11px } .vh-migration select { width: 100%; min-width: 0 } .pool-card { margin-bottom: 12px } .backend-card-heading { align-items: flex-start; gap: 10px } .backend-table-tools { display: flex; align-items: center; justify-content: flex-end; flex-wrap: wrap; gap: 7px; margin-left: auto } #pool-search { width: min(250px, 30vw); min-width: 170px } .backend-sort-control { display: flex; align-items: center; gap: 6px; color: var(--muted); font-size: 11px } .backend-sort-control select { width: auto; min-width: 120px } .backend-sort-direction { min-width: 48px } .backend-column-picker { position: relative } .backend-column-picker>summary { list-style: none; cursor: pointer; user-select: none } .backend-column-picker>summary::-webkit-details-marker { display: none } .backend-column-options { position: absolute; z-index: 20; top: calc(100% + 6px); right: 0; display: grid; grid-template-columns: repeat(2, minmax(145px, 1fr)); gap: 1px 12px; min-width: 330px; max-height: 330px; overflow: auto; padding: 10px 12px 12px; border: 1px solid var(--line); background: var(--panel); box-shadow: 0 12px 28px var(--shadow-strong) } .backend-column-options .check { margin-top: 4px !important; font-size: 11px } .pool-card .fine { margin: 0 0 8px } .pool-table { font-size: 11px; width: 100%; min-width: 640px } .pool-table th, .pool-table td { padding: 7px 9px; white-space: nowrap } .pool-table td:nth-child(n+4) { font-variant-numeric: tabular-nums; text-align: right } .pool-table th:nth-child(n+4) { text-align: right } .pool-table td:first-child, .pool-table td:nth-child(2) { max-width: 200px; overflow: hidden; text-overflow: ellipsis } .vhost-layout .entity-details { overflow-wrap: anywhere } .vh-form .form-actions { position: sticky; bottom: 0; background: var(--panel); padding: 10px 0 6px; z-index: 2 } .vh-form input:disabled { opacity: .5 } @media(max-width:1150px) { .vhost-layout { grid-template-columns: minmax(190px, .6fr) minmax(0, 1.6fr) } .vh-grid { grid-template-columns: repeat(2, minmax(0, 1fr)) } .vh-frontend { grid-template-columns: minmax(0, 1fr) auto } .vh-frontend .vh-field { grid-column: 1/-1 } } @media(max-width:800px) { .vhost-layout { grid-template-columns: minmax(0, 1fr) } .vh-form .form-actions { position: static } .vh-group { padding: 8px } .pool-table { min-width: 620px } } @media(max-width:420px) { .vh-grid { grid-template-columns: minmax(0, 1fr) } .vh-frontend { grid-template-columns: minmax(0, 1fr) } .vh-group { padding: 6px } .vh-form .form-actions { flex-wrap: wrap } .vh-field input, .vh-field select, .vh-field textarea { font-size: 12px } } body { --ui-gap: 5px; --ui-card: 8px; --ui-font: 12px; --ui-control: 27px; font-size: var(--ui-font) } body[data-density="dense"] { --ui-gap: 4px; --ui-card: 7px; --ui-font: 11.5px; --ui-control: 25px } body[data-density="comfortable"] { --ui-gap: 13px; --ui-card: 17px; --ui-font: 14px; --ui-control: 36px } .shell { grid-template-columns: 182px minmax(0, 1fr) } main { padding: 0 16px } .sidebar { padding: 20px 13px } .sidebar nav { margin-top: 22px } .nav { padding: 9px 10px } .topbar { height: 48px } .page-intro { padding: 13px 0 11px; gap: 12px } .page-intro h1 { font-size: 25px; letter-spacing: -.7px } .page-intro .eyebrow { margin-bottom: 4px } .page-intro .lead { font-size: 11px; margin-top: 4px } .notice { margin-bottom: var(--ui-gap); padding: 5px 9px } .card { padding: var(--ui-card) } .card-heading { margin-bottom: 8px } .card-heading h2 { font-size: 16px } .card-heading .small-label { font-size: 8px; margin-bottom: 3px } .overview-grid, .diagnostics-grid, .settings-grid, .config-columns { gap: var(--ui-gap); margin-bottom: var(--ui-gap) } .stats-grid, .stats, .metrics-grid { gap: var(--ui-gap); margin-bottom: var(--ui-gap) } .stat { padding: 11px } .stat-value { font-size: 25px } .stat p, .stat small { font-size: 10px } .transport-grid { gap: var(--ui-gap); margin-bottom: var(--ui-gap) !important } .transport-grid>div { padding: 6px 10px !important; gap: 3px; border-radius: 4px } .transport-grid span { font-size: 10px } .transport-grid b { font-size: 14px } .activity-card svg { height: 105px } .system-card svg { height: 80px } .mini-metrics div { margin-top: 4px } .runtime-card dl div { margin-top: 5px; padding-bottom: 4px } .pool-card { margin-bottom: var(--ui-gap) } .pool-table th, .pool-table td { padding: 5px 7px } .pool-card>.fine { font-size: 10px } .pool-card .table-scroll { max-height: 205px } .page-footer { padding: 12px 0; margin-top: 8px } .edit-form label { margin-top: 9px } .edit-form input:not([type="checkbox"]):not([type="radio"]), .edit-form select, .edit-form textarea, input:not([type="checkbox"]):not([type="radio"]), select, textarea { padding: 6px 8px; font-size: 12px; min-height: var(--ui-control) } button, .primary, .outline, .quiet { padding: 6px 10px; font-size: 11px; min-height: var(--ui-control) } .check { font-size: 11px } .settings-shortcuts { display: flex; align-items: center; gap: 10px; padding: 10px 12px; border: 1px solid var(--line); margin-bottom: var(--ui-gap); flex-wrap: wrap } .settings-shortcuts>div { flex: 1; min-width: 170px } .ui-preference-control { display: flex; align-items: center; gap: 8px; font-size: 11px } .ui-preference-control select { width: auto } .vhost-layout { display: block } .vhost-row { display: grid; grid-template-columns: minmax(120px, 1fr) minmax(130px, 1.3fr) minmax(100px, 1fr); gap: 3px 14px; align-items: center; padding: 11px } .vhost-row .entity-details { margin: 0; font-size: 11px } .vhost-row .entity-actions { grid-column: 1/-1; display: flex; justify-content: flex-end; gap: 5px; margin-top: 3px } .vh-health-summary { grid-column: 1/-1; color: var(--muted); font: 10px var(--mono); overflow-wrap: anywhere } .vh-migration { max-width: 570px } .vhost-dialog, .logs-dialog, .audit-dialog { color: var(--text); background: var(--bg); border: 1px solid var(--line); padding: 0; max-width: calc(100vw - 24px); max-height: calc(100dvh - 28px); box-shadow: 0 18px 70px var(--shadow-strong); border-radius: 7px } .vhost-dialog { width: 960px; overflow: auto } .vhost-dialog::backdrop, .logs-dialog::backdrop, .audit-dialog::backdrop { background: var(--shadow-strong); backdrop-filter: blur(2px) } .vhost-dialog .vh-form { border: 0; padding: 14px } .vh-form>.card-heading { margin-bottom: 5px; position: sticky; top: -14px; z-index: 3; background: var(--panel); padding: 9px 0 } .vh-form>.card-heading h2 { flex: 1 } .vh-live-summary { font: 10px var(--mono); line-height: 1.7; overflow-wrap: anywhere; color: var(--muted); margin: 5px 0 } .vh-tabs { display: flex; flex-direction: row; margin-inline-start: 0; gap: 3px; flex-wrap: wrap; position: sticky; top: 29px; z-index: 2; background: var(--panel); padding: 5px 0 8px; border-bottom: 1px solid var(--line); margin-bottom: 9px } .vh-tabs button { width: auto; flex: 0 1 auto; font-size: 10px; padding: 6px 9px } .vh-tabs button.active { color: var(--text); background: var(--nav-selected-bg); border-color: var(--green) } .vh-group { margin: 8px 0; padding: 9px } .vh-group[hidden] { display: none } .vh-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 7px } .vh-pages-grid { display: block } .vh-group legend, .vh-group>summary { font-size: 11px } .vh-form .form-actions { position: sticky; bottom: -14px; background: var(--panel); padding: 10px 0; border-top: 1px solid var(--line); z-index: 2 } .vh-header-row { display: grid; grid-template-columns: 88px minmax(110px, 1fr) minmax(140px, 2fr) auto; gap: 5px; align-items: end; margin: 6px 0 } .vh-header-row label span { font-size: 10px } .vh-header-row button { margin-bottom: 0 } .vh-header-rows+h3 { margin-top: 10px } .page-editor { display: grid; grid-template-columns: minmax(105px, .9fr) minmax(115px, 1fr) minmax(105px, 1fr); gap: 6px; align-items: center; padding: 7px 0; border-bottom: 1px solid var(--line) } .page-label { font-size: 11px; font-weight: 500 } .page-source { grid-column: 1/-1 } .page-source input { font-size: 11px; margin: 6px 0 } .page-source textarea { font: 11px var(--mono); min-height: 100px } .page-source[hidden] { display: none } .pages-errors { margin: 12px 0 } .pages-errors>summary { font-size: 12px; cursor: pointer } .logs-dialog { width: 1180px; overflow: visible } .logs-dialog .logs-card { border: 0; padding: 0 12px; background: var(--bg) } .window-heading { display: flex; align-items: center; gap: 12px; padding: 10px 12px; border-bottom: 1px solid var(--line) } .window-heading h2 { font-size: 16px } .window-tools { margin-inline-start: auto; display: flex; gap: 5px } .logs-dialog .logs-card>.card-heading { display: block; padding: 8px 0; margin: 0 } .logs-dialog .logs-card>.card-heading>div:first-child { display: none } .log-tools { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; width: 100% } .log-tools select, .log-tools input:not([type="checkbox"]):not([type="radio"]) { width: auto; max-width: 180px; min-height: 30px; font-size: 11px } .log-tools input:not([type="checkbox"]):not([type="radio"]) { flex: 1; min-width: 110px } .log-tools button { font-size: 10px; padding: 6px 9px } .logs-dialog .table-scroll { max-height: min(60dvh, 580px); overflow: auto; border-top: 1px solid var(--line) } .logs-dialog table { font: 11px var(--mono) } .logs-dialog th, .logs-dialog td { padding: 6px 7px; max-width: 360px; overflow: hidden; text-overflow: ellipsis } .logs-dialog th { position: sticky; top: 0; background: var(--panel) } .log-footnote { padding: 8px 12px; font-size: 10px } .logs-dialog.docked { position: fixed; inset: auto 12px 10px auto; margin: 0; width: min(1180px, calc(100vw - 24px)); max-height: 46dvh; z-index: 20 } .logs-dialog.docked .table-scroll { max-height: calc(46dvh - 160px) } #toast { z-index: 1000 } @media(min-width:1400px) { .overview-grid { grid-template-columns: 1.55fr 1fr .85fr } .settings-grid { grid-template-columns: repeat(2, minmax(0, 1fr)) } } @media(max-width:1000px) { .shell { grid-template-columns: 166px minmax(0, 1fr) } .sidebar { padding: 18px 10px } .overview-grid { grid-template-columns: 1.3fr 1fr } .runtime-card { grid-column: 1/-1 } .runtime-card dl { display: flex; gap: 12px } .vh-grid { grid-template-columns: repeat(2, minmax(0, 1fr)) } } @media(max-width:850px) { .shell { display: block } .sidebar { height: auto; position: static; flex-direction: row; flex-wrap: wrap; padding: 10px 12px } .sidebar nav { margin-top: 0; display: flex; flex-wrap: wrap; gap: 2px } .nav { padding: 7px } .edition, .sidebar-bottom { display: none } .topbar { height: 46px } .vhost-dialog { max-width: calc(100vw - 12px) } } @media(max-width:620px) { main { padding: 0 10px } .top-actions { gap: 4px } .topbar .breadcrumb { font-size: 8px } .top-actions .quiet { padding: 5px; font-size: 10px } .page-intro h1 { font-size: 23px } .overview-grid, .diagnostics-grid, .settings-grid, .config-columns { grid-template-columns: minmax(0, 1fr) } .runtime-card, .diagnostics-grid>.card:last-child { grid-column: auto } .runtime-card dl { display: block } .sidebar nav { width: 100%; display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)) } .nav b { font-size: 10px } .vhost-row { grid-template-columns: 1fr 1fr } .vhost-row .entity-actions { justify-content: flex-start; flex-wrap: wrap } .vh-grid { grid-template-columns: repeat(2, minmax(0, 1fr)) } .vh-header-row { grid-template-columns: 85px 1fr } .vh-header-row>:nth-child(3) { grid-column: 1/-1 } .vhost-dialog .vh-form { padding: 9px } .vh-form>.card-heading { top: -9px } .vh-tabs { top: 29px } .window-heading { flex-wrap: wrap; gap: 5px } .window-heading h2 { font-size: 14px } .window-tools { margin-inline-start: 0 } .logs-dialog .table-scroll { max-height: 50dvh } .log-tools select { max-width: 140px; flex: 1 } .logs-dialog.docked { max-height: 55dvh } .logs-dialog.docked .table-scroll { max-height: calc(55dvh - 230px) } .settings-shortcuts { align-items: flex-start } .ui-preference-control { flex-wrap: wrap } .page-editor { grid-template-columns: 1fr 1fr } .page-label { grid-column: 1/-1 } .page-source { grid-column: 1/-1 } } @media(max-width:380px) { .vh-grid { grid-template-columns: minmax(0, 1fr) } .vhost-row { grid-template-columns: minmax(0, 1fr) } .sidebar nav { grid-template-columns: repeat(3, minmax(0, 1fr)) } .topbar .breadcrumb { display: none } .topbar { justify-content: flex-end } .vh-tabs button { font-size: 10px; padding: 5px 7px } } main { margin: 0 auto } .stat strong { font-size: clamp(20px, 1.8vw, 26px); margin: 4px 0 } body[data-density="dense"] .stat strong { font-size: 22px; margin: 2px 0 } #toast[popover] { position: fixed; inset: auto 18px 18px auto; margin: 0; width: max-content; max-width: min(520px, calc(100vw - 28px)); padding: 12px 16px; color: var(--text); background: var(--panel); border: 1px solid var(--green); border-radius: 6px; box-shadow: 0 10px 40px var(--shadow-strong); overflow-wrap: anywhere } #toast[popover].error { border-color: #d57867 } #toast[popover]::backdrop { display: none } .named-listener-row { border: 1px solid var(--line); padding: 10px; margin: 10px 0; min-width: 0 } .named-listener-row legend { font-size: 11px } .named-listener-row .vh-grid { grid-template-columns: repeat(2, minmax(0, 1fr)) } .h3-editor { grid-column: 1/-1; min-width: 0 } .h3-editor>label { margin-top: 4px } .h3-editor details { padding: 7px 0 } .h3-editor summary { font-size: 11px; cursor: pointer } .h3-editor .vh-grid { margin-top: 7px } .h3-editor .fine { margin-top: 7px } .vh-frontend { flex-wrap: wrap; display: grid; grid-template-columns: 2fr 1fr 1fr auto } .vh-frontend>.h3-editor { grid-row: 2; grid-column: 1/-1 } .vh-frontend>button { grid-column: 4; grid-row: 1 } .listener-choices { display: flex; flex-wrap: wrap; gap: 7px } .listener-choices>.fine { flex-basis: 100% } .listener-choices>label { border: 1px solid var(--line); padding: 7px; border-radius: 4px; font-size: 11px } .certificate-editors { min-width: 0; display: grid; align-content: start; gap: 12px } .certificate-editors input[type="file"] { max-width: 100% } .certificate-editors summary { cursor: pointer; font-size: 12px } .transport-grid { grid-template-columns: repeat(5, minmax(0, 1fr)) } @media(max-width:620px) { .vh-frontend { grid-template-columns: 1fr 1fr } .vh-frontend>label:first-child { grid-column: 1/-1 } .vh-frontend>.h3-editor { grid-row: auto } .vh-frontend>button { grid-column: auto; grid-row: auto } .transport-grid { grid-template-columns: repeat(2, minmax(0, 1fr)) } .named-listener-row .vh-grid { grid-template-columns: 1fr } .h3-editor .vh-grid { grid-template-columns: 1fr 1fr } } .settings-grid>.card { height: auto } #named-listener-rows { overflow: visible } .cache-toolbar { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; padding: 12px } .cache-toolbar label { margin: 0; display: flex; gap: 7px; align-items: center } .cache-toolbar select { max-width: 300px; min-width: 130px; margin: 0 } .cache-domain-filter { display: flex; align-items: center; gap: 7px; margin: 0; color: var(--muted); font-size: 11px } .cache-domain-filter select { width: auto; min-width: 150px; padding: 7px 28px 7px 9px; margin: 0 } .cache-stats .stat { min-width: 0 } .cache-stats strong { font-size: 22px } .cache-stats progress { width: 100%; height: 5px; margin: 6px 0 } .cache-table { font-size: 12px } .cache-table td { max-width: 260px; overflow-wrap: anywhere; vertical-align: top } .cache-reasons { min-width: 190px } .cache-reason { display: inline-block; border: 1px solid var(--line); border-radius: 4px; padding: 2px 5px; margin: 1px 4px 2px 0; font-size: 10px } .acme-card { margin-bottom: 14px } .acme-card .vh-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 10px } .acme-card label { margin: 0 } .acme-result { margin-top: 10px; overflow-wrap: anywhere } @media(max-width:1000px) { .acme-card .vh-grid { grid-template-columns: repeat(2, minmax(0, 1fr)) } } @media(max-width:620px) { .acme-card .vh-grid { grid-template-columns: minmax(0, 1fr) } .cache-toolbar>* { max-width: 100% } .cache-toolbar label { flex-wrap: wrap } .cache-toolbar select { max-width: 100% } .cache-stats strong { font-size: 19px } } #cache-domain-scroll { max-height: 260px; overflow: auto; scrollbar-gutter: stable } #cache-object-scroll { max-height: min(49vh, 520px); overflow: auto; scrollbar-gutter: stable } #panel-cache thead th { position: sticky; top: 0; background: var(--panel); z-index: 1 } #panel-cache .cache-table .cache-reasons { white-space: normal; min-width: 210px; max-width: 300px } #panel-cache .cache-copy-cell { cursor: copy } .settings-tabs { display: grid; grid-template-columns: repeat(auto-fit, minmax(132px, 1fr)); gap: 4px; width: 100%; padding: 8px; margin-bottom: 12px; border: 1px solid var(--line); border-radius: 12px; background: var(--panel) } .settings-tabs button { width: 100%; min-width: 0; padding: 8px 10px; font-size: 12px; white-space: normal; text-align: center; border: 1px solid transparent; background: transparent; border-radius: 8px } .settings-tabs button[aria-selected="true"] { background: var(--accent); color: var(--selected-ink); border-color: var(--accent); font-weight: 700 } .settings-pages { min-width: 0 } .settings-page { width: 100%; max-width: none } .settings-page[hidden] { display: none !important } .settings-page>.edit-form { width: 100%; max-width: none } .settings-page>.edit-form+.edit-form { margin-top: var(--ui-gap) } .settings-page>.card { padding: var(--ui-card) } .settings-page .security-grid { align-items: start } .certificate-dialog { width: min(820px, calc(100vw - 28px)); max-height: 90dvh; padding: 0; border: 1px solid var(--line); border-radius: 14px; background: var(--bg); color: var(--text); overflow: auto } .certificate-dialog::backdrop { background: var(--backdrop-soft); backdrop-filter: blur(5px) } .certificate-dialog>.window-heading { position: sticky; top: 0; z-index: 2; background: var(--bg); padding: 14px 18px; border-bottom: 1px solid var(--line) } .certificate-dialog .provider-picker { display: grid; gap: 6px; padding: 14px 18px 0; font-size: 12px; font-weight: 600 } .provider-hint { padding: 0 18px } .certificate-dialog .card { border: 0; box-shadow: none; margin: 0; padding: 16px 18px } .certificate-dialog [hidden] { display: none !important } .certificate-dialog .acme-card { max-width: none } .certificate-dialog .vh-grid { gap: 10px 14px } .certificate-dialog .vh-grid label { min-width: 0 } .acme-result { display: flex; align-items: center; gap: 12px; justify-content: space-between; margin-bottom: 12px } .acme-result p { margin: 0; overflow-wrap: anywhere } .metrics-example, .metrics-preview { font: 11px/1.55 ui-monospace, SFMono-Regular, monospace; max-width: 100%; overflow: auto; white-space: pre; padding: 12px; background: var(--code-alt-bg); border-radius: 8px; color: var(--code-alt-text) } .metrics-preview { max-height: 360px } .settings-shortcuts { margin-bottom: 10px } @media(max-width:680px) { .settings-tabs { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)) } .settings-tabs button { white-space: normal; text-align: start; font-size: 11px } .certificate-dialog { width: calc(100vw - 16px); max-height: 94dvh } .acme-result { align-items: start; flex-direction: column } .settings-page>.card { padding: var(--ui-card) } } #certificate-dialog .dialog-head button:last-child { margin-inline-start: auto } dialog.vhost-dialog, dialog.logs-dialog, dialog.audit-dialog, dialog.certificate-dialog, dialog.config-history-dialog { border-radius: 0; background: var(--bg); color: var(--text); border: 1px solid var(--line); padding: 0; box-shadow: 0 18px 70px var(--shadow-strong) } dialog::backdrop { background: var(--shadow-strong) !important; backdrop-filter: blur(2px) !important } dialog .card, dialog .vh-form, dialog .window-heading { border-radius: 0 } .settings-tabs, .settings-tabs button, .settings-page>.card { border-radius: 0 } .certificate-dialog>.window-heading { padding: 10px 12px } .certificate-dialog .provider-picker { padding: 10px 12px 0 } .certificate-provider-hint { padding: 0 12px } .certificate-dialog .card { padding: 12px } .cache-operation-dialog>.card { border: 0; padding: 14px } .cache-operation-dialog .cache-dialog-heading { margin-bottom: 12px; padding: 9px 0 } .cache-operation-dialog .cache-dialog-heading>div:first-child { min-width: 0 } .cache-operation-dialog .cache-dialog-heading button { margin-inline-start: auto; flex: 0 0 auto } .vh-location { border: 1px solid var(--line); background: var(--panel); min-width: 0 } .vh-locations { display: grid; gap: 9px } .location-toolbar, .location-header-toolbar, .location-actions { display: flex; align-items: center; flex-wrap: wrap; gap: 7px } .location-toolbar { justify-content: space-between; margin-bottom: 8px } .location-toolbar-bottom { justify-content: flex-start; margin: 9px 0 0 } .location-summary { cursor: pointer; padding: 10px 12px; font: 600 11px/1.45 var(--mono); overflow-wrap: anywhere; color: var(--text) } .location-summary:hover { background: var(--panel-strong) } .location-body { border-top: 1px solid var(--line); padding: 12px } .location-section { border: 1px solid var(--line); min-width: 0 } .location-section>summary { cursor: pointer; padding: 9px 10px; color: var(--muted); font: 600 10px var(--mono); letter-spacing: .35px } .location-section>div { border-top: 1px solid var(--line); padding: 10px } .location-header-toolbar { justify-content: flex-start } .location-actions { justify-content: flex-end; padding-top: 4px } .location-return-box { padding-top: 3px } #location-help-dialog { width: min(760px, calc(100vw - 28px)); max-height: min(82vh, 760px) } #location-help-body { display: grid; gap: 8px; padding: 14px 16px 18px; overflow: auto } #location-help-body p { margin: 0; line-height: 1.55 } .acl-rule, .basic-user { display: grid; grid-template-columns: minmax(100px, 1fr) minmax(140px, 1fr) auto; align-items: end; gap: 7px; margin-block: 5px } .basic-user { grid-template-columns: 1fr 1fr auto auto } .basic-user .fine { align-self: center; font-size: 10px } .renewal-entry { display: grid; grid-template-columns: 1fr 2fr auto; gap: 8px; padding: 9px 0; border-bottom: 1px solid var(--line); align-items: center } .renewal-actions { display: flex; flex-wrap: wrap; gap: 5px } .renewal-entry .fine { grid-column: 1/-1 } @media(max-width:640px) { .basic-user, .acl-rule { grid-template-columns: 1fr 1fr } .renewal-entry { grid-template-columns: 1fr } .renewal-entry .fine { grid-column: auto } } #toast[popover] { border-radius: 0; pointer-events: none } .app-confirm-dialog { width: min(520px, calc(100vw - 28px)); max-width: none; padding: 0; border: 1px solid var(--line); border-radius: 4px; background: var(--panel); color: var(--text) } .app-confirm-dialog::backdrop { background: var(--backdrop); backdrop-filter: blur(2px) } .app-confirm-card { margin: 0; border: 0; padding: 18px } .app-confirm-message { margin-top: 14px; color: var(--text); white-space: pre-line; overflow-wrap: anywhere } .app-confirm-actions { justify-content: flex-end; margin-top: 18px } .app-confirm-danger { border-color: var(--red); color: var(--red) } .app-confirm-danger:hover { border-color: var(--red); background: rgb(255 170 162 / .08) } #panel-tls>.config-columns { display: block; margin-top: 12px } #certificate-list { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 280px), 1fr)); gap: 10px } #certificate-list>.entity { border: 1px solid var(--line); padding: 12px; min-width: 0 } .certificate-card-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 10px } .certificate-card-identity { min-width: 0 } .certificate-state-pills { margin-top: 8px } .certificate-card .pill { color: var(--accent) } .certificate-coverage { margin-top: 14px } .certificate-coverage>.small-label { display: block; margin-bottom: 7px } .certificate-domain-pills { margin-top: 0 } .certificate-domain-pills .pill { max-width: 100%; overflow-wrap: anywhere } .certificate-coverage-unknown { color: var(--muted) !important; font: 10px/1.5 var(--mono) !important } .certificate-details { margin-top: 12px; border-top: 1px solid var(--line); border-bottom: 1px solid var(--line) } .certificate-details summary { cursor: pointer; padding: 9px 0; color: var(--muted); font: 10px var(--mono); letter-spacing: .7px } .certificate-details summary:hover { color: var(--text) } .certificate-details-body { padding: 0 0 8px } .certificate-details .entity-details { margin: 4px 0 } .certificate-card>.entity-actions { margin-top: 10px } .auth-page.auth-loading .auth-top, .auth-page.auth-loading .auth-main { visibility: hidden } .auth-page { min-height: 100vh } .auth-top { display: flex; align-items: center; justify-content: space-between; padding: 18px 24px; border-bottom: 1px solid var(--line) } .auth-main { max-width: 560px; margin: auto; padding: 28px 20px } .auth-main .login-section { padding: 0; max-width: none } .auth-main .login-card { width: 100%; max-width: none } .auth-main h1 { font-size: 1.65rem; margin-bottom: 18px } .login-section #auth-message:empty { display: none } .login-section #auth-message { margin-top: 14px; padding: 11px 12px; border: 1px solid var(--line); background: var(--panel2); color: var(--text); font-size: 12px; line-height: 1.5; overflow-wrap: anywhere } .login-section #auth-message.error { border-color: rgb(255 170 162 / .58); background: rgb(255 170 162 / .07); color: var(--red) } .location-header-editor { min-width: 0 } .location-header-editor h3 { font-size: 12px; margin: 8px 0 } .location-header-editor .vh-header-row { grid-template-columns: 100px minmax(120px, 1fr) minmax(120px, 1.3fr) auto } @media(max-width:650px) { .location-header-editor .vh-header-row { grid-template-columns: 1fr 1fr } .location-toolbar, .location-actions { align-items: stretch } .location-toolbar>button, .location-actions>button { flex: 1 1 150px } .auth-top { padding: 14px } .auth-main { padding: 22px 14px } } .location-header-direction { border: 1px solid var(--line); background: var(--panel2); padding: 10px; min-width: 0 } .location-header-direction-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 12px; margin-bottom: 8px } .location-header-direction-head h3, .location-header-direction-head p { margin: 0 } .location-header-direction-head p { max-width: 56ch; text-align: right } .vh-header-empty { margin: 8px 0; padding: 9px 10px; border: 1px dashed var(--line) } .location-header-editor .vh-header-rows { display: grid; gap: 8px } .location-header-editor .vh-header-row { display: block; border: 1px solid var(--line); background: var(--panel); padding: 9px } .vh-header-rule-head { display: flex; align-items: center; justify-content: space-between; gap: 8px; margin-bottom: 8px } .vh-header-rule-title { font: 600 10px var(--mono); color: var(--muted); text-transform: uppercase; letter-spacing: .45px } .vh-header-rule-fields { display: grid; grid-template-columns: minmax(100px, .55fr) minmax(140px, 1fr) minmax(180px, 1.35fr); align-items: end; gap: 8px } .vh-header-row.is-remove .vh-header-rule-fields { grid-template-columns: minmax(100px, .55fr) minmax(140px, 1fr) minmax(180px, 1.35fr) } .location-add-header { margin-top: 8px } .location-preview { border: 1px solid var(--line); background: var(--panel2); padding: 11px 12px } .location-preview h4 { margin: 0 0 8px; font-size: 12px } .location-preview-disabled { margin: 0 0 8px; color: var(--red) } .location-preview-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 7px 14px; margin: 0 } .location-preview-grid>div { min-width: 0 } .location-preview-grid dt { color: var(--muted); font: 10px var(--mono); margin-bottom: 2px } .location-preview-grid dd { margin: 0; font-size: 11px; overflow-wrap: anywhere } .location-doc-intro { padding: 10px 12px; border: 1px solid var(--line); background: var(--panel2) } .location-doc-section { border-top: 1px solid var(--line); padding-top: 10px } .location-doc-section h3 { margin: 0 0 7px; font-size: 12px } .location-doc-section p+p { margin-top: 7px !important } .location-doc-examples p { font-family: var(--mono); font-size: 10px; padding: 8px 9px; background: var(--panel2); border-left: 2px solid var(--accent) } @media(max-width:650px) { .location-header-direction-head { display: block } .location-header-direction-head p { text-align: left; margin-top: 5px } .vh-header-rule-fields, .vh-header-row.is-remove .vh-header-rule-fields, .location-preview-grid { grid-template-columns: 1fr } } .settings-tabs { display: grid; grid-template-columns: repeat(auto-fit, minmax(128px, 1fr)); width: 100%; gap: 5px } .settings-tabs button { width: 100%; min-width: 0; white-space: normal; text-align: center } .settings-pages, .settings-page, .settings-page>.edit-form { width: 100%; max-width: none } .logging-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 12px; margin: 14px 0 } .traffic-chart-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 12px; margin: 14px 0 } .traffic-chart-card { min-width: 0 } .traffic-donut-layout { display: grid; grid-template-columns: 148px minmax(0, 1fr); gap: 14px; align-items: center } .traffic-donut { position: relative; width: 148px; aspect-ratio: 1; border-radius: 50%; background: var(--panel2); box-shadow: inset 0 0 0 1px var(--line) } .traffic-donut::before { content: ""; position: absolute; inset: 23%; border-radius: 50%; background: var(--panel); box-shadow: 0 0 0 1px var(--line) } .traffic-donut>span { position: absolute; inset: 0; z-index: 1; display: grid; place-items: center; font: 700 16px var(--mono) } .traffic-chart-legend { display: grid; gap: 6px; padding: 0; margin: 0; list-style: none; min-width: 0 } .traffic-chart-legend li { display: flex; align-items: center; justify-content: space-between; gap: 8px; min-width: 0; font-size: 11px } .traffic-chart-legend li>span { display: flex; align-items: center; gap: 7px; min-width: 0 } .traffic-chart-swatch { width: 9px; height: 9px; border-radius: 50%; flex: 0 0 auto } .traffic-chart-label { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap } .traffic-chart-legend b { font: 700 10px var(--mono); flex: 0 0 auto } #panel-traffic .traffic-tabs { margin: 12px 0 14px } #panel-traffic [data-traffic-page] { min-width: 0 } .traffic-wide-chart { grid-column: span 2 } .traffic-bar-chart { display: grid; gap: 8px; min-width: 0 } .traffic-bar-row { display: grid; grid-template-columns: minmax(120px, 1.5fr) minmax(120px, 3fr) minmax(72px, auto); gap: 10px; align-items: center; min-width: 0 } .traffic-bar-label { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font: 11px var(--mono) } .traffic-bar-track { height: 10px; border-radius: 999px; background: var(--panel2); box-shadow: inset 0 0 0 1px var(--line); overflow: hidden } .traffic-bar-fill { display: block; height: 100%; min-width: 2px; border-radius: inherit; background: var(--accent) } .traffic-bar-value { text-align: right; font: 700 10px var(--mono) } @media(max-width:1100px) { .traffic-wide-chart { grid-column: span 1 } } @media(max-width:650px) { .traffic-bar-row { grid-template-columns: minmax(88px, 1.2fr) minmax(90px, 2fr) minmax(60px, auto); gap: 7px } } .logging-grid label { min-width: 0 } #settings-page-logging>.edit-form { width: 100%; max-width: none } .logging-settings-subform { margin: 0; min-width: 0 } @media(max-width:1100px) { .traffic-chart-grid { grid-template-columns: repeat(2, minmax(0, 1fr)) } } @media(max-width:720px) { .traffic-chart-grid, .logging-grid { grid-template-columns: 1fr } .traffic-donut-layout { grid-template-columns: 120px minmax(0, 1fr) } .traffic-donut { width: 120px } } #vhost-list, #web-service-list { display: grid; gap: 10px } #panel-vhosts .card-heading, #panel-web-server .card-heading { flex-wrap: wrap } .vhost-list-tools { display: flex; align-items: center; gap: 8px; margin-left: auto } #vhost-search, #web-service-search { width: min(260px, 32vw); min-width: 180px } .vhost-card { border: 1px solid var(--line); background: var(--panel); padding: 14px; min-width: 0 } .vhost-card-head { display: flex; justify-content: space-between; gap: 14px; align-items: flex-start } .vhost-card-identity { min-width: 0 } .vhost-title-line, .vhost-policy-pills { display: flex; align-items: center; flex-wrap: wrap; gap: 8px } .vhost-hosts { margin-top: 4px; font: 11px/1.45 var(--mono); color: var(--muted); overflow-wrap: anywhere } .vhost-detail-strip { display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: 1px; margin-top: 12px; border: 1px solid var(--line) } .vhost-detail { min-width: 0; padding: 9px 10px; background: var(--bg) } .vhost-detail span, .vhost-detail b { display: block } .vhost-detail b { margin-top: 3px; font-size: 11px; font-weight: 600; overflow-wrap: anywhere } .vhost-live-grid { display: grid; grid-template-columns: repeat(6, minmax(0, 1fr)); gap: 8px; margin-top: 10px } .vhost-live-metric { min-width: 0; padding: 9px 10px; border: 1px solid var(--line) } .vhost-live-metric span { display: block; color: var(--muted); font-size: 10px; text-transform: uppercase; letter-spacing: .04em } .vhost-live-metric strong { display: block; margin-top: 4px; font: 600 13px var(--mono); overflow-wrap: anywhere } .vhost-card .vh-health-summary { margin: 9px 0 0; grid-column: auto } .vhost-policy-pills { margin-top: 8px } .vhost-quick-toggle.is-enable { border-color: var(--pill-live-line); color: var(--green) } .vhost-quick-toggle.is-disable { border-color: var(--danger-line); color: var(--red) } @media(max-width:980px) { .logging-grid { grid-template-columns: 1fr } .vhost-live-grid { grid-template-columns: repeat(3, minmax(0, 1fr)) } } @media(max-width:640px) { .settings-tabs { grid-template-columns: repeat(2, minmax(0, 1fr)) } .vhost-card-head { flex-direction: column } #panel-vhosts .card-heading { align-items: stretch; flex-direction: column } .vhost-list-tools { width: 100%; margin-left: 0 } #vhost-search { flex: 1 1 auto; width: auto; min-width: 0 } .backend-card-heading { align-items: stretch; flex-direction: column } .backend-table-tools { width: 100%; justify-content: flex-start; margin-left: 0 } #pool-search { flex: 1 1 100%; width: 100%; min-width: 0 } .backend-column-options { right: auto; left: 0; grid-template-columns: 1fr; min-width: min(290px, 82vw) } .vhost-card-head .entity-actions { width: 100%; justify-content: flex-start } .vhost-live-grid { grid-template-columns: repeat(2, minmax(0, 1fr)) } } .acl-profile-layout { display: grid; grid-template-columns: minmax(0, 1.15fr) minmax(320px, .85fr); gap: 14px; align-items: start } .acl-profile-layout>.card, .logging-grid>.card { border-radius: 0 } .host-chip-field>span:first-child { display: block; color: var(--muted); font-size: 11px; margin-bottom: 7px } .host-chip-editor { min-height: 43px; display: flex; flex-wrap: wrap; align-items: center; gap: 6px; padding: 6px; border: 1px solid var(--field-line); background: var(--field-bg) } .host-chip-editor:focus-within { outline: 1px solid var(--green); border-color: var(--green) } .host-chip-editor input { flex: 1 1 210px; width: auto; min-width: 180px; border: 0; outline: 0; padding: 5px 6px; background: transparent } .host-chip { display: inline-flex; align-items: center; gap: 5px; padding: 4px 5px 4px 8px; border: 1px solid var(--line); background: var(--panel); font: 10px var(--mono) } .host-chip button { border: 0; background: transparent; color: var(--muted); padding: 0 3px; font-size: 15px; line-height: 1 } .host-chip button:hover { color: var(--red) } .vhost-chart { margin-top: 9px; border: 1px solid var(--line); background: var(--bg) } .vhost-chart-head { display: flex; align-items: center; justify-content: space-between; gap: 10px; padding: 7px 10px 0 } .vhost-chart svg { display: block; width: 100%; height: 54px } .vhost-chart-line { fill: none; stroke: var(--accent); stroke-width: 2; vector-effect: non-scaling-stroke } .logging-format-actions { display: grid; grid-template-columns: minmax(220px, 1fr) auto; gap: 14px; align-items: end } .logging-builder-action { display: grid; gap: 7px; justify-items: stretch; min-width: 180px } .logging-builder-action .small-label { text-align: right } .logging-builder-action button { width: 100% } .logging-builder-layout { display: grid; grid-template-columns: minmax(0, 1.55fr) minmax(260px, .85fr); gap: 14px; min-height: 0 } .logging-builder-layout>section { min-width: 0; border: 1px solid var(--line); padding: 12px; background: var(--bg) } .logging-preview pre { margin: 0; max-height: 420px; overflow: auto } @media(max-width:900px) { .acl-profile-layout, .logging-builder-layout, .logging-format-actions { grid-template-columns: 1fr } .logging-builder-action .small-label { text-align: left } } .acl-profile-rules-editor { margin-block: 10px 4px } .acl-profile-rules-heading { display: flex; align-items: center; justify-content: space-between; gap: 10px; margin-bottom: 6px } .acl-profile-rules-heading>span { color: var(--muted); font-size: 11px } .acl-profile-rule-rows:empty::before { content: "—"; display: block; color: var(--muted); padding: 8px 0 } .acl-profile-rule { grid-template-columns: minmax(120px, .65fr) minmax(180px, 1.35fr) auto; padding: 6px 0; border-bottom: 1px solid var(--line) } .acl-profile-rule label>span { display: block; color: var(--muted); font-size: 10px; margin-bottom: 4px } .acl-profile-bulk { margin-top: 9px; border-top: 1px solid var(--line); padding-top: 8px } .acl-profile-bulk>summary { cursor: pointer; color: var(--muted) } .pool-vhost-disabled { opacity: .55; background: var(--neutral-soft) } .pool-vhost-disabled td { color: var(--muted) } @media(max-width:640px) { .acl-profile-rule { grid-template-columns: 1fr } } #stream-list { display: grid; gap: 10px } #panel-streams .card-heading { flex-wrap: wrap } #stream-search { width: min(260px, 32vw); min-width: 180px } .stream-page-actions { display: flex; align-items: center; flex-wrap: wrap; gap: 8px 12px; margin: 0 0 10px } .stream-card .vhost-hosts { text-transform: none } .stream-live-grid { grid-template-columns: repeat(6, minmax(0, 1fr)) } .stream-chart-rx, .stream-chart-tx { fill: none; stroke-width: 2; vector-effect: non-scaling-stroke } .stream-chart-rx { stroke: var(--accent) } .stream-chart-tx { stroke: var(--green) } .stream-chart-legend { display: flex; justify-content: flex-end; flex-wrap: wrap; gap: 12px; padding: 0 10px 7px; color: var(--muted); font: 10px var(--mono) } .stream-socket-editor input[hidden] { display: none } .listener-address-chip-editor { min-height: 52px } @media(max-width:980px) { .stream-live-grid { grid-template-columns: repeat(3, minmax(0, 1fr)) } } @media(max-width:640px) { #panel-streams .card-heading { align-items: stretch; flex-direction: column } #panel-streams .vhost-list-tools { width: 100%; margin-left: 0 } #stream-search { flex: 1 1 auto; width: auto; min-width: 0 } .stream-live-grid { grid-template-columns: repeat(2, minmax(0, 1fr)) } } .redirect-listeners { display: grid; gap: .55rem; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)) } .redirect-listeners .check { margin: 0 } .redirect-rules { display: grid; gap: 1rem } .redirect-rule { border: 1px solid var(--line); border-radius: 12px; padding: 1rem; margin: 0; min-width: 0 } .redirect-rule legend { padding: 0 .4rem; font-weight: 700 } .redirect-card .vhost-detail-strip { grid-template-columns: repeat(3, minmax(0, 1fr)) } @media(max-width:760px) { .redirect-card .vhost-detail-strip { grid-template-columns: 1fr } .redirect-rule .vh-grid { grid-template-columns: 1fr } } .vh-tabs { flex-wrap: nowrap; overflow-x: auto; overscroll-behavior-x: contain; scrollbar-width: thin } .vh-tabs button { white-space: nowrap } .protocol-toggle-row { display: flex; flex-wrap: wrap; gap: 8px 18px; align-items: center; min-width: 0 } .protocol-toggle-row .check, .protocol-toggle-row .vh-check { margin: 0; min-width: min(280px, 100%) } .listener-choices { display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: 8px } .listener-choices>.fine { grid-column: 1/-1; margin: 0 0 2px } .listener-choices>label { display: flex; min-height: 44px; align-items: center; margin: 0 } .vh-members { gap: 12px } .vh-backend-card { padding: 0; overflow: hidden; background: var(--panel) } .vh-backend-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 10px 12px; border-bottom: 1px solid var(--line) } .vh-backend-identity { display: grid; gap: 2px; min-width: 0 } .vh-backend-title { font-size: 13px } .vh-backend-endpoint { overflow-wrap: anywhere } .vh-backend-main { padding: 12px } .vh-backend-switches { display: flex; flex-wrap: wrap; gap: 6px 16px; padding-top: 2px } .vh-backend-switches .vh-check { margin: 0; min-height: 26px } .vh-backend-connection { padding-top: 8px; border-top: 1px dashed var(--line) } .vh-backend-advanced { margin: 0 12px 10px; padding-top: 8px; border-top: 1px solid var(--line) } .vh-backend-advanced>summary, .auth-advanced>summary { cursor: pointer; color: var(--muted); font-size: 11px; font-weight: 600; padding: 4px 0 8px } .vh-backend-actions { display: flex; align-items: center; flex-wrap: wrap; gap: 8px 12px; padding: 0 12px 12px } .vh-backend-actions .fine { flex: 1 1 320px; margin: 0 } .vh-local-risk-gate { border: 1px solid var(--line); border-radius: 5px; padding: 8px } .vh-local-risk-gate .fine { margin: 5px 0 0 } .auth-subcard { border: 1px solid var(--line); border-radius: 6px; padding: 10px; display: grid; gap: 8px } .auth-subcard>h3 { margin: 0; font-size: 12px } .auth-ip-card { margin-top: 2px } .auth-advanced { border-top: 1px solid var(--line); padding-top: 4px } .vh-cache-options[hidden] { display: none } #redirect-listeners>.listener-choices { width: 100% } @media(max-width:760px) { .protocol-toggle-row { display: grid; grid-template-columns: 1fr } .protocol-toggle-row .check, .protocol-toggle-row .vh-check { min-width: 0 } .listener-choices { grid-template-columns: 1fr } .vh-backend-head { align-items: flex-start } } .docker-toolbar { display: flex; align-items: center; justify-content: space-between; gap: 16px; margin-bottom: 16px; } .toolbar-actions { display: flex; gap: 8px; flex-wrap: wrap; justify-content: flex-end; } .docker-agent-observations, .docker-agent-settings-list { display: grid; gap: 16px; } .docker-agent-card, .docker-agent-settings { min-width: 0; } .docker-agent-heading-actions { align-items: center; } .docker-agent-status-badge { display: inline-flex; align-items: center; justify-content: center; min-width: 88px; text-align: center; } .docker-agent-summary { display: flex; flex-wrap: wrap; gap: 7px 18px; margin: 8px 0 16px; padding: 10px 12px; border: 1px solid var(--line); background: var(--panel2); font-size: 12px; color: var(--muted); } .docker-agent-security { display: flex; align-items: center; gap: 10px; padding: 9px 11px; margin: 4px 0 10px; border-left: 2px solid var(--line); background: var(--panel2); min-width: 0; } .docker-agent-security .fine { overflow-wrap: anywhere; } .docker-agent-error { display: grid; gap: 5px; padding: 12px; border: 1px solid var(--danger-line); background: rgba(255, 170, 162, .04); } .docker-service-list { display: grid; gap: 10px; } .docker-service-row { display: grid; gap: 12px; padding: 13px; border: 1px solid var(--line); background: var(--panel2); min-width: 0; } .docker-service-row.is-unpublished { opacity: .72; } .docker-service-row.is-view-hidden { border-style: dashed; opacity: .58; } .docker-service-head { display: grid; grid-template-columns: auto minmax(220px, 1fr) minmax(300px, 1.25fr); align-items: center; gap: 14px; min-width: 0; } .docker-service-meta { display: grid; gap: 2px; min-width: 0; } .docker-service-meta span { color: var(--muted); font-size: 12px; overflow-wrap: anywhere; } .docker-runtime { display: flex; align-items: center; justify-content: flex-end; gap: 10px; min-width: 0; text-align: right; } .docker-runtime .fine { overflow-wrap: anywhere; } .docker-route-grid { display: grid; grid-template-columns: minmax(190px, 1.1fr) minmax(190px, 1fr) minmax(210px, 1fr) 100px auto; align-items: end; gap: 10px; } .docker-route-grid>label:not(.check), .docker-health-grid>label { display: grid; gap: 5px; min-width: 0; } .docker-route-grid>label:not(.check)>span, .docker-health-grid>label>span { color: var(--muted); font-size: 11px; } .docker-route-grid input:not([type="checkbox"]), .docker-route-grid select, .docker-health-grid input:not([type="checkbox"]), .docker-health-grid select { min-width: 0; width: 100%; } .docker-preserve-field { align-self: center; padding-bottom: 9px; white-space: nowrap; } .docker-health-editor { border-top: 1px solid var(--line); padding-top: 9px; } .docker-health-editor>summary { cursor: pointer; display: flex; align-items: center; justify-content: space-between; gap: 12px; user-select: none; } .docker-health-editor>summary::marker { color: var(--muted); } .docker-health-grid { display: grid; grid-template-columns: repeat(5, minmax(120px, 1fr)); gap: 10px; margin-top: 12px; } .docker-passive-health-editor .docker-health-grid { grid-template-columns: repeat(4, minmax(180px, 1fr)); align-items: start; } .docker-passive-health-editor .docker-checkbox-field { min-width: 0; } .docker-passive-health-editor .docker-checkbox-field .vh-check { width: max-content; max-width: 100%; } .docker-passive-health-editor .docker-checkbox-field input[type="checkbox"] { width: auto; } .docker-passive-health-editor .docker-passive-5xx-warning, .docker-passive-health-editor .docker-passive-slow-warning { grid-column: span 2; margin: 0; min-width: 0; } .docker-agent-grid { margin-top: 10px; } .docker-agent-listener-field { grid-column: 1/-1; display: grid; gap: 6px; min-width: 0; } .docker-agent-field-label { font-size: 11px; color: var(--muted); } .docker-agent-listener-choices { margin: 0; } .docker-agent-listener-choices>label { min-height: 38px; } .docker-agent-grid .mono, .docker-agent-summary .mono { font-family: var(--mono); font-size: 11px; } .pill.warn { border-color: var(--warn-line); color: var(--accent); } .pill.danger { border-color: var(--danger-line-strong); color: var(--red); } .docker-toolbar input[type="search"] { width: min(280px, 38vw); } .cache-toolbar-status { margin-left: auto; display: flex; align-items: center; gap: 12px; white-space: nowrap; } @media (max-width: 1320px) { .docker-service-head { grid-template-columns: auto 1fr; } .docker-runtime { grid-column: 2; justify-content: flex-start; text-align: left; flex-wrap: wrap; } .docker-route-grid { grid-template-columns: 1fr 1fr 1fr; } .docker-preserve-field { padding-bottom: 0; } .docker-health-grid { grid-template-columns: repeat(3, minmax(130px, 1fr)); } .docker-passive-health-editor .docker-health-grid { grid-template-columns: repeat(2, minmax(180px, 1fr)); } } @media (max-width: 760px) { .docker-service-head { grid-template-columns: 1fr; align-items: stretch; } .docker-runtime { grid-column: auto; justify-content: flex-start; text-align: left; } .docker-route-grid, .docker-health-grid { grid-template-columns: 1fr; } .docker-passive-health-editor .docker-health-grid { grid-template-columns: 1fr; } .docker-passive-health-editor .docker-passive-5xx-warning, .docker-passive-health-editor .docker-passive-slow-warning { grid-column: auto; } .docker-toolbar { align-items: flex-start; flex-direction: column; } .docker-agent-security { align-items: flex-start; flex-direction: column; } .docker-toolbar input[type="search"] { width: 100%; } .cache-toolbar-status { margin-left: 0; width: 100%; justify-content: flex-start; } } #panel-settings:not([hidden]) { display: grid; grid-template-columns: minmax(180px, 220px) minmax(0, 1fr); gap: 12px; align-items: start } #panel-settings .settings-shortcuts { grid-column: 1 / -1; width: 100% } #panel-settings .settings-tabs { display: flex; flex-direction: column; position: sticky; top: 12px; margin: 0; gap: 2px } #panel-settings .settings-tabs button { width: 100%; text-align: left; white-space: normal } #panel-settings .settings-pages { min-width: 0 } @media (max-width: 900px) { #panel-settings:not([hidden]) { display: block; } #panel-settings .settings-shortcuts { margin-bottom: 10px; } #panel-settings .settings-tabs { display: flex; flex-direction: row; position: static; overflow-x: auto; overscroll-behavior-inline: contain; scrollbar-width: thin; margin-bottom: 12px } #panel-settings .settings-tabs button { flex: 0 0 auto; width: auto; min-width: 120px; white-space: nowrap; text-align: center } } .docker-live-switch { align-self: center; white-space: nowrap; } .docker-service-row.is-dirty { border-color: var(--accent); box-shadow: inset 3px 0 0 var(--accent); } .docker-service-actions { display: flex; justify-content: flex-end; gap: 8px; } .docker-acl-editor, .docker-timeout-editor { border-top: 1px solid var(--line); padding-top: 9px; } .docker-acl-editor>summary, .docker-timeout-editor>summary { cursor: pointer; display: flex; align-items: center; justify-content: space-between; gap: 12px; user-select: none; } .docker-acl-grid, .docker-timeout-grid { display: grid; grid-template-columns: repeat(4, minmax(140px, 1fr)); gap: 10px; margin-top: 12px; } .docker-acl-grid>label:not(.check), .docker-timeout-grid>label { display: grid; gap: 5px; min-width: 0; } .docker-acl-grid textarea { width: 100%; min-height: 86px; font-family: var(--mono); } @media (max-width: 1000px) { .docker-acl-grid, .docker-timeout-grid { grid-template-columns: 1fr 1fr; } } @media (max-width: 760px) { .docker-acl-grid, .docker-timeout-grid { grid-template-columns: 1fr; } .docker-service-actions { justify-content: stretch; } .docker-service-actions button { width: 100%; } } .security-page-heading { display: flex; align-items: flex-start; justify-content: space-between; gap: 18px; margin-bottom: 14px; } .security-page-heading h2 { margin: 3px 0 4px; } .security-page-heading p { margin: 0; max-width: 760px; } .security-stack { display: grid; gap: 14px; } .security-account-card .session-user { margin: 4px 0 0; } .security-account-card .security-note { margin: 10px 0 14px; } .security-editor { border-top: 1px solid var(--line); margin-top: 14px; padding-top: 10px; } .security-editor>summary { cursor: pointer; display: flex; justify-content: space-between; align-items: center; gap: 14px; user-select: none; } .security-editor>summary>span { font-weight: 700; } .security-inline-form { margin-top: 14px; padding: 0; border: 0; background: transparent; } .security-policy-card #host-policy-list { display: grid; gap: 8px; } .audit-dialog { width: min(1040px, calc(100vw - 24px)); max-height: calc(100dvh - 28px); overflow: hidden; } .audit-dialog-card { border: 0; padding: 12px; background: var(--bg); } .audit-dialog .table-scroll { max-height: min(68dvh, 680px); overflow: auto; border-top: 1px solid var(--line); } .audit-dialog table { font: 11px var(--mono); } .audit-dialog th, .audit-dialog td { padding: 7px 8px; max-width: 440px; overflow: hidden; text-overflow: ellipsis; } .audit-dialog th { position: sticky; top: 0; background: var(--panel); } .docker-agent-overview { display: flex; flex-wrap: wrap; gap: 7px 18px; margin: 8px 0 10px; color: var(--muted); font-size: 12px; } .docker-agent-details { margin: 0 0 12px; border-top: 1px solid var(--line); padding-top: 8px; } .docker-agent-details>summary { cursor: pointer; color: var(--muted); font-size: 11px; user-select: none; } .docker-agent-details .docker-agent-summary { margin: 9px 0 0; } .docker-service-row { gap: 8px; padding: 10px 12px; } .docker-service-head { grid-template-columns: auto minmax(260px, 1fr) minmax(300px, 1.25fr); gap: 12px; } .docker-service-head-actions { display: flex; align-items: center; justify-content: flex-end; gap: 10px; min-width: 0; } .docker-service-head-actions .docker-runtime { flex: 1 1 auto; } .docker-service-head-actions .docker-view-toggle { flex: 0 0 auto; } .docker-service-editor { border-top: 1px solid var(--line); padding-top: 8px; } .docker-service-editor>summary { cursor: pointer; display: flex; align-items: center; justify-content: space-between; gap: 14px; user-select: none; } .docker-service-editor>summary>span { font-weight: 700; font-size: 12px; } .docker-service-editor .docker-config-hint { text-align: right; overflow-wrap: anywhere; } .docker-service-editor[open]>summary { margin-bottom: 12px; } .docker-service-actions { padding-top: 10px; border-top: 1px solid var(--line); } @media (max-width: 1320px) { .docker-service-head { grid-template-columns: auto 1fr; } .docker-service-head-actions { grid-column: 2; justify-content: flex-start; flex-wrap: wrap; } } @media (max-width: 760px) { .security-page-heading { flex-direction: column; } .security-page-heading>button { width: 100%; } .security-editor>summary, .docker-service-editor>summary { align-items: flex-start; flex-direction: column; } .docker-service-head { grid-template-columns: 1fr; } .docker-service-head-actions { grid-column: auto; align-items: flex-start; flex-direction: column; } .docker-service-editor .docker-config-hint { text-align: left; } } .traffic-line { fill: none; vector-effect: non-scaling-stroke; } .traffic-line-total { stroke: var(--muted); stroke-width: 1.25; opacity: .72; } .traffic-line-h1 { stroke: var(--accent); stroke-width: 2; } .traffic-line-h2 { stroke: var(--green); stroke-width: 2; } .traffic-line-h3 { stroke: var(--blue); stroke-width: 2; } .traffic-line-transform { stroke: var(--transform-chart); stroke-width: 2.4; stroke-dasharray: 5 3; } .traffic-protocol-legend { display: flex; flex-wrap: wrap; gap: 7px 16px; margin: 2px 0 7px; color: var(--muted); font: 9px var(--mono); } .traffic-protocol-legend span { display: inline-flex; align-items: center; gap: 5px; } .traffic-protocol-legend i { width: 12px; height: 2px; display: inline-block; background: var(--muted); } .traffic-protocol-legend .legend-h1 i { background: var(--accent); } .traffic-protocol-legend .legend-h2 i { background: var(--green); } .traffic-protocol-legend .legend-h3 i { background: var(--blue); } .traffic-protocol-legend .legend-transform i { background: var(--transform-chart); } .traffic-protocol-legend b { color: var(--text); font-weight: 600; } body[data-density="compact"] { --ui-gap: 2px; --ui-card: 5px; --ui-font: 10.75px; --ui-control: 22px; line-height: 1.32; } body[data-density="compact"] .shell { grid-template-columns: 164px minmax(0, 1fr); } body[data-density="compact"] main { padding: 0 10px; } body[data-density="compact"] .sidebar { padding: 14px 9px; } body[data-density="compact"] .sidebar nav { margin-top: 14px; } body[data-density="compact"] .nav { padding: 6px 7px; } body[data-density="compact"] .topbar { height: 42px; } body[data-density="compact"] .page-intro { padding: 7px 0 6px; gap: 7px; } body[data-density="compact"] .page-intro h1 { font-size: 20px; } body[data-density="compact"] .page-intro .lead { font-size: 10px; margin-top: 2px; } body[data-density="compact"] .card-heading { margin-bottom: 5px; } body[data-density="compact"] .card-heading h2 { font-size: 14px; } body[data-density="compact"] .stat { padding: 6px 7px; } body[data-density="compact"] .stat strong { font-size: 18px; margin: 1px 0; } body[data-density="compact"] .stat p, body[data-density="compact"] .stat small { font-size: 9px; } body[data-density="compact"] .transport-grid>div { padding: 4px 7px !important; } body[data-density="compact"] .transport-grid span { font-size: 9px; } body[data-density="compact"] .transport-grid b { font-size: 12px; } body[data-density="compact"] .activity-card svg { height: 84px; } body[data-density="compact"] .system-card svg { height: 66px; } body[data-density="compact"] .runtime-card dl { margin-top: 4px; } body[data-density="compact"] .runtime-card dl div { margin-top: 2px; padding-bottom: 2px; } body[data-density="compact"] .mini-metrics div { margin-top: 2px; } body[data-density="compact"] .pool-table th, body[data-density="compact"] .pool-table td { padding: 3px 5px; font-size: 10px; } body[data-density="compact"] .pool-card .table-scroll { max-height: 170px; } body[data-density="compact"] input:not([type="checkbox"]):not([type="radio"]), body[data-density="compact"] select, body[data-density="compact"] textarea, body[data-density="compact"] button, body[data-density="compact"] .primary, body[data-density="compact"] .outline, body[data-density="compact"] .quiet { padding: 3px 7px; font-size: 10px; } body[data-density="compact"] .vhost-row { padding: 6px 7px; gap: 1px 9px; } body[data-density="compact"] .docker-service-row { padding: 6px 8px; gap: 4px; } body[data-density="compact"] .docker-service-head { gap: 7px; } body[data-density="compact"] .docker-agent-overview { gap: 4px 12px; margin: 4px 0 6px; font-size: 10px; } body[data-density="compact"] .docker-agent-details { margin-bottom: 6px; padding-top: 5px; } body[data-density="compact"] .docker-service-editor { padding-top: 5px; } body[data-density="compact"] .docker-service-editor[open]>summary { margin-bottom: 7px; } body[data-density="compact"] .security-stack { gap: 7px; } body[data-density="compact"] .security-editor { margin-top: 8px; padding-top: 6px; } body[data-density="compact"] .page-footer { padding: 7px 0; margin-top: 4px; } #sparkline.traffic-line-total { stroke: var(--muted); stroke-width: 1.25; opacity: .72; } #sparkline-h1.traffic-line-h1 { stroke: var(--accent); } #sparkline-h2.traffic-line-h2 { stroke: var(--green); } #sparkline-h3.traffic-line-h3 { stroke: var(--blue); } .docker-open-app { white-space: nowrap; } @media (max-width: 850px) { body[data-density="compact"] .sidebar nav { margin-top: 0; } body[data-density="compact"] .sidebar { padding: 8px 9px; } body[data-density="compact"] .topbar { height: 42px; } } .metric-explainer { margin: 8px 0 2px; line-height: 1.45 } .network-interface-charts { display: grid; gap: 8px; max-height: 260px; overflow: auto; padding-right: 2px } .network-interface-row { min-width: 0; padding: 7px 8px; border: 1px solid var(--line); border-radius: 5px; background: var(--panel2) } .network-interface-row-head { display: flex; align-items: baseline; justify-content: space-between; gap: 10px; margin-bottom: 3px } .network-interface-row-head b { min-width: 0; overflow-wrap: anywhere; color: var(--text); font-size: 10px } .network-interface-row-head .fine { flex: 0 0 auto; text-align: right; white-space: nowrap } .network-interface-row svg { display: block; width: 100%; height: 48px; overflow: visible } .network-interface-empty { margin: 0; padding: 8px 0 } .docker-agent-grid>label { display: grid; align-content: start; gap: 6px; min-width: 0; margin: 0 !important } .docker-agent-grid>label>span:first-child, .docker-agent-field-label { min-height: 14px; line-height: 14px } .docker-agent-grid input:not([type="checkbox"]), .docker-agent-grid select { width: 100%; min-width: 0; min-height: 38px; margin: 0; box-sizing: border-box } .docker-agent-grid>label>small { margin: 0; line-height: 1.35 } .docker-agent-heading-actions { display: flex; align-items: center; gap: 9px } .docker-agent-heading-actions .check { margin: 0 !important; min-height: 32px } .docker-agent-heading-actions>.quiet, .docker-agent-status-badge { min-height: 32px; box-sizing: border-box } .docker-agent-listener-field { margin-top: 2px; padding-top: 4px; border-top: 1px solid var(--line) } #docker-agent-add { display: inline-flex; margin-top: 14px } #docker-agents-form>.form-actions { justify-content: flex-start; margin-top: 16px; padding-top: 14px; border-top: 1px solid var(--line) } @media (max-width: 760px) { .network-interface-row-head { align-items: flex-start; flex-direction: column; gap: 2px } .network-interface-row-head .fine { white-space: normal; text-align: left } .docker-agent-heading-actions { flex-wrap: wrap; justify-content: flex-start } #docker-agents-form>.form-actions { justify-content: flex-start } } .network-interface-charts { gap: 8px; padding-right: 0 } .network-interface-row { min-width: 0; padding: 0; border: 0; border-radius: 0; background: transparent } .network-interface-row+.network-interface-row { border-top: 1px solid var(--line); padding-top: 8px } .network-interface-row-head { margin-bottom: 5px } .network-interface-row-head b { color: var(--text); font: 600 10px var(--mono) } .network-interface-row-head .fine { flex: 0 0 auto; text-align: right; white-space: nowrap; font: 10px var(--mono) } .network-interface-row svg { display: block; width: 100%; height: 60px; overflow: visible } .docker-route-grid { align-items: start } .docker-field { display: grid; align-content: start; gap: 5px; min-width: 0; margin: 0 !important } .docker-field>span:first-child { min-height: 14px; line-height: 14px; color: var(--muted); font-size: 11px } .docker-route-grid .docker-field input:not([type="checkbox"]), .docker-route-grid .docker-field select, .docker-acl-grid .docker-field input:not([type="checkbox"]), .docker-acl-grid .docker-field select { width: 100%; min-width: 0; min-height: 38px; height: 38px; align-self: start; box-sizing: border-box } .docker-checkbox-field .vh-check { min-height: 28px; margin: 0 !important; align-items: center } .check>span { display: inline-flex; align-items: center; min-height: 15px; line-height: 1.25 } .check input[type="checkbox"] { flex: 0 0 auto; align-self: center; transform: translateY(-1px) } .cache-toolbar-status .check, .docker-toolbar .check { margin: 0 !important } .docker-switch-row { grid-column: span 3; display: grid; grid-template-columns: repeat(5, minmax(110px, 160px)); justify-content: start; align-items: start; gap: 8px; min-width: 0; overflow-x: auto; padding-bottom: 2px } .transform-diagnostics { grid-template-columns: repeat(2, minmax(0, 1fr)); } .transform-reason-list { display: flex; flex-wrap: wrap; gap: 7px; } .cache-transform-badge { display: inline-flex; align-items: center; margin-left: 6px; padding: 1px 5px; border: 1px solid var(--pill-line); border-radius: 3px; color: var(--accent); font: 9px var(--mono); text-transform: uppercase; letter-spacing: .35px; } .docker-switch-row .docker-checkbox-field { min-width: 110px; max-width: 160px } .docker-preserve-field { align-self: start; padding-bottom: 0; white-space: nowrap } .docker-acl-grid { align-items: start } .docker-acl-grid>.docker-field { align-self: start } .docker-acl-grid textarea { align-self: start; box-sizing: border-box } @media (max-width: 760px) { .network-interface-row-head { align-items: flex-start; flex-direction: column; gap: 2px } .network-interface-row-head .fine { white-space: normal; text-align: left } } .docker-route-grid { grid-template-columns: minmax(190px, 1fr) minmax(250px, 1.35fr) minmax(210px, 1fr) minmax(120px, .65fr) } .docker-alias-field { grid-column: span 2 } .docker-alias-field>span:first-child { margin-bottom: 0 } .docker-alias-editor { min-height: 38px; padding: 3px 5px; gap: 4px; box-sizing: border-box } .docker-route-grid .docker-alias-editor input:not([type="checkbox"]) { flex: 1 1 180px; width: auto; min-width: 150px; min-height: 30px; height: 30px; padding: 2px 4px } .docker-alias-field>small, .docker-checkbox-field>small { margin: 0; line-height: 1.35 } @media (max-width: 1320px) { .docker-route-grid { grid-template-columns: 1fr 1fr } .docker-alias-field, .docker-switch-row { grid-column: 1 / -1 } } @media (max-width: 760px) { .docker-route-grid { grid-template-columns: 1fr } .docker-alias-field { grid-column: auto } .transform-diagnostics { grid-template-columns: 1fr; } } #panel-tls .certificate-workspace-heading { align-items: flex-start; margin-bottom: 12px } #panel-tls .certificate-workspace-heading>div, #panel-tls .certificate-subheading>div { min-width: 0 } #panel-tls .certificate-workspace-heading p, #panel-tls .certificate-subheading p, #panel-tls .certificate-section-intro p { margin: 5px 0 0 } #panel-tls .certificate-tabs { grid-template-columns: repeat(3, minmax(0, 1fr)); margin-bottom: 16px } #panel-tls .certificate-page[hidden] { display: none !important } #panel-tls .certificate-section-intro { margin: 2px 0 12px } #panel-tls .certificate-section-intro h3, #panel-tls .certificate-subheading h3 { margin: 0 } #panel-tls .certificate-safety { margin: 8px 0 12px } #panel-tls .certificate-inventory-card { padding: 14px } #panel-tls .certificate-library-footer { display: grid; gap: 8px; margin-top: 14px; padding-top: 12px; border-top: 1px solid var(--line) } #panel-tls .certificate-library-footer p { margin: 0 } #panel-tls .certificate-operation-card { display: grid; gap: 10px; margin-bottom: 12px; border-left: 3px solid var(--line) } #panel-tls .certificate-operation-card[data-state="running"] { border-left-color: var(--accent) } #panel-tls .certificate-operation-card[data-state="ready"], #panel-tls .certificate-operation-card[data-state="complete"] { border-left-color: var(--green) } #panel-tls .certificate-operation-card[data-state="failed"] { border-left-color: var(--red) } #panel-tls .certificate-operation-heading { display: flex; align-items: flex-start; justify-content: space-between; gap: 12px } #panel-tls .certificate-operation-heading>div { display: grid; gap: 6px; min-width: 0 } #panel-tls .certificate-operation-heading strong { overflow-wrap: anywhere } #panel-tls .certificate-operation-card[data-state="failed"] .certificate-operation-heading strong, #panel-tls .certificate-operation-card[data-state="failed"] .pill { color: var(--red) } #panel-tls .certificate-operation-card[data-state="ready"] .pill, #panel-tls .certificate-operation-card[data-state="complete"] .pill { color: var(--green) } #panel-tls .certificate-log-path { margin: 0; padding: 9px 10px; border: 1px solid var(--line); background: var(--bg); font-family: var(--mono); overflow-wrap: anywhere } #panel-tls .certificate-renewal-card { padding: 12px } #panel-tls .renewal-entry { display: grid; grid-template-columns: 1fr; gap: 10px; padding: 13px; margin-bottom: 10px; border: 1px solid var(--line); background: var(--bg); align-items: stretch } #panel-tls .renewal-entry:last-child { margin-bottom: 0 } #panel-tls .renewal-entry[data-state="failed"] { border-left: 3px solid var(--red) } #panel-tls .renewal-entry-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 12px } #panel-tls .renewal-entry-identity { display: grid; gap: 3px; min-width: 0 } #panel-tls .renewal-entry-identity strong { overflow-wrap: anywhere } #panel-tls .renewal-entry .fine { grid-column: auto; margin: 0 } #panel-tls .renewal-meta { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 8px } #panel-tls .renewal-meta-item { display: grid; gap: 5px; padding: 9px; border: 1px solid var(--line) } #panel-tls .renewal-meta-item strong { font-size: 12px; font-weight: 600; overflow-wrap: anywhere } #panel-tls .renewal-message { padding-top: 2px } #panel-tls .renewal-actions { justify-content: flex-end; padding-top: 2px } #panel-tls .certificate-generator-card { padding: 14px } #panel-tls .certificate-generator-card>.provider-picker { display: grid; gap: 6px; font-size: 12px; font-weight: 600 } #panel-tls .certificate-generator-card>.provider-hint { padding: 0; margin: 7px 0 12px } #panel-tls .certificate-editor-card { max-width: none; margin: 0; padding: 14px 0 0; border: 0; border-top: 1px solid var(--line); box-shadow: none } #panel-tls .certificate-editor-card[hidden] { display: none !important } #panel-tls details.certificate-editor-card>summary { padding: 0 0 12px } #panel-tls .certificate-editor-card .vh-grid { gap: 10px 14px } @media(max-width:700px) { #panel-tls .certificate-workspace-heading, #panel-tls .certificate-subheading, #panel-tls .certificate-operation-heading, #panel-tls .renewal-entry-head { align-items: stretch; flex-direction: column } #panel-tls .certificate-workspace-heading>button, #panel-tls .certificate-subheading>button { width: 100% } #panel-tls .certificate-tabs { grid-template-columns: 1fr } #panel-tls .renewal-meta { grid-template-columns: 1fr } #panel-tls .renewal-actions { justify-content: stretch } #panel-tls .renewal-actions button { flex: 1 1 100% } } .operation-message:empty { display: none; } .operation-message { margin: 14px 0 0; padding: 11px 12px; border: 1px solid var(--line); background: var(--panel2); color: var(--text); font-size: 12px; line-height: 1.5; overflow-wrap: anywhere; } .operation-message.error { border-color: rgb(255 170 162 / .58); background: rgb(255 170 162 / .07); color: var(--red); } .cache-toolbar-message { flex-basis: 100%; margin-top: 0; } .cache-operation-dialog { width: min(920px, calc(100vw - 32px)); } .cache-operation-dialog .card { margin: 0; } .stat-with-action { padding-right: 116px; } .stat-corner-action { position: absolute; top: 10px; right: 10px; margin: 0; } .stat-chart strong { margin-bottom: 3px; } .stat-chart svg { display: block; width: 100%; height: 26px; margin-top: 2px; } .stat-chart .stat-chart-legend { display: flex; flex-wrap: nowrap; gap: 6px 10px; margin-top: 2px; white-space: nowrap; } .stat-chart .stat-chart-legend span { display: inline-flex; align-items: center; gap: 5px; } .stat-chart .stat-chart-legend i { width: 8px; height: 8px; border-radius: 999px; display: inline-block; background: currentColor; } .stat-chart .stat-chart-legend b { font-family: var(--mono); font-weight: 500; } .proto-h1-line { stroke: var(--traffic-h1); fill: none; stroke-width: 2; } .proto-h2-line { stroke: var(--traffic-h2); fill: none; stroke-width: 2; } .proto-h3-line { stroke: var(--traffic-h3); fill: none; stroke-width: 2; } .stat-chart .chart-grid { opacity: .28; } .function-live-chart { width: 100%; padding: 0; overflow: hidden } .function-live-chart-summary { display: flex; align-items: center; gap: 12px; min-height: 52px; padding: 13px 15px; cursor: pointer; list-style: none; user-select: none } .function-live-chart-summary::-webkit-details-marker { display: none } .function-live-chart-summary::before { content: "▸"; flex: 0 0 auto; color: var(--muted); font: 12px var(--mono) } .function-live-chart[open]>.function-live-chart-summary::before { content: "▾" } .function-live-chart-heading { display: grid; gap: 3px; min-width: 0; flex: 1 1 auto } .function-live-chart-heading strong { font-size: 13px; font-weight: 650 } .function-live-chart-heading small { color: var(--muted); font: 9px var(--mono) } .function-live-chart-summary>b { flex: 0 0 auto; color: var(--text); font: 11px var(--mono); font-weight: 650; white-space: nowrap } .function-live-chart-body { border-top: 1px solid var(--line); padding: 14px 15px 12px } .function-live-chart svg { display: block; width: 100%; height: clamp(180px, 22vw, 270px); overflow: visible } .function-live-line { fill: none; stroke-width: 2.2; vector-effect: non-scaling-stroke } .transform-applied-line, .transform-applied-key { stroke: var(--transform-chart); color: var(--transform-chart) } .transform-cache-line, .transform-cache-key { stroke: var(--green); color: var(--green) } .transform-skipped-line, .transform-skipped-key { stroke: var(--muted); color: var(--muted) } .transform-error-line, .transform-error-key { stroke: var(--red); color: var(--red) } .function-live-chart-footer { display: flex; align-items: center; justify-content: space-between; gap: 10px 18px; margin-top: 8px } .function-live-chart-samples { display: inline-flex; align-items: center; gap: 7px; color: var(--muted); font: 9px var(--mono); white-space: nowrap } .function-live-chart-samples select { min-width: 116px; padding: 5px 25px 5px 8px; font: 10px var(--mono) } .function-live-chart-legend { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: 7px 16px; color: var(--muted); font: 9px var(--mono) } .function-live-chart-legend span { display: inline-flex; align-items: center; gap: 5px } .function-live-chart-legend i { display: inline-block; width: 14px; height: 2px; background: currentColor } .function-live-chart-legend b { color: var(--text); font-weight: 650 } @media (max-width: 760px) { .function-live-chart-summary { align-items: flex-start } .function-live-chart-heading small { white-space: normal } .function-live-chart svg { height: 190px } .function-live-chart-footer { align-items: flex-start; flex-direction: column } .function-live-chart-legend { justify-content: flex-start } } .runtime-information-card { margin-top: 12px; } .runtime-information-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 12px; } .runtime-information-grid>div { min-width: 0; display: grid; gap: 5px; } .runtime-information-grid code { overflow-wrap: anywhere; white-space: normal; } .payload-split { display: flex !important; align-items: center; gap: 10px; font: 9px var(--mono) !important; } .payload-split span { display: inline-flex; align-items: center; gap: 3px; white-space: nowrap; } .payload-split b, .connection-legend b, .connection-card .chart-footer b { color: var(--text); font-weight: 650; } .connection-card h2 { display: flex; align-items: baseline; gap: 6px; } .connection-card h2 small { color: var(--muted); font: 9px var(--mono); font-weight: 400; } .connection-card svg { display: block; width: 100%; height: 100px; overflow: visible; } .connection-open-line, .connection-exchange-line { fill: none; vector-effect: non-scaling-stroke; stroke-width: 2; } .connection-open-line { stroke: var(--accent); } .connection-exchange-line { stroke: var(--green); } .connection-legend { display: flex; flex-wrap: wrap; gap: 7px 14px; margin: 4px 0 8px; color: var(--muted); font: 9px var(--mono); } .connection-legend span { display: inline-flex; align-items: center; gap: 5px; } .connection-legend i { display: inline-block; width: 14px; height: 2px; background: currentColor; } .connection-open-key { color: var(--accent) !important; } .connection-exchange-key { color: var(--green) !important; } .connection-legend span span { color: var(--muted); } .network-interface-row-head { align-items: center; } .network-interface-head-actions { display: flex; align-items: center; justify-content: flex-end; gap: 7px; min-width: 0; } .network-interface-hide { min-height: 24px; padding: 3px 7px; font: 9px var(--mono); } .network-interface-hidden { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; padding-top: 8px; border-top: 1px solid var(--line); color: var(--muted); font: 9px var(--mono); } .network-interface-hidden .quiet { min-height: 24px; padding: 3px 7px; font: 9px var(--mono); } .certificate-api-credentials { display: grid; gap: 7px; margin-top: 10px; } .certificate-api-credential-row { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 8px 9px; border: 1px solid var(--line); border-radius: 4px; background: var(--panel2); } .certificate-api-credential-info { min-width: 0; display: grid; gap: 3px; } .certificate-api-credential-info code, .certificate-api-credential-info small { overflow-wrap: anywhere; } @media (max-width: 760px) { .certificate-api-credential-row, .network-interface-row-head { align-items: flex-start; } .certificate-api-credential-row { flex-direction: column; } } .cache-memory-sizing { margin: 12px 0; padding: 12px; border: 1px solid var(--line); border-radius: 0px; background: var(--panel2); } .cache-memory-sizing .card-heading { margin-bottom: 6px; } .cache-memory-sizing .form-actions { flex-wrap: wrap; } #cache-memory-warning { color: var(--notice-text); font-weight: 600; } .mini-heading-actions { display: inline-flex; align-items: center; justify-content: flex-end; gap: 7px; min-width: 0; } .metric-info { position: relative; } .metric-info>summary { width: 18px; height: 18px; display: inline-grid; place-items: center; list-style: none; cursor: pointer; border: 1px solid var(--line); border-radius: 50%; color: var(--muted); background: var(--panel2); font: 700 10px var(--mono); user-select: none; } .metric-info>summary::-webkit-details-marker { display: none; } .metric-info>summary:hover, .metric-info>summary:focus-visible, .metric-info[open]>summary { color: var(--text); border-color: var(--border-hover); outline: none; } .metric-info-popover { position: absolute; z-index: 40; top: calc(100% + 7px); right: 0; width: min(360px, calc(100vw - 44px)); padding: 10px 11px; border: 1px solid var(--line); border-radius: 6px; background: var(--panel2); box-shadow: 0 12px 30px var(--shadow-mid); } .metric-info-popover .fine { margin: 0; line-height: 1.5; } .cache-hot-line, .cache-transient-total-line { stroke: var(--accent); } .cache-fill-line { stroke: var(--green); } .cache-queue-line, .cache-cold-line { stroke: var(--blue); } .cache-io-line { stroke: var(--transform-chart); } .cache-transient-total-key { color: var(--accent); } .cache-fill-key { color: var(--green); } .cache-queue-key { color: var(--blue); } .cache-io-key { color: var(--transform-chart); } .web-service-pages { min-width: 0; } .web-service-page[hidden] { display: none !important; } #web-service-dialog .web-service-page { padding-top: 2px; } .manual-config-tools { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; } .config-history-dialog { width: min(1180px, calc(100vw - 24px)); max-width: calc(100vw - 24px); max-height: calc(100dvh - 28px); overflow: hidden; } .config-history-layout { display: grid; grid-template-columns: minmax(380px, .95fr) minmax(420px, 1.05fr); gap: 10px; padding: 10px; max-height: calc(100dvh - 90px); } .config-history-browser, .config-history-detail { min-width: 0; overflow: auto; } .config-history-months { display: grid; grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); gap: 10px; } .config-history-month { border: 1px solid var(--line); padding: 9px; background: var(--panel); } .config-history-month h4 { margin: 0 0 8px; font-size: 12px; } .config-history-weekdays, .config-history-days { display: grid; grid-template-columns: repeat(7, 1fr); gap: 3px; } .config-history-weekdays span { color: var(--muted); font: 9px var(--mono); text-align: center; padding: 2px 0; } .config-history-day { min-height: 34px; padding: 4px; border: 1px solid transparent; background: transparent; color: var(--muted); font: 10px var(--mono); text-align: left; } button.config-history-day.has-revisions { cursor: pointer; color: var(--text); border-color: var(--line-strong, var(--line)); background: var(--surface, var(--bg)); } button.config-history-day.has-revisions:hover, button.config-history-day.is-selected { border-color: var(--accent); color: var(--accent); } .config-history-day-count { display: block; margin-top: 3px; font-size: 8px; color: var(--muted); } .config-history-detail-head { display: flex; justify-content: space-between; gap: 10px; align-items: flex-start; margin-bottom: 8px; } .config-history-detail-head h3 { margin: 3px 0 0; } .config-history-detail-actions { display: flex; flex-direction: column; gap: 7px; align-items: flex-end; text-align: right; } .config-history-detail-actions button { white-space: nowrap; } .config-history-revisions { display: flex; flex-wrap: wrap; gap: 6px; margin-bottom: 10px; } .config-history-revision { font: 10px var(--mono); } .config-history-revision.active { border-color: var(--accent); color: var(--accent); } .config-history-diff { display: grid; gap: 8px; } .config-history-change { border: 1px solid var(--line); padding: 8px; background: var(--panel); } .config-history-change-path { display: block; margin-bottom: 6px; font: 10px var(--mono); overflow-wrap: anywhere; } .config-history-change-values { display: grid; grid-template-columns: 1fr 1fr; gap: 6px; } .config-history-change pre { margin: 3px 0 0; max-height: 160px; overflow: auto; white-space: pre-wrap; overflow-wrap: anywhere; font: 10px var(--mono); } @media (max-width: 860px) { .config-history-layout { grid-template-columns: 1fr; overflow: auto; } .config-history-browser, .config-history-detail { overflow: visible; } .config-history-change-values { grid-template-columns: 1fr; } .config-history-detail-head { flex-direction: column; } .config-history-detail-actions { align-items: flex-start; text-align: left; } } .mobile-menu-toggle { display: none; } @media(max-width:850px) { .sidebar { position: sticky; top: 0; z-index: 60; display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: center; gap: 10px 12px; padding: 10px 12px; } .sidebar .brand { min-width: 0; } .mobile-menu-toggle { display: inline-flex; align-items: center; justify-content: center; gap: 9px; min-height: 36px; padding: 7px 10px; border: 1px solid var(--line); background: transparent; color: var(--muted); font: 600 11px var(--mono); } .mobile-menu-toggle:hover, .mobile-menu-toggle[aria-expanded="true"] { color: var(--text); border-color: var(--border-hover); background: var(--nav-active-bg); } .mobile-menu-icon { display: block; flex: 0 0 auto; width: 15px; height: 1px; background: currentColor; box-shadow: 0 -5px currentColor, 0 5px currentColor; } .sidebar .main-navigation { grid-column: 1 / -1; display: none; width: 100%; margin: 0; padding-top: 10px; border-top: 1px solid var(--line); grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 4px; } .sidebar.mobile-nav-open .main-navigation { display: grid; } .sidebar .main-navigation .nav { width: 100%; min-width: 0; justify-content: flex-start; gap: 8px; padding: 9px 10px; border: 1px solid transparent; border-left: 2px solid transparent; text-align: left; } .sidebar .main-navigation .nav.active { border-color: var(--line); border-left-color: var(--green); background: var(--nav-active-bg); } } @media(max-width:600px) { .sidebar .main-navigation .nav span { display: none; } } .about-dialog { width: min(560px, calc(100vw - 24px)); overflow: hidden; } .about-dialog .window-heading button { margin-inline-start: auto; } .about-card { display: grid; gap: 16px; margin: 0; padding: 18px; border: 0; box-shadow: none; } .about-product { display: flex; align-items: center; gap: 12px; } .about-product>div { display: grid; gap: 4px; } .about-product strong { font: 600 16px var(--mono); } .about-meta { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 1px; margin: 0; border: 1px solid var(--line); background: var(--line); } .about-meta>div { min-width: 0; padding: 10px 12px; background: var(--panel); } .about-meta dt { margin-bottom: 5px; color: var(--muted); font: 9px var(--mono); letter-spacing: .8px; text-transform: uppercase; } .about-meta dd { margin: 0; overflow-wrap: anywhere; } .about-card>p { margin: 0; color: var(--muted); line-height: 1.65; } .about-repository { justify-content: space-between; gap: 12px; width: 100%; white-space: normal; text-align: left; } .about-repository span:last-child { color: var(--muted); font: 10px var(--mono); overflow-wrap: anywhere; } @media(max-width:620px) { .topbar { height: auto; min-height: 46px; padding: 7px 0; } .topbar .breadcrumb { display: none; } .top-actions { width: 100%; flex-wrap: wrap; justify-content: flex-end; } .about-meta { grid-template-columns: 1fr; } .about-repository { align-items: flex-start; flex-direction: column; } } .file-logs-workspace { display: grid; gap: 14px; } .file-logs-filter { display: grid; grid-template-columns: repeat(7, minmax(120px, 1fr)); gap: 10px; align-items: end; } .file-logs-filter label { min-width: 0; } .file-logs-filter .file-log-search { grid-column: span 2; } .file-logs-table { max-height: 52vh; } .file-logs-table tbody tr { cursor: pointer; } .file-logs-table td { max-width: 340px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .file-logs-pager { display: flex; justify-content: flex-end; gap: 8px; } .file-log-detail-card pre { max-height: 32vh; overflow: auto; white-space: pre-wrap; overflow-wrap: anywhere; } .file-logs-launcher { display: flex; align-items: center; justify-content: space-between; gap: 16px; } .file-log-inventory { overflow-wrap: anywhere; } @media (max-width: 1100px) { .file-logs-filter { grid-template-columns: repeat(3, minmax(140px, 1fr)); } } @media (max-width: 700px) { .file-logs-filter { grid-template-columns: 1fr; } .file-logs-filter .file-log-search { grid-column: auto; } .file-logs-launcher { align-items: stretch; flex-direction: column; } }