2026-07-11 02:26:23 +08:00

453 lines
8.7 KiB
CSS

.overview-charts {
display: grid;
grid-template-columns: repeat(3, minmax(260px, 1fr));
gap: var(--space-4);
margin-top: var(--space-4);
}
.workspace-entry-section {
margin-top: var(--space-4);
}
.workspace-entry-head {
display: flex;
margin-bottom: var(--space-3);
}
.workspace-entry-head h2 {
margin: 0;
color: var(--text-primary);
font-size: var(--admin-font-size-lg);
font-weight: 750;
}
.workspace-entry-grid {
display: grid;
grid-template-columns: repeat(2, minmax(240px, 1fr));
gap: var(--space-3);
}
.workspace-entry-card {
display: grid;
min-height: 128px;
align-content: start;
gap: var(--space-1);
padding: var(--space-4);
border: 1px solid var(--border);
border-radius: var(--radius-card);
background: var(--bg-card);
color: var(--text-secondary);
cursor: pointer;
font: inherit;
text-decoration: none;
text-align: left;
transition:
border-color var(--motion-base) var(--ease-standard),
box-shadow var(--motion-base) var(--ease-standard),
transform var(--motion-base) var(--ease-emphasized);
}
.workspace-entry-card:hover,
.workspace-entry-card:focus-visible {
border-color: var(--primary-border-strong);
box-shadow: var(--shadow-panel);
transform: translateY(-2px);
}
.workspace-entry-card:focus-visible {
outline: 2px solid var(--primary);
outline-offset: 2px;
}
.workspace-entry-card__icon {
display: inline-flex;
width: 32px;
height: 32px;
align-items: center;
justify-content: center;
border-radius: var(--radius-control);
background: var(--primary-surface);
color: var(--primary);
}
.workspace-entry-card__group {
margin-top: var(--space-1);
color: var(--text-tertiary);
font-size: var(--admin-font-size-sm);
}
.workspace-entry-card strong {
min-width: 0;
overflow: hidden;
color: var(--text-primary);
font-size: var(--admin-font-size);
font-weight: 750;
text-overflow: ellipsis;
white-space: nowrap;
}
.workspace-entry-empty {
display: flex;
min-height: 88px;
align-items: center;
padding: var(--space-4);
border: 1px dashed var(--border);
border-radius: var(--radius-card);
background: var(--bg-card);
color: var(--text-tertiary);
}
.chart-card {
min-height: 304px;
padding: var(--space-5);
animation: panel-enter var(--motion-slow) var(--ease-emphasized) both;
transition:
border-color var(--motion-base) var(--ease-standard),
box-shadow var(--motion-base) var(--ease-standard),
transform var(--motion-base) var(--ease-emphasized);
}
.chart-card--compact {
min-height: 150px;
}
.chart-card--compact .line-chart {
height: 78px;
}
.chart-card--compact .card-head {
margin-bottom: var(--space-2);
}
.chart-card--compact .segmented {
display: none;
}
.card-head {
display: flex;
align-items: center;
justify-content: space-between;
gap: var(--space-3);
margin-bottom: var(--space-5);
}
.segmented {
display: inline-flex;
height: 30px;
padding: calc(var(--space-1) / 2);
border: 1px solid var(--border);
border-radius: var(--radius-control);
background: var(--bg-card-strong);
}
.segment {
min-width: 52px;
padding: 0 var(--space-3);
border-radius: var(--radius-control);
background: transparent;
color: var(--text-tertiary);
cursor: pointer;
font-size: var(--admin-font-size);
transition:
background var(--motion-fast) var(--ease-standard),
color var(--motion-fast) var(--ease-standard),
transform var(--motion-base) var(--ease-emphasized);
}
.segment:hover {
transform: translateY(-1px);
}
.segment--active {
background: var(--primary-surface);
color: var(--text-primary);
}
.line-chart {
width: 100%;
height: 216px;
opacity: 0;
animation: panel-enter 420ms var(--ease-emphasized) 120ms both;
}
.echart {
width: 100%;
min-width: 0;
}
.line-chart__grid {
stroke: var(--chart-grid);
stroke-width: 1;
}
.line-chart__area {
opacity: 0.18;
}
.line-chart__line {
fill: none;
stroke-width: 2;
stroke-linecap: round;
stroke-linejoin: round;
}
.donut-wrap {
display: grid;
grid-template-columns: 140px 1fr;
align-items: center;
gap: var(--space-6);
min-height: 216px;
}
.donut-echart {
width: 140px;
height: 140px;
opacity: 0;
animation: panel-enter 420ms var(--ease-emphasized) 120ms both;
}
.donut {
display: grid;
width: 140px;
height: 140px;
place-items: center;
border-radius: var(--radius-pill);
}
.donut-core {
display: grid;
width: 78px;
height: 78px;
place-items: center;
border-radius: var(--radius-pill);
background: var(--bg-card);
color: var(--text-secondary);
font-size: var(--admin-font-size);
}
.donut-core strong {
display: block;
color: var(--text-primary);
font-size: var(--admin-font-size);
line-height: 1;
}
.donut-legend {
display: grid;
gap: var(--space-3);
}
.legend-row {
display: grid;
grid-template-columns: 8px 1fr auto;
align-items: center;
gap: var(--space-3);
color: var(--text-secondary);
font-size: var(--admin-font-size);
}
.legend-row strong {
color: var(--text-primary);
}
.legend-dot {
width: 8px;
height: 8px;
border-radius: var(--radius-pill);
}
.legend-dot--success {
background: var(--success);
}
.legend-dot--danger {
background: var(--danger);
}
.legend-dot--stopped {
background: var(--stopped);
}
.bar-chart {
display: block;
width: 100%;
height: 216px;
opacity: 0;
animation: panel-enter 420ms var(--ease-emphasized) 120ms both;
}
.alert-list {
display: grid;
gap: var(--space-3);
}
.alert-item {
display: grid;
grid-template-columns: 8px 1fr auto;
align-items: center;
gap: var(--space-3);
min-height: 42px;
animation: row-enter var(--motion-slow) var(--ease-emphasized) both;
transition:
background var(--motion-base) var(--ease-standard),
transform var(--motion-base) var(--ease-emphasized);
}
.alert-item:nth-child(2) {
animation-delay: 50ms;
}
.alert-item:nth-child(3) {
animation-delay: 100ms;
}
.alert-item:hover {
transform: translateX(2px);
}
.alert-dot {
width: 8px;
height: 8px;
border-radius: var(--radius-pill);
}
.alert-dot--danger {
background: var(--danger);
}
.alert-dot--warning {
background: var(--warning);
}
.alert-dot--info {
background: var(--info);
}
.alert-name {
color: var(--text-primary);
font-size: var(--admin-font-size);
font-weight: 620;
}
.alert-desc,
.alert-time {
color: var(--text-tertiary);
font-size: var(--admin-font-size);
}
.table-card {
margin-top: var(--space-4);
overflow: hidden;
animation: panel-enter var(--motion-slow) var(--ease-emphasized) both;
transition:
border-color var(--motion-base) var(--ease-standard),
box-shadow var(--motion-base) var(--ease-standard),
transform var(--motion-base) var(--ease-emphasized);
}
.split-grid {
display: grid;
grid-template-columns: 280px minmax(0, 1fr);
gap: var(--space-4);
margin-top: var(--space-4);
}
.server-rail {
overflow: hidden;
animation: panel-enter var(--motion-slow) var(--ease-emphasized) both;
transition:
border-color var(--motion-base) var(--ease-standard),
box-shadow var(--motion-base) var(--ease-standard),
transform var(--motion-base) var(--ease-emphasized);
}
.server-list {
display: grid;
gap: 0;
padding: var(--space-2);
}
.server-item {
display: grid;
grid-template-columns: 8px 1fr auto;
align-items: center;
gap: var(--space-3);
width: 100%;
min-height: 64px;
padding: var(--space-3);
border-radius: var(--radius-control);
background: transparent;
color: var(--text-primary);
cursor: pointer;
text-align: left;
animation: row-enter var(--motion-slow) var(--ease-emphasized) both;
transition:
background var(--motion-base) var(--ease-standard),
transform var(--motion-base) var(--ease-emphasized);
}
.server-item:hover {
background: var(--bg-hover);
transform: translateX(3px);
}
.server-item:nth-child(2) {
animation-delay: 40ms;
}
.server-item:nth-child(3) {
animation-delay: 80ms;
}
.server-item:nth-child(4) {
animation-delay: 120ms;
}
.server-item strong,
.server-item small {
display: block;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.server-item small {
margin-top: var(--space-1);
color: var(--text-tertiary);
font-size: var(--admin-font-size);
}
.server-status {
width: 8px;
height: 8px;
border-radius: var(--radius-pill);
background: var(--stopped);
}
.server-status--running {
background: var(--success);
}
.server-status--warning {
background: var(--warning);
}
.server-status--error {
background: var(--danger);
}
.link-button {
background: transparent;
color: var(--primary);
cursor: pointer;
font-size: var(--admin-font-size);
}
.alert-strip {
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
gap: var(--space-4);
margin-top: var(--space-4);
padding-bottom: var(--space-2);
}