panel.css

  1* {
  2  margin: 0;
  3  padding: 0;
  4  box-sizing: border-box;
  5}
  6
  7/* Light theme (default DevTools) */
  8:root {
  9  --bg: #fff;
 10  --bg-subtle: #f5f5f5;
 11  --bg-hover: #eee;
 12  --text: #1a1a1a;
 13  --text-dim: #666;
 14  --accent: oklch(48% 0.25 350);
 15  --accent-dim: oklch(40% 0.18 350);
 16  --border: #ddd;
 17  --radius: 6px;
 18}
 19
 20/* Dark theme (set via JS from chrome.devtools.panels.themeName) */
 21.theme-dark {
 22  --bg: #1a1a1a;
 23  --bg-subtle: #242424;
 24  --bg-hover: #2a2a2a;
 25  --text: #f5f3ef;
 26  --text-dim: #999;
 27  --accent: oklch(55% 0.25 350);
 28  --accent-dim: oklch(45% 0.18 350);
 29  --border: #333;
 30}
 31
 32body {
 33  background: var(--bg);
 34  color: var(--text);
 35  font-family: system-ui, -apple-system, sans-serif;
 36  font-size: 12px;
 37  line-height: 1.5;
 38  overflow-y: auto;
 39  height: 100vh;
 40}
 41
 42/* Toolbar */
 43.toolbar {
 44  display: flex;
 45  align-items: center;
 46  justify-content: space-between;
 47  padding: 8px 12px;
 48  border-bottom: 1px solid var(--border);
 49  background: var(--bg);
 50  position: sticky;
 51  top: 0;
 52  z-index: 10;
 53}
 54
 55.toolbar-left {
 56  display: flex;
 57  align-items: center;
 58  gap: 8px;
 59}
 60
 61.toolbar-right {
 62  display: flex;
 63  align-items: center;
 64  gap: 4px;
 65}
 66
 67.logo {
 68  font-size: 18px;
 69  font-weight: 500;
 70  color: var(--text);
 71  opacity: 0.7;
 72}
 73
 74h1 {
 75  font-size: 13px;
 76  font-weight: 600;
 77  letter-spacing: 0.01em;
 78}
 79
 80.badge {
 81  background: var(--accent);
 82  color: white;
 83  font-size: 11px;
 84  font-weight: 600;
 85  padding: 1px 6px;
 86  border-radius: 10px;
 87  min-width: 20px;
 88  text-align: center;
 89  display: none;
 90}
 91
 92.badge.visible {
 93  display: inline-block;
 94}
 95
 96/* Tool buttons */
 97.tool-btn {
 98  display: flex;
 99  align-items: center;
100  justify-content: center;
101  width: 28px;
102  height: 28px;
103  border: none;
104  border-radius: var(--radius);
105  background: transparent;
106  color: var(--text-dim);
107  cursor: pointer;
108  transition: background 0.15s, color 0.15s;
109}
110
111.tool-btn:hover {
112  background: var(--bg-hover);
113  color: var(--text);
114}
115
116.tool-btn.inactive {
117  opacity: 0.4;
118}
119
120/* Findings */
121#findings-container {
122  padding: 8px;
123}
124
125.finding-group {
126  margin-bottom: 2px;
127}
128
129.group-header {
130  display: flex;
131  align-items: center;
132  gap: 8px;
133  padding: 6px 8px;
134  border-radius: var(--radius);
135  cursor: pointer;
136  user-select: none;
137  transition: background 0.15s;
138}
139
140.group-header:hover {
141  background: var(--bg-hover);
142}
143
144.group-chevron {
145  font-size: 10px;
146  color: var(--text-dim);
147  transition: transform 0.15s;
148  width: 12px;
149  flex-shrink: 0;
150}
151
152.group-header.collapsed .group-chevron {
153  transform: rotate(-90deg);
154}
155
156.group-name {
157  font-weight: 600;
158  font-size: 12px;
159  flex: 1;
160  min-width: 0;
161}
162
163.group-count {
164  font-size: 11px;
165  color: var(--text-dim);
166  font-weight: 500;
167}
168
169.group-items {
170  overflow: hidden;
171}
172
173.group-header.collapsed + .group-items {
174  display: none;
175}
176
177.finding-item {
178  display: flex;
179  flex-direction: column;
180  gap: 2px;
181  padding: 5px 8px 5px 28px;
182  border-radius: var(--radius);
183  cursor: pointer;
184  transition: background 0.15s;
185}
186
187.finding-item:hover {
188  background: var(--bg-hover);
189}
190
191.finding-row {
192  display: flex;
193  align-items: center;
194  gap: 6px;
195  min-width: 0;
196}
197
198.finding-row .finding-selector {
199  flex: 1;
200  min-width: 0;
201}
202
203.finding-copy {
204  display: none;
205  align-items: center;
206  justify-content: center;
207  width: 18px;
208  height: 18px;
209  flex-shrink: 0;
210  border: none;
211  border-radius: 4px;
212  background: transparent;
213  color: var(--text-dim);
214  cursor: pointer;
215  transition: background 0.15s, color 0.15s;
216}
217
218.finding-item:hover .finding-copy {
219  display: flex;
220}
221
222.finding-copy:hover {
223  background: var(--bg);
224  color: var(--accent);
225}
226
227.finding-copy.copied {
228  color: var(--accent);
229}
230
231.tool-btn.copied {
232  color: var(--accent);
233}
234
235.finding-selector {
236  font-family: ui-monospace, 'SF Mono', 'Cascadia Code', monospace;
237  font-size: 11px;
238  color: var(--accent);
239  white-space: nowrap;
240  overflow: hidden;
241  text-overflow: ellipsis;
242}
243
244.finding-detail {
245  font-size: 11px;
246  color: var(--text-dim);
247  white-space: nowrap;
248  overflow: hidden;
249  text-overflow: ellipsis;
250}
251
252.finding-description {
253  font-size: 11px;
254  color: var(--text-dim);
255  opacity: 0.7;
256  line-height: 1.4;
257  padding: 2px 0 4px;
258  display: none;
259}
260
261.finding-item:hover .finding-description {
262  display: block;
263}
264
265/* Finding tags (page-level, hidden, etc.) */
266.finding-tag {
267  display: inline-block;
268  font-size: 9px;
269  font-weight: 600;
270  text-transform: uppercase;
271  letter-spacing: 0.05em;
272  padding: 1px 5px;
273  border-radius: 3px;
274  margin-bottom: 2px;
275}
276
277.tag-page {
278  color: var(--accent-dim);
279  background: transparent;
280}
281
282.tag-hidden {
283  color: var(--text-dim);
284  background: var(--bg-hover);
285}
286
287.finding-item.is-hidden {
288  opacity: 0.55;
289  cursor: default;
290}
291
292.finding-item.is-hidden:hover {
293  background: transparent;
294}
295
296/* Empty state */
297.empty-state {
298  display: flex;
299  flex-direction: column;
300  align-items: center;
301  justify-content: center;
302  padding: 48px 24px;
303  text-align: center;
304}
305
306.empty-icon {
307  font-size: 32px;
308  font-weight: 500;
309  opacity: 0.3;
310  margin-bottom: 12px;
311}
312
313.empty-title {
314  font-size: 13px;
315  font-weight: 500;
316  margin-bottom: 4px;
317}
318
319.empty-hint {
320  font-size: 12px;
321  color: var(--text-dim);
322}
323
324/* Category sections */
325.category-section {
326  margin-bottom: 4px;
327}
328
329.category-header {
330  display: flex;
331  align-items: center;
332  gap: 8px;
333  padding: 8px 8px 4px;
334}
335
336.category-dot {
337  width: 8px;
338  height: 8px;
339  border-radius: 50%;
340  flex-shrink: 0;
341}
342
343.category-dot-slop {
344  background: oklch(55% 0.25 350);
345}
346
347.category-dot-quality {
348  background: var(--text-dim);
349}
350
351.category-name {
352  font-size: 11px;
353  font-weight: 600;
354  text-transform: uppercase;
355  letter-spacing: 0.05em;
356  color: var(--text-dim);
357}
358
359.category-count {
360  font-size: 11px;
361  color: var(--text-dim);
362  font-weight: 500;
363}
364
365/* Settings */
366#settings-container {
367  border-bottom: 1px solid var(--border);
368  padding: 0 8px 8px;
369}
370
371.settings-header {
372  font-size: 11px;
373  font-weight: 600;
374  color: var(--text-dim);
375  text-transform: uppercase;
376  letter-spacing: 0.05em;
377  padding: 8px 8px 6px;
378}
379
380.settings-grid {
381  display: grid;
382  grid-template-columns: 1fr 1fr;
383  gap: 1px 12px;
384  padding-bottom: 8px;
385}
386
387#settings-list .settings-header {
388  padding: 8px 8px 4px;
389}
390
391.setting-row {
392  display: flex;
393  align-items: center;
394  justify-content: space-between;
395  padding: 4px 8px 8px;
396  gap: 12px;
397}
398
399.setting-label {
400  font-size: 11px;
401  color: var(--text);
402}
403
404.setting-segmented {
405  display: inline-flex;
406  border: 1px solid var(--border);
407  border-radius: var(--radius);
408  overflow: hidden;
409}
410
411.setting-segmented button {
412  background: transparent;
413  border: none;
414  color: var(--text-dim);
415  font-size: 11px;
416  padding: 3px 8px;
417  cursor: pointer;
418  font-family: inherit;
419  border-right: 1px solid var(--border);
420}
421
422.setting-segmented button:last-child {
423  border-right: none;
424}
425
426.setting-segmented button:hover {
427  color: var(--text);
428}
429
430.setting-segmented button.active {
431  background: var(--accent);
432  color: white;
433}
434
435.setting-switch {
436  position: relative;
437  display: inline-block;
438  width: 28px;
439  height: 16px;
440  cursor: pointer;
441  flex-shrink: 0;
442}
443
444.setting-switch input {
445  position: absolute;
446  opacity: 0;
447  width: 0;
448  height: 0;
449}
450
451.setting-switch-track {
452  position: absolute;
453  top: 0; left: 0; right: 0; bottom: 0;
454  background: var(--border);
455  border-radius: 8px;
456  transition: background 0.15s ease;
457}
458
459.setting-switch-track::before {
460  content: '';
461  position: absolute;
462  top: 2px;
463  left: 2px;
464  width: 12px;
465  height: 12px;
466  background: var(--bg);
467  border-radius: 50%;
468  transition: transform 0.15s ease;
469}
470
471.setting-switch input:checked + .setting-switch-track {
472  background: var(--accent);
473}
474
475.setting-switch input:checked + .setting-switch-track::before {
476  transform: translateX(12px);
477}
478
479.setting-rule {
480  display: flex;
481  align-items: center;
482  gap: 6px;
483  padding: 3px 8px;
484  border-radius: var(--radius);
485  font-size: 11px;
486  cursor: pointer;
487  transition: background 0.15s;
488}
489
490.setting-rule:hover {
491  background: var(--bg-hover);
492}
493
494.setting-rule input[type="checkbox"] {
495  margin: 0;
496  accent-color: var(--accent);
497}
498
499/* Scanning state */
500.scanning-indicator {
501  display: flex;
502  align-items: center;
503  gap: 8px;
504  padding: 12px;
505  color: var(--text-dim);
506  font-size: 12px;
507}
508
509.scanning-dot {
510  width: 6px;
511  height: 6px;
512  border-radius: 50%;
513  background: var(--accent);
514  animation: pulse 1s ease-in-out infinite;
515}
516
517@keyframes pulse {
518  0%, 100% { opacity: 0.3; }
519  50% { opacity: 1; }
520}