:root { --green: #41ff00; --green-dim: #1a6600; --green-glow: rgba(65, 255, 0, 0.25); --black: #010800; --panel: #020d01; --border: #1a3310; --muted: #3a6630; --text: #41ff00; --warn: #ffcc00; --danger: #ff3366; --font: "VT323", monospace; } *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; } html, body { height: 100%; background: var(--black); color: var(--green); font-family: var(--font); font-size: 20px; line-height: 1.4; overflow-x: hidden; } /* ── CRT shell ─────────────────────────────────────────────────────────────── */ .crt-shell { position: relative; min-height: 100vh; padding: 16px; overflow: hidden; animation: crt-flicker 8s infinite; } .scanlines { position: fixed; inset: 0; z-index: 100; pointer-events: none; background: repeating-linear-gradient( to bottom, transparent 0, transparent 2px, rgba(0,0,0,0.18) 2px, rgba(0,0,0,0.18) 4px ); } .screen-glow { position: fixed; inset: 0; z-index: 99; pointer-events: none; background: radial-gradient(ellipse at 50% 50%, var(--green-glow) 0%, transparent 70%); opacity: 0.4; } /* ── Topbar ────────────────────────────────────────────────────────────────── */ .topbar { display: flex; align-items: center; justify-content: space-between; gap: 16px; padding-bottom: 12px; border-bottom: 1px solid var(--border); margin-bottom: 16px; } .brand { display: flex; align-items: center; gap: 14px; } .mark { font-size: 14px; line-height: 1.2; color: var(--green); text-shadow: 0 0 8px var(--green); } .brand h1 { font-size: 28px; font-family: var(--font); letter-spacing: 4px; text-shadow: 0 0 12px var(--green); margin: 0; } .brand p { font-size: 12px; color: var(--muted); letter-spacing: 2px; margin: 0; } .topbar-controls { display: flex; align-items: center; gap: 20px; } .clock-block { display: flex; flex-direction: column; align-items: flex-end; font-size: 13px; color: var(--muted); } .clock-block strong { font-size: 18px; color: var(--green); } /* ── Terminal button ───────────────────────────────────────────────────────── */ .terminal-button { background: transparent; border: 1px solid var(--border); color: var(--green); font-family: var(--font); font-size: 16px; padding: 4px 12px; cursor: pointer; letter-spacing: 1px; transition: border-color 0.15s, color 0.15s; } .terminal-button:hover { border-color: var(--green); color: var(--green); } .terminal-button[aria-pressed="true"] { color: var(--black); background: var(--green); } /* ── Dashboard grid ────────────────────────────────────────────────────────── */ .dashboard { display: grid; grid-template-columns: 1fr 2fr; grid-template-rows: auto auto; gap: 12px; } /* ── Panel ─────────────────────────────────────────────────────────────────── */ .panel { background: var(--panel); border: 1px solid var(--border); padding: 14px; } .panel-title { display: flex; justify-content: space-between; align-items: center; font-size: 14px; color: var(--muted); border-bottom: 1px solid var(--border); padding-bottom: 8px; margin-bottom: 12px; letter-spacing: 1px; } .dim { color: var(--muted); font-size: 13px; } /* ── Agent panel ───────────────────────────────────────────────────────────── */ .agent-core { display: flex; align-items: center; gap: 16px; margin-bottom: 14px; } .agent-orb { position: relative; width: 64px; height: 64px; border-radius: 50%; display: flex; align-items: center; justify-content: center; flex-shrink: 0; } .agent-orb.online { box-shadow: 0 0 24px var(--green), 0 0 48px rgba(65,255,0,0.2); animation: orb-pulse 2s ease-in-out infinite; } .agent-orb.offline { opacity: 0.4; } .orb-ring { position: absolute; inset: 4px; border-radius: 50%; border: 2px solid currentColor; animation: rotate 6s linear infinite; } .agent-orb.online .orb-ring { color: var(--green); } .agent-orb.offline .orb-ring { color: var(--muted); } .orb-center { font-size: 28px; position: relative; z-index: 1; } .agent-orb.online .orb-center { text-shadow: 0 0 12px var(--green); } .agent-identity { display: flex; flex-direction: column; gap: 3px; } .agent-identity .label { font-size: 11px; color: var(--muted); letter-spacing: 1px; } .agent-identity strong { font-size: 26px; letter-spacing: 3px; } .state { font-size: 13px; letter-spacing: 2px; } .state.online { color: var(--green); } .state.offline { color: var(--muted); } .state.processing { color: var(--warn); } /* ── Telemetry ─────────────────────────────────────────────────────────────── */ .telemetry { display: grid; grid-template-columns: 1fr 1fr; gap: 6px 12px; font-size: 14px; } .telemetry div { display: flex; flex-direction: column; } .telemetry dt { font-size: 10px; color: var(--muted); letter-spacing: 1px; } .telemetry dd { color: var(--green); } /* ── Chain panel ───────────────────────────────────────────────────────────── */ .chain-panel { grid-column: 2; grid-row: 1 / 3; } .chain-head { display: grid; grid-template-columns: 40px 160px 1fr 120px; gap: 8px; font-size: 10px; color: var(--muted); letter-spacing: 1px; padding: 0 4px 6px; border-bottom: 1px solid var(--border); margin-bottom: 4px; } .chain-terminal { height: 420px; overflow-y: auto; font-size: 14px; scrollbar-width: thin; scrollbar-color: var(--border) var(--black); } .chain-line { display: grid; grid-template-columns: 40px 160px 1fr 120px; gap: 8px; padding: 3px 4px; border-bottom: 1px solid rgba(26,51,16,0.4); cursor: default; } .chain-line:hover { background: rgba(65,255,0,0.04); } .chain-line .seq { color: var(--muted); } .chain-line .ts { color: var(--muted); } .chain-line .event { color: var(--green); } .chain-line .hash { color: var(--green-dim); font-size: 12px; } .chain-line.new-entry { animation: entry-flash 0.6s ease-out; } .boot-line { color: var(--muted); padding: 4px; font-size: 14px; } .chain-footer { display: flex; justify-content: space-between; font-size: 12px; color: var(--muted); padding-top: 8px; border-top: 1px solid var(--border); margin-top: 6px; } .stream-dot { display: inline-block; width: 8px; height: 8px; border-radius: 50%; background: var(--muted); vertical-align: middle; } .stream-dot.live { background: var(--green); box-shadow: 0 0 6px var(--green); animation: orb-pulse 1.5s infinite; } /* ── Race panel ────────────────────────────────────────────────────────────── */ .race-list { display: flex; flex-direction: column; gap: 8px; } .race-row { display: grid; grid-template-columns: 80px 1fr 60px; align-items: center; gap: 10px; font-size: 15px; } .race-name { color: var(--green); letter-spacing: 1px; } .race-track { height: 8px; background: var(--border); border-radius: 2px; overflow: hidden; position: relative; } .race-fill { height: 100%; background: var(--green); border-radius: 2px; transition: width 0.4s ease; box-shadow: 0 0 8px var(--green); } .race-score { color: var(--muted); font-size: 13px; text-align: right; } .race-empty { color: var(--muted); font-size: 15px; } /* ── System panel ──────────────────────────────────────────────────────────── */ .system-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; font-size: 15px; } .sys-item { display: flex; flex-direction: column; } .sys-item .sys-label { font-size: 10px; color: var(--muted); letter-spacing: 1px; margin-bottom: 2px; } .sys-item .sys-value { color: var(--green); } /* ── Command line ──────────────────────────────────────────────────────────── */ .command-line { display: flex; align-items: center; gap: 10px; margin-top: 12px; padding-top: 12px; border-top: 1px solid var(--border); } #magma-input { flex: 1; background: transparent; border: none; border-bottom: 1px solid var(--border); outline: none; color: var(--green); font-family: var(--font); font-size: 18px; padding: 2px 0; caret-color: var(--green); } #command-history { max-height: 80px; overflow-y: auto; font-size: 13px; color: var(--muted); margin-bottom: 6px; scrollbar-width: none; } footer { display: flex; justify-content: space-between; font-size: 13px; color: var(--muted); padding-top: 10px; border-top: 1px solid var(--border); margin-top: 12px; letter-spacing: 1px; } /* ── Keyframes ─────────────────────────────────────────────────────────────── */ @keyframes crt-flicker { 0%, 96%, 98%, 100% { opacity: 1; } 97% { opacity: 0.93; } 99% { opacity: 0.97; } } @keyframes rotate { to { transform: rotate(360deg); } } @keyframes orb-pulse { 50% { box-shadow: 0 0 36px rgba(65, 255, 0, 0.35); } } @keyframes vertical-scan { from { transform: translateY(-45%); } to { transform: translateY(45%); } } @keyframes entry-flash { from { color: var(--black); background: var(--green); text-shadow: none; } to { color: var(--green); background: transparent; } } /* ── Responsive ────────────────────────────────────────────────────────────── */ @media (max-width: 960px) { .dashboard { grid-template-columns: 1fr; } .chain-panel { grid-row: auto; } .chain-terminal { height: 350px; } } @media (max-width: 650px) { body { font-size: 18px; } .crt-shell { padding: 8px; } .topbar, .topbar-controls { align-items: flex-start; } .topbar { flex-direction: column; gap: 14px; } .topbar-controls { width: 100%; justify-content: space-between; } .chain-head { display: none; } .chain-line { grid-template-columns: 40px 1fr; } .chain-line .event, .chain-line .hash { grid-column: 2; } .chain-footer, footer { flex-wrap: wrap; gap: 6px 16px; } .command-line button { display: none; } } @media (prefers-reduced-motion: reduce) { *, *::before, *::after { animation-duration: 0.001ms !important; animation-iteration-count: 1 !important; } }