:root { --bg: #0f172a; --canvas-bg: #071020; --muted: rgba(255, 255, 255, 0.06); --text: #e6eef8; --accent: #7cb7ff; --panel: rgba(255, 255, 255, 0.02); --radius: 12px; --gap: 14px; --max-width: 1200px; } * { box-sizing: border-box } html, body { height: 100% } body { margin: 0; font-family: Inter, system-ui, -apple-system, Segoe UI, Roboto, Arial; background: var(--bg); color: var(--text); display: flex; justify-content: center; padding: 22px; } main { width: 100%; max-width: var(--max-width); display: flex; flex-direction: column; gap: var(--gap) } header { display: flex; justify-content: space-between; align-items: baseline } h1 { margin: 0; font-size: 20px } .app-grid { display: grid; grid-template-columns: 360px 1fr; gap: 20px } .sidebar { display: flex; flex-direction: column; gap: var(--gap) } @media(min-width:980px) { .sidebar { position: sticky; top: 22px; height: calc(100vh - 44px); overflow: auto } } .canvas-area { display: flex; flex-direction: column; gap: 12px; min-width: 0 } #runState::before, .recording-indicator::before { content: "● "; } #runState.running { color: #7cb7ff; } .panel { background: var(--panel); border: 1px solid var(--muted); border-radius: var(--radius); padding: 12px; } .panel.primary { display: flex; gap: 8px; flex-wrap: wrap; align-items: center } .panel.secondary { display: flex; flex-direction: column; gap: 10px } button { background: transparent; color: var(--text); border: 1px solid var(--muted); padding: 8px 12px; border-radius: 999px; cursor: pointer; } label { display: grid; grid-template-columns: 1fr auto; gap: 8px; font-size: 13px } label.inline { display: flex; gap: 8px } #lifeCanvas { width: 100%; height: min(72vh, 900px); background: var(--canvas-bg); border-radius: 10px; border: 1px solid rgba(255, 255, 255, 0.04); } footer { text-align: center; font-size: 12px; opacity: .8 } .recording-indicator { margin-left: 8px; font-size: 13px; color: #ff5f5f; animation: pulse 1.2s infinite; } .hidden { display: none; } @keyframes pulse { 0% { opacity: 1 } 50% { opacity: 0.4 } 100% { opacity: 1 } } @media(max-width:980px) { .app-grid { grid-template-columns: 1fr } #lifeCanvas { height: 60vh } } /* ---------- Collapsible panels ---------- */ .collapsible .collapse-toggle { background: none; border: none; color: var(--accent); font-weight: 600; text-align: left; padding: 0; cursor: pointer; } .collapsible .collapsible-content { margin-top: 10px; } .collapsible.collapsed .collapsible-content { display: none; } .collapse-toggle::before { content: "↑ "; } .collapsible.collapsed .collapse-toggle::before { content: "↓ "; } /* ---------- Full canvas mode ---------- */ .fullscreen-toggle { align-self: flex-end; margin-bottom: 8px; } body.canvas-only .sidebar, body.canvas-only header, body.canvas-only footer { display: none; } body.canvas-only .canvas-area { width: 100%; } body.canvas-only #lifeCanvas { height: calc(100vh - 80px); } body.canvas-only .app-grid { display: block; } /* Slider alignment */ .slider-row { display: grid; grid-template-columns: 6em 1fr; align-items: center; gap: 5px; } .slider-control { display: grid; grid-template-columns: 1fr 3ch; align-items: center; gap: 8px; } /* Prevent output from resizing */ .slider-control output { display: inline-block; width: 2ch; text-align: right; font-variant-numeric: tabular-nums; }