gabriel / musehub public
_symbols.scss
1,146 lines 36.3 KB
Raw
sha256:bb2baaabdd19320bde50cb69d447fd1c1e571467df729be1a23b5e93064b046a feat(intel): standardize headers, gauge icon, velocity card… Sonnet 4.6 minor ⚠ breaking 144 days ago
1 // ─────────────────────────────────────────────────────────────────────────────
2 // Component: Symbol Intelligence (.sym2-* v2, .sym-* legacy)
3 // File: src/scss/components/_symbols.scss
4 //
5 // All visual rules — colors, typography, borders, backgrounds.
6 // Page layout lives in pages/_symbols.scss.
7 // ─────────────────────────────────────────────────────────────────────────────
8
9 // ── Shared atoms ─────────────────────────────────────────────────────────────
10
11 .sym2-muted { color: var(--text-muted); font-size: 0.82rem; }
12
13 .sym2-addr {
14 font-family: var(--font-mono);
15 font-size: 0.8rem;
16 color: var(--color-accent-link);
17 word-break: break-all;
18 text-decoration: none;
19 &:hover { color: #79c0ff; text-decoration: underline; }
20 &--sm { font-size: 0.72rem; }
21 }
22
23 .sym2-commit-link {
24 font-family: var(--font-mono);
25 font-size: 0.78rem;
26 color: var(--text-muted);
27 text-decoration: none;
28 &:hover { color: var(--color-accent-link); }
29 }
30
31 // ── Kind badge fn · class · sym ─────────────────────────────────────────────
32
33 .sym2-kind {
34 display: inline-block;
35 font-family: var(--font-mono);
36 font-size: 0.65rem;
37 font-weight: 600;
38 padding: 1px 6px;
39 border-radius: 3px;
40 white-space: nowrap;
41 background: var(--bg-overlay);
42 border: 1px solid var(--border-default);
43 color: var(--text-muted);
44 letter-spacing: 0.02em;
45
46 &--fn { color: var(--color-mist); border-color: color-mix(in srgb, var(--color-mist) 25%, transparent); background: color-mix(in srgb, var(--color-mist) 6%, transparent); }
47 &--class { color: var(--color-orange); border-color: color-mix(in srgb, var(--color-orange) 25%, transparent); background: color-mix(in srgb, var(--color-orange) 6%, transparent); }
48 &--sym { color: var(--text-muted); }
49 }
50
51 // ── Signal badges 🔥 hotspot · 🧊 dead · 💥 blast ───────────────────────────
52
53 .sym2-signals {
54 display: flex;
55 gap: 3px;
56 align-items: center;
57 flex-shrink: 0;
58 }
59
60 .sym2-signal {
61 display: inline-flex;
62 align-items: center;
63 gap: 3px;
64 font-size: 0.68rem;
65 font-weight: 600;
66 padding: 1px 6px;
67 border-radius: 3px;
68 white-space: nowrap;
69 cursor: default;
70 font-family: var(--font-mono);
71
72 &--hot { color: var(--color-orange); background: color-mix(in srgb, var(--color-orange) 10%, transparent); border: 1px solid color-mix(in srgb, var(--color-orange) 30%, transparent); }
73 &--dead { color: #79c0ff; background: rgba(121,192,255,0.08); border: 1px solid rgba(121,192,255,0.25); }
74 &--blast { color: var(--color-danger); background: color-mix(in srgb, var(--color-danger) 10%, transparent); border: 1px solid color-mix(in srgb, var(--color-danger) 30%, transparent); }
75 }
76
77 // ── Heat bar ──────────────────────────────────────────────────────────────────
78
79 .sym2-heat-track {
80 width: 72px;
81 height: 5px;
82 background: var(--bg-overlay);
83 border-radius: 3px;
84 overflow: hidden;
85 flex-shrink: 0;
86 }
87
88 .sym2-heat-fill {
89 height: 100%;
90 border-radius: 3px;
91 background: linear-gradient(90deg, var(--color-accent) 0%, var(--color-orange) 60%, var(--color-danger) 100%);
92 min-width: 2px;
93 transition: width 0.2s ease;
94 }
95
96 // ── Hero banner ───────────────────────────────────────────────────────────────
97
98 .sym2-hero {
99 position: relative;
100 background: linear-gradient(135deg, var(--bg-base) 0%, var(--bg-elevated) 60%, var(--bg-base) 100%);
101 border: 1px solid var(--border-default);
102 border-radius: var(--radius-lg);
103 overflow: hidden;
104 margin-bottom: 0.75rem;
105
106 &::before {
107 content: '';
108 position: absolute;
109 inset: 0;
110 background:
111 radial-gradient(ellipse 55% 80% at 20% 50%, color-mix(in srgb, var(--color-accent) 7%, transparent) 0%, transparent 70%),
112 radial-gradient(ellipse 40% 60% at 80% 30%, color-mix(in srgb, var(--color-purple) 5%, transparent) 0%, transparent 65%);
113 pointer-events: none;
114 }
115 }
116
117 .sym2-hero-inner {
118 position: relative;
119 display: flex;
120 align-items: center;
121 justify-content: space-between;
122 gap: 2rem;
123 padding: 1.5rem 1.75rem;
124
125 @media (max-width: 768px) {
126 flex-direction: column;
127 align-items: flex-start;
128 gap: 1.25rem;
129 }
130 }
131
132 .sym2-hero-left { flex: 1; min-width: 0; }
133
134 .sym2-hero-eyebrow {
135 display: flex;
136 align-items: center;
137 gap: 6px;
138 font-size: 0.68rem;
139 font-weight: 600;
140 text-transform: uppercase;
141 letter-spacing: 0.09em;
142 color: var(--text-muted);
143 margin-bottom: 0.5rem;
144 font-family: var(--font-mono);
145 }
146
147 .sym2-hero-title {
148 font-size: clamp(1.3rem, 3vw, 1.8rem);
149 font-weight: 700;
150 line-height: 1.15;
151 margin: 0 0 0.4rem;
152 color: var(--text-primary);
153
154 .gradient-text {
155 background: var(--gradient-spectral);
156 -webkit-background-clip: text;
157 -webkit-text-fill-color: transparent;
158 background-clip: text;
159 }
160 }
161
162 .sym2-hero-sub {
163 font-size: 0.8rem;
164 color: var(--text-secondary);
165 line-height: 1.5;
166 margin: 0;
167 }
168
169 .sym2-hero-meta {
170 margin-top: 0.6rem;
171 font-size: 0.72rem;
172 color: var(--text-muted);
173 font-family: var(--font-mono);
174
175 a { color: var(--color-accent-link); text-decoration: none; &:hover { text-decoration: underline; } }
176 }
177
178 .sym2-hero-stats {
179 display: flex;
180 flex-direction: column;
181 gap: 0.35rem;
182 flex-shrink: 0;
183 min-width: 180px;
184 }
185
186 .sym2-stat-pill {
187 display: flex;
188 align-items: center;
189 justify-content: space-between;
190 gap: 0.75rem;
191 padding: 0.5rem 0.9rem;
192 background: var(--bg-surface);
193 border: 1px solid var(--border-default);
194 border-radius: 8px;
195 cursor: default;
196
197 &--hot .sym2-stat-label svg { color: var(--color-orange); }
198 &--hot .sym2-stat-num { color: var(--color-orange); }
199 &--dead .sym2-stat-label svg { color: #79c0ff; }
200 &--dead .sym2-stat-num { color: #79c0ff; }
201 &--blast .sym2-stat-label svg { color: var(--color-danger); }
202 &--blast .sym2-stat-num { color: var(--color-danger); }
203 &--health .sym2-stat-label svg { color: var(--color-success); }
204 &--health .sym2-stat-num { color: var(--color-success); }
205 }
206
207 .sym2-stat-num {
208 font-family: var(--font-mono);
209 font-size: 1.1rem;
210 font-weight: 700;
211 color: var(--text-primary);
212 line-height: 1;
213 text-align: right;
214 }
215
216 .sym2-stat-label {
217 display: flex;
218 align-items: center;
219 gap: 5px;
220 font-size: 0.68rem;
221 font-weight: 600;
222 color: var(--text-muted);
223 text-transform: uppercase;
224 letter-spacing: 0.07em;
225 }
226
227 // ── List page ─────────────────────────────────────────────────────────────────
228
229 .sym2-toolbar-wrap {
230 background: var(--bg-surface);
231 border: 1px solid var(--border-default);
232 border-radius: var(--radius-lg) var(--radius-lg) 0 0;
233 border-bottom: none;
234 overflow: hidden;
235 }
236
237 .sym2-toolbar {
238 display: flex;
239 align-items: center;
240 gap: 0.75rem;
241 padding: 0.6rem 1rem;
242 border-bottom: 1px solid var(--border-default);
243 background: var(--bg-overlay);
244 flex-wrap: wrap;
245 }
246
247 .sym2-search {
248 display: flex;
249 align-items: center;
250 gap: 0.4rem;
251 flex: 1;
252 min-width: 180px;
253 background: var(--bg-surface);
254 border: 1px solid var(--border-default);
255 border-radius: 6px;
256 padding: 0.3rem 0.6rem;
257 transition: border-color 0.15s;
258
259 &:focus-within { border-color: color-mix(in srgb, var(--color-accent) 50%, transparent); }
260 svg { color: var(--text-muted); flex-shrink: 0; }
261 input {
262 border: none;
263 background: transparent;
264 outline: none;
265 width: 100%;
266 font-size: 0.82rem;
267 color: var(--text-primary);
268 font-family: var(--font-mono);
269 &::placeholder { color: var(--text-muted); }
270 }
271 }
272
273 .sym2-filter-row {
274 display: flex;
275 align-items: center;
276 gap: 0.5rem;
277 padding: 0.5rem 1rem;
278 background: var(--bg-surface);
279 flex-wrap: wrap;
280 border-bottom: 1px solid var(--border-default);
281 }
282
283 .sym2-filter-label {
284 font-size: 0.68rem;
285 font-weight: 600;
286 text-transform: uppercase;
287 letter-spacing: 0.07em;
288 color: var(--text-muted);
289 font-family: var(--font-mono);
290 white-space: nowrap;
291 }
292
293 .sym2-filter-sep {
294 width: 1px;
295 height: 16px;
296 background: var(--border-default);
297 flex-shrink: 0;
298 }
299
300 .sym2-pill {
301 display: inline-flex;
302 align-items: center;
303 gap: 4px;
304 cursor: pointer;
305 text-decoration: none;
306 font-size: 0.72rem;
307 font-weight: 500;
308 padding: 2px 10px;
309 border-radius: 9999px;
310 border: 1px solid var(--border-default);
311 color: var(--text-muted);
312 background: transparent;
313 transition: all 0.12s;
314 font-family: var(--font-mono);
315
316 &:hover { color: var(--text-primary); border-color: var(--border-default); }
317 &--active { color: var(--text-primary) !important; border-color: var(--border-default) !important; background: var(--bg-overlay); }
318
319 &--add.sym2-pill--active { color: var(--color-success) !important; border-color: color-mix(in srgb, var(--color-success) 40%, transparent) !important; background: color-mix(in srgb, var(--color-success) 8%, transparent); }
320 &--mod.sym2-pill--active { color: var(--color-accent) !important; border-color: color-mix(in srgb, var(--color-accent) 40%, transparent) !important; background: color-mix(in srgb, var(--color-accent) 8%, transparent); }
321 &--del.sym2-pill--active { color: var(--color-danger) !important; border-color: color-mix(in srgb, var(--color-danger) 40%, transparent) !important; background: color-mix(in srgb, var(--color-danger) 8%, transparent); }
322
323 &--fn.sym2-pill--active { color: var(--color-mist) !important; border-color: color-mix(in srgb, var(--color-mist) 40%, transparent) !important; background: color-mix(in srgb, var(--color-mist) 8%, transparent); }
324 &--class.sym2-pill--active { color: var(--color-orange) !important; border-color: color-mix(in srgb, var(--color-orange) 40%, transparent) !important; background: color-mix(in srgb, var(--color-orange) 8%, transparent); }
325 }
326
327 .sym2-table-card {
328 background: var(--bg-surface);
329 border: 1px solid var(--border-default);
330 border-radius: 0 0 var(--radius-lg) var(--radius-lg);
331 overflow: hidden;
332 }
333
334 .sym2-table {
335 width: 100%;
336 border-collapse: collapse;
337 font-size: 0.82rem;
338
339 thead tr {
340 background: var(--bg-overlay);
341 th {
342 padding: 0.4rem 0.85rem;
343 text-align: left;
344 font-size: 0.65rem;
345 font-weight: 700;
346 text-transform: uppercase;
347 letter-spacing: 0.07em;
348 color: var(--text-muted);
349 border-bottom: 1px solid var(--border-default);
350 font-family: var(--font-mono);
351 white-space: nowrap;
352
353 &.sym2-th-heat, &.sym2-th-signals { text-align: center; }
354 }
355 }
356
357 tbody tr {
358 border-bottom: 1px solid var(--border-subtle);
359 transition: background 0.1s;
360 &:last-child { border-bottom: none; }
361 &:hover { background: var(--bg-hover); }
362 td { padding: 0.45rem 0.85rem; vertical-align: middle; }
363 }
364 }
365
366 .sym2-td-kind { width: 52px; }
367 .sym2-td-addr { /* flex */ }
368 .sym2-td-op { width: 72px; }
369 .sym2-td-date { width: 110px; white-space: nowrap; color: var(--text-secondary); font-size: 0.75rem; }
370 .sym2-td-heat { width: 96px; }
371 .sym2-td-sig { width: 80px; }
372
373 .sym2-addr-cell {
374 display: flex;
375 flex-direction: column;
376 gap: 2px;
377 max-width: 520px;
378 }
379
380 .sym2-addr-file {
381 font-family: var(--font-mono);
382 font-size: 0.67rem;
383 color: var(--text-muted);
384 white-space: nowrap;
385 overflow: hidden;
386 text-overflow: ellipsis;
387 }
388
389 .sym2-heat-cell {
390 display: flex;
391 align-items: center;
392 gap: 0.4rem;
393 }
394
395 .sym2-heat-count {
396 font-family: var(--font-mono);
397 font-size: 0.68rem;
398 color: var(--text-muted);
399 width: 20px;
400 text-align: right;
401 flex-shrink: 0;
402 }
403
404 .sym2-sig-cell {
405 display: flex;
406 align-items: center;
407 justify-content: flex-start;
408 gap: 3px;
409 }
410
411 .sym2-pagination {
412 display: flex;
413 align-items: center;
414 justify-content: center;
415 gap: 1rem;
416 padding: 0.65rem 1rem;
417 border-top: 1px solid var(--border-default);
418 background: var(--bg-overlay);
419 }
420
421 .sym2-page-info { font-size: 0.75rem; color: var(--text-secondary); font-family: var(--font-mono); }
422
423 .sym2-row--hidden { display: none; }
424
425 // ── Detail page atoms ─────────────────────────────────────────────────────────
426
427 .sym2-vitals-strip {
428 display: flex;
429 align-items: center;
430 flex-wrap: wrap;
431 gap: 0.25rem 0.75rem;
432 margin-top: 0.6rem;
433 padding: 0.5rem 0.75rem;
434 background: color-mix(in srgb, var(--text-primary) 3%, transparent);
435 border: 1px solid var(--border-subtle);
436 border-radius: var(--radius-sm);
437 font-family: var(--font-mono);
438 font-size: 0.72rem;
439 color: var(--text-secondary);
440 }
441
442 .sym2-vitals-item {
443 display: flex;
444 align-items: center;
445 gap: 0.35rem;
446 white-space: nowrap;
447
448 strong { color: var(--text-primary); font-weight: 600; }
449 }
450
451 .sym2-vitals-sep {
452 color: var(--border-default);
453 user-select: none;
454 }
455
456 .sym2-spark-wrap { margin-top: 0.75rem; }
457
458 .sym2-spark-label {
459 font-family: var(--font-mono);
460 font-size: 0.62rem;
461 font-weight: 700;
462 text-transform: uppercase;
463 letter-spacing: 0.08em;
464 color: var(--text-muted);
465 margin-bottom: 0.35rem;
466 }
467
468 .sym2-spark {
469 display: flex;
470 align-items: flex-end;
471 gap: 3px;
472 height: 28px;
473 }
474
475 .sym2-spark-bar {
476 flex: 1;
477 border-radius: 2px 2px 0 0;
478 min-height: 2px;
479 background: linear-gradient(to top, var(--color-accent), var(--color-purple));
480 opacity: 0.85;
481 transition: opacity 0.1s;
482 &:hover { opacity: 1; }
483 &--zero { background: var(--bg-overlay); opacity: 0.4; }
484 }
485
486 .sym2-op-bar-wrap { margin-top: 0.65rem; }
487
488 .sym2-op-bar-label {
489 font-family: var(--font-mono);
490 font-size: 0.62rem;
491 font-weight: 700;
492 text-transform: uppercase;
493 letter-spacing: 0.08em;
494 color: var(--text-muted);
495 margin-bottom: 0.3rem;
496 display: flex;
497 align-items: center;
498 gap: 0.75rem;
499
500 span {
501 display: flex;
502 align-items: center;
503 gap: 0.25rem;
504 font-weight: 400;
505 color: var(--text-muted);
506 }
507 }
508
509 .sym2-op-bar {
510 display: flex;
511 height: 6px;
512 border-radius: 3px;
513 overflow: hidden;
514 background: var(--bg-overlay);
515 gap: 1px;
516 }
517
518 .sym2-op-seg {
519 height: 100%;
520 min-width: 2px;
521 border-radius: 1px;
522 &--add { background: var(--color-success); }
523 &--modify { background: var(--color-accent); }
524 &--delete { background: var(--color-danger); }
525 &--move { background: var(--color-warning); }
526 }
527
528 .sym2-coupling-pct {
529 font-family: var(--font-mono);
530 font-size: 0.62rem;
531 font-weight: 600;
532 color: var(--text-muted);
533 background: var(--bg-overlay);
534 border: 1px solid var(--border-subtle);
535 padding: 0px 5px;
536 border-radius: 3px;
537 white-space: nowrap;
538 flex-shrink: 0;
539 }
540
541 .sym2-new-version {
542 display: inline-flex;
543 align-items: center;
544 gap: 3px;
545 font-family: var(--font-mono);
546 font-size: 0.63rem;
547 font-weight: 600;
548 color: var(--color-accent);
549 background: color-mix(in srgb, var(--color-accent) 10%, transparent);
550 border: 1px solid color-mix(in srgb, var(--color-accent) 25%, transparent);
551 padding: 0px 5px;
552 border-radius: 3px;
553 white-space: nowrap;
554 }
555
556 .sym2-vitals-card {
557 .sym2-vitals-row {
558 display: flex;
559 align-items: baseline;
560 justify-content: space-between;
561 padding: 0.3rem 0;
562 border-bottom: 1px solid var(--border-subtle);
563 font-size: 0.75rem;
564 gap: 0.5rem;
565
566 &:last-child { border-bottom: none; }
567 }
568
569 .sym2-vitals-key {
570 font-size: 0.65rem;
571 font-weight: 700;
572 text-transform: uppercase;
573 letter-spacing: 0.06em;
574 color: var(--text-muted);
575 font-family: var(--font-mono);
576 white-space: nowrap;
577 }
578
579 .sym2-vitals-val {
580 font-family: var(--font-mono);
581 font-size: 0.75rem;
582 font-weight: 600;
583 color: var(--text-primary);
584 text-align: right;
585 }
586
587 .sym2-op-mini {
588 display: flex;
589 gap: 0.4rem;
590 justify-content: flex-end;
591 flex-wrap: wrap;
592
593 span {
594 font-size: 0.65rem;
595 font-family: var(--font-mono);
596 padding: 1px 5px;
597 border-radius: 3px;
598 white-space: nowrap;
599 }
600
601 .op-add { color: var(--color-success); background: color-mix(in srgb, var(--color-success) 10%, transparent); border: 1px solid color-mix(in srgb, var(--color-success) 25%, transparent); }
602 .op-modify { color: var(--color-accent); background: color-mix(in srgb, var(--color-accent) 10%, transparent); border: 1px solid color-mix(in srgb, var(--color-accent) 25%, transparent); }
603 .op-delete { color: var(--color-danger); background: color-mix(in srgb, var(--color-danger) 10%, transparent); border: 1px solid color-mix(in srgb, var(--color-danger) 25%, transparent); }
604 .op-move { color: var(--color-warning); background: color-mix(in srgb, var(--color-warning) 10%, transparent); border: 1px solid color-mix(in srgb, var(--color-warning) 25%, transparent); }
605 }
606 }
607
608 .sym2-detail-hero { margin-bottom: 0; }
609
610 .sym2-hero-addr-file {
611 font-family: var(--font-mono);
612 font-size: 0.8rem;
613 color: var(--text-muted);
614 margin-bottom: 0.3rem;
615 word-break: break-all;
616 }
617
618 .sym2-hero-addr-name {
619 font-family: var(--font-mono);
620 font-size: clamp(1.1rem, 2.5vw, 1.5rem);
621 font-weight: 700;
622 background: var(--gradient-spectral);
623 -webkit-background-clip: text;
624 -webkit-text-fill-color: transparent;
625 background-clip: text;
626 word-break: break-all;
627 line-height: 1.2;
628 }
629
630 .sym2-hero-badges {
631 display: flex;
632 align-items: center;
633 gap: 0.4rem;
634 flex-wrap: wrap;
635 margin-top: 0.65rem;
636 }
637
638 .sym2-callout-wrap {
639 display: flex;
640 flex-direction: column;
641 gap: 0.4rem;
642 margin-bottom: 0.75rem;
643 }
644
645 .sym2-callout {
646 display: flex;
647 align-items: flex-start;
648 gap: 0.6rem;
649 padding: 0.75rem 1rem;
650 border-radius: var(--radius-base);
651 font-size: 0.8rem;
652 line-height: 1.5;
653
654 &--hot {
655 background: color-mix(in srgb, var(--color-orange) 6%, transparent);
656 border: 1px solid color-mix(in srgb, var(--color-orange) 30%, transparent);
657 color: #ffd09e;
658 }
659 &--dead {
660 background: rgba(121,192,255,0.05);
661 border: 1px solid rgba(121,192,255,0.25);
662 color: #a5d6ff;
663 }
664 &--blast {
665 background: color-mix(in srgb, var(--color-danger) 6%, transparent);
666 border: 1px solid color-mix(in srgb, var(--color-danger) 30%, transparent);
667 color: #ffb3ae;
668 }
669 }
670
671 .sym2-callout-icon { font-size: 1rem; flex-shrink: 0; margin-top: 1px; }
672 .sym2-callout-body { flex: 1; }
673 .sym2-callout-title {
674 font-weight: 700;
675 font-family: var(--font-mono);
676 font-size: 0.72rem;
677 text-transform: uppercase;
678 letter-spacing: 0.07em;
679 margin-bottom: 0.2rem;
680 }
681
682 .sym2-section {
683 background: var(--bg-surface);
684 border: 1px solid var(--border-default);
685 border-radius: var(--radius-base);
686 padding: 1rem 1.1rem;
687 }
688
689 .sym2-section-title {
690 display: flex;
691 align-items: center;
692 gap: 0.4rem;
693 font-size: 0.7rem;
694 font-weight: 700;
695 text-transform: uppercase;
696 letter-spacing: 0.07em;
697 color: var(--text-muted);
698 margin: 0 0 0.75rem;
699 font-family: var(--font-mono);
700 svg { color: var(--text-muted); flex-shrink: 0; }
701 }
702
703 .sym2-section-count {
704 margin-left: 0.35rem;
705 font-size: 0.68rem;
706 background: var(--bg-overlay);
707 border: 1px solid var(--border-default);
708 padding: 0px 5px;
709 border-radius: 9999px;
710 color: var(--text-muted);
711 }
712
713 .sym2-section-sub { font-size: 0.72rem; color: var(--text-muted); margin: -0.4rem 0 0.65rem; }
714 .sym2-section-empty { margin: 0; }
715
716 .sym2-hash {
717 font-family: var(--font-mono);
718 font-size: 0.68rem;
719 color: var(--text-muted);
720 }
721
722 // ── Provenance timeline (.sym2-tl-*) ─────────────────────────────────────────
723
724 .sym2-tl {
725 display: flex;
726 flex-direction: column;
727 gap: 0;
728 margin-top: 0.5rem;
729 }
730
731 .sym2-tl--nested { margin-top: 0; }
732
733 .sym2-tl-epoch {
734 display: flex;
735 align-items: center;
736 gap: 0.5rem;
737 margin: 0.6rem 0 0.1rem 0;
738 padding: 0.3rem 0.5rem;
739 background: color-mix(in srgb, var(--color-accent) 6%, transparent);
740 border: 1px solid color-mix(in srgb, var(--color-accent) 18%, transparent);
741 border-radius: 5px;
742
743 &::after {
744 content: '';
745 flex: 1;
746 height: 1px;
747 background: linear-gradient(to right, color-mix(in srgb, var(--color-accent) 25%, transparent), transparent);
748 }
749 }
750
751 .sym2-tl-epoch-label {
752 font-family: var(--font-mono);
753 font-size: 0.65rem;
754 font-weight: 800;
755 letter-spacing: 0.08em;
756 color: var(--color-accent);
757 flex-shrink: 0;
758 text-transform: uppercase;
759 }
760
761 .sym2-tl-epoch-hash {
762 font-family: var(--font-mono);
763 font-size: 0.6rem;
764 color: var(--text-muted);
765 opacity: 0.6;
766 flex-shrink: 0;
767 }
768
769 .sym2-tl-gap {
770 font-family: var(--font-mono);
771 font-size: 0.6rem;
772 color: var(--text-muted);
773 text-align: center;
774 padding: 0.15rem 0;
775 opacity: 0.45;
776 letter-spacing: 0.04em;
777 }
778
779 .sym2-tl-entry {
780 display: flex;
781 gap: 0;
782 }
783
784 .sym2-tl-gutter {
785 display: flex;
786 flex-direction: column;
787 align-items: center;
788 width: 22px;
789 flex-shrink: 0;
790 }
791
792 .sym2-tl-dot {
793 width: 10px;
794 height: 10px;
795 border-radius: 50%;
796 border: 2px solid var(--border-default);
797 background: var(--bg-surface);
798 flex-shrink: 0;
799 position: relative;
800 z-index: 1;
801 margin-top: 5px;
802 box-shadow: 0 0 0 2px var(--bg-surface);
803
804 &--add { background: var(--color-success); border-color: var(--color-success); box-shadow: 0 0 6px color-mix(in srgb, var(--color-success) 50%, transparent), 0 0 0 2px var(--bg-surface); }
805 &--modify { background: var(--color-accent); border-color: var(--color-accent); box-shadow: 0 0 6px color-mix(in srgb, var(--color-accent) 50%, transparent), 0 0 0 2px var(--bg-surface); }
806 &--delete { background: var(--color-danger); border-color: var(--color-danger); box-shadow: 0 0 6px color-mix(in srgb, var(--color-danger) 50%, transparent), 0 0 0 2px var(--bg-surface); }
807 &--move { background: var(--color-warning); border-color: var(--color-warning); box-shadow: 0 0 6px color-mix(in srgb, var(--color-warning) 50%, transparent), 0 0 0 2px var(--bg-surface); }
808 }
809
810 .sym2-tl-line {
811 width: 1px;
812 flex: 1;
813 min-height: 4px;
814 background: var(--border-default);
815 opacity: 0.3;
816 margin-top: 1px;
817 }
818
819 .sym2-tl-content {
820 flex: 1;
821 min-width: 0;
822 padding: 0.05rem 0 0.45rem 0.55rem;
823 }
824
825 .sym2-tl-header {
826 display: flex;
827 align-items: center;
828 gap: 0.3rem;
829 flex-wrap: wrap;
830 font-size: 0.72rem;
831 margin-bottom: 0.1rem;
832 }
833
834 .sym2-tl-sep {
835 color: var(--text-muted);
836 opacity: 0.4;
837 font-size: 0.65rem;
838 }
839
840 .sym2-tl-time {
841 font-family: var(--font-mono);
842 color: var(--text-muted);
843 white-space: nowrap;
844 }
845
846 .sym2-tl-author {
847 font-family: var(--font-mono);
848 color: var(--text-secondary);
849 font-size: 0.68rem;
850 }
851
852 .sym2-tl-branch {
853 font-family: var(--font-mono);
854 font-size: 0.6rem;
855 color: var(--color-accent);
856 background: color-mix(in srgb, var(--color-accent) 10%, transparent);
857 border: 1px solid color-mix(in srgb, var(--color-accent) 20%, transparent);
858 border-radius: 3px;
859 padding: 0 4px;
860 white-space: nowrap;
861 }
862
863 .sym2-tl-message {
864 font-size: 0.79rem;
865 color: var(--text-primary);
866 line-height: 1.3;
867 white-space: nowrap;
868 overflow: hidden;
869 text-overflow: ellipsis;
870 }
871
872 .sym2-tl-hash {
873 font-size: 0.6rem;
874 opacity: 0.5;
875 }
876
877 details.sym2-history-more {
878 margin-top: 0.25rem;
879
880 summary.sym2-history-more-summary {
881 list-style: none;
882 cursor: pointer;
883 font-size: 0.72rem;
884 color: var(--color-accent-link);
885 padding: 0.3rem 0 0.3rem 1.6rem;
886 user-select: none;
887
888 &::-webkit-details-marker { display: none; }
889 &:hover { color: #79c0ff; }
890 }
891
892 &[open] summary.sym2-history-more-summary { color: var(--text-muted); }
893 }
894
895 .sym2-blast-list {
896 list-style: none;
897 padding: 0;
898 margin: 0;
899 display: flex;
900 flex-direction: column;
901 gap: 0.3rem;
902 }
903
904 .sym2-blast-row {
905 display: flex;
906 flex-direction: column;
907 gap: 3px;
908 padding: 0.3rem 0.4rem;
909 border-radius: 4px;
910 transition: background 0.1s;
911 &:hover { background: var(--bg-hover); }
912 }
913
914 .sym2-blast-row-top {
915 display: flex;
916 align-items: center;
917 justify-content: space-between;
918 gap: 0.4rem;
919 }
920
921 .sym2-blast-count {
922 flex-shrink: 0;
923 font-size: 0.68rem;
924 font-weight: 700;
925 font-family: var(--font-mono);
926 color: var(--text-muted);
927 background: var(--bg-overlay);
928 padding: 0px 6px;
929 border-radius: 9999px;
930 border: 1px solid var(--border-default);
931 white-space: nowrap;
932 }
933
934 .sym2-clone-list {
935 list-style: none;
936 padding: 0;
937 margin: 0;
938 display: flex;
939 flex-direction: column;
940 gap: 0.2rem;
941
942 li {
943 padding: 0.2rem 0.4rem;
944 border-radius: 4px;
945 transition: background 0.1s;
946 &:hover { background: var(--bg-hover); }
947 }
948 }
949
950 .sym2-hero--detail {
951 .sym2-hero-inner { align-items: flex-start; }
952 }
953
954 .sym2-hero-title--detail {
955 font-size: clamp(1.2rem, 3vw, 1.6rem);
956 .gradient-text {
957 font-family: var(--font-mono);
958 word-break: break-all;
959 }
960 }
961
962 .sym2-callout-group {
963 display: flex;
964 flex-direction: column;
965 gap: 0.4rem;
966 margin-bottom: 0.75rem;
967 }
968
969 .sym2-count-badge {
970 margin-left: 0.35rem;
971 font-size: 0.65rem;
972 background: var(--bg-overlay);
973 border: 1px solid var(--border-default);
974 padding: 0px 5px;
975 border-radius: 9999px;
976 color: var(--text-muted);
977 font-family: var(--font-mono);
978 }
979
980 .sym2-history-more-toggle {
981 list-style: none;
982 cursor: pointer;
983 font-size: 0.72rem;
984 color: var(--color-accent-link);
985 padding: 0.4rem 0 0.4rem 0;
986 user-select: none;
987
988 &::-webkit-details-marker { display: none; }
989 &:hover { color: #79c0ff; }
990 }
991
992 details.sym2-history-more[open] .sym2-history-more-toggle { color: var(--text-muted); }
993
994 .sym2-blast-addr-wrap {
995 min-width: 0;
996 flex: 1;
997 overflow: hidden;
998 }
999
1000 .sym2-blast-addr {
1001 font-family: var(--font-mono);
1002 font-size: 0.72rem;
1003 color: var(--color-accent-link);
1004 text-decoration: none;
1005 display: flex;
1006 flex-direction: column;
1007 gap: 1px;
1008 min-width: 0;
1009 overflow: hidden;
1010 &:hover { color: #79c0ff; }
1011 }
1012
1013 .sym2-blast-file {
1014 font-size: 0.63rem;
1015 color: var(--text-muted);
1016 white-space: nowrap;
1017 overflow: hidden;
1018 text-overflow: ellipsis;
1019 }
1020
1021 .sym2-blast-name {
1022 font-weight: 600;
1023 color: var(--color-accent-link);
1024 white-space: nowrap;
1025 overflow: hidden;
1026 text-overflow: ellipsis;
1027 }
1028
1029 .sym2-blast-heat {
1030 display: flex;
1031 align-items: center;
1032 gap: 0.4rem;
1033 margin-top: 3px;
1034 }
1035
1036 // ── Index not built state ─────────────────────────────────────────────────────
1037
1038 .sym2-no-index {
1039 display: flex;
1040 align-items: center;
1041 gap: 0.75rem;
1042 padding: 1.25rem 1.5rem;
1043 background: color-mix(in srgb, var(--color-warning) 5%, transparent);
1044 border: 1px solid color-mix(in srgb, var(--color-warning) 20%, transparent);
1045 border-radius: var(--radius-lg);
1046 font-size: 0.82rem;
1047 color: var(--color-warning);
1048 margin-bottom: 0.75rem;
1049 svg { flex-shrink: 0; color: var(--color-warning); }
1050 }
1051
1052 // ── Legacy .sym-* ─────────────────────────────────────────────────────────────
1053
1054 .sym-muted { color: var(--text-muted); font-size: 0.82rem; }
1055
1056 .sym-addr {
1057 font-family: var(--font-mono);
1058 font-size: 0.8rem;
1059 color: var(--color-accent-link);
1060 word-break: break-all;
1061 text-decoration: none;
1062 &:hover { color: #79c0ff; text-decoration: underline; }
1063 &.sym-addr--sm { font-size: 0.72rem; }
1064 }
1065
1066 .sym-commit-link {
1067 font-family: var(--font-mono);
1068 font-size: 0.78rem;
1069 color: var(--text-muted);
1070 text-decoration: none;
1071 &:hover { color: var(--color-accent-link); }
1072 }
1073
1074 .sym-count-badge { margin-left: 0.4rem; }
1075
1076 .sym-banner {
1077 display: flex;
1078 align-items: center;
1079 gap: 0.5rem;
1080 padding: 0.55rem 1rem;
1081 border-radius: var(--radius-base);
1082 font-size: 0.8rem;
1083 margin-bottom: 0.75rem;
1084 svg { flex-shrink: 0; }
1085 &--warn { background: color-mix(in srgb, var(--color-warning) 8%, transparent); color: var(--color-warning); border: 1px solid color-mix(in srgb, var(--color-warning) 25%, transparent); }
1086 &--info { background: color-mix(in srgb, var(--color-accent) 5%, transparent); color: var(--text-secondary); border: 1px solid color-mix(in srgb, var(--color-accent) 15%, transparent); }
1087 }
1088
1089 .sym-stat-strip {
1090 display: flex;
1091 gap: 0;
1092 background: var(--bg-surface);
1093 border: 1px solid var(--border-default);
1094 border-radius: var(--radius-base);
1095 padding: 1rem 1.5rem;
1096 margin-bottom: 0.75rem;
1097 flex-wrap: wrap;
1098 position: relative;
1099 overflow: hidden;
1100 &::before {
1101 content: '';
1102 position: absolute;
1103 inset: 0;
1104 background: radial-gradient(ellipse 60% 80% at 50% -20%, color-mix(in srgb, var(--color-accent) 4%, transparent) 0%, transparent 70%);
1105 pointer-events: none;
1106 }
1107 }
1108
1109 .sym-stat { display: flex; flex-direction: column; align-items: center; padding: 0 1.5rem; &:first-child { padding-left: 0; } }
1110 .sym-stat-divider { width: 1px; background: var(--border-default); align-self: stretch; }
1111 .sym-stat-num { font-size: 1.55rem; font-weight: 700; font-family: var(--font-mono); line-height: 1; color: var(--text-primary); &--add { color: var(--color-success); } &--mod { color: var(--color-accent); } &--del { color: var(--color-danger); } }
1112 .sym-stat-lbl { font-size: 0.7rem; font-weight: 600; text-transform: uppercase; letter-spacing: 0.06em; color: var(--text-muted); margin-top: 0.3rem; white-space: nowrap; }
1113
1114 .sym-list-page { display: flex; flex-direction: column; gap: 0; }
1115 .sym-card { background: var(--bg-surface); border: 1px solid var(--border-default); border-radius: var(--radius-base); overflow: hidden; }
1116 .sym-toolbar { display: flex; align-items: center; gap: 0.75rem; padding: 0.6rem 1rem; border-bottom: 1px solid var(--border-default); background: var(--bg-overlay); flex-wrap: wrap; }
1117 .sym-search { display: flex; align-items: center; gap: 0.4rem; flex: 1; min-width: 200px; background: var(--bg-surface); border: 1px solid var(--border-default); border-radius: 6px; padding: 0.3rem 0.6rem; transition: border-color 0.15s; &:focus-within { border-color: color-mix(in srgb, var(--color-accent) 50%, transparent); } svg { color: var(--text-muted); flex-shrink: 0; } input { border: none; background: transparent; outline: none; width: 100%; font-size: 0.82rem; color: var(--text-primary); &::placeholder { color: var(--text-muted); } } }
1118 .sym-kind-pills { display: flex; gap: 0.35rem; flex-wrap: wrap; }
1119 .sym-kind-pill { cursor: pointer; text-decoration: none; font-size: 0.72rem; font-weight: 500; padding: 2px 10px; border-radius: 9999px; border: 1px solid var(--border-default); color: var(--text-muted); background: transparent; transition: all 0.12s; &:hover { color: var(--text-primary); border-color: var(--border-default); } &--active { color: var(--text-primary) !important; border-color: var(--border-default) !important; background: var(--bg-overlay); } &--add.sym-kind-pill--active { color: var(--color-success) !important; border-color: color-mix(in srgb, var(--color-success) 40%, transparent) !important; background: color-mix(in srgb, var(--color-success) 8%, transparent); } &--mod.sym-kind-pill--active { color: var(--color-accent) !important; border-color: color-mix(in srgb, var(--color-accent) 40%, transparent) !important; background: color-mix(in srgb, var(--color-accent) 8%, transparent); } &--del.sym-kind-pill--active { color: var(--color-danger) !important; border-color: color-mix(in srgb, var(--color-danger) 40%, transparent) !important; background: color-mix(in srgb, var(--color-danger) 8%, transparent); } }
1120 .sym-table { width: 100%; border-collapse: collapse; font-size: 0.82rem; thead tr { background: var(--bg-overlay); th { padding: 0.45rem 1rem; text-align: left; font-size: 0.7rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.06em; color: var(--text-muted); border-bottom: 1px solid var(--border-default); } } tbody tr { border-bottom: 1px solid var(--border-subtle); transition: background 0.1s; &:last-child { border-bottom: none; } &:hover { background: var(--bg-hover); } td { padding: 0.5rem 1rem; vertical-align: middle; } } }
1121 .sym-addr-cell { max-width: 60%; }
1122 .sym-date-cell, .sym-hist-cell { white-space: nowrap; color: var(--text-secondary); font-size: 0.78rem; }
1123 .sym-hist-count { font-weight: 600; font-family: var(--font-mono); }
1124 .sym-pagination { display: flex; align-items: center; justify-content: center; gap: 1rem; padding: 0.65rem 1rem; border-top: 1px solid var(--border-default); background: var(--bg-overlay); }
1125 .sym-page-info { font-size: 0.78rem; color: var(--text-secondary); }
1126 .sym-detail-page { display: flex; flex-direction: column; gap: 0.75rem; }
1127 .sym-detail-header { background: var(--bg-surface); border: 1px solid var(--border-default); border-radius: var(--radius-base); padding: 1.1rem 1.5rem; position: relative; overflow: hidden; &::before { content: ''; position: absolute; inset: 0; background: radial-gradient(ellipse 50% 100% at 0% 50%, color-mix(in srgb, var(--color-accent) 4%, transparent) 0%, transparent 70%); pointer-events: none; } }
1128 .sym-detail-addr { display: flex; align-items: center; gap: 0.75rem; flex-wrap: wrap; code { font-family: var(--font-mono); font-size: 0.9rem; color: var(--text-primary); word-break: break-all; } }
1129 .sym-detail-meta { margin-top: 0.5rem; font-size: 0.78rem; color: var(--text-secondary); }
1130 .sym-detail-grid { display: grid; grid-template-columns: 1fr 300px; gap: 0.75rem; align-items: start; @media (max-width: 900px) { grid-template-columns: 1fr; } }
1131 .sym-detail-sidebar { display: flex; flex-direction: column; gap: 0.75rem; }
1132 .sym-section { background: var(--bg-surface); border: 1px solid var(--border-default); border-radius: var(--radius-base); padding: 1rem 1.1rem; }
1133 .sym-section-title { display: flex; align-items: center; gap: 0.4rem; font-size: 0.8rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.06em; color: var(--text-secondary); margin: 0 0 0.75rem; svg { color: var(--text-muted); flex-shrink: 0; } }
1134 .sym-section-sub { font-size: 0.75rem; color: var(--text-muted); margin: -0.4rem 0 0.65rem; }
1135 .sym-section-empty { margin: 0; }
1136 .sym-timeline { display: flex; flex-direction: column; position: relative; gap: 0; &::before { content: ''; position: absolute; left: 6px; top: 8px; bottom: 8px; width: 2px; background: linear-gradient(to bottom, var(--border-default) 0%, transparent 100%); } }
1137 .sym-timeline-entry { display: flex; gap: 0.75rem; padding: 0.45rem 0; position: relative; }
1138 .sym-timeline-dot { width: 14px; height: 14px; border-radius: 50%; border: 2px solid var(--border-default); background: var(--bg-surface); flex-shrink: 0; margin-top: 3px; position: relative; z-index: 1; box-shadow: 0 0 0 3px var(--bg-surface); &--add { background: var(--color-success); border-color: var(--color-success); box-shadow: 0 0 6px color-mix(in srgb, var(--color-success) 40%, transparent), 0 0 0 3px var(--bg-surface); } &--modify { background: var(--color-accent); border-color: var(--color-accent); box-shadow: 0 0 6px color-mix(in srgb, var(--color-accent) 40%, transparent), 0 0 0 3px var(--bg-surface); } &--delete { background: var(--color-danger); border-color: var(--color-danger); box-shadow: 0 0 6px color-mix(in srgb, var(--color-danger) 40%, transparent), 0 0 0 3px var(--bg-surface); } &--move { background: var(--color-warning); border-color: var(--color-warning); box-shadow: 0 0 6px color-mix(in srgb, var(--color-warning) 40%, transparent), 0 0 0 3px var(--bg-surface); } }
1139 .sym-timeline-body { flex: 1; min-width: 0; }
1140 .sym-timeline-top { display: flex; align-items: center; gap: 0.4rem; flex-wrap: wrap; font-size: 0.78rem; }
1141 .sym-timeline-hash { margin-top: 0.15rem; font-size: 0.7rem; color: var(--text-muted); }
1142 .sym-hash { font-family: var(--font-mono); font-size: 0.68rem; color: var(--text-muted); }
1143 .sym-impact-list, .sym-clone-list { list-style: none; padding: 0; margin: 0; display: flex; flex-direction: column; gap: 0.2rem; }
1144 .sym-impact-row { display: flex; align-items: center; justify-content: space-between; gap: 0.5rem; padding: 0.2rem 0.4rem; border-radius: 4px; transition: background 0.1s; &:hover { background: var(--bg-hover); } }
1145 .sym-impact-count { flex-shrink: 0; font-size: 0.7rem; font-weight: 700; font-family: var(--font-mono); color: var(--text-muted); background: var(--bg-overlay); padding: 0px 6px; border-radius: 9999px; border: 1px solid var(--border-default); }
1146 .sym-clone-list li { padding: 0.2rem 0.4rem; border-radius: 4px; transition: background 0.1s; &:hover { background: var(--bg-hover); } }
File History 1 commit
sha256:bb2baaabdd19320bde50cb69d447fd1c1e571467df729be1a23b5e93064b046a feat(intel): standardize headers, gauge icon, velocity card… Sonnet 4.6 minor ⚠ 144 days ago