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