Skip to main content

max / makenotwork

9.4 KB · 524 lines History Blame Raw
1 /* TOAST NOTIFICATIONS */
2
3 .toast-container {
4 position: fixed;
5 bottom: 1.5rem;
6 right: 1.5rem;
7 z-index: 1000;
8 display: flex;
9 flex-direction: column;
10 gap: 0.5rem;
11 }
12
13 .toast {
14 background: var(--primary-dark);
15 color: var(--primary-light);
16 padding: 0.6rem 1rem;
17 font-family: "IBM Plex Mono", monospace;
18 font-size: 0.85rem;
19 box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
20 animation: toast-in 0.3s ease-out;
21 max-width: 300px;
22 }
23
24 .toast-success {
25 background: var(--success);
26 }
27
28 .toast-error {
29 background: var(--error);
30 }
31
32 .toast-warning {
33 background: var(--warning);
34 }
35
36 .toast-info {
37 background: var(--primary-dark);
38 }
39
40 .toast-retry-btn {
41 background: none;
42 border: 1px solid currentColor;
43 color: inherit;
44 font-family: "IBM Plex Mono", monospace;
45 font-size: 0.75rem;
46 font-weight: 600;
47 padding: 0.1rem 0.4rem;
48 margin-left: 0.75rem;
49 cursor: pointer;
50 }
51
52 .toast-retry-btn:hover {
53 background: rgba(255, 255, 255, 0.15);
54 }
55
56 .toast.fade-out {
57 animation: toast-out 0.3s ease-in forwards;
58 }
59
60 @keyframes toast-in {
61 from { transform: translateX(100%); }
62 to { transform: translateX(0); }
63 }
64
65 @keyframes toast-out {
66 from { transform: translateX(0); }
67 to { transform: translateX(100%); }
68 }
69
70 /* SETTINGS PAGE */
71
72 .settings-section {
73 margin-bottom: 2rem;
74 }
75
76 .settings-section h3 {
77 margin-bottom: 0.75rem;
78 }
79
80 .settings-table {
81 width: 100%;
82 border-collapse: collapse;
83 font-size: 0.85rem;
84 font-family: "Lato", sans-serif;
85 margin-bottom: 1rem;
86 }
87
88 .settings-table thead {
89 background: var(--surface-muted);
90 }
91
92 .settings-table th {
93 text-align: left;
94 padding: 0.35rem 0.75rem;
95 font-family: "IBM Plex Mono", monospace;
96 font-size: 0.7rem;
97 font-weight: normal;
98 text-transform: uppercase;
99 letter-spacing: 0.05em;
100 color: var(--text-muted);
101 }
102
103 .settings-table tbody tr {
104 transition: background 0.1s ease;
105 }
106
107 .settings-table tbody tr:nth-child(odd) {
108 background: var(--surface-alt);
109 }
110
111 .settings-table tbody tr:nth-child(even) {
112 background: var(--light-background);
113 }
114
115 .settings-table tbody tr:hover {
116 background: var(--surface-muted);
117 }
118
119 .settings-table td {
120 padding: 0.4rem 0.75rem;
121 border-top: 1px solid var(--border);
122 }
123
124 .settings-cat-name {
125 font-family: "Young Serif", serif;
126 font-size: 1rem;
127 }
128
129 .settings-cat-desc {
130 display: block;
131 font-size: 0.8rem;
132 color: var(--text-muted);
133 margin-top: 0.1rem;
134 }
135
136 .settings-mono {
137 font-family: "IBM Plex Mono", monospace;
138 font-size: 0.8rem;
139 color: var(--text-muted);
140 }
141
142 .settings-actions {
143 white-space: nowrap;
144 }
145
146 /* ACCESSIBILITY */
147
148 .skip-to-main {
149 position: absolute;
150 top: -100px;
151 left: 0;
152 background: var(--primary-dark);
153 color: var(--primary-light);
154 padding: 8px;
155 z-index: 100;
156 transition: top 0.2s ease;
157 }
158
159 .skip-to-main:focus {
160 top: 0;
161 }
162
163 *:focus-visible {
164 outline: 2px solid var(--focus-ring);
165 outline-offset: 2px;
166 }
167
168 /* PAGINATION */
169
170 .pagination {
171 display: flex;
172 justify-content: center;
173 align-items: center;
174 gap: 1rem;
175 padding: 0.75rem 0;
176 font-family: "IBM Plex Mono", monospace;
177 font-size: 0.85rem;
178 }
179
180 .pagination-link {
181 color: var(--detail);
182 text-decoration: none;
183 padding: 0.3rem 0.6rem;
184 border: 1px solid var(--border);
185 background: var(--light-background);
186 transition: background 0.2s ease;
187 }
188
189 .pagination-link:hover {
190 background: var(--surface-muted);
191 text-decoration: none;
192 }
193
194 .pagination-info {
195 color: var(--text-muted);
196 }
197
198 /* ERROR PAGES */
199
200 .error-page {
201 text-align: center;
202 padding: 3rem 1rem;
203 }
204
205 .error-page h2 {
206 font-family: "Young Serif", serif;
207 font-size: 3rem;
208 margin-bottom: 0.5rem;
209 }
210
211 .error-page p {
212 color: var(--text-muted);
213 margin-bottom: 1.5rem;
214 }
215
216 /* EMPTY STATE */
217
218 .empty-state {
219 text-align: center;
220 padding: 1rem;
221 color: var(--text-muted);
222 font-family: "IBM Plex Mono", monospace;
223 }
224
225 /* SITE FOOTER */
226
227 .site-footer {
228 text-align: center;
229 padding: 1rem;
230 margin-top: 1rem;
231 border-top: 1px solid var(--border);
232 font-family: "IBM Plex Mono", monospace;
233 font-size: 0.75rem;
234 color: var(--text-muted);
235 }
236
237 .site-footer a {
238 color: var(--detail);
239 text-decoration: none;
240 }
241
242 .site-footer a:hover {
243 text-decoration: underline;
244 }
245
246 .site-footer-links {
247 margin-bottom: 0.5rem;
248 }
249
250 .site-footer-links a {
251 margin: 0 0.75rem;
252 }
253
254 .footer-sep {
255 margin: 0 0.4rem;
256 }
257
258 /* FOOTNOTES + IMMUTABLE POSTS */
259
260 .post-footnotes {
261 margin-top: 0.75rem;
262 padding-top: 0.5rem;
263 border-top: 1px solid var(--border);
264 }
265
266 .footnote {
267 font-size: 0.85rem;
268 color: var(--text-muted);
269 margin-bottom: 0.5rem;
270 }
271
272 .footnote p {
273 margin: 0.15rem 0;
274 }
275
276 .footnote-prefix {
277 font-family: "IBM Plex Mono", monospace;
278 font-size: 0.75rem;
279 }
280
281 .footnote-form-toggle {
282 margin-top: 0.5rem;
283 }
284
285 .footnote-form-toggle textarea {
286 width: 100%;
287 min-height: 60px;
288 margin-top: 0.5rem;
289 }
290
291 .badge-unread {
292 background: var(--highlight);
293 color: var(--primary-light);
294 font-size: 0.75rem;
295 padding: 0.1rem 0.4rem;
296 border-radius: 3px;
297 font-family: "IBM Plex Mono", monospace;
298 }
299
300 tr.unread .thread-title a {
301 font-weight: 700;
302 }
303
304 tr.unread .thread-title::before {
305 content: "";
306 display: inline-block;
307 width: 6px;
308 height: 6px;
309 background: var(--highlight);
310 border-radius: 50%;
311 margin-right: 0.35rem;
312 vertical-align: middle;
313 }
314
315 /* Mention indicator on thread listings */
316 .badge-mention {
317 color: var(--highlight);
318 font-size: 0.75rem;
319 font-weight: 700;
320 font-family: "IBM Plex Mono", monospace;
321 background: none;
322 border: none;
323 padding: 0;
324 }
325
326 tr.mentioned {
327 border-left: 3px solid var(--highlight);
328 }
329
330 /* Tracking settings */
331 .tracking-settings {
332 display: flex;
333 align-items: center;
334 gap: 0.75rem;
335 margin-bottom: 1rem;
336 font-size: 0.85rem;
337 }
338
339 .toggle-label {
340 display: flex;
341 align-items: center;
342 gap: 0.4rem;
343 cursor: pointer;
344 }
345
346 .toggle-checkbox {
347 accent-color: var(--highlight);
348 }
349
350 /* Info/static page sections */
351 .info-section h3 {
352 margin-top: 1.5rem;
353 margin-bottom: 0.5rem;
354 }
355
356 .info-section ul {
357 padding-left: 1.5rem;
358 margin-bottom: 0.75rem;
359 }
360
361 .info-section li {
362 margin-bottom: 0.3rem;
363 line-height: 1.5;
364 }
365
366 .tag-filter {
367 margin-bottom: 1rem;
368 display: flex;
369 flex-wrap: wrap;
370 align-items: center;
371 gap: 0.35rem;
372 }
373
374 .tag-filter-label {
375 font-family: "IBM Plex Mono", monospace;
376 font-size: 0.8rem;
377 color: var(--text-muted);
378 margin-right: 0.25rem;
379 }
380
381 .tag-chip {
382 display: inline-block;
383 padding: 0.15rem 0.5rem;
384 font-size: 0.8rem;
385 border: 1px solid var(--border);
386 border-radius: 3px;
387 text-decoration: none;
388 color: var(--text-primary);
389 }
390
391 .tag-chip:hover {
392 background: var(--surface-muted);
393 }
394
395 .tag-chip.tag-active {
396 background: var(--primary-dark);
397 color: var(--primary-light);
398 border-color: var(--primary-dark);
399 }
400
401 .tag-badge {
402 display: inline-block;
403 font-size: 0.7rem;
404 padding: 0.05rem 0.35rem;
405 background: var(--surface-muted);
406 border-radius: 2px;
407 margin-left: 0.25rem;
408 vertical-align: middle;
409 font-family: "IBM Plex Mono", monospace;
410 color: var(--text-muted);
411 }
412
413 .tag-fieldset {
414 border: none;
415 padding: 0;
416 }
417
418 .tag-fieldset legend {
419 font-weight: 600;
420 margin-bottom: 0.35rem;
421 }
422
423 .tag-checkbox {
424 display: inline-block;
425 margin-right: 1rem;
426 font-size: 0.9rem;
427 cursor: pointer;
428 }
429
430 .flag-form-toggle {
431 margin-top: 0.5rem;
432 }
433
434 .flag-form {
435 margin-top: 0.5rem;
436 display: flex;
437 flex-direction: column;
438 gap: 0.35rem;
439 }
440
441 .flag-form label {
442 font-size: 0.85rem;
443 cursor: pointer;
444 }
445
446 .flag-form textarea {
447 width: 100%;
448 min-height: 40px;
449 margin-top: 0.25rem;
450 }
451
452 .flag-btn {
453 align-self: flex-start;
454 font-size: 0.8rem;
455 padding: 0.25rem 0.75rem;
456 }
457
458 .post-removed .post-body {
459 color: var(--text-muted);
460 font-style: italic;
461 }
462
463 .quote-attribution {
464 display: block;
465 font-size: 0.8rem;
466 font-family: "IBM Plex Mono", monospace;
467 color: var(--text-muted);
468 margin-top: 0.25rem;
469 font-style: normal;
470 }
471
472 .quote-attribution a {
473 color: var(--text-muted);
474 text-decoration: none;
475 }
476
477 .quote-attribution a:hover {
478 text-decoration: underline;
479 }
480
481 .quote-btn {
482 position: absolute;
483 z-index: 100;
484 background: var(--surface);
485 border: 1px solid var(--border);
486 padding: 0.25rem 0.5rem;
487 font-size: 0.75rem;
488 font-family: "IBM Plex Mono", monospace;
489 cursor: pointer;
490 }
491
492 .quote-btn:hover {
493 background: var(--light-background);
494 }
495
496 /* UTILITY CLASSES */
497
498 .form-inline { display: inline; }
499 .form-inline-row { display: inline-flex; gap: 0.25rem; flex-direction: row; align-items: center; }
500 .btn-secondary { text-decoration: none; }
501 .section-heading { margin-bottom: 1.5rem; }
502 .section-heading-top { margin-top: 1.5rem; }
503 .textarea-short { min-height: 60px; }
504 .textarea-medium { min-height: 80px; }
505 .footnote-btn { margin-top: 0.25rem; }
506 .input-compact { width: 150px; padding: 0.3rem; }
507 .search-form { flex-direction: row; gap: 0.5rem; align-items: flex-end; }
508 .flex-1 { flex: 1; }
509
510 .profile-header { display: flex; align-items: center; gap: 1.25rem; margin-bottom: 1.5rem; }
511 .profile-avatar { width: 64px; height: 64px; border-radius: 50%; object-fit: cover; }
512 .profile-avatar-placeholder {
513 width: 64px; height: 64px; border-radius: 50%; background: var(--border-color);
514 display: flex; align-items: center; justify-content: center;
515 font-size: 1.5rem; font-weight: bold; color: var(--text-muted); flex-shrink: 0;
516 }
517 .profile-name { margin: 0; }
518 .text-muted { color: var(--text-muted); }
519 .text-muted-sm { color: var(--text-muted); font-size: 0.85rem; }
520 .text-muted-md { color: var(--text-muted); font-size: 0.9rem; }
521 .community-desc { margin-bottom: 0.5rem; color: var(--text-muted); }
522 .activity-category { color: var(--text-muted); font-size: 0.85rem; }
523
524