/ proof-of-concept / cymsimweb
Sign in
proof-of-concept / cymsimweb
cymsimweb / src / style.css
90 lines · 7.1 KBCodeBlameHistory
08a7051Chat panel with a local Claude Code bridge: app-state, YAML, run and playback toolsJeremy Magland 1:root { --sidebar-w: 420px; --chat-w: 380px; --plate-h: 40vh; --readouts-h: 190px; --bg: #14161a; --panel: #1d2026; --border: #2c3038; --text: #e6e6e6; --muted: #9aa0a8; --accent: #e0a23a; --danger: #d9534f; }
3html, body { margin: 0; height: 100%; background: var(--bg); color: var(--text); font: 13px/1.4 system-ui, sans-serif; }
cffea67UI: exaggeration defaults to x1, play position returns to 0 after playback, resizable panesJeremy Magland 4#app { display: grid; grid-template-columns: var(--sidebar-w) 6px 1fr; height: 100vh; }
08a7051Chat panel with a local Claude Code bridge: app-state, YAML, run and playback toolsJeremy Magland 5#app.with-chat { grid-template-columns: var(--sidebar-w) 6px 1fr 6px var(--chat-w); }
6.splitter.hidden, #chat.hidden { display: none; }
cffea67UI: exaggeration defaults to x1, play position returns to 0 after playback, resizable panesJeremy Magland 7.splitter { background: var(--border); flex: none; }
8.splitter.vertical { width: 6px; cursor: col-resize; }
9.splitter.horizontal { height: 6px; cursor: row-resize; }
10.splitter:hover, .splitter.active { background: var(--accent); }
1e29264cymsimweb: WebGPU companion of cymsim with YAML/form editor, live spectrogram and playbackJeremy Magland 11#sidebar { background: var(--panel); border-right: 1px solid var(--border); display: flex; flex-direction: column; min-height: 0; }
08a7051Chat panel with a local Claude Code bridge: app-state, YAML, run and playback toolsJeremy Magland 12#sidebar header { padding: 10px 12px 4px; display: flex; align-items: baseline; gap: 8px; }
13.chat-toggle { margin-left: auto; padding: 2px 10px; }
1e29264cymsimweb: WebGPU companion of cymsim with YAML/form editor, live spectrogram and playbackJeremy Magland 14#sidebar h1 { margin: 0; font-size: 18px; display: inline; }
15.subtitle { color: var(--muted); margin-left: 8px; }
16.run { padding: 6px 12px; border-bottom: 1px solid var(--border); }
17.row { display: flex; gap: 6px; align-items: center; margin: 4px 0; }
18.row label { display: flex; gap: 6px; align-items: center; flex: 1; }
19.row select { flex: 1; }
20.buttons button { flex: 1; }
21button { background: #2a2e36; color: var(--text); border: 1px solid var(--border); border-radius: 4px; padding: 5px 10px; cursor: pointer; }
22button:hover:not(:disabled) { background: #343943; }
23button:disabled { opacity: 0.45; cursor: default; }
24button.primary { background: var(--accent); color: #111; border-color: var(--accent); font-weight: 600; }
25select, input[type="text"], input[type="number"] { background: #111318; color: var(--text); border: 1px solid var(--border); border-radius: 3px; padding: 3px 5px; }
26progress { flex: 1; height: 10px; }
27.muted { color: var(--muted); }
28.tabs { display: flex; border-bottom: 1px solid var(--border); }
29.tabs button { flex: 1; border: none; border-radius: 0; background: transparent; padding: 6px; color: var(--muted); }
30.tabs button.active { color: var(--text); border-bottom: 2px solid var(--accent); }
31.tab { flex: 1; min-height: 0; overflow: auto; }
32.tab.hidden { display: none; }
33#editor { height: 100%; }
34#editor .cm-editor { height: 100%; font-size: 12px; }
35#editor .cm-scroller { font-family: ui-monospace, Menlo, Consolas, monospace; }
36#issues { list-style: none; margin: 0; padding: 4px 12px; max-height: 120px; overflow: auto; border-top: 1px solid var(--border); font-size: 12px; }
37#issues li { color: var(--danger); }
38#issues li.ok { color: #6fbf73; }
39#issues code { color: var(--text); }
40#form { padding: 6px 10px; }
41#form details { margin-bottom: 4px; }
42#form summary { cursor: pointer; font-weight: 600; padding: 3px 0; }
43#form .grid { display: grid; grid-template-columns: 1fr 120px; gap: 3px 8px; align-items: center; padding: 2px 0 6px 10px; }
44#form .grid label { color: var(--muted); }
45#form .grid label span.unit { color: #6d737b; margin-left: 4px; }
46#form .hit { border: 1px solid var(--border); border-radius: 4px; padding: 4px 8px; margin: 4px 0; }
47#form .hit .head { display: flex; justify-content: space-between; align-items: center; }
48#form input[type="number"] { width: 100%; }
49#summary { padding: 6px 12px; font-family: ui-monospace, Menlo, Consolas, monospace; font-size: 12px; white-space: pre-wrap; }
cffea67UI: exaggeration defaults to x1, play position returns to 0 after playback, resizable panesJeremy Magland 50main { display: flex; flex-direction: column; min-height: 0; min-width: 0; }
51main section { min-height: 0; display: flex; flex-direction: column; }
52#plate-section { height: var(--plate-h); flex: none; }
53#spec-section { flex: 1; min-height: 60px; }
54#playback { flex: none; border-top: 1px solid var(--border); border-bottom: 1px solid var(--border); }
1e29264cymsimweb: WebGPU companion of cymsim with YAML/form editor, live spectrogram and playbackJeremy Magland 55.toolbar { display: flex; gap: 14px; align-items: center; padding: 4px 10px; font-weight: 600; }
56.toolbar label { font-weight: normal; color: var(--muted); display: flex; gap: 6px; align-items: center; }
57canvas { flex: 1; width: 100%; height: 100%; display: block; min-height: 0; }
58#playback { flex-direction: row; align-items: center; gap: 10px; padding: 6px 10px; }
59#playback #position { flex: 1; }
60#playback label { color: var(--muted); display: flex; gap: 6px; align-items: center; }
cffea67UI: exaggeration defaults to x1, play position returns to 0 after playback, resizable panesJeremy Magland 61#readouts { padding: 6px 10px; height: var(--readouts-h); flex: none; overflow: auto; font-size: 12px; }
1e29264cymsimweb: WebGPU companion of cymsim with YAML/form editor, live spectrogram and playbackJeremy Magland 62#readouts table { border-collapse: collapse; margin-right: 24px; display: inline-table; vertical-align: top; }
63#readouts th, #readouts td { padding: 1px 8px; text-align: right; border-bottom: 1px solid var(--border); }
64#readouts th { color: var(--muted); font-weight: normal; }
65#readouts .log { font-family: ui-monospace, Menlo, Consolas, monospace; color: var(--muted); white-space: pre-wrap; margin-top: 4px; }
cffea67UI: exaggeration defaults to x1, play position returns to 0 after playback, resizable panesJeremy Magland 66@media (max-width: 900px) { #app { grid-template-columns: 1fr; grid-template-rows: auto auto 1fr; } #sidebar { max-height: 45vh; } .splitter.vertical { display: none; } }
68/* chat panel */
69#chat { background: var(--panel); border-left: 1px solid var(--border); display: flex; flex-direction: column; min-height: 0; min-width: 0; }
70.chat-head { display: flex; align-items: center; gap: 8px; padding: 8px 10px; border-bottom: 1px solid var(--border); }
71.chat-head .spacer { flex: 1; }
72.chat-head .dot { width: 9px; height: 9px; border-radius: 50%; background: #666; }
73.chat-head .dot.on { background: #6fbf73; } .chat-head .dot.busy { background: var(--accent); } .chat-head .dot.off { background: #888; }
74.chat-help { padding: 8px 10px; color: var(--muted); font-size: 12px; border-bottom: 1px solid var(--border); line-height: 1.5; }
75.chat-help code { color: var(--text); font-size: 11px; word-break: break-all; }
76.chat-log { flex: 1; overflow: auto; padding: 8px 10px; display: flex; flex-direction: column; gap: 8px; }
77.msg { max-width: 100%; border-radius: 8px; padding: 6px 10px; font-size: 13px; line-height: 1.45; white-space: pre-wrap; word-break: break-word; }
78.msg.user { background: #2c3a55; align-self: flex-end; }
79.msg.assistant { background: #262a32; white-space: normal; }
80.msg.assistant p { margin: 0 0 6px; } .msg.assistant p:last-child { margin: 0; }
81.msg.assistant pre { background: #111318; padding: 6px 8px; border-radius: 4px; overflow: auto; font-size: 11px; margin: 4px 0; }
82.msg.assistant code { font-family: ui-monospace, Menlo, Consolas, monospace; font-size: 12px; }
83.msg.assistant ul, .msg.assistant ol { margin: 2px 0 6px 18px; padding: 0; }
84.msg.assistant h4 { margin: 4px 0; }
85.msg.tool { color: var(--muted); font-family: ui-monospace, Menlo, Consolas, monospace; font-size: 11px; padding: 2px 6px; }
86.msg.tool::before { content: "▸ "; }
87.msg.system { color: var(--muted); font-size: 11px; font-style: italic; padding: 2px 6px; align-self: center; }
88.chat-input { border-top: 1px solid var(--border); padding: 8px 10px; display: flex; flex-direction: column; gap: 6px; }
89.chat-input textarea { width: 100%; resize: vertical; background: #111318; color: var(--text); border: 1px solid var(--border); border-radius: 4px; padding: 6px; font: inherit; }
90.chat-buttons { display: flex; justify-content: flex-end; gap: 6px; }
↑↓ move↵openescclose