Files
RustProxy/src/admin/web/style.css
T
2026-10-15 15:36:35 +02:00

11819 lines
216 KiB
CSS

: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: rgba(0, 0, 0, .68);
--backdrop-soft: #070d12b8;
--shadow-mid: #0006;
--shadow-strong: #0009;
--neutral-soft: hsla(0, 0%, 49.8%, .05);
--scrollbar-track: #151a16;
--scrollbar-thumb: #4f5d50;
--scrollbar-thumb-hover: #6b7b69;
--chart-accent: var(--accent);
--chart-secondary: var(--green);
--chart-tertiary: var(--blue);
--chart-quaternary: var(--transform-chart);
--chart-quinary: var(--red);
--chart-senary: var(--notice-text);
--chart-septenary: var(--border-hover);
--chart-octonary: var(--separator);
--chart-surface: var(--panel2);
--chart-surface-alt: var(--panel);
--chart-line-width: 2;
--chart-linecap: round;
--chart-linejoin: round;
--chart-grid-opacity: .28;
--chart-grid-dash: none;
--chart-svg-filter: none;
--rp-progress-fill: var(--chart-accent);
--rp-progress-track: var(--line);
--rp-progress-radius: 3px;
--rp-nav-active-color: var(--brand-secondary);
--rp-nav-active-bg: var(--nav-active-bg);
--rp-nav-hover-bg: var(--nav-hover-bg);
--traffic-h1: var(--chart-accent);
--traffic-h2: var(--chart-secondary);
--traffic-h3: var(--chart-tertiary);
--ui-scale: 1;
--ui-field-font-size: 12px;
--ui-field-pad-y: 6px;
--ui-field-pad-x: 8px;
--ui-field-min-height: 27px;
--ui-check-size: 15px;
--ui-range-height: 18px;
--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: #fff;
--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: #fff;
--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: #fff;
--accent-hover: #a84f30;
--selected-ink: #fff;
--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: rgba(31, 39, 33, .16);
--shadow-strong: rgba(31, 39, 33, .26);
--neutral-soft: rgba(70, 78, 72, .05);
--scrollbar-track: #e7ece4;
--scrollbar-thumb: #a9b5a6;
--scrollbar-thumb-hover: #879684
}
html:is([data-theme=light], [data-theme=cream]) {
--rp-nav-active-color: color-mix(in srgb, var(--brand-secondary) 45%, var(--text) 55%);
}
html[data-theme=ultra_dark] {
color-scheme: dark;
--bg: #030404;
--panel: #0b0d0e;
--panel2: #121516;
--line: #292f30;
--muted: #a4afb0;
--text: #f1f4f2;
--accent: #93dfc8;
--logo-accent: #f69b74;
--logo-secondary: #cfe0ac;
--green: #b1dcb0;
--red: #ff9899;
--sidebar-bg: #000;
--brand-secondary: #a9cfb5;
--nav-active-bg: #172422;
--nav-hover-bg: #121819;
--text-subtle: #879695;
--separator: #526261;
--border-hover: #7c9f96;
--field-bg: #090b0c;
--field-line: #445352;
--placeholder: #879593;
--row-line: #202627;
--outline-line: #79968f;
--chart-grid: #303839;
--code-bg: #0e1313;
--code-alt-bg: #101a1d;
--code-alt-text: #d5eae9;
--nav-selected-bg: #213730;
--accent-ink: #071814;
--accent-hover: #b6f2dd;
--selected-ink: #071814;
--notice-text: #e6c99c;
--notice-line: #66533a;
--notice-bg: #201a11;
--pill-line: #625544;
--pill-live-line: #506c59;
--toast-bg: #bcf3da;
--toast-text: #10221a;
--toast-line: #d8ffe8;
--toast-error-bg: #ffd5d0;
--toast-error-line: #ff9c96;
--toast-error-text: #472625;
--danger-line: #754245;
--danger-line-strong: #965257;
--warn-line: #89754c;
--blue: #8bbdfb;
--transform-chart: #cfaeff;
--backdrop: rgba(0, 0, 0, .86);
--backdrop-soft: rgba(0, 0, 0, .77);
--shadow-mid: rgba(0, 0, 0, .64);
--shadow-strong: rgba(0, 0, 0, .84);
--neutral-soft: rgba(132, 171, 158, .045);
--scrollbar-track: #060808;
--scrollbar-thumb: #364243;
--scrollbar-thumb-hover: #617373;
}
html[data-theme=cream] {
color-scheme: light;
--bg: #f2ede3;
--panel: #fcf9f2;
--panel2: #eae3d6;
--line: #d5cabb;
--muted: #6b6257;
--text: #302c27;
--accent: #8c5942;
--green: #5e7655;
--red: #a54645;
--sidebar-bg: #eae2d5;
--brand-secondary: #668367;
--nav-active-bg: #e0d3c0;
--nav-hover-bg: #e6dccc;
--text-subtle: #786e61;
--separator: #afa494;
--border-hover: #968776;
--field-bg: #fffcf7;
--field-line: #baad9a;
--placeholder: #807466;
--row-line: #e2d9cb;
--outline-line: #9c8d7c;
--chart-grid: #ddd3c4;
--code-bg: #f0e8da;
--code-alt-bg: #e7ebe9;
--code-alt-text: #364f4e;
--nav-selected-bg: #d9cbb7;
--accent-ink: #fff;
--accent-hover: #774632;
--selected-ink: #fff;
--notice-text: #765e40;
--notice-line: #d9c3a1;
--notice-bg: #f8efdf;
--pill-line: #c2a78d;
--pill-live-line: #b0bd9d;
--toast-bg: #d6ead2;
--toast-text: #263d29;
--toast-line: #b8d5b6;
--toast-error-bg: #f8ded7;
--toast-error-line: #dca99c;
--toast-error-text: #60352f;
--danger-line: #d2a29a;
--danger-line-strong: #b97870;
--warn-line: #b49c6b;
--blue: #4d7292;
--transform-chart: #83659a;
--backdrop: rgba(37, 27, 16, .44);
--backdrop-soft: rgba(47, 35, 21, .48);
--shadow-mid: rgba(64, 49, 34, .13);
--shadow-strong: rgba(64, 49, 34, .24);
--neutral-soft: rgba(104, 91, 69, .045);
--scrollbar-track: #ece4d7;
--scrollbar-thumb: #b5a997;
--scrollbar-thumb-hover: #978a76;
}
html[data-theme=ultra_dark] :is(.card, .stat, dialog) {
box-shadow: 0 6px 24px rgba(0, 0, 0, .18);
}
html[data-theme=cream] :is(.card, .stat, dialog) {
box-shadow: 0 6px 20px rgba(78, 58, 38, .055);
}
* {
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 .shell {
visibility: hidden;
pointer-events: none
}
.app-startup {
position: fixed;
inset: 0;
z-index: 10000;
display: grid;
place-items: center;
padding: 24px;
box-sizing: border-box;
background: var(--bg, #10151b);
color: var(--text, #edf2f7);
text-align: center
}
html:not(.app-loading) .app-startup {
display: none
}
.app-startup-card {
width: min(100%, 360px)
}
.app-startup-brand {
font: 700 29px var(--mono, monospace);
letter-spacing: -2px;
margin-bottom: 24px
}
.app-startup-brand span {
color: var(--logo-secondary, var(--accent, #65cfa2))
}
.app-startup-spinner {
box-sizing: border-box;
width: 40px;
height: 40px;
margin: 0 auto 22px;
border: 3px solid var(--line, #374352);
border-top-color: var(--accent, #65cfa2);
border-radius: 50%;
animation: app-startup-spin .8s linear infinite
}
.app-startup h2 {
margin: 0;
font-size: 19px;
font-weight: 600;
line-height: 1.4
}
.app-startup-message,
.app-startup-recovery p {
font-size: 13px;
line-height: 1.6;
color: var(--muted, #b5c0cc)
}
.app-startup-recovery {
visibility: hidden;
animation: app-startup-reveal 0s linear 12s forwards
}
.app-startup-recovery .outline:not([hidden]) {
margin-top: 10px;
display: inline-flex
}
html.app-startup-failed .app-startup-message,
html.app-startup-failed .app-startup-spinner {
display: none
}
html.app-startup-failed .app-startup-recovery {
visibility: visible;
animation: none
}
.app-startup-detail {
overflow-wrap: anywhere
}
@keyframes app-startup-spin {
to {
transform: rotate(1turn)
}
}
@keyframes app-startup-reveal {
to {
visibility: visible
}
}
body {
margin: 0;
background: var(--bg);
color: var(--text);
font-family: var(--sans);
line-height: 1.5;
zoom: var(--ui-scale, 1)
}
button,
input,
select,
textarea {
font: inherit
}
a,
button,
input,
select,
textarea {
-webkit-tap-highlight-color: transparent
}
a,
button {
touch-action: manipulation
}
button {
cursor: pointer;
border: 0
}
button:disabled {
opacity: .5;
cursor: wait
}
[hidden] {
display: none !important
}
a {
color: inherit;
text-decoration: none
}
h1,
h2,
h3,
p {
margin: 0
}
a:focus-visible,
button:focus-visible {
outline: 2px solid var(--accent);
outline-offset: 4px
}
h2 {
letter-spacing: -.5px
}
.shell {
display: grid;
min-height: calc(100vh / var(--ui-scale, 1))
}
.sidebar {
position: sticky;
top: 0;
height: calc(100vh / var(--ui-scale, 1));
background: var(--sidebar-bg);
border-right: 1px solid var(--line);
display: flex;
flex-direction: column
}
.brand {
display: flex;
align-items: center;
font-weight: 780;
line-height: 1.1
}
.brand-mark {
font: 700 33px var(--mono);
border: 1px solid var(--logo-accent, var(--accent));
color: var(--logo-accent, var(--accent));
place-content: center;
position: relative;
box-sizing: border-box;
padding-right: 2px
}
.brand-mark span {
font-size: 22px;
left: 29px;
top: 19px;
color: var(--logo-secondary, var(--brand-secondary))
}
.edition {
font: 9px/1.6 var(--mono);
color: var(--muted);
letter-spacing: 1px;
}
.edition span {
display: block;
color: var(--accent);
margin-top: 5px
}
.transport-grid>div,
nav {
flex-direction: column;
}
.local-tag,
.nav,
nav {
display: flex
}
.nav {
align-items: center;
gap: 13px;
text-align: left;
background: transparent;
color: var(--muted);
border-left: 2px solid transparent;
border-radius: var(--rp-radius-control, 0)
}
.nav span {
font: 11px var(--mono);
opacity: .65
}
.nav b {
font-weight: 530
}
.nav.active {
background: var(--rp-nav-active-bg);
color: var(--rp-nav-active-color);
border-left-color: var(--rp-nav-active-color)
}
.nav:not(.active):hover {
background: var(--rp-nav-hover-bg)
}
.sidebar .main-navigation .nav:focus-visible {
outline: 2px solid var(--rp-nav-active-color);
outline-offset: 2px
}
.sidebar-bottom {
margin-top: auto;
padding-top: 32px
}
.small-label {
font: 10px var(--mono);
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);
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;
width: 100%;
}
.topbar {
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;
align-items: center
}
.version {
font: 10px var(--mono)
}
.quiet,
.version {
color: var(--muted)
}
.quiet {
background: transparent;
border: 1px solid var(--line);
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;
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;
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: calc(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 {
display: flex;
justify-content: space-between;
align-items: center;
}
.notice {
display: flex;
gap: 13px;
line-height: 1.65;
color: var(--notice-text);
border: 1px solid var(--notice-line);
background: var(--notice-bg);
border-radius: 3px
}
.notice b {
font-family: var(--mono);
color: var(--accent)
}
.stats-grid {
display: grid;
}
.stat {
border: 1px solid var(--line);
background: var(--panel);
position: relative
}
.stat:first-child {
border-top: 2px solid var(--accent)
}
.stat small,
.stat>span {
color: var(--muted);
}
.stat strong {
display: block;
font-family: var(--mono);
font-weight: 450;
letter-spacing: -1px;
}
.stat:first-child small {
color: var(--green)
}
.overview-grid {
display: grid;
}
.card {
border: 1px solid var(--line);
background: var(--panel);
min-width: 0
}
.card-heading {
display: flex;
align-items: center;
justify-content: space-between;
}
.card-heading .small-label {
display: block;
}
.activity-card .card-heading {
flex-wrap: wrap;
}
.activity-card #chart-peak {
margin-left: auto;
color: var(--muted);
font: 9px var(--mono);
white-space: nowrap;
}
.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,
table {
width: 100%;
}
.chart-grid {
stroke: var(--chart-grid);
stroke-width: 1;
fill: none;
opacity: var(--chart-grid-opacity, .55);
stroke-dasharray: var(--chart-grid-dash, 2 5)
}
#sparkline {
stroke: var(--chart-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
}
.table-scroll {
overflow: auto
}
table {
border-collapse: collapse;
text-align: left;
font-size: 11px;
white-space: nowrap
}
th {
font: 10px var(--mono);
color: var(--muted);
font-weight: 400;
border-bottom: 1px solid var(--line)
}
td {
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)
}
.fine,
.meta {
font-size: 11px;
line-height: 1.7;
color: var(--muted)
}
.empty {
color: var(--muted);
font-size: 12px
}
.section-heading {
display: flex;
justify-content: space-between;
align-items: center;
gap: 10px;
}
.config-columns {
display: grid;
grid-template-columns: minmax(0, 1.25fr) minmax(0, 1fr);
gap: 20px
}
.entity {
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;
}
.entity-details {
font: 11px/1.8 var(--mono);
color: var(--muted);
overflow-wrap: anywhere
}
.entity-actions {
display: flex;
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: var(--ui-field-pad-y) var(--ui-field-pad-x);
color: var(--text);
font-size: var(--ui-field-font-size);
min-height: var(--ui-field-min-height);
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: var(--ui-check-size);
height: var(--ui-check-size);
min-width: var(--ui-check-size);
min-height: var(--ui-check-size);
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 rgba(255, 170, 162, .72);
}
.host-chip-editor.field-invalid,
.listener-choices.field-invalid {
border-color: var(--red) !important;
box-shadow: 0 0 0 1px rgba(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;
flex-wrap: wrap;
}
#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;
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: calc(clamp(42px, 5vw, 68px));
letter-spacing: -3px;
max-width: 640px
}
.login-section .lead {
font-size: 15px;
max-width: 570px
}
.login-card {
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: calc(min(580px, 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) {
.sidebar {
border-right: 0;
border-bottom: 1px solid var(--line);
}
.brand {
letter-spacing: 1px;
gap: 9px
}
.brand-mark {
letter-spacing: -4px
}
.brand-mark span {
font-size: 15px;
left: 18px;
top: 12px
}
nav {
flex-direction: row;
margin-left: auto;
gap: 5px
}
.nav {
gap: 7px;
font-size: 11px;
border-left: 0;
border-bottom: 2px solid transparent
}
.nav.active {
border-bottom-color: var(--rp-nav-active-color)
}
h1 {
font-size: 36px
}
.stats-grid {
grid-template-columns: repeat(2, minmax(0, 1fr))
}
.config-columns,
.overview-grid {
grid-template-columns: 1fr 1fr
}
.login-section {
padding-top: 42px
}
}
@media(max-width:600px) {
main {
padding: 0 17px
}
.sidebar {
gap: 10px
}
.nav span,
.version {
display: none
}
.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,
.login-footer span {
margin: 0 5px
}
.top-actions {
gap: 6px
}
.quiet {
font-size: 11px;
padding: 7px 9px
}
.page-intro {
display: block;
padding-top: 25px
}
.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
}
.config-columns,
.overview-grid {
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,
.login-footer,
.page-footer {
font-size: 8px
}
.page-footer {
flex-wrap: wrap
}
.login-section h1 {
letter-spacing: -2px
}
.login-card {
padding: 20px
}
.toast {
right: 17px;
bottom: 17px
}
#config-editor {
font-size: 11px
}
}
.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
}
#policy-rules {
font: 11px/1.6 var(--mono);
resize: vertical
}
.session-user {
margin: 17px 0 12px
}
.security-note {
margin: 22px 0
}
.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
}
}
@media(max-width:600px) {
.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 {
flex-wrap: wrap;
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;
margin: 0 0 22px
}
.transport-grid>div {
display: flex;
border: 1px solid var(--line, #d8dfdb);
min-width: 0
}
.transport-grid span {
opacity: .7
}
.command,
.fine,
.meta,
.mini-metrics dd,
.transport-grid b {
overflow-wrap: anywhere
}
.command {
white-space: normal
}
#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 {
max-width: none
}
.sidebar {
padding-top: 24px;
padding-bottom: 22px
}
.edition {
margin: 17px 0 28px
}
nav {
gap: 5px
}
.top-actions {
gap: 8px
}
.language-select {
width: auto;
max-width: 160px;
padding: 6px 9px;
font-size: 11px
}
.page-intro .eyebrow {
font-size: 9px
}
.notice {
font-size: 10px
}
.stats-grid {
grid-template-columns: repeat(6, minmax(0, 1fr));
gap: 10px;
margin-bottom: 12px
}
.stat>span {
font-size: 11px
}
.stat strong {
line-height: 1.3
}
.stat small {
font-size: 9px
}
.overview-grid {
grid-template-columns: minmax(0, 1.35fr) minmax(0, 1fr) minmax(190px, .85fr);
gap: 12px;
margin-bottom: 12px
}
h2 {
font-size: 17px
}
h3 {
font-size: 14px;
margin-bottom: 10px
}
.card-heading {
gap: 10px
}
.small-label {
font-size: 9px;
letter-spacing: 1.2px
}
#traffic-chart {
height: 107px;
margin: 3px 0
}
.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(--chart-secondary);
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;
margin: 6px 0 9px;
border: 0;
appearance: none;
-webkit-appearance: none;
background: var(--rp-progress-track);
accent-color: var(--rp-progress-fill);
border-radius: var(--rp-progress-radius);
overflow: hidden
}
progress::-webkit-progress-bar {
background: var(--rp-progress-track);
border-radius: var(--rp-progress-radius)
}
progress::-webkit-progress-value {
background: var(--rp-progress-fill);
border-radius: var(--rp-progress-radius)
}
progress::-moz-progress-bar {
background: var(--rp-progress-fill);
border-radius: var(--rp-progress-radius)
}
.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;
}
.mini-metrics dt {
font-size: 10px;
color: var(--muted)
}
.mini-metrics dd {
font: 10px var(--mono);
margin: 0;
text-align: end
}
.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;
filter: var(--chart-svg-filter)
}
.diagnostic-line {
fill: none;
stroke: var(--chart-accent);
stroke-width: var(--chart-line-width);
stroke-linecap: var(--chart-linecap);
stroke-linejoin: var(--chart-linejoin);
vector-effect: non-scaling-stroke
}
.cache-hit-line,
.network-tx-line {
stroke: var(--chart-secondary)
}
.cache-miss-line {
stroke: var(--chart-accent)
}
.cache-bypass-line {
stroke: var(--chart-tertiary)
}
.process-rss-line {
stroke: var(--chart-secondary)
}
.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: calc(min(190px, 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,
.logs-card th {
background: var(--panel)
}
@media(max-height:620px) {
.log-column-options {
top: auto;
bottom: calc(100% + 4px);
width: calc(min(360px, 100vw - 24px));
grid-template-columns: repeat(2, minmax(0, 1fr))
}
}
.logs-card .table-scroll {
max-height: 260px
}
.logs-card th {
position: sticky;
top: 0
}
th {
padding: 7px 8px
}
td {
padding: 8px
}
.config-columns,
.settings-grid {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 14px;
align-items: start
}
.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
}
.chart-footer>span,
.mini-metrics dd {
min-width: 0
}
[dir=rtl] .nav {
text-align: right;
border-left: 0;
border-right: 2px solid transparent
}
[dir=rtl] .nav.active {
border-right-color: var(--rp-nav-active-color)
}
[dir=rtl] table {
text-align: right
}
[dir=rtl] #config-editor,
[dir=rtl] .entity-details,
[dir=rtl] input[type=url] {
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)
}
.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) {
.page-intro {
padding-top: 18px
}
.config-columns,
.settings-grid {
gap: 12px
}
.diagnostics-grid {
grid-template-columns: repeat(2, minmax(0, 1fr))
}
.diagnostics-grid>.card:last-child {
grid-column: 1/-1
}
}
@media(max-width:620px) {
.sidebar {
align-items: flex-start;
flex-direction: column;
gap: 12px
}
.nav {
padding: 8px 7px;
min-width: 0
}
.breadcrumb b,
.nav span,
.topbar .version {
display: none
}
.breadcrumb {
font-size: 9px;
letter-spacing: 0
}
.breadcrumb span {
margin: 0 5px
}
.language-select {
max-width: 110px;
font-size: 10px
}
.page-intro {
align-items: flex-start
}
.page-intro .lead {
font-size: 11px
}
.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
}
.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
}
.outline,
.primary {
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
}
}
.vhost-layout {
grid-template-columns: minmax(220px, .7fr) minmax(0, 2fr);
gap: 12px;
align-items: start
}
.vh-field,
.vh-form,
.vh-group,
.vhost-layout>.card {
min-width: 0
}
.vh-group {
border: 1px solid var(--line);
border-radius: 6px
}
.vh-group legend,
.vh-group>summary {
font-weight: 600;
padding: 0 5px;
color: var(--text)
}
.vh-group>summary {
cursor: pointer;
margin-bottom: 6px
}
.vh-grid {
display: grid;
align-items: start
}
.vh-field {
display: flex;
flex-direction: column;
gap: 4px;
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-members {
display: grid;
}
.vh-row {
padding: 8px;
border: 1px solid var(--line);
border-radius: 5px;
min-width: 0;
background: var(--bg)
}
.vh-member>.quiet {
margin-top: 6px
}
.vh-member details {
font-size: 11px
}
.vh-member details>summary {
cursor: pointer;
color: var(--muted);
padding: 3px 0
}
.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: calc(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-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 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
}
#toast[popover],
.app-confirm-message,
.cache-table td,
.location-summary,
.vh-health-summary,
.vh-live-summary,
.vhost-layout .entity-details {
overflow-wrap: anywhere
}
.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))
}
}
@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-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;
--button-padding: 6px 10px;
--button-font-size: 11px;
--button-min-height: var(--ui-control);
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
}
.config-columns,
.diagnostics-grid,
.overview-grid,
.settings-grid,
.stats,
.stats-grid {
gap: var(--ui-gap);
margin-bottom: var(--ui-gap)
}
.stat {
padding: 11px
}
.stat p,
.stat small,
.transport-grid span {
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 b {
font-size: 14px
}
.activity-card svg {
height: 105px
}
.system-card svg {
height: 80px
}
.mini-metrics div {
margin-top: 4px
}
.pool-card {
margin-bottom: var(--ui-gap)
}
.pool-table td,
.pool-table th {
white-space: nowrap;
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: var(--ui-field-pad-y) var(--ui-field-pad-x);
font-size: var(--ui-field-font-size);
min-height: var(--ui-field-min-height)
}
.outline,
.primary,
.quiet,
button {
padding: var(--button-padding);
font-size: var(--button-font-size);
min-height: var(--button-min-height)
}
html[data-button-style=compact] body {
--button-padding: 3px 7px;
--button-font-size: 10px;
--button-min-height: 22px;
}
.check {
font-size: 11px
}
.settings-shortcuts {
display: flex;
align-items: center;
gap: 10px;
padding: 10px 12px;
border: 1px solid var(--line);
flex-wrap: wrap
}
.settings-shortcuts>div {
flex: 1;
min-width: 170px
}
.vhost-layout {
display: block
}
.vh-health-summary {
grid-column: 1/-1;
color: var(--muted);
font: 10px var(--mono)
}
.audit-dialog,
.logs-dialog,
.vhost-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
}
.audit-dialog::backdrop,
.logs-dialog::backdrop,
.vhost-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;
color: var(--muted);
margin: 5px 0
}
.vh-tabs {
display: flex;
flex-direction: row;
margin-inline-start: 0;
gap: 3px;
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 input:not([type=checkbox]):not([type=radio]),
.log-tools select {
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: calc(min(60dvh, 580px));
overflow: auto;
border-top: 1px solid var(--line)
}
.logs-dialog table {
font: 11px var(--mono)
}
.logs-dialog td,
.logs-dialog th {
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: calc(min(1180px, 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
}
.vh-grid {
grid-template-columns: repeat(2, minmax(0, 1fr))
}
}
@media(max-width:850px) {
.shell {
display: block
}
.sidebar {
height: auto;
flex-direction: row;
flex-wrap: wrap;
}
.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
}
.config-columns,
.diagnostics-grid,
.overview-grid,
.settings-grid {
grid-template-columns: minmax(0, 1fr)
}
.diagnostics-grid>.card:last-child {
grid-column: auto
}
.sidebar nav {
width: 100%;
display: grid;
grid-template-columns: repeat(4, minmax(0, 1fr))
}
.nav b {
font-size: 10px
}
.vh-grid {
grid-template-columns: repeat(2, minmax(0, 1fr))
}
.vh-header-row {
grid-template-columns: 85px 1fr
}
.page-label,
.page-source,
.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
}
.page-editor {
grid-template-columns: 1fr 1fr
}
}
@media(max-width:380px) {
.vh-grid {
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: calc(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: calc(min(520px, 100vw - 28px));
padding: 12px 16px;
color: var(--text);
background: var(--panel);
border: 1px solid var(--green);
box-shadow: 0 10px 40px var(--shadow-strong);
pointer-events: none
}
#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 .fine,
.h3-editor .vh-grid {
margin-top: 7px
}
.cache-toolbar,
.listener-choices {
flex-wrap: wrap;
}
.listener-choices>.fine {
flex-basis: 100%
}
.listener-choices>label {
border: 1px solid var(--line);
padding: 7px;
border-radius: 4px;
font-size: 11px
}
.transport-grid {
grid-template-columns: repeat(5, minmax(0, 1fr))
}
@media(max-width:620px) {
.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;
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;
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
}
@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 select,
.cache-toolbar>* {
max-width: 100%
}
.cache-toolbar label {
flex-wrap: wrap
}
.cache-stats strong {
font-size: 19px
}
}
#cache-domain-scroll {
max-height: 260px;
overflow: auto;
scrollbar-gutter: stable
}
#cache-object-scroll {
max-height: calc(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 {
padding: 8px;
margin-bottom: 12px;
border: 1px solid var(--line);
border-radius: 12px;
background: var(--panel)
}
.settings-tabs button {
padding: 8px 10px;
font-size: 12px;
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
}
.cache-operation-dialog .cache-dialog-heading>div:first-child,
.certificate-dialog .vh-grid label,
.settings-pages {
min-width: 0
}
.settings-page,
.settings-page>.edit-form {
width: 100%;
max-width: none
}
.settings-page[hidden] {
display: none !important
}
.settings-page>.edit-form+.edit-form {
margin-top: var(--ui-gap)
}
.settings-page>.card {
padding: var(--ui-card)
}
.certificate-dialog {
width: calc(min(820px, 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);
border-bottom: 1px solid var(--line)
}
.certificate-dialog .provider-picker {
display: grid;
gap: 6px;
font-size: 12px;
font-weight: 600
}
.provider-hint {
padding: 0 18px
}
.certificate-dialog .card {
border: 0;
box-shadow: none;
margin: 0;
}
.certificate-dialog [hidden] {
display: none !important
}
.certificate-dialog .acme-card {
max-width: none
}
.certificate-dialog .vh-grid {
gap: 10px 14px
}
.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
}
.settings-page>.card {
padding: var(--ui-card)
}
}
dialog.audit-dialog,
dialog.certificate-dialog,
dialog.config-history-dialog,
dialog.config-history-json-dialog,
dialog.logs-dialog,
dialog.vhost-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
}
#toast[popover],
.settings-page>.card,
.settings-tabs,
.settings-tabs button,
dialog .card,
dialog .vh-form,
dialog .window-heading {
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 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-actions,
.location-header-toolbar,
.location-toolbar {
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);
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: calc(min(760px, 100vw - 28px));
max-height: calc(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) {
.acl-rule,
.basic-user {
grid-template-columns: 1fr 1fr
}
.renewal-entry {
grid-template-columns: 1fr
}
.renewal-entry .fine {
grid-column: auto
}
}
.app-confirm-dialog {
width: calc(min(520px, 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
}
.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: rgba(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,
.location-header-editor {
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-main,
.auth-page.auth-loading .auth-top {
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: rgba(255, 170, 162, .58);
background: rgba(255, 170, 162, .07);
color: var(--red)
}
.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-actions,
.location-toolbar {
align-items: stretch
}
.location-actions>button,
.location-toolbar>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;
align-items: end;
gap: 8px
}
.vh-header-row.is-remove .vh-header-rule-fields,
.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
}
.location-preview-grid,
.vh-header-row.is-remove .vh-header-rule-fields,
.vh-header-rule-fields {
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-page,
.settings-page>.edit-form,
.settings-pages {
width: 100%;
max-width: none
}
.logging-grid,
.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(--chart-surface);
box-shadow: inset 0 0 0 1px var(--line)
}
.traffic-donut:before {
content: "";
position: absolute;
inset: 23%;
border-radius: 50%;
background: var(--chart-surface-alt);
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: var(--rp-progress-radius);
background: var(--chart-surface);
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(--rp-progress-fill)
}
.traffic-bar-value {
text-align: right;
font: 700 10px var(--mono)
}
@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-wide-chart {
grid-column: span 1
}
.traffic-chart-grid {
grid-template-columns: repeat(2, minmax(0, 1fr))
}
}
@media(max-width:720px) {
.logging-grid,
.traffic-chart-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-notfound .card-heading,
#panel-redirects .card-heading,
#panel-vhosts .card-heading,
#panel-web-server .card-heading {
flex-wrap: wrap
}
.vhost-list-tools {
display: flex;
align-items: center;
flex-wrap: wrap;
gap: 8px;
margin-left: auto
}
#notfound-search,
#redirect-search,
#vhost-search,
#web-service-search {
width: calc(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-policy-pills,
.vhost-title-line {
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 b,
.vhost-detail span {
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-notfound .card-heading,
#panel-redirects .card-heading,
#panel-vhosts .card-heading,
.backend-card-heading {
align-items: stretch;
flex-direction: column
}
.vhost-list-tools {
width: 100%;
margin-left: 0
}
#notfound-search,
#redirect-search,
#vhost-search {
flex: 1 1 auto;
width: auto;
min-width: 0
}
.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: calc(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;
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)
}
.vh-www-panel {
padding: 12px;
border: 1px solid var(--line);
background: var(--panel2);
min-width: 0
}
.vh-www-panel.is-enabled {
border-color: var(--green);
box-shadow: inset 3px 0 0 var(--green)
}
.vh-www-header {
display: flex;
flex-wrap: wrap;
align-items: center;
justify-content: space-between;
gap: 8px 18px
}
.vh-www-title {
font-size: 12px;
color: var(--text)
}
.vh-www-host-count {
padding: 3px 7px;
border: 1px solid var(--line);
color: var(--muted);
font: 10px var(--mono)
}
.vh-www-header .vh-www-toggle {
margin: 0;
min-height: 0;
display: flex;
align-items: center;
color: var(--text);
font-size: 11px
}
.vh-www-help,
.vh-www-inactive {
margin: 9px 0 0;
font-size: 11px
}
.vh-www-details {
margin-top: 12px;
border-top: 1px solid var(--line);
padding-top: 12px
}
.vh-www-option-title {
font-size: 11px;
font-weight: 600;
margin: 0 0 8px;
color: var(--text)
}
.vh-www-choices {
display: grid;
gap: 10px
}
.vh-www-domain-pair {
padding: 9px;
border: 1px solid var(--line);
background: var(--panel)
}
.vh-www-domain-label {
display: block;
font: 11px var(--mono);
color: var(--text);
margin-bottom: 8px;
overflow-wrap: anywhere
}
.vh-www-pair-directions {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 8px
}
@media(max-width:650px) {
.vh-www-pair-directions {
grid-template-columns: minmax(0, 1fr)
}
}
.vh-www-choice {
min-width: 0;
display: flex;
align-items: flex-start;
gap: 10px;
padding: 11px;
border: 1px solid var(--line);
background: var(--field-bg);
cursor: pointer
}
.vh-www-choice:focus-within,
.vh-www-choice:hover {
border-color: var(--green)
}
.vh-www-choice.is-selected {
border-color: var(--green);
box-shadow: inset 3px 0 0 var(--green)
}
.vh-www-choice input {
margin: 3px 0 0;
accent-color: var(--green);
flex: 0 0 auto
}
.vh-www-choice-copy {
display: flex;
flex-direction: column;
gap: 5px;
min-width: 0
}
.vh-www-choice-copy strong {
font-size: 12px;
overflow-wrap: anywhere;
color: var(--text)
}
.vh-www-route {
color: var(--muted);
font: 11px var(--mono);
overflow-wrap: anywhere
}
.vh-www-no-hosts {
margin: 6px 0;
font-size: 11px
}
.vh-www-other {
display: flex;
flex-wrap: wrap;
align-items: center;
gap: 6px;
margin-top: 12px;
font-size: 11px;
color: var(--muted)
}
.vh-www-alias {
font: 11px var(--mono);
padding: 4px 6px;
background: var(--panel)
}
.vh-www-alias,
.vhost-chart {
border: 1px solid var(--line)
}
.vhost-chart {
margin-top: 9px;
background: var(--chart-surface-alt)
}
.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;
filter: var(--chart-svg-filter)
}
.vhost-chart-line {
fill: none;
stroke: var(--chart-accent);
stroke-width: var(--chart-line-width);
stroke-linecap: var(--chart-linecap);
stroke-linejoin: var(--chart-linejoin);
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-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)
}
#stream-list {
display: grid;
gap: 10px
}
#panel-streams .card-heading {
flex-wrap: wrap
}
#stream-search {
width: calc(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: var(--chart-line-width);
stroke-linecap: var(--chart-linecap);
stroke-linejoin: var(--chart-linejoin);
vector-effect: non-scaling-stroke
}
.stream-chart-rx {
stroke: var(--chart-accent)
}
.stream-chart-tx {
stroke: var(--chart-secondary)
}
.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,
.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
}
.docker-agent-security .fine,
.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)
}
.auth-advanced>summary,
.vh-backend-advanced>summary {
cursor: pointer;
color: var(--muted);
font-size: 11px;
font-weight: 600;
padding: 4px 0 8px
}
.vh-backend-health-editor {
border: 1px solid var(--line);
border-radius: 8px;
padding: 15px;
display: grid;
grid-template-columns: minmax(0, 1fr);
gap: 11px;
background: var(--surface, transparent)
}
.vh-backend-health-editor h3 {
margin: 0;
font-size: 14px
}
.vh-backend-health-editor .fine {
margin: 0
}
.vh-backend-health-editor>.vh-field {
max-width: 620px
}
#redirect-listeners>.listener-choices,
.vh-backend-health-editor select {
width: 100%
}
.vh-backend-health-panel {
border-top: 1px solid var(--line);
padding-top: 12px
}
.vh-backend-health-fields {
margin-top: 4px
}
.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
}
@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-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-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;
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;
align-items: center;
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;
gap: 10px;
}
.docker-health-grid>label,
.docker-route-grid>label:not(.check) {
display: grid;
gap: 5px;
min-width: 0;
}
.docker-health-grid>label>span,
.docker-route-grid>label:not(.check)>span {
color: var(--muted);
font-size: 11px;
}
.docker-health-grid input:not([type=checkbox]),
.docker-health-grid select,
.docker-route-grid input:not([type=checkbox]),
.docker-route-grid select {
min-width: 0;
width: 100%;
}
.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: calc(min(280px, 38vw));
}
.cache-toolbar-status {
margin-left: auto;
display: flex;
align-items: center;
gap: 12px;
white-space: nowrap;
}
@media(max-width:1320px) {
.docker-runtime {
grid-column: 2;
justify-content: flex-start;
text-align: left;
flex-wrap: wrap;
}
.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 {
align-items: stretch;
}
.docker-runtime {
grid-column: auto;
justify-content: flex-start;
text-align: left;
}
.docker-health-grid,
.docker-passive-health-editor .docker-health-grid,
.docker-route-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-agent-security,
.docker-toolbar {
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-filter-row {
grid-column: 1/-1;
display: flex;
align-items: end;
justify-content: space-between;
gap: 12px;
width: 100%;
padding: 8px 10px;
border: 1px solid var(--line);
background: var(--panel)
}
#panel-settings .settings-filter {
display: grid;
gap: 5px;
width: min(520px, 100%)
}
#panel-settings .settings-filter input {
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-filter-row {
align-items: stretch;
flex-direction: column;
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: calc(min(1040px, 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: calc(min(68dvh, 680px));
overflow: auto;
border-top: 1px solid var(--line);
}
.audit-dialog table {
font: 11px var(--mono);
}
.audit-dialog td,
.audit-dialog th {
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%;
}
.docker-service-editor>summary,
.docker-service-head-actions,
.security-editor>summary {
align-items: flex-start;
flex-direction: column;
}
.docker-service-head {
grid-template-columns: 1fr;
}
.docker-service-head-actions {
grid-column: auto;
}
.docker-service-editor .docker-config-hint {
text-align: left;
}
}
.traffic-line {
fill: none;
vector-effect: non-scaling-stroke;
}
.traffic-line-total {
stroke: var(--chart-septenary);
stroke-width: 1.25;
opacity: .72;
}
.traffic-line-h1 {
stroke: var(--chart-accent);
stroke-width: 2;
}
.traffic-line-h2 {
stroke: var(--chart-secondary);
stroke-width: 2;
}
.traffic-line-h3 {
stroke: var(--chart-tertiary);
stroke-width: 2;
}
.traffic-line-transform {
stroke: var(--chart-quaternary);
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,
body[data-density=compact] .transport-grid span {
font-size: 9px;
}
body[data-density=compact] .transport-grid>div {
padding: 4px 7px !important;
}
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] .mini-metrics div {
margin-top: 2px;
}
body[data-density=compact] .pool-table td,
body[data-density=compact] .pool-table th {
padding: 3px 5px;
font-size: 10px;
}
body[data-density=compact] .pool-card .table-scroll {
max-height: 170px;
}
body[data-density=compact] .outline,
body[data-density=compact] .primary,
body[data-density=compact] .quiet,
body[data-density=compact] button,
body[data-density=compact] input:not([type=checkbox]):not([type=radio]),
body[data-density=compact] select,
body[data-density=compact] textarea {
padding: 3px 7px;
font-size: 10px;
}
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(--chart-septenary);
stroke-width: 1.25;
opacity: .72;
}
#sparkline-h1.traffic-line-h1 {
stroke: var(--chart-accent);
}
#sparkline-h2.traffic-line-h2 {
stroke: var(--chart-secondary);
}
#sparkline-h3.traffic-line-h3 {
stroke: var(--chart-tertiary);
}
.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;
}
}
.network-interface-charts {
display: grid;
max-height: 260px;
overflow: auto;
}
.network-interface-row-head {
display: flex;
justify-content: space-between;
gap: 10px;
}
.network-interface-row-head b {
min-width: 0;
overflow-wrap: anywhere;
font-size: 10px
}
.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-field-label,
.docker-agent-grid>label>span:first-child {
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) {
.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-acl-grid .docker-field input:not([type=checkbox]),
.docker-acl-grid .docker-field select,
.docker-route-grid .docker-field input:not([type=checkbox]),
.docker-route-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,
.transform-diagnostics {
grid-template-columns: 1fr
}
.docker-alias-field {
grid-column: auto
}
}
#panel-tls .certificate-workspace-heading {
align-items: flex-start;
margin-bottom: 12px
}
#panel-tls .certificate-subheading>div,
#panel-tls .certificate-workspace-heading>div {
min-width: 0
}
#panel-tls .certificate-section-intro p,
#panel-tls .certificate-subheading p,
#panel-tls .certificate-workspace-heading 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=complete],
#panel-tls .certificate-operation-card[data-state=ready] {
border-left-color: var(--green)
}
#panel-tls .certificate-operation-card[data-state=failed],
#panel-tls .certificate-operation-card[data-state=unavailable] {
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,
#panel-tls .certificate-operation-card[data-state=unavailable] .certificate-operation-heading strong,
#panel-tls .certificate-operation-card[data-state=unavailable] .pill {
color: var(--red)
}
#panel-tls .certificate-operation-card[data-state=complete] .pill,
#panel-tls .certificate-operation-card[data-state=ready] .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-operation-heading,
#panel-tls .certificate-subheading,
#panel-tls .certificate-workspace-heading,
#panel-tls .renewal-entry-head {
align-items: stretch;
flex-direction: column
}
#panel-tls .certificate-subheading>button,
#panel-tls .certificate-workspace-heading>button {
width: 100%
}
#panel-tls .certificate-tabs,
#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: rgba(255, 170, 162, .58);
background: rgba(255, 170, 162, .07);
color: var(--red);
}
.cache-toolbar-message {
flex-basis: 100%;
margin-top: 0;
}
.cache-operation-dialog {
width: calc(min(920px, 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 .legend-h1 i {
background: var(--traffic-h1);
}
.stat-chart .stat-chart-legend .legend-h2 i {
background: var(--traffic-h2);
}
.stat-chart .stat-chart-legend .legend-h3 i {
background: var(--traffic-h3);
}
.stat-chart .stat-chart-legend b {
font-family: var(--mono);
font-weight: 500;
}
.proto-h1-line {
stroke: var(--traffic-h1);
}
.proto-h1-line,
.proto-h2-line,
.proto-h3-line {
fill: none;
stroke-width: var(--chart-line-width);
stroke-linecap: var(--chart-linecap);
}
.proto-h2-line {
stroke: var(--traffic-h2);
}
.proto-h3-line {
stroke: var(--traffic-h3);
}
.stat-chart .chart-grid {
opacity: var(--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: calc(clamp(180px, 22vw, 270px));
overflow: visible
}
.function-live-line {
fill: none;
stroke-width: 2.2;
vector-effect: non-scaling-stroke
}
.transform-applied-key,
.transform-applied-line {
stroke: var(--chart-quaternary);
color: var(--chart-quaternary)
}
.transform-cache-key,
.transform-cache-line {
stroke: var(--chart-secondary);
color: var(--chart-secondary)
}
.transform-skipped-key,
.transform-skipped-line {
stroke: var(--chart-septenary);
color: var(--chart-septenary)
}
.transform-error-key,
.transform-error-line {
stroke: var(--chart-quinary);
color: var(--chart-quinary)
}
.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: 0;
}
.runtime-information-card h3 {
margin: 16px 0 8px;
font-size: 12px;
font-weight: 600;
}
.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;
}
.connection-card .chart-footer b,
.connection-legend b,
.payload-split 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-exchange-line,
.connection-open-line {
fill: none;
vector-effect: non-scaling-stroke;
stroke-width: 2;
}
.connection-open-line {
stroke: var(--chart-accent);
}
.connection-exchange-line {
stroke: var(--chart-secondary);
}
.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-cancel-edit[hidden],
#certificate-api-edit-note[hidden],
#certificate-api-token-field[hidden] {
display: none;
}
.certificate-api-credential-item {
border: 1px solid var(--line);
border-radius: 4px;
background: var(--panel2);
}
.certificate-api-row-actions {
display: flex;
flex-wrap: wrap;
align-items: center;
justify-content: flex-end;
gap: 4px;
}
.certificate-api-details {
display: grid;
gap: 7px;
padding: 10px 12px;
border-top: 1px solid var(--line);
}
.certificate-api-detail-line {
display: grid;
gap: 4px;
grid-template-columns: minmax(120px, 1fr) minmax(0, 2fr);
overflow-wrap: anywhere;
}
.certificate-api-credential-row {
display: flex;
align-items: center;
justify-content: space-between;
gap: 12px;
padding: 8px 9px;
}
.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: 0;
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:focus-visible,
.metric-info>summary:hover,
.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: calc(min(360px, 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(--chart-accent);
}
.cache-fill-line {
stroke: var(--chart-secondary);
}
.cache-cold-line,
.cache-queue-line {
stroke: var(--chart-tertiary);
}
.cache-io-line {
stroke: var(--chart-quaternary);
}
.cache-transient-total-key {
color: var(--chart-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: calc(min(1180px, 100vw - 24px));
max-width: calc(100vw - 24px);
max-height: calc(100dvh - 28px);
overflow: hidden;
}
.config-history-dialog[open] {
display: grid;
grid-template-rows: auto minmax(0, 1fr);
height: calc(min(820px, 100dvh - 28px));
}
.config-history-layout {
display: grid;
grid-template-columns: minmax(380px, .95fr) minmax(420px, 1.05fr);
grid-template-rows: minmax(0, 1fr);
gap: 10px;
padding: 10px;
min-height: 0;
overflow: hidden;
}
.config-history-browser,
.config-history-detail {
min-width: 0;
min-height: 0;
overflow-y: auto;
overscroll-behavior: contain;
}
.config-history-detail {
display: flex;
flex-direction: column;
overflow: hidden;
}
.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-days,
.config-history-weekdays {
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: 0 0 auto;
flex-wrap: wrap;
gap: 6px;
margin-bottom: 10px;
max-height: 110px;
overflow-y: auto;
}
.config-history-revision {
font: 10px var(--mono);
}
.config-history-revision.active {
border-color: var(--accent);
color: var(--accent);
}
.config-history-diff {
display: grid;
flex: 1 1 auto;
min-height: 0;
align-content: start;
grid-auto-rows: max-content;
gap: 8px;
overflow-y: auto;
padding-right: 4px;
overscroll-behavior: contain;
}
.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 {
grid-template-columns: 1fr 1fr;
}
.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 {
display: block;
overflow-y: auto;
}
.config-history-browser {
max-height: calc(min(300px, 38dvh));
overflow-y: auto;
margin-bottom: 10px;
}
.config-history-detail {
display: block;
overflow: visible;
}
.config-history-revisions {
max-height: none;
}
.config-history-diff {
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(--rp-nav-active-color);
border-color: var(--rp-nav-active-color);
background: var(--rp-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-width: 2px;
text-align: left;
}
.sidebar .main-navigation .nav.active {
border-color: var(--line);
border-left-color: var(--rp-nav-active-color);
background: var(--rp-nav-active-bg);
}
[dir=rtl] .sidebar .main-navigation .nav.active {
border-left-color: var(--line);
border-right-color: var(--rp-nav-active-color);
}
}
@media(max-width:600px) {
.sidebar .main-navigation .nav span {
display: none;
}
}
.about-dialog {
width: calc(min(560px, 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 label {
min-width: 0;
}
.file-logs-table {
max-height: 62vh;
}
.file-logs-table thead th {
position: sticky;
top: 0;
z-index: 4;
background: var(--panel);
box-shadow: 0 1px 0 var(--line);
}
.file-logs-table th .file-log-sort-button {
display: inline-flex;
align-items: center;
gap: 6px;
padding: 3px 2px;
font: inherit;
font-weight: inherit;
color: inherit;
border: 0;
background: transparent;
cursor: pointer;
text-align: left;
}
.file-logs-table th .file-log-sort-button:hover,
.file-logs-table th[aria-sort=ascending] .file-log-sort-button,
.file-logs-table th[aria-sort=descending] .file-log-sort-button {
color: var(--accent);
}
.file-logs-table .file-log-sort-indicator {
font-size: 11px;
opacity: .8;
}
.file-logs-table tbody tr:not(.file-log-detail-row) {
cursor: pointer;
}
.file-logs-table tbody tr.selected>td {
background: var(--panel2);
box-shadow: inset 3px 0 0 var(--accent);
}
.file-logs-table td {
max-width: 340px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.file-log-detail-row td {
max-width: none;
padding: 0;
background: var(--panel2);
white-space: normal;
}
.file-log-inline-detail {
border-top: 1px solid var(--line);
border-bottom: 1px solid var(--line);
}
.file-log-inline-detail pre {
margin: 8px 0 0;
overflow: auto;
white-space: pre-wrap;
overflow-wrap: anywhere;
}
.file-logs-pager {
display: flex;
justify-content: flex-end;
gap: 8px;
}
.file-logs-launcher {
display: flex;
align-items: center;
justify-content: space-between;
gap: 16px;
}
@media(max-width:1100px) {
.file-logs-filter {
grid-template-columns: repeat(3, minmax(140px, 1fr));
}
}
@media(max-width:700px) {
.file-logs-filter .file-log-search {
grid-column: auto;
}
.file-logs-launcher {
align-items: stretch;
flex-direction: column;
}
}
.top-log-menu {
position: relative;
}
.file-log-search-help>summary,
.top-log-menu>summary {
list-style: none;
cursor: pointer;
user-select: none;
}
.file-log-search-help>summary::-webkit-details-marker,
.top-log-menu>summary::-webkit-details-marker {
display: none;
}
.file-log-search-help[open]>summary,
.top-log-menu[open]>summary {
color: var(--text);
border-color: var(--border-hover);
}
.top-log-menu-items {
position: absolute;
z-index: 120;
top: calc(100% + 6px);
inset-inline-end: 0;
display: grid;
gap: 4px;
min-width: 170px;
padding: 6px;
border: 1px solid var(--line);
background: var(--panel);
box-shadow: 0 12px 28px var(--shadow-strong);
}
.top-log-menu-items .quiet {
width: 100%;
text-align: start;
white-space: nowrap;
}
.file-logs-heading-actions,
.file-logs-table-toolbar {
display: flex;
align-items: center;
justify-content: flex-end;
gap: 8px;
}
.file-log-search-help {
position: relative;
}
.file-log-search-help-popover {
position: absolute;
z-index: 90;
top: calc(100% + 6px);
inset-inline-end: 0;
display: grid;
gap: 7px;
width: calc(min(420px, 100vw - 36px));
padding: 12px;
border: 1px solid var(--line);
background: var(--panel2);
box-shadow: 0 12px 28px var(--shadow-strong);
}
.file-log-search-help-popover p,
.file-logs-table-toolbar .fine {
margin: 0;
}
.file-log-search-help-popover code {
display: block;
overflow-wrap: anywhere;
}
.file-logs-filter {
display: grid;
grid-template-columns: minmax(180px, 260px) minmax(260px, 1fr) minmax(110px, 150px);
gap: 10px;
align-items: end;
}
.file-logs-filter .file-log-search {
grid-column: auto;
}
.file-logs-filter input,
.file-logs-filter select {
width: 100%;
}
.file-logs-table-toolbar {
justify-content: space-between;
min-height: 32px;
}
.file-log-column-picker {
align-self: end;
margin-inline-start: auto;
}
.file-log-column-picker .log-column-options {
width: calc(min(360px, 100vw - 24px));
max-height: 420px;
overflow: auto;
grid-template-columns: repeat(2, minmax(0, 1fr));
}
.dashboard-widget-setting-label,
.file-log-column-picker .log-column-option span {
overflow: hidden;
text-overflow: ellipsis;
}
.file-log-field-grid {
display: grid;
gap: 1px;
border: 1px solid var(--line);
}
.file-log-field {
display: grid;
grid-template-columns: minmax(140px, .5fr) minmax(0, 1.5fr);
background: var(--panel);
}
.file-log-field code {
overflow-wrap: anywhere;
color: var(--muted);
}
.file-log-field span {
min-width: 0;
overflow-wrap: anywhere;
}
.file-log-raw-json>summary {
cursor: pointer;
color: var(--muted);
}
.backend-sort-direction {
min-width: 36px;
font-size: 16px;
line-height: 1;
}
@media(max-width:700px) {
.file-logs-heading-actions,
.file-logs-table-toolbar {
align-items: stretch;
flex-wrap: wrap;
}
.file-log-column-picker .log-column-options,
.file-log-field,
.file-logs-filter {
grid-template-columns: 1fr;
}
.file-log-limit {
max-width: 160px;
}
.file-log-field {
gap: 3px;
}
}
.appearance-settings-card {
max-width: 980px;
}
.appearance-section {
margin-top: 14px;
padding: 12px;
border: 1px solid var(--line);
background: var(--panel2)
}
.appearance-section-heading {
display: flex;
align-items: flex-start;
justify-content: space-between;
gap: 12px;
margin-bottom: 12px;
padding-bottom: 9px;
border-bottom: 1px solid var(--line)
}
.appearance-section-heading h3 {
margin: 2px 0 0;
font-size: 14px
}
.appearance-section-reset {
flex: 0 0 auto
}
.appearance-settings-grid {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 16px;
align-items: start;
}
.appearance-settings-grid>label {
display: grid;
gap: 7px;
}
.appearance-scale-control>span:first-child {
display: flex;
align-items: center;
justify-content: space-between;
gap: 12px;
}
.appearance-scale-control output {
color: var(--accent);
font-weight: 700;
font-variant-numeric: tabular-nums;
}
.appearance-scale-control input[type=range] {
width: 100%;
}
.appearance-chart-preview {
min-height: 118px;
display: grid;
grid-template-rows: 1fr auto;
gap: 6px;
padding: 10px;
border: 1px solid var(--line);
border-radius: 0;
background: var(--chart-surface);
}
.appearance-chart-preview svg {
width: 100%;
height: 78px;
filter: var(--chart-svg-filter)
}
.appearance-chart-preview polyline {
fill: none;
stroke-width: var(--chart-line-width);
stroke-linecap: var(--chart-linecap);
stroke-linejoin: var(--chart-linejoin);
vector-effect: non-scaling-stroke;
}
.appearance-chart-primary {
stroke: var(--chart-accent);
}
.appearance-chart-secondary {
stroke: var(--chart-secondary);
}
.appearance-chart-preview>span {
color: var(--muted);
font-size: 11px;
}
.chart-style-palette {
display: grid;
grid-template-columns: repeat(4, minmax(0, 1fr));
gap: 6px;
margin-top: 10px
}
.chart-style-choice {
display: grid;
grid-template-columns: 42px minmax(0, 1fr);
align-items: center;
gap: 8px;
min-height: 34px;
padding: 5px 7px;
border: 1px solid var(--line);
border-radius: 0;
background: var(--panel);
color: var(--text);
text-align: left;
font-size: 10px
}
.chart-style-choice:hover {
border-color: var(--border-hover);
background: var(--nav-hover-bg)
}
.chart-style-choice.active {
border-color: var(--accent);
box-shadow: inset 3px 0 0 var(--accent)
}
.chart-style-swatches {
display: grid;
grid-template-columns: repeat(4, 1fr);
height: 16px;
border: 1px solid var(--line)
}
.chart-style-swatches i:first-child {
background: var(--sw1);
}
.chart-style-swatches i:nth-child(2) {
background: var(--sw2);
}
.chart-style-swatches i:nth-child(3) {
background: var(--sw3);
}
.chart-style-swatches i:nth-child(4) {
background: var(--sw4);
}
.chart-style-choice[data-chart-preset=default] {
--sw1: var(--accent);
--sw2: var(--green);
--sw3: var(--blue);
--sw4: var(--transform-chart);
}
.chart-style-choice[data-chart-preset=soft] {
--sw1: #e8a998;
--sw2: #95c293;
--sw3: #8daef6;
--sw4: #b49de6;
}
.chart-style-choice[data-chart-preset=technical] {
--sw1: #79c9ff;
--sw2: #9adf90;
--sw3: #ffd56e;
--sw4: #c39cff;
}
.chart-style-choice[data-chart-preset=high_contrast] {
--sw1: #ffd54f;
--sw2: #8dff80;
--sw3: #6fd9ff;
--sw4: #ff78d7;
}
.chart-style-choice[data-chart-preset=neon] {
--sw1: #2cf6ff;
--sw2: #7eff85;
--sw3: #ff5cd0;
--sw4: #8b7cff;
}
.chart-style-choice[data-chart-preset=monochrome] {
--sw1: #f2f2f2;
--sw2: #b8b8b8;
--sw3: #858585;
--sw4: #595959;
}
.chart-style-choice[data-chart-preset=warm] {
--sw1: #ff9c5c;
--sw2: #f4c46b;
--sw3: #ff7b72;
--sw4: #f4a261;
}
.chart-style-choice[data-chart-preset=cool] {
--sw1: #5fb9ff;
--sw2: #45d3c3;
--sw3: #7d8fff;
--sw4: #70d7ff;
}
.dashboard-widget-settings {
display: grid;
min-width: 0;
gap: 5px
}
.dashboard-widget-list {
display: grid;
min-width: 0;
grid-template-columns: repeat(auto-fit, minmax(min(180px, 100%), 1fr));
gap: 6px;
margin-top: 4px
}
.dashboard-widget-setting {
display: grid;
grid-template-columns: minmax(0, 1fr) auto;
gap: 4px;
min-width: 0;
min-height: 34px;
padding: 3px;
border: 1px solid var(--line);
background: var(--panel)
}
.dashboard-widget-toggle {
display: flex;
align-items: center;
gap: 7px;
min-width: 0;
min-height: 26px;
padding: 3px 6px;
border: 0;
background: transparent;
color: var(--text);
text-align: left
}
.dashboard-widget-toggle:hover {
background: var(--panel2)
}
.dashboard-widget-toggle.is-hidden {
color: var(--muted)
}
.dashboard-widget-visibility {
flex: 0 0 8px;
width: 8px;
height: 8px;
border: 1px solid var(--green);
border-radius: 50%;
background: var(--green)
}
.dashboard-widget-toggle.is-hidden .dashboard-widget-visibility {
border-color: var(--muted);
background: transparent
}
.dashboard-widget-setting-label {
white-space: nowrap;
font-size: 11px
}
.dashboard-widget-setting-actions {
display: inline-flex;
gap: 2px
}
.dashboard-widget-setting-actions button {
min-width: 24px;
min-height: 24px;
padding: 1px 5px;
border-radius: 0
}
.appearance-actions {
display: flex;
justify-content: flex-end;
margin-top: 14px;
padding-top: 12px;
border-top: 1px solid var(--line)
}
html[data-chart-style=default] {
--chart-accent: var(--accent);
--chart-secondary: var(--green);
--chart-tertiary: var(--blue);
--chart-quaternary: var(--transform-chart);
--chart-quinary: var(--red);
--chart-senary: var(--notice-text);
--chart-septenary: var(--border-hover);
--chart-octonary: var(--separator);
--chart-surface: var(--panel2);
--chart-surface-alt: var(--panel);
--chart-line-width: 2;
--chart-linecap: round;
--chart-linejoin: round;
--chart-grid-opacity: .28;
--chart-grid-dash: 2 5;
--chart-svg-filter: none;
}
html[data-chart-style=soft] {
--chart-accent: #e8a998;
--chart-secondary: #95c293;
--chart-tertiary: #8daef6;
--chart-quaternary: #b49de6;
--chart-quinary: #d99490;
--chart-senary: #d0b78e;
--chart-septenary: #99a790;
--chart-octonary: #728070;
--chart-surface: color-mix(in srgb, var(--panel2) 88%, #fff 12%);
--chart-surface-alt: color-mix(in srgb, var(--panel) 92%, #fff 8%);
--chart-line-width: 2.8;
--chart-linecap: round;
--chart-linejoin: round;
--chart-grid-opacity: .42;
--chart-grid-dash: 1 0;
--chart-svg-filter: saturate(.88) brightness(1.04);
}
html[data-chart-style=technical] {
--chart-accent: #79c9ff;
--chart-secondary: #9adf90;
--chart-tertiary: #ffd56e;
--chart-quaternary: #c39cff;
--chart-quinary: #ff8c7b;
--chart-senary: #b8d0d7;
--chart-septenary: #7e9aac;
--chart-octonary: #6a7884;
--chart-surface: color-mix(in srgb, var(--panel2) 90%, #0b1a27 10%);
--chart-surface-alt: color-mix(in srgb, var(--panel) 90%, #09151f 10%);
--chart-line-width: 1.35;
--chart-linecap: square;
--chart-linejoin: miter;
--chart-grid-opacity: .82;
--chart-grid-dash: 3 4;
--chart-svg-filter: saturate(.76) contrast(1.08);
}
html[data-chart-style=high_contrast] {
--chart-accent: #ffd54f;
--chart-secondary: #8dff80;
--chart-tertiary: #6fd9ff;
--chart-quaternary: #ff78d7;
--chart-quinary: #ff8b6f;
--chart-senary: #f2e48f;
--chart-septenary: #d7f0d9;
--chart-octonary: #cfcfcf;
--chart-surface: color-mix(in srgb, var(--panel2) 94%, #000 6%);
--chart-surface-alt: color-mix(in srgb, var(--panel) 94%, #000 6%);
--chart-line-width: 3;
--chart-grid-opacity: .95;
--chart-grid-dash: 1 0;
--chart-svg-filter: saturate(1.6) contrast(1.22) brightness(1.08);
}
html[data-chart-style=cool],
html[data-chart-style=high_contrast],
html[data-chart-style=monochrome],
html[data-chart-style=neon],
html[data-chart-style=warm] {
--chart-linecap: round;
--chart-linejoin: round;
}
html[data-chart-style=neon] {
--chart-accent: #2cf6ff;
--chart-secondary: #7eff85;
--chart-tertiary: #ff5cd0;
--chart-quaternary: #8b7cff;
--chart-quinary: #ffb454;
--chart-senary: #ffe66b;
--chart-septenary: #7edcff;
--chart-octonary: #d8b3ff;
--chart-surface: #0b1117;
--chart-surface-alt: #101720;
--chart-line-width: 2.45;
--chart-grid-opacity: .62;
--chart-grid-dash: 2 4;
--chart-svg-filter: saturate(1.25) brightness(1.12);
}
html[data-chart-style=monochrome] {
--chart-accent: color-mix(in srgb, var(--text) 92%, #fff 8%);
--chart-secondary: color-mix(in srgb, var(--muted) 80%, var(--text) 20%);
--chart-tertiary: color-mix(in srgb, var(--separator) 72%, var(--text) 28%);
--chart-quaternary: color-mix(in srgb, var(--line) 45%, var(--text) 55%);
--chart-quinary: color-mix(in srgb, var(--muted) 55%, #fff 45%);
--chart-senary: color-mix(in srgb, var(--outline-line) 58%, var(--text) 42%);
--chart-septenary: color-mix(in srgb, var(--field-line) 70%, var(--text) 30%);
--chart-octonary: color-mix(in srgb, var(--scrollbar-thumb) 75%, var(--text) 25%);
--chart-surface: color-mix(in srgb, var(--panel2) 96%, var(--text) 4%);
--chart-surface-alt: color-mix(in srgb, var(--panel) 96%, var(--text) 4%);
--chart-line-width: 2.1;
--chart-grid-opacity: .4;
--chart-grid-dash: 2 3;
--chart-svg-filter: saturate(0) contrast(1.05);
}
html[data-chart-style=warm] {
--chart-accent: #ff9c5c;
--chart-secondary: #f4c46b;
--chart-tertiary: #ff7b72;
--chart-quaternary: #f4a261;
--chart-quinary: #e76f51;
--chart-senary: #d9a15e;
--chart-septenary: #c9895c;
--chart-octonary: #b37258;
--chart-surface: color-mix(in srgb, var(--panel2) 88%, #3d1f10 12%);
--chart-surface-alt: color-mix(in srgb, var(--panel) 90%, #32180d 10%);
--chart-line-width: 2.4;
--chart-grid-opacity: .36;
--chart-grid-dash: 1 0;
--chart-svg-filter: saturate(1.1) brightness(1.04);
}
html[data-chart-style=cool] {
--chart-accent: #5fb9ff;
--chart-secondary: #45d3c3;
--chart-tertiary: #7d8fff;
--chart-quaternary: #70d7ff;
--chart-quinary: #54a0ff;
--chart-senary: #8bcbe0;
--chart-septenary: #6ea6bf;
--chart-octonary: #7d91a9;
--chart-surface: color-mix(in srgb, var(--panel2) 88%, #0d2740 12%);
--chart-surface-alt: color-mix(in srgb, var(--panel) 90%, #0d2033 10%);
--chart-line-width: 2.2;
--chart-grid-opacity: .46;
--chart-grid-dash: 2 4;
--chart-svg-filter: saturate(1.08) brightness(1.03);
}
html[data-chart-style] {
--traffic-h1: var(--chart-accent);
--traffic-h2: var(--chart-secondary);
--traffic-h3: var(--chart-tertiary);
}
:is(.stat-chart, .activity-card, .system-card, .function-live-chart) svg,
:is(.traffic-donut, .traffic-bar-chart span) {
filter: var(--chart-svg-filter);
}
html[data-dashboard-density=compact] #panel-overview .stats-grid,
html[data-dashboard-density=normal] #panel-overview .stats-grid,
html[data-dashboard-density=ultra] #panel-overview .stats-grid {
gap: var(--ui-gap);
}
html[data-dashboard-density=normal] #panel-overview .stat {
padding: 14px;
}
html[data-dashboard-density=normal] #panel-overview .stat>span {
font-size: 11px;
}
html[data-dashboard-density=normal] #panel-overview .stat strong {
font-size: 26px;
margin: 6px 0 4px;
line-height: 1.3;
}
html[data-dashboard-density=normal] #panel-overview .stat small {
font-size: 9px;
}
html[data-dashboard-density=compact] #panel-overview .stat {
padding: 9px 10px;
}
html[data-dashboard-density=compact] #panel-overview .stat>span {
font-size: 11px;
line-height: 1.35;
}
html[data-dashboard-density=compact] #panel-overview .stat strong {
font-size: 22px;
margin: 3px 0 2px;
line-height: 1.2;
}
html[data-dashboard-density=compact] #panel-overview .stat small {
font-size: 10px;
line-height: 1.35;
}
html[data-dashboard-density=compact] #panel-overview .payload-split {
font-size: 10px !important;
}
html[data-dashboard-density=ultra] #panel-overview .stat {
padding: 7px 8px;
}
html[data-dashboard-density=ultra] #panel-overview .stat>span {
font-size: 9px;
line-height: 1.08;
}
html[data-dashboard-density=ultra] #panel-overview .stat strong {
font-size: 18px;
margin: 2px 0 1px;
line-height: 1.08;
}
html[data-dashboard-density=ultra] #panel-overview .stat small {
font-size: 7.5px;
line-height: 1.12;
}
html[data-dashboard-density=ultra] #panel-overview .stat-chart svg {
height: 24px;
}
html[data-dashboard-density=normal] #panel-overview .stat-chart svg {
height: 34px;
}
html[data-dashboard-density=compact] #panel-overview .stat-chart svg {
height: 28px;
}
html[data-table-density=compact] :is(table th, table td) {
padding-top: 6px;
padding-bottom: 6px;
font-size: 11px;
line-height: 1.28;
}
html[data-table-density=compact] .file-log-field {
padding: 2px 6px;
line-height: 1.18;
}
html[data-table-density=compact] .file-log-inline-detail pre {
line-height: 1.18;
}
html[data-table-density=ultra] :is(table th, table td) {
padding-top: 3px;
padding-bottom: 3px;
font-size: 10px;
line-height: 1.15;
}
html[data-table-density=ultra] .file-log-inline-detail {
padding: 5px 7px;
}
html[data-table-density=ultra] .file-log-field-grid {
margin-top: 2px;
}
html[data-table-density=ultra] .file-log-field {
gap: 6px;
padding: 1px 5px;
font-size: 10px;
line-height: 1.08;
}
html[data-table-density=ultra] .file-log-raw-json {
margin-top: 3px;
}
html[data-table-density=ultra] .file-log-inline-detail pre {
margin-top: 3px;
line-height: 1.08;
}
.file-log-inline-detail {
padding: 8px 10px;
}
.file-log-field-grid {
margin-top: 5px;
}
.file-log-field {
gap: 9px;
padding: 3px 7px;
line-height: 1.25;
}
.file-log-raw-json {
margin-top: 6px;
}
.file-log-inline-detail pre {
max-height: 24vh;
margin-top: 5px;
line-height: 1.28;
}
@media(max-width:760px) {
.appearance-settings-grid {
grid-template-columns: 1fr;
}
.chart-style-palette {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
}
.draft-dock {
position: fixed;
right: 14px;
bottom: 14px;
z-index: 900;
width: calc(min(330px, 100vw - 28px));
padding: 0;
border: 1px solid var(--border-hover);
border-radius: 0;
background: var(--panel);
box-shadow: 0 12px 32px var(--shadow-strong);
}
.draft-dock-heading {
display: flex;
align-items: center;
justify-content: space-between;
gap: 8px;
min-height: 34px;
padding: 7px 9px;
border-bottom: 1px solid var(--line);
background: var(--panel2);
}
.draft-dock.is-collapsed .draft-dock-heading {
border-bottom: 0
}
.draft-dock-heading>strong {
font: 700 10px var(--mono);
letter-spacing: .12em;
text-transform: uppercase
}
.draft-dock-heading .pill {
min-width: 24px;
padding: 2px 6px;
text-align: center;
border-radius: 0
}
.draft-dock-heading-actions {
display: inline-flex;
align-items: center;
gap: 5px
}
.draft-dock-toggle {
display: inline-grid;
place-items: center;
width: 26px;
min-width: 26px;
height: 24px;
padding: 0;
border: 1px solid var(--line);
border-radius: 0;
background: var(--panel);
color: var(--text);
font: 700 14px var(--mono)
}
.draft-dock-toggle:hover {
border-color: var(--border-hover);
background: var(--nav-hover-bg)
}
.draft-dock-list {
display: grid;
gap: 0;
max-height: calc(min(42vh, 360px));
overflow: auto;
}
.draft-dock-list[hidden] {
display: none
}
.draft-dock-item {
display: grid;
grid-template-columns: minmax(0, 1fr) 32px;
gap: 0;
align-items: stretch;
border-bottom: 1px solid var(--line)
}
.draft-dock-item:last-child {
border-bottom: 0
}
.draft-dock-open,
.draft-dock-remove {
min-height: 42px;
border: 0;
border-radius: 0;
background: transparent;
}
.draft-dock-open {
min-width: 0;
padding: 6px 9px;
text-align: left;
border-right: 1px solid var(--line)
}
.draft-dock-open:hover,
.draft-dock-remove:hover {
background: var(--nav-hover-bg);
color: var(--text)
}
.draft-dock-open:hover {
box-shadow: inset 3px 0 0 var(--accent)
}
.draft-dock-identity {
display: grid;
min-width: 0;
gap: 1px;
}
.draft-dock-meta {
display: flex;
align-items: center;
justify-content: space-between;
gap: 8px;
min-width: 0
}
.draft-dock-identity small {
color: var(--muted);
font: 9px var(--mono);
text-transform: uppercase;
letter-spacing: .08em;
}
.draft-dock-identity time {
flex: 0 0 auto;
color: var(--text-subtle);
font: 9px var(--mono)
}
.draft-dock-identity b {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
font-size: 12px;
font-weight: 650
}
.draft-dock-remove {
padding: 0;
font-size: 18px;
color: var(--muted);
}
html[data-chart-style] :is(#workspace, dialog) svg polyline {
stroke-width: var(--chart-line-width);
stroke-linecap: var(--chart-linecap);
stroke-linejoin: var(--chart-linejoin);
}
#panel-settings .settings-filter,
.backend-table-tools,
.docker-toolbar,
.file-logs-filter,
.log-tools,
.vhost-list-tools {
--toolbar-control-height: min(var(--button-min-height), var(--ui-field-min-height));
}
#panel-settings .settings-filter input,
.backend-table-tools input,
.backend-table-tools select,
.docker-toolbar input[type=search],
.file-logs-filter input,
.file-logs-filter select,
.log-tools input:not([type=checkbox]):not([type=radio]),
.log-tools select,
.vhost-list-tools input[type=search] {
box-sizing: border-box;
height: var(--toolbar-control-height);
min-height: var(--toolbar-control-height);
padding-block: 0
}
.acl-profile-layout {
grid-template-columns: minmax(260px, .72fr) minmax(440px, 1.28fr)
}
.acl-policy-builder,
.acl-policy-preview {
margin-top: 12px;
padding: 12px;
border: 1px solid var(--line);
background: var(--bg)
}
.acl-policy-preview-head,
.acl-policy-step-head,
.acl-policy-step-head>div {
display: flex;
align-items: flex-start;
justify-content: space-between;
gap: 10px
}
.acl-policy-step-head>div,
.php-switch-row {
justify-content: flex-start
}
.acl-policy-preview-head>span,
.acl-policy-step-head strong {
display: block;
font-size: 12px;
color: var(--text)
}
.acl-policy-step-head p {
margin: 3px 0 0
}
.acl-policy-step {
display: inline-grid;
place-items: center;
flex: 0 0 24px;
width: 24px;
height: 24px;
border: 1px solid var(--line);
background: var(--panel);
color: var(--muted);
font: 11px var(--mono)
}
.acl-policy-modes {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 8px;
margin-top: 10px
}
.acl-policy-mode-card {
position: relative;
display: flex !important;
align-items: flex-start;
gap: 9px;
margin: 0 !important;
padding: 10px;
border: 1px solid var(--field-line);
background: var(--field-bg);
cursor: pointer
}
.acl-policy-mode-card:has(input:checked) {
outline: 1px solid var(--green);
border-color: var(--green)
}
.acl-policy-mode-card input {
margin-top: 2px
}
.acl-policy-mode-card span {
display: grid;
gap: 3px
}
.acl-policy-mode-card b {
color: var(--text);
font-size: 12px
}
.acl-policy-mode-card small {
color: var(--muted);
line-height: 1.45
}
.acl-policy-mode-custom {
grid-column: 1/-1
}
.acl-policy-custom-controls {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 0 10px;
margin-top: 6px;
padding-top: 8px;
border-top: 1px solid var(--line)
}
.acl-policy-custom-controls[hidden] {
display: none
}
.acl-policy-switch {
display: inline-flex !important;
align-items: center;
gap: 7px;
margin: 0 !important;
white-space: nowrap
}
.acl-policy-country-list.is-disabled {
opacity: .55
}
.acl-profile-rule-action-badge {
display: flex;
align-items: center;
min-height: var(--ui-field-min-height);
padding: 7px 9px;
border: 1px solid var(--line);
background: var(--panel);
font-size: 11px;
font-weight: 700
}
.acl-policy-preview-head .is-allow,
.acl-profile-rule-action-badge.is-allow {
color: var(--green)
}
.acl-policy-preview-head .is-deny,
.acl-profile-rule-action-badge.is-deny {
color: var(--red)
}
.acl-policy-preview {
display: grid;
gap: 9px
}
.acl-policy-preview-head {
align-items: center
}
.acl-policy-preview-head b {
padding: 4px 7px;
border: 1px solid var(--line);
background: var(--panel);
font: 700 10px var(--mono)
}
.acl-policy-preview-flow {
display: flex;
flex-wrap: wrap;
align-items: center;
gap: 6px
}
.acl-policy-condition {
display: inline-flex;
flex-wrap: wrap;
gap: 5px;
align-items: center;
max-width: 100%;
padding: 7px 9px;
border: 1px solid var(--line);
background: var(--panel);
font-size: 11px
}
.acl-policy-condition b {
font-size: 10px;
color: var(--muted)
}
.acl-policy-condition span,
.listener-active-address {
overflow-wrap: anywhere
}
.acl-policy-condition.allow {
border-left: 3px solid var(--green)
}
.acl-policy-condition.deny {
border-left: 3px solid var(--red)
}
.acl-policy-or {
color: var(--muted);
font: 700 10px var(--mono)
}
.acl-policy-preview .fine {
margin: 0
}
.acl-profile-card .entity-details {
white-space: pre-line
}
@media(max-width:900px) {
.acl-policy-custom-controls,
.acl-policy-modes,
.acl-profile-layout {
grid-template-columns: 1fr
}
.acl-policy-mode-custom {
grid-column: auto
}
}
@media(max-width:640px) {
.acl-policy-preview-head,
.acl-policy-step-head {
align-items: stretch;
flex-direction: column
}
.acl-policy-step-head>button,
.acl-policy-switch {
width: 100%
}
}
.listener-active-summary {
margin-top: 10px;
padding: 10px 12px;
border: 1px solid var(--line);
background: var(--panel2);
display: grid;
gap: 8px
}
.listener-active-title {
font-size: 10px;
color: var(--muted);
text-transform: uppercase;
letter-spacing: .45px
}
.listener-active-items {
display: flex;
flex-wrap: wrap;
gap: 8px
}
.listener-active-item {
display: inline-flex;
align-items: center;
gap: 7px;
min-width: 0;
padding: 7px 9px;
border: 1px solid var(--line);
background: var(--panel)
}
.listener-active-protocol {
font: 600 10px var(--mono);
color: var(--accent)
}
.listener-active-feature {
padding: 2px 5px;
border: 1px solid var(--line);
font: 600 9px var(--mono);
color: var(--muted)
}
.cache-via-setting {
display: grid;
grid-template-columns: minmax(180px, .8fr) minmax(220px, 1.2fr);
gap: 8px 14px;
align-items: end;
margin-top: 10px
}
.location-header-editor .vh-header-rule-head>button {
margin-left: auto;
flex: 0 0 auto
}
@media(max-width:650px) {
.cache-via-setting {
grid-template-columns: 1fr
}
}
.php-switch-row {
display: flex;
align-items: center;
gap: 10px;
min-width: 0;
min-height: 30px;
margin: 4px 0;
}
.php-switch-row .php-switch-label {
display: inline-flex !important;
flex: 0 1 auto;
align-items: center;
gap: 9px;
min-width: 0;
margin: 0 !important;
line-height: 1.5;
}
.php-switch-row .php-switch-label input[type=checkbox] {
position: static;
flex: 0 0 var(--ui-check-size);
margin: 0;
}
.php-switch-row .php-switch-label span {
min-width: 0;
}
.php-switch-row .php-field-info {
flex: 0 0 auto;
}
.php-switch-row .php-field-info .metric-info-popover {
right: auto;
left: 0;
}
.php-reference pre {
overflow-x: auto;
white-space: pre;
padding: 10px;
border: 1px solid var(--line);
border-radius: 4px;
background: var(--panel2);
font: 12px/1.6 var(--mono);
}
.php-profile-help-divider {
width: 100%;
height: 0;
margin: 16px 0 12px;
border: 0;
border-top: 1px solid var(--line);
}
.php-origin-errors {
grid-column: 1/-1;
display: grid;
gap: 8px;
padding: 10px 0;
border-top: 1px solid var(--line);
}
.php-origin-errors>label {
max-width: 430px;
}
.php-origin-errors>.check {
margin: 0 !important;
}
.php-origin-errors .fine {
margin: 0;
}
.page-intro-copy,
.page-intro-title-row {
min-width: 0;
width: 100%;
}
.page-intro-title-row {
display: flex;
flex-wrap: wrap;
align-items: center;
justify-content: flex-end;
gap: 10px;
}
.page-intro-title-row h1 {
min-width: 0;
flex: 1 1 auto;
margin-right: auto;
}
@media(max-width:700px) {
.page-intro-title-row {
gap: 8px;
}
}
@media(max-width:480px) {
.page-intro-title-row h1 {
font-size: calc(clamp(18px, 5vw, 24px));
letter-spacing: -.6px
}
}
.system-info-heading-actions {
display: flex;
align-items: center;
gap: 8px;
margin-left: auto;
flex-shrink: 0;
}
.system-info-heading-actions .pill {
white-space: nowrap;
}
.cache-maintenance-help {
display: flex;
align-items: center;
gap: 8px;
position: relative;
}
.cache-maintenance-help .subheading {
margin: 0;
}
.cache-maintenance-info {
position: static;
flex-shrink: 0;
}
.cache-maintenance-info .metric-info-popover {
max-height: calc(min(60vh, 420px));
overflow-y: auto;
width: calc(min(440px, 100vw - 56px));
}
.cache-maintenance-info .metric-info-popover code {
display: block;
white-space: pre-wrap;
overflow-wrap: anywhere;
padding: 7px 0;
font-size: 11px;
line-height: 1.55;
}
.cache-maintenance-info .metric-info-popover .fine+code {
margin-top: 6px;
}
.cache-maintenance-info .metric-info-popover code+.fine {
margin-top: 8px;
}
.file-logs-heading-actions .file-log-consolidate {
display: inline-flex;
align-items: center;
gap: .45rem;
padding: .35rem .55rem;
min-height: 0;
color: var(--muted);
font-size: .8rem;
font-weight: 400;
white-space: nowrap;
cursor: pointer;
}
.file-log-consolidate input {
width: 14px;
height: 14px;
margin: 0;
accent-color: var(--accent);
}
.file-log-consolidate:hover {
color: var(--text);
}
.file-log-tabs {
display: flex;
gap: .25rem;
border-bottom: 1px solid var(--line);
margin: .9rem 0 1rem;
}
.file-log-tab {
appearance: none;
background: transparent;
border: 0;
border-bottom: 2px solid transparent;
border-radius: 0;
padding: .65rem 1rem;
color: var(--muted);
cursor: pointer;
font: inherit;
font-weight: 500;
}
.file-log-tab:hover {
color: var(--text);
}
.file-log-tab.active {
color: var(--text);
border-bottom-color: var(--accent);
}
.file-log-tab:focus-visible {
outline: 2px solid var(--accent);
outline-offset: -2px;
}
#file-log-view-counts[hidden],
#file-log-view-entries[hidden] {
display: none !important;
}
.file-log-advanced-parser h3 {
margin: 0 0 .7rem;
font-size: 1rem;
}
@media(max-width:700px) {
.file-logs-heading-actions .file-log-consolidate {
margin-inline-end: auto;
}
.file-log-tab {
padding: .6rem .7rem;
}
}
.file-log-aggregate-copy,
.traffic-copy-value {
appearance: none;
border: 0;
background: transparent;
color: inherit;
font: inherit;
text-align: left;
padding: 0;
margin: 0;
cursor: copy;
}
.file-log-aggregate-copy:focus-visible,
.file-log-aggregate-copy:hover,
.traffic-copy-value:focus-visible,
.traffic-copy-value:hover {
text-decoration: underline;
}
.file-log-advanced-parser {
margin: 0 0 1rem;
padding: .75rem 1rem;
border: 1px solid var(--border);
border-radius: var(--radius, 12px);
}
.file-log-aggregate-form {
display: grid;
grid-template-columns: minmax(220px, 2fr) minmax(140px, 1fr) minmax(120px, 1fr) auto;
gap: .75rem;
align-items: end;
margin-top: .75rem;
}
.file-log-aggregate-table {
margin-top: .75rem;
}
.file-log-aggregate-table td:last-child,
.file-log-aggregate-table th:last-child {
width: 8rem;
text-align: right;
}
@media(max-width:800px) {
.file-log-aggregate-form {
grid-template-columns: 1fr;
}
}
@media(max-width:700px) {
#file-log-view-counts,
#file-log-view-entries,
#panel-filelogs,
#panel-filelogs .file-log-field-grid,
#panel-filelogs .file-logs-table,
#panel-filelogs .file-logs-table-toolbar,
#panel-filelogs .file-logs-workspace {
box-sizing: border-box;
min-width: 0;
max-width: 100%;
width: 100%;
}
#panel-filelogs .file-logs-workspace {
gap: 10px;
padding: 12px;
overflow: visible;
}
#panel-filelogs .card-heading {
min-width: 0;
flex-wrap: wrap;
gap: 8px;
}
#panel-filelogs .file-logs-heading-actions {
width: 100%;
justify-content: flex-start;
gap: 4px;
}
#panel-filelogs .file-logs-heading-actions .file-log-consolidate {
margin-inline-end: auto;
white-space: normal;
}
#panel-filelogs .file-log-search-help-popover {
width: calc(min(320px, 100vw - 54px));
}
#panel-filelogs .file-log-aggregate-form,
#panel-filelogs .file-logs-filter {
grid-template-columns: minmax(0, 1fr);
}
#panel-filelogs .file-log-limit {
max-width: none;
}
#panel-filelogs .file-log-aggregate-form input,
#panel-filelogs .file-log-aggregate-form label,
#panel-filelogs .file-log-aggregate-form select,
#panel-filelogs .file-logs-filter input,
#panel-filelogs .file-logs-filter label,
#panel-filelogs .file-logs-filter select {
min-width: 0;
max-width: 100%;
}
#panel-filelogs .file-log-tabs {
min-width: 0;
}
#panel-filelogs .file-log-tab {
flex: 1 1 0;
min-width: 0;
white-space: normal;
}
#panel-filelogs .file-logs-table-toolbar {
align-items: flex-start;
gap: 5px;
}
#panel-filelogs .file-log-column-picker {
align-self: flex-end;
}
#panel-filelogs .file-logs-table {
max-height: none;
}
#panel-filelogs .file-logs-table table,
#panel-filelogs .file-logs-table tbody {
display: block;
width: 100%;
min-width: 0;
white-space: normal;
}
#panel-filelogs .file-logs-table thead {
display: none;
}
#panel-filelogs .file-logs-table tbody tr:not(.file-log-detail-row) {
display: grid;
grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
gap: 5px 10px;
position: relative;
min-width: 0;
padding: 10px 12px;
margin-bottom: 8px;
border: 1px solid var(--line);
background: var(--panel);
}
#panel-filelogs .file-logs-table tbody tr:focus-visible {
outline: 2px solid var(--accent);
outline-offset: -2px;
}
#panel-filelogs .file-logs-table tbody tr.selected {
border-color: var(--accent);
}
#panel-filelogs .file-logs-table tbody tr:not(.file-log-detail-row)>td {
display: block;
min-width: 0;
max-width: none;
padding: 0;
border: 0;
overflow: hidden;
text-overflow: unset;
white-space: normal;
overflow-wrap: anywhere;
}
#panel-filelogs .file-logs-table td[data-mobile-column=record] {
grid-column: 1/-1;
font-weight: 600;
line-height: 1.45;
padding-inline-end: 16px;
}
#panel-filelogs .file-logs-table td[data-mobile-column=event],
#panel-filelogs .file-logs-table td[data-mobile-column=status],
#panel-filelogs .file-logs-table td[data-mobile-column=time],
#panel-filelogs .file-logs-table td[data-mobile-column=vhost] {
color: var(--muted);
font-size: 11px;
}
#panel-filelogs .file-logs-table tbody tr:not(.file-log-detail-row)>td:before {
content: attr(data-mobile-label) ": ";
color: var(--text-subtle);
font-weight: 400;
}
#panel-filelogs .file-logs-table tbody tr:not(.file-log-detail-row)>td[data-mobile-column=record]:before {
content: "";
}
#panel-filelogs .file-logs-table tbody tr:not(.file-log-detail-row):after {
content: "+";
position: absolute;
inset-block-end: 4px;
inset-inline-end: 8px;
color: var(--muted);
font-size: 15px;
pointer-events: none;
}
#panel-filelogs .file-logs-table tbody tr.selected:after {
content: "-";
}
#panel-filelogs .file-logs-table .file-log-detail-row {
display: block;
margin: -8px 0 8px;
border: 1px solid var(--accent);
border-top: 0;
background: var(--panel2);
}
#panel-filelogs .file-logs-table .file-log-detail-row td {
display: block;
box-sizing: border-box;
width: 100%;
min-width: 0;
max-width: 100%;
white-space: normal;
}
#panel-filelogs .file-log-field {
grid-template-columns: minmax(0, 1fr);
}
#panel-filelogs .file-log-inline-detail {
min-width: 0;
padding: 8px;
}
#panel-filelogs .file-log-inline-detail pre {
max-width: 100%;
overflow-x: auto;
}
#panel-filelogs .file-log-aggregate-table {
box-sizing: border-box;
min-width: 0;
max-width: 100%;
overflow-x: auto;
}
#panel-filelogs .file-log-aggregate-table table {
table-layout: fixed;
}
#panel-filelogs .file-log-aggregate-table td:first-child {
white-space: normal;
overflow-wrap: anywhere;
}
#panel-filelogs .file-logs-pager {
justify-content: space-between;
}
}
#file-log-view-counts,
#file-log-view-entries,
#panel-filelogs,
#panel-filelogs .file-logs-workspace {
min-width: 0;
max-width: 100%;
}
#panel-filelogs .file-logs-workspace {
grid-template-columns: minmax(0, 1fr);
}
#panel-filelogs .file-log-aggregate-table,
#panel-filelogs .file-logs-table {
box-sizing: border-box;
min-width: 0;
max-width: 100%;
overflow-x: auto;
}
@media(max-width:700px) {
#panel-filelogs .file-logs-table {
overflow: visible;
}
#panel-filelogs .file-logs-table td[data-mobile-column=time],
#panel-filelogs .file-logs-table td[data-mobile-column=vhost] {
grid-column: 1/-1;
}
#panel-filelogs .file-logs-table td[data-mobile-column=record] {
max-height: 4.4em;
overflow: hidden;
}
#panel-filelogs .file-logs-table tr.selected td[data-mobile-column=record] {
max-height: none;
overflow-wrap: anywhere;
}
}
.listener-protocol-settings-actions {
display: flex;
gap: 14px;
flex-wrap: wrap;
align-items: center;
margin-block: 10px;
}
.listener-protocol-settings-actions button {
margin: 0;
}
.listener-protocol-settings-actions button[hidden] {
display: none;
}
.config-history-change-values {
display: flex;
flex-wrap: wrap;
align-items: center;
gap: 8px;
}
.config-history-change-values .diff-before {
color: var(--muted);
text-decoration: line-through;
}
.config-history-change-values .diff-after {
color: var(--text);
}
.config-history-change-values code {
white-space: pre-wrap;
overflow-wrap: anywhere;
}
.config-history-json-dialog {
width: calc(min(1200px, 100vw - 24px));
max-width: calc(100vw - 24px);
max-height: calc(100dvh - 28px);
overflow: auto;
}
.config-history-json-columns {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 12px;
padding: 12px;
}
.config-history-json-columns section {
min-width: 0;
}
.config-history-json-columns pre {
padding: 12px;
margin: 0;
background: var(--panel);
border: 0;
overflow: auto;
max-height: 68dvh;
font: 11px/1.5 var(--mono);
}
@media(max-width:760px) {
.config-history-json-columns {
grid-template-columns: 1fr;
}
.config-history-json-columns pre {
max-height: 38dvh;
}
}
.acl-profile-attached {
margin-block: 6px;
}
.acl-profile-attached summary {
cursor: pointer;
color: var(--muted);
font-size: 12px;
}
#panel-overview .stats-grid .stat>small,
.acl-profile-attached p,
.stream-backend-status-row>span:first-child {
overflow-wrap: anywhere;
}
.stream-backend-pool {
display: grid;
gap: .8rem;
min-width: 0;
}
.stream-backend-list {
display: grid;
gap: 1rem;
}
.stream-backend-row {
min-width: 0;
border: 1px solid var(--line, #454d59);
border-radius: .65rem;
padding: .85rem;
}
.stream-backend-row>legend {
font-weight: 650;
padding: 0 .35rem;
}
.stream-backend-row>.quiet {
margin-top: .6rem;
}
.stream-backend-status {
display: grid;
gap: .4rem;
padding: .75rem 0;
}
.stream-backend-status-row {
display: flex;
flex-wrap: wrap;
gap: .5rem;
align-items: center;
justify-content: space-between;
font-size: .85em;
}
[data-dashboard-widget^=stream_][hidden] {
display: none !important;
}
.dashboard-widget-toggle:focus-visible {
outline: 2px solid var(--accent);
outline-offset: -2px;
}
.vh-enable-control.vh-enable-no-hint {
grid-template-rows: auto;
}
.vh-enable-control.vh-enable-no-hint>:is(input, .vh-enable-state) {
grid-row: 1;
}
#panel-overview .backend-mode-bar span,
#panel-overview .stats-grid>.stat {
min-width: 0;
}
#panel-overview .stream-traffic-legend .legend-rx i {
background: var(--chart-accent);
}
#panel-overview .stream-traffic-legend .legend-tx i {
background: var(--chart-secondary);
}
#panel-overview .stats-grid .stat-chart>.stat-chart-legend {
flex-wrap: wrap;
white-space: normal;
}
@media(min-width:1201px) {
#panel-overview .stats-grid {
grid-template-columns: repeat(6, minmax(0, 1fr));
}
}
#panel-overview .backend-mode-bar {
display: flex;
height: 7px;
width: 100%;
overflow: hidden;
gap: 2px;
border-radius: 5px;
background: var(--line);
margin: 7px 0 5px;
}
#panel-overview .backend-mode-h1 {
background: var(--traffic-h1);
}
#panel-overview .backend-mode-auto {
background: var(--traffic-h2);
}
#panel-overview .backend-mode-compat {
background: var(--traffic-h2);
opacity: .5;
}
#panel-overview .backend-mode-h2 {
background: var(--traffic-h3);
}
#panel-overview .backend-mode-bar[aria-label] {
background-clip: padding-box;
}
.vh-origin-protocol-info,
.vh-origin-protocol-warning {
color: var(--muted);
}
.overview-layout-dialog {
width: calc(min(1180px, 100vw - 24px));
max-height: calc(100dvh - 24px);
overflow: auto;
}
.overview-layout-dialog>.window-heading {
position: sticky;
top: 0;
z-index: 2;
background: var(--bg);
border-bottom: 1px solid var(--line);
}
.overview-layout-body {
display: grid;
gap: 16px;
padding: 14px;
}
.overview-layout-body h3 {
font-size: 14px;
margin: 0 0 10px;
}
.overview-layout-grid {
display: grid;
gap: var(--ui-gap, 10px);
}
.overview-layout-tile {
border: 1px solid var(--line);
background: var(--panel);
cursor: grab;
}
.overview-layout-tile:active {
cursor: grabbing;
}
.overview-layout-tile.is-dragging {
opacity: .4;
}
.overview-layout-tile.is-drop-target {
outline: 2px solid var(--accent);
outline-offset: -2px;
}
.overview-layout-tile-toolbar {
display: flex;
gap: 3px;
padding: 4px;
border-bottom: 1px solid var(--line);
}
.overview-layout-tile-toolbar button {
min-height: 28px;
min-width: 28px;
padding: 3px 7px;
}
.overview-layout-grip {
padding: 0 5px;
color: var(--muted);
user-select: none;
}
.overview-layout-hide {
margin-inline-start: auto;
font-size: 11px;
}
.overview-layout-grid .stat {
border: 0;
padding: 12px;
min-height: 98px;
pointer-events: none;
}
.overview-layout-grid .stat>span {
font-size: 11px;
}
.overview-layout-grid .stat strong {
font-size: 24px;
margin-top: 7px;
overflow-wrap: anywhere;
}
.overview-layout-grid .stat small {
display: block;
font-size: 10px;
line-height: 1.4;
overflow-wrap: anywhere;
}
.overview-layout-grid .stat svg {
width: 100%;
height: 53px;
}
.overview-layout-grid .stat-chart-legend {
display: flex;
flex-wrap: wrap;
gap: 8px;
}
.overview-layout-section-heading {
display: flex;
align-items: center;
justify-content: space-between;
gap: 10px;
}
.overview-layout-section-heading input {
max-width: 230px;
}
.overview-layout-hidden-list {
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
gap: 6px;
}
.overview-layout-hidden-item {
display: flex;
align-items: center;
justify-content: space-between;
gap: 8px;
border: 1px solid var(--line);
padding: 8px;
background: var(--panel);
min-width: 0;
}
.overview-layout-hidden-item span {
font-size: 12px;
min-width: 0;
overflow-wrap: anywhere;
}
.overview-layout-hidden-item button {
flex-shrink: 0;
}
.overview-layout-footer {
position: sticky;
bottom: 0;
display: flex;
align-items: center;
justify-content: flex-end;
gap: 8px;
padding: 12px;
border-top: 1px solid var(--line);
background: var(--bg);
z-index: 2;
}
.overview-layout-footer p {
margin: 0 auto 0 0;
font-size: 11px;
overflow-wrap: anywhere;
}
@media(max-width:850px) {
.overview-layout-grid,
.overview-layout-hidden-list {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
}
@media(max-width:550px) {
.overview-layout-grid,
.overview-layout-hidden-list {
grid-template-columns: minmax(0, 1fr);
}
.overview-layout-section-heading {
align-items: stretch;
flex-direction: column;
}
.overview-layout-section-heading input {
max-width: none;
width: 100%;
}
.overview-layout-footer {
flex-wrap: wrap;
}
.overview-layout-footer p {
width: 100%;
}
}
#panel-overview .dashboard-overview-grid {
display: grid;
grid-template-columns: repeat(6, minmax(0, 1fr));
gap: var(--ui-gap);
align-items: stretch;
}
#panel-overview .dashboard-overview-grid>.activity-card svg,
#panel-overview .dashboard-overview-grid>[data-dashboard-widget] {
min-width: 0;
}
#panel-overview .dashboard-overview-grid>[hidden] {
display: none !important;
}
#panel-overview .dashboard-overview-grid>.card:not(.pool-card) {
grid-column: span 2;
}
#panel-overview .dashboard-overview-grid>.pool-card {
grid-column: 1/-1;
margin-bottom: 0;
}
@media(max-width:1200px) {
#panel-overview .dashboard-overview-grid {
grid-template-columns: repeat(4, minmax(0, 1fr));
}
#panel-overview .dashboard-overview-grid>.card:not(.pool-card),
#panel-overview .dashboard-overview-grid>.stat {
grid-column: span 2;
}
}
@media(max-width:850px) {
#panel-overview .dashboard-overview-grid {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
#panel-overview .dashboard-overview-grid>.stat {
grid-column: span 1;
}
#panel-overview .dashboard-overview-grid>.card:not(.pool-card) {
grid-column: 1/-1;
}
}
@media(max-width:550px) {
#panel-overview .dashboard-overview-grid {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
#panel-overview .dashboard-overview-grid>.stat {
grid-column: auto/span 1;
}
}
.overview-layout-tile.is-panel {
grid-column: span 2;
}
.overview-layout-grid .overview-layout-panel-preview {
display: grid;
gap: 7px;
padding: 12px;
min-height: 98px;
background: var(--panel);
pointer-events: none;
}
.overview-layout-panel-preview>strong {
font-size: 13px;
}
.overview-layout-panel-preview svg {
width: 100%;
height: 80px;
}
.overview-layout-panel-preview small {
color: var(--muted);
}
.overview-layout-footer #overview-layout-default {
margin-right: auto;
}
.overview-reset-confirm {
width: calc(min(460px, 100vw - 24px));
padding: 16px;
}
.overview-reset-confirm>p {
line-height: 1.5;
}
@media(max-width:850px) {
.overview-layout-tile.is-panel {
grid-column: span 2;
}
}
@media(max-width:550px) {
.overview-layout-tile.is-panel {
grid-column: span 1;
}
}
.overview-widget-type {
display: inline-block;
width: fit-content;
max-width: 100%;
padding: 2px 6px;
border: 1px solid var(--line);
border-radius: 4px;
background: var(--panel2);
color: var(--muted);
font-size: 10px;
line-height: 1.25;
overflow-wrap: anywhere;
}
.dashboard-widget-setting .dashboard-widget-toggle {
flex-wrap: wrap;
}
.dashboard-widget-setting .overview-widget-type {
margin-left: 15px;
}
.overview-layout-tile-toolbar .overview-widget-type {
margin-left: 3px;
}
.overview-layout-hidden-item .overview-widget-type {
flex: 0 0 auto;
}
.overview-layout-filters {
display: flex;
flex-wrap: wrap;
gap: 8px;
}
.overview-layout-filters input,
.overview-layout-filters select {
width: min(220px, 100%);
max-width: 100%;
}
.overview-inline-actions {
display: inline-flex;
gap: 7px;
align-items: center;
justify-content: flex-end;
flex-wrap: wrap;
max-width: 100%;
margin-left: auto;
}
.overview-inline-actions[hidden],
.overview-inline-hint[hidden] {
display: none !important;
}
.overview-inline-hint {
margin: 0 0 10px;
}
#panel-overview .dashboard-overview-grid.is-unlocked>[data-dashboard-widget] {
position: relative;
outline: 1px dashed var(--accent);
outline-offset: -2px;
padding-top: 66px;
}
#panel-overview .dashboard-overview-grid.is-unlocked>.is-overview-dragging {
opacity: .45;
}
#panel-overview .dashboard-overview-grid.is-unlocked>.is-overview-drop-before {
box-shadow: inset 4px 0 var(--accent);
}
#panel-overview .dashboard-overview-grid.is-unlocked>.is-overview-drop-after {
box-shadow: inset -4px 0 var(--accent);
}
.overview-inline-toolbar {
position: absolute;
top: 3px;
left: 4px;
right: 4px;
z-index: 4;
display: flex;
align-items: center;
flex-wrap: wrap;
gap: 3px;
pointer-events: auto;
}
#panel-overview .overview-inline-toolbar button {
min-width: 28px;
min-height: 27px;
padding: 2px 7px;
font-size: 12px;
}
#panel-overview .overview-inline-toolbar .overview-inline-grip {
cursor: grab;
user-select: none;
}
#panel-overview .overview-inline-toolbar .overview-inline-grip:active {
cursor: grabbing;
}
#panel-overview .overview-inline-toolbar .overview-widget-type {
margin-left: auto;
}
@media(max-width:600px) {
.overview-layout-hidden-item {
flex-wrap: wrap;
}
.overview-layout-filters input,
.overview-layout-filters select {
width: 100%;
}
#panel-overview .dashboard-overview-grid.is-unlocked>[data-dashboard-widget] {
padding-top: 68px;
}
}
#panel-overview .overview-inline-toolbar .overview-inline-hide {
color: var(--red);
border: 1px solid var(--danger-line);
background: var(--panel);
font-size: 18px;
line-height: 1;
}
#panel-overview .overview-inline-toolbar .overview-inline-hide:focus-visible,
#panel-overview .overview-inline-toolbar .overview-inline-hide:hover {
border-color: var(--danger-line-strong);
background: var(--notice-bg);
}
.overview-inline-hidden {
margin: 0 0 10px;
border: 1px solid var(--line);
border-radius: 9px;
background: var(--panel);
color: var(--text);
}
.overview-inline-hidden>summary {
padding: 9px 12px;
cursor: pointer;
color: var(--muted);
font-size: 12px;
}
.overview-inline-hidden>summary:focus-visible {
outline: 2px solid var(--accent);
outline-offset: 2px;
}
.overview-inline-hidden-list {
display: flex;
flex-wrap: wrap;
gap: 7px;
max-height: calc(min(30vh, 240px));
overflow-y: auto;
padding: 10px 12px;
border-top: 1px solid var(--line);
}
.overview-inline-hidden-item {
display: inline-flex;
align-items: center;
gap: 7px;
max-width: 100%;
padding: 4px 7px;
border: 1px solid var(--line);
border-radius: 7px;
color: var(--text);
background: var(--panel2);
font-size: 12px;
}
.overview-inline-hidden-item>span:not(.overview-widget-type) {
overflow-wrap: anywhere;
}
.overview-inline-hidden-item>button {
flex: 0 0 auto;
min-width: 27px;
min-height: 27px;
padding: 1px 7px;
border-radius: 5px;
border: 1px solid var(--field-line);
color: var(--green);
background: var(--panel);
}
.overview-inline-hidden-item>button:hover {
border-color: var(--accent);
}
@media(max-width:600px) {
#panel-overview .dashboard-overview-grid.is-unlocked>[data-dashboard-widget] {
padding-top: 82px;
}
.overview-inline-hidden-item {
max-width: 100%;
}
}
#panel-overview {
container: overview-canvas / inline-size;
}
#panel-overview .dashboard-overview-grid.is-aligned {
display: grid;
--overview-gap: var(--ui-gap);
margin: 0;
row-gap: var(--overview-gap);
column-gap: var(--overview-gap);
grid-template-columns: repeat(12, minmax(0, 1fr));
grid-auto-flow: row;
grid-auto-rows: auto;
align-items: stretch;
align-content: start;
gap: var(--overview-gap);
overflow-anchor: none;
}
#panel-overview .dashboard-overview-grid.is-aligned.stats-grid {
gap: var(--overview-gap);
}
#panel-overview .dashboard-overview-grid.is-aligned>[data-dashboard-widget] {
grid-column: auto/span 2;
grid-row: auto;
align-self: stretch;
width: 100%;
max-width: 100%;
min-width: 0;
box-sizing: border-box;
margin-block: 0;
position: relative;
}
#panel-overview .dashboard-overview-grid.is-aligned>.card:not(.pool-card) {
grid-column: auto/span 4;
}
#panel-overview .dashboard-overview-grid.is-aligned>.card.overview-wide-chart {
grid-column: auto/span 6;
}
#panel-overview .dashboard-overview-grid.is-aligned>.pool-card {
grid-column: 1/-1;
}
#panel-overview .dashboard-overview-grid.is-aligned>.card.overview-row-start,
#panel-overview .dashboard-overview-grid.is-aligned>.overview-row-start {
grid-column-start: 1;
}
@container overview-canvas (max-width: 1080px) {
#panel-overview .dashboard-overview-grid.is-aligned {
grid-template-columns: repeat(6, minmax(0, 1fr));
}
#panel-overview .dashboard-overview-grid.is-aligned>[data-dashboard-widget].stat {
grid-column: auto/span 2;
}
#panel-overview .dashboard-overview-grid.is-aligned>.card:not(.pool-card) {
grid-column: auto/span 3;
}
#panel-overview .dashboard-overview-grid.is-aligned>.card.overview-wide-chart,
#panel-overview .dashboard-overview-grid.is-aligned>.pool-card {
grid-column: 1/-1;
}
}
@container overview-canvas (max-width: 700px) {
#panel-overview .dashboard-overview-grid.is-aligned {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
#panel-overview .dashboard-overview-grid.is-aligned>[data-dashboard-widget].stat {
grid-column: auto/span 1;
touch-action: pan-y pinch-zoom;
overflow-wrap: anywhere;
}
#panel-overview .dashboard-overview-grid.is-aligned>.stat.stat-with-action {
padding-right: 11px;
}
#panel-overview .dashboard-overview-grid.is-aligned .stat-with-action .stat-corner-action {
position: static;
display: block;
width: max-content;
max-width: 100%;
margin: 6px 0 0;
white-space: normal;
}
html[data-dashboard-density=normal] #panel-overview .dashboard-overview-grid.is-aligned>.stat strong {
font-size: calc(clamp(20px, 5.8vw, 26px));
}
html[data-dashboard-density=compact] #panel-overview .dashboard-overview-grid.is-aligned>.stat strong {
font-size: calc(clamp(19px, 5vw, 22px));
}
#panel-overview .dashboard-overview-grid.is-aligned>.card:not(.pool-card) {
grid-column: 1/-1;
}
}
#panel-overview .dashboard-overview-grid.is-aligned>[data-dashboard-widget].overview-row-start {
grid-column-start: 1;
}
#panel-overview .overview-wide-chart {
padding: 15px;
overflow: hidden;
}
html[data-dashboard-density=normal] #panel-overview .dashboard-overview-grid>.card:not(.pool-card) {
padding: 13px;
}
html[data-dashboard-density=compact] #panel-overview .dashboard-overview-grid>.card:not(.pool-card) {
padding: 10px;
}
html[data-dashboard-density=ultra] #panel-overview .dashboard-overview-grid>.card:not(.pool-card) {
padding: 7px;
}
html[data-dashboard-density=compact] #panel-overview .dashboard-overview-grid>.card .card-heading h2 {
font-size: 14px;
}
html[data-dashboard-density=ultra] #panel-overview .dashboard-overview-grid>.card .card-heading h2 {
font-size: 13px;
}
#panel-overview .overview-wide-chart .card-heading {
min-width: 0;
align-items: baseline;
gap: 10px;
}
#panel-overview .overview-wide-chart h2 {
min-width: 0;
overflow-wrap: anywhere;
}
#panel-overview .overview-wide-summary {
color: var(--accent);
font: 500 12px var(--mono);
white-space: nowrap;
}
#panel-overview .overview-wide-svg {
display: block;
width: 100%;
height: calc(clamp(125px, 13vw, 190px));
margin-block: 13px 9px;
}
#panel-overview .overview-wide-svg .chart-grid {
vector-effect: non-scaling-stroke;
stroke: var(--line);
fill: none;
stroke-width: 1;
opacity: .6;
}
#panel-overview .overview-wide-series {
fill: none;
vector-effect: non-scaling-stroke;
stroke-width: 2;
stroke-linejoin: round;
stroke-linecap: round;
}
#panel-overview .overview-wide-series-0 {
stroke: var(--chart-accent);
}
#panel-overview .overview-wide-series-1 {
stroke: var(--chart-secondary);
}
#panel-overview .overview-wide-series-2 {
stroke: var(--chart-tertiary);
}
#panel-overview .overview-wide-legend {
display: flex;
flex-wrap: wrap;
align-items: center;
gap: 8px 16px;
color: var(--muted);
font-size: 11px;
}
#panel-overview .overview-wide-legend>span {
display: inline-flex;
align-items: center;
gap: 6px;
min-width: 0;
}
#panel-overview .overview-wide-legend i {
width: 8px;
height: 8px;
border-radius: 100%;
background: var(--chart-accent);
}
#panel-overview .overview-wide-legend .overview-wide-key-1 {
background: var(--chart-secondary);
}
#panel-overview .overview-wide-legend .overview-wide-key-2 {
background: var(--chart-tertiary);
}
#panel-overview .overview-wide-legend b {
font: 500 11px var(--mono);
color: var(--text);
}
.dashboard-widget-setting .dashboard-widget-toggle .overview-widget-type {
margin: 0 0 0 auto;
flex: 0 0 auto;
}
.dashboard-widget-setting .dashboard-widget-setting-actions {
justify-self: end;
flex-shrink: 0;
}
.overview-layout-tile-toolbar {
flex-wrap: wrap;
}
.overview-layout-tile-toolbar .overview-widget-type {
margin: 0;
}
.overview-layout-tile-toolbar .overview-layout-controls {
display: inline-flex;
gap: 3px;
margin-left: auto;
}
.overview-layout-hidden-item>button {
margin-left: auto;
}
.overview-layout-hidden-item>.overview-widget-type {
margin: 0;
}
#panel-overview .overview-inline-toolbar .overview-widget-type {
margin: 0 auto 0 0;
}
#panel-overview .overview-inline-toolbar .overview-inline-hide {
margin-left: 0;
}
.overview-inline-hidden-item>.overview-widget-type {
margin-right: 0;
}
.overview-inline-hidden-item>.overview-inline-restore {
order: 3;
margin-left: auto;
}
.dashboard-widget-list {
display: flex;
flex-wrap: wrap;
gap: 8px;
}
.dashboard-widget-setting {
display: inline-flex;
align-items: center;
gap: 8px;
flex: 1 1 280px;
min-width: min(280px, 100%);
max-width: 100%;
padding: 4px 6px;
}
.dashboard-widget-setting .dashboard-widget-toggle {
width: auto;
flex: 1 1 auto;
overflow: hidden;
min-width: 0;
flex-wrap: nowrap;
}
.dashboard-widget-setting .dashboard-widget-setting-label {
flex: 1 1 auto;
min-width: 0;
}
.dashboard-widget-setting>.overview-widget-type {
flex: none;
margin: 0;
white-space: nowrap;
overflow-wrap: normal;
}
.dashboard-widget-setting>.dashboard-widget-setting-actions {
justify-self: end;
white-space: nowrap;
}
@media(max-width:700px) {
.dashboard-widget-list {
display: grid;
grid-template-columns: minmax(0, 1fr);
}
.dashboard-widget-setting {
display: grid;
grid-template-columns: minmax(0, 1fr) auto;
min-width: 0;
}
}
.appearance-settings-grid.dashboard-appearance-grid {
grid-template-columns: minmax(0, 1fr);
gap: 12px;
}
.appearance-settings-grid.dashboard-appearance-grid>.dashboard-density-setting {
display: grid;
grid-template-columns: minmax(145px, 200px) minmax(180px, 290px) minmax(0, 1fr);
align-items: center;
gap: 12px;
}
.dashboard-density-setting>.fine,
.dashboard-density-setting>select {
min-width: 0;
}
.dashboard-appearance-grid>.dashboard-widget-settings {
grid-column: 1/-1;
gap: 6px;
}
.dashboard-widget-settings-head {
display: flex;
align-items: flex-start;
flex-wrap: wrap;
gap: 8px 14px;
}
.dashboard-widget-settings-intro {
display: grid;
gap: 3px;
min-width: 0;
flex: 1 1 290px;
}
.dashboard-widget-settings-controls {
display: flex;
flex: 0 0 auto;
align-items: center;
flex-wrap: wrap;
justify-content: flex-end;
gap: 6px;
margin-left: auto;
}
.dashboard-widget-settings-controls>.dashboard-widget-scroll-button {
min-width: 30px;
}
.dashboard-appearance-grid .dashboard-widget-list {
display: flex;
flex-wrap: nowrap;
align-items: stretch;
gap: 6px;
max-width: 100%;
min-width: 0;
margin: 0;
padding: 2px 1px 9px;
overflow-x: auto;
overflow-y: hidden;
scrollbar-width: thin;
overscroll-behavior-x: contain;
scroll-snap-type: x proximity;
-webkit-overflow-scrolling: touch;
}
.dashboard-appearance-grid .dashboard-widget-list>.dashboard-widget-setting {
flex: 0 0 226px;
width: 226px;
min-width: 226px;
max-width: 226px;
min-height: 33px;
box-sizing: border-box;
scroll-snap-align: start;
}
.dashboard-appearance-grid .dashboard-widget-list.is-expanded {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(min(225px, 100%), 1fr));
gap: 7px;
overflow: visible;
padding-bottom: 0;
scroll-snap-type: none;
}
.dashboard-appearance-grid .dashboard-widget-list.is-expanded>.dashboard-widget-setting {
width: 100%;
max-width: none;
min-width: 0;
}
#settings-page-appearance .dashboard-widget-setting .overview-widget-type,
.dashboard-appearance-grid .dashboard-widget-list.is-expanded~.dashboard-widget-scroll-hint {
display: none;
}
@media(max-width:760px) {
.appearance-settings-grid.dashboard-appearance-grid>.dashboard-density-setting {
grid-template-columns: minmax(0, 1fr);
gap: 7px;
}
.dashboard-widget-settings-head {
align-items: stretch;
}
.dashboard-widget-settings-controls {
margin-left: 0;
justify-content: flex-start;
}
.dashboard-appearance-grid .dashboard-widget-list>.dashboard-widget-setting {
flex-basis: 210px;
width: 210px;
min-width: 210px;
max-width: 210px;
}
.dashboard-appearance-grid .dashboard-widget-list.is-expanded>.dashboard-widget-setting {
min-width: 0;
max-width: none;
}
}
html[data-corner-style=square] {
--rp-radius-surface: 0px;
--rp-radius-control: 0px;
--rp-progress-radius: 0px;
}
html[data-corner-style=subtle] {
--rp-radius-surface: 5px;
--rp-radius-control: 4px;
--rp-progress-radius: 2px;
}
html[data-corner-style=rounded] {
--rp-radius-surface: 12px;
--rp-radius-control: 8px;
--rp-progress-radius: 4px;
}
html[data-corner-style=extra] {
--rp-radius-surface: 18px;
--rp-radius-control: 12px;
--rp-progress-radius: 999px;
}
html:is([data-corner-style=square], [data-corner-style=subtle], [data-corner-style=rounded], [data-corner-style=extra]) :is(.card, .stat, dialog, .login-card, .appearance-section, .settings-tabs, .dashboard-widget-setting, .overview-layout-tile, .overview-layout-hidden-item, .overview-inline-hidden-item, .overview-inline-hidden, .notice, .toast, .chart-style-choice, .stream-dashboard-card, .pool-card, .vhost-card, .vh-backend-card, .entity, .settings-filter-row, .stream-backend-row, .file-log-advanced-parser, .table-container, .metric-info-popover) {
border-radius: var(--rp-radius-surface) !important;
}
html:is([data-corner-style=square], [data-corner-style=subtle], [data-corner-style=rounded], [data-corner-style=extra]) :is(button:not(.nav):not(.file-log-tab), input:not([type=checkbox]):not([type=radio]):not([type=range]), select, textarea, .pill, .vhost-backend-protocol-badge, .overview-widget-type, .badge, .quiet, .outline, .primary, .code, .command, .dashboard-widget-toggle, .settings-tabs button, .overview-inline-hidden-toggle, .overview-inline-restore) {
border-radius: var(--rp-radius-control) !important;
}
.acl-profile-rule {
grid-template-columns: minmax(100px, .6fr) minmax(105px, .6fr) minmax(175px, 1.5fr) auto;
}
@media(max-width:640px) {
.acl-profile-rule {
grid-template-columns: 1fr;
}
}
.vhost-backend-protocol-badge {
display: inline-flex;
gap: 4px;
align-items: baseline;
max-width: 100%;
min-width: 0;
border: 1px solid var(--pill-line);
border-radius: 4px;
background: var(--panel2);
color: var(--muted);
padding: 3px 7px;
font: 10px var(--mono);
overflow-wrap: anywhere;
}
.vhost-backend-protocol-badge[data-observed=true] {
color: var(--green);
border-color: var(--pill-live-line);
}
@container overview-canvas (max-width: 700px) {
#panel-overview .network-interface-charts {
max-height: none;
overflow: visible;
overscroll-behavior: auto;
}
}
#panel-overview .stat-meter>.overview-meter {
position: relative;
display: block;
width: 100%;
height: 10px;
margin: 9px 0 8px;
overflow: hidden;
border-radius: var(--rp-progress-radius);
background: var(--rp-progress-track);
}
#panel-overview .overview-meter-fill {
display: block;
width: 0;
height: 100%;
border-radius: inherit;
background: var(--rp-progress-fill);
transition: width .18s;
}
#panel-overview .system-card .system-memory-meter {
display: block;
width: 100%;
height: 5px;
margin: 6px 0 9px;
overflow: hidden;
background: var(--rp-progress-track);
border-radius: var(--rp-progress-radius);
}
#panel-overview .stat-meter>small {
display: block;
overflow-wrap: anywhere;
}
#panel-overview .stat-donut .overview-donut-row {
display: flex;
gap: 10px;
align-items: center;
min-width: 0;
margin: 4px 0 2px;
}
#panel-overview .stat-donut .overview-donut-svg {
display: block;
width: 62px;
height: 62px;
flex: 0 0 62px;
overflow: visible;
filter: var(--chart-svg-filter);
}
#panel-overview .overview-donut-svg circle {
fill: none;
stroke-width: 9;
transform: rotate(-90deg);
transform-origin: 32px 32px;
}
#panel-overview .overview-donut-track {
stroke: var(--line);
}
#panel-overview .overview-donut-hit {
stroke: var(--chart-accent);
}
#panel-overview .overview-donut-miss {
stroke: var(--chart-secondary);
}
#panel-overview .stat-donut .overview-donut-legend {
display: flex;
flex-direction: column;
gap: 6px;
min-width: 0;
}
#panel-overview .overview-donut-legend>span {
display: flex;
align-items: center;
gap: 5px;
flex-wrap: wrap;
line-height: 1.25;
overflow-wrap: anywhere;
}
#panel-overview .overview-donut-legend i {
width: 8px;
height: 8px;
flex: 0 0 8px;
border-radius: 50%;
background: var(--chart-accent);
}
#panel-overview .overview-donut-miss-key i {
background: var(--chart-secondary);
}
#panel-overview .overview-donut-legend b {
color: var(--text);
font-family: var(--mono);
font-weight: 500;
}
#panel-overview .overview-wide-series-3 {
stroke: var(--chart-quaternary);
}
#panel-overview .overview-wide-legend .overview-wide-key-3 {
background: var(--chart-quaternary);
}
@container overview-canvas (max-width: 700px) {
#panel-overview .stat-donut .overview-donut-row {
gap: 6px;
}
#panel-overview .stat-donut .overview-donut-svg {
width: 48px;
height: 48px;
flex-basis: 48px;
}
#panel-overview .stat-donut .overview-donut-legend {
gap: 3px;
}
}
@media(prefers-reduced-motion:reduce) {
.app-startup-spinner {
animation: none
}
* {
scroll-behavior: auto !important
}
#panel-overview .overview-meter-fill {
transition: none;
}
}
.page-intro .page-intro-meta-row {
display: flex;
align-items: center;
justify-content: space-between;
flex-wrap: wrap;
gap: 6px 16px;
min-width: 0;
margin-bottom: 4px;
}
.page-intro .page-intro-meta-row .eyebrow {
margin-bottom: 0;
flex: 0 0 auto;
}
.page-intro .overview-samples-toolbar {
display: flex;
align-items: center;
justify-content: flex-end;
gap: 6px 12px;
flex-wrap: wrap;
max-width: 100%;
margin: 0 0 0 auto;
}
.page-intro .overview-samples-toolbar .function-live-chart-samples select {
min-width: 100px;
}
.page-intro .overview-samples-toolbar button {
width: auto;
flex: none;
min-height: 28px;
padding: 5px 10px;
white-space: nowrap;
}
.page-intro .overview-samples-toolbar .fine {
font-size: 10px;
color: var(--muted);
white-space: nowrap;
}
@media(max-width:700px) {
.page-intro .overview-samples-toolbar {
margin-left: 0;
justify-content: flex-start;
}
}
#panel-overview .stat-donut .overview-donut-info {
display: flex;
flex-direction: column;
justify-content: center;
gap: 4px;
min-width: 0;
flex: 1 1 0;
}
#panel-overview .stat-donut .overview-donut-info>strong {
display: block;
line-height: 1.1;
margin: 0;
}
#panel-overview .stat-donut .overview-donut-info>.overview-donut-legend {
gap: 2px;
}
#panel-overview .www-ring-legend {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
column-gap: 7px;
row-gap: 5px;
}
#panel-overview .www-ring-legend span {
white-space: nowrap;
font-size: 10px;
}
#panel-overview .www-ring-arc {
stroke-width: 9;
}
#panel-overview .www-ring-0,
.www-dot-0 {
stroke: var(--chart-accent);
}
#panel-overview .www-ring-1,
.www-dot-1 {
stroke: var(--chart-secondary);
}
#panel-overview .www-ring-2,
.www-dot-2 {
stroke: var(--chart-tertiary);
}
#panel-overview .www-ring-3,
.www-dot-3 {
stroke: var(--chart-quaternary);
}
#panel-overview .www-ring-legend i {
background: var(--chart-accent);
}
#panel-overview .www-ring-legend .www-dot-1 {
background: var(--chart-secondary);
}
#panel-overview .www-ring-legend .www-dot-2 {
background: var(--chart-tertiary);
}
#panel-overview .www-ring-legend .www-dot-3 {
background: var(--chart-quaternary);
}
#panel-overview .www-segmented {
display: flex;
width: 100%;
height: 10px;
margin: 9px 0 8px;
background: var(--rp-progress-track);
border-radius: var(--rp-progress-radius);
overflow: hidden;
}
#panel-overview .www-segmented span {
display: block;
height: 100%;
transition: width .18s;
}
#panel-overview .www-segment-0 {
background: var(--chart-accent);
}
#panel-overview .www-segment-1 {
background: var(--chart-secondary);
}
#panel-overview .www-segment-2 {
background: var(--chart-tertiary);
}
#panel-overview .www-segment-3 {
background: var(--chart-quaternary);
}
#panel-overview .www-segment-4 {
background: var(--muted);
}
#panel-overview .www-method-legend {
overflow-wrap: anywhere;
}
#panel-overview .www-top-bars {
display: grid;
gap: 8px;
margin-top: 12px;
min-height: 90px;
}
#panel-overview .www-top-row {
display: grid;
grid-template-columns: minmax(60px, 1fr) minmax(30px, 2fr) auto;
gap: 8px;
align-items: center;
min-width: 0;
font: 11px var(--mono);
}
#panel-overview .www-top-row>span {
overflow: hidden;
text-overflow: ellipsis;
}
#panel-overview .www-top-meter {
height: 7px;
background: var(--rp-progress-track);
border-radius: var(--rp-progress-radius);
overflow: hidden;
}
#panel-overview .www-top-meter span {
display: block;
background: var(--rp-progress-fill);
border-radius: inherit;
height: 100%;
}
#panel-overview .www-top-row b {
font-weight: 500;
color: var(--text);
}
/* Web Services reuse the same full-width live tiles and chart as Vhosts. */
#panel-web-server .www-service-panel {
min-width: 0;
margin-top: 10px;
}
#panel-web-server .www-service-heading {
margin: 0;
font-size: 11px;
}
#panel-web-server .www-service-split {
color: var(--muted);
font: 11px var(--mono);
overflow-wrap: anywhere;
margin: 4px 10px 8px;
}
@media(prefers-reduced-motion:reduce) {
#panel-overview .www-segmented span {
transition: none;
}
}
#panel-overview .dashboard-overview-grid.is-aligned[data-overview-layout-mode=custom] {
grid-auto-flow: row dense;
}
#panel-overview .dashboard-overview-grid.is-aligned>[data-dashboard-widget][data-dashboard-span="2"] {
grid-column: auto/span 2;
}
#panel-overview .dashboard-overview-grid.is-aligned>[data-dashboard-widget][data-dashboard-span="3"] {
grid-column: auto/span 3;
}
#panel-overview .dashboard-overview-grid.is-aligned>[data-dashboard-widget][data-dashboard-span="4"] {
grid-column: auto/span 4;
}
#panel-overview .dashboard-overview-grid.is-aligned>[data-dashboard-widget][data-dashboard-span="6"] {
grid-column: auto/span 6;
}
#panel-overview .dashboard-overview-grid.is-aligned>[data-dashboard-widget][data-dashboard-span="12"] {
grid-column: 1/-1;
}
#panel-overview .dashboard-overview-grid.is-aligned[data-overview-layout-mode=custom]>[data-dashboard-widget].overview-row-start {
grid-column-start: auto;
}
#panel-overview .dashboard-overview-grid.is-aligned[data-overview-layout-mode=custom] .overview-wide-legend,
#panel-overview .dashboard-overview-grid.is-aligned[data-overview-layout-mode=custom] .stat-chart-legend {
flex-wrap: wrap;
white-space: normal;
}
#panel-overview .overview-inline-width,
.overview-layout-width-value {
display: inline-flex;
align-items: center;
justify-content: center;
white-space: nowrap;
font: 11px var(--mono);
color: var(--text);
}
#panel-overview .overview-inline-width {
gap: 3px;
flex: 0 0 auto;
}
#panel-overview .overview-inline-width-value {
min-width: 31px;
text-align: center;
}
#panel-overview .dashboard-overview-grid.is-unlocked>[data-dashboard-widget] {
padding-top: 101px;
}
#panel-overview .overview-inline-toolbar .overview-widget-type {
margin-right: auto;
}
.overview-layout-tile-toolbar .overview-layout-width-value {
flex: 0 0 auto;
min-width: 30px;
text-align: center;
}
.overview-layout-grid {
grid-template-columns: repeat(3, minmax(0, 1fr));
grid-auto-flow: row;
}
.overview-layout-grid>.overview-layout-tile.is-panel {
grid-column: auto;
}
.overview-layout-tile {
min-width: 0;
}
.overview-layout-tile-toolbar {
display: grid;
grid-template-columns: max-content minmax(0, 1fr);
gap: 5px 6px;
align-items: center;
min-width: 0;
}
.overview-layout-tile-toolbar .overview-widget-type {
min-width: 0;
max-width: 100%;
grid-column: 2;
}
.overview-layout-tile-toolbar .overview-layout-controls {
grid-column: 1/-1;
display: flex;
justify-content: space-between;
align-items: center;
flex-wrap: wrap;
gap: 4px 8px;
min-width: 0;
width: 100%;
margin: 0;
}
.overview-layout-order-actions,
.overview-layout-size-actions {
display: inline-flex;
flex-wrap: wrap;
align-items: center;
gap: 3px;
min-width: 0;
}
.overview-layout-tile-toolbar .overview-layout-hide {
margin-inline-start: 0;
white-space: normal;
overflow-wrap: anywhere;
}
.overview-layout-grid .overview-layout-card-preview,
.overview-layout-grid .overview-layout-panel-preview {
min-width: 0;
max-width: 100%;
}
.overview-layout-dialog .overview-layout-footer,
.overview-layout-dialog .overview-layout-hidden-item {
flex-wrap: wrap;
}
.overview-layout-dialog .overview-layout-hidden-item>span:first-child {
flex: 1 1 125px;
}
.overview-layout-dialog .overview-layout-hidden-item>button {
flex: 0 1 auto;
max-width: 100%;
white-space: normal;
overflow-wrap: anywhere;
}
@container overview-canvas (max-width: 1080px) {
#panel-overview .dashboard-overview-grid.is-aligned>[data-dashboard-widget][data-dashboard-span="2"] {
grid-column: auto/span 2;
}
#panel-overview .dashboard-overview-grid.is-aligned>[data-dashboard-widget][data-dashboard-span="3"] {
grid-column: auto/span 3;
}
#panel-overview .dashboard-overview-grid.is-aligned>[data-dashboard-widget][data-dashboard-span="4"] {
grid-column: auto/span 4;
}
#panel-overview .dashboard-overview-grid.is-aligned>[data-dashboard-widget][data-dashboard-span="12"],
#panel-overview .dashboard-overview-grid.is-aligned>[data-dashboard-widget][data-dashboard-span="6"] {
grid-column: 1/-1;
}
}
@container overview-canvas (max-width: 700px) {
#panel-overview .dashboard-overview-grid.is-aligned>[data-dashboard-widget][data-dashboard-span="2"].stat {
grid-column: auto/span 1;
}
#panel-overview .dashboard-overview-grid.is-aligned>[data-dashboard-widget][data-dashboard-span="12"],
#panel-overview .dashboard-overview-grid.is-aligned>[data-dashboard-widget][data-dashboard-span="2"]:not(.stat),
#panel-overview .dashboard-overview-grid.is-aligned>[data-dashboard-widget][data-dashboard-span="3"],
#panel-overview .dashboard-overview-grid.is-aligned>[data-dashboard-widget][data-dashboard-span="4"],
#panel-overview .dashboard-overview-grid.is-aligned>[data-dashboard-widget][data-dashboard-span="6"] {
grid-column: 1/-1;
}
}
@media(max-width:900px) {
.overview-layout-grid {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
}
@media(max-width:620px) {
.overview-layout-grid {
grid-template-columns: minmax(0, 1fr);
}
}
@media(max-width:550px) {
#panel-overview .dashboard-overview-grid.is-unlocked>[data-dashboard-widget] {
padding-top: 135px;
}
}