aboutsummaryrefslogtreecommitdiffstats
path: root/renderer/src/styles/globals.css
diff options
context:
space:
mode:
authorbndw <ben@bdw.to>2026-03-04 21:21:22 -0800
committerbndw <ben@bdw.to>2026-03-04 21:21:22 -0800
commitb6405dd6a4ba65fc5dc6746db7be7be7d0bb29f3 (patch)
tree7d04268e9adfe9a6a83029556ef0dd5f72a63d42 /renderer/src/styles/globals.css
parentead65fd7d50ead785f437cc895c74146bd232702 (diff)
feat: replace header dropdowns with collapsible sidebar tree
- Add Sidebar.tsx: project/session tree with inline rename, collapse/resize - App.tsx: load all sessions at startup, sync selectedProject on session click - Header.tsx: strip project/session UI, keep only right-side controls - globals.css: add .main-layout, sidebar, item, and activity-dot styles - Chat pane: move toggle button to left, use triangle icons matching sidebar
Diffstat (limited to 'renderer/src/styles/globals.css')
-rw-r--r--renderer/src/styles/globals.css337
1 files changed, 318 insertions, 19 deletions
diff --git a/renderer/src/styles/globals.css b/renderer/src/styles/globals.css
index 20275ae..c463432 100644
--- a/renderer/src/styles/globals.css
+++ b/renderer/src/styles/globals.css
@@ -122,23 +122,6 @@ body {
122 background: var(--bg-tertiary); 122 background: var(--bg-tertiary);
123} 123}
124 124
125.session-rename-input {
126 padding: 5px 10px;
127 background: var(--bg-tertiary);
128 border: 1px solid var(--accent);
129 border-radius: 2px;
130 color: var(--text-primary);
131 font-size: 12px;
132 font-family: inherit;
133 min-width: 140px;
134 outline: none;
135 box-shadow: 0 0 0 2px rgba(96, 165, 250, 0.2);
136}
137
138html[data-theme="light"] .session-rename-input {
139 box-shadow: 0 0 0 2px rgba(37, 99, 235, 0.2);
140}
141
142/* Theme toggle */ 125/* Theme toggle */
143.theme-toggle { 126.theme-toggle {
144 font-size: 11px; 127 font-size: 11px;
@@ -167,6 +150,17 @@ html[data-theme="light"] .session-rename-input {
167 border-radius: 2px; 150 border-radius: 2px;
168 background: var(--bg-tertiary); 151 background: var(--bg-tertiary);
169 color: var(--text-secondary); 152 color: var(--text-secondary);
153 border: none;
154 font-family: inherit;
155}
156
157/* Reachable phases rendered as <button> — add pointer + hover */
158button.phase-step {
159 cursor: pointer;
160}
161
162button.phase-step:hover {
163 filter: brightness(1.15);
170} 164}
171 165
172.phase-step.active { 166.phase-step.active {
@@ -179,6 +173,12 @@ html[data-theme="light"] .session-rename-input {
179 color: white; 173 color: white;
180} 174}
181 175
176/* Viewing a historical artifact: outline on the viewed badge */
177.phase-step.viewing {
178 outline: 2px solid var(--accent);
179 outline-offset: -2px;
180}
181
182/* ── Branch Badge ────────────────────────────────────────────── */ 182/* ── Branch Badge ────────────────────────────────────────────── */
183.branch-badge { 183.branch-badge {
184 padding: 3px 10px; 184 padding: 3px 10px;
@@ -206,13 +206,277 @@ html[data-theme="light"] .session-rename-input {
206 color: white; 206 color: white;
207} 207}
208 208
209/* ── Main Content ─────────────────────────────────────────────── */ 209/* ── Main Layout (sidebar + content row) ─────────────────────── */
210.main-layout {
211 flex: 1;
212 display: flex;
213 overflow: hidden;
214}
215
216/* ── Main Content (document + chat row) ──────────────────────── */
210.main-content { 217.main-content {
211 flex: 1; 218 flex: 1;
212 display: flex; 219 display: flex;
213 overflow: hidden; 220 overflow: hidden;
214} 221}
215 222
223/* ── Sidebar ─────────────────────────────────────────────────── */
224.sidebar {
225 display: flex;
226 flex-direction: column;
227 background: var(--bg-secondary);
228 border-right: 1px solid var(--border);
229 flex-shrink: 0;
230 overflow: hidden;
231 min-width: 0;
232}
233
234.sidebar.collapsed {
235 width: 32px !important;
236 align-items: center;
237 padding-top: 8px;
238}
239
240.sidebar-header {
241 display: flex;
242 align-items: center;
243 justify-content: space-between;
244 padding: 8px 10px;
245 border-bottom: 1px solid var(--border);
246 flex-shrink: 0;
247}
248
249.sidebar-title {
250 font-size: 10px;
251 font-weight: 700;
252 letter-spacing: 0.12em;
253 text-transform: uppercase;
254 color: var(--text-secondary);
255 user-select: none;
256}
257
258.sidebar-header-actions {
259 display: flex;
260 gap: 4px;
261}
262
263.sidebar-action-btn,
264.sidebar-collapse-btn {
265 background: transparent;
266 border: none;
267 color: var(--text-secondary);
268 cursor: pointer;
269 font-size: 13px;
270 font-family: inherit;
271 padding: 2px 5px;
272 border-radius: 2px;
273 line-height: 1;
274 transition: background 0.1s, color 0.1s;
275}
276
277.sidebar-action-btn:hover,
278.sidebar-collapse-btn:hover {
279 background: var(--bg-tertiary);
280 color: var(--text-primary);
281}
282
283.sidebar-tree {
284 flex: 1;
285 overflow-y: auto;
286 padding: 4px 0;
287}
288
289/* ── Sidebar Resize Handle ───────────────────────────────────── */
290.sidebar-resize-handle {
291 width: 5px;
292 background: transparent;
293 cursor: col-resize;
294 flex-shrink: 0;
295 transition: background 0.15s;
296}
297
298.sidebar-resize-handle:hover {
299 background: var(--accent);
300}
301
302/* ── Project Items ───────────────────────────────────────────── */
303.project-item {
304 display: flex;
305 align-items: center;
306 justify-content: space-between;
307 padding: 5px 10px;
308 cursor: default;
309 user-select: none;
310 gap: 4px;
311}
312
313.project-item:hover {
314 background: var(--bg-tertiary);
315}
316
317.project-item.selected {
318 background: var(--bg-tertiary);
319}
320
321.project-name {
322 flex: 1;
323 font-size: 11px;
324 font-weight: 600;
325 letter-spacing: 0.04em;
326 text-transform: uppercase;
327 color: var(--text-primary);
328 cursor: pointer;
329 white-space: nowrap;
330 overflow: hidden;
331 text-overflow: ellipsis;
332 min-width: 0;
333}
334
335.project-item.selected .project-name {
336 color: var(--accent);
337}
338
339/* ── Session Items ───────────────────────────────────────────── */
340.session-item {
341 display: flex;
342 align-items: center;
343 padding: 4px 10px 4px 22px;
344 gap: 4px;
345 user-select: none;
346}
347
348.session-item:hover {
349 background: var(--bg-tertiary);
350}
351
352.session-item.selected {
353 background: var(--bg-tertiary);
354 border-left: 2px solid var(--accent);
355 padding-left: 20px;
356}
357
358.session-name {
359 flex: 1;
360 font-size: 12px;
361 color: var(--text-secondary);
362 cursor: pointer;
363 white-space: nowrap;
364 overflow: hidden;
365 text-overflow: ellipsis;
366 min-width: 0;
367 display: flex;
368 align-items: center;
369 gap: 5px;
370}
371
372.session-item.selected .session-name {
373 color: var(--text-primary);
374}
375
376/* ── Activity dot ────────────────────────────────────────────── */
377.session-activity-dot {
378 display: inline-block;
379 width: 6px;
380 height: 6px;
381 border-radius: 50%;
382 background: var(--accent);
383 flex-shrink: 0;
384 animation: activity-pulse 1.8s ease-in-out infinite;
385}
386
387@keyframes activity-pulse {
388 0%, 100% { opacity: 0.4; }
389 50% { opacity: 1; }
390}
391
392/* ── Shared item controls (shown on hover) ───────────────────── */
393.item-controls {
394 display: flex;
395 gap: 2px;
396 flex-shrink: 0;
397 opacity: 0;
398 transition: opacity 0.1s;
399}
400
401.project-item:hover .item-controls,
402.session-item:hover .item-controls {
403 opacity: 1;
404}
405
406.session-item.selected .item-controls {
407 opacity: 1;
408}
409
410.item-btn {
411 background: transparent;
412 border: none;
413 color: var(--text-secondary);
414 cursor: pointer;
415 font-size: 11px;
416 font-family: inherit;
417 padding: 1px 4px;
418 border-radius: 2px;
419 line-height: 1.4;
420 transition: background 0.1s, color 0.1s;
421}
422
423.item-btn:hover {
424 background: var(--bg-primary);
425 color: var(--text-primary);
426}
427
428.item-btn-danger:hover {
429 background: var(--danger);
430 color: white;
431}
432
433/* ── Sidebar empty states ────────────────────────────────────── */
434.sidebar-empty {
435 font-size: 11px;
436 color: var(--text-secondary);
437 font-style: italic;
438 padding: 10px 12px;
439 text-align: center;
440}
441
442.session-empty {
443 padding: 4px 10px 4px 22px;
444 text-align: left;
445}
446
447/* ── Sidebar scrollbar ───────────────────────────────────────── */
448.sidebar-tree::-webkit-scrollbar {
449 width: 4px;
450}
451
452.sidebar-tree::-webkit-scrollbar-track {
453 background: transparent;
454}
455
456.sidebar-tree::-webkit-scrollbar-thumb {
457 background: var(--bg-tertiary);
458 border-radius: 2px;
459}
460
461/* ── Session rename input (in sidebar) ───────────────────────── */
462.session-rename-input {
463 flex: 1;
464 padding: 2px 6px;
465 background: var(--bg-tertiary);
466 border: 1px solid var(--accent);
467 border-radius: 2px;
468 color: var(--text-primary);
469 font-size: 12px;
470 font-family: inherit;
471 min-width: 0;
472 outline: none;
473 box-shadow: 0 0 0 2px rgba(96, 165, 250, 0.2);
474}
475
476html[data-theme="light"] .session-rename-input {
477 box-shadow: 0 0 0 2px rgba(37, 99, 235, 0.2);
478}
479
216/* ── Document Pane ───────────────────────────────────────────── */ 480/* ── Document Pane ───────────────────────────────────────────── */
217.document-pane { 481.document-pane {
218 flex: 1; 482 flex: 1;
@@ -406,6 +670,11 @@ html[data-theme="light"] .session-rename-input {
406 text-transform: uppercase; 670 text-transform: uppercase;
407} 671}
408 672
673.badge-readonly {
674 background: var(--bg-tertiary);
675 color: var(--text-secondary);
676}
677
409/* ── Chat Pane ───────────────────────────────────────────────── */ 678/* ── Chat Pane ───────────────────────────────────────────────── */
410.chat-pane { 679.chat-pane {
411 display: flex; 680 display: flex;
@@ -432,7 +701,8 @@ html[data-theme="light"] .session-rename-input {
432/* ── Chat Header Strip ───────────────────────────────────────── */ 701/* ── Chat Header Strip ───────────────────────────────────────── */
433.chat-header { 702.chat-header {
434 display: flex; 703 display: flex;
435 justify-content: space-between; 704 justify-content: flex-start;
705 gap: 8px;
436 align-items: center; 706 align-items: center;
437 padding: 7px 12px; 707 padding: 7px 12px;
438 background: var(--bg-secondary); 708 background: var(--bg-secondary);
@@ -982,6 +1252,35 @@ html[data-theme="light"] .settings-textarea:focus {
982 border-color: var(--accent); 1252 border-color: var(--accent);
983} 1253}
984 1254
1255/* ── Phase model override rows ───────────────────────────────── */
1256.settings-phase-model-list {
1257 display: flex;
1258 flex-direction: column;
1259 gap: 8px;
1260 margin-top: 8px;
1261}
1262
1263.settings-phase-model-row {
1264 display: grid;
1265 grid-template-columns: 80px 1fr auto;
1266 align-items: center;
1267 gap: 8px;
1268}
1269
1270.settings-phase-model-label {
1271 font-size: 12px;
1272 font-weight: 600;
1273 color: var(--text-secondary);
1274 text-transform: uppercase;
1275 letter-spacing: 0.05em;
1276}
1277
1278.settings-phase-model-actions {
1279 display: flex;
1280 align-items: center;
1281 gap: 6px;
1282}
1283
985/* ── Settings Actions Row ────────────────────────────────────── */ 1284/* ── Settings Actions Row ────────────────────────────────────── */
986.settings-actions { 1285.settings-actions {
987 display: flex; 1286 display: flex;