@bugabinga/pi-ext-diff-review 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,772 @@
1
+ @font-face {
2
+ font-family: "JetBrains Mono Nerd";
3
+ src: url("./assets/JetBrainsMonoNuguCode.woff2") format("woff2");
4
+ font-weight: 400;
5
+ font-style: normal;
6
+ font-display: swap;
7
+ }
8
+
9
+ :root {
10
+ color-scheme: dark light;
11
+
12
+ /* Nugu dark palette */
13
+ --nugu-debug: #ed5eed;
14
+ --nugu-error: #e46479;
15
+ --nugu-warning: #9e9a69;
16
+ --nugu-info: #3ec5dd;
17
+ --nugu-content-normal: #ededed;
18
+ --nugu-content-backdrop: #121212;
19
+ --nugu-content-accent: #d151d1;
20
+ --nugu-content-minor: #8b8b8b;
21
+ --nugu-content-focus: #7ba1aa;
22
+ --nugu-content-unfocus: #5d5d5d;
23
+ --nugu-content-important-local: #b59ae4;
24
+ --nugu-content-important-global: #dfd3f3;
25
+ --nugu-ui-normal: #dbdbdb;
26
+ --nugu-ui-backdrop: #242424;
27
+ --nugu-ui-accent: #d86dd8;
28
+ --nugu-ui-minor: #9d9d9d;
29
+ --nugu-ui-focus: #9aabae;
30
+ --nugu-ui-unfocus: #6f6f6f;
31
+ --nugu-ui-important-local: #c9b6eb;
32
+ --nugu-ui-important-global: #f3effb;
33
+
34
+ --bg: var(--nugu-content-backdrop);
35
+ --panel: color-mix(in srgb, var(--nugu-ui-backdrop) 86%, var(--nugu-content-backdrop));
36
+ --panel-2: var(--nugu-ui-backdrop);
37
+ --panel-3: color-mix(in srgb, var(--nugu-ui-backdrop) 72%, var(--nugu-content-backdrop));
38
+ --fg: var(--nugu-content-normal);
39
+ --fg-soft: var(--nugu-ui-normal);
40
+ --muted: var(--nugu-ui-minor);
41
+ --faint: var(--nugu-ui-unfocus);
42
+ --accent: var(--nugu-ui-accent);
43
+ --accent-2: var(--nugu-info);
44
+ --focus: var(--nugu-ui-focus);
45
+ --border: color-mix(in srgb, var(--nugu-ui-normal) 14%, transparent);
46
+ --shadow: 0 18px 60px color-mix(in srgb, #000 45%, transparent);
47
+ --radius: 12px;
48
+
49
+ font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
50
+ background: var(--bg);
51
+ color: var(--fg);
52
+ }
53
+
54
+ :root[data-theme="light"] {
55
+ color-scheme: light;
56
+ --nugu-debug: #a112a1;
57
+ --nugu-error: #c0223c;
58
+ --nugu-warning: #242317;
59
+ --nugu-info: #13616e;
60
+ --nugu-content-normal: #121212;
61
+ --nugu-content-backdrop: #ededed;
62
+ --nugu-content-accent: #ae2eae;
63
+ --nugu-content-minor: #3b3b3b;
64
+ --nugu-content-focus: #184e5b;
65
+ --nugu-content-unfocus: #6f6f6f;
66
+ --nugu-content-important-local: #715696;
67
+ --nugu-content-important-global: #4f3c69;
68
+ --nugu-ui-normal: #242424;
69
+ --nugu-ui-backdrop: #dbdbdb;
70
+ --nugu-ui-accent: #922792;
71
+ --nugu-ui-minor: #292929;
72
+ --nugu-ui-focus: #15333b;
73
+ --nugu-ui-unfocus: #5d5d5d;
74
+ --nugu-ui-important-local: #604980;
75
+ --nugu-ui-important-global: #3e2f53;
76
+ --panel: color-mix(in srgb, var(--nugu-ui-backdrop) 72%, white);
77
+ --panel-2: color-mix(in srgb, var(--nugu-ui-backdrop) 88%, white);
78
+ --panel-3: color-mix(in srgb, var(--nugu-ui-backdrop) 55%, white);
79
+ --border: color-mix(in srgb, var(--nugu-ui-normal) 16%, transparent);
80
+ --shadow: 0 18px 60px color-mix(in srgb, #000 14%, transparent);
81
+ }
82
+
83
+
84
+ * { box-sizing: border-box; }
85
+ html, body { height: 100%; }
86
+ body {
87
+ margin: 0;
88
+ background: radial-gradient(circle at top left, color-mix(in srgb, var(--accent) 12%, transparent), transparent 28rem), var(--bg);
89
+ }
90
+ button, select, textarea { font: inherit; }
91
+ code, pre { font-family: "JetBrains Mono Nerd", "JetBrains Mono", "Fira Code", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; }
92
+ button { cursor: pointer; }
93
+ button:disabled { cursor: not-allowed; opacity: .48; }
94
+
95
+ #app {
96
+ --left-pane: 288px;
97
+ --right-pane: 382px;
98
+ display: grid;
99
+ grid-template-columns: var(--left-pane) 8px minmax(0, 1fr) 8px var(--right-pane);
100
+ height: 100vh;
101
+ overflow: hidden;
102
+ }
103
+ #app[data-left-collapsed="true"] { --left-pane: 0px; }
104
+ #app[data-right-collapsed="true"] { --right-pane: 0px; }
105
+ #app[data-resizing="true"] { cursor: col-resize; user-select: none; }
106
+ #app[data-left-collapsed="true"] #sidebar,
107
+ #app[data-right-collapsed="true"] #drawer { padding-inline: 0; border: 0; }
108
+
109
+ #sidebar, #drawer, #main {
110
+ min-height: 0;
111
+ }
112
+
113
+ #sidebar, #drawer {
114
+ background: color-mix(in srgb, var(--panel) 95%, transparent);
115
+ border-color: var(--border);
116
+ padding: 14px 12px;
117
+ overflow: hidden;
118
+ }
119
+ #sidebar { border-inline-end: 1px solid var(--border); }
120
+ #drawer { border-inline-start: 1px solid var(--border); overflow-y: auto; contain: layout paint; }
121
+ #main { position: relative; display: grid; grid-template-rows: auto minmax(0, 1fr); overflow: hidden; }
122
+ .splitter {
123
+ position: relative;
124
+ z-index: 4;
125
+ display: flex;
126
+ align-items: center;
127
+ justify-content: center;
128
+ background: color-mix(in srgb, var(--panel) 72%, transparent);
129
+ cursor: col-resize;
130
+ border-inline: 1px solid color-mix(in srgb, var(--border) 70%, transparent);
131
+ }
132
+ .splitter::before {
133
+ content: "";
134
+ width: 2px;
135
+ height: 42px;
136
+ border-radius: 999px;
137
+ background: color-mix(in srgb, var(--muted) 42%, transparent);
138
+ }
139
+ .splitter:hover,
140
+ #app[data-resizing="true"] .splitter {
141
+ background: color-mix(in srgb, var(--focus) 16%, var(--panel));
142
+ }
143
+ .pane-toggle {
144
+ position: absolute;
145
+ top: 12px;
146
+ width: 24px;
147
+ height: 24px;
148
+ padding: 0;
149
+ border-radius: 999px;
150
+ border: 1px solid var(--border);
151
+ background: color-mix(in srgb, var(--panel-2) 92%, var(--bg));
152
+ color: var(--fg);
153
+ font-weight: 900;
154
+ line-height: 1;
155
+ }
156
+ #left-splitter .pane-toggle { left: -12px; }
157
+ #right-splitter .pane-toggle { right: -12px; }
158
+ #app[data-left-collapsed="true"] #toggle-left,
159
+ #app[data-right-collapsed="true"] #toggle-right {
160
+ width: 32px;
161
+ height: 32px;
162
+ color: var(--fg);
163
+ background: linear-gradient(180deg, color-mix(in srgb, var(--accent) 38%, var(--panel-2)), color-mix(in srgb, var(--accent) 20%, var(--panel-2)));
164
+ border-color: color-mix(in srgb, var(--accent) 58%, var(--border));
165
+ box-shadow: 0 8px 26px color-mix(in srgb, #000 32%, transparent), 0 0 0 3px color-mix(in srgb, var(--accent) 16%, transparent);
166
+ }
167
+ #app[data-left-collapsed="true"] #toggle-left { left: 50%; transform: translateX(-50%); }
168
+ #app[data-right-collapsed="true"] #toggle-right { right: 50%; transform: translateX(50%); }
169
+
170
+ #topbar {
171
+ display: flex;
172
+ align-items: center;
173
+ justify-content: space-between;
174
+ gap: 14px;
175
+ padding: 14px 14px 10px;
176
+ border-bottom: 1px solid var(--border);
177
+ background: color-mix(in srgb, var(--bg) 92%, var(--panel));
178
+ }
179
+ .topbar-actions {
180
+ display: flex;
181
+ align-items: center;
182
+ gap: 10px;
183
+ flex-shrink: 0;
184
+ }
185
+ .search-wrap {
186
+ position: relative;
187
+ }
188
+ .search-wrap input {
189
+ width: 200px;
190
+ padding: 6px 58px 6px 11px;
191
+ border: 1px solid color-mix(in srgb, var(--border) 70%, transparent);
192
+ border-radius: 999px;
193
+ background: color-mix(in srgb, var(--bg) 60%, var(--panel-2));
194
+ color: var(--fg);
195
+ font-size: 12px;
196
+ outline: none;
197
+ box-shadow: inset 0 1px 0 color-mix(in srgb, var(--fg) 7%, transparent);
198
+ transition: width 160ms ease, border-color 160ms ease, box-shadow 160ms ease;
199
+ }
200
+ .search-clear {
201
+ position: absolute;
202
+ right: 9px;
203
+ top: 50%;
204
+ transform: translateY(-50%);
205
+ display: grid;
206
+ place-items: center;
207
+ width: 18px;
208
+ height: 18px;
209
+ padding: 0;
210
+ border: 0;
211
+ border-radius: 999px;
212
+ background: color-mix(in srgb, var(--muted) 20%, transparent);
213
+ color: var(--muted);
214
+ font: 800 14px/1 system-ui, sans-serif;
215
+ }
216
+ .search-clear:hover {
217
+ background: color-mix(in srgb, var(--accent) 24%, transparent);
218
+ color: var(--fg);
219
+ }
220
+ .search-wrap input:placeholder-shown + .search-clear { display: none; }
221
+ .search-badge {
222
+ position: absolute;
223
+ right: 34px;
224
+ top: 50%;
225
+ transform: translateY(-50%);
226
+ padding: 1px 6px;
227
+ border-radius: 999px;
228
+ background: color-mix(in srgb, var(--accent) 22%, transparent);
229
+ color: var(--muted);
230
+ font-size: 11px;
231
+ font-weight: 700;
232
+ pointer-events: none;
233
+ }
234
+ .search-wrap input:focus {
235
+ border-color: var(--focus);
236
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--focus) 22%, transparent);
237
+ width: 280px;
238
+ }
239
+ .search-wrap input::placeholder { color: var(--muted); }
240
+ .search-results {
241
+ position: absolute;
242
+ top: calc(100% + 6px);
243
+ right: 0;
244
+ width: min(460px, 60vw);
245
+ max-height: 60vh;
246
+ overflow-y: auto;
247
+ border: 1px solid var(--border);
248
+ border-radius: 14px;
249
+ background: color-mix(in srgb, var(--panel-2) 96%, var(--bg));
250
+ box-shadow: var(--shadow);
251
+ backdrop-filter: blur(14px);
252
+ z-index: 40;
253
+ padding: 6px;
254
+ }
255
+ .search-result {
256
+ padding: 8px 10px;
257
+ border-radius: 10px;
258
+ cursor: pointer;
259
+ font-size: 12px;
260
+ line-height: 1.4;
261
+ }
262
+ .search-result:hover,
263
+ .search-result:focus-visible {
264
+ background: color-mix(in srgb, var(--focus) 14%, transparent);
265
+ outline: none;
266
+ }
267
+ .search-result-active {
268
+ background: color-mix(in srgb, var(--accent) 22%, transparent) !important;
269
+ border-left: 3px solid var(--accent);
270
+ padding-left: 7px;
271
+ }
272
+ .search-result-file {
273
+ color: var(--fg);
274
+ font-family: "JetBrains Mono Nerd", "JetBrains Mono", ui-monospace, monospace;
275
+ font-weight: 750;
276
+ font-size: 11px;
277
+ }
278
+ .search-result-loc {
279
+ color: var(--muted);
280
+ font-family: "JetBrains Mono Nerd", "JetBrains Mono", ui-monospace, monospace;
281
+ font-size: 11px;
282
+ margin-left: 4px;
283
+ }
284
+ .search-result-preview {
285
+ color: var(--fg-soft);
286
+ font-family: "JetBrains Mono Nerd", "JetBrains Mono", ui-monospace, monospace;
287
+ font-size: 11px;
288
+ overflow: hidden;
289
+ text-overflow: ellipsis;
290
+ white-space: nowrap;
291
+ margin-top: 2px;
292
+ }
293
+ .search-result-preview mark {
294
+ color: #fff;
295
+ background: #c026d3;
296
+ border-radius: 3px;
297
+ padding: 1px 3px;
298
+ font-weight: 700;
299
+ }
300
+ :root[data-theme="light"] .search-result-preview mark {
301
+ color: #fff;
302
+ background: #a21caf;
303
+ }
304
+ .search-result-active .search-result-preview mark {
305
+ background: #e879f9;
306
+ color: #1e1e2e;
307
+ }
308
+ .search-empty {
309
+ padding: 14px;
310
+ color: var(--muted);
311
+ font-size: 13px;
312
+ text-align: center;
313
+ }
314
+ .search-more {
315
+ padding: 8px 10px;
316
+ color: var(--muted);
317
+ font-size: 11px;
318
+ text-align: center;
319
+ }
320
+ #diffs {
321
+ overflow: auto;
322
+ padding: 16px 14px 72vh;
323
+ scroll-padding-top: 16px;
324
+ }
325
+
326
+ .brand { display: grid; grid-template-columns: 1fr auto; gap: 10px; align-items: start; margin-bottom: 14px; }
327
+ h1 { font-size: 22px; line-height: 1; margin: 0; letter-spacing: -0.03em; color: var(--nugu-content-important-global); }
328
+ .subtitle {
329
+ display: inline-flex;
330
+ align-items: center;
331
+ width: fit-content;
332
+ margin-top: 7px;
333
+ padding: 3px 8px;
334
+ border: 1px solid color-mix(in srgb, var(--accent) 24%, transparent);
335
+ border-radius: 999px;
336
+ background: linear-gradient(135deg, color-mix(in srgb, var(--accent) 14%, transparent), color-mix(in srgb, var(--accent-2) 10%, transparent));
337
+ color: color-mix(in srgb, var(--fg-soft) 72%, var(--muted));
338
+ font-size: 12px;
339
+ font-weight: 700;
340
+ letter-spacing: .01em;
341
+ }
342
+ .topbar-title { margin: 0 0 5px; font-size: 16px; font-weight: 800; color: var(--nugu-content-important-global); }
343
+ #summary {
344
+ display: flex;
345
+ flex-wrap: wrap;
346
+ align-items: center;
347
+ gap: 6px 8px;
348
+ color: var(--muted);
349
+ font-size: 12px;
350
+ line-height: 1.35;
351
+ }
352
+ .summary-stats,
353
+ .summary-skipped {
354
+ display: inline-flex;
355
+ align-items: center;
356
+ border-radius: 999px;
357
+ border: 1px solid var(--border);
358
+ padding: 2px 7px;
359
+ background: color-mix(in srgb, var(--panel-2) 54%, transparent);
360
+ font-weight: 700;
361
+ }
362
+ .summary-stats { color: color-mix(in srgb, var(--fg-soft) 78%, var(--muted)); }
363
+ .summary-skipped {
364
+ color: color-mix(in srgb, var(--nugu-warning) 72%, var(--fg-soft));
365
+ border-color: color-mix(in srgb, var(--nugu-warning) 28%, var(--border));
366
+ background: color-mix(in srgb, var(--nugu-warning) 10%, transparent);
367
+ }
368
+ .summary-hint {
369
+ color: var(--faint);
370
+ font-weight: 500;
371
+ }
372
+ .card-title, .file-title { color: var(--nugu-content-important-global); font-weight: 800; }
373
+ .card-title { font-size: 15px; margin-bottom: 8px; }
374
+ .findings-title { display: flex; align-items: center; justify-content: space-between; gap: 10px; }
375
+ #drawer-count {
376
+ min-width: 24px;
377
+ padding: 2px 8px;
378
+ border-radius: 999px;
379
+ border: 1px solid color-mix(in srgb, var(--accent) 35%, var(--border));
380
+ background: color-mix(in srgb, var(--accent) 16%, transparent);
381
+ color: var(--nugu-content-important-global);
382
+ text-align: center;
383
+ font-size: 12px;
384
+ }
385
+ #selection { color: var(--muted); font-size: 14px; line-height: 1.5; }
386
+ #meta {
387
+ display: flex;
388
+ flex-wrap: wrap;
389
+ align-items: center;
390
+ gap: 5px;
391
+ margin: 10px 0 10px;
392
+ }
393
+ .meta-chip {
394
+ display: inline-flex;
395
+ align-items: center;
396
+ gap: 5px;
397
+ min-width: 0;
398
+ padding: 3px 7px;
399
+ border: 1px solid color-mix(in srgb, var(--border) 78%, transparent);
400
+ border-radius: 999px;
401
+ background: color-mix(in srgb, var(--bg) 48%, var(--panel-2));
402
+ color: var(--muted);
403
+ font-size: 11px;
404
+ line-height: 1.2;
405
+ white-space: nowrap;
406
+ }
407
+ .meta-label {
408
+ color: var(--faint);
409
+ font-weight: 600;
410
+ text-transform: uppercase;
411
+ letter-spacing: .04em;
412
+ }
413
+ .meta-value {
414
+ color: color-mix(in srgb, var(--fg-soft) 76%, var(--muted));
415
+ font-weight: 800;
416
+ }
417
+ .meta-round .meta-value { color: var(--accent); }
418
+ #status {
419
+ position: fixed;
420
+ right: 16px;
421
+ bottom: 14px;
422
+ z-index: 20;
423
+ max-width: min(420px, calc(100vw - 32px));
424
+ padding: 9px 12px;
425
+ border: 1px solid color-mix(in srgb, var(--border) 78%, transparent);
426
+ border-radius: 999px;
427
+ background: color-mix(in srgb, var(--panel-2) 92%, var(--bg));
428
+ color: var(--fg-soft);
429
+ box-shadow: 0 10px 36px color-mix(in srgb, #000 28%, transparent), inset 0 1px 0 color-mix(in srgb, var(--fg) 8%, transparent);
430
+ font-size: 13px;
431
+ font-weight: 750;
432
+ line-height: 1.35;
433
+ white-space: nowrap;
434
+ overflow: hidden;
435
+ text-overflow: ellipsis;
436
+ pointer-events: none;
437
+ }
438
+ #status::before {
439
+ content: "";
440
+ display: inline-block;
441
+ width: 7px;
442
+ height: 7px;
443
+ margin-right: 8px;
444
+ border-radius: 999px;
445
+ background: var(--muted);
446
+ vertical-align: 1px;
447
+ }
448
+ #status.ok { color: var(--nugu-info); border-color: color-mix(in srgb, var(--nugu-info) 34%, var(--border)); }
449
+ #status.ok::before { background: var(--nugu-info); box-shadow: 0 0 14px var(--nugu-info); }
450
+ #status.error { color: var(--nugu-error); border-color: color-mix(in srgb, var(--nugu-error) 40%, var(--border)); }
451
+ #status.error::before { background: var(--nugu-error); box-shadow: 0 0 14px var(--nugu-error); }
452
+ #tree { height: calc(100vh - 116px); border-radius: var(--radius); background: color-mix(in srgb, var(--bg) 65%, var(--panel)); overflow: hidden; }
453
+ .count-pill {
454
+ padding: 6px 10px;
455
+ border-radius: 999px;
456
+ border: 1px solid color-mix(in srgb, var(--accent) 35%, var(--border));
457
+ background: color-mix(in srgb, var(--accent) 16%, transparent);
458
+ color: var(--nugu-content-important-global);
459
+ font-size: 14px;
460
+ font-weight: 750;
461
+ white-space: nowrap;
462
+ }
463
+
464
+ .inline-finding {
465
+ position: fixed;
466
+ z-index: 30;
467
+ width: min(380px, calc(100vw - 24px));
468
+ padding: 12px;
469
+ border: 1px solid color-mix(in srgb, var(--accent) 42%, var(--border));
470
+ border-radius: 14px;
471
+ background: color-mix(in srgb, var(--panel-2) 94%, var(--bg));
472
+ box-shadow: var(--shadow), 0 0 0 3px color-mix(in srgb, var(--accent) 12%, transparent), inset 0 1px 0 color-mix(in srgb, var(--fg) 8%, transparent);
473
+ backdrop-filter: blur(14px);
474
+ }
475
+ .inline-finding[hidden] { display: none; }
476
+ .inline-finding::before {
477
+ content: "";
478
+ position: absolute;
479
+ left: -7px;
480
+ top: 24px;
481
+ width: 12px;
482
+ height: 12px;
483
+ transform: rotate(45deg);
484
+ border-left: 1px solid color-mix(in srgb, var(--accent) 42%, var(--border));
485
+ border-bottom: 1px solid color-mix(in srgb, var(--accent) 42%, var(--border));
486
+ background: inherit;
487
+ }
488
+ .inline-head { display: grid; grid-template-columns: 1fr auto; gap: 10px; align-items: start; }
489
+ .inline-title { color: var(--nugu-content-important-global); font-weight: 850; }
490
+ .inline-close {
491
+ width: 28px;
492
+ height: 28px;
493
+ padding: 0;
494
+ border-radius: 999px;
495
+ border: 1px solid var(--border);
496
+ background: color-mix(in srgb, var(--bg) 60%, var(--panel-2));
497
+ color: var(--fg);
498
+ font-size: 18px;
499
+ line-height: 1;
500
+ }
501
+ .inline-finding label { margin-block: 8px; }
502
+ .inline-finding textarea { min-height: 96px; }
503
+
504
+ .card {
505
+ padding: 12px;
506
+ margin-bottom: 12px;
507
+ border: 1px solid var(--border);
508
+ border-radius: var(--radius);
509
+ background: color-mix(in srgb, var(--panel-3) 72%, transparent);
510
+ }
511
+ .selection-card { border-color: color-mix(in srgb, var(--focus) 26%, var(--border)); }
512
+ .selection-empty { color: var(--muted); }
513
+ .selection-active { color: var(--fg); font-weight: 800; }
514
+ .field-row { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
515
+ .field-subtitle { color: var(--muted); font-size: 12px; font-weight: 400; font-style: italic; line-height: 1.3; margin-top: -2px; }
516
+ .theme-label {
517
+ position: relative;
518
+ display: inline-grid;
519
+ place-items: center;
520
+ width: 30px;
521
+ height: 30px;
522
+ min-width: 0;
523
+ margin: 0;
524
+ padding: 0;
525
+ border: 1px solid color-mix(in srgb, var(--border) 78%, transparent);
526
+ border-radius: 999px;
527
+ background: color-mix(in srgb, var(--panel-2) 56%, transparent);
528
+ box-shadow: inset 0 1px 0 color-mix(in srgb, var(--fg) 5%, transparent);
529
+ opacity: .72;
530
+ }
531
+ .theme-label:hover,
532
+ .theme-label:focus-within { opacity: 1; }
533
+ .theme-icon {
534
+ display: grid;
535
+ place-items: center;
536
+ width: 100%;
537
+ height: 100%;
538
+ color: color-mix(in srgb, var(--fg-soft) 70%, var(--muted));
539
+ font-size: 14px;
540
+ font-weight: 800;
541
+ line-height: 1;
542
+ pointer-events: none;
543
+ }
544
+ .theme-label select {
545
+ position: absolute;
546
+ inset: 0;
547
+ width: 100%;
548
+ height: 100%;
549
+ min-width: 0;
550
+ padding: 0;
551
+ border: 0;
552
+ border-radius: 999px;
553
+ background: transparent;
554
+ color: transparent;
555
+ opacity: 0;
556
+ cursor: pointer;
557
+ }
558
+ .theme-label:focus-within {
559
+ border-color: color-mix(in srgb, var(--focus) 52%, var(--border));
560
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--focus) 18%, transparent);
561
+ }
562
+ .theme-label select:focus { box-shadow: none; }
563
+
564
+ label { display: grid; gap: 6px; margin-block: 10px; font-size: 14px; color: var(--fg-soft); font-weight: 700; }
565
+ textarea, select {
566
+ width: 100%;
567
+ border: 1px solid var(--border);
568
+ border-radius: 8px;
569
+ background: color-mix(in srgb, var(--bg) 74%, var(--panel-2));
570
+ color: var(--fg);
571
+ padding: 9px 10px;
572
+ outline: none;
573
+ }
574
+ textarea:focus, select:focus, button:focus-visible {
575
+ border-color: var(--focus);
576
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--focus) 28%, transparent);
577
+ }
578
+ textarea { resize: vertical; min-height: 68px; }
579
+ #notes {
580
+ min-height: 150px;
581
+ max-height: none;
582
+ overflow: hidden;
583
+ resize: none;
584
+ font-size: 15px;
585
+ line-height: 1.45;
586
+ padding: 12px;
587
+ }
588
+
589
+ .actions { position: sticky; bottom: 0; display: grid; grid-template-columns: 1fr 1fr; gap: 8px; padding-top: 4px; background: linear-gradient(transparent, var(--panel) 20%); }
590
+ .actions button, #add, .remove-finding {
591
+ padding: 9px 10px;
592
+ border-radius: 8px;
593
+ border: 1px solid var(--border);
594
+ background: linear-gradient(180deg, color-mix(in srgb, var(--fg) 8%, var(--panel-2)), color-mix(in srgb, var(--fg) 3%, var(--panel-2)));
595
+ color: var(--fg);
596
+ font-weight: 750;
597
+ }
598
+ #submit { background: linear-gradient(180deg, color-mix(in srgb, var(--accent) 34%, var(--panel-2)), color-mix(in srgb, var(--accent) 18%, var(--panel-2))); border-color: color-mix(in srgb, var(--accent) 45%, var(--border)); }
599
+ #add { width: 100%; margin-top: 2px; }
600
+
601
+ .file-section {
602
+ position: relative;
603
+ isolation: isolate;
604
+ content-visibility: auto;
605
+ contain-intrinsic-size: 260px;
606
+ margin-bottom: 22px;
607
+ scroll-margin-top: 16px;
608
+ border-radius: var(--radius);
609
+ transition: background-color 160ms ease, box-shadow 160ms ease, outline-color 160ms ease;
610
+ }
611
+ .file-section[data-selected-file="true"] {
612
+ background: linear-gradient(90deg, color-mix(in srgb, var(--accent) 10%, transparent), transparent 28rem);
613
+ }
614
+ .file-section[data-selected-file="true"]::before {
615
+ content: "";
616
+ position: absolute;
617
+ inset: 0 auto 0 -9px;
618
+ width: 4px;
619
+ border-radius: 999px;
620
+ background: linear-gradient(180deg, var(--accent), var(--accent-2));
621
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent) 14%, transparent), 0 0 24px color-mix(in srgb, var(--accent) 42%, transparent);
622
+ z-index: 1;
623
+ pointer-events: none;
624
+ }
625
+ .file-section[data-selected-file="true"] .file-title {
626
+ color: var(--fg);
627
+ background: linear-gradient(90deg, color-mix(in srgb, var(--accent) 18%, var(--bg)) 0%, color-mix(in srgb, var(--bg) 84%, transparent) 72%);
628
+ border: 1px solid color-mix(in srgb, var(--accent) 36%, var(--border));
629
+ border-left: 4px solid var(--accent);
630
+ box-shadow: 0 8px 28px color-mix(in srgb, var(--accent) 14%, transparent);
631
+ }
632
+ .file-section[data-selected-file="true"] .file-title::before {
633
+ content: "selected";
634
+ display: inline-flex;
635
+ align-items: center;
636
+ margin-right: 8px;
637
+ padding: 2px 7px;
638
+ border-radius: 999px;
639
+ background: color-mix(in srgb, var(--accent) 24%, transparent);
640
+ color: var(--fg);
641
+ font-size: 10px;
642
+ font-weight: 850;
643
+ letter-spacing: .05em;
644
+ text-transform: uppercase;
645
+ }
646
+ .file-title {
647
+ position: sticky;
648
+ top: 0;
649
+ z-index: 5;
650
+ margin: 0 0 8px;
651
+ padding: 8px 10px;
652
+ border: 1px solid color-mix(in srgb, var(--border) 72%, transparent);
653
+ border-left: 3px solid color-mix(in srgb, var(--muted) 34%, transparent);
654
+ border-radius: 10px;
655
+ font-size: 14px;
656
+ background: linear-gradient(180deg, color-mix(in srgb, var(--bg) 94%, var(--panel)), color-mix(in srgb, var(--bg) 78%, transparent));
657
+ box-shadow: 0 1px 0 color-mix(in srgb, var(--fg) 4%, transparent);
658
+ transition: background-color 160ms ease, border-color 160ms ease, box-shadow 160ms ease, color 160ms ease;
659
+ }
660
+ diffs-container { position: relative; z-index: 2; border-radius: var(--radius); overflow: hidden; box-shadow: 0 0 0 1px var(--border); }
661
+ .empty-list { color: var(--muted); font-size: 14px; }
662
+ .finding-item {
663
+ display: grid;
664
+ gap: 8px;
665
+ border: 1px solid var(--border);
666
+ border-left: 3px solid var(--accent);
667
+ border-radius: 12px;
668
+ padding: 10px;
669
+ margin-block: 9px;
670
+ font-size: 14px;
671
+ background: linear-gradient(180deg, color-mix(in srgb, var(--panel-2) 78%, transparent), color-mix(in srgb, var(--panel-3) 62%, transparent));
672
+ box-shadow: inset 0 1px 0 color-mix(in srgb, var(--fg) 5%, transparent);
673
+ cursor: pointer;
674
+ }
675
+ .finding-item:hover,
676
+ .finding-item:focus-visible {
677
+ border-color: color-mix(in srgb, var(--focus) 42%, var(--border));
678
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--focus) 16%, transparent), inset 0 1px 0 color-mix(in srgb, var(--fg) 5%, transparent);
679
+ outline: none;
680
+ }
681
+ .finding-item.severity-high { border-left-color: var(--nugu-error); }
682
+ .finding-item.severity-medium { border-left-color: var(--nugu-warning); }
683
+ .finding-item.severity-low { border-left-color: var(--nugu-info); }
684
+ .finding-item-head { display: flex; align-items: center; gap: 6px; }
685
+ .finding-number {
686
+ display: inline-grid;
687
+ place-items: center;
688
+ width: 22px;
689
+ height: 22px;
690
+ border-radius: 999px;
691
+ background: color-mix(in srgb, var(--accent) 18%, transparent);
692
+ color: var(--nugu-content-important-global);
693
+ font-size: 12px;
694
+ font-weight: 850;
695
+ }
696
+ .finding-pill {
697
+ padding: 3px 7px;
698
+ border-radius: 999px;
699
+ border: 1px solid var(--border);
700
+ font-size: 11px;
701
+ font-weight: 850;
702
+ text-transform: uppercase;
703
+ letter-spacing: .02em;
704
+ }
705
+ .finding-pill.high { color: var(--nugu-error); border-color: color-mix(in srgb, var(--nugu-error) 36%, var(--border)); background: color-mix(in srgb, var(--nugu-error) 10%, transparent); }
706
+ .finding-pill.medium { color: var(--nugu-warning); border-color: color-mix(in srgb, var(--nugu-warning) 36%, var(--border)); background: color-mix(in srgb, var(--nugu-warning) 10%, transparent); }
707
+ .finding-pill.low { color: var(--nugu-info); border-color: color-mix(in srgb, var(--nugu-info) 36%, var(--border)); background: color-mix(in srgb, var(--nugu-info) 10%, transparent); }
708
+ .finding-pill.category { color: var(--fg-soft); background: color-mix(in srgb, var(--fg) 5%, transparent); }
709
+ .finding-location {
710
+ color: var(--muted);
711
+ font-family: "JetBrains Mono Nerd", "JetBrains Mono", ui-monospace, monospace;
712
+ font-size: 12px;
713
+ overflow-wrap: anywhere;
714
+ }
715
+ .finding-comment { color: var(--fg); line-height: 1.45; white-space: pre-wrap; }
716
+ .finding-chip {
717
+ font-size: 11px;
718
+ padding: 4px 6px;
719
+ border-radius: 5px;
720
+ background: color-mix(in srgb, var(--accent) 28%, var(--panel-2));
721
+ color: var(--fg);
722
+ border: 1px solid color-mix(in srgb, var(--accent) 42%, transparent);
723
+ }
724
+ .remove-finding {
725
+ margin-left: auto;
726
+ width: 24px;
727
+ height: 24px;
728
+ padding: 0;
729
+ border-radius: 999px;
730
+ font-size: 16px;
731
+ color: var(--nugu-error);
732
+ }
733
+ .error { color: var(--nugu-error); }
734
+ .ok { color: var(--nugu-info); }
735
+
736
+ #tree file-tree-container,
737
+ #tree {
738
+ --trees-fg-override: var(--fg);
739
+ --trees-fg-muted-override: var(--muted);
740
+ --trees-bg-override: transparent;
741
+ --trees-bg-muted-override: color-mix(in srgb, var(--focus) 14%, transparent);
742
+ --trees-input-bg-override: color-mix(in srgb, var(--bg) 74%, var(--panel-2));
743
+ --trees-search-bg-override: color-mix(in srgb, var(--bg) 74%, var(--panel-2));
744
+ --trees-search-fg-override: var(--fg);
745
+ --trees-density-override: .82;
746
+ --trees-font-size-override: 12px;
747
+ --trees-level-gap-override: 5px;
748
+ --trees-item-padding-x-override: 4px;
749
+ --trees-item-margin-x-override: 1px;
750
+ --trees-item-row-gap-override: 3px;
751
+ --trees-icon-width-override: 13px;
752
+ --trees-git-lane-width-override: 8px;
753
+ --trees-action-lane-width-override: 8px;
754
+ --trees-padding-inline-override: 4px;
755
+ --trees-accent-override: var(--accent);
756
+ --trees-selected-bg-override: color-mix(in srgb, var(--accent) 18%, transparent);
757
+ --trees-selected-fg-override: var(--fg);
758
+ --trees-focus-ring-color-override: var(--focus);
759
+ --trees-border-color-override: var(--border);
760
+ --trees-status-added-override: var(--nugu-info);
761
+ --trees-status-modified-override: var(--nugu-warning);
762
+ --trees-status-renamed-override: var(--nugu-content-important-local);
763
+ --trees-status-deleted-override: var(--nugu-error);
764
+ --trees-font-family-override: "JetBrains Mono Nerd", "JetBrains Mono", ui-monospace, monospace;
765
+ }
766
+
767
+ @media (max-width: 1180px) {
768
+ #app { grid-template-columns: minmax(0, 1fr); grid-template-rows: auto minmax(0, 1fr) minmax(280px, 40vh); }
769
+ #sidebar { display: none; }
770
+ #left-splitter, #right-splitter { display: none; }
771
+ #drawer { grid-row: 3; border-top: 1px solid var(--border); border-inline-start: 0; }
772
+ }