nandi/oripublic Fork 0
2434cc7fb724f02b34c0189dfd5fb30c1a8a68e3
Commits
Clone
git clone https://git.rickub.com/nandi/ori.git
git clone ssh://git@rickub.com/nandi/ori.git

Host key fingerprint (ed25519): SHA256:iycHnxEyq0Q7uyVpB7JlznP0G7JrTPXLYRcAU5CSLhc — verify it before your first connect.

forked from bots-garden/ori

app.css · 411 lines · 6.1 KBCSS Blame HistoryRaw
✨ Introduce new feature(s): ACP web client — Go backend (agent, bridge, httpserver, mockagent) + React SPA (Zed-like agent panel), tests, quality gate PASS 2434cc7 k33g yesterday1/* Ori — agent panel styling, in the spirit of Zed's agent panel:
2 a quiet column of conversation, tool activity and a composer pinned at
3 the bottom. Light and dark follow the system preference. */
4
5:root {
6 color-scheme: light dark;
7 font-family: system-ui, -apple-system, "Segoe UI", sans-serif;
8
9 --bg: #fafafa;
10 --panel: #ffffff;
11 --text: #1c1c1c;
12 --muted: #6b6b6b;
13 --border: #e2e2e2;
14 --accent: #3b82f6;
15 --user-bubble: #e8f0fe;
16 --error: #b91c1c;
17 --error-bg: #fee2e2;
18 --code-bg: #f2f2f2;
19}
20
21@media (prefers-color-scheme: dark) {
22 :root {
23 --bg: #1e2025;
24 --panel: #26282e;
25 --text: #e6e6e6;
26 --muted: #9a9a9a;
27 --border: #3a3d45;
28 --accent: #60a5fa;
29 --user-bubble: #2f3a4f;
30 --error: #fca5a5;
31 --error-bg: #3f2222;
32 --code-bg: #1a1c20;
33 }
34}
35
36body {
37 margin: 0;
38 background: var(--bg);
39 color: var(--text);
40}
41
42.app {
43 display: flex;
44 flex-direction: column;
45 height: 100vh;
46 max-width: 52rem;
47 margin: 0 auto;
48}
49
50/* ---- header ---- */
51
52.topbar {
53 display: flex;
54 align-items: baseline;
55 gap: 0.75rem;
56 padding: 0.6rem 1rem;
57 border-bottom: 1px solid var(--border);
58}
59
60.topbar-title {
61 font-size: 1.05rem;
62 margin: 0;
63}
64
65.status {
66 font-size: 0.75rem;
67 color: var(--muted);
68}
69
70.status-online::before,
71.status-offline::before,
72.status-connecting::before {
73 content: "●";
74 margin-right: 0.3rem;
75}
76
77.status-online::before {
78 color: #22c55e;
79}
80
81.status-offline::before {
82 color: #ef4444;
83}
84
85.status-connecting::before {
86 color: #eab308;
87}
88
89/* ---- thread ---- */
90
91.thread {
92 flex: 1;
93 overflow-y: auto;
94 padding: 1rem;
95 display: flex;
96 flex-direction: column;
97 gap: 0.75rem;
98}
99
100.thread-empty,
101.thread-working {
102 color: var(--muted);
103 font-size: 0.85rem;
104 font-style: italic;
105}
106
107.message {
108 border-radius: 8px;
109 padding: 0.55rem 0.8rem;
110 line-height: 1.5;
111 overflow-wrap: anywhere;
112}
113
114.message-user {
115 align-self: flex-end;
116 background: var(--user-bubble);
117 white-space: pre-wrap;
118 max-width: 85%;
119}
120
121.message-agent {
122 background: var(--panel);
123 border: 1px solid var(--border);
124}
125
126.message-error {
127 background: var(--error-bg);
128 color: var(--error);
129 font-size: 0.85rem;
130}
131
132/* ---- markdown ---- */
133
134.markdown > :first-child {
135 margin-top: 0;
136}
137
138.markdown > :last-child {
139 margin-bottom: 0;
140}
141
142.markdown pre {
143 background: var(--code-bg);
144 border: 1px solid var(--border);
145 border-radius: 6px;
146 padding: 0.6rem;
147 overflow-x: auto;
148}
149
150.markdown code {
151 background: var(--code-bg);
152 border-radius: 4px;
153 padding: 0.1rem 0.3rem;
154 font-size: 0.85em;
155}
156
157.markdown pre code {
158 background: none;
159 padding: 0;
160}
161
162.markdown table {
163 border-collapse: collapse;
164}
165
166.markdown th,
167.markdown td {
168 border: 1px solid var(--border);
169 padding: 0.3rem 0.6rem;
170}
171
172/* ---- thoughts ---- */
173
174.thought {
175 border: 1px dashed var(--border);
176 border-radius: 8px;
177 padding: 0.35rem 0.8rem;
178 color: var(--muted);
179 font-size: 0.9rem;
180}
181
182.thought-summary {
183 cursor: pointer;
184 user-select: none;
185}
186
187.thought-body {
188 padding-top: 0.4rem;
189}
190
191/* ---- tool calls ---- */
192
193.tool {
194 border: 1px solid var(--border);
195 border-left: 3px solid var(--muted);
196 border-radius: 8px;
197 padding: 0.35rem 0.8rem;
198 background: var(--panel);
199 font-size: 0.9rem;
200}
201
202.tool-in_progress {
203 border-left-color: var(--accent);
204}
205
206.tool-completed {
207 border-left-color: #22c55e;
208}
209
210.tool-failed {
211 border-left-color: #ef4444;
212}
213
214.tool-summary {
215 display: flex;
216 align-items: center;
217 gap: 0.5rem;
218 cursor: pointer;
219 user-select: none;
220}
221
222.tool-title {
223 flex: 1;
224 overflow: hidden;
225 text-overflow: ellipsis;
226 white-space: nowrap;
227}
228
229.tool-status {
230 font-size: 0.72rem;
231 color: var(--muted);
232 border: 1px solid var(--border);
233 border-radius: 999px;
234 padding: 0.05rem 0.5rem;
235}
236
237.tool-status-failed {
238 color: var(--error);
239}
240
241.tool-body {
242 padding: 0.4rem 0 0.2rem;
243}
244
245.tool-locations {
246 margin: 0 0 0.4rem;
247 padding-left: 1.1rem;
248 color: var(--muted);
249}
250
251.tool-diff {
252 background: var(--code-bg);
253 border: 1px solid var(--border);
254 border-radius: 6px;
255 padding: 0.5rem;
256 overflow-x: auto;
257}
258
259.tool-diff-path {
260 display: block;
261 margin-bottom: 0.3rem;
262 color: var(--muted);
263}
264
265.tool-diff pre {
266 margin: 0;
267 font-size: 0.8rem;
268}
269
270.tool-diff-old {
271 color: #dc2626;
272}
273
274.tool-diff-new {
275 color: #16a34a;
276}
277
278.tool-terminal {
279 color: var(--muted);
280 font-style: italic;
281}
282
283/* ---- plan ---- */
284
285.plan {
286 margin: 0 1rem;
287 border: 1px solid var(--border);
288 border-radius: 8px;
289 padding: 0.4rem 0.8rem;
290 background: var(--panel);
291 font-size: 0.85rem;
292}
293
294.plan-summary {
295 cursor: pointer;
296 user-select: none;
297 color: var(--muted);
298}
299
300.plan-entries {
301 list-style: none;
302 margin: 0.4rem 0 0.2rem;
303 padding: 0;
304}
305
306.plan-entry {
307 padding: 0.1rem 0;
308}
309
310.plan-entry-completed {
311 color: var(--muted);
312 text-decoration: line-through;
313}
314
315.plan-entry-in_progress {
316 color: var(--accent);
317}
318
319/* ---- permissions ---- */
320
321.permission {
322 margin: 0.5rem 1rem 0;
323 border: 1px solid var(--accent);
324 border-radius: 8px;
325 padding: 0.6rem 0.8rem;
326 background: var(--panel);
327}
328
329.permission-title {
330 margin: 0 0 0.5rem;
331 font-size: 0.9rem;
332}
333
334.permission-options {
335 display: flex;
336 gap: 0.5rem;
337 flex-wrap: wrap;
338}
339
340.permission-option {
341 border: 1px solid var(--border);
342 border-radius: 6px;
343 padding: 0.35rem 0.8rem;
344 font: inherit;
345 font-size: 0.85rem;
346 cursor: pointer;
347 background: var(--panel);
348 color: var(--text);
349}
350
351.permission-allow_once,
352.permission-allow_always {
353 background: var(--accent);
354 border-color: var(--accent);
355 color: #ffffff;
356}
357
358.permission-reject_once,
359.permission-reject_always {
360 border-color: #dc2626;
361 color: #dc2626;
362}
363
364/* ---- composer ---- */
365
366.composer {
367 display: flex;
368 gap: 0.5rem;
369 padding: 0.75rem 1rem 1rem;
370 border-top: 1px solid var(--border);
371}
372
373.composer-input {
374 flex: 1;
375 resize: none;
376 background: var(--panel);
377 color: var(--text);
378 border: 1px solid var(--border);
379 border-radius: 8px;
380 padding: 0.55rem 0.7rem;
381 font: inherit;
382}
383
384.composer-input:focus {
385 outline: 2px solid var(--accent);
386 outline-offset: -1px;
387}
388
389.composer-send,
390.composer-stop {
391 align-self: flex-end;
392 border: none;
393 border-radius: 8px;
394 padding: 0.55rem 1rem;
395 font: inherit;
396 cursor: pointer;
397 color: #ffffff;
398}
399
400.composer-send {
401 background: var(--accent);
402}
403
404.composer-send:disabled {
405 opacity: 0.5;
406 cursor: default;
407}
408
409.composer-stop {
410 background: #dc2626;
411}