.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); }