.dashboard {
display: grid;
gap: var(--mcpui-space-4);
container-type: inline-size;
container-name: dashboard;
}
.layout-grid {
grid-template-columns: repeat(12, 1fr);
}
.layout-grid > .dashboard-section {
grid-column: span var(--section-span, 12);
}
@container dashboard (max-width: 34rem) {
.layout-grid > .dashboard-section {
grid-column: 1 / -1;
}
}
.layout-tabs:not(.tabs-ready) .dashboard-section:not(:first-child) {
display: none;
}
.dashboard-section[hidden] {
display: none;
}
.tabs-nav {
display: flex;
flex-wrap: wrap;
gap: var(--mcpui-space-1);
border-bottom: 1px solid var(--mcpui-border);
}
.tab-btn {
padding: var(--mcpui-space-2) var(--mcpui-space-4);
border: none;
border-bottom: 2px solid transparent;
background: none;
color: var(--mcpui-ink-faint);
font-size: var(--mcpui-text-sm);
font-weight: 500;
cursor: pointer;
transition: color var(--mcpui-duration) var(--mcpui-ease),
border-color var(--mcpui-duration) var(--mcpui-ease);
}
.tab-btn:hover {
color: var(--mcpui-ink);
}
.tab-btn.active {
color: var(--mcpui-accent);
border-bottom-color: var(--mcpui-accent);
}
.dashboard-section {
padding: var(--mcpui-space-4) var(--mcpui-space-5) var(--mcpui-space-5);
border: 1px solid var(--mcpui-glass-border);
border-radius: var(--mcpui-radius-card);
background: var(--mcpui-glass-bg);
background-image: var(--mcpui-glass-specular);
box-shadow: var(--mcpui-shadow-card), var(--mcpui-shadow-inset);
-webkit-backdrop-filter: blur(var(--mcpui-glass-blur)) saturate(140%);
backdrop-filter: blur(var(--mcpui-glass-blur)) saturate(140%);
}
.section-title {
margin-bottom: var(--mcpui-space-4);
color: var(--mcpui-ink-faint);
font-family: var(--mcpui-font-heading);
font-size: var(--mcpui-text-xs);
font-weight: 600;
letter-spacing: var(--mcpui-tracking-wide);
text-transform: uppercase;
}
.metrics-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(min(9rem, 100%), 1fr));
gap: var(--mcpui-space-3);
}
.metric-card {
position: relative;
padding: var(--mcpui-space-3) var(--mcpui-space-4);
border: 1px solid var(--mcpui-border);
border-left: 2px solid var(--mcpui-border-strong);
border-radius: var(--mcpui-radius-inner);
background: var(--mcpui-surface-sunken);
}
.metric-value {
display: flex;
align-items: baseline;
gap: var(--mcpui-space-2);
color: var(--mcpui-ink);
font-family: var(--mcpui-font-heading);
font-size: var(--mcpui-text-figure);
font-weight: 600;
line-height: var(--mcpui-leading-tight);
letter-spacing: var(--mcpui-tracking-tight);
font-variant-numeric: tabular-nums;
}
.metric-icon {
font-size: var(--mcpui-text-md);
}
.metric-label {
margin-top: var(--mcpui-space-2);
color: var(--mcpui-ink-dim);
font-size: var(--mcpui-text-xs);
letter-spacing: var(--mcpui-tracking-wide);
text-transform: uppercase;
}
.metric-subtitle {
margin-top: var(--mcpui-space-1);
color: var(--mcpui-ink-faint);
font-size: var(--mcpui-text-xs);
}
.metric-status-success { border-left-color: var(--mcpui-success); }
.metric-status-warning { border-left-color: var(--mcpui-warning); }
.metric-status-error { border-left-color: var(--mcpui-danger); }
.metric-status-info { border-left-color: var(--mcpui-info); }
.chart-container {
width: 100%;
}
.dashboard-section .chart {
padding: 0;
border: none;
background: none;
box-shadow: none;
}
.section-table-wrap {
overflow-x: auto;
overscroll-behavior-x: contain;
}
.section-table {
width: 100%;
border-collapse: separate;
border-spacing: 0;
font-size: var(--mcpui-text-sm);
}
.section-table th,
.section-table td {
padding: var(--mcpui-space-2) var(--mcpui-space-3);
text-align: left;
border-bottom: 1px solid var(--mcpui-border);
}
.section-table tbody tr:last-child td {
border-bottom: none;
}
.section-table th {
color: var(--mcpui-ink-faint);
font-size: var(--mcpui-text-xs);
font-weight: 600;
letter-spacing: var(--mcpui-tracking-wide);
text-transform: uppercase;
white-space: nowrap;
}
.section-table td {
color: var(--mcpui-ink);
font-variant-numeric: tabular-nums;
}
.status-list {
display: flex;
flex-direction: column;
gap: var(--mcpui-space-2);
}
.status-item {
display: flex;
align-items: center;
gap: var(--mcpui-space-3);
padding: var(--mcpui-space-2) var(--mcpui-space-3);
border: 1px solid var(--mcpui-border);
border-radius: var(--mcpui-radius-inner);
background: var(--mcpui-surface-sunken);
}
.status-indicator {
width: 0.5rem;
height: 0.5rem;
border-radius: var(--mcpui-radius-pill);
flex: none;
box-shadow: 0 0 0 3px color-mix(in oklab, currentColor 22%, transparent);
}
.status-ok { background: var(--mcpui-success); color: var(--mcpui-success); }
.status-warning { background: var(--mcpui-warning); color: var(--mcpui-warning); }
.status-error { background: var(--mcpui-danger); color: var(--mcpui-danger); }
.status-unknown { background: var(--mcpui-ink-faint); color: var(--mcpui-ink-faint); }
.status-name {
flex: 1;
color: var(--mcpui-ink);
font-weight: 500;
}
.status-value {
color: var(--mcpui-ink-dim);
font-size: var(--mcpui-text-xs);
letter-spacing: var(--mcpui-tracking-wide);
text-transform: uppercase;
}
.status-uptime {
color: var(--mcpui-ink-faint);
font-size: var(--mcpui-text-xs);
font-variant-numeric: tabular-nums;
}
.list-group + .list-group {
margin-top: var(--mcpui-space-4);
}
.list-group-title {
margin-bottom: var(--mcpui-space-2);
color: var(--mcpui-ink-dim);
font-size: var(--mcpui-text-sm);
font-weight: 600;
}
.section-list {
margin: 0;
padding: 0;
list-style: none;
}
.section-list li {
display: flex;
align-items: center;
gap: var(--mcpui-space-3);
padding: var(--mcpui-space-2) 0;
border-bottom: 1px solid var(--mcpui-border);
}
.section-list li:last-child {
border-bottom: none;
}
.list-rank {
min-width: 1.25rem;
color: var(--mcpui-ink-faint);
font-size: var(--mcpui-text-xs);
font-variant-numeric: tabular-nums;
}
.list-label {
flex: 1;
color: var(--mcpui-ink);
font-weight: 500;
}
.list-value {
color: var(--mcpui-ink-dim);
font-size: var(--mcpui-text-sm);
font-variant-numeric: tabular-nums;
}
.list-badge {
padding: 0.1rem var(--mcpui-space-2);
border: 1px solid var(--mcpui-accent-rim);
border-radius: var(--mcpui-radius-pill);
background: var(--mcpui-accent-wash);
color: var(--mcpui-ink-dim);
font-size: var(--mcpui-text-xs);
}
.timeline {
margin: 0;
padding-left: var(--mcpui-space-5);
border-left: 1px solid var(--mcpui-border);
list-style: none;
}
.timeline-event {
position: relative;
padding: var(--mcpui-space-2) 0;
}
.timeline-event::before {
content: "";
position: absolute;
left: calc(var(--mcpui-space-5) * -1 - 0.1875rem);
top: 0.85rem;
width: 0.4375rem;
height: 0.4375rem;
border-radius: var(--mcpui-radius-pill);
background: var(--mcpui-accent);
box-shadow: 0 0 0 3px var(--mcpui-accent-wash);
}
.timeline-timestamp {
margin-right: var(--mcpui-space-2);
color: var(--mcpui-ink-faint);
font-size: var(--mcpui-text-xs);
font-variant-numeric: tabular-nums;
}
.timeline-label {
color: var(--mcpui-ink);
font-weight: 500;
}
.timeline-description {
margin-top: var(--mcpui-space-1);
max-width: 68ch;
color: var(--mcpui-ink-dim);
font-size: var(--mcpui-text-sm);
}
.section-text {
max-width: 68ch;
color: var(--mcpui-ink-dim);
line-height: var(--mcpui-leading-normal);
}
.section-empty {
padding: var(--mcpui-space-5) var(--mcpui-space-4);
text-align: center;
color: var(--mcpui-ink-dim);
font-size: var(--mcpui-text-sm);
}
.metric-value {
overflow-wrap: anywhere;
}
.section-table th.sortable {
cursor: pointer;
user-select: none;
}
.section-table th.sortable:hover {
color: var(--mcpui-ink);
}
.section-table th.sort-asc,
.section-table th.sort-desc {
color: var(--mcpui-accent);
}
.section-table th.sort-asc::after { content: ' \25B2'; font-size: 0.625rem; }
.section-table th.sort-desc::after { content: ' \25BC'; font-size: 0.625rem; }
.section-table th.sortable:focus-visible {
outline: 2px solid var(--mcpui-accent);
outline-offset: -2px;
}
.dashboard-toolbar {
display: flex;
flex-wrap: wrap;
align-items: center;
gap: var(--mcpui-space-3);
}
.refresh-btn {
padding: var(--mcpui-space-2) var(--mcpui-space-3);
border: 1px solid var(--mcpui-border);
border-radius: var(--mcpui-radius-inner);
background: var(--mcpui-surface);
color: var(--mcpui-ink);
font-size: var(--mcpui-text-sm);
cursor: pointer;
transition: border-color var(--mcpui-duration) var(--mcpui-ease),
background var(--mcpui-duration) var(--mcpui-ease);
}
.refresh-btn:hover:not(:disabled) {
border-color: var(--mcpui-accent-rim);
background: var(--mcpui-accent-wash);
}
.refresh-btn:disabled { opacity: 0.6; cursor: progress; }
.refresh-status {
font-size: var(--mcpui-text-sm);
color: var(--mcpui-ink-dim);
}
.section-table tr.is-drillable {
cursor: pointer;
}
.section-table tr.is-drillable:hover,
.section-table tr.is-drillable:focus-visible {
background: var(--mcpui-accent-wash);
outline: none;
}