2026-04-23 11:59:58 +08:00

4505 lines
95 KiB
CSS

:root {
--bg: oklch(97.2% 0.004 228);
--bg-soft: oklch(99.1% 0.004 228);
--panel: oklch(99.7% 0.002 228 / 0.97);
--panel-muted: oklch(98.1% 0.005 228 / 0.98);
--panel-strong: oklch(100% 0 0 / 0.99);
--panel-tint: color-mix(in oklab, var(--panel-strong) 94%, var(--accent-soft));
--line: oklch(87% 0.014 232 / 0.96);
--line-strong: oklch(78% 0.022 234 / 0.98);
--text: oklch(29% 0.018 234);
--muted: oklch(53% 0.016 234);
--accent: oklch(51% 0.078 244);
--accent-soft: oklch(94% 0.018 244);
--ok: oklch(55% 0.12 154);
--ok-soft: oklch(95% 0.028 154);
--warn: oklch(68% 0.14 82);
--warn-soft: oklch(96% 0.034 82);
--bad: oklch(58% 0.15 32);
--bad-soft: oklch(95% 0.034 32);
--shadow: 0 14px 30px rgba(33, 46, 76, 0.06);
--shadow-soft: 0 10px 22px rgba(33, 46, 76, 0.05);
--shadow-lift: 0 18px 36px rgba(33, 46, 76, 0.1);
--group-gateway: oklch(54% 0.075 238);
--group-app: oklch(55% 0.085 176);
--group-pay: oklch(67% 0.13 82);
--group-infra: oklch(55% 0.05 204);
}
* {
box-sizing: border-box;
}
[v-cloak] {
display: none;
}
html,
body {
margin: 0;
min-height: 100%;
}
body {
position: relative;
color: var(--text);
font-family: "IBM Plex Sans", "PingFang SC", "Noto Sans SC", sans-serif;
background:
radial-gradient(circle at top right, color-mix(in oklab, var(--accent) 8%, transparent), transparent 30%),
linear-gradient(180deg, var(--bg-soft) 0%, var(--bg) 100%);
}
body::before {
content: "";
position: fixed;
inset: 0;
pointer-events: none;
background-image:
linear-gradient(color-mix(in oklab, var(--accent) 9%, transparent) 1px, transparent 1px),
linear-gradient(90deg, color-mix(in oklab, var(--accent) 9%, transparent) 1px, transparent 1px);
background-size: 32px 32px;
opacity: 0.11;
}
.shell {
position: relative;
z-index: 1;
max-width: 1940px;
margin: 0 auto;
padding: 16px 20px 36px;
}
.boot-indicator {
position: fixed;
left: 50%;
top: 22px;
z-index: 60;
display: inline-flex;
align-items: center;
gap: 10px;
min-height: 40px;
padding: 0 14px;
transform: translateX(-50%);
border: 1px solid color-mix(in oklab, var(--line) 90%, var(--panel-strong));
border-radius: 14px;
background: linear-gradient(180deg, color-mix(in oklab, var(--panel-strong) 96%, var(--accent-soft)) 0%, var(--panel) 100%);
box-shadow: 0 16px 32px rgba(33, 46, 76, 0.1);
color: var(--muted);
font-size: 12px;
font-weight: 700;
letter-spacing: 0.04em;
}
.boot-indicator::before {
content: "";
width: 10px;
height: 10px;
border-radius: 999px;
background: color-mix(in oklab, var(--accent) 66%, var(--ok));
box-shadow: 0 0 0 5px color-mix(in oklab, var(--accent-soft) 72%, transparent);
animation: boot-pulse 1.35s ease-in-out infinite;
}
@keyframes boot-pulse {
0%,
100% {
transform: scale(0.9);
opacity: 0.82;
}
50% {
transform: scale(1.08);
opacity: 1;
}
}
.loading-stage {
display: grid;
gap: 14px;
margin-top: 10px;
min-height: 420px;
padding: 16px;
}
.loading-stage-head,
.loading-panels,
.loading-stack {
display: grid;
gap: 12px;
}
.loading-chip-row {
display: flex;
gap: 10px;
flex-wrap: wrap;
}
.loading-chip,
.loading-pill,
.loading-band,
.loading-line,
.loading-table-row,
.loading-block {
position: relative;
overflow: hidden;
border-radius: 12px;
background: linear-gradient(180deg, color-mix(in oklab, var(--panel-muted) 94%, var(--panel-strong)) 0%, color-mix(in oklab, var(--panel-muted) 90%, var(--panel-strong)) 100%);
}
.loading-chip::after,
.loading-pill::after,
.loading-band::after,
.loading-line::after,
.loading-table-row::after,
.loading-block::after {
content: "";
position: absolute;
inset: 0;
background: linear-gradient(90deg, transparent 0%, color-mix(in oklab, var(--panel-strong) 54%, transparent) 50%, transparent 100%);
transform: translateX(-100%);
animation: skeleton-slide 1.8s ease-in-out infinite;
}
.loading-chip {
width: 82px;
height: 32px;
}
.loading-line {
height: 12px;
}
.loading-line-short {
width: min(100%, 220px);
}
.loading-line-medium {
width: min(100%, 160px);
}
.loading-band-grid {
display: grid;
grid-template-columns: repeat(5, minmax(0, 1fr));
gap: 8px;
}
.loading-band {
height: 64px;
border-radius: 16px;
}
.loading-panels {
grid-template-columns: minmax(0, 1.35fr) minmax(260px, 0.65fr);
align-items: start;
}
.loading-card {
display: grid;
gap: 12px;
min-height: 240px;
padding: 14px;
border: 1px solid var(--line);
border-radius: 18px;
background: linear-gradient(180deg, color-mix(in oklab, var(--panel-strong) 96%, var(--accent-soft)) 0%, var(--panel) 100%);
}
.loading-card-wide {
min-height: 340px;
}
.loading-card-head {
display: flex;
justify-content: space-between;
gap: 12px;
align-items: center;
}
.loading-pill {
width: 88px;
height: 30px;
}
.loading-table {
display: grid;
gap: 8px;
}
.loading-table-row {
height: 42px;
border-radius: 14px;
}
.loading-block {
height: 56px;
}
@keyframes skeleton-slide {
0% {
transform: translateX(-100%);
}
100% {
transform: translateX(100%);
}
}
body.auth-page {
display: block;
padding: 28px 16px;
}
.auth-shell {
position: relative;
z-index: 1;
width: min(100%, 460px);
margin: min(12vh, 120px) auto 0;
}
.auth-panel {
border: 1px solid var(--line);
border-radius: 22px;
background:
linear-gradient(180deg, color-mix(in oklab, var(--panel-strong) 92%, var(--accent-soft)) 0%, var(--panel) 100%);
box-shadow: var(--shadow);
padding: 22px;
}
.auth-panel-head {
display: flex;
flex-direction: column;
gap: 12px;
}
.auth-title {
margin: 0;
font-size: clamp(24px, 4vw, 30px);
font-weight: 700;
letter-spacing: 0.02em;
}
.auth-form {
display: grid;
gap: 14px;
margin-top: 18px;
}
.auth-field {
display: grid;
gap: 7px;
color: var(--muted);
font-size: 12px;
font-weight: 600;
}
.auth-input {
min-height: 42px;
padding: 0 12px;
border: 1px solid var(--line-strong);
border-radius: 14px;
background: color-mix(in oklab, var(--panel-muted) 88%, var(--bg-soft));
color: var(--text);
font: inherit;
}
.auth-input:focus-visible {
outline: 0;
border-color: color-mix(in oklab, var(--accent) 56%, var(--line-strong));
box-shadow: 0 0 0 3px color-mix(in oklab, var(--accent-soft) 84%, transparent);
}
.auth-submit {
width: 100%;
min-height: 40px;
}
.auth-error {
margin: 0;
padding: 10px 12px;
border: 1px solid color-mix(in oklab, var(--bad) 32%, var(--line));
border-radius: 14px;
background: color-mix(in oklab, var(--bad-soft) 56%, var(--panel-strong));
color: var(--bad);
font-size: 12px;
}
.entry-panel {
display: grid;
gap: 18px;
}
.entry-grid,
.entry-stack {
display: grid;
gap: 12px;
}
.entry-grid {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
.entry-card {
display: grid;
gap: 8px;
min-height: 132px;
padding: 16px;
border: 1px solid var(--line-strong);
border-radius: 18px;
background: color-mix(in oklab, var(--panel-strong) 88%, var(--accent-soft));
color: inherit;
text-decoration: none;
transition: transform 180ms ease, border-color 180ms ease, background 180ms ease, box-shadow 180ms ease;
}
.entry-card:hover {
transform: translateY(-1px);
border-color: color-mix(in oklab, var(--accent) 42%, var(--line-strong));
background: color-mix(in oklab, var(--accent-soft) 74%, var(--panel-strong));
}
.entry-card strong {
font-family: "Space Grotesk", "IBM Plex Sans", sans-serif;
font-size: 1.1rem;
letter-spacing: -0.03em;
}
.entry-card span {
color: var(--muted);
font-size: 12px;
line-height: 1.5;
}
.entry-card-static {
min-height: 0;
}
.entry-actions,
.entry-meta {
display: flex;
gap: 10px;
align-items: center;
flex-wrap: wrap;
}
.entry-actions {
justify-content: flex-end;
}
.entry-link {
text-decoration: none;
}
.topbar,
.control-bar,
.panel {
border: 1px solid var(--line);
border-radius: 18px;
background: linear-gradient(180deg, var(--panel-tint) 0%, var(--panel) 100%);
box-shadow: var(--shadow);
}
.topbar {
position: sticky;
top: 10px;
z-index: 20;
display: grid;
grid-template-columns: minmax(200px, 260px) minmax(0, 1fr) auto;
gap: 14px;
align-items: center;
min-height: 56px;
padding: 9px 14px;
backdrop-filter: blur(10px);
box-shadow:
0 16px 32px rgba(33, 46, 76, 0.08),
inset 0 1px 0 color-mix(in oklab, var(--panel-strong) 76%, transparent);
}
.topbar::before,
.control-bar::before {
content: "";
position: absolute;
left: 14px;
right: 14px;
top: 0;
height: 3px;
border-radius: 999px;
background: linear-gradient(90deg, color-mix(in oklab, var(--accent) 40%, var(--group-app)) 0%, transparent 76%);
opacity: 0.8;
}
.brand-stack {
display: flex;
flex-direction: column;
gap: 4px;
}
.brand-row {
display: flex;
align-items: center;
gap: 10px;
flex-wrap: wrap;
}
.brand-mark {
margin: 0;
color: var(--muted);
font-size: 13px;
font-weight: 700;
letter-spacing: 0.16em;
text-transform: uppercase;
}
.env-pill {
display: inline-flex;
align-items: center;
min-height: 24px;
padding: 0 9px;
border: 1px solid color-mix(in oklab, var(--accent) 34%, var(--line-strong));
border-radius: 999px;
background: var(--accent-soft);
color: var(--accent);
font-size: 11px;
font-weight: 700;
letter-spacing: 0.08em;
}
.sync-note {
margin: 0;
color: var(--muted);
font-size: 11px;
}
.topbar-nav {
display: flex;
gap: 10px;
align-items: center;
flex-wrap: wrap;
padding: 4px;
border: 1px solid color-mix(in oklab, var(--line) 90%, var(--panel-strong));
border-radius: 16px;
background: linear-gradient(180deg, color-mix(in oklab, var(--panel-muted) 94%, var(--panel-strong)) 0%, color-mix(in oklab, var(--panel-strong) 96%, var(--panel-muted)) 100%);
box-shadow: inset 0 1px 0 color-mix(in oklab, var(--panel-strong) 72%, transparent);
}
.nav-chip,
.filter-chip,
.refresh,
.interval-select,
.search,
.config-textarea {
border: 1px solid var(--line-strong);
color: var(--text);
font: inherit;
}
.nav-chip,
.filter-chip,
.refresh {
display: inline-flex;
align-items: center;
justify-content: center;
min-height: 34px;
padding: 0 12px;
border-radius: 11px;
background: linear-gradient(180deg, color-mix(in oklab, var(--panel-strong) 98%, var(--panel-muted)) 0%, var(--panel-strong) 100%);
cursor: pointer;
font-size: 11px;
font-weight: 600;
transition: transform 180ms ease, border-color 180ms ease, background 180ms ease, box-shadow 180ms ease;
}
.nav-chip:hover,
.filter-chip:hover,
.refresh:hover {
transform: translateY(-1px);
}
.nav-chip.active,
.filter-chip.active {
border-color: color-mix(in oklab, var(--accent) 46%, var(--line-strong));
background: linear-gradient(180deg, color-mix(in oklab, var(--accent-soft) 78%, var(--panel-strong)) 0%, color-mix(in oklab, var(--accent-soft) 56%, var(--panel-strong)) 100%);
color: var(--accent);
box-shadow: inset 0 0 0 1px color-mix(in oklab, var(--accent) 14%, transparent);
}
.topbar-status,
.control-group,
.control-group-spread,
.density-switch,
.panel-meta,
.action-group,
.host-tags,
.restart-pills {
display: flex;
gap: 10px;
align-items: center;
flex-wrap: wrap;
}
.topbar-status {
justify-content: flex-end;
padding: 4px;
border: 1px solid color-mix(in oklab, var(--line) 90%, var(--panel-strong));
border-radius: 16px;
background: linear-gradient(180deg, color-mix(in oklab, var(--panel-muted) 94%, var(--panel-strong)) 0%, color-mix(in oklab, var(--panel-strong) 96%, var(--panel-muted)) 100%);
box-shadow: inset 0 1px 0 color-mix(in oklab, var(--panel-strong) 72%, transparent);
}
.control-bar {
position: sticky;
top: 72px;
z-index: 18;
display: flex;
justify-content: space-between;
gap: 10px;
margin-top: 8px;
padding: 8px 14px;
backdrop-filter: blur(8px);
box-shadow:
0 12px 26px rgba(33, 46, 76, 0.06),
inset 0 1px 0 color-mix(in oklab, var(--panel-strong) 72%, transparent);
}
.task-control-bar {
gap: 12px;
align-items: center;
}
.release-section-nav {
flex: 1 1 auto;
min-width: 0;
}
.taskbar-context {
display: flex;
flex-direction: column;
gap: 3px;
min-width: 160px;
}
.taskbar-context strong {
color: color-mix(in oklab, var(--text) 88%, var(--accent));
font-size: 11px;
font-weight: 700;
letter-spacing: 0.1em;
text-transform: uppercase;
}
.taskbar-context span {
color: var(--muted);
font-size: 10px;
letter-spacing: 0.09em;
text-transform: uppercase;
}
.taskbar-inline {
display: flex;
gap: 8px;
align-items: center;
flex-wrap: wrap;
}
.section-link {
display: inline-flex;
align-items: center;
min-height: 28px;
padding: 0 10px;
border: 1px solid transparent;
border-radius: 10px;
background: transparent;
color: var(--muted);
font: inherit;
font-size: 11px;
font-weight: 700;
letter-spacing: 0.06em;
cursor: pointer;
transition: color 180ms ease, opacity 180ms ease, border-color 180ms ease, background 180ms ease;
}
.section-link:hover {
color: var(--text);
border-color: color-mix(in oklab, var(--accent) 18%, var(--line));
background: color-mix(in oklab, var(--accent-soft) 22%, var(--panel-strong));
}
.section-link + .section-link {
margin-left: 0;
}
.release-kind-select {
min-width: 98px;
}
.control-group-spread {
justify-content: flex-end;
flex: 1 1 auto;
}
.search {
min-width: 320px;
min-height: 34px;
padding: 0 11px;
border-radius: 12px;
background: color-mix(in oklab, var(--panel-muted) 88%, var(--bg-soft));
}
.search::placeholder {
color: var(--muted);
opacity: 0.88;
}
.interval-field {
display: inline-flex;
align-items: center;
gap: 8px;
color: var(--muted);
font-size: 12px;
}
.interval-select {
min-width: 82px;
min-height: 32px;
padding: 0 11px;
border-radius: 12px;
background: var(--panel-strong);
}
.refresh {
border-color: color-mix(in oklab, var(--accent) 30%, var(--line-strong));
background: linear-gradient(180deg, color-mix(in oklab, var(--accent-soft) 62%, var(--panel-strong)) 0%, color-mix(in oklab, var(--accent-soft) 34%, var(--panel-strong)) 100%);
color: color-mix(in oklab, var(--accent) 54%, var(--text));
box-shadow:
inset 0 1px 0 color-mix(in oklab, var(--panel-strong) 76%, transparent),
0 8px 18px rgba(49, 82, 130, 0.08);
}
.refresh.ghost {
border-color: color-mix(in oklab, var(--line) 94%, var(--panel-strong));
background: linear-gradient(180deg, color-mix(in oklab, var(--panel-muted) 98%, var(--panel-strong)) 0%, var(--panel-muted) 100%);
color: var(--muted);
box-shadow: none;
}
.refresh:not(:disabled):hover,
.filter-chip:not(:disabled):hover,
.nav-chip:not(:disabled):hover {
border-color: color-mix(in oklab, var(--accent) 28%, var(--line-strong));
box-shadow: 0 6px 16px rgba(35, 57, 92, 0.08);
}
.refresh.danger {
color: var(--bad);
border-color: color-mix(in oklab, var(--bad) 38%, var(--line-strong));
background: linear-gradient(180deg, color-mix(in oklab, var(--bad-soft) 58%, var(--panel-strong)) 0%, color-mix(in oklab, var(--bad-soft) 40%, var(--panel-strong)) 100%);
box-shadow:
inset 0 1px 0 color-mix(in oklab, var(--panel-strong) 72%, transparent),
0 8px 18px rgba(166, 76, 55, 0.1);
}
.refresh:disabled,
.filter-chip:disabled,
.nav-chip:disabled {
opacity: 0.56;
cursor: not-allowed;
transform: none;
}
.nav-chip:focus-visible,
.filter-chip:focus-visible,
.refresh:focus-visible,
.search:focus-visible,
.interval-select:focus-visible,
.section-link:focus-visible,
.detail-log-input:focus-visible,
.config-item:focus-visible,
.config-textarea:focus-visible {
outline: 0;
border-color: color-mix(in oklab, var(--accent) 56%, var(--line-strong));
box-shadow: 0 0 0 3px color-mix(in oklab, var(--accent-soft) 84%, transparent);
}
.toolbar-error {
margin: 12px 0 0;
color: var(--bad);
font-size: 12px;
}
.panel {
position: relative;
padding: 14px;
overflow: hidden;
box-shadow:
var(--shadow),
inset 0 1px 0 color-mix(in oklab, var(--panel-strong) 72%, transparent);
}
.matrix-panel,
.hosts-panel,
.bridge-panel,
.summary-strip,
.overview-calm-strip {
position: relative;
}
.matrix-panel {
background:
linear-gradient(180deg, color-mix(in oklab, var(--accent-soft) 22%, var(--panel-strong)) 0%, var(--panel) 100%);
}
.hosts-panel {
background:
linear-gradient(180deg, color-mix(in oklab, var(--panel-strong) 95%, var(--ok-soft)) 0%, var(--panel) 100%);
}
.matrix-panel::before,
.hosts-panel::before {
content: "";
position: absolute;
left: 14px;
right: 14px;
top: 0;
height: 3px;
border-radius: 999px;
background: linear-gradient(90deg, color-mix(in oklab, var(--accent) 40%, var(--ok)) 0%, transparent 65%);
opacity: 0.7;
}
.summary-strip {
margin-top: 8px;
padding: 8px 10px;
background:
linear-gradient(180deg, color-mix(in oklab, var(--panel-strong) 95%, var(--accent-soft)) 0%, var(--panel) 100%);
}
.overview-calm-strip {
display: grid;
gap: 10px;
margin-top: 8px;
padding: 10px 12px;
}
.overview-calm-head {
display: flex;
justify-content: space-between;
align-items: center;
gap: 10px;
}
.overview-calm-meta {
color: var(--muted);
font-size: 10px;
font-weight: 700;
letter-spacing: 0.08em;
text-transform: uppercase;
}
.overview-calm-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(170px, 1fr));
gap: 10px;
}
.overview-calm-card,
.overview-side-card {
display: grid;
gap: 5px;
min-height: 70px;
padding: 11px 12px;
border: 1px solid var(--line);
border-radius: 14px;
background:
linear-gradient(180deg, color-mix(in oklab, var(--panel-muted) 95%, var(--panel-strong)) 0%, var(--panel-muted) 100%);
box-shadow: inset 0 1px 0 color-mix(in oklab, var(--panel-strong) 74%, transparent);
transition: border-color 180ms ease, background 180ms ease, box-shadow 180ms ease;
}
.overview-side-card {
position: relative;
overflow: hidden;
}
.overview-side-card::before,
.infra-mini-card::before {
content: "";
position: absolute;
left: 0;
right: 0;
top: 0;
height: 3px;
background: linear-gradient(90deg, color-mix(in oklab, var(--accent) 44%, var(--group-app)) 0%, transparent 78%);
opacity: 0.76;
}
.overview-side-card:hover,
.infra-mini-card:hover {
border-color: color-mix(in oklab, var(--accent) 20%, var(--line));
box-shadow: var(--shadow-soft), inset 0 1px 0 color-mix(in oklab, var(--panel-strong) 74%, transparent);
}
.overview-calm-card small,
.overview-side-card small,
.release-service-metric small {
color: var(--muted);
font-size: 10px;
font-weight: 700;
letter-spacing: 0.06em;
text-transform: uppercase;
}
.overview-calm-card strong,
.overview-side-card strong {
font-size: 15px;
line-height: 1.2;
}
.overview-calm-card span,
.overview-side-card span {
color: var(--muted);
font-size: 11px;
line-height: 1.35;
}
.overview-calm-card.tone-ok,
.overview-side-card.tone-ok {
border-color: color-mix(in oklab, var(--ok) 22%, var(--line));
background: linear-gradient(180deg, color-mix(in oklab, var(--ok-soft) 40%, var(--panel-strong)) 0%, color-mix(in oklab, var(--ok-soft) 68%, var(--panel-muted)) 100%);
}
.summary-cards {
display: flex;
flex-wrap: wrap;
gap: 0;
}
.summary-tile,
.summary-card {
min-height: 54px;
padding: 8px 10px;
border: 1px solid var(--line);
border-radius: 12px;
background: var(--panel-strong);
}
.summary-tile {
display: inline-flex;
align-items: center;
gap: 8px;
min-height: 44px;
}
.summary-strip-label {
color: var(--muted);
font-size: 10px;
font-weight: 700;
letter-spacing: 0.08em;
text-transform: uppercase;
}
.summary-tile strong,
.summary-card strong {
font-family: "Space Grotesk", "IBM Plex Sans", sans-serif;
font-size: clamp(0.98rem, 1.3vw, 1.18rem);
line-height: 1;
letter-spacing: -0.04em;
}
.summary-tile small {
color: var(--muted);
font-size: 10px;
}
.status-band-list {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(176px, 1fr));
gap: 1px;
align-items: stretch;
border: 1px solid var(--line);
border-radius: 14px;
overflow: hidden;
background: color-mix(in oklab, var(--line) 84%, var(--panel));
box-shadow: inset 0 1px 0 color-mix(in oklab, var(--panel-strong) 74%, transparent), var(--shadow-soft);
}
.status-band-item {
position: relative;
display: grid;
align-content: center;
justify-items: start;
gap: 3px;
min-height: 50px;
padding: 10px 14px;
border: 0;
border-radius: 0;
background:
linear-gradient(180deg, color-mix(in oklab, var(--panel-strong) 94%, var(--panel-muted)) 0%, var(--panel-strong) 100%);
box-shadow: inset 0 1px 0 color-mix(in oklab, var(--panel-strong) 72%, transparent);
}
.status-band-item::before {
content: "";
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 2px;
background: color-mix(in oklab, currentColor 46%, transparent);
opacity: 0.72;
}
.status-band-item.tone-ok,
.status-band-item.tone-warn,
.status-band-item.tone-bad {
border: 0;
}
.status-band-item.tone-ok {
background:
linear-gradient(180deg, color-mix(in oklab, var(--ok-soft) 52%, var(--panel-strong)) 0%, color-mix(in oklab, var(--ok-soft) 74%, var(--panel-muted)) 100%);
}
.status-band-item.tone-warn {
background:
linear-gradient(180deg, color-mix(in oklab, var(--warn-soft) 54%, var(--panel-strong)) 0%, color-mix(in oklab, var(--warn-soft) 72%, var(--panel-muted)) 100%);
}
.status-band-item.tone-bad {
background:
linear-gradient(180deg, color-mix(in oklab, var(--bad-soft) 54%, var(--panel-strong)) 0%, color-mix(in oklab, var(--bad-soft) 74%, var(--panel-muted)) 100%);
}
.status-band-item.tone-ok strong {
color: var(--ok);
}
.status-band-item.tone-warn strong {
color: var(--warn);
}
.status-band-item.tone-bad strong {
color: var(--bad);
}
.status-band-suffix {
color: var(--muted);
font-size: 10px;
font-weight: 700;
letter-spacing: 0.08em;
text-transform: uppercase;
}
.summary-card small {
display: block;
color: var(--muted);
font-size: 11px;
}
.summary-card strong {
display: block;
margin-top: 6px;
}
.summary-tile.tone-ok,
.summary-card.tone-ok,
.matrix-state.tone-ok,
.metric-chip.tone-ok,
.host-service-pill.tone-ok,
.host-detail-line.tone-ok,
.alert-item.tone-ok {
border-color: color-mix(in oklab, var(--ok) 32%, var(--line));
background: color-mix(in oklab, var(--ok-soft) 70%, var(--panel-strong));
}
.summary-tile.tone-warn,
.matrix-state.tone-warn,
.metric-chip.tone-warn,
.host-service-pill.tone-warn,
.host-detail-line.tone-warn,
.alert-item.tone-warn {
border-color: color-mix(in oklab, var(--warn) 32%, var(--line));
background: color-mix(in oklab, var(--warn-soft) 72%, var(--panel-strong));
}
.summary-tile.tone-bad,
.summary-card.tone-bad,
.matrix-state.tone-bad,
.metric-chip.tone-bad,
.host-service-pill.tone-bad,
.host-detail-line.tone-bad,
.alert-item.tone-bad {
border-color: color-mix(in oklab, var(--bad) 32%, var(--line));
background: color-mix(in oklab, var(--bad-soft) 72%, var(--panel-strong));
}
.matrix-state.tone-ok,
.matrix-state.tone-warn,
.matrix-state.tone-bad {
background: transparent;
}
.alert-item {
width: 100%;
padding: 9px 10px;
border: 1px solid var(--line);
border-radius: 12px;
background: var(--panel-strong);
color: var(--text);
text-align: left;
cursor: pointer;
}
.alert-item.compact {
padding: 7px 9px;
}
.alert-item strong,
.alert-item span {
display: block;
}
.alert-item strong {
font-size: 12px;
line-height: 1.35;
}
.alert-item span {
margin-top: 4px;
color: var(--muted);
font-size: 11px;
line-height: 1.4;
}
.content-grid {
display: grid;
gap: 14px;
margin-top: 8px;
}
.service-layout-open {
grid-template-columns: minmax(0, 1fr) 316px;
}
.service-layout-solo {
grid-template-columns: 1fr;
}
.panel-header {
display: flex;
justify-content: space-between;
align-items: flex-start;
gap: 12px;
margin-bottom: 10px;
}
.panel-title {
display: grid;
gap: 3px;
min-width: 0;
}
.matrix-panel > .panel-header,
.hosts-panel > .panel-header {
margin-bottom: 14px;
padding-bottom: 12px;
border-bottom: 1px solid color-mix(in oklab, var(--line) 90%, var(--panel-strong));
}
.panel-title h2 {
margin: 0;
font-size: clamp(1.02rem, 1vw, 1.15rem);
font-weight: 700;
letter-spacing: -0.02em;
font-family: "Space Grotesk", "IBM Plex Sans", sans-serif;
}
.panel-title p {
margin: 4px 0 0;
color: var(--muted);
max-width: 50ch;
font-size: 10.5px;
line-height: 1.45;
letter-spacing: 0.02em;
}
.panel-meta {
justify-content: flex-end;
}
.panel-header .panel-meta .badge {
min-height: 25px;
padding: 0 8px;
font-size: 9.5px;
font-weight: 700;
}
.panel-header .panel-meta .refresh.ghost {
min-height: 30px;
padding: 0 10px;
}
.matrix-scroll,
.table-wrap {
overflow: auto;
border: 1px solid var(--line);
border-radius: 14px;
background: linear-gradient(180deg, color-mix(in oklab, var(--panel-muted) 96%, var(--panel-strong)) 0%, var(--panel-muted) 100%);
scrollbar-gutter: stable;
}
.matrix-stacks {
display: grid;
gap: 12px;
}
.matrix-stack {
--group-color: var(--accent);
display: grid;
gap: 10px;
padding: 10px;
border: 1px solid color-mix(in oklab, var(--line) 92%, var(--panel-strong));
border-radius: 16px;
background:
linear-gradient(180deg, color-mix(in oklab, var(--panel-muted) 96%, var(--panel-strong)) 0%, color-mix(in oklab, var(--panel-strong) 96%, var(--panel-muted)) 100%);
box-shadow:
var(--shadow-soft),
inset 0 1px 0 color-mix(in oklab, var(--panel-strong) 76%, transparent);
}
.matrix-stack::before {
content: "";
display: block;
width: 64px;
height: 3px;
border-radius: 999px;
background: linear-gradient(90deg, var(--group-color) 0%, color-mix(in oklab, var(--group-color) 50%, transparent) 100%);
}
.matrix-stack-head {
display: flex;
justify-content: space-between;
gap: 10px;
align-items: center;
padding: 0 2px;
}
.matrix-stack-headline {
display: grid;
gap: 2px;
}
.matrix-stack-headline strong {
display: inline-flex;
align-items: center;
gap: 8px;
color: var(--text);
font-size: 12px;
letter-spacing: -0.02em;
}
.matrix-stack-headline strong::before {
content: "";
width: 8px;
height: 8px;
border-radius: 999px;
background: var(--group-color);
box-shadow: 0 0 0 4px color-mix(in oklab, var(--group-color) 18%, transparent);
}
.matrix-stack-headline span {
color: var(--muted);
font-size: 9.5px;
font-weight: 700;
letter-spacing: 0.08em;
text-transform: uppercase;
}
.matrix-stack-badges {
display: inline-flex;
gap: 8px;
align-items: center;
flex-wrap: wrap;
}
.matrix-stack-badges .badge {
min-height: 24px;
padding: 0 8px;
font-size: 9.5px;
}
.matrix-table,
.table {
width: 100%;
border-collapse: collapse;
}
.matrix-table {
min-width: 520px;
}
.matrix-table th,
.matrix-table td,
.table th,
.table td {
padding: 6px 9px;
border-bottom: 1px solid var(--line);
text-align: left;
vertical-align: middle;
font-size: 11px;
}
.matrix-table th,
.table th {
background: linear-gradient(180deg, color-mix(in oklab, var(--accent-soft) 28%, var(--panel-muted)) 0%, color-mix(in oklab, var(--accent-soft) 18%, var(--panel-strong)) 100%);
color: var(--muted);
font-weight: 700;
font-size: 10px;
letter-spacing: 0.06em;
text-transform: uppercase;
white-space: nowrap;
}
.table tbody tr:nth-child(even),
.matrix-table tbody tr:nth-child(even) {
background: color-mix(in oklab, var(--accent-soft) 10%, var(--panel-strong));
}
.matrix-scroll {
max-height: 520px;
background: color-mix(in oklab, var(--panel-strong) 96%, var(--panel-muted));
}
.matrix-row {
cursor: pointer;
}
.matrix-row:hover {
background: color-mix(in oklab, var(--accent-soft) 18%, var(--panel-strong));
}
.matrix-row.selected {
background: color-mix(in oklab, var(--accent-soft) 34%, var(--panel-strong));
box-shadow: inset 2px 0 0 color-mix(in oklab, var(--accent) 42%, transparent);
}
.matrix-row.focused {
background: color-mix(in oklab, var(--warn-soft) 28%, var(--panel-strong));
}
.matrix-service strong {
font-size: 12px;
line-height: 1.3;
}
.matrix-kind {
color: var(--muted);
font-size: 11px;
}
.matrix-state {
min-width: 34px;
height: 24px;
padding: 0 4px;
border-left: 1px solid var(--line);
text-align: center;
vertical-align: middle;
}
.matrix-state-marker {
display: block;
width: 9px;
height: 9px;
margin: 0 auto;
border-radius: 999px;
background: currentColor;
box-shadow: 0 0 0 3px color-mix(in oklab, currentColor 12%, transparent);
}
.matrix-state-code {
display: none;
margin-top: 2px;
font-size: 9px;
font-weight: 700;
line-height: 1;
}
.matrix-state-latency {
display: none;
margin-top: 2px;
color: var(--muted);
font-size: 9px;
line-height: 1;
}
.matrix-table.is-detail .matrix-state {
height: 40px;
padding: 4px 5px;
}
.matrix-table.is-detail .matrix-state-code,
.matrix-table.is-detail .matrix-state-latency {
display: block;
}
.matrix-state-empty {
background:
linear-gradient(180deg, color-mix(in oklab, var(--panel-muted) 92%, var(--bg-soft)) 0%, color-mix(in oklab, var(--panel-muted) 82%, var(--bg-soft)) 100%),
repeating-linear-gradient(135deg, transparent 0 6px, color-mix(in oklab, var(--line) 30%, transparent) 6px 7px);
color: color-mix(in oklab, var(--muted) 58%, transparent);
}
.matrix-state-empty-mark {
display: block;
font-size: 9px;
line-height: 1;
opacity: 0.32;
}
.matrix-table thead th {
position: sticky;
top: 0;
z-index: 4;
}
.matrix-sticky-col {
position: sticky;
left: 0;
z-index: 3;
background: color-mix(in oklab, var(--panel-strong) 94%, var(--panel-muted));
box-shadow: 1px 0 0 var(--line);
min-width: 118px;
}
.matrix-table thead .matrix-sticky-col {
z-index: 5;
background: color-mix(in oklab, var(--accent-soft) 28%, var(--panel-muted));
}
.detail-panel {
display: flex;
flex-direction: column;
position: sticky;
top: 112px;
max-height: calc(100vh - 124px);
border-color: color-mix(in oklab, var(--accent) 12%, var(--line));
background:
linear-gradient(180deg, color-mix(in oklab, var(--panel-strong) 90%, var(--accent-soft)) 0%, color-mix(in oklab, var(--panel) 96%, var(--panel-muted)) 100%);
box-shadow:
var(--shadow-lift),
inset 0 1px 0 color-mix(in oklab, var(--panel-strong) 78%, transparent);
}
.detail-panel::before {
content: "";
position: absolute;
left: 14px;
right: 14px;
top: 0;
height: 3px;
border-radius: 999px;
background: linear-gradient(90deg, color-mix(in oklab, var(--accent) 52%, var(--group-app)) 0%, transparent 72%);
opacity: 0.85;
}
.service-meta-grid,
.summary-grid,
.metric-grid,
.infra-mini-metrics,
.config-meta-grid {
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
gap: 10px;
}
.service-meta-grid {
grid-template-columns: repeat(2, minmax(0, 1fr));
margin-bottom: 10px;
}
.detail-instance-list {
display: grid;
gap: 8px;
max-height: 480px;
overflow: auto;
padding-right: 4px;
}
.detail-instance {
position: relative;
overflow: hidden;
padding: 9px;
border: 1px solid var(--line);
border-radius: 12px;
background: linear-gradient(180deg, color-mix(in oklab, var(--panel-muted) 94%, var(--panel-strong)) 0%, var(--panel-muted) 100%);
transition: border-color 180ms ease, background 180ms ease, box-shadow 180ms ease, transform 180ms ease;
}
.detail-instance::before,
.detail-alert-panel::before {
content: "";
position: absolute;
left: 0;
right: 0;
top: 0;
height: 2px;
background: linear-gradient(90deg, color-mix(in oklab, var(--accent) 42%, var(--group-app)) 0%, transparent 76%);
opacity: 0.78;
}
.detail-instance:hover {
transform: translateY(-1px);
border-color: color-mix(in oklab, var(--accent) 22%, var(--line));
box-shadow: var(--shadow-soft), inset 0 1px 0 color-mix(in oklab, var(--panel-strong) 72%, transparent);
}
.detail-instance-top {
display: flex;
justify-content: space-between;
gap: 10px;
align-items: flex-start;
}
.detail-instance-actions {
display: flex;
gap: 8px;
align-items: center;
flex-wrap: wrap;
}
.detail-instance-top strong {
display: block;
font-size: 13px;
}
.detail-instance-top p {
margin: 4px 0 0;
color: var(--muted);
font-size: 12px;
}
.detail-inline {
display: flex;
gap: 8px;
flex-wrap: wrap;
margin-top: 6px;
color: var(--muted);
font-size: 11px;
}
.detail-secondary {
margin-top: 8px;
color: var(--muted);
font-size: 10px;
word-break: break-all;
}
.detail-note {
margin-top: 6px;
color: var(--text);
font-size: 11px;
line-height: 1.45;
word-break: break-word;
}
.detail-log-trigger {
min-height: 26px;
padding: 0 9px;
}
.overview-side-stack {
display: grid;
gap: 10px;
}
.overview-side-grid,
.overview-side-host-list {
display: grid;
gap: 9px;
}
.overview-side-hosts {
display: grid;
gap: 10px;
padding: 10px;
border: 1px solid var(--line);
border-radius: 16px;
background: color-mix(in oklab, var(--panel-muted) 96%, var(--panel-strong));
}
.overview-side-host-chip {
--group-color: var(--accent);
position: relative;
display: grid;
gap: 4px;
padding: 9px 10px 9px 14px;
border: 1px solid var(--line);
border-radius: 12px;
background: linear-gradient(180deg, color-mix(in oklab, var(--panel-muted) 94%, var(--panel-strong)) 0%, var(--panel-muted) 100%);
box-shadow: inset 0 1px 0 color-mix(in oklab, var(--panel-strong) 68%, transparent);
transition: border-color 180ms ease, background 180ms ease, box-shadow 180ms ease, transform 180ms ease;
}
.overview-side-host-chip::before {
content: "";
position: absolute;
left: 0;
top: 8px;
bottom: 8px;
width: 3px;
border-radius: 999px;
background: var(--group-color);
}
.overview-side-host-chip:hover {
transform: translateY(-1px);
border-color: color-mix(in oklab, var(--accent) 18%, var(--line));
box-shadow: var(--shadow-soft), inset 0 1px 0 color-mix(in oklab, var(--panel-strong) 68%, transparent);
}
.overview-side-host-chip-head {
display: flex;
justify-content: space-between;
gap: 8px;
align-items: center;
}
.overview-side-host-chip strong {
font-size: 11px;
}
.overview-side-host-chip em {
color: var(--muted);
font-size: 10px;
font-style: normal;
font-weight: 700;
}
.overview-side-host-chip span {
color: var(--muted);
font-size: 10px;
line-height: 1.35;
}
.detail-log-panel {
margin-top: 10px;
padding: 10px;
border: 1px solid var(--line);
border-radius: 12px;
background: var(--panel-muted);
}
.detail-log-toolbar {
display: flex;
gap: 8px;
align-items: center;
flex-wrap: wrap;
margin-bottom: 8px;
}
.detail-log-field {
gap: 6px;
}
.detail-log-input {
width: 96px;
min-height: 30px;
padding: 0 9px;
border: 1px solid var(--line-strong);
border-radius: 10px;
background: var(--panel-strong);
color: var(--text);
font: inherit;
}
.detail-log-output {
margin: 0;
min-height: 144px;
max-height: 320px;
overflow: auto;
padding: 12px;
border: 1px solid color-mix(in oklab, var(--line-strong) 74%, transparent);
border-radius: 12px;
background: oklch(22% 0.01 240 / 0.98);
color: oklch(91% 0.01 230);
font-size: 11px;
line-height: 1.55;
white-space: pre-wrap;
word-break: break-word;
}
.detail-alert-panel {
position: relative;
overflow: hidden;
margin-bottom: 8px;
padding: 10px;
border: 1px solid var(--line);
border-radius: 12px;
background:
linear-gradient(180deg, color-mix(in oklab, var(--panel-muted) 94%, var(--panel-strong)) 0%, var(--panel-muted) 100%);
}
.detail-alert-feed {
display: grid;
gap: 6px;
max-height: 112px;
overflow: auto;
padding-right: 2px;
}
.detail-subhead {
display: flex;
justify-content: space-between;
gap: 8px;
align-items: center;
margin-bottom: 6px;
color: var(--muted);
font-size: 10px;
font-weight: 700;
letter-spacing: 0.08em;
text-transform: uppercase;
}
.host-sections {
display: grid;
gap: 12px;
}
.host-section {
display: grid;
gap: 8px;
}
.section-caption-row {
display: flex;
justify-content: space-between;
gap: 12px;
align-items: center;
flex-wrap: wrap;
padding: 0 2px;
}
.section-caption {
color: var(--muted);
font-size: 10px;
font-weight: 700;
letter-spacing: 0.14em;
text-transform: uppercase;
}
.section-caption-meta {
display: inline-flex;
gap: 10px;
align-items: center;
flex-wrap: wrap;
}
.section-caption-meta span {
display: inline-flex;
align-items: center;
min-height: 24px;
padding: 0 8px;
border: 1px solid color-mix(in oklab, var(--line) 90%, var(--panel-strong));
border-radius: 999px;
background: color-mix(in oklab, var(--panel-muted) 94%, var(--panel-strong));
color: var(--muted);
font-size: 10px;
font-weight: 700;
}
.section-caption-row-quiet {
margin-bottom: -2px;
}
.host-row-list {
display: grid;
gap: 8px;
}
.quiet-host-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
gap: 10px;
}
.quiet-host-card {
--group-color: color-mix(in oklab, var(--accent) 42%, var(--ok));
position: relative;
display: grid;
gap: 9px;
min-height: 108px;
padding: 10px 11px;
border: 1px solid var(--line);
border-radius: 16px;
background:
linear-gradient(180deg, color-mix(in oklab, var(--panel-muted) 97%, var(--panel-strong)) 0%, color-mix(in oklab, var(--panel-muted) 92%, var(--panel-strong)) 100%);
color: var(--text);
text-align: left;
font: inherit;
cursor: pointer;
overflow: hidden;
transition: transform 180ms ease, border-color 180ms ease, background 180ms ease, box-shadow 180ms ease;
box-shadow: inset 0 1px 0 color-mix(in oklab, var(--panel-strong) 72%, transparent);
}
.quiet-host-card::before {
content: "";
position: absolute;
inset: 0 auto auto 0;
width: 100%;
height: 3px;
background: linear-gradient(90deg, var(--group-color) 0%, transparent 72%);
opacity: 0.9;
}
.quiet-host-card:hover {
transform: translateY(-1px);
border-color: color-mix(in oklab, var(--accent) 28%, var(--line));
background: linear-gradient(180deg, color-mix(in oklab, var(--accent-soft) 18%, var(--panel-strong)) 0%, var(--panel-muted) 100%);
}
.quiet-host-card.active {
border-color: color-mix(in oklab, var(--group-color) 36%, var(--line));
box-shadow: inset 0 0 0 1px color-mix(in oklab, var(--group-color) 18%, transparent);
}
.quiet-host-head {
display: grid;
gap: 3px;
}
.quiet-host-head strong {
font-size: 12px;
}
.quiet-host-head span {
color: var(--muted);
font-size: 10px;
}
.quiet-host-metrics,
.quiet-host-foot {
display: flex;
gap: 8px;
flex-wrap: wrap;
align-items: center;
}
.quiet-host-foot {
justify-content: space-between;
}
.quiet-host-foot .badge:last-child {
max-width: 100%;
overflow: hidden;
text-overflow: ellipsis;
}
.quiet-host-metrics-fallback {
min-height: 32px;
}
.metric-ring-chip-quiet {
min-height: 32px;
padding: 0 8px 0 6px;
}
.metric-ring-chip-quiet .metric-ring {
width: 20px;
height: 20px;
}
.metric-ring-chip-quiet .metric-ring-hole {
inset: 3px;
}
.metric-ring-chip-quiet .metric-ring-copy strong {
font-size: 10px;
}
.host-strip {
--group-color: color-mix(in oklab, var(--accent) 42%, var(--ok));
position: relative;
border: 1px solid color-mix(in oklab, var(--line) 92%, var(--panel-strong));
border-radius: 14px;
background:
linear-gradient(180deg, color-mix(in oklab, var(--panel-strong) 96%, var(--panel-muted)) 0%, var(--panel-strong) 100%);
overflow: hidden;
transition: transform 180ms ease, border-color 180ms ease, box-shadow 180ms ease, background 180ms ease;
box-shadow: inset 0 1px 0 color-mix(in oklab, var(--panel-strong) 70%, transparent);
}
.host-strip-alert {
border-color: color-mix(in oklab, var(--bad) 28%, var(--line));
}
.host-strip-focused {
border-color: color-mix(in oklab, var(--accent) 42%, var(--line));
box-shadow: inset 0 0 0 1px color-mix(in oklab, var(--accent-soft) 72%, transparent);
}
.host-strip::before {
content: "";
position: absolute;
left: 0;
top: 0;
bottom: 0;
width: 3px;
background: linear-gradient(180deg, var(--group-color) 0%, color-mix(in oklab, var(--group-color) 56%, var(--panel-strong)) 100%);
}
.host-strip-alert::before {
background: linear-gradient(180deg, color-mix(in oklab, var(--warn) 72%, var(--accent)) 0%, var(--bad) 100%);
}
.host-strip:hover {
transform: translateY(-1px);
border-color: color-mix(in oklab, var(--accent) 24%, var(--line));
box-shadow: 0 10px 22px rgba(33, 46, 76, 0.08);
}
.host-strip-main {
display: grid;
grid-template-columns: minmax(176px, 214px) minmax(280px, 1fr) minmax(220px, 0.92fr) auto;
gap: 10px;
align-items: center;
min-height: 56px;
padding: 8px 11px 8px 16px;
cursor: pointer;
}
.host-strip-id strong,
.host-strip-id span {
display: block;
}
.host-strip-id strong {
font-size: 13px;
line-height: 1.3;
}
.host-strip-id span {
margin-top: 4px;
color: var(--muted);
font-size: 11px;
}
.host-inline-metrics,
.host-inline-state {
display: flex;
gap: 8px;
align-items: center;
flex-wrap: wrap;
}
.compact-metrics {
gap: 8px;
color: var(--muted);
font-size: 10px;
font-weight: 600;
}
.compact-metrics-fallback {
justify-content: flex-start;
}
.metric-ring-chip,
.metric-stat-chip {
display: inline-flex;
align-items: center;
gap: 8px;
min-height: 36px;
padding: 0 9px 0 7px;
border: 1px solid var(--line);
border-radius: 999px;
background: color-mix(in oklab, var(--panel-muted) 94%, var(--panel-strong));
}
.metric-ring-chip.tone-ok,
.metric-stat-chip.tone-ok {
border-color: color-mix(in oklab, var(--ok) 28%, var(--line));
}
.metric-ring-chip.tone-warn,
.metric-stat-chip.tone-warn {
border-color: color-mix(in oklab, var(--warn) 28%, var(--line));
}
.metric-ring-chip.tone-bad,
.metric-stat-chip.tone-bad {
border-color: color-mix(in oklab, var(--bad) 28%, var(--line));
}
.metric-ring {
--metric-color: var(--line-strong);
--metric-value: 0%;
position: relative;
width: 24px;
height: 24px;
border-radius: 999px;
background:
conic-gradient(var(--metric-color) 0 var(--metric-value), color-mix(in oklab, var(--line) 88%, transparent) var(--metric-value) 100%);
}
.metric-ring-hole {
position: absolute;
inset: 4px;
border-radius: 999px;
background: var(--panel-strong);
}
.metric-ring-copy,
.metric-stat-chip {
min-width: 0;
}
.metric-ring-copy small,
.metric-ring-copy strong,
.metric-stat-chip small,
.metric-stat-chip strong {
display: block;
}
.metric-ring-copy small,
.metric-stat-chip small {
color: var(--muted);
font-size: 9px;
line-height: 1;
letter-spacing: 0.06em;
text-transform: uppercase;
}
.metric-ring-copy strong,
.metric-stat-chip strong {
margin-top: 3px;
font-size: 11px;
line-height: 1.1;
white-space: nowrap;
}
.metric-state-chip {
display: inline-grid;
gap: 3px;
min-height: 36px;
padding: 6px 10px;
border: 1px solid var(--line);
border-radius: 12px;
background: color-mix(in oklab, var(--panel-muted) 94%, var(--panel-strong));
}
.metric-state-chip small,
.metric-state-chip strong {
display: block;
}
.metric-state-chip small {
color: var(--muted);
font-size: 9px;
line-height: 1;
letter-spacing: 0.06em;
text-transform: uppercase;
}
.metric-state-chip strong {
font-size: 11px;
line-height: 1.2;
}
.metric-state-chip.tone-warn {
border-color: color-mix(in oklab, var(--warn) 34%, var(--line));
background: color-mix(in oklab, var(--warn-soft) 62%, var(--panel-strong));
color: var(--warn);
}
.host-alert-summary {
display: grid;
gap: 4px;
min-width: 0;
padding: 8px 10px;
border: 1px solid color-mix(in oklab, var(--line) 92%, var(--panel-strong));
border-radius: 12px;
background: linear-gradient(180deg, color-mix(in oklab, var(--panel-muted) 96%, var(--panel-strong)) 0%, var(--panel-muted) 100%);
}
.host-alert-summary small {
color: var(--muted);
font-size: 9px;
font-weight: 700;
letter-spacing: 0.08em;
text-transform: uppercase;
}
.host-alert-path {
display: block;
width: 100%;
overflow: hidden;
color: var(--text);
font-size: 11px;
font-weight: 600;
text-overflow: ellipsis;
white-space: nowrap;
}
.host-alert-summary.tone-bad .host-alert-path {
color: color-mix(in oklab, var(--bad) 82%, var(--text));
}
.host-alert-summary.tone-bad {
border-color: color-mix(in oklab, var(--bad) 24%, var(--line));
background: color-mix(in oklab, var(--bad-soft) 44%, var(--panel-strong));
}
.host-alert-summary.tone-warn .host-alert-path {
color: color-mix(in oklab, var(--warn) 72%, var(--text));
}
.host-alert-summary.tone-warn {
border-color: color-mix(in oklab, var(--warn) 24%, var(--line));
background: color-mix(in oklab, var(--warn-soft) 40%, var(--panel-strong));
}
.host-alert-summary.tone-neutral .host-alert-path {
color: color-mix(in oklab, var(--muted) 76%, var(--text));
}
.host-inline-state {
justify-content: flex-end;
}
.metric-chip,
.host-service-pill {
border: 1px solid var(--line);
border-radius: 999px;
background: var(--panel-muted);
color: var(--text);
}
.metric-chip {
display: inline-flex;
align-items: center;
min-height: 30px;
padding: 0 10px;
font-size: 11px;
font-weight: 700;
}
.host-strip-detail {
display: flex;
gap: 6px;
flex-wrap: wrap;
padding: 0 11px 10px 16px;
}
.host-strip-detail-wide {
padding-top: 2px;
}
.host-strip-detail-list {
display: grid;
gap: 6px;
}
.host-detail-line {
display: grid;
grid-template-columns: minmax(92px, 110px) minmax(0, 1fr);
gap: 12px;
align-items: center;
width: 100%;
padding: 7px 10px;
border: 1px solid var(--line);
border-radius: 10px;
background: var(--panel-muted);
color: var(--text);
font: inherit;
text-align: left;
cursor: pointer;
}
.host-detail-line strong,
.host-detail-line span,
.host-detail-line small {
display: block;
}
.host-detail-line strong {
font-size: 11px;
}
.host-detail-line span,
.host-detail-line small {
color: var(--muted);
font-size: 10px;
line-height: 1.35;
}
.host-detail-line-warn {
cursor: default;
border-color: color-mix(in oklab, var(--warn) 36%, var(--line));
background: color-mix(in oklab, var(--warn-soft) 50%, var(--panel-muted));
}
.host-service-pill {
min-width: 138px;
padding: 7px 9px;
text-align: left;
cursor: pointer;
}
.host-service-pill strong,
.host-service-pill span,
.host-service-pill small {
display: block;
}
.host-service-pill strong {
font-size: 11px;
}
.host-service-pill span,
.host-service-pill small {
margin-top: 4px;
color: var(--muted);
font-size: 10px;
line-height: 1.35;
}
.overview-infra-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
gap: 12px;
margin-top: 12px;
}
.metadata-strip {
display: flex;
gap: 10px;
flex-wrap: wrap;
align-items: center;
margin-bottom: 10px;
padding: 8px 10px;
border: 1px solid var(--line);
border-radius: 12px;
background: var(--panel-muted);
color: var(--muted);
font-size: 11px;
box-shadow: inset 0 1px 0 color-mix(in oklab, var(--panel-strong) 60%, transparent);
}
.metadata-strip span {
white-space: nowrap;
}
.metadata-strip-tight {
gap: 8px;
margin-bottom: 8px;
padding: 6px 8px;
font-size: 10px;
}
.compact-workbench-head {
display: flex;
justify-content: space-between;
gap: 10px;
align-items: center;
margin-bottom: 10px;
padding: 8px 10px;
border: 1px solid color-mix(in oklab, var(--line) 92%, var(--panel-strong));
border-radius: 14px;
background: linear-gradient(180deg, color-mix(in oklab, var(--panel-muted) 98%, var(--panel-strong)) 0%, var(--panel-muted) 100%);
}
.compact-workbench-head .metadata-strip {
flex: 1 1 auto;
margin: 0;
padding: 0;
border: 0;
border-radius: 0;
background: transparent;
box-shadow: none;
}
.compact-workbench-head .metadata-strip span {
max-width: 100%;
overflow: hidden;
text-overflow: ellipsis;
}
.config-workbench-panel {
position: relative;
background:
linear-gradient(180deg, color-mix(in oklab, var(--panel-strong) 96%, var(--accent-soft)) 0%, color-mix(in oklab, var(--panel) 98%, var(--panel-muted)) 100%);
box-shadow: var(--shadow-soft), inset 0 1px 0 color-mix(in oklab, var(--panel-strong) 74%, transparent);
}
.infra-overview-panel {
margin-top: 12px;
}
.infra-overview-grid,
.mongo-group-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
gap: 12px;
}
.infra-focus-card,
.mongo-stat-group {
position: relative;
display: grid;
gap: 10px;
padding: 12px;
border: 1px solid var(--line);
border-radius: 14px;
background: var(--panel-muted);
transition: transform 180ms ease, border-color 180ms ease, background 180ms ease, box-shadow 180ms ease;
box-shadow: inset 0 1px 0 color-mix(in oklab, var(--panel-strong) 70%, transparent);
}
.infra-focus-card::before,
.mongo-stat-group::before,
.nacos-service-card::before {
content: "";
position: absolute;
left: 0;
right: 0;
top: 0;
height: 3px;
background: linear-gradient(90deg, color-mix(in oklab, var(--accent) 48%, var(--ok)) 0%, transparent 76%);
}
.infra-focus-card:hover,
.mongo-stat-group:hover {
transform: translateY(-1px);
border-color: color-mix(in oklab, var(--accent) 22%, var(--line));
box-shadow: var(--shadow-soft), inset 0 1px 0 color-mix(in oklab, var(--panel-strong) 70%, transparent);
}
.infra-focus-head {
display: flex;
justify-content: space-between;
gap: 8px;
align-items: center;
}
.infra-focus-head strong {
font-size: 13px;
}
.infra-focus-metrics {
display: flex;
gap: 8px;
flex-wrap: wrap;
color: var(--muted);
font-size: 11px;
}
.infra-inline-list {
display: flex;
gap: 8px;
flex-wrap: wrap;
}
.infra-inline-link {
display: inline-flex;
align-items: center;
min-height: 28px;
padding: 0 10px;
border: 1px solid color-mix(in oklab, var(--bad) 24%, var(--line));
border-radius: 999px;
background: color-mix(in oklab, var(--bad-soft) 38%, var(--panel-strong));
color: var(--bad);
font: inherit;
font-size: 11px;
cursor: pointer;
}
.nacos-summary-row.is-alert {
background: color-mix(in oklab, var(--bad-soft) 24%, var(--panel-strong));
}
.nacos-service-detail-cell {
padding: 8px;
background: color-mix(in oklab, var(--panel-muted) 92%, var(--panel-strong));
}
.fold-group {
display: grid;
gap: 10px;
margin-top: 12px;
}
.infra-detail-stack {
display: grid;
gap: 12px;
}
.mongo-workbench-panel .panel-header {
margin-bottom: 12px;
}
.mongo-workbench-strip {
margin-bottom: 12px;
}
.mongo-secondary-grid {
grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
gap: 10px;
}
.mongo-mini-card {
min-height: 0;
padding: 9px 10px;
border-radius: 14px;
background: linear-gradient(180deg, color-mix(in oklab, var(--panel-strong) 96%, var(--accent-soft)) 0%, var(--panel-muted) 100%);
}
.mongo-mini-card small {
font-size: 10px;
letter-spacing: 0.08em;
text-transform: uppercase;
}
.mongo-mini-card strong {
margin-top: 5px;
}
.mongo-detail-stack {
gap: 10px;
}
.mongo-detail-block {
display: grid;
gap: 10px;
padding: 12px;
border: 1px solid var(--line);
border-radius: 16px;
background: linear-gradient(180deg, color-mix(in oklab, var(--panel-muted) 95%, var(--panel-strong)) 0%, var(--panel-strong) 100%);
box-shadow: inset 0 1px 0 color-mix(in oklab, var(--panel-strong) 72%, transparent);
}
.mongo-detail-head {
display: flex;
justify-content: space-between;
gap: 12px;
align-items: center;
}
.mongo-detail-head .panel-title h2 {
font-size: 13px;
}
.mongo-detail-head .panel-title p {
margin-top: 3px;
font-size: 10px;
letter-spacing: 0.08em;
text-transform: uppercase;
}
.mongo-detail-block .table-wrap {
margin-top: 0;
}
.config-sidebar {
display: grid;
gap: 4px;
align-self: start;
position: sticky;
top: 116px;
max-height: calc(100vh - 128px);
padding: 6px;
border: 1px solid var(--line);
border-radius: 14px;
background: linear-gradient(180deg, color-mix(in oklab, var(--panel-muted) 96%, var(--panel-strong)) 0%, var(--panel-muted) 100%);
box-shadow: inset 0 1px 0 color-mix(in oklab, var(--panel-strong) 72%, transparent);
}
.config-sidebar-head {
display: grid;
gap: 6px;
}
.config-sidebar-meta {
display: flex;
gap: 8px;
align-items: center;
}
.config-sidebar-head.compact {
padding-bottom: 2px;
}
.config-list-ide {
gap: 4px;
padding-right: 2px;
}
.config-group {
display: grid;
gap: 3px;
}
.config-group-toggle {
display: grid;
grid-template-columns: minmax(0, 1fr) auto auto;
gap: 8px;
align-items: center;
width: 100%;
min-height: 26px;
padding: 0 8px;
border: 1px solid var(--line);
border-radius: 10px;
background: linear-gradient(180deg, color-mix(in oklab, var(--panel-muted) 98%, var(--panel-strong)) 0%, var(--panel-strong) 100%);
color: var(--text);
font: inherit;
cursor: pointer;
text-align: left;
transition: border-color 180ms ease, background 180ms ease;
box-shadow: inset 0 1px 0 color-mix(in oklab, var(--panel-strong) 68%, transparent);
}
.config-group-toggle:hover {
border-color: color-mix(in oklab, var(--accent) 22%, var(--line));
background: linear-gradient(180deg, color-mix(in oklab, var(--accent-soft) 18%, var(--panel-strong)) 0%, var(--panel-strong) 100%);
}
.config-group-toggle strong {
font-size: 11px;
}
.config-group-toggle span,
.config-group-toggle small {
color: var(--muted);
font-size: 9.5px;
font-weight: 700;
letter-spacing: 0.06em;
}
.config-group-items {
display: grid;
gap: 2px;
padding-left: 6px;
border-left: 1px solid color-mix(in oklab, var(--line) 88%, transparent);
}
.config-item-ide {
display: grid;
grid-template-columns: minmax(0, 1fr) auto;
gap: 8px;
align-items: center;
padding: 6px 7px 6px 9px;
border: 0;
border-radius: 10px;
background: transparent;
position: relative;
transition: background 180ms ease, box-shadow 180ms ease, border-color 180ms ease, transform 180ms ease;
}
.config-item-ide::before {
content: "";
position: absolute;
left: 0;
top: 6px;
bottom: 6px;
width: 2px;
border-radius: 999px;
background: transparent;
}
.config-item-ide strong {
font-size: 10.5px;
word-break: break-word;
line-height: 1.3;
}
.config-item-ide span {
margin-top: 0;
font-size: 9.5px;
text-transform: uppercase;
letter-spacing: 0.06em;
}
.config-item-ide small {
font-size: 9.5px;
color: var(--muted);
}
.config-item-ide.active {
background: linear-gradient(180deg, color-mix(in oklab, var(--accent-soft) 64%, var(--panel-strong)) 0%, color-mix(in oklab, var(--accent-soft) 42%, var(--panel-strong)) 100%);
box-shadow: inset 0 0 0 1px color-mix(in oklab, var(--accent) 26%, var(--line));
}
.config-item-ide:hover {
transform: none;
background: linear-gradient(180deg, color-mix(in oklab, var(--accent-soft) 22%, var(--panel-strong)) 0%, color-mix(in oklab, var(--accent-soft) 12%, var(--panel-strong)) 100%);
box-shadow: inset 0 0 0 1px color-mix(in oklab, var(--accent) 10%, var(--line));
}
.config-item-ide.active::before {
background: var(--accent);
}
.config-item-main,
.config-item-side {
display: grid;
gap: 3px;
}
.config-item-side {
justify-items: end;
}
.config-jump-group {
display: inline-flex;
gap: 8px;
align-items: center;
}
.editor-doc-pill {
display: grid;
gap: 2px;
min-width: 0;
padding: 4px 7px;
border: 1px solid var(--line);
border-radius: 11px;
background: linear-gradient(180deg, color-mix(in oklab, var(--panel-strong) 96%, var(--accent-soft)) 0%, var(--panel-strong) 100%);
}
.editor-doc-pill strong,
.editor-doc-pill small {
display: block;
}
.editor-doc-pill strong {
font-size: 11px;
line-height: 1.3;
word-break: break-word;
}
.editor-doc-pill small {
color: var(--muted);
font-size: 10px;
}
.editor-toolbar {
position: relative;
display: flex;
justify-content: space-between;
gap: 12px;
align-items: center;
padding: 6px;
border: 1px solid color-mix(in oklab, var(--line) 92%, var(--panel-strong));
border-radius: 14px;
background: linear-gradient(180deg, color-mix(in oklab, var(--panel-muted) 96%, var(--panel-strong)) 0%, var(--panel-muted) 100%);
box-shadow: inset 0 1px 0 color-mix(in oklab, var(--panel-strong) 72%, transparent);
}
.sticky-toolbar {
position: sticky;
top: 124px;
z-index: 8;
}
.editor-toolbar-main {
display: flex;
gap: 8px;
align-items: center;
flex-wrap: wrap;
}
.diff-panel {
border: 1px solid var(--line);
border-radius: 16px;
background: oklch(100% 0 0 / 0.86);
overflow: auto;
box-shadow: inset 0 1px 0 color-mix(in oklab, var(--panel-strong) 76%, transparent);
}
.diff-list {
display: grid;
}
.diff-row {
display: grid;
grid-template-columns: 48px 48px 28px minmax(0, 1fr);
gap: 10px;
align-items: start;
padding: 6px 12px;
border-bottom: 1px solid var(--line);
font-size: 12px;
line-height: 1.5;
}
.diff-row:last-child {
border-bottom: 0;
}
.diff-row.is-add {
background: color-mix(in oklab, var(--ok-soft) 58%, var(--panel-strong));
}
.diff-row.is-remove {
background: color-mix(in oklab, var(--bad-soft) 52%, var(--panel-strong));
}
.diff-gutter,
.diff-mark {
color: var(--muted);
font-size: 10px;
text-align: right;
}
.diff-row code {
font: inherit;
word-break: break-word;
white-space: pre-wrap;
}
.activity-list {
display: grid;
gap: 8px;
}
.activity-list.compact {
margin-top: 12px;
}
.activity-grid {
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
}
.activity-item {
display: grid;
grid-template-columns: minmax(0, 1fr) auto;
gap: 12px;
align-items: center;
padding: 10px 12px;
border: 1px solid var(--line);
border-radius: 12px;
background: linear-gradient(180deg, color-mix(in oklab, var(--panel-muted) 96%, var(--panel-strong)) 0%, var(--panel-muted) 100%);
transition: border-color 180ms ease, background 180ms ease, transform 180ms ease;
}
.activity-item:hover {
transform: translateY(-1px);
border-color: color-mix(in oklab, var(--accent) 20%, var(--line));
}
.activity-item.compact {
padding: 8px 10px;
}
.activity-item.tone-ok {
border-color: color-mix(in oklab, var(--ok) 28%, var(--line));
background: color-mix(in oklab, var(--ok-soft) 42%, var(--panel-strong));
}
.activity-item.tone-warn {
border-color: color-mix(in oklab, var(--warn) 28%, var(--line));
background: color-mix(in oklab, var(--warn-soft) 44%, var(--panel-strong));
}
.activity-item.tone-bad {
border-color: color-mix(in oklab, var(--bad) 28%, var(--line));
background: color-mix(in oklab, var(--bad-soft) 44%, var(--panel-strong));
}
.activity-item-main strong,
.activity-item-main span,
.activity-item-side small {
display: block;
}
.activity-item-main strong {
font-size: 12px;
}
.activity-item-main span,
.activity-item-side small {
color: var(--muted);
font-size: 11px;
line-height: 1.45;
}
.activity-item-side {
text-align: right;
}
.release-status-strip {
margin-top: 8px;
padding: 10px 12px;
}
.sticky-release-strip {
position: sticky;
top: 126px;
z-index: 12;
}
.release-action-bar {
position: relative;
display: flex;
justify-content: space-between;
gap: 12px;
align-items: center;
margin-top: 10px;
padding: 10px 12px;
border: 1px solid color-mix(in oklab, var(--line) 92%, var(--panel-strong));
border-radius: 14px;
background: linear-gradient(180deg, color-mix(in oklab, var(--panel-muted) 96%, var(--panel-strong)) 0%, var(--panel-muted) 100%);
box-shadow: var(--shadow-soft), inset 0 1px 0 color-mix(in oklab, var(--panel-strong) 72%, transparent);
}
.release-action-summary {
display: flex;
gap: 8px;
flex-wrap: wrap;
align-items: center;
padding: 4px;
border: 1px solid color-mix(in oklab, var(--line) 92%, var(--panel-strong));
border-radius: 12px;
background: linear-gradient(180deg, color-mix(in oklab, var(--panel-strong) 98%, var(--panel-muted)) 0%, var(--panel-strong) 100%);
box-shadow: inset 0 1px 0 color-mix(in oklab, var(--panel-strong) 72%, transparent);
}
.release-status-grid {
display: grid;
grid-template-columns: repeat(5, minmax(0, 1fr));
gap: 8px;
}
.release-status-item {
position: relative;
overflow: hidden;
min-height: 56px;
padding: 8px 10px;
border: 1px solid var(--line);
border-radius: 12px;
background: var(--panel-muted);
box-shadow: inset 0 1px 0 color-mix(in oklab, var(--panel-strong) 68%, transparent);
}
.release-status-item::before {
content: "";
position: absolute;
left: 0;
right: 0;
top: 0;
height: 2px;
background: linear-gradient(90deg, color-mix(in oklab, currentColor 46%, transparent) 0%, transparent 78%);
opacity: 0.82;
}
.release-status-item.tone-ok {
border-color: color-mix(in oklab, var(--ok) 26%, var(--line));
background: color-mix(in oklab, var(--ok-soft) 42%, var(--panel-strong));
}
.release-status-item.tone-warn {
border-color: color-mix(in oklab, var(--warn) 26%, var(--line));
background: color-mix(in oklab, var(--warn-soft) 44%, var(--panel-strong));
}
.release-status-item.tone-bad {
border-color: color-mix(in oklab, var(--bad) 26%, var(--line));
background: color-mix(in oklab, var(--bad-soft) 42%, var(--panel-strong));
}
.release-status-item small,
.release-status-item strong {
display: block;
}
.release-status-item small {
color: var(--muted);
font-size: 10px;
text-transform: uppercase;
letter-spacing: 0.08em;
}
.release-status-item strong {
margin-top: 6px;
font-size: 12.5px;
line-height: 1.45;
word-break: break-word;
}
.release-card-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(228px, 1fr));
gap: 12px;
margin-top: 12px;
}
.release-service-card {
--release-kind-color: var(--accent);
position: relative;
display: grid;
gap: 8px;
padding: 11px 11px 10px;
border: 1px solid var(--line);
border-radius: 15px;
background: linear-gradient(180deg, color-mix(in oklab, var(--panel-muted) 96%, var(--panel-strong)) 0%, var(--panel-muted) 100%);
transition: transform 180ms ease, border-color 180ms ease, background 180ms ease, box-shadow 180ms ease;
}
.release-service-card::before {
content: "";
position: absolute;
left: 0;
right: 0;
top: 0;
height: 3px;
background: linear-gradient(90deg, var(--release-kind-color) 0%, transparent 78%);
}
.release-service-card:hover {
transform: translateY(-1px);
border-color: color-mix(in oklab, var(--accent) 28%, var(--line));
}
.release-service-card.selected {
border-color: color-mix(in oklab, var(--accent) 38%, var(--line));
background: linear-gradient(180deg, color-mix(in oklab, var(--accent-soft) 38%, var(--panel-strong)) 0%, color-mix(in oklab, var(--accent-soft) 20%, var(--panel-muted)) 100%);
box-shadow: inset 0 0 0 1px color-mix(in oklab, var(--accent) 18%, transparent);
}
.release-service-card.selected::before {
background: linear-gradient(90deg, color-mix(in oklab, var(--accent) 78%, var(--release-kind-color)) 0%, transparent 84%);
}
.release-service-card.selected .release-service-title strong {
color: var(--accent);
}
.release-service-card[data-kind="java"] {
--release-kind-color: var(--group-app);
}
.release-service-card[data-kind="golang"] {
--release-kind-color: var(--group-gateway);
}
.release-service-card[data-kind="frontend"] {
--release-kind-color: var(--group-pay);
}
.release-service-head {
display: flex;
justify-content: space-between;
gap: 10px;
align-items: flex-start;
}
.release-service-title {
min-width: 0;
}
.release-service-title strong,
.release-service-title small {
display: block;
}
.release-service-title strong {
font-size: 13px;
line-height: 1.3;
}
.release-service-tags {
display: flex;
gap: 8px;
flex-wrap: wrap;
align-items: center;
}
.release-service-tags .badge {
min-height: 24px;
padding: 0 8px;
font-size: 10px;
}
.release-service-grid {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 8px;
}
.release-service-metric {
display: grid;
gap: 4px;
min-width: 0;
padding: 8px 9px;
border: 1px solid var(--line);
border-radius: 12px;
background: linear-gradient(180deg, color-mix(in oklab, var(--panel-strong) 98%, var(--accent-soft)) 0%, var(--panel-strong) 100%);
}
.release-service-metric strong,
.release-service-metric span {
display: block;
min-width: 0;
font-size: 11px;
line-height: 1.4;
word-break: break-word;
}
.release-service-metric-wide {
grid-column: 1 / -1;
}
.precheck-strip {
display: flex;
gap: 8px;
flex-wrap: wrap;
align-items: center;
margin-top: 10px;
}
.release-log-preview {
display: grid;
gap: 10px;
margin-top: 12px;
padding: 12px;
border: 1px solid var(--line);
border-radius: 16px;
background: linear-gradient(180deg, color-mix(in oklab, var(--panel-muted) 96%, var(--panel-strong)) 0%, var(--panel-muted) 100%);
}
.release-log-preview-head {
display: flex;
justify-content: space-between;
gap: 10px;
align-items: center;
}
.release-log-preview-head strong {
font-size: 12px;
}
.release-log-snippets {
display: grid;
gap: 8px;
grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
}
.release-log-snippet {
display: grid;
gap: 4px;
min-height: 86px;
padding: 10px 11px;
border: 1px solid var(--line);
border-radius: 12px;
background: linear-gradient(180deg, color-mix(in oklab, var(--panel-strong) 96%, var(--accent-soft)) 0%, var(--panel-strong) 100%);
transition: transform 180ms ease, border-color 180ms ease, background 180ms ease;
}
.release-log-snippet:hover {
transform: translateY(-1px);
border-color: color-mix(in oklab, var(--accent) 20%, var(--line));
}
.release-log-snippet strong,
.release-log-snippet span,
.release-log-snippet p {
margin: 0;
}
.release-log-snippet strong {
font-size: 11px;
}
.release-log-snippet span {
color: var(--muted);
font-size: 10px;
text-transform: uppercase;
letter-spacing: 0.06em;
}
.release-log-snippet p {
color: var(--text);
font-size: 11px;
line-height: 1.45;
word-break: break-word;
}
.release-log-snippet.tone-bad {
border-color: color-mix(in oklab, var(--bad) 28%, var(--line));
background: color-mix(in oklab, var(--bad-soft) 44%, var(--panel-strong));
}
.release-table td strong {
display: block;
font-size: 12px;
}
.table-subtext {
display: block;
margin-top: 4px;
color: var(--muted);
font-size: 10px;
}
.inline-copy {
display: inline-flex;
gap: 6px;
align-items: center;
flex-wrap: wrap;
}
.inline-button {
min-height: 24px;
padding: 0 8px;
}
.table-check {
display: inline-flex;
gap: 6px;
align-items: center;
min-height: 26px;
padding: 0 8px;
border: 1px solid color-mix(in oklab, var(--line) 92%, var(--panel-strong));
border-radius: 999px;
background: linear-gradient(180deg, color-mix(in oklab, var(--panel-strong) 98%, var(--panel-muted)) 0%, var(--panel-strong) 100%);
box-shadow: inset 0 1px 0 color-mix(in oklab, var(--panel-strong) 68%, transparent);
color: var(--muted);
font-size: 11px;
cursor: pointer;
white-space: nowrap;
transition: border-color 180ms ease, background 180ms ease, color 180ms ease, box-shadow 180ms ease;
}
.table-check:hover {
border-color: color-mix(in oklab, var(--accent) 18%, var(--line));
}
.table-check.checked {
color: var(--accent);
border-color: color-mix(in oklab, var(--accent) 28%, var(--line));
background: linear-gradient(180deg, color-mix(in oklab, var(--accent-soft) 62%, var(--panel-strong)) 0%, color-mix(in oklab, var(--accent-soft) 38%, var(--panel-strong)) 100%);
box-shadow: inset 0 0 0 1px color-mix(in oklab, var(--accent) 14%, transparent);
}
.table-check span {
font-weight: 700;
}
.table-check input {
width: 14px;
height: 14px;
accent-color: var(--accent);
}
.table-empty-cell {
padding: 24px 10px;
color: var(--muted);
text-align: center;
}
.result-disclosure {
margin-top: 12px;
}
.result-disclosure summary {
cursor: pointer;
color: var(--text);
font-size: 12px;
font-weight: 700;
}
.bridge-panel {
display: grid;
gap: 10px;
padding: 10px 12px 12px;
background:
linear-gradient(180deg, color-mix(in oklab, var(--bad-soft) 14%, var(--panel-strong)) 0%, var(--panel) 100%);
}
.bridge-head {
display: flex;
justify-content: space-between;
gap: 10px;
align-items: center;
padding: 0 2px;
}
.bridge-head strong {
font-size: 12px;
letter-spacing: -0.02em;
}
.bridge-head span {
color: var(--muted);
font-size: 10px;
font-weight: 700;
letter-spacing: 0.08em;
text-transform: uppercase;
}
.bridge-list {
display: grid;
gap: 8px;
grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
}
.bridge-item {
position: relative;
overflow: hidden;
display: grid;
grid-template-columns: minmax(92px, 110px) minmax(0, 1fr) auto;
gap: 12px;
align-items: center;
width: 100%;
padding: 7px 10px;
border: 1px solid color-mix(in oklab, var(--bad) 24%, var(--line));
border-radius: 10px;
background:
linear-gradient(180deg, color-mix(in oklab, var(--bad-soft) 46%, var(--panel-strong)) 0%, color-mix(in oklab, var(--bad-soft) 62%, var(--panel-muted)) 100%);
color: var(--text);
font: inherit;
text-align: left;
cursor: pointer;
}
.bridge-item::before {
content: "";
position: absolute;
left: 0;
top: 0;
bottom: 0;
width: 3px;
background: color-mix(in oklab, var(--bad) 72%, var(--warn));
}
.bridge-item:hover {
border-color: color-mix(in oklab, var(--accent) 22%, var(--line));
background: linear-gradient(180deg, color-mix(in oklab, var(--accent-soft) 18%, var(--panel-strong)) 0%, var(--panel-strong) 100%);
}
@media (prefers-reduced-motion: reduce) {
*,
*::before,
*::after {
animation: none !important;
transition: none !important;
scroll-behavior: auto !important;
}
}
.bridge-item strong {
font-size: 11px;
color: var(--bad);
}
.bridge-item span {
color: var(--muted);
font-size: 10px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.bridge-item em {
color: var(--bad);
font-size: 10px;
font-style: normal;
font-weight: 700;
}
.host-fold-toggle {
display: inline-flex;
align-items: center;
gap: 10px;
width: fit-content;
min-height: 34px;
padding: 0 12px;
border: 1px solid var(--line);
border-radius: 999px;
background: linear-gradient(180deg, color-mix(in oklab, var(--panel-muted) 98%, var(--panel-strong)) 0%, var(--panel-muted) 100%);
color: var(--text);
font: inherit;
cursor: pointer;
box-shadow: inset 0 1px 0 color-mix(in oklab, var(--panel-strong) 70%, transparent);
transition: border-color 180ms ease, background 180ms ease, box-shadow 180ms ease;
}
.host-fold-toggle::before {
content: "";
width: 8px;
height: 8px;
border-radius: 999px;
background: color-mix(in oklab, var(--accent) 54%, var(--group-app));
box-shadow: 0 0 0 4px color-mix(in oklab, var(--accent-soft) 66%, transparent);
}
.host-fold-toggle:hover {
border-color: color-mix(in oklab, var(--accent) 20%, var(--line));
background: linear-gradient(180deg, color-mix(in oklab, var(--accent-soft) 16%, var(--panel-muted)) 0%, color-mix(in oklab, var(--panel-muted) 96%, var(--panel-strong)) 100%);
}
.host-fold-toggle strong {
color: var(--text);
font-size: 11px;
}
.host-fold-toggle small {
color: var(--muted);
font-size: 10px;
}
.infra-mini-card {
position: relative;
overflow: hidden;
display: flex;
flex-direction: column;
background: linear-gradient(180deg, color-mix(in oklab, var(--panel-strong) 94%, var(--accent-soft)) 0%, color-mix(in oklab, var(--panel) 98%, var(--panel-muted)) 100%);
}
.infra-mini-metrics {
margin-bottom: 12px;
}
.infra-card-action {
align-self: flex-start;
}
.infra-panel {
margin-top: 12px;
}
.nacos-service-grid {
display: grid;
gap: 12px;
margin-top: 14px;
}
.nacos-service-card {
position: relative;
padding: 14px;
border: 1px solid var(--line);
border-radius: 16px;
background: linear-gradient(180deg, color-mix(in oklab, var(--panel-muted) 96%, var(--panel-strong)) 0%, var(--panel-muted) 100%);
}
.table-wrap {
margin-top: 10px;
}
.table tbody tr:hover {
background: color-mix(in oklab, var(--accent-soft) 22%, var(--panel-strong));
}
.table tbody tr:last-child td,
.matrix-table tbody tr:last-child td {
border-bottom: 0;
}
.table.compact th,
.table.compact td {
padding: 8px 10px;
font-size: 12px;
}
.config-toolbar {
display: flex;
justify-content: space-between;
gap: 12px;
align-items: center;
margin-bottom: 14px;
}
.config-search {
min-width: 320px;
}
.restart-pills {
flex: 1 1 auto;
}
.restart-pills .config-item {
width: auto;
min-width: 220px;
}
.config-layout {
display: grid;
grid-template-columns: minmax(208px, 236px) minmax(0, 1fr);
gap: 10px;
}
.infra-panel > .panel-header {
margin-bottom: 14px;
padding-bottom: 10px;
border-bottom: 1px solid color-mix(in oklab, var(--line) 90%, var(--panel-strong));
}
.config-list {
display: grid;
gap: 6px;
max-height: calc(100vh - 196px);
overflow: auto;
padding-right: 4px;
}
.config-item {
display: block;
width: 100%;
padding: 12px 14px;
border: 1px solid var(--line);
border-radius: 14px;
background: var(--panel-muted);
color: var(--text);
text-align: left;
cursor: pointer;
transition: transform 180ms ease, border-color 180ms ease, background 180ms ease;
}
.config-item:hover {
transform: translateY(-1px);
}
.config-item.active {
border-color: color-mix(in oklab, var(--accent) 44%, var(--line-strong));
background: var(--accent-soft);
}
.config-item strong,
.config-item span,
.config-item small {
display: block;
}
.config-item strong {
font-size: 13px;
line-height: 1.35;
word-break: break-all;
}
.config-item span,
.config-item small,
.config-description {
color: var(--muted);
font-size: 12px;
}
.config-item span,
.config-description {
margin-top: 6px;
}
.config-description {
display: flex;
gap: 10px;
flex-wrap: wrap;
}
.config-editor {
display: flex;
flex-direction: column;
gap: 12px;
}
.config-empty,
.empty-panel {
display: flex;
align-items: center;
justify-content: center;
min-height: 88px;
padding: 14px;
border: 1px solid color-mix(in oklab, var(--line) 88%, var(--panel-strong));
border-radius: 16px;
background: linear-gradient(180deg, color-mix(in oklab, var(--panel-muted) 96%, var(--bg-soft)) 0%, color-mix(in oklab, var(--panel-muted) 88%, var(--panel-strong)) 100%);
color: var(--muted);
text-align: center;
box-shadow: inset 0 1px 0 color-mix(in oklab, var(--panel-strong) 68%, transparent);
}
.empty-panel.compact {
min-height: 60px;
padding: 12px;
}
[data-group="gateway"] {
--group-color: var(--group-gateway);
}
[data-group="app"] {
--group-color: var(--group-app);
}
[data-group="pay"] {
--group-color: var(--group-pay);
}
[data-group="nacos"],
[data-group="mongo"],
[data-group="infra"] {
--group-color: var(--group-infra);
}
.config-textarea {
width: 100%;
min-height: clamp(320px, 60vh, 680px);
padding: 12px 14px;
resize: vertical;
border-radius: 14px;
background: oklch(100% 0 0 / 0.86);
box-shadow: inset 0 1px 2px rgba(52, 71, 103, 0.08);
font-size: 12px;
line-height: 1.5;
}
.task-page-head {
margin-top: 12px;
padding: 12px 14px;
background: linear-gradient(180deg, color-mix(in oklab, var(--panel-strong) 96%, var(--accent-soft)) 0%, color-mix(in oklab, var(--panel) 98%, var(--panel-muted)) 100%);
box-shadow: var(--shadow-soft), inset 0 1px 0 color-mix(in oklab, var(--panel-strong) 76%, transparent);
}
.task-page-head::before,
.config-workbench-panel::before,
.release-action-bar::before,
.editor-toolbar::before {
content: "";
position: absolute;
left: 14px;
right: 14px;
top: 0;
height: 3px;
border-radius: 999px;
background: linear-gradient(90deg, color-mix(in oklab, var(--accent) 44%, var(--group-app)) 0%, transparent 78%);
opacity: 0.82;
}
.task-page-head .panel-header {
margin: 0;
align-items: center;
}
.task-page-head .panel-title h2 {
font-size: clamp(1.08rem, 1.12vw, 1.2rem);
}
.task-page-head .panel-title p {
margin-top: 5px;
font-size: 10px;
letter-spacing: 0.1em;
text-transform: uppercase;
}
.task-page-head .panel-meta .badge.neutral {
background: linear-gradient(180deg, color-mix(in oklab, var(--panel-muted) 98%, var(--panel-strong)) 0%, var(--panel-muted) 100%);
}
.release-section-nav {
display: flex;
gap: 6px;
align-items: center;
padding: 4px;
border: 1px solid color-mix(in oklab, var(--line) 92%, var(--panel-strong));
border-radius: 14px;
background: linear-gradient(180deg, color-mix(in oklab, var(--panel-muted) 96%, var(--panel-strong)) 0%, var(--panel-strong) 100%);
overflow: auto;
}
.mongo-admin-layout {
align-items: start;
}
.database-control-bar {
align-items: center;
}
.database-engine-switch {
position: relative;
padding-right: 10px;
}
.database-engine-switch::after {
content: "";
position: absolute;
top: 6px;
right: 0;
bottom: 6px;
width: 1px;
background: color-mix(in oklab, var(--line) 88%, transparent);
}
.database-workbench-panel {
position: relative;
background:
linear-gradient(180deg, color-mix(in oklab, var(--panel-strong) 97%, var(--accent-soft)) 0%, color-mix(in oklab, var(--panel) 98%, var(--panel-muted)) 100%);
box-shadow: var(--shadow-soft), inset 0 1px 0 color-mix(in oklab, var(--panel-strong) 74%, transparent);
}
.database-workbench-panel::before {
content: "";
position: absolute;
left: 16px;
right: 16px;
top: 0;
height: 3px;
border-radius: 999px;
background: linear-gradient(90deg, color-mix(in oklab, var(--accent) 44%, var(--group-app)) 0%, transparent 78%);
opacity: 0.84;
}
.mongo-taskbar-context {
flex-direction: row;
flex-wrap: wrap;
align-items: center;
min-width: 0;
gap: 8px;
}
.mongo-taskbar-context span {
color: inherit;
font-size: 11px;
letter-spacing: 0;
text-transform: none;
}
.mongo-sidebar {
top: 112px;
}
.mongo-admin-editor {
min-width: 0;
}
.mysql-workbench-panel {
background:
linear-gradient(180deg, color-mix(in oklab, var(--panel-strong) 96%, var(--group-pay)) 0%, color-mix(in oklab, var(--panel) 98%, var(--panel-muted)) 100%);
}
.mongo-workbench-panel {
background:
linear-gradient(180deg, color-mix(in oklab, var(--panel-strong) 96%, var(--group-infra)) 0%, color-mix(in oklab, var(--panel) 98%, var(--panel-muted)) 100%);
}
.mysql-workbench-head {
margin-bottom: 8px;
}
.mongo-workbench-head {
margin-bottom: 8px;
}
.mongo-workbench-head .metadata-strip,
.mysql-workbench-head .metadata-strip {
gap: 8px;
}
.mongo-workbench-head .metadata-strip span,
.mysql-workbench-head .metadata-strip span {
display: inline-flex;
align-items: center;
min-height: 24px;
padding: 0 8px;
border: 1px solid color-mix(in oklab, var(--line) 92%, var(--panel-strong));
border-radius: 999px;
background: linear-gradient(180deg, color-mix(in oklab, var(--panel-strong) 98%, var(--panel-muted)) 0%, var(--panel-strong) 100%);
color: color-mix(in oklab, var(--muted) 92%, var(--text));
}
.mongo-admin-subpanel,
.mongo-action-panel {
display: grid;
gap: 12px;
padding: 14px;
border: 1px solid var(--line);
border-radius: 18px;
background: color-mix(in oklab, var(--panel-muted) 94%, var(--panel-strong));
}
.mongo-panel-grid {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 12px;
}
.mongo-panel-grid.narrow {
grid-template-columns: minmax(0, 220px) minmax(0, 1fr);
}
.mongo-query-grid {
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
gap: 12px;
}
.mongo-json-textarea {
min-height: 180px;
}
.mongo-editor-textarea {
min-height: 320px;
}
.mongo-subtoolbar {
margin-top: 0;
}
.mongo-document-table td {
vertical-align: top;
}
.mongo-doc-preview,
.mongo-index-text {
margin: 0;
white-space: pre-wrap;
word-break: break-word;
font-size: 11px;
line-height: 1.45;
}
.mongo-doc-preview {
color: var(--muted);
}
.mongo-index-text {
color: var(--text);
}
.mongo-pager {
display: flex;
justify-content: flex-end;
gap: 8px;
align-items: center;
flex-wrap: wrap;
}
.mongo-check-grid {
display: flex;
gap: 12px;
flex-wrap: wrap;
}
.mongo-tag-list {
display: flex;
gap: 6px;
flex-wrap: wrap;
}
.mongo-mini-empty {
padding: 8px 10px;
border: 1px dashed var(--line);
border-radius: 10px;
color: var(--muted);
font-size: 11px;
text-align: left;
}
.mysql-overview-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(148px, 1fr));
gap: 8px;
margin-top: 10px;
}
.mongo-admin-overview-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(148px, 1fr));
gap: 8px;
margin-top: 10px;
}
.mongo-admin-overview-card,
.mysql-overview-card {
position: relative;
overflow: hidden;
display: grid;
gap: 4px;
min-height: 66px;
padding: 9px 10px;
border-radius: 14px;
background: linear-gradient(180deg, color-mix(in oklab, var(--panel-strong) 97%, var(--panel-muted)) 0%, var(--panel-muted) 100%);
box-shadow: inset 0 1px 0 color-mix(in oklab, var(--panel-strong) 74%, transparent);
}
.mongo-admin-overview-card::before,
.mysql-overview-card::before {
content: "";
position: absolute;
left: 0;
right: 0;
top: 0;
height: 3px;
background: linear-gradient(90deg, color-mix(in oklab, currentColor 42%, transparent) 0%, transparent 78%);
opacity: 0.8;
}
.mysql-overview-card small {
color: var(--muted);
font-size: 10px;
font-weight: 700;
letter-spacing: 0.08em;
text-transform: uppercase;
}
.mongo-admin-overview-card small,
.mongo-admin-overview-card span,
.mysql-overview-card span {
color: var(--muted);
font-size: 10px;
line-height: 1.45;
}
.mongo-admin-overview-card small {
font-weight: 700;
letter-spacing: 0.08em;
text-transform: uppercase;
}
.database-admin-layout {
grid-template-columns: minmax(216px, 236px) minmax(0, 1fr);
gap: 12px;
}
.mysql-sidebar-section {
display: grid;
gap: 8px;
padding: 6px 6px 8px;
border: 1px solid color-mix(in oklab, var(--line) 92%, var(--panel-strong));
border-radius: 12px;
background: linear-gradient(180deg, color-mix(in oklab, var(--panel-strong) 98%, var(--panel-muted)) 0%, var(--panel-strong) 100%);
box-shadow: inset 0 1px 0 color-mix(in oklab, var(--panel-strong) 70%, transparent);
}
.mongo-sidebar-section {
display: grid;
gap: 6px;
padding: 6px 6px 8px;
border: 1px solid color-mix(in oklab, var(--line) 92%, var(--panel-strong));
border-radius: 12px;
background: linear-gradient(180deg, color-mix(in oklab, var(--panel-strong) 98%, var(--panel-muted)) 0%, var(--panel-strong) 100%);
box-shadow: inset 0 1px 0 color-mix(in oklab, var(--panel-strong) 70%, transparent);
}
.mongo-sidebar-strip,
.mysql-sidebar-strip {
margin-bottom: 4px;
}
.mysql-admin-layout {
grid-template-columns: minmax(216px, 236px) minmax(0, 1fr);
gap: 10px;
}
.mongo-sidebar-list {
max-height: min(46vh, 520px);
}
.mysql-sidebar-list {
max-height: min(35vh, 360px);
}
.mysql-sidebar-section .section-caption-row {
padding: 0 2px;
}
.table-scroll-x {
overflow-x: auto;
}
.mysql-data-table {
min-width: max-content;
}
.mysql-row-action-cell {
min-width: 188px;
}
.mysql-sort-button {
display: inline-flex;
align-items: center;
gap: 6px;
padding: 0;
border: none;
background: transparent;
color: inherit;
font: inherit;
cursor: pointer;
}
.mysql-sort-indicator {
color: var(--accent);
font-size: 10px;
letter-spacing: 0.06em;
}
.mysql-cell {
max-width: 240px;
white-space: pre-wrap;
word-break: break-word;
vertical-align: top;
}
.mysql-cell.is-null {
color: var(--muted);
font-style: italic;
}
.mysql-data-table tbody tr.selected {
background: color-mix(in oklab, var(--accent-soft) 28%, var(--panel-strong));
}
.mysql-filter-grid {
display: grid;
grid-template-columns: repeat(4, minmax(0, 1fr));
gap: 12px;
}
.mysql-filter-list {
display: grid;
gap: 8px;
}
.mysql-filter-row {
display: grid;
grid-template-columns: minmax(0, 168px) minmax(0, 128px) minmax(0, 1fr) auto;
gap: 10px;
align-items: end;
padding: 8px;
border: 1px dashed color-mix(in oklab, var(--line) 90%, var(--panel-strong));
border-radius: 14px;
background: linear-gradient(180deg, color-mix(in oklab, var(--panel-strong) 98%, var(--panel-muted)) 0%, var(--panel-strong) 100%);
}
.mysql-filter-static {
display: flex;
align-items: center;
min-height: 36px;
padding: 0 12px;
border: 1px solid var(--line);
border-radius: 14px;
background: var(--panel-muted);
color: var(--muted);
font-size: 12px;
}
.mysql-query-stack {
display: grid;
gap: 6px;
padding: 8px;
border: 1px solid color-mix(in oklab, var(--line) 92%, var(--panel-strong));
border-radius: 16px;
background: linear-gradient(180deg, color-mix(in oklab, var(--panel-strong) 98%, var(--panel-muted)) 0%, color-mix(in oklab, var(--panel-muted) 96%, var(--panel-strong)) 100%);
box-shadow: inset 0 1px 0 color-mix(in oklab, var(--panel-strong) 72%, transparent);
}
.mongo-context-strip,
.mongo-result-strip {
margin-top: 0;
}
.mongo-cell-preview {
max-width: 420px;
white-space: pre-wrap;
word-break: break-word;
}
.mongo-aggregate-side {
align-content: start;
}
.mongo-danger-panel {
border-color: color-mix(in oklab, var(--bad) 22%, var(--line));
background: linear-gradient(180deg, color-mix(in oklab, var(--bad-soft) 20%, var(--panel-strong)) 0%, color-mix(in oklab, var(--panel-muted) 94%, var(--panel-strong)) 100%);
}
.mongo-danger-panel::before {
background: linear-gradient(90deg, color-mix(in oklab, var(--bad) 74%, var(--warn)) 0%, transparent 78%);
}
.action-group-stack {
display: grid;
gap: 8px;
}
.config-group-toggle.active {
border-color: color-mix(in oklab, var(--accent) 20%, var(--line));
background: linear-gradient(180deg, color-mix(in oklab, var(--accent-soft) 28%, var(--panel-strong)) 0%, var(--panel-strong) 100%);
}
.mysql-checkbox-grid {
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
gap: 8px;
}
.mysql-checkbox {
display: flex;
align-items: center;
gap: 8px;
min-height: 40px;
padding: 0 12px;
border: 1px solid var(--line);
border-radius: 14px;
background: var(--panel-muted);
font-size: 12px;
}
.mysql-checkbox input {
width: 16px;
height: 16px;
}
.mysql-shortcut-grid,
.mysql-tag-list,
.mysql-result-meta {
display: flex;
gap: 8px;
flex-wrap: wrap;
}
.mysql-result-toolbar {
margin-top: 10px;
}
.mysql-write-grid,
.mysql-schema-grid {
align-items: start;
}
.mysql-action-panel {
position: relative;
overflow: hidden;
border-radius: 16px;
background: linear-gradient(180deg, color-mix(in oklab, var(--panel-strong) 98%, var(--panel-muted)) 0%, color-mix(in oklab, var(--panel-muted) 94%, var(--panel-strong)) 100%);
box-shadow: inset 0 1px 0 color-mix(in oklab, var(--panel-strong) 72%, transparent);
}
.mysql-action-panel::before,
.mysql-console-panel::before,
.mysql-console-result::before,
.mysql-ddl-panel::before {
content: "";
position: absolute;
left: 0;
right: 0;
top: 0;
height: 3px;
background: linear-gradient(90deg, color-mix(in oklab, var(--accent) 48%, var(--group-pay)) 0%, transparent 78%);
opacity: 0.82;
}
.mysql-action-panel.tone-write::before {
background: linear-gradient(90deg, color-mix(in oklab, var(--ok) 72%, var(--accent)) 0%, transparent 78%);
}
.mysql-action-panel.tone-edit::before {
background: linear-gradient(90deg, color-mix(in oklab, var(--warn) 74%, var(--accent)) 0%, transparent 78%);
}
.mysql-action-panel.tone-structure::before {
background: linear-gradient(90deg, color-mix(in oklab, var(--group-app) 64%, var(--accent)) 0%, transparent 78%);
}
.mysql-console-panel,
.mysql-console-result,
.mysql-ddl-panel {
position: relative;
overflow: hidden;
}
.mysql-console-panel {
background: linear-gradient(180deg, color-mix(in oklab, var(--panel-muted) 94%, var(--panel-strong)) 0%, color-mix(in oklab, var(--panel-strong) 98%, var(--panel-muted)) 100%);
}
.mysql-shortcut-grid {
padding-bottom: 2px;
}
.mysql-shortcut-grid .refresh {
min-height: 28px;
}
.mysql-console-textarea {
min-height: 300px;
border-color: color-mix(in oklab, var(--line-strong) 76%, transparent);
background: oklch(22% 0.01 240 / 0.98);
color: oklch(91% 0.01 230);
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.04);
}
.mysql-ddl-textarea {
min-height: 240px;
background: linear-gradient(180deg, color-mix(in oklab, var(--panel-strong) 96%, var(--panel-muted)) 0%, color-mix(in oklab, var(--panel-muted) 92%, var(--panel-strong)) 100%);
}
.mysql-result-strip {
background: linear-gradient(180deg, color-mix(in oklab, var(--panel-strong) 96%, var(--accent-soft)) 0%, var(--panel-muted) 100%);
}
.action-group-tight {
gap: 6px;
}
.config-actions {
display: flex;
justify-content: space-between;
gap: 12px;
align-items: center;
flex-wrap: wrap;
}
.update-form-grid {
display: grid;
grid-template-columns: repeat(4, minmax(0, 1fr));
gap: 12px;
margin-top: 14px;
}
.update-field,
.update-check {
display: flex;
flex-direction: column;
gap: 8px;
}
.update-field span,
.update-check span {
color: var(--muted);
font-size: 12px;
}
.update-check {
justify-content: center;
padding: 12px 14px;
border: 1px solid var(--line);
border-radius: 14px;
background: var(--panel-muted);
}
.update-check input {
width: 18px;
height: 18px;
}
.operation-meta {
margin-top: 14px;
}
.update-log-panel {
margin-top: 14px;
padding: 16px;
border: 1px solid var(--line);
border-radius: 18px;
background: var(--panel-muted);
}
.update-log-head {
margin-bottom: 12px;
}
.update-log-output {
margin: 0;
min-height: 180px;
max-height: 420px;
overflow: auto;
padding: 16px;
border: 1px solid color-mix(in oklab, var(--line-strong) 78%, transparent);
border-radius: 14px;
background: oklch(22% 0.01 240 / 0.98);
color: oklch(91% 0.01 230);
font-size: 12px;
line-height: 1.55;
white-space: pre-wrap;
word-break: break-word;
}
.log-viewer-overlay {
position: fixed;
inset: 0;
z-index: 48;
display: grid;
place-items: center;
padding: 28px 20px;
background: color-mix(in oklab, var(--text) 14%, transparent);
backdrop-filter: blur(8px);
}
.log-viewer {
display: grid;
grid-template-rows: auto auto minmax(0, 1fr);
gap: 12px;
width: min(1120px, 100%);
max-height: min(88vh, 920px);
padding: 16px;
border: 1px solid var(--line);
border-radius: 22px;
background: color-mix(in oklab, var(--panel-strong) 96%, var(--panel-muted));
box-shadow: 0 24px 64px rgba(29, 42, 68, 0.24);
}
.log-viewer-head {
display: flex;
justify-content: space-between;
gap: 14px;
align-items: flex-start;
}
.log-viewer-toolbar {
display: flex;
gap: 8px;
align-items: center;
flex-wrap: wrap;
}
.log-viewer-output {
margin: 0;
min-height: 280px;
max-height: calc(88vh - 176px);
overflow: auto;
padding: 16px;
border: 1px solid color-mix(in oklab, var(--line-strong) 78%, transparent);
border-radius: 16px;
background: oklch(22% 0.01 240 / 0.98);
color: oklch(91% 0.01 230);
font-size: 12px;
line-height: 1.58;
white-space: pre-wrap;
word-break: break-word;
}
.badge {
display: inline-flex;
align-items: center;
min-height: 28px;
padding: 0 10px;
border: 1px solid var(--line);
border-radius: 999px;
background: var(--panel-muted);
font-size: 11px;
font-weight: 600;
letter-spacing: 0.01em;
box-shadow: inset 0 1px 0 color-mix(in oklab, var(--panel-strong) 66%, transparent);
}
.badge.neutral {
color: color-mix(in oklab, var(--muted) 92%, var(--text));
border-color: color-mix(in oklab, var(--line) 90%, var(--panel-strong));
background: color-mix(in oklab, var(--panel-muted) 94%, var(--panel-strong));
}
.badge.ok,
.ok-text,
.tone-ok {
color: var(--ok);
}
.badge.warn,
.tone-warn {
color: var(--warn);
}
.badge.bad,
.bad-text,
.tone-bad {
color: var(--bad);
}
.badge.ok {
border-color: color-mix(in oklab, var(--ok) 26%, var(--line));
background: color-mix(in oklab, var(--ok-soft) 32%, var(--panel-muted));
}
.badge.warn {
border-color: color-mix(in oklab, var(--warn) 42%, var(--line));
background: color-mix(in oklab, var(--warn-soft) 70%, var(--panel-muted));
}
.badge.bad {
border-color: color-mix(in oklab, var(--bad) 42%, var(--line));
background: color-mix(in oklab, var(--bad-soft) 70%, var(--panel-muted));
}
.tone-neutral {
color: var(--text);
}
.metric-error {
margin: 0;
color: var(--bad);
font-size: 12px;
word-break: break-word;
}
.metric-error.warn {
color: var(--warn);
}
.mono,
.detail-secondary {
font-family: "IBM Plex Mono", "SFMono-Regular", monospace;
}
@media (max-width: 1320px) {
.loading-band-grid {
grid-template-columns: repeat(3, minmax(0, 1fr));
}
.loading-panels {
grid-template-columns: 1fr;
}
.topbar {
grid-template-columns: 1fr;
}
.service-layout-open {
grid-template-columns: 1fr;
}
.bridge-list {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
.overview-infra-grid {
grid-template-columns: 1fr;
}
.service-meta-grid,
.summary-grid,
.metric-grid,
.infra-mini-metrics,
.config-meta-grid {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
.infra-overview-grid,
.mongo-group-grid,
.release-status-grid,
.release-log-snippets,
.overview-calm-grid,
.release-service-grid {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
.update-form-grid {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
.mongo-panel-grid,
.mongo-query-grid,
.mysql-filter-grid {
grid-template-columns: 1fr;
}
.mysql-filter-row,
.mysql-checkbox-grid {
grid-template-columns: 1fr;
}
}
@media (max-width: 1040px) {
.control-bar {
position: static;
}
.topbar-nav,
.topbar-status {
width: 100%;
justify-content: flex-start;
}
.detail-panel {
position: static;
max-height: none;
}
.config-sidebar {
position: static;
max-height: none;
}
.summary-cards {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 6px;
}
.loading-band-grid {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
.host-strip-main {
grid-template-columns: 1fr;
}
.config-layout {
grid-template-columns: 1fr;
}
.mongo-panel-grid.narrow {
grid-template-columns: 1fr;
}
.config-list {
max-height: 280px;
}
.mysql-sidebar-list {
max-height: 280px;
}
.sticky-toolbar,
.sticky-release-strip {
position: static;
}
.release-status-grid,
.infra-overview-grid,
.mongo-group-grid,
.release-log-snippets,
.overview-calm-grid,
.release-service-grid {
grid-template-columns: 1fr;
}
}
@media (max-width: 720px) {
body.auth-page {
padding: 20px 12px;
}
.auth-shell {
width: 100%;
margin-top: 72px;
}
.auth-panel {
padding: 18px;
}
.shell {
padding: 14px 12px 28px;
}
.boot-indicator {
top: 14px;
width: calc(100% - 24px);
justify-content: center;
}
.topbar {
position: static;
padding: 14px;
}
.control-bar,
.config-toolbar,
.config-actions,
.panel-header {
flex-direction: column;
align-items: stretch;
}
.control-group,
.control-group-spread,
.density-switch,
.action-group,
.host-tags,
.restart-pills {
width: 100%;
}
.search,
.config-search {
min-width: 100%;
}
.summary-cards,
.bridge-list,
.service-meta-grid,
.summary-grid,
.metric-grid,
.infra-mini-metrics,
.config-meta-grid,
.update-form-grid,
.mongo-panel-grid,
.mongo-query-grid,
.mysql-filter-grid,
.mysql-checkbox-grid,
.release-status-grid,
.infra-overview-grid,
.mongo-group-grid,
.overview-calm-grid,
.release-service-grid {
grid-template-columns: 1fr;
}
.status-band-item {
border-right: 0;
border-bottom: 1px solid var(--line);
justify-content: flex-start;
}
.status-band-item:last-child {
border-bottom: 0;
}
.service-layout-open {
grid-template-columns: 1fr;
}
.host-inline-metrics,
.host-inline-state {
width: 100%;
}
.section-caption-row {
align-items: flex-start;
}
.entry-grid {
grid-template-columns: 1fr;
}
.host-service-pill,
.restart-pills .config-item {
width: 100%;
}
.taskbar-context,
.taskbar-inline,
.metadata-strip,
.mongo-pager,
.precheck-strip,
.compact-workbench-head,
.activity-item-side,
.release-action-bar,
.release-action-summary,
.log-viewer-head,
.log-viewer-toolbar,
.entry-actions {
width: 100%;
text-align: left;
}
.editor-toolbar,
.activity-item {
grid-template-columns: 1fr;
}
.mysql-filter-row {
grid-template-columns: 1fr;
}
.log-viewer-overlay {
padding: 14px 12px;
}
.log-viewer {
max-height: calc(100vh - 28px);
padding: 14px;
}
.release-action-bar,
.log-viewer-head,
.compact-workbench-head,
.release-service-head {
flex-direction: column;
align-items: stretch;
}
.diff-row {
grid-template-columns: 34px 34px 22px minmax(0, 1fr);
gap: 8px;
padding: 6px 8px;
}
}