_repo.scss
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