a11621b21f
Mirror mo/atc-GPU layout with config/, docs/, scripts/ for Gitea deploy.
630 lines
20 KiB
CSS
630 lines
20 KiB
CSS
@tailwind base;
|
|
@tailwind components;
|
|
@tailwind utilities;
|
|
|
|
:root,
|
|
.light {
|
|
--bg-1: #e8f4fc;
|
|
--bg-2: #f4f7fb;
|
|
--bg-3: #f5f0ff;
|
|
--grid-color: rgba(8, 145, 178, 0.06);
|
|
--surface: rgba(255, 255, 255, 0.72);
|
|
--surface-strong: rgba(255, 255, 255, 0.94);
|
|
--surface-elevated: #f1f5f9;
|
|
--surface-muted: #e2e8f0;
|
|
--text: #0f172a;
|
|
--text-muted: #64748b;
|
|
--text-faint: #94a3b8;
|
|
--border: rgba(15, 23, 42, 0.09);
|
|
--accent: #0891b2;
|
|
--accent-gpu: #65a30d;
|
|
--accent-secondary: #7c3aed;
|
|
--glow: rgba(8, 145, 178, 0.22);
|
|
--status-ok: #16a34a;
|
|
--status-ok-bg: rgba(22, 163, 74, 0.1);
|
|
--status-warn: #d97706;
|
|
--status-warn-bg: rgba(217, 119, 6, 0.1);
|
|
--status-down: #dc2626;
|
|
--status-down-bg: rgba(220, 38, 38, 0.08);
|
|
--shadow: 0 12px 40px rgba(15, 40, 80, 0.09);
|
|
--floor-bg: linear-gradient(180deg, #f1f5f9 0%, #ffffff 100%);
|
|
--aurora-1: rgba(8, 145, 178, 0.12);
|
|
--aurora-2: rgba(124, 58, 237, 0.08);
|
|
}
|
|
|
|
.dark {
|
|
--bg-1: #050810;
|
|
--bg-2: #0a0f1a;
|
|
--bg-3: #100818;
|
|
--grid-color: rgba(34, 211, 238, 0.05);
|
|
--surface: rgba(12, 18, 32, 0.78);
|
|
--surface-strong: rgba(16, 22, 38, 0.94);
|
|
--surface-elevated: #1a2236;
|
|
--surface-muted: #243049;
|
|
--text: #eef2f9;
|
|
--text-muted: #94a3b8;
|
|
--text-faint: #64748b;
|
|
--border: rgba(34, 211, 238, 0.14);
|
|
--accent: #22d3ee;
|
|
--accent-gpu: #a3e635;
|
|
--accent-secondary: #c084fc;
|
|
--glow: rgba(34, 211, 238, 0.28);
|
|
--status-ok: #4ade80;
|
|
--status-ok-bg: rgba(74, 222, 128, 0.12);
|
|
--status-warn: #fbbf24;
|
|
--status-warn-bg: rgba(251, 191, 36, 0.12);
|
|
--status-down: #f87171;
|
|
--status-down-bg: rgba(248, 113, 113, 0.12);
|
|
--shadow: 0 12px 48px rgba(0, 0, 0, 0.5);
|
|
--floor-bg: linear-gradient(180deg, #121a2e 0%, #0a0e18 100%);
|
|
--aurora-1: rgba(34, 211, 238, 0.15);
|
|
--aurora-2: rgba(192, 132, 252, 0.1);
|
|
}
|
|
|
|
body {
|
|
margin: 0;
|
|
min-height: 100vh;
|
|
color: var(--text);
|
|
background: linear-gradient(145deg, var(--bg-1) 0%, var(--bg-2) 45%, var(--bg-3) 100%);
|
|
background-attachment: fixed;
|
|
transition: background 0.4s ease, color 0.4s ease;
|
|
}
|
|
|
|
body::before {
|
|
content: '';
|
|
position: fixed;
|
|
inset: 0;
|
|
background-image:
|
|
radial-gradient(ellipse 80% 50% at 20% 0%, var(--aurora-1), transparent 50%),
|
|
radial-gradient(ellipse 60% 40% at 80% 10%, var(--aurora-2), transparent 45%),
|
|
linear-gradient(var(--grid-color) 1px, transparent 1px),
|
|
linear-gradient(90deg, var(--grid-color) 1px, transparent 1px);
|
|
background-size: 100% 100%, 100% 100%, 40px 40px, 40px 40px;
|
|
pointer-events: none;
|
|
z-index: 0;
|
|
}
|
|
|
|
#root { position: relative; z-index: 1; }
|
|
|
|
.section-eyebrow {
|
|
@apply text-[10px] font-mono uppercase tracking-[0.2em] text-[var(--text-faint)] mb-0.5;
|
|
}
|
|
|
|
.panel {
|
|
background: var(--surface-strong);
|
|
backdrop-filter: blur(20px);
|
|
border: 1px solid var(--border);
|
|
box-shadow: var(--shadow);
|
|
transition: background 0.35s ease, border-color 0.35s ease, box-shadow 0.35s ease;
|
|
}
|
|
|
|
.neon-text { text-shadow: 0 0 32px var(--glow); }
|
|
|
|
.logo-mark {
|
|
@apply w-12 h-12 rounded-2xl flex items-center justify-center text-sm font-bold text-white shrink-0;
|
|
background: linear-gradient(135deg, var(--accent), var(--accent-secondary));
|
|
box-shadow: 0 4px 28px var(--glow);
|
|
}
|
|
|
|
.header-aurora {
|
|
position: absolute;
|
|
inset: 0;
|
|
background: linear-gradient(90deg, transparent, var(--aurora-1), transparent);
|
|
opacity: 0.6;
|
|
pointer-events: none;
|
|
}
|
|
|
|
.status-pill {
|
|
@apply text-xs font-mono px-3 py-1.5 rounded-full border inline-flex items-center gap-1.5;
|
|
}
|
|
.status-pill::before { content: '●'; font-size: 8px; }
|
|
.status-pill.ok { color: var(--status-ok); border-color: var(--status-ok); background: var(--status-ok-bg); }
|
|
.status-pill.warn { color: var(--status-warn); border-color: var(--status-warn); background: var(--status-warn-bg); }
|
|
.status-pill.gpu { color: var(--accent-gpu); border-color: var(--accent-gpu); background: color-mix(in srgb, var(--accent-gpu) 10%, transparent); }
|
|
|
|
.live-badge {
|
|
@apply text-xs font-mono px-2.5 py-1 rounded-full border animate-pulse;
|
|
color: var(--status-ok);
|
|
border-color: var(--status-ok);
|
|
background: var(--status-ok-bg);
|
|
}
|
|
|
|
/* Agent cards */
|
|
.agent-roster-glow {
|
|
background: radial-gradient(ellipse at 50% 0%, var(--aurora-1), transparent 70%);
|
|
}
|
|
|
|
.agent-card {
|
|
@apply rounded-2xl p-[1px] transition-all duration-300 cursor-pointer;
|
|
background: var(--border);
|
|
}
|
|
.agent-card:hover,
|
|
.agent-card.selected {
|
|
background: linear-gradient(135deg, var(--agent-color, var(--accent)), var(--accent-secondary));
|
|
box-shadow: 0 8px 32px color-mix(in srgb, var(--agent-color, var(--accent)) 25%, transparent);
|
|
}
|
|
.agent-card-inner {
|
|
background: var(--surface-strong);
|
|
min-height: 200px;
|
|
}
|
|
.agent-card.selected .agent-card-inner {
|
|
background: color-mix(in srgb, var(--agent-color, var(--accent)) 4%, var(--surface-strong));
|
|
}
|
|
|
|
.agent-avatar {
|
|
@apply relative w-11 h-11 rounded-xl flex items-center justify-center border-2;
|
|
}
|
|
.agent-status-dot {
|
|
@apply absolute -bottom-0.5 -right-0.5 w-3 h-3 rounded-full border-2;
|
|
border-color: var(--surface-strong);
|
|
}
|
|
.agent-status-dot.active { animation: pulse-dot 1.2s ease infinite; }
|
|
|
|
.agent-state-pill {
|
|
@apply text-[10px] font-mono px-2 py-0.5 rounded-full bg-[var(--surface-elevated)];
|
|
}
|
|
.agent-state-pill.busy { background: color-mix(in srgb, currentColor 12%, transparent); }
|
|
|
|
.cap-chip {
|
|
@apply text-[9px] font-mono px-1.5 py-0.5 rounded-md;
|
|
background: var(--surface-elevated);
|
|
color: var(--text-muted);
|
|
border: 1px solid var(--border);
|
|
}
|
|
|
|
.delegate-btn {
|
|
background: color-mix(in srgb, currentColor 8%, transparent);
|
|
border: 1px solid color-mix(in srgb, currentColor 25%, transparent);
|
|
transition: all 0.15s ease;
|
|
}
|
|
.delegate-btn:hover {
|
|
background: color-mix(in srgb, currentColor 18%, transparent);
|
|
}
|
|
|
|
/* Ops floor */
|
|
.ops-floor-stage {
|
|
background: var(--floor-bg);
|
|
border-color: var(--border);
|
|
overflow: hidden;
|
|
}
|
|
.ops-floor-scan {
|
|
position: absolute;
|
|
inset: 0;
|
|
background: linear-gradient(180deg, transparent 0%, color-mix(in srgb, var(--accent) 4%, transparent) 50%, transparent 100%);
|
|
animation: scan 4s ease-in-out infinite;
|
|
pointer-events: none;
|
|
}
|
|
.zone-node {
|
|
background: var(--surface-strong);
|
|
}
|
|
|
|
.sprite-wrap.selected::after {
|
|
content: '';
|
|
position: absolute;
|
|
inset: -10px -6px;
|
|
border-radius: 50%;
|
|
border: 2px dashed var(--sprite-color, var(--accent));
|
|
opacity: 0.65;
|
|
animation: spin-slow 10s linear infinite;
|
|
pointer-events: none;
|
|
}
|
|
.sprite-wrap { position: relative; }
|
|
.sprite-wrap.busy {
|
|
filter: drop-shadow(0 0 16px var(--sprite-color)) drop-shadow(0 4px 8px rgba(0,0,0,0.3));
|
|
}
|
|
|
|
.sprite-figure {
|
|
position: relative;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
}
|
|
.sprite-figure-busy .sprite-svg {
|
|
filter: drop-shadow(0 0 8px var(--sprite-color, var(--accent)));
|
|
}
|
|
.sprite-ring-outer {
|
|
position: absolute;
|
|
inset: -4px 2px 16px 2px;
|
|
border-radius: 50%;
|
|
border: 1.5px solid;
|
|
pointer-events: none;
|
|
}
|
|
.sprite-holo-shimmer {
|
|
position: absolute;
|
|
inset: 0;
|
|
border-radius: 40%;
|
|
pointer-events: none;
|
|
animation: holo-shimmer 3s ease-in-out infinite;
|
|
opacity: 0.7;
|
|
}
|
|
.sprite-nameplate {
|
|
@apply flex items-center gap-1.5 mt-1.5 px-2.5 py-0.5 rounded-full border;
|
|
background: color-mix(in srgb, var(--surface-strong) 85%, transparent);
|
|
backdrop-filter: blur(6px);
|
|
}
|
|
.sprite-nameplate-dot {
|
|
@apply w-1.5 h-1.5 rounded-full shrink-0;
|
|
}
|
|
.sprite-nameplate-text {
|
|
@apply text-[10px] font-mono font-bold tracking-wide;
|
|
}
|
|
.sprite-platform-pulse {
|
|
animation: platform-pulse 2s ease-in-out infinite;
|
|
}
|
|
.sprite-core-pulse {
|
|
animation: pulse-dot 1.5s ease infinite;
|
|
}
|
|
.sprite-svg { overflow: visible; }
|
|
|
|
.sprite-ring {
|
|
position: absolute;
|
|
inset: -6px;
|
|
border-radius: 50%;
|
|
border: 2px solid;
|
|
animation: pulse-ring 1.5s ease infinite;
|
|
}
|
|
|
|
/* Activity feed */
|
|
.activity-feed { scrollbar-width: thin; }
|
|
.activity-item { @apply flex gap-3; }
|
|
.activity-rail { @apply flex flex-col items-center w-4 shrink-0; }
|
|
.activity-dot { @apply w-2.5 h-2.5 rounded-full shrink-0 mt-1.5; }
|
|
.activity-line { @apply w-px flex-1 bg-[var(--border)] min-h-[1rem]; }
|
|
.activity-agent-badge {
|
|
@apply text-[10px] font-mono px-2 py-0.5 rounded-full border;
|
|
background: var(--surface-elevated);
|
|
}
|
|
|
|
.empty-state {
|
|
@apply text-sm text-[var(--text-muted)] text-center py-8;
|
|
}
|
|
|
|
/* Chat */
|
|
.chat-message { @apply flex gap-2 items-end; }
|
|
.chat-message.user { @apply flex-row-reverse; }
|
|
.chat-avatar {
|
|
@apply w-8 h-8 rounded-xl flex items-center justify-center text-sm shrink-0 border;
|
|
}
|
|
.chat-bubble { @apply rounded-2xl px-3 py-2 max-w-[90%]; }
|
|
.chat-meta {
|
|
@apply text-[10px] font-mono text-[var(--text-faint)] flex gap-2 mb-1;
|
|
}
|
|
.chat-text { @apply text-sm leading-relaxed; }
|
|
.chat-bubble-user {
|
|
background: color-mix(in srgb, var(--accent) 14%, var(--surface-elevated));
|
|
border: 1px solid color-mix(in srgb, var(--accent) 28%, transparent);
|
|
}
|
|
.chat-bubble-agent {
|
|
background: var(--surface-elevated);
|
|
border: 1px solid var(--border);
|
|
}
|
|
|
|
.thinking-pulse { animation: pulse-dot 1s ease infinite; }
|
|
.typing-indicator { @apply flex gap-1 py-1; }
|
|
.typing-indicator span {
|
|
@apply w-1.5 h-1.5 rounded-full bg-[var(--text-faint)];
|
|
animation: typing 1.2s ease infinite;
|
|
}
|
|
.typing-indicator span:nth-child(2) { animation-delay: 0.15s; }
|
|
.typing-indicator span:nth-child(3) { animation-delay: 0.3s; }
|
|
|
|
/* Command dock */
|
|
.command-dock { border-color: color-mix(in srgb, var(--accent) 20%, var(--border)); }
|
|
.command-input-wrap {
|
|
background: var(--surface-elevated);
|
|
border: 1px solid var(--border);
|
|
transition: border-color 0.2s, box-shadow 0.2s;
|
|
}
|
|
.command-input-wrap:focus-within {
|
|
border-color: var(--accent);
|
|
box-shadow: 0 0 0 3px var(--glow);
|
|
}
|
|
|
|
.quick-prompt-chip {
|
|
@apply text-xs font-mono px-3 py-1.5 rounded-full border transition-all disabled:opacity-40;
|
|
background: var(--surface-elevated);
|
|
border-color: var(--border);
|
|
color: var(--text-muted);
|
|
}
|
|
.quick-prompt-chip:hover:not(:disabled) {
|
|
border-color: var(--accent);
|
|
color: var(--accent);
|
|
background: color-mix(in srgb, var(--accent) 8%, var(--surface-elevated));
|
|
}
|
|
|
|
/* Shared */
|
|
.status-card {
|
|
background: var(--surface-strong);
|
|
border: 1px solid var(--border);
|
|
transition: transform 0.15s ease, box-shadow 0.15s ease;
|
|
}
|
|
.status-card:hover { transform: translateY(-2px); box-shadow: var(--shadow); }
|
|
|
|
.gpu-card { background: var(--surface-elevated); transition: border-color 0.2s ease; }
|
|
.gpu-card:hover { border-color: var(--accent-gpu); }
|
|
|
|
.btn-primary {
|
|
@apply px-5 py-2.5 rounded-xl font-display text-sm font-semibold text-white transition-all hover:brightness-110 disabled:opacity-40;
|
|
background: linear-gradient(135deg, var(--accent), var(--accent-secondary));
|
|
box-shadow: 0 4px 24px var(--glow);
|
|
}
|
|
.btn-secondary {
|
|
@apply px-3 py-1.5 rounded-lg font-mono border transition-all;
|
|
background: var(--surface-elevated);
|
|
border-color: var(--border);
|
|
color: var(--accent);
|
|
}
|
|
.btn-secondary:hover { border-color: var(--accent); box-shadow: 0 0 16px var(--glow); }
|
|
|
|
.tab-btn {
|
|
@apply px-4 py-2 rounded-xl text-sm font-mono border transition-all inline-flex items-center gap-2;
|
|
border-color: var(--border);
|
|
color: var(--text-muted);
|
|
background: var(--surface);
|
|
}
|
|
.tab-btn.active {
|
|
border-color: var(--accent);
|
|
color: var(--accent);
|
|
background: var(--surface-strong);
|
|
box-shadow: 0 0 24px var(--glow);
|
|
font-weight: 600;
|
|
}
|
|
.tab-badge {
|
|
@apply text-[10px] px-1.5 py-0.5 rounded-full font-bold;
|
|
background: var(--accent-secondary);
|
|
color: white;
|
|
}
|
|
|
|
.theme-toggle {
|
|
@apply flex items-center gap-2 px-2 py-1 rounded-xl border transition-all;
|
|
border-color: var(--border);
|
|
background: var(--surface-elevated);
|
|
}
|
|
.theme-toggle:hover { border-color: var(--accent); }
|
|
.theme-toggle-track { @apply relative w-11 h-6 rounded-full transition-colors; background: var(--surface-muted); }
|
|
.theme-toggle-track.is-dark { background: linear-gradient(90deg, #1e293b, #312e81); }
|
|
.theme-toggle-thumb {
|
|
@apply absolute top-0.5 left-0.5 w-5 h-5 rounded-full flex items-center justify-center text-xs transition-transform;
|
|
background: var(--surface-strong);
|
|
box-shadow: 0 2px 6px rgba(0, 0, 0, 0.2);
|
|
}
|
|
.theme-toggle-track.is-dark .theme-toggle-thumb { transform: translateX(1.25rem); }
|
|
|
|
.prompt-input {
|
|
@apply flex-1 rounded-xl px-4 py-2.5 outline-none font-mono text-sm transition;
|
|
background: var(--surface-elevated);
|
|
border: 1px solid var(--border);
|
|
color: var(--text);
|
|
}
|
|
.prompt-input::placeholder { color: var(--text-faint); }
|
|
.prompt-input:focus { border-color: var(--accent); box-shadow: 0 0 0 3px var(--glow); }
|
|
|
|
.agent-sprite .sprite-body { fill: var(--surface-strong); }
|
|
.agent-sprite .sprite-limb { fill: var(--surface-elevated); }
|
|
.agent-sprite .sprite-head { fill: var(--surface-strong); }
|
|
|
|
/* Agent terminals */
|
|
.agent-terminal {
|
|
@apply rounded-xl border overflow-hidden flex flex-col cursor-pointer transition-all;
|
|
border-color: var(--border);
|
|
background: #0a0e14;
|
|
min-height: 200px;
|
|
max-height: 240px;
|
|
}
|
|
.dark .agent-terminal { background: #060a10; }
|
|
.light .agent-terminal { background: #0f172a; }
|
|
|
|
.agent-terminal.active {
|
|
border-color: color-mix(in srgb, var(--term-accent, var(--accent)) 55%, transparent);
|
|
box-shadow: 0 0 24px color-mix(in srgb, var(--term-accent, var(--accent)) 15%, transparent);
|
|
}
|
|
.agent-terminal.expanded {
|
|
max-height: 480px;
|
|
min-height: 400px;
|
|
}
|
|
.agent-terminal-header {
|
|
@apply flex items-center justify-between gap-2 px-3 py-2 border-b;
|
|
border-color: rgba(255,255,255,0.06);
|
|
background: rgba(0,0,0,0.25);
|
|
}
|
|
.agent-terminal-body {
|
|
@apply flex-1 overflow-y-auto p-2 font-mono text-[11px] leading-relaxed;
|
|
scrollbar-width: thin;
|
|
}
|
|
.term-line {
|
|
@apply flex gap-2 py-0.5;
|
|
word-break: break-word;
|
|
}
|
|
.term-ts {
|
|
@apply shrink-0 text-[10px] opacity-50 w-[4.5rem];
|
|
color: #64748b;
|
|
}
|
|
.term-phase {
|
|
@apply shrink-0 text-[9px] uppercase w-10 opacity-40 hidden sm:inline;
|
|
}
|
|
.term-text { flex: 1; }
|
|
.term-info .term-text { color: #94a3b8; }
|
|
.term-ok .term-text { color: #4ade80; }
|
|
.term-warn .term-text { color: #fbbf24; }
|
|
.term-err .term-text { color: #f87171; }
|
|
.term-cmd .term-text { color: #67e8f9; }
|
|
.term-llm .term-text { color: #c084fc; }
|
|
.term-live-badge {
|
|
@apply text-[9px] font-mono px-1.5 py-0.5 rounded-full animate-pulse;
|
|
color: var(--term-accent, var(--accent));
|
|
border: 1px solid color-mix(in srgb, var(--term-accent, var(--accent)) 40%, transparent);
|
|
}
|
|
.term-cursor { animation: blink 1s step-end infinite; color: var(--term-accent, var(--accent)); }
|
|
.agent-terminal-focus { @apply flex flex-col gap-3; }
|
|
.agent-terminal-tabs { @apply flex flex-wrap gap-2; }
|
|
.agent-terminal-tab {
|
|
@apply text-xs font-mono px-3 py-1.5 rounded-lg border transition-all;
|
|
border-color: var(--border);
|
|
color: var(--text-muted);
|
|
background: var(--surface-elevated);
|
|
}
|
|
.agent-terminal-tab.active { font-weight: 600; background: var(--surface-strong); }
|
|
|
|
@keyframes blink {
|
|
0%, 100% { opacity: 1; }
|
|
50% { opacity: 0; }
|
|
}
|
|
|
|
@keyframes pulse-dot {
|
|
0%, 100% { opacity: 1; transform: scale(1); }
|
|
50% { opacity: 0.6; transform: scale(1.15); }
|
|
}
|
|
@keyframes pulse-ring {
|
|
0%, 100% { opacity: 0.8; transform: scale(1); }
|
|
50% { opacity: 0.4; transform: scale(1.08); }
|
|
}
|
|
@keyframes scan {
|
|
0%, 100% { transform: translateY(-100%); opacity: 0; }
|
|
50% { opacity: 1; }
|
|
100% { transform: translateY(100%); }
|
|
}
|
|
@keyframes spin-slow { to { transform: rotate(360deg); } }
|
|
@keyframes holo-shimmer {
|
|
0%, 100% { opacity: 0.4; transform: translateX(-2px); }
|
|
50% { opacity: 0.85; transform: translateX(2px); }
|
|
}
|
|
@keyframes platform-pulse {
|
|
0%, 100% { opacity: 0.35; transform: scaleX(1); }
|
|
50% { opacity: 0.7; transform: scaleX(1.08); }
|
|
}
|
|
@keyframes typing {
|
|
0%, 60%, 100% { transform: translateY(0); opacity: 0.4; }
|
|
30% { transform: translateY(-4px); opacity: 1; }
|
|
}
|
|
|
|
/* Live cluster map */
|
|
.live-cluster-map { isolation: isolate; }
|
|
.cluster-ambient {
|
|
position: absolute;
|
|
inset: 0;
|
|
background: radial-gradient(ellipse 70% 50% at 50% 30%, var(--aurora-1), transparent 60%);
|
|
pointer-events: none;
|
|
}
|
|
.cluster-stage-grid {
|
|
position: absolute;
|
|
inset: 0;
|
|
background-image: linear-gradient(var(--grid-color) 1px, transparent 1px),
|
|
linear-gradient(90deg, var(--grid-color) 1px, transparent 1px);
|
|
background-size: 24px 24px;
|
|
opacity: 0.5;
|
|
border-radius: inherit;
|
|
}
|
|
.cluster-agent-stage { overflow: hidden; }
|
|
|
|
.zone-tower {
|
|
@apply rounded-xl px-2.5 py-2 text-center min-w-[84px] border-2;
|
|
background: color-mix(in srgb, var(--surface-strong) 90%, transparent);
|
|
backdrop-filter: blur(8px);
|
|
}
|
|
.zone-tower-live { animation: tower-breathe 3s ease-in-out infinite; }
|
|
.zone-tower-active { transform: scale(1.05); }
|
|
.zone-tower-label { @apply text-[8px] font-mono font-bold tracking-wider; }
|
|
.zone-tower-stats { @apply text-[10px] font-mono font-semibold mt-0.5 flex items-center justify-center gap-1; }
|
|
.zone-tower-extra { @apply text-[8px] font-mono opacity-70 mt-0.5; }
|
|
.zone-level-dot { @apply w-1.5 h-1.5 rounded-full; }
|
|
.zone-level-dot.level-ok { background: var(--status-ok); box-shadow: 0 0 6px var(--status-ok); }
|
|
.zone-level-dot.level-warn { background: var(--status-warn); }
|
|
.zone-level-dot.level-down { background: var(--status-down); }
|
|
|
|
.zone-app-orbit {
|
|
@apply flex flex-col gap-0.5 mt-1 max-w-[90px];
|
|
}
|
|
.zone-app-chip {
|
|
@apply flex items-center gap-1 text-[8px] font-mono px-1.5 py-0.5 rounded-md border;
|
|
background: var(--surface-strong);
|
|
}
|
|
.zone-app-chip.state-running { opacity: 1; }
|
|
.zone-app-chip.state-down, .zone-app-chip.state-created { opacity: 0.45; filter: grayscale(0.5); }
|
|
|
|
.command-desk {
|
|
@apply relative px-4 py-2 rounded-xl text-[9px] font-mono font-bold tracking-widest border-2;
|
|
border-color: var(--accent);
|
|
color: var(--accent);
|
|
background: var(--surface-strong);
|
|
}
|
|
.command-desk-ring {
|
|
@apply absolute inset-0 rounded-xl border border-[var(--accent)] opacity-30 animate-ping;
|
|
pointer-events: none;
|
|
}
|
|
|
|
.gpu-beacon {
|
|
@apply rounded-xl border px-3 py-2 text-left min-w-[140px];
|
|
border-color: var(--accent-gpu);
|
|
background: color-mix(in srgb, var(--accent-gpu) 8%, var(--surface-strong));
|
|
}
|
|
.gpu-beacon-title { @apply text-[9px] font-mono font-bold text-[var(--accent-gpu)]; }
|
|
.gpu-beacon-model { @apply text-xs font-semibold text-[var(--text)] mt-0.5; }
|
|
.gpu-beacon-meta { @apply text-[9px] font-mono text-[var(--text-muted)]; }
|
|
.gpu-beacon-bar { @apply h-1 rounded-full bg-[var(--surface-muted)] mt-2 overflow-hidden; }
|
|
.gpu-beacon-fill { @apply h-full rounded-full bg-[var(--accent-gpu)]; }
|
|
|
|
.workload-ticker-wrap {
|
|
@apply flex items-center gap-3 overflow-hidden rounded-xl border px-3 py-2;
|
|
border-color: var(--border);
|
|
background: var(--surface-elevated);
|
|
}
|
|
.workload-ticker-label {
|
|
@apply text-[9px] font-mono font-bold tracking-widest shrink-0 text-[var(--accent)];
|
|
}
|
|
.workload-ticker-track { @apply flex-1 overflow-hidden; }
|
|
.workload-ticker-inner { @apply flex gap-2 whitespace-nowrap; }
|
|
.ticker-chip {
|
|
@apply inline-flex items-center gap-1 text-[10px] font-mono px-2 py-0.5 rounded-full border;
|
|
background: var(--surface-strong);
|
|
}
|
|
.ticker-chip.state-running { opacity: 1; }
|
|
.ticker-chip.state-down, .ticker-chip.state-created { opacity: 0.4; }
|
|
|
|
.live-domain-card {
|
|
@apply rounded-xl p-4 border-2 transition-all;
|
|
background: var(--surface-strong);
|
|
}
|
|
.domain-pulse-dot { @apply w-2.5 h-2.5 rounded-full shrink-0; }
|
|
.domain-pulse-dot.level-ok { background: var(--status-ok); }
|
|
.domain-pulse-dot.level-warn { background: var(--status-warn); }
|
|
.domain-pulse-dot.level-down { background: var(--status-down); }
|
|
.domain-progress-bar { @apply h-1.5 rounded-full bg-[var(--surface-muted)] overflow-hidden; }
|
|
.domain-progress-fill { @apply h-full rounded-full; }
|
|
.domain-app-grid {
|
|
@apply grid grid-cols-3 gap-1;
|
|
}
|
|
.domain-app-tile {
|
|
@apply flex flex-col items-center text-[8px] font-mono p-1 rounded-md border border-[var(--border)];
|
|
background: var(--surface-elevated);
|
|
}
|
|
.domain-app-tile.state-down { opacity: 0.35; }
|
|
.gpu-mini-tile {
|
|
@apply text-[8px] font-mono px-1.5 py-0.5 rounded border border-[var(--accent-gpu)] text-[var(--accent-gpu)];
|
|
background: color-mix(in srgb, var(--accent-gpu) 10%, transparent);
|
|
}
|
|
|
|
.ambient-bg { pointer-events: none; }
|
|
.ambient-orb {
|
|
position: absolute;
|
|
width: 120px;
|
|
height: 120px;
|
|
border-radius: 50%;
|
|
background: radial-gradient(circle, var(--aurora-1), transparent 70%);
|
|
animation: orb-float linear infinite;
|
|
opacity: 0.35;
|
|
}
|
|
|
|
@keyframes tower-breathe {
|
|
0%, 100% { filter: brightness(1); }
|
|
50% { filter: brightness(1.15); }
|
|
}
|
|
@keyframes orb-float {
|
|
0%, 100% { transform: translate(0, 0) scale(1); opacity: 0.2; }
|
|
33% { transform: translate(20px, -30px) scale(1.1); opacity: 0.4; }
|
|
66% { transform: translate(-15px, 20px) scale(0.9); opacity: 0.25; }
|
|
}
|
|
@keyframes ticker-scroll {
|
|
from { transform: translateX(0); }
|
|
to { transform: translateX(-50%); }
|
|
}
|