1@font-face {
2 font-family: "Atkinson Hyperlegible Next";
3 src: url("/static/fonts/AtkinsonHyperlegibleNext-Regular.woff2") format("woff2");
4 font-weight: 400;
5 font-style: normal;
6 font-display: swap;
7}
8@font-face {
9 font-family: "Atkinson Hyperlegible Next";
10 src: url("/static/fonts/AtkinsonHyperlegibleNext-Bold.woff2") format("woff2");
11 font-weight: 700;
12 font-style: normal;
13 font-display: swap;
14}
15@font-face {
16 font-family: "0xProto";
17 src: url("/static/fonts/0xProto-Regular.woff2") format("woff2");
18 font-weight: 400;
19 font-style: normal;
20 font-display: swap;
21}
22:root {
23 --font-sans: "Atkinson Hyperlegible Next", system-ui, sans-serif;
24 --font-mono: "0xProto", ui-monospace, monospace;
25}
26body { font-family: var(--font-sans); }
27code, pre, .mono { font-family: var(--font-mono); }
28textarea { font-family: var(--font-sans); }
29.skip-link {
30 position: absolute;
31 left: -9999px;
32 z-index: 999;
33 padding: 1em;
34 background: #000;
35 color: #fff;
36}
37.sr-only {
38 position: absolute;
39 width: 1px;
40 height: 1px;
41 padding: 0;
42 margin: -1px;
43 overflow: hidden;
44 clip: rect(0, 0, 0, 0);
45 white-space: nowrap;
46 border: 0;
47}
48.skip-link:focus {
49 left: 50%;
50 transform: translateX(-50%);
51 top: 0;
52}
53.task-title {
54 display: inline;
55 margin-inline-end: var(--space-2);
56}
57.task-title + .badge {
58 vertical-align: text-bottom;
59}
60.card > header:has(.task-title) {
61 margin-block-end: var(--space-6);
62}
63details:has(> .table) {
64 overflow: visible;
65}
66details:has(> .table) > .table {
67 width: auto;
68 min-width: 0;
69}
70[hidden] {
71 display: none !important;
72}
73
74/* FAB */
75.fab-group {
76 position: fixed;
77 bottom: 1.5rem;
78 right: 1.5rem;
79 display: flex;
80 flex-direction: column;
81 align-items: flex-end;
82 gap: 0.5rem;
83 z-index: 100;
84}
85.fab-toggle {
86 width: 3.5rem;
87 height: 3.5rem;
88 border-radius: 50%;
89 display: flex;
90 align-items: center;
91 justify-content: center;
92 padding: 0;
93 cursor: pointer;
94 box-shadow: 0 2px 8px rgba(0,0,0,0.2);
95 transition: transform 0.2s ease;
96}
97.fab-toggle:hover {
98 transform: scale(1.05);
99}
100.fab-toggle .fab-icon-close {
101 display: none;
102}
103.fab-toggle[aria-expanded="true"] .fab-icon-plus {
104 display: none;
105}
106.fab-toggle[aria-expanded="true"] .fab-icon-close {
107 display: block;
108}
109.fab-actions {
110 display: flex;
111 flex-direction: column;
112 align-items: flex-end;
113 gap: 0.5rem;
114}
115.fab-actions[hidden] {
116 display: none !important;
117}
118.fab-action {
119 display: flex;
120 align-items: center;
121 gap: 0.5rem;
122 padding: 0.5rem 1rem;
123 border-radius: 2rem;
124 cursor: pointer;
125 white-space: nowrap;
126 box-shadow: 0 2px 6px rgba(0,0,0,0.15);
127}
128
129/* Stat card border colors */
130.card.border-success {
131 border-color: var(--success);
132}
133.card.border-warning {
134 border-color: var(--warning);
135}