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
75@layer components {
76  /* Repo list */
77  .repo-list { display: flex; flex-direction: column; }
78
79  .repo-card {
80    display: flex;
81    flex-direction: column;
82    gap: .5rem;
83    padding: 1rem 1.25rem;
84    text-decoration: none;
85    color: inherit;
86  }
87
88  .repo-card:hover { background: var(--highlight); }
89  .repo-name { font-size: 1.1rem; font-weight: 600; color: var(--emphasized); }
90  .repo-desc { color: var(--primary); }
91  .repo-meta { display: flex; justify-content: space-between; color: var(--secondary); }
92
93  /* Repo nav items */
94  .repo-nav-item {
95    display: flex;
96    align-items: center;
97    gap: 1rem;
98    padding: 0 1rem;
99    min-height: 50px;
100    text-decoration: none;
101    color: var(--primary);
102    font-family: var(--font-mono);
103    border-top: 1px solid var(--secondary);
104    transition: background-color .15s ease-out;
105  }
106
107  .repo-nav-item + .repo-nav-item { border-top: 1px solid var(--highlight); }
108  .repo-nav-item:last-child { border-bottom: 1px solid var(--secondary); }
109  .repo-nav-item:active { background-color: var(--highlight); transition: none; }
110  .repo-nav-item:hover > span:first-of-type { text-decoration: underline; text-underline-offset: 3px; }
111  .repo-nav-item-meta { margin-left: auto; color: var(--secondary); }
112  .repo-nav-item-arrow { color: var(--secondary); }
113
114  /* Tag info */
115  .tag-info {
116    display: grid;
117    grid-template-columns: max-content 1fr;
118    gap: .2rem 1.5rem;
119    font-family: var(--font-mono);
120    margin: 1.5rem 1rem 1.5rem;
121  }
122
123  .tag-info dt { color: var(--secondary); }
124  .tag-info dd { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; margin: 0; }
125  .tag-info a { color: var(--primary); text-decoration: none; }
126  .tag-info a:hover { text-decoration: underline; text-underline-offset: 3px; }
127
128  .tag-message {
129    font-family: var(--font-mono);
130    padding: 1rem;
131    margin: 0 1rem 1rem;
132    background: var(--highlight);
133    border-radius: 6px;
134    white-space: pre-wrap;
135    color: var(--primary);
136  }
137
138  /* Branch / tag lists */
139  .branch-list, .tag-list { display: flex; flex-direction: column; }
140
141  .branch-row, .tag-row {
142    display: flex;
143    justify-content: space-between;
144    align-items: baseline;
145    padding: .75rem 1rem;
146    text-decoration: none;
147    color: inherit;
148    font-family: var(--font-mono);
149  }
150
151  .branch-row:hover, .tag-row:hover { background: var(--highlight); }
152
153  .branch-name, .tag-name {
154    overflow: hidden;
155    text-overflow: ellipsis;
156    white-space: nowrap;
157    min-width: 0;
158  }
159
160  .branch-default { color: var(--secondary); margin-right: 1rem; }
161
162  .branch-date, .tag-date {
163    display: flex;
164    align-items: baseline;
165    flex-shrink: 0;
166    color: var(--secondary);
167    padding-left: 1rem;
168  }
169
170  /* Commit log */
171  .commit-log { display: flex; flex-direction: column; }
172
173  .commit-row {
174    display: grid;
175    grid-template-columns: 5rem 1fr;
176    grid-template-rows: auto auto;
177    gap: .15rem 1rem;
178    padding: .75rem 1rem;
179    text-decoration: none;
180    color: inherit;
181    font-family: var(--font-mono);
182  }
183
184  .commit-row:hover { background: var(--highlight); }
185  .commit-sha { color: var(--secondary); grid-row: 1; }
186
187  .commit-message {
188    color: var(--primary);
189    grid-row: 1;
190    overflow: hidden;
191    text-overflow: ellipsis;
192    white-space: nowrap;
193  }
194
195  .commit-meta {
196    display: flex;
197    justify-content: space-between;
198    color: var(--secondary);
199    grid-column: 2;
200    grid-row: 2;
201    min-width: 0;
202  }
203
204  .commit-meta span:first-child {
205    overflow: hidden;
206    text-overflow: ellipsis;
207    white-space: nowrap;
208    min-width: 0;
209  }
210
211  .commit-meta span:last-child { flex-shrink: 0; padding-left: 1rem; }
212
213  /* Pagination */
214  .pagination { display: flex; justify-content: space-between; padding: .75rem 1rem; }
215  .pagination a { color: var(--secondary); text-decoration: none; }
216  .pagination a:hover { color: var(--primary); }
217
218  /* Details / summary */
219  details { border-top: 1px solid var(--highlight); }
220  details:first-of-type { border-top: 1px solid var(--secondary); }
221  details:last-of-type { border-bottom: 1px solid var(--highlight); }
222
223  summary {
224    cursor: pointer;
225    display: flex;
226    align-items: center;
227    gap: 1rem;
228    padding: 0 1rem;
229    min-height: 50px;
230    font-family: var(--font-mono);
231    background: var(--highlight);
232  }
233
234  .summary-icon { width: 1rem; height: 1rem; flex-shrink: 0; }
235
236  details[open] summary { color: var(--emphasized); }
237  summary::after { content: '[+]'; color: var(--secondary); }
238  summary:not(:has(span))::after { margin-left: auto; }
239  details[open] summary::after { content: '[−]'; }
240  summary span { color: var(--secondary); margin-left: auto; }
241
242  details > *:not(summary) { padding: 0 1rem .75rem; margin-bottom: 0; }
243  details > ul { list-style: none; padding: 0; margin: 0; }
244  details ul li + li { border-top: 1px solid var(--highlight); }
245
246  details ul li {
247    display: flex;
248    align-items: center;
249    gap: 1rem;
250    min-height: 50px;
251    padding: 0 1rem;
252    color: var(--secondary);
253    font-family: var(--font-mono);
254  }
255
256  details ul li:has(a),
257  details ul li:has(button) { padding: 0; }
258
259  details ul li a,
260  details ul li button {
261    display: flex;
262    align-items: center;
263    gap: 1rem;
264    padding: 0 1rem;
265    min-height: 50px;
266    width: 100%;
267    text-align: left;
268    text-decoration: none;
269    color: inherit;
270    background: transparent;
271    border: none;
272    cursor: pointer;
273    font-family: var(--font-mono);
274    font-size: 1rem;
275    transition: background-color .15s ease-out;
276  }
277
278  details ul li a:active,
279  details ul li button:active { background-color: var(--highlight); transition: none; }
280
281  details ul li a:hover span:first-child,
282  details ul li button:hover span:first-child { text-decoration: underline; text-underline-offset: 3px; }
283
284  /* First span grows; truncates on overflow */
285  details ul li a span:first-child,
286  details ul li button span:first-child {
287    flex: 1;
288    min-width: 0;
289    overflow: hidden;
290    text-overflow: ellipsis;
291    white-space: nowrap;
292    color: var(--primary);
293  }
294
295  /* Clone rows: URL animates on copy */
296  details ul li button span:first-child { transition: opacity .1s; }
297  details ul li button span:nth-child(2) {
298    flex-shrink: 0;
299    min-width: 4rem;
300    text-align: right;
301    color: var(--secondary);
302  }
303
304  /* Branch/tag rows: remaining spans fixed right */
305  details ul li a span:not(:first-child) { flex-shrink: 0; color: var(--secondary); }
306}
307
308@layer accents {
309  .branch-name { color: var(--blue); }
310  .tag-name { color: var(--violet); }
311  .archive-link { color: var(--orange); }
312  .commit-sha { color: var(--cyan); }
313}