Parent
[>]
1@layer reset, layout, components, accents; 2 3@layer reset { 4 *, *::before, *::after { box-sizing: border-box; } 5 html { overflow-x: clip; } 6} 7 8@layer layout { 9 body { 10 font-family: var(--font-body); 11 max-width: 860px; 12 margin: 0 auto; 13 padding: 0; 14 background: var(--background); 15 color: var(--primary); 16 } 17 18 header { 19 padding: .75rem 1rem; 20 margin-bottom: .75rem; 21 } 22 23 header ul { 24 list-style: none; 25 margin: 0; 26 padding: 0; 27 display: flex; 28 align-items: center; 29 gap: .25rem; 30 font-size: 1.2rem; 31 min-width: 0; 32 } 33 34 header li { 35 white-space: nowrap; 36 overflow: hidden; 37 text-overflow: ellipsis; 38 min-width: 0; 39 } 40 41 header li:first-child { flex-shrink: 0; } 42 header li:last-child { flex-shrink: 1; } 43 44 header li + li::before { 45 content: '/'; 46 margin-right: .25rem; 47 color: var(--secondary); 48 } 49 50 header a { 51 color: var(--primary); 52 text-decoration: none; 53 } 54 55 header a:hover { 56 color: var(--emphasized); 57 text-decoration: underline; 58 text-underline-offset: 3px; 59 } 60 61 main > h1, main > p { padding-inline: 1rem; } 62 main > h1 { margin-bottom: .75rem; } 63 main > p { margin-top: 0; } 64 main > article { padding: 0 1rem; } 65 66 footer { 67 padding: 1rem; 68 margin-top: 2rem; 69 color: var(--secondary); 70 font-size: .875rem; 71 text-align: center; 72 } 73 74 footer a { color: var(--blue); text-decoration: none; } 75 footer a:hover { text-decoration: underline; text-underline-offset: 3px; } 76} 77 78@layer components { 79 /* Repo list */ 80 .repo-list { display: flex; flex-direction: column; } 81 82 .repo-card { 83 display: flex; 84 flex-direction: column; 85 gap: .5rem; 86 padding: 1rem 1.25rem; 87 text-decoration: none; 88 color: inherit; 89 } 90 91 .repo-card:hover { background: var(--highlight); } 92 .repo-name { font-size: 1.1rem; font-weight: 600; color: var(--emphasized); } 93 .repo-desc { color: var(--primary); } 94 .repo-meta { display: flex; justify-content: space-between; color: var(--secondary); } 95 96 /* Repo nav items */ 97 .repo-nav-item { 98 display: flex; 99 align-items: center; 100 gap: 1rem; 101 padding: 0 1rem; 102 min-height: 50px; 103 text-decoration: none; 104 color: var(--primary); 105 font-family: var(--font-mono); 106 border-top: 1px solid var(--secondary); 107 } 108 109 .repo-nav-item + .repo-nav-item { border-top: 1px solid var(--highlight); } 110 .repo-nav-item:last-child { border-bottom: 1px solid var(--secondary); } 111 .repo-nav-item:active { background-color: var(--highlight); } 112 .repo-nav-item:hover > span:first-of-type { text-decoration: underline; text-underline-offset: 3px; } 113 .repo-nav-item-meta { margin-left: auto; color: var(--secondary); } 114 .repo-nav-item-arrow { color: var(--secondary); } 115 116 /* Tag info */ 117 .tag-info { 118 display: grid; 119 grid-template-columns: max-content 1fr; 120 gap: .2rem 1.5rem; 121 font-family: var(--font-mono); 122 margin: 1.5rem 1rem 1.5rem; 123 } 124 125 .tag-info dt { color: var(--secondary); } 126 .tag-info dd { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; margin: 0; } 127 .tag-info a { color: var(--primary); text-decoration: none; } 128 .tag-info a:hover { text-decoration: underline; text-underline-offset: 3px; } 129 130 .tag-message { 131 font-family: var(--font-mono); 132 padding: 1rem; 133 margin: 0 1rem 1rem; 134 background: var(--highlight); 135 border-radius: 6px; 136 white-space: pre-wrap; 137 color: var(--primary); 138 } 139 140 /* Branch / tag lists */ 141 .branch-list, .tag-list { display: flex; flex-direction: column; } 142 143 .branch-row, .tag-row { 144 display: flex; 145 justify-content: space-between; 146 align-items: baseline; 147 padding: .75rem 1rem; 148 text-decoration: none; 149 color: inherit; 150 font-family: var(--font-mono); 151 } 152 153 .branch-row:hover, .tag-row:hover { background: var(--highlight); } 154 155 .branch-name, .tag-name { 156 overflow: hidden; 157 text-overflow: ellipsis; 158 white-space: nowrap; 159 min-width: 0; 160 } 161 162 .branch-default { color: var(--secondary); margin-right: 1rem; } 163 164 .branch-date, .tag-date { 165 display: flex; 166 align-items: baseline; 167 flex-shrink: 0; 168 color: var(--secondary); 169 padding-left: 1rem; 170 } 171 172 /* Commit log */ 173 .commit-log { display: flex; flex-direction: column; } 174 175 .commit-row { 176 display: grid; 177 grid-template-columns: 5rem 1fr; 178 grid-template-rows: auto auto; 179 gap: .15rem 1rem; 180 padding: .75rem 1rem; 181 text-decoration: none; 182 color: inherit; 183 font-family: var(--font-mono); 184 } 185 186 .commit-row:hover { background: var(--highlight); } 187 .commit-sha { color: var(--secondary); grid-row: 1; } 188 189 .commit-message { 190 color: var(--primary); 191 grid-row: 1; 192 overflow: hidden; 193 text-overflow: ellipsis; 194 white-space: nowrap; 195 } 196 197 .commit-meta { 198 display: flex; 199 justify-content: space-between; 200 color: var(--secondary); 201 grid-column: 2; 202 grid-row: 2; 203 min-width: 0; 204 } 205 206 .commit-meta span:first-child { 207 overflow: hidden; 208 text-overflow: ellipsis; 209 white-space: nowrap; 210 min-width: 0; 211 } 212 213 .commit-meta span:last-child { flex-shrink: 0; padding-left: 1rem; } 214 215 /* Commit graph layout */ 216 .commit-graph-layout { 217 display: flex; 218 align-items: flex-start; 219 overflow-x: auto; 220 } 221 222 .commit-graph-svg { 223 flex-shrink: 0; 224 max-width: 12rem; 225 overflow-x: auto; 226 } 227 228 .commit-graph-svg > svg { 229 display: block; 230 } 231 232 .commit-graph-rows { 233 flex: 1; 234 display: flex; 235 flex-direction: column; 236 min-width: 0; 237 } 238 239 .commit-graph-row { 240 height: 40px; 241 display: flex; 242 align-items: center; 243 gap: 1rem; 244 padding-right: 1rem; 245 min-width: max-content; 246 text-decoration: none; 247 color: inherit; 248 font-family: var(--font-mono); 249 } 250 251 .commit-graph-row:hover { background: var(--highlight); } 252 253 .commit-graph-row .commit-message { 254 flex: 1; 255 overflow: hidden; 256 text-overflow: ellipsis; 257 white-space: nowrap; 258 } 259 260 .commit-date { 261 flex-shrink: 0; 262 color: var(--secondary); 263 } 264 265 /* Pagination */ 266 .pagination { display: flex; justify-content: space-between; padding: .75rem 1rem; font-size: 1rem; font-family: var(--font-mono); } 267 .pagination a, .pagination span { flex: 1; text-align: center; } 268 .pagination a { color: var(--secondary); text-decoration: none; } 269 .pagination a:hover span:not(.pagination-sym) { text-decoration: underline; text-underline-offset: 3px; } 270 271 /* Details / summary */ 272 details { border-top: 1px solid var(--highlight); } 273 details:first-of-type { border-top: 1px solid var(--secondary); } 274 details:last-of-type { border-bottom: 1px solid var(--highlight); } 275 276 summary { 277 cursor: pointer; 278 display: flex; 279 align-items: center; 280 gap: 1rem; 281 padding: 0 1rem; 282 min-height: 50px; 283 font-family: var(--font-mono); 284 background: var(--highlight); 285 } 286 287 .summary-icon { width: 1rem; height: 1rem; flex-shrink: 0; } 288 289 details[open] summary { color: var(--emphasized); } 290 summary::after { content: '[+]'; color: var(--secondary); } 291 summary:not(:has(span))::after { margin-left: auto; } 292 details[open] summary::after { content: '[−]'; } 293 summary span { color: var(--secondary); margin-left: auto; } 294 295 details > *:not(summary) { padding: 0 1rem .75rem; margin-bottom: 0; } 296 details > ul { list-style: none; padding: 0; margin: 0; } 297 details ul li + li { border-top: 1px solid var(--highlight); } 298 299 details ul li { 300 display: flex; 301 align-items: center; 302 gap: 1rem; 303 min-height: 50px; 304 padding: 0 1rem; 305 color: var(--secondary); 306 font-family: var(--font-mono); 307 } 308 309 details ul li:has(a), 310 details ul li:has(button) { padding: 0; } 311 312 details ul li a, 313 details ul li button { 314 display: flex; 315 align-items: center; 316 gap: 1rem; 317 padding: 0 1rem; 318 min-height: 50px; 319 width: 100%; 320 text-align: left; 321 text-decoration: none; 322 color: inherit; 323 background: transparent; 324 border: none; 325 cursor: pointer; 326 font-family: var(--font-mono); 327 font-size: 1rem; 328 } 329 330 details ul li a:active { background-color: var(--highlight); } 331 332 details ul li a:hover span:first-child, 333 details ul li button:hover span:first-child { text-decoration: underline; text-underline-offset: 3px; } 334 335 details ul li a.see-all span:first-child { color: var(--secondary); } 336 337 /* First span grows; truncates on overflow */ 338 details ul li a span:first-child, 339 details ul li button span:first-child { 340 flex: 1; 341 min-width: 0; 342 overflow: hidden; 343 text-overflow: ellipsis; 344 white-space: nowrap; 345 color: var(--primary); 346 } 347 348 /* Clone rows: URL animates on copy */ 349 details ul li button span:first-child { transition: opacity .1s; } 350 details ul li button span:nth-child(2) { 351 flex-shrink: 0; 352 min-width: 4rem; 353 text-align: right; 354 color: var(--secondary); 355 } 356 357 /* Branch/tag rows: remaining spans fixed right */ 358 details ul li a span:not(:first-child) { flex-shrink: 0; color: var(--secondary); } 359} 360 361@layer accents { 362 .branch-name { color: var(--blue); } 363 .tag-name { color: var(--violet); } 364 .archive-link { color: var(--orange); } 365 .commit-sha { color: var(--cyan); } 366}