aboutsummaryrefslogtreecommitdiffstats
path: root/renderer/src/styles/globals.css
diff options
context:
space:
mode:
authorClawd <ai@clawd.bot>2026-02-28 07:30:40 -0800
committerClawd <ai@clawd.bot>2026-02-28 07:30:40 -0800
commit6d70c5f8a3ed90564b08616a3fb041409916059c (patch)
tree4c6480c5a606ab0a178dca72efa93c60ebe70c34 /renderer/src/styles/globals.css
parent66f66d1c17213f55aa56d69c0cccc309b16f3362 (diff)
Phase 4: React UI
- Add renderer/src/types.ts with Project, Session, Message, Phase types - Add renderer/src/styles/globals.css with full styling - Dark theme with accent colors - Header, document pane, chat pane, action bar layouts - Phase indicator, token usage bar, buttons - Add renderer/src/components/Header.tsx - Project/session dropdowns with create buttons - Phase indicator showing current workflow state - Add renderer/src/components/DocumentPane.tsx - Markdown viewer/editor with toggle - Syntax highlighting for review comments - Task checkbox rendering - Add renderer/src/components/ChatPane.tsx - Message list with auto-scroll - Input field with Enter to send - Loading state indicator - Add renderer/src/components/ActionBar.tsx - Token usage bar with color coding - Review/Submit buttons for workflow - Permission mode toggle for implement phase - Add renderer/src/App.tsx - Full state management for projects, sessions, messages - Claude message subscription - Workflow handlers (review, submit, phase advance) - Update renderer/src/main.tsx to render App
Diffstat (limited to 'renderer/src/styles/globals.css')
-rw-r--r--renderer/src/styles/globals.css391
1 files changed, 391 insertions, 0 deletions
diff --git a/renderer/src/styles/globals.css b/renderer/src/styles/globals.css
new file mode 100644
index 0000000..57dc917
--- /dev/null
+++ b/renderer/src/styles/globals.css
@@ -0,0 +1,391 @@
1* {
2 box-sizing: border-box;
3 margin: 0;
4 padding: 0;
5}
6
7:root {
8 --bg-primary: #1a1a1a;
9 --bg-secondary: #252525;
10 --bg-tertiary: #333;
11 --border: #444;
12 --text-primary: #e0e0e0;
13 --text-secondary: #888;
14 --accent: #3b82f6;
15 --accent-hover: #2563eb;
16 --success: #10b981;
17 --warning: #f59e0b;
18 --danger: #ef4444;
19}
20
21body {
22 font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
23 background: var(--bg-primary);
24 color: var(--text-primary);
25 overflow: hidden;
26}
27
28.app {
29 display: flex;
30 flex-direction: column;
31 height: 100vh;
32}
33
34/* Header */
35.header {
36 display: flex;
37 justify-content: space-between;
38 align-items: center;
39 padding: 12px 16px;
40 background: var(--bg-secondary);
41 border-bottom: 1px solid var(--border);
42 -webkit-app-region: drag;
43}
44
45.header-left,
46.header-right {
47 display: flex;
48 align-items: center;
49 gap: 8px;
50 -webkit-app-region: no-drag;
51}
52
53.header select,
54.header button {
55 padding: 6px 12px;
56 background: var(--bg-tertiary);
57 border: 1px solid var(--border);
58 border-radius: 4px;
59 color: var(--text-primary);
60 cursor: pointer;
61 font-size: 13px;
62}
63
64.header button:hover {
65 background: var(--border);
66}
67
68.phase-indicator {
69 display: flex;
70 gap: 4px;
71}
72
73.phase-step {
74 padding: 4px 12px;
75 font-size: 12px;
76 border-radius: 4px;
77 background: var(--bg-tertiary);
78 color: var(--text-secondary);
79}
80
81.phase-step.active {
82 background: var(--accent);
83 color: white;
84}
85
86.phase-step.complete {
87 background: var(--success);
88 color: white;
89}
90
91/* Main Content */
92.main-content {
93 flex: 1;
94 display: flex;
95 overflow: hidden;
96}
97
98/* Document Pane */
99.document-pane {
100 flex: 1;
101 display: flex;
102 flex-direction: column;
103 border-right: 1px solid var(--border);
104}
105
106.document-header {
107 display: flex;
108 justify-content: space-between;
109 align-items: center;
110 padding: 8px 16px;
111 background: var(--bg-secondary);
112 border-bottom: 1px solid var(--border);
113 font-size: 14px;
114 color: var(--text-secondary);
115}
116
117.document-header button {
118 padding: 4px 8px;
119 background: var(--bg-tertiary);
120 border: 1px solid var(--border);
121 border-radius: 4px;
122 color: var(--text-primary);
123 cursor: pointer;
124 font-size: 12px;
125}
126
127.document-content {
128 flex: 1;
129 overflow-y: auto;
130 padding: 24px;
131}
132
133.document-content.editing {
134 font-family: "SF Mono", Monaco, "Cascadia Code", monospace;
135 font-size: 14px;
136 line-height: 1.6;
137 background: var(--bg-primary);
138 border: none;
139 resize: none;
140 color: var(--text-primary);
141}
142
143.document-content.rendered {
144 line-height: 1.7;
145}
146
147.document-content.rendered h1 {
148 font-size: 28px;
149 margin: 24px 0 16px;
150}
151.document-content.rendered h2 {
152 font-size: 22px;
153 margin: 20px 0 12px;
154 color: var(--text-secondary);
155}
156.document-content.rendered h3 {
157 font-size: 18px;
158 margin: 16px 0 8px;
159}
160.document-content.rendered p {
161 margin: 8px 0;
162}
163.document-content.rendered code {
164 background: var(--bg-tertiary);
165 padding: 2px 6px;
166 border-radius: 4px;
167 font-size: 13px;
168}
169.document-content.rendered pre {
170 background: var(--bg-tertiary);
171 padding: 16px;
172 border-radius: 8px;
173 overflow-x: auto;
174 margin: 16px 0;
175}
176.document-content.rendered pre code {
177 background: none;
178 padding: 0;
179}
180.document-content.rendered li {
181 margin-left: 24px;
182 margin-bottom: 4px;
183}
184.document-content.rendered li.task {
185 list-style: none;
186 margin-left: 0;
187}
188.document-content.rendered li.task.done {
189 color: var(--success);
190}
191.document-content.rendered mark.review {
192 background: var(--warning);
193 color: black;
194 padding: 2px 4px;
195 border-radius: 2px;
196}
197.document-content.rendered mark.note {
198 background: var(--accent);
199 color: white;
200 padding: 2px 4px;
201 border-radius: 2px;
202}
203.document-content.rendered .empty {
204 color: var(--text-secondary);
205 font-style: italic;
206}
207
208.badge {
209 background: var(--accent);
210 color: white;
211 padding: 2px 8px;
212 border-radius: 4px;
213 font-size: 11px;
214}
215
216/* Chat Pane */
217.chat-pane {
218 width: 380px;
219 display: flex;
220 flex-direction: column;
221 background: var(--bg-secondary);
222}
223
224.chat-messages {
225 flex: 1;
226 overflow-y: auto;
227 padding: 16px;
228}
229
230.message {
231 margin-bottom: 12px;
232 padding: 10px 14px;
233 border-radius: 8px;
234 max-width: 90%;
235 font-size: 14px;
236 line-height: 1.5;
237 white-space: pre-wrap;
238}
239
240.message.user {
241 background: var(--accent);
242 margin-left: auto;
243}
244
245.message.assistant {
246 background: var(--bg-tertiary);
247}
248
249.message.loading {
250 color: var(--text-secondary);
251 font-style: italic;
252}
253
254.chat-input {
255 display: flex;
256 gap: 8px;
257 padding: 12px;
258 border-top: 1px solid var(--border);
259}
260
261.chat-input input {
262 flex: 1;
263 padding: 10px 14px;
264 background: var(--bg-tertiary);
265 border: 1px solid var(--border);
266 border-radius: 8px;
267 color: var(--text-primary);
268 font-size: 14px;
269}
270
271.chat-input input:focus {
272 outline: none;
273 border-color: var(--accent);
274}
275
276.chat-input button {
277 padding: 10px 16px;
278 background: var(--accent);
279 border: none;
280 border-radius: 8px;
281 color: white;
282 cursor: pointer;
283 font-size: 14px;
284}
285
286.chat-input button:hover:not(:disabled) {
287 background: var(--accent-hover);
288}
289
290.chat-input button:disabled {
291 opacity: 0.5;
292 cursor: not-allowed;
293}
294
295/* Action Bar */
296.action-bar {
297 display: flex;
298 justify-content: space-between;
299 align-items: center;
300 padding: 12px 16px;
301 background: var(--bg-secondary);
302 border-top: 1px solid var(--border);
303}
304
305.action-bar-left,
306.action-bar-right {
307 display: flex;
308 align-items: center;
309 gap: 16px;
310}
311
312.token-indicator {
313 display: flex;
314 align-items: center;
315 gap: 8px;
316}
317
318.token-bar {
319 width: 100px;
320 height: 6px;
321 background: var(--bg-tertiary);
322 border-radius: 3px;
323 overflow: hidden;
324}
325
326.token-fill {
327 height: 100%;
328 transition: width 0.3s ease;
329}
330
331.token-label {
332 font-size: 12px;
333 color: var(--text-secondary);
334}
335
336.permission-toggle {
337 display: flex;
338 align-items: center;
339 gap: 6px;
340 font-size: 13px;
341 color: var(--text-secondary);
342 cursor: pointer;
343}
344
345.permission-toggle input {
346 cursor: pointer;
347}
348
349.btn-secondary {
350 padding: 8px 16px;
351 background: var(--bg-tertiary);
352 border: 1px solid var(--border);
353 border-radius: 6px;
354 color: var(--text-primary);
355 cursor: pointer;
356 font-size: 14px;
357}
358
359.btn-secondary:hover:not(:disabled) {
360 background: var(--border);
361}
362
363.btn-secondary:disabled {
364 opacity: 0.5;
365 cursor: not-allowed;
366}
367
368.btn-primary {
369 padding: 8px 20px;
370 background: var(--accent);
371 border: none;
372 border-radius: 6px;
373 color: white;
374 cursor: pointer;
375 font-weight: 500;
376 font-size: 14px;
377}
378
379.btn-primary:hover:not(:disabled) {
380 background: var(--accent-hover);
381}
382
383.btn-primary:disabled {
384 opacity: 0.5;
385 cursor: not-allowed;
386}
387
388.implementing-status {
389 color: var(--success);
390 font-size: 14px;
391}