gabriel / musehub public
_releases.scss
1,233 lines 40.5 KB
Raw
sha256:25d96102cb2d69a038356dff26f4633156da2f1faf98fe0d0e4438ff3f367f12 refactor: rename 0054/0055 migrations to standard convention Sonnet 4.6 minor ⚠ breaking 21 days ago
1 // ─────────────────────────────────────────────────────────────────────────────
2 // Component: Releases (list · detail)
3 // File: src/scss/components/_releases.scss
4 //
5 // Visual rules for .rl-* (list), .rd-* (detail), .sr-* (semantic report),
6 // .rd2-* (detail v2).
7 // Structural layout lives in pages/_releases.scss.
8 // ─────────────────────────────────────────────────────────────────────────────
9
10 // ── List page hero ────────────────────────────────────────────────────────────
11
12 .rl-hero-shell {
13 position: relative;
14 background: linear-gradient(135deg, var(--bg-base) 0%, var(--bg-hero-mid) 50%, var(--bg-base) 100%);
15 border-bottom: 1px solid var(--border-default);
16 overflow: hidden;
17 padding: 0 var(--space-4);
18 margin: 0 calc(-1 * var(--space-4));
19 }
20
21 .rl-hero-glow {
22 position: absolute; inset: 0; pointer-events: none;
23 background:
24 radial-gradient(ellipse 50% 90% at 80% 20%, color-mix(in srgb, var(--color-success) 7%, transparent) 0%, transparent 70%),
25 radial-gradient(ellipse 35% 60% at 10% 80%, color-mix(in srgb, var(--color-accent) 5%, transparent) 0%, transparent 60%);
26 }
27
28 .rl-hero-eyebrow {
29 display: inline-flex;
30 align-items: center;
31 gap: 6px;
32 font-size: 10px;
33 font-weight: 700;
34 text-transform: uppercase;
35 letter-spacing: 0.08em;
36 color: var(--color-success);
37 margin-bottom: var(--space-2);
38 svg { flex-shrink: 0; }
39 }
40
41 .rl-hero-title {
42 font-size: clamp(22px, 3.5vw, 32px);
43 font-weight: 800;
44 line-height: 1.15;
45 letter-spacing: -0.02em;
46 margin: 0 0 var(--space-2);
47 color: var(--text-primary);
48 }
49
50 .rl-hero-meta-row {
51 font-size: 12px;
52 color: var(--text-muted);
53 }
54
55 .rl-hero-sha {
56 font-family: var(--font-mono);
57 font-size: 11px;
58 color: var(--color-accent-link);
59 text-decoration: none;
60 &:hover { text-decoration: underline; }
61 }
62
63 .rl-hero-body-preview {
64 font-size: 13px;
65 color: var(--text-secondary);
66 line-height: 1.6;
67 padding: var(--space-3) var(--space-4);
68 background: rgba(255,255,255,0.03);
69 border-left: 2px solid color-mix(in srgb, var(--color-success) 30%, transparent);
70 border-radius: 0 var(--radius-sm) var(--radius-sm) 0;
71 margin-bottom: var(--space-3);
72 }
73
74 // ── Stat pills ────────────────────────────────────────────────────────────────
75
76 .rl-stat-pill {
77 background: transparent;
78 border: 1px solid var(--border-subtle);
79 border-left: 2px solid var(--border-default);
80 border-radius: var(--radius-sm);
81 padding: 9px 14px;
82 min-width: 140px;
83 transition: border-left-color 0.15s;
84
85 &:hover { border-left-color: var(--color-accent); }
86 &--stable:hover { border-left-color: var(--color-success); }
87 &--pre:hover { border-left-color: var(--color-orange); }
88 }
89
90 .rl-stat-value {
91 font-family: var(--font-mono);
92 font-size: 18px;
93 font-weight: 700;
94 color: var(--text-primary);
95 line-height: 1;
96 &--stable { color: var(--color-success); }
97 &--pre { color: var(--color-orange); }
98 }
99
100 .rl-stat-label {
101 font-size: 11px;
102 font-weight: 500;
103 color: var(--text-muted);
104 text-transform: uppercase;
105 letter-spacing: 0.06em;
106 }
107
108 // ── List card + toolbar ───────────────────────────────────────────────────────
109
110 .rl-card {
111 background: transparent;
112 border: 1px solid var(--border-subtle);
113 border-left: 2px solid var(--border-default);
114 border-radius: var(--radius-sm);
115 overflow: hidden;
116 transition: border-left-color 0.15s;
117 }
118
119 .rl-toolbar { border-bottom: 1px solid var(--border-subtle); }
120
121 .rl-tab {
122 display: inline-flex;
123 align-items: center;
124 gap: 6px;
125 padding: 14px 12px;
126 font-size: 13px;
127 color: var(--text-muted);
128 text-decoration: none;
129 border-bottom: 2px solid transparent;
130 white-space: nowrap;
131 cursor: pointer;
132 background: none;
133 border-left: none; border-right: none; border-top: none;
134 transition: color 0.15s, border-color 0.15s;
135
136 &:hover { color: var(--text-secondary); text-decoration: none; }
137 &.rl-tab--active {
138 color: var(--text-primary);
139 border-bottom-color: var(--color-accent);
140 font-weight: var(--weight-semibold);
141 }
142 }
143
144 .rl-search {
145 display: flex;
146 align-items: center;
147 gap: 7px;
148 background: transparent;
149 border: 1px solid rgba(255,255,255,0.08);
150 border-radius: var(--radius-sm);
151 padding: 5px 10px;
152 transition: border-color 0.15s;
153
154 &:focus-within { border-color: color-mix(in srgb, var(--color-accent) 40%, transparent); }
155 svg { color: var(--text-muted); flex-shrink: 0; }
156
157 input {
158 background: none;
159 border: none;
160 outline: none;
161 font-size: 12px;
162 color: var(--text-primary);
163 width: 150px;
164 &::placeholder { color: var(--text-muted); }
165 }
166 }
167
168 // ── Release rows ──────────────────────────────────────────────────────────────
169
170 .rl-row {
171 border-bottom: 1px solid var(--border-subtle);
172 transition: background 0.12s;
173
174 &:last-child { border-bottom: none; }
175 &:hover { background: rgba(255,255,255,0.02); }
176 }
177
178 .rl-row-tag {
179 flex-shrink: 0;
180 padding: 3px 10px;
181 border-radius: var(--radius-sm);
182 font-family: var(--font-mono);
183 font-size: 12px;
184 font-weight: 700;
185 white-space: nowrap;
186 min-width: 72px;
187 text-align: center;
188 }
189
190 .rl-tag--stable { background: color-mix(in srgb, var(--color-success) 10%, transparent); color: var(--color-success); border: 1px solid color-mix(in srgb, var(--color-success) 25%, transparent); }
191 .rl-tag--beta { background: color-mix(in srgb, var(--color-orange) 10%, transparent); color: var(--color-orange); border: 1px solid color-mix(in srgb, var(--color-orange) 25%, transparent); }
192 .rl-tag--alpha { background: color-mix(in srgb, var(--color-purple) 10%, transparent); color: var(--color-purple); border: 1px solid color-mix(in srgb, var(--color-purple) 25%, transparent); }
193 .rl-tag--nightly { background: color-mix(in srgb, var(--color-accent) 10%, transparent); color: var(--color-accent); border: 1px solid color-mix(in srgb, var(--color-accent) 25%, transparent); }
194 .rl-tag--draft { background: transparent; color: var(--text-muted); border: 1px solid var(--border-subtle); }
195 .rl-tag--prerelease { background: color-mix(in srgb, var(--color-orange) 10%, transparent); color: var(--color-orange); border: 1px solid color-mix(in srgb, var(--color-orange) 25%, transparent); }
196
197 .rl-row-title {
198 font-size: 14px;
199 font-weight: 600;
200 color: var(--text-primary);
201 text-decoration: none;
202 &:hover { text-decoration: underline; color: var(--color-accent-link); }
203 }
204
205 .rl-pill {
206 display: inline-flex;
207 align-items: center;
208 gap: 3px;
209 padding: 1px 8px;
210 border-radius: var(--radius-full);
211 font-size: 10px;
212 font-weight: 700;
213 letter-spacing: 0.03em;
214 }
215
216 .rl-pill--stable { background: color-mix(in srgb, var(--color-success) 10%, transparent); color: var(--color-success); border: 1px solid color-mix(in srgb, var(--color-success) 25%, transparent); }
217 .rl-pill--prerelease { background: color-mix(in srgb, var(--color-orange) 10%, transparent); color: var(--color-orange); border: 1px solid color-mix(in srgb, var(--color-orange) 25%, transparent); }
218 .rl-pill--alpha { background: color-mix(in srgb, var(--color-purple) 10%, transparent); color: var(--color-purple); border: 1px solid color-mix(in srgb, var(--color-purple) 25%, transparent); }
219 .rl-pill--nightly { background: color-mix(in srgb, var(--color-accent) 10%, transparent); color: var(--color-accent); border: 1px solid color-mix(in srgb, var(--color-accent) 25%, transparent); }
220 .rl-pill--draft { background: transparent; color: var(--text-muted); border: 1px solid var(--border-subtle); }
221
222 .rl-row-meta { font-size: 11px; color: var(--text-muted); }
223 .rl-meta-dot { color: var(--border-default); }
224
225 .rl-row-author { color: var(--text-secondary); }
226
227 .rl-avatar {
228 width: 16px; height: 16px;
229 border-radius: 50%;
230 display: inline-flex;
231 align-items: center;
232 justify-content: center;
233 font-size: 8px;
234 font-weight: 700;
235 color: #fff;
236 flex-shrink: 0;
237 }
238
239 .rl-row-sha {
240 font-family: var(--font-mono);
241 font-size: 11px;
242 color: var(--color-accent-link);
243 text-decoration: none;
244 &:hover { text-decoration: underline; }
245 }
246
247 .rl-gpg {
248 font-size: 10px;
249 color: var(--color-success);
250 display: inline-flex;
251 align-items: center;
252 gap: 3px;
253 }
254
255 .rl-row-preview {
256 font-size: 12px;
257 color: var(--text-muted);
258 white-space: nowrap;
259 overflow: hidden;
260 text-overflow: ellipsis;
261 }
262
263 .rl-changelog-chip {
264 display: inline-flex;
265 align-items: center;
266 gap: 4px;
267 font-size: 10px;
268 font-family: var(--font-mono);
269 color: var(--text-muted);
270 background: transparent;
271 border: 1px solid var(--border-subtle);
272 border-radius: var(--radius-full);
273 padding: 1px 7px;
274 }
275
276 .rl-row-action { flex-shrink: 0; margin-top: 2px; }
277
278 .rl-sole-note {
279 text-align: center;
280 padding: var(--space-5);
281 font-size: 13px;
282 color: var(--text-muted);
283 }
284
285 .rl-empty-icon { opacity: 0.25; margin-bottom: var(--space-1); }
286 .rl-empty-title { font-size: 18px; font-weight: 600; color: var(--text-secondary); }
287 .rl-empty-desc { font-size: 13px; color: var(--text-muted); max-width: 380px; line-height: 1.6; }
288
289 // ═══════════════════════════════════════════════════════════════════════════════
290 // Release detail page (.rd-*)
291 // ═══════════════════════════════════════════════════════════════════════════════
292
293 .rd-header {
294 position: relative;
295 background: linear-gradient(135deg, var(--bg-base) 0%, var(--bg-hero-mid) 60%, var(--bg-base) 100%);
296 border: 1px solid var(--border-default);
297 border-left: 3px solid var(--color-success);
298 border-radius: var(--radius-md);
299 overflow: hidden;
300 margin-bottom: var(--space-4);
301
302 &::before {
303 content: '';
304 position: absolute; inset: 0; pointer-events: none;
305 background:
306 radial-gradient(ellipse 50% 100% at 85% 20%, color-mix(in srgb, var(--color-success) 6%, transparent) 0%, transparent 65%),
307 radial-gradient(ellipse 30% 60% at 5% 80%, color-mix(in srgb, var(--color-accent) 4%, transparent) 0%, transparent 60%);
308 }
309
310 &.is-prerelease {
311 border-left-color: var(--color-orange);
312 &::before { background: radial-gradient(ellipse 50% 100% at 85% 20%, color-mix(in srgb, var(--color-orange) 6%, transparent) 0%, transparent 65%); }
313 }
314 &.is-draft { border-left-color: var(--border-default); }
315 &.is-alpha {
316 border-left-color: var(--color-purple);
317 &::before { background: radial-gradient(ellipse 50% 100% at 85% 20%, color-mix(in srgb, var(--color-purple) 6%, transparent) 0%, transparent 65%); }
318 }
319 &.is-nightly {
320 border-left-color: var(--color-accent);
321 &::before { background: radial-gradient(ellipse 50% 100% at 85% 20%, color-mix(in srgb, var(--color-accent) 6%, transparent) 0%, transparent 65%); }
322 }
323 }
324
325 .rd-header-body {
326 position: relative;
327 padding: var(--space-5) var(--space-5) var(--space-4);
328 }
329
330 .rd-title {
331 font-size: clamp(20px, 3vw, 28px);
332 font-weight: 800;
333 color: var(--text-primary);
334 margin: 0;
335 line-height: 1.15;
336 letter-spacing: -0.01em;
337 }
338
339 .rd-tag-badge {
340 display: inline-flex;
341 align-items: center;
342 padding: 3px 10px;
343 border-radius: var(--radius-full);
344 font-family: var(--font-mono);
345 font-size: 12px;
346 font-weight: 700;
347 background: color-mix(in srgb, var(--color-accent) 8%, transparent);
348 color: var(--color-accent-link);
349 border: 1px solid color-mix(in srgb, var(--color-accent) 20%, transparent);
350 white-space: nowrap;
351 }
352
353 .rd-channel-badge {
354 display: inline-flex;
355 align-items: center;
356 padding: 2px 8px;
357 border-radius: var(--radius-full);
358 font-size: 10px;
359 font-weight: 700;
360 letter-spacing: 0.04em;
361 text-transform: uppercase;
362 white-space: nowrap;
363
364 &--stable { background: color-mix(in srgb, var(--color-success) 10%, transparent); color: var(--color-success); border: 1px solid color-mix(in srgb, var(--color-success) 25%, transparent); }
365 &--beta { background: color-mix(in srgb, var(--color-orange) 10%, transparent); color: var(--color-orange); border: 1px solid color-mix(in srgb, var(--color-orange) 25%, transparent); }
366 &--alpha { background: color-mix(in srgb, var(--color-purple) 10%, transparent); color: var(--color-purple); border: 1px solid color-mix(in srgb, var(--color-purple) 25%, transparent); }
367 &--nightly { background: color-mix(in srgb, var(--color-accent) 10%, transparent); color: var(--color-accent); border: 1px solid color-mix(in srgb, var(--color-accent) 25%, transparent); }
368 &--draft { background: transparent; color: var(--text-muted); border: 1px solid var(--border-subtle); }
369 }
370
371 .rd-meta-label {
372 font-size: 10px;
373 text-transform: uppercase;
374 letter-spacing: 0.07em;
375 color: var(--text-muted);
376 font-weight: 600;
377 }
378
379 .rd-meta-value { font-size: 13px; color: var(--text-primary); }
380
381 .rd-commit-sha {
382 font-family: var(--font-mono);
383 font-size: 12px;
384 color: var(--color-accent-link);
385 text-decoration: none;
386 &:hover { text-decoration: underline; }
387 }
388
389 .rd-snapshot-hash {
390 font-family: var(--font-mono);
391 font-size: 11px;
392 color: var(--text-secondary);
393 word-break: break-all;
394 }
395
396 .rd-avatar {
397 width: 20px; height: 20px;
398 border-radius: 50%;
399 background: var(--color-accent-muted);
400 display: inline-flex;
401 align-items: center;
402 justify-content: center;
403 font-size: 9px;
404 font-weight: 700;
405 color: #fff;
406 flex-shrink: 0;
407 }
408
409 .rd-gpg-badge {
410 display: inline-flex;
411 align-items: center;
412 gap: 4px;
413 font-size: 11px;
414 font-weight: 600;
415 padding: 2px 8px;
416 border-radius: var(--radius-full);
417 &.verified { background: color-mix(in srgb, var(--color-success) 10%, transparent); color: var(--color-success); border: 1px solid color-mix(in srgb, var(--color-success) 25%, transparent); }
418 &.unverified { background: transparent; color: var(--text-muted); border: 1px solid var(--border-subtle); }
419 }
420
421 .rd-stats { border-top: 1px solid rgba(255,255,255,0.05); }
422
423 .rd-stat {
424 border-right: 1px solid rgba(255,255,255,0.04);
425 &:last-child { border-right: none; }
426 }
427
428 .rd-stat-value {
429 font-family: var(--font-mono);
430 font-size: 17px;
431 font-weight: 700;
432 color: var(--text-primary);
433 line-height: 1;
434 }
435
436 .rd-stat-label {
437 font-size: 10px;
438 text-transform: uppercase;
439 letter-spacing: 0.06em;
440 color: var(--text-muted);
441 font-weight: 500;
442 }
443
444 .rd-rss-btn {
445 color: var(--color-orange);
446 border-color: color-mix(in srgb, var(--color-orange) 30%, transparent);
447 &:hover { background: color-mix(in srgb, var(--color-orange) 8%, transparent); }
448 }
449
450 .rd-section {
451 background: transparent;
452 border: 1px solid var(--border-subtle);
453 border-left: 2px solid var(--border-default);
454 border-radius: var(--radius-sm);
455 overflow: hidden;
456 transition: border-left-color 0.15s;
457 &:hover { border-left-color: var(--color-accent); }
458 }
459
460 .rd-section-header {
461 border-bottom: 1px solid var(--border-subtle);
462 font-size: 12px;
463 font-weight: 700;
464 text-transform: uppercase;
465 letter-spacing: 0.05em;
466 color: var(--text-muted);
467 background: rgba(255,255,255,0.015);
468
469 &--danger {
470 color: var(--color-danger);
471 svg { stroke: var(--color-danger); }
472 }
473 }
474
475 .rd-section-count {
476 margin-left: auto;
477 font-size: 10px;
478 font-family: var(--font-mono);
479 background: var(--bg-overlay);
480 border: 1px solid var(--border-subtle);
481 border-radius: var(--radius-full);
482 padding: 1px 7px;
483 color: var(--text-muted);
484 font-weight: 400;
485 letter-spacing: 0;
486 text-transform: none;
487
488 &--danger {
489 background: color-mix(in srgb, var(--color-danger) 15%, transparent);
490 color: var(--color-danger);
491 border-color: color-mix(in srgb, var(--color-danger) 30%, transparent);
492 }
493 }
494
495 .rd-section-body { padding: var(--space-4); }
496
497 .rd-notes-body {
498 padding: var(--space-4);
499 font-size: 14px;
500 color: var(--text-secondary);
501 line-height: 1.7;
502
503 h1,h2,h3,h4 { color: var(--text-primary); font-weight: 600; margin: var(--space-4) 0 var(--space-2); }
504 p { margin: 0 0 var(--space-3); }
505 code { font-family: var(--font-mono); font-size: 12px; background: var(--bg-overlay); padding: 1px 5px; border-radius: 3px; }
506 pre { background: var(--bg-overlay); border: 1px solid var(--border-subtle); border-radius: var(--radius-sm); padding: var(--space-3); overflow-x: auto; }
507 a { color: var(--color-accent-link); }
508 ul,ol { padding-left: var(--space-5); margin: 0 0 var(--space-3); }
509 }
510
511 .rd-breaking-banner {
512 display: inline-flex;
513 align-items: center;
514 gap: 4px;
515 padding: 2px 8px;
516 border-radius: 12px;
517 background: color-mix(in srgb, var(--color-danger) 15%, transparent);
518 color: var(--color-danger);
519 border: 1px solid color-mix(in srgb, var(--color-danger) 30%, transparent);
520 font-size: 11px;
521 font-weight: 600;
522 }
523
524 .rd-changelog-entry {
525 border-bottom: 1px solid rgba(255,255,255,0.03);
526 font-size: 13px;
527
528 &:last-child { border-bottom: none; }
529 &:hover { background: rgba(255,255,255,0.015); }
530 }
531
532 .rd-changelog-bump {
533 flex-shrink: 0;
534 width: 22px;
535 height: 22px;
536 border-radius: var(--radius-sm);
537 display: flex;
538 align-items: center;
539 justify-content: center;
540 font-size: 10px;
541 font-weight: 700;
542 margin-top: 1px;
543 font-family: var(--font-mono);
544
545 &--major { background: color-mix(in srgb, var(--color-danger) 12%, transparent); color: var(--color-danger); border: 1px solid color-mix(in srgb, var(--color-danger) 25%, transparent); }
546 &--minor { background: color-mix(in srgb, var(--color-success) 12%, transparent); color: var(--color-success); border: 1px solid color-mix(in srgb, var(--color-success) 25%, transparent); }
547 &--patch { background: color-mix(in srgb, var(--color-accent) 12%, transparent); color: var(--color-accent); border: 1px solid color-mix(in srgb, var(--color-accent) 25%, transparent); }
548 &--other { background: var(--bg-overlay); color: var(--text-muted); border: 1px solid var(--border-subtle); }
549 }
550
551 .rd-changelog-msg {
552 color: var(--text-secondary);
553 white-space: nowrap;
554 overflow: hidden;
555 text-overflow: ellipsis;
556 margin-bottom: 2px;
557 }
558
559 .rd-changelog-meta { font-size: 11px; color: var(--text-muted); }
560
561 .rd-changelog-sha {
562 font-family: var(--font-mono);
563 font-size: 10px;
564 color: var(--color-accent-link);
565 text-decoration: none;
566 &:hover { text-decoration: underline; }
567 }
568
569 .rd-breaking-chip {
570 font-size: 10px;
571 font-family: var(--font-mono);
572 padding: 1px 6px;
573 border-radius: 3px;
574 background: color-mix(in srgb, var(--color-danger) 10%, transparent);
575 color: var(--color-danger);
576 border: 1px solid color-mix(in srgb, var(--color-danger) 20%, transparent);
577 }
578
579 .rd-semver-cell {
580 background: transparent;
581 border: 1px solid var(--border-subtle);
582 border-radius: var(--radius-sm);
583 }
584
585 .rd-semver-value {
586 font-family: var(--font-mono);
587 font-size: 18px;
588 font-weight: 700;
589 color: var(--text-primary);
590 line-height: 1;
591 }
592
593 .rd-semver-label {
594 font-size: 9px;
595 text-transform: uppercase;
596 letter-spacing: 0.07em;
597 color: var(--text-muted);
598 font-weight: 600;
599 }
600
601 .rd-asset-row {
602 border-bottom: 1px solid rgba(255,255,255,0.03);
603 &:last-child { border-bottom: none; }
604 &:hover { background: rgba(255,255,255,0.015); }
605 }
606
607 .rd-asset-icon { font-size: 16px; flex-shrink: 0; }
608
609 .rd-asset-name {
610 font-size: 13px;
611 font-weight: 600;
612 color: var(--color-accent-link);
613 text-decoration: none;
614 &:hover { text-decoration: underline; }
615 }
616
617 .rd-asset-meta { font-size: 11px; color: var(--text-muted); }
618
619 .rd-no-assets {
620 padding: var(--space-5) var(--space-4);
621 text-align: center;
622 font-size: 13px;
623 color: var(--text-muted);
624 }
625
626 .rd-sidebar-card {
627 background: transparent;
628 border: 1px solid var(--border-subtle);
629 border-left: 2px solid var(--border-default);
630 border-radius: var(--radius-sm);
631 overflow: hidden;
632 transition: border-left-color 0.15s;
633 &:hover { border-left-color: var(--color-accent); }
634 }
635
636 .rd-sidebar-header {
637 padding: var(--space-2) var(--space-3);
638 font-size: 10px;
639 font-weight: 700;
640 text-transform: uppercase;
641 letter-spacing: 0.06em;
642 color: var(--text-muted);
643 background: rgba(255,255,255,0.015);
644 border-bottom: 1px solid rgba(255,255,255,0.04);
645 }
646
647 .rd-sidebar-key { color: var(--text-muted); font-size: 11px; flex-shrink: 0; }
648 .rd-sidebar-val { color: var(--text-primary); font-size: 12px; text-align: right; word-break: break-all; }
649 .rd-sidebar-mono { font-family: var(--font-mono); font-size: 10px; color: var(--text-secondary); word-break: break-all; text-align: right; }
650
651 // ═══════════════════════════════════════════════════════════════════════════════
652 // Semantic Release Report (.sr-*)
653 // ═══════════════════════════════════════════════════════════════════════════════
654
655 .sr-lang-strip {
656 margin: var(--space-3) 0 var(--space-2);
657 padding: 0 2px;
658 }
659
660 .sr-lang-bar {
661 border-radius: 4px;
662 background: var(--bg-tertiary);
663 }
664
665 .sr-lang-seg {
666 display: block;
667 height: 100%;
668 min-width: 2px;
669 transition: filter 0.2s;
670 &:hover { filter: brightness(1.3); }
671 }
672
673 .sr-lang-item { font-size: 11px; color: var(--text-secondary); }
674 .sr-lang-dot { display: inline-block; width: 9px; height: 9px; border-radius: 50%; flex-shrink: 0; }
675 .sr-lang-stat { color: var(--text-muted); font-size: 10px; }
676 .sr-lang-more { color: var(--text-muted); font-style: italic; }
677
678 .sr-section {
679 border-left: 2px solid var(--accent-blue-subtle);
680 padding-left: 10px;
681 margin-left: -12px;
682 }
683
684 .sr-api-col {
685 background: var(--bg-secondary);
686 border-radius: 6px;
687 padding: var(--space-2);
688 border-top: 2px solid transparent;
689
690 &--added { border-top-color: var(--color-success); }
691 &--removed { border-top-color: var(--color-danger); }
692 &--modified { border-top-color: var(--color-orange); }
693 }
694
695 .sr-api-col-head {
696 font-size: 11px;
697 font-weight: 700;
698 text-transform: uppercase;
699 letter-spacing: 0.06em;
700 color: var(--text-muted);
701
702 .sr-api-col--added & { color: var(--color-success); }
703 .sr-api-col--removed & { color: var(--color-danger); }
704 .sr-api-col--modified & { color: var(--color-orange); }
705 }
706
707 .sr-api-count {
708 background: rgba(255,255,255,0.08);
709 border-radius: 10px;
710 padding: 0 6px;
711 font-size: 10px;
712 color: inherit;
713 }
714
715 .sr-api-entry {
716 border-bottom: 1px solid var(--border-default);
717 font-size: 11px;
718 &:last-child { border-bottom: none; }
719 }
720
721 .sr-api-kind {
722 flex-shrink: 0;
723 font-family: var(--font-mono);
724 font-size: 9px;
725 padding: 0 4px;
726 border-radius: 3px;
727 background: rgba(255,255,255,0.06);
728 color: var(--text-muted);
729
730 &--function, &--async_function { color: var(--color-accent); background: color-mix(in srgb, var(--color-accent) 12%, transparent); }
731 &--class { color: var(--color-purple); background: color-mix(in srgb, var(--color-purple) 12%, transparent); }
732 &--method, &--async_method { color: var(--color-success); background: color-mix(in srgb, var(--color-success) 12%, transparent); }
733 &--variable { color: var(--color-orange); background: color-mix(in srgb, var(--color-orange) 12%, transparent); }
734 }
735
736 .sr-api-addr {
737 flex: 1;
738 font-family: var(--font-mono);
739 font-size: 10px;
740 color: var(--text-primary);
741 overflow: hidden;
742 text-overflow: ellipsis;
743 white-space: nowrap;
744 }
745
746 .sr-api-lang { flex-shrink: 0; font-size: 9px; color: var(--text-muted); font-weight: 700; }
747 .sr-api-more { font-size: 10px; color: var(--text-muted); text-align: center; margin-top: var(--space-1); font-style: italic; }
748
749 .sr-breaking-entry {
750 background: color-mix(in srgb, var(--color-danger) 8%, transparent);
751 border: 1px solid color-mix(in srgb, var(--color-danger) 20%, transparent);
752 border-radius: 5px;
753 }
754
755 .sr-breaking-icon { color: var(--color-danger); flex-shrink: 0; }
756 .sr-breaking-addr { font-family: var(--font-mono); font-size: 11px; color: var(--color-danger); }
757
758 .sr-hotspot-lang { font-family: var(--font-mono); font-size: 9px; font-weight: 700; text-align: center; }
759 .sr-hotspot-file { font-family: var(--font-mono); font-size: 10px; color: var(--text-primary); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
760 .sr-hotspot-bar-wrap { background: var(--bg-tertiary); border-radius: 3px; overflow: hidden; }
761 .sr-hotspot-bar { height: 100%; border-radius: 3px; transition: width 0.4s ease; }
762 .sr-hotspot-count { font-family: var(--font-mono); font-size: 10px; color: var(--text-muted); text-align: right; }
763
764 .sr-refactor-row {
765 border-radius: 4px;
766 background: var(--bg-secondary);
767 font-size: 11px;
768
769 &--move { border-left: 3px solid var(--color-accent); }
770 &--add { border-left: 3px solid var(--color-success); }
771 &--delete { border-left: 3px solid var(--color-danger); }
772 &--patch { border-left: 3px solid var(--color-orange); }
773 }
774
775 .sr-refactor-kind { font-family: var(--font-mono); font-size: 9px; font-weight: 700; color: var(--text-muted); flex-shrink: 0; min-width: 40px; }
776 .sr-refactor-addr { font-family: var(--font-mono); font-size: 10px; color: var(--text-primary); flex-shrink: 0; max-width: 200px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
777 .sr-refactor-detail { flex: 1; color: var(--text-muted); font-size: 10px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
778 .sr-refactor-commit { font-family: var(--font-mono); font-size: 9px; color: var(--text-muted); flex-shrink: 0; }
779
780 .sr-sym-kind { color: var(--text-secondary); font-size: 10px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
781 .sr-sym-bar-wrap { background: var(--bg-tertiary); border-radius: 4px; overflow: hidden; }
782 .sr-sym-bar { height: 100%; background: linear-gradient(90deg, color-mix(in srgb, var(--color-accent) 25%, transparent), var(--color-accent)); border-radius: 4px; transition: width 0.3s ease; }
783 .sr-sym-count { font-family: var(--font-mono); font-size: 10px; color: var(--text-muted); text-align: right; }
784
785 .sr-authorship-bar { border-radius: 5px; background: var(--bg-tertiary); }
786 .sr-authorship-human { background: var(--color-success); transition: width 0.4s ease; }
787 .sr-authorship-agent { background: var(--color-purple); transition: width 0.4s ease; }
788 .sr-authorship-legend { font-size: 11px; color: var(--text-secondary); }
789 .sr-auth-dot {
790 display: inline-block;
791 width: 8px; height: 8px;
792 border-radius: 50%;
793 margin-right: 4px;
794 &--human { background: var(--color-success); }
795 &--agent { background: var(--color-purple); }
796 }
797
798 // ═══════════════════════════════════════════════════════════════════════════════
799 // Release detail v2 (.rd2-*)
800 // ═══════════════════════════════════════════════════════════════════════════════
801
802 .rd2-header {
803 background: var(--bg-secondary);
804 border: 1px solid var(--border-default);
805 border-radius: 8px;
806 }
807
808 .rd2-title {
809 font-size: 1.25rem;
810 font-weight: 700;
811 margin: 0 0 6px;
812 color: var(--text-primary);
813 }
814
815 .rd2-tag {
816 font-family: var(--font-mono);
817 font-size: 13px;
818 font-weight: 700;
819 background: #1f3b5a;
820 color: var(--color-accent);
821 padding: 2px 10px;
822 border-radius: 20px;
823 border: 1px solid #264f78;
824
825 &--sm { font-size: 11px; padding: 1px 7px; }
826 }
827
828 .rd2-channel {
829 font-size: 11px;
830 font-weight: 700;
831 text-transform: uppercase;
832 letter-spacing: 0.05em;
833 padding: 2px 8px;
834 border-radius: 4px;
835
836 &--stable { background: var(--color-success-bg); color: var(--color-success); border: 1px solid #238636; }
837 &--beta { background: #2d1b00; color: var(--color-orange); border: 1px solid #9e6a03; }
838 &--alpha { background: #1e1038; color: var(--color-purple); border: 1px solid #6e40c9; }
839 &--nightly { background: #0d1f36; color: var(--color-accent); border: 1px solid var(--color-accent-muted); }
840 &--draft { background: #1c1c1c; color: var(--text-secondary); border: 1px solid #30363d; }
841 }
842
843 .rd2-breaking-flag {
844 font-size: 11px;
845 font-weight: 700;
846 color: var(--color-danger);
847 background: var(--color-danger-bg);
848 border: 1px solid var(--color-danger);
849 padding: 2px 8px;
850 border-radius: 4px;
851 }
852
853 .rd2-meta-row { font-size: 12px; color: var(--text-secondary); }
854
855 .rd2-sha {
856 font-family: var(--font-mono);
857 font-size: 12px;
858 color: var(--color-accent);
859 text-decoration: none;
860 &:hover { text-decoration: underline; }
861 }
862
863 .rd2-snap { font-family: var(--font-mono); font-size: 11px; color: var(--text-muted); }
864 .rd2-date,
865 .rd2-sep { color: var(--text-muted); }
866 .rd2-verified { color: var(--color-success); font-size: 11px; font-weight: 700; }
867
868 .rd2-pending {
869 text-align: center;
870 padding: var(--space-6);
871 background: var(--bg-secondary);
872 border: 1px solid var(--border-default);
873 border-radius: 8px;
874 margin-bottom: var(--space-4);
875 }
876
877 .rd2-pending-icon {
878 font-size: 2rem;
879 margin-bottom: 8px;
880 animation: rd2spin 2s linear infinite;
881 display: inline-block;
882 }
883
884 @keyframes rd2spin { to { transform: rotate(360deg); } }
885
886 .rd2-pending-title { font-size: 14px; font-weight: 700; color: var(--text-primary); margin-bottom: 4px; }
887 .rd2-pending-sub { font-size: 12px; color: var(--text-muted); }
888
889 .rd2-glance {
890 background: var(--bg-secondary);
891 border: 1px solid var(--border-default);
892 border-radius: 8px;
893 margin-bottom: var(--space-4);
894 }
895
896 .rd2-hero-n {
897 font-size: 2.2rem;
898 font-weight: 800;
899 color: var(--text-primary);
900 line-height: 1;
901 font-variant-numeric: tabular-nums;
902 }
903
904 .rd2-hero-lbl {
905 font-size: 11px;
906 color: var(--text-muted);
907 text-transform: uppercase;
908 letter-spacing: 0.06em;
909 margin-top: 4px;
910 }
911
912 .rd2-hero-divider {
913 width: 1px;
914 height: 48px;
915 background: var(--border-default);
916 flex-shrink: 0;
917 }
918
919 .rd2-lang-bar-stacked {
920 border-radius: 4px;
921 overflow: hidden;
922 background: var(--bg-tertiary);
923 }
924
925 .rd2-lang-seg { height: 100%; min-width: 2px; }
926
927 .rd2-lang-dot { width: 8px; height: 8px; border-radius: 50%; flex-shrink: 0; }
928 .rd2-lang-name { color: var(--text-primary); font-weight: 500; }
929 .rd2-lang-track { height: 4px; border-radius: 2px; background: var(--bg-tertiary); overflow: hidden; }
930 .rd2-lang-fill { height: 100%; border-radius: 2px; }
931 .rd2-lang-files,
932 .rd2-lang-syms { color: var(--text-muted); font-size: 11px; text-align: right; }
933 .rd2-lang-pct { color: var(--text-secondary); font-size: 11px; text-align: right; }
934 .rd2-lang-more { color: var(--text-muted); font-size: 11px; grid-column: 1 / -1; }
935
936 .rd2-panel {
937 background: var(--bg-secondary);
938 border: 1px solid var(--border-default);
939 border-radius: 8px;
940 overflow: hidden;
941
942 &--danger { border-color: var(--color-danger); }
943 &--open .rd2-panel-collapsible { display: block; }
944 &--open .rd2-toggle-arrow { transform: rotate(180deg); }
945 }
946
947 .rd2-panel-head {
948 border-bottom: 1px solid var(--border-default);
949 font-size: 12px;
950 font-weight: 700;
951 color: var(--text-primary);
952 text-transform: uppercase;
953 letter-spacing: 0.04em;
954
955 &--toggle {
956 cursor: pointer;
957 user-select: none;
958 &:hover { background: var(--bg-tertiary); }
959 }
960 }
961
962 .rd2-panel-sub {
963 color: var(--text-muted);
964 font-weight: 400;
965 text-transform: none;
966 letter-spacing: 0;
967 font-size: 11px;
968 }
969
970 .rd2-panel-body { padding: 12px 14px; }
971 .rd2-panel-collapsible { display: none; }
972
973 .rd2-toggle-arrow {
974 margin-left: auto;
975 color: var(--text-muted);
976 font-size: 10px;
977 transition: transform 0.2s;
978 }
979
980 .rd2-badge {
981 font-size: 10px;
982 padding: 1px 7px;
983 border-radius: 10px;
984 background: var(--bg-tertiary);
985 color: var(--text-muted);
986 font-weight: 700;
987
988 &--danger { background: var(--color-danger-bg); color: var(--color-danger); border: 1px solid var(--color-danger); }
989 }
990
991 .rd2-breaking-row {
992 padding: 6px 8px;
993 background: rgba(45,17,23,0.13);
994 border-radius: 4px;
995 margin-bottom: 4px;
996 font-size: 12px;
997
998 code { color: var(--color-danger); font-family: var(--font-mono); }
999 }
1000
1001 .rd2-api-pill {
1002 font-size: 11px;
1003 font-weight: 700;
1004 padding: 1px 8px;
1005 border-radius: 10px;
1006
1007 &--add { background: var(--color-success-bg); color: var(--color-success); border: 1px solid #238636; }
1008 &--del { background: var(--color-danger-bg); color: var(--color-danger); border: 1px solid var(--color-danger); }
1009 &--mod { background: var(--bg-elevated); color: var(--color-purple); border: 1px solid #6e40c9; }
1010 }
1011
1012 .rd2-api-group { margin-bottom: 12px; &:last-child { margin-bottom: 0; } }
1013
1014 .rd2-api-group-label {
1015 font-size: 10px;
1016 font-weight: 700;
1017 text-transform: uppercase;
1018 letter-spacing: 0.06em;
1019 margin-bottom: 5px;
1020 padding-bottom: 4px;
1021 border-bottom: 1px solid var(--border-default);
1022
1023 &--add { color: var(--color-success); }
1024 &--del { color: var(--color-danger); }
1025 &--mod { color: var(--color-purple); }
1026 }
1027
1028 .rd2-api-row {
1029 border-bottom: 1px solid var(--border-default);
1030 text-decoration: none;
1031 color: inherit;
1032 font-size: 12px;
1033
1034 &:last-child { border-bottom: none; }
1035 &:hover { background: var(--bg-tertiary); border-radius: 4px; }
1036 }
1037
1038 .rd2-api-addr {
1039 font-family: var(--font-mono);
1040 font-size: 11px;
1041 color: var(--text-secondary);
1042 white-space: nowrap;
1043 overflow: hidden;
1044 text-overflow: ellipsis;
1045 }
1046
1047 .rd2-api-lang { font-size: 10px; color: var(--text-muted); text-align: right; }
1048 .rd2-api-more {
1049 font-size: 11px;
1050 color: var(--text-muted);
1051 padding-top: 5px;
1052 text-decoration: none;
1053 display: block;
1054 &:hover { color: var(--color-accent); }
1055 }
1056
1057 .rd2-kind-chip {
1058 font-size: 9px;
1059 font-weight: 800;
1060 text-transform: uppercase;
1061 letter-spacing: 0.05em;
1062 padding: 1px 5px;
1063 border-radius: 3px;
1064 background: var(--bg-tertiary);
1065 color: var(--text-muted);
1066 white-space: nowrap;
1067
1068 &--function,
1069 &--method { background: #1c1c3a; color: var(--color-accent); }
1070 &--class { background: #1a2e1a; color: var(--color-success); }
1071 }
1072
1073 .rd2-hotspot-row {
1074 text-decoration: none;
1075 color: inherit;
1076 &:hover { background: var(--bg-tertiary); border-radius: 4px; }
1077 }
1078
1079 .rd2-hotspot-dot { border-radius: 50%; }
1080 .rd2-hotspot-path { color: var(--text-secondary); font-family: var(--font-mono); font-size: 11px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
1081 .rd2-hotspot-track { background: var(--bg-tertiary); border-radius: 3px; overflow: hidden; }
1082 .rd2-hotspot-fill { height: 100%; border-radius: 3px; opacity: 0.7; }
1083 .rd2-hotspot-n { color: var(--text-muted); font-size: 11px; text-align: right; font-variant-numeric: tabular-nums; }
1084
1085 .rd2-struct-row {
1086 border-bottom: 1px solid var(--border-default);
1087 font-size: 12px;
1088 &:last-child { border-bottom: none; }
1089
1090 &--move .rd2-struct-kind { background: #1c2d3a; color: var(--color-accent); }
1091 &--delete .rd2-struct-kind { background: var(--color-danger-bg); color: var(--color-danger); }
1092 }
1093
1094 .rd2-struct-kind {
1095 font-size: 9px;
1096 font-weight: 800;
1097 text-transform: uppercase;
1098 letter-spacing: 0.05em;
1099 padding: 1px 5px;
1100 border-radius: 3px;
1101 background: var(--bg-tertiary);
1102 color: var(--text-muted);
1103 }
1104
1105 .rd2-struct-addr { font-family: var(--font-mono); font-size: 11px; color: var(--text-secondary); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
1106 .rd2-struct-detail { color: var(--text-muted); font-size: 11px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
1107 .rd2-struct-sha { font-family: var(--font-mono); font-size: 10px; color: var(--text-muted); }
1108
1109 .rd2-notes {
1110 font-size: 13px;
1111 line-height: 1.65;
1112 color: var(--text-secondary);
1113
1114 h1, h2, h3 { font-size: 14px; font-weight: 700; margin: 12px 0 6px; color: var(--text-primary); }
1115 p { margin: 0 0 8px; }
1116 code { font-family: var(--font-mono); font-size: 11px; background: var(--bg-tertiary); padding: 1px 4px; border-radius: 3px; }
1117 }
1118
1119 .rd2-asset-row {
1120 border-bottom: 1px solid var(--border-default);
1121 &:last-child { border-bottom: none; }
1122 }
1123
1124 .rd2-asset-name {
1125 font-size: 13px;
1126 color: var(--color-accent);
1127 text-decoration: none;
1128 &:hover { text-decoration: underline; }
1129 }
1130
1131 .rd2-asset-meta { font-size: 11px; color: var(--text-muted); }
1132
1133 .rd2-changelog-pills { display: flex; gap: 5px; align-items: center; }
1134
1135 .rd2-cl-pill {
1136 font-size: 10px;
1137 font-weight: 700;
1138 padding: 1px 7px;
1139 border-radius: 10px;
1140
1141 &--major { background: var(--color-danger-bg); color: var(--color-danger); border: 1px solid var(--color-danger); }
1142 &--minor { background: var(--color-success-bg); color: var(--color-success); border: 1px solid #238636; }
1143 &--patch { background: #0d1f36; color: var(--color-accent); border: 1px solid var(--color-accent-muted); }
1144 }
1145
1146 .rd2-cl-entry {
1147 border-bottom: 1px solid var(--border-default);
1148 &:last-child { border-bottom: none; }
1149 }
1150
1151 .rd2-cl-bump {
1152 background: var(--bg-tertiary);
1153 color: var(--text-muted);
1154 font-size: 10px;
1155 font-weight: 800;
1156
1157 &--major { background: var(--color-danger-bg); color: var(--color-danger); }
1158 &--minor { background: var(--color-success-bg); color: var(--color-success); }
1159 &--patch { background: #0d1f36; color: var(--color-accent); }
1160 }
1161
1162 .rd2-cl-msg { font-size: 12px; color: var(--text-primary); line-height: 1.45; }
1163 .rd2-cl-meta { font-size: 11px; color: var(--text-muted); }
1164 .rd2-bc-chip { font-size: 10px; background: var(--color-danger-bg); color: var(--color-danger); padding: 1px 6px; border-radius: 3px; margin-right: 4px; }
1165
1166 .rd2-card {
1167 background: var(--bg-secondary);
1168 border: 1px solid var(--border-default);
1169 border-radius: 8px;
1170 overflow: hidden;
1171 }
1172
1173 .rd2-card-head { font-size: 11px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.06em; color: var(--text-muted); padding: 8px 12px; border-bottom: 1px solid var(--border-default); }
1174 .rd2-card-body { padding: 12px; }
1175
1176 .rd2-sym-total { font-size: 2rem; font-weight: 800; color: var(--text-primary); line-height: 1; }
1177 .rd2-sym-sub { font-size: 11px; color: var(--text-muted); margin-bottom: 10px; }
1178 .rd2-sym-kind { font-size: 11px; color: var(--text-muted); text-transform: capitalize; }
1179 .rd2-sym-track { background: var(--bg-tertiary); border-radius: 3px; overflow: hidden; }
1180 .rd2-sym-fill { height: 100%; border-radius: 3px; background: var(--color-accent-muted); }
1181 .rd2-sym-n { font-size: 11px; color: var(--text-secondary); text-align: right; font-variant-numeric: tabular-nums; }
1182
1183 .rd2-auth-bar { border-radius: 4px; background: var(--bg-tertiary); }
1184 .rd2-auth-human { background: var(--color-accent); }
1185 .rd2-auth-agent { background: var(--color-purple); }
1186 .rd2-auth-label { flex: 1; color: var(--text-secondary); }
1187 .rd2-auth-n { color: var(--text-primary); font-weight: 700; }
1188 .rd2-auth-pct { color: var(--text-muted); font-size: 11px; }
1189
1190 .rd2-auth-dot {
1191 &--human { background: var(--color-accent); }
1192 &--agent { background: var(--color-purple); }
1193 }
1194
1195 .rd2-agent-chip { font-size: 10px; background: #1e1038; color: var(--color-purple); border: 1px solid #6e40c9; padding: 1px 6px; border-radius: 4px; }
1196 .rd2-model-chip { font-size: 10px; background: var(--bg-tertiary); color: var(--text-muted); padding: 1px 5px; border-radius: 3px; }
1197 .rd2-reviewers { margin-top: 8px; font-size: 11px; color: var(--text-muted); }
1198
1199 .rd2-k { color: var(--text-muted); font-size: 12px; }
1200 .rd2-v { color: var(--text-primary); font-size: 12px; }
1201 .rd2-mono { font-family: var(--font-mono); font-size: 11px; }
1202
1203 .rd2-hash-label { font-size: 10px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.06em; color: var(--text-muted); }
1204
1205 .rd2-hash {
1206 font-family: var(--font-mono);
1207 font-size: 10px;
1208 color: var(--text-muted);
1209 word-break: break-all;
1210 text-decoration: none;
1211 &:hover { color: var(--color-accent); }
1212 }
1213
1214 // ── Tags page (.tag-*) ────────────────────────────────────────────────────────
1215
1216 .tag-page { }
1217
1218 .tag-header h2 { font-size: 20px; font-weight: 700; color: var(--text-primary); }
1219
1220 .tag-row {
1221 border-bottom: 1px solid var(--border-subtle);
1222 &:last-child { border-bottom: none; }
1223 &:hover { background: var(--bg-hover); }
1224 }
1225
1226 .tag-name {
1227 font-family: var(--font-mono);
1228 font-size: 13px;
1229 font-weight: 600;
1230 color: var(--color-accent-link);
1231 }
1232
1233 .tag-title { font-size: 13px; color: var(--text-secondary); }
File History 2 commits
sha256:25d96102cb2d69a038356dff26f4633156da2f1faf98fe0d0e4438ff3f367f12 refactor: rename 0054/0055 migrations to standard convention Sonnet 4.6 minor 21 days ago
sha256:4aed3d8601c8dd3ed37074de35f11f4a9699a0a4b99d43727048fd3f8e6fd13d chore: doc sweep, ignore wrangler build state, misc fixes Sonnet 4.6 minor 23 days ago