gabriel / musehub public
_repo.scss
396 lines 26.9 KB
Raw
sha256:94ef169c149a452bff7c604ded8b280b19bd477c2dabcb56972780b0b784c7aa Merge 'fix/assignee-sigil-inline' into 'dev' — proposal: As… Human 1 day ago
1 // ─────────────────────────────────────────────────────────────────────────────
2 // Component: Repository pages (rh-*, ft-*, tree-* namespaces)
3 // File: src/scss/components/_repo.scss
4 //
5 // Covers: repo home, file tree, branch bar, commit stream, sidebar,
6 // README viewer, activity sparkline, repo-nav tab strip.
7 // Structural layout lives in pages/_repo-home.scss.
8 //
9 // Tokens: --color-accent, --color-accent-link, --color-success/warning/danger
10 // --color-purple, --color-orange, --text-primary/secondary/muted
11 // --bg-base, --bg-surface, --bg-overlay, --bg-hover, --bg-sunken
12 // --border-default, --border-subtle, --font-mono
13 // ─────────────────────────────────────────────────────────────────────────────
14
15 // ── Repo nav tab strip ────────────────────────────────────────────────────────
16
17 @media (min-width: 768px) {
18 .repo-tabs { overflow-x: visible; -webkit-mask-image: none; mask-image: none; }
19 .repo-tabs-inner { justify-content: space-evenly; padding: 0; }
20 .repo-tab { flex: 1; justify-content: center; flex-shrink: 1; padding-left: var(--space-2); padding-right: var(--space-2); }
21 }
22 @media (max-width: 767px) {
23 .repo-tabs-inner { width: max-content; }
24 .repo-tab { flex-shrink: 0; }
25 }
26
27 // ── Layout ────────────────────────────────────────────────────────────────────
28
29 .rh-main {
30 border-right: 1px solid var(--border-subtle);
31 min-width: 0;
32 }
33
34 // ── Hero ──────────────────────────────────────────────────────────────────────
35
36 .rh-hero {
37 background: transparent;
38 border-bottom: 1px solid var(--border-subtle);
39 }
40 .rh-hero-top { display: flex; align-items: flex-start; gap: var(--space-4); flex-wrap: wrap; }
41 .rh-hero-identity { flex: 1; min-width: 0; }
42 .rh-hero-title { font-size: 20px; font-weight: var(--weight-semibold); line-height: 1.25; margin: 0 0 6px; display: flex; align-items: center; gap: 4px; flex-wrap: wrap; }
43 .rh-hero-owner { font-weight: var(--weight-normal); color: var(--text-muted); &:hover { color: var(--color-accent-link); text-decoration: none; } }
44 .rh-hero-sep { color: var(--text-muted); }
45 .rh-hero-slug { color: var(--text-primary); font-weight: var(--weight-semibold); &:hover { color: var(--color-accent-link); text-decoration: none; } }
46 .rh-vis-badge { font-size: 10px; vertical-align: middle; margin-left: 4px; }
47 .rh-hero-desc { font-size: 14px; color: var(--text-muted); line-height: 1.65; margin: 0 0 var(--space-3); max-width: 640px; }
48 .rh-hero-pills { display: flex; gap: 6px; flex-wrap: wrap; }
49 .rh-pill {
50 display: inline-flex; align-items: center; gap: 4px;
51 font-size: 11px; padding: 2px 8px; border-radius: 999px;
52 border: 1px solid var(--border-subtle); color: var(--text-muted);
53 background: var(--bg-sunken); text-decoration: none;
54 transition: border-color 0.15s, color 0.15s;
55 &:hover { color: var(--text-primary); border-color: var(--color-accent); }
56 }
57 .rh-pill-domain { color: var(--color-accent); border-color: color-mix(in srgb, var(--color-accent) 40%, transparent); }
58 .rh-pill-license, .rh-pill-branch { cursor: default; }
59 .rh-hero-actions { display: flex; gap: var(--space-2); align-items: center; flex-shrink: 0; }
60
61 // ── Branch bar ────────────────────────────────────────────────────────────────
62
63 .rh-branch-bar { display: flex; align-items: center; gap: var(--space-3); border-bottom: 1px solid var(--border-subtle); }
64 .rh-branch-form { display: inline-flex; align-items: center; gap: 5px; }
65 .rh-branch-form-icon { color: var(--color-success); flex-shrink: 0; }
66 .rh-branch-picker { display: inline-flex; align-items: center; gap: 5px; }
67 .rh-branch-select, .rh-ref-select {
68 background: transparent; border: none; color: var(--text-primary);
69 font-size: 12px; font-weight: 500; font-family: inherit; padding: 2px 0; cursor: pointer; outline: none;
70 }
71 .rh-ref-select { padding: 3px 8px; }
72 .rh-branch-meta { display: flex; gap: var(--space-3); margin-left: auto; }
73 .rh-branch-stat { display: inline-flex; align-items: center; gap: 4px; font-size: 11px; color: var(--text-muted); text-decoration: none; &:hover { color: var(--text-primary); } }
74
75 // ── Branch intel strip ────────────────────────────────────────────────────────
76
77 .rh-branch-intel { display: flex; align-items: center; gap: 10px; padding: 0 4px; }
78 .rh-bi-item { display: inline-flex; align-items: center; gap: 4px; font-size: 11px; color: var(--text-muted); white-space: nowrap; text-decoration: none; &:hover { color: var(--text-primary); } }
79 .rh-bi-val { font-weight: 600; color: var(--text-secondary); }
80 .rh-bi-health--good { color: var(--color-success); .rh-bi-val { color: var(--color-success); } }
81 .rh-bi-health--fair { color: var(--color-warning); .rh-bi-val { color: var(--color-warning); } }
82 .rh-bi-health--poor { color: var(--color-danger); .rh-bi-val { color: var(--color-danger); } }
83 .rh-bi-item.rh-bi-hotspot { .rh-bi-val { color: var(--color-orange); } }
84 .rh-bi-item.rh-bi-agent { color: var(--color-accent); .rh-bi-val { color: var(--color-accent); } }
85 .rh-bi-sep { color: var(--border-default); font-size: 10px; }
86
87 // ── File tree card ────────────────────────────────────────────────────────────
88
89 .rh-file-tree-card { border-bottom: 1px solid var(--border-subtle); }
90
91 // ── Latest commit header ──────────────────────────────────────────────────────
92
93 .ft-latest-commit {
94 display: flex; align-items: center; justify-content: space-between; gap: 8px;
95 padding: 8px 12px;
96 background: var(--bg-subtle, var(--bg-card, var(--bg-surface)));
97 border: 1px solid var(--border-subtle);
98 border-radius: 6px 6px 0 0; border-bottom: none; font-size: 12px;
99 }
100 .ft-lc-left { display: flex; align-items: center; gap: 7px; min-width: 0; overflow: hidden; }
101 .ft-lc-avatar { width: 20px; height: 20px; font-size: 10px; flex-shrink: 0; }
102 .ft-lc-author { font-weight: 600; color: var(--text-primary); white-space: nowrap; }
103 .ft-lc-author-link { display: flex; align-items: center; gap: 7px; flex-shrink: 0; text-decoration: none; color: inherit; }
104 .ft-lc-message { color: var(--text-secondary); text-decoration: none; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: clamp(180px, 40vw, 520px); &:hover { color: var(--color-accent); } }
105 .ft-lc-right { display: flex; align-items: center; gap: 10px; flex-shrink: 0; }
106 .ft-lc-sha { font-family: var(--font-mono); font-size: 11px; color: var(--color-accent); text-decoration: none; background: var(--bg-inset); padding: 1px 6px; border-radius: 3px; &:hover { text-decoration: underline; } }
107 .ft-lc-ts { color: var(--text-muted); font-size: 11px; white-space: nowrap; }
108
109 // ── File tree table ───────────────────────────────────────────────────────────
110
111 .file-tree-table {
112 width: 100%; border-collapse: collapse; table-layout: fixed;
113 border: 1px solid var(--border-subtle); border-top: none;
114 border-radius: 0 0 6px 6px; overflow: hidden;
115 }
116 .file-tree-row {
117 border-bottom: 1px solid var(--border-subtle);
118 &:last-child { border-bottom: none; }
119 &:hover { background: var(--bg-hover, #30363d); }
120 td { padding: 6px 0 6px 12px; vertical-align: middle; }
121 td:last-child { padding-right: 12px; }
122 }
123 .file-tree-cell-name { overflow: hidden; min-width: 140px; }
124 .file-tree-link { display: inline-flex; align-items: center; gap: 7px; text-decoration: none; color: var(--text-primary); white-space: nowrap; overflow: hidden; &:hover { color: var(--color-accent); } }
125 .file-tree-name { overflow: hidden; text-overflow: ellipsis; font-size: 13.5px; }
126 .file-icon { display: inline-flex; align-items: center; flex-shrink: 0; }
127 .file-icon-folder, .file-icon-code { color: var(--color-accent); }
128 .file-icon-text, .file-icon-score, .file-icon-default { color: var(--text-muted); }
129 .file-icon-midi, .file-icon-audio { color: var(--color-purple); }
130 .file-icon-data { color: var(--color-warning); }
131 .file-tree-cell-commit { width: 44%; overflow: hidden; padding-right: 8px; }
132 .ft-row-commit-msg { color: var(--text-muted); font-size: 12px; text-decoration: none; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; display: inline; &:hover { color: var(--color-accent); } }
133 .file-tree-cell-provenance { width: 88px; white-space: nowrap; padding-right: 8px; }
134 .ft-prov { display: inline-flex; align-items: center; gap: 3px; font-size: 11px; white-space: nowrap; }
135 .ft-prov-agent, .ft-prov-human { display: inline-flex; align-items: center; gap: 3px; color: var(--text-muted); text-decoration: none; svg { flex-shrink: 0; } }
136 .file-tree-cell-ts { width: 72px; color: var(--text-muted); font-size: 11px; white-space: nowrap; text-align: right; padding-right: 12px; }
137 .ft-row-ts { color: var(--text-muted); }
138
139 // ── Commit type micro-badges ──────────────────────────────────────────────────
140
141 .ft-ct { display: inline-block; font-size: 9px; font-weight: 700; padding: 1px 4px; border-radius: 3px; margin-right: 5px; vertical-align: middle; text-transform: uppercase; letter-spacing: 0.04em; }
142 .ft-ct-feat { background: #1a3a52; color: var(--color-accent); }
143 .ft-ct-fix { background: #2a1f1f; color: var(--color-danger); }
144 .ft-ct-test { background: #1a2e1a; color: var(--color-success); }
145 .ft-ct-docs { background: var(--color-warning-bg); color: var(--color-warning); }
146 .ft-ct-refactor { background: #2a1f3a; color: var(--color-purple); }
147 .ft-ct-perf { background: #2a2010; color: var(--color-orange); }
148 .ft-ct-chore, .ft-ct-build, .ft-ct-ci, .ft-ct-style { background: #1e1e2e; color: var(--text-secondary); }
149
150 // ── Tree path pills ───────────────────────────────────────────────────────────
151
152 .tree-path-pills { display: flex; align-items: center; gap: 4px; margin-left: var(--space-2); font-size: 12px; }
153 .tree-path-sep { color: var(--text-muted); }
154 .tree-path-pill {
155 display: inline-flex; align-items: center; gap: 3px; padding: 1px 6px;
156 border-radius: 4px; text-decoration: none; color: var(--color-accent);
157 &:hover { text-decoration: underline; }
158 &--root { padding: 2px 5px; color: var(--text-muted); &:hover { color: var(--text-primary); } }
159 &--current { color: var(--text-primary); font-weight: 600; pointer-events: none; }
160 }
161
162 // ── Activity sparkline ────────────────────────────────────────────────────────
163
164 .rh-pulse-card { background: transparent; border-bottom: 1px solid var(--border-subtle); display: flex; flex-direction: column; gap: var(--space-2); }
165 .rh-pulse-row { display: flex; align-items: center; gap: var(--space-3); min-height: 28px; }
166 .rh-pulse-label { font-size: 10px; color: var(--text-muted); text-transform: uppercase; letter-spacing: 0.06em; white-space: nowrap; width: 88px; flex-shrink: 0; }
167 .rh-pulse-content { display: flex; align-items: center; gap: var(--space-2); flex: 1; min-width: 0; }
168 .rh-pulse-langs { flex-direction: column; align-items: stretch; gap: 4px; }
169 .rh-pulse-sub { font-size: 10px; color: var(--text-muted); white-space: nowrap; }
170 .rh-sparkline { display: block; overflow: visible; height: 28px; width: 140px; flex-shrink: 0; }
171 .rh-spark-bar { fill: color-mix(in srgb, var(--color-accent) 35%, transparent); transition: fill 0.15s; }
172 .rh-spark-bar:hover, .rh-spark-peak { fill: var(--color-accent); }
173
174 // ── Language breakdown ────────────────────────────────────────────────────────
175
176 .rh-lang-bar { display: flex; height: 4px; border-radius: 999px; overflow: hidden; width: 100%; background: var(--bg-sunken); }
177 .rh-lang-seg { height: 100%; transition: width 0.3s; }
178 .rh-lang-legend { display: flex; gap: 10px; flex-wrap: wrap; margin-top: 5px; }
179 .rh-lang-item { display: flex; align-items: center; gap: 4px; font-size: 11px; color: var(--text-muted); }
180 .rh-lang-dot { width: 8px; height: 8px; border-radius: 50%; flex-shrink: 0; }
181 .rh-lang-ext { color: var(--text-secondary); }
182 .rh-lang-pct { color: var(--text-muted); }
183
184 $lang-colors: (
185 'py': #3776ab, 'js': #f7df1e, 'ts': #3178c6, 'tsx': #61dafb, 'jsx': #61dafb,
186 'go': #00add8, 'rs': #dea584, 'java': #ed8b00, 'rb': #cc342d,
187 'md': #083fa1, 'toml': #9c4221, 'json': #8bc34a, 'yaml': #cb171e, 'yml': #cb171e,
188 'html': #e44d26, 'css': #2965f1, 'scss': #cd6799,
189 'sh': #4eaa25, 'dockerfile': #2496ed, 'sql': #e38c00,
190 'mid': var(--color-accent), 'midi': var(--color-accent),
191 'mp3': #1db954, 'wav': #1db954,
192 );
193 @each $ext, $color in $lang-colors {
194 .rh-lang-seg.rh-lang-#{$ext} { background: #{$color}; }
195 .rh-lang-dot.rh-lang-#{$ext} { background: #{$color}; }
196 }
197
198 // ── README viewer ─────────────────────────────────────────────────────────────
199
200 .rh-readme { border-top: 1px solid var(--border-subtle); }
201 .rh-readme-hd { display: flex; align-items: center; gap: var(--space-2); font-size: 12px; font-weight: 600; color: var(--text-muted); text-transform: uppercase; letter-spacing: 0.06em; }
202 .rh-readme-body {
203 font-size: 13.5px; line-height: 1.65; color: var(--text-primary);
204 h1, h2, h3, h4, h5, h6 {
205 position: relative;
206 scroll-margin-top: calc(var(--sticky-offset) + var(--space-3));
207 .rh-md-anchor {
208 opacity: 0;
209 color: var(--text-muted);
210 text-decoration: none;
211 margin-left: 0.4em;
212 font-weight: 400;
213 font-size: 0.85em;
214 transition: opacity 0.15s;
215 }
216 &:hover .rh-md-anchor { opacity: 1; }
217 }
218 h1, h2 { font-size: 15px; font-weight: 600; margin: 1.2em 0 0.4em; border-bottom: 1px solid var(--border-subtle); padding-bottom: 0.3em; }
219 h3, h4 { font-size: 13px; font-weight: 600; margin: 1em 0 0.3em; }
220 p { margin: 0.5em 0; }
221 code { font-size: 12px; background: var(--bg-inset); padding: 1px 5px; border-radius: 3px; }
222 pre { background: var(--bg-inset); padding: var(--space-3); border-radius: 6px; overflow-x: auto; margin: 0.8em 0; }
223 pre code { background: none; padding: 0; }
224 a { color: var(--color-accent); }
225 ul, ol { padding-left: 1.4em; margin: 0.5em 0; }
226 blockquote { border-left: 3px solid var(--border-subtle); margin: 0.5em 0; padding-left: 0.8em; color: var(--text-muted); }
227 img { max-width: 100%; height: auto; }
228 }
229 .rh-readme-badges { display: flex; align-items: center; gap: 5px; margin-left: auto; }
230 .rh-readme-badge { font-size: 10px; font-weight: 600; padding: 2px 6px; border-radius: 3px; text-decoration: none; white-space: nowrap; background: var(--bg-inset); color: var(--text-muted); }
231 .rh-readme-badge--good { color: var(--color-success); }
232 .rh-readme-badge--fair { color: var(--color-warning); }
233 .rh-readme-badge--poor { color: var(--color-danger); }
234 .rh-readme-badge--agent { color: var(--color-accent); }
235 .rh-readme-agent-note { display: inline-flex; align-items: center; gap: 3px; font-size: 10px; color: var(--color-accent); font-weight: 400; text-transform: none; letter-spacing: 0; margin-left: 8px; }
236
237 // ── About / sidebar pills ─────────────────────────────────────────────────────
238
239 .rh-about-desc { font-size: 12.5px; color: var(--text-secondary); line-height: 1.5; margin-bottom: var(--space-2); }
240 .rh-about-pills { display: flex; flex-direction: column; gap: 4px; }
241 .rh-about-pill { display: flex; align-items: center; gap: 6px; font-size: 11.5px; color: var(--text-muted); a { color: var(--color-accent); text-decoration: none; &:hover { text-decoration: underline; } } }
242
243 // ── Commit activity stream (sidebar) ─────────────────────────────────────────
244
245 .rh-act-see-all { margin-left: auto; font-size: 10px; font-weight: 400; text-transform: none; letter-spacing: 0; color: var(--color-accent); text-decoration: none; &:hover { text-decoration: underline; } }
246 .rh-act-stream { display: flex; flex-direction: column; gap: 0; }
247 .rh-act-row { padding: 7px 0; border-bottom: 1px solid var(--border-subtle); &:last-child { border-bottom: none; } }
248 .rh-act-top { display: flex; align-items: baseline; gap: 5px; flex-wrap: nowrap; overflow: hidden; margin-bottom: 3px; }
249 .rh-act-msg { font-size: 12px; color: var(--text-secondary); text-decoration: none; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; min-width: 0; flex: 1; &:hover { color: var(--color-accent); } }
250 .rh-act-sv { font-size: 9px; font-weight: 700; white-space: nowrap; flex-shrink: 0; padding: 1px 4px; border-radius: 3px; }
251 .rh-act-sv--major { background: #2a1f1f; color: var(--color-danger); }
252 .rh-act-sv--minor { background: var(--color-warning-bg); color: var(--color-warning); }
253 .rh-act-sv--patch { background: #1a3a52; color: var(--color-accent); }
254 .rh-act-breaking { font-size: 10px; color: var(--color-danger); flex-shrink: 0; }
255 .rh-act-meta { display: flex; align-items: center; gap: 5px; font-size: 10.5px; color: var(--text-muted); }
256 .rh-act-agent-icon { color: var(--color-accent); flex-shrink: 0; }
257 .rh-act-author { white-space: nowrap; }
258 .rh-act-author--agent { color: var(--color-accent); }
259 .rh-act-ts { margin-left: auto; white-space: nowrap; }
260
261 // ── Avatar ────────────────────────────────────────────────────────────────────
262
263 .rh-avatar { width: 26px; height: 26px; border-radius: 50%; flex-shrink: 0; font-size: 11px; font-weight: 700; display: flex; align-items: center; justify-content: center; color: var(--bg-base); }
264 .rh-avatar-0 { background: #6366f1; }
265 .rh-avatar-1 { background: #0ea5e9; }
266 .rh-avatar-2 { background: #10b981; }
267 .rh-avatar-3 { background: #f59e0b; }
268 .rh-avatar-4 { background: var(--color-danger); }
269 .rh-avatar-5 { background: var(--color-purple); }
270 .rh-avatar-bot { background: var(--bg-sunken); color: var(--text-muted); border: 1px solid var(--border-subtle); }
271
272 // ── Commit type + semver badges ───────────────────────────────────────────────
273
274 .rh-commit-type { display: inline-flex; align-items: center; gap: 3px; font-size: 10px; font-weight: 600; padding: 1px 6px; border-radius: 4px; font-family: var(--font-mono); text-transform: lowercase; white-space: nowrap; letter-spacing: 0.02em; }
275 .rh-ct-feat { background: color-mix(in srgb, #22c55e 15%, transparent); color: #22c55e; }
276 .rh-ct-fix { background: color-mix(in srgb, var(--color-danger) 15%, transparent); color: var(--color-danger); }
277 .rh-ct-docs { background: color-mix(in srgb, var(--color-accent) 15%, transparent); color: var(--color-accent); }
278 .rh-ct-test { background: color-mix(in srgb, var(--color-purple) 15%, transparent); color: var(--color-purple); }
279 .rh-ct-refactor { background: color-mix(in srgb, #f59e0b 15%, transparent); color: #f59e0b; }
280 .rh-ct-perf { background: color-mix(in srgb, #06b6d4 15%, transparent); color: #06b6d4; }
281 .rh-ct-chore { background: color-mix(in srgb, #6b7280 20%, transparent); color: #9ca3af; }
282 .rh-semver-badge { display: inline-flex; align-items: center; font-size: 9px; font-weight: 700; padding: 1px 5px; border-radius: 4px; text-transform: uppercase; letter-spacing: 0.06em; white-space: nowrap; }
283 .rh-sv-patch { background: color-mix(in srgb, #10b981 12%, transparent); color: #10b981; border: 1px solid color-mix(in srgb, #10b981 30%, transparent); }
284 .rh-sv-minor { background: color-mix(in srgb, var(--color-accent) 12%, transparent); color: var(--color-accent); border: 1px solid color-mix(in srgb, var(--color-accent) 30%, transparent); }
285 .rh-sv-major { background: color-mix(in srgb, #f59e0b 12%, transparent); color: #f59e0b; border: 1px solid color-mix(in srgb, #f59e0b 30%, transparent); }
286 .rh-sv-breaking { background: color-mix(in srgb, var(--color-danger) 15%, transparent); color: var(--color-danger); border: 1px solid color-mix(in srgb, var(--color-danger) 35%, transparent); }
287
288 // ── Sidebar ───────────────────────────────────────────────────────────────────
289
290 .rh-sidebar {
291 display: flex; flex-direction: column;
292 overflow-y: auto; scrollbar-width: none;
293 &::-webkit-scrollbar { display: none; }
294 }
295 .rh-sidebar-section { border-bottom: 1px solid var(--border-subtle); &:last-child { border-bottom: none; } }
296 .rh-sidebar-hd { display: flex; align-items: center; justify-content: space-between; margin-bottom: var(--space-2); }
297 .rh-domain-badge { display: inline-flex; align-items: center; gap: 3px; font-size: 10px; color: var(--color-accent); background: color-mix(in srgb, var(--color-accent) 10%, transparent); padding: 1px 6px; border-radius: 999px; }
298 .rh-props-empty { font-size: 12px; color: var(--text-muted); margin: var(--space-2) 0 0; }
299 .rh-dim-row { display: grid; grid-template-columns: repeat(4, 1fr); border: 1px solid var(--border-subtle); border-radius: var(--radius-base); overflow: hidden; margin-bottom: var(--space-2); }
300 .rh-dim-item { padding: 6px 4px; display: flex; flex-direction: column; align-items: center; text-align: center; gap: 1px; border-right: 1px solid var(--border-subtle); &:last-child { border-right: none; } }
301 .rh-dim-val { font-size: 13px; font-weight: var(--weight-semibold); color: var(--text-primary); line-height: 1.1; font-variant-numeric: tabular-nums; }
302 .rh-dim-lbl { font-size: 9px; color: var(--text-muted); text-transform: uppercase; letter-spacing: 0.04em; }
303
304 // ── Clone inputs (MCP variant overrides) ──────────────────────────────────────
305
306 .clone-input-wrap--mcp { margin-top: 6px; }
307 .clone-input--mcp { font-size: 10.5px; color: var(--color-accent); }
308
309 // ── Pulse sidebar variant overrides ───────────────────────────────────────────
310
311 .rh-pulse-row--sidebar {
312 display: flex; flex-direction: column; gap: 6px;
313 .rh-pulse-content { flex: unset; width: 100%; }
314 svg.rh-spark { width: 100%; height: 32px; }
315 }
316 .rh-pulse-row--top-gap { margin-top: 10px; }
317 .rh-pulse-langs--sidebar { flex-wrap: wrap; gap: 6px 10px; }
318
319 // ── Repo home health progress bar ─────────────────────────────────────────────
320
321 .rh-health-bar-wrap {
322 display: block;
323 text-decoration: none;
324 padding: 10px 0 6px;
325 border-radius: 6px;
326 transition: opacity 0.15s;
327 &:hover { opacity: 0.85; }
328 }
329 .rh-health-bar-hd { display: flex; align-items: baseline; justify-content: space-between; margin-bottom: 6px; }
330 .rh-health-bar-lbl { font-size: 10px; font-weight: 700; letter-spacing: 0.08em; text-transform: uppercase; color: var(--text-muted); }
331 .rh-health-bar-score { font-size: 11px; font-weight: 600; font-family: var(--font-mono); }
332
333 .rh-health-bar--good .rh-health-bar-score { color: var(--color-success); }
334 .rh-health-bar--fair .rh-health-bar-score { color: var(--color-warning); }
335 .rh-health-bar--poor .rh-health-bar-score { color: var(--color-danger); }
336
337 .rh-health-bar-track { width: 100%; height: 5px; background: var(--bg-inset); border-radius: 3px; overflow: hidden; }
338 .rh-health-bar-fill { height: 100%; border-radius: 3px; transition: width 0.4s ease; }
339
340 .rh-health-bar--good .rh-health-bar-fill { background: var(--color-success); }
341 .rh-health-bar--fair .rh-health-bar-fill { background: var(--color-warning); }
342 .rh-health-bar--poor .rh-health-bar-fill { background: var(--color-danger); }
343
344 // ── Repo home health mini-gauge ───────────────────────────────────────────────
345
346 .rh-health-mini {
347 display: flex;
348 align-items: center;
349 gap: 0.6rem;
350 margin-top: 0.75rem;
351 padding: 0.6rem 0.75rem;
352 background: var(--bg-overlay);
353 border: 1px solid var(--border-default);
354 border-radius: 6px;
355 text-decoration: none;
356 transition: border-color 0.15s, background 0.15s;
357
358 &:hover {
359 border-color: var(--color-accent);
360 background: var(--bg-hover);
361 }
362 }
363
364 .rh-health-svg { width: 40px; height: 40px; flex-shrink: 0; }
365 .rh-health-track { fill: none; stroke: var(--bg-surface); stroke-width: 6; }
366
367 .rh-health-fill {
368 fill: none;
369 stroke-width: 6;
370 stroke-linecap: round;
371
372 &--excellent { stroke: var(--color-success); filter: drop-shadow(0 0 4px color-mix(in srgb, var(--color-success) 50%, transparent)); }
373 &--good { stroke: var(--color-success); opacity: 0.75; }
374 &--fair { stroke: var(--color-warning); }
375 &--poor { stroke: var(--color-danger); }
376 &--critical { stroke: var(--color-danger-critical); filter: drop-shadow(0 0 4px color-mix(in srgb, var(--color-danger-critical) 50%, transparent)); }
377 }
378
379 .rh-health-num { font-family: var(--font-mono); font-size: 0.9rem; font-weight: 700; fill: var(--text-primary); }
380
381 .rh-health-meta { display: flex; flex-direction: column; gap: 1px; }
382
383 .rh-health-score-lbl {
384 font-family: var(--font-mono);
385 font-size: 0.72rem;
386 font-weight: 700;
387 letter-spacing: 0.04em;
388
389 &--excellent { color: var(--color-success); }
390 &--good { color: var(--color-success); opacity: 0.75; }
391 &--fair { color: var(--color-warning); }
392 &--poor { color: var(--color-danger); }
393 &--critical { color: var(--color-danger-critical); }
394 }
395
396 .rh-health-sub-lbl { font-size: 0.65rem; color: var(--text-muted); text-transform: uppercase; letter-spacing: 0.06em; }
File History 3 commits
sha256:94ef169c149a452bff7c604ded8b280b19bd477c2dabcb56972780b0b784c7aa Merge 'fix/assignee-sigil-inline' into 'dev' — proposal: As… Human 1 day ago
sha256:6b1949fc2797ca4c1936a637a4cbfec828ef56cf52398a2e74ca3c4f494e728f fix: use wire_bytes not mpack_bytes_raw in compute_object_b… Sonnet 4.6 patch 9 days ago
sha256:4aed3d8601c8dd3ed37074de35f11f4a9699a0a4b99d43727048fd3f8e6fd13d chore: doc sweep, ignore wrangler build state, misc fixes Sonnet 4.6 minor 12 days ago