summaryrefslogtreecommitdiffstats
path: root/templates/_styles.html
diff options
context:
space:
mode:
authorGravatar Tom van der Lee <tom@vanderlee.io>2026-07-30 16:03:32 +0200
committerGravatar Tom van der Lee <tom@vanderlee.io>2026-07-30 16:03:32 +0200
commit2d22158dd95f76399f5716d556be60c77da04a46 (patch)
tree15fca3adae0f44674fe06bc141879804659c3664 /templates/_styles.html
parentaa56bc05285981d57c5adb2cee3c4e898fb2a702 (diff)
downloadserver-v3.tar.gz
server-v3.tar.bz2
server-v3.zip
Admin uiv3
Diffstat (limited to 'templates/_styles.html')
-rw-r--r--templates/_styles.html539
1 files changed, 539 insertions, 0 deletions
diff --git a/templates/_styles.html b/templates/_styles.html
new file mode 100644
index 0000000..f68b9c0
--- /dev/null
+++ b/templates/_styles.html
@@ -0,0 +1,539 @@
1:root,
2:root[data-theme="dark"] {
3 --bg: #12161c;
4 --surface: #1a2029;
5 --surface-raised: #212836;
6 --border: #2a323d;
7 --text: #e7ebf1;
8 --text-muted: #8891a0;
9 --accent: #f5a623;
10 --accent-strong: #ffbb47;
11 --accent-ink: #1a1305;
12 --status-good: #3ddc84;
13 --status-bad: #e5484d;
14 color-scheme: dark;
15}
16
17:root[data-theme="light"] {
18 --bg: #eef1f6;
19 --surface: #ffffff;
20 --surface-raised: #f7f9fc;
21 --border: #d7dce3;
22 --text: #12161c;
23 --text-muted: #5b6472;
24 --accent: #b9750f;
25 --accent-strong: #8f5c0c;
26 --accent-ink: #fff8ec;
27 --status-good: #1e9a5a;
28 --status-bad: #c53328;
29 color-scheme: light;
30}
31
32*,
33*::before,
34*::after {
35 box-sizing: border-box;
36}
37
38html {
39 -webkit-text-size-adjust: 100%;
40}
41
42body {
43 background: var(--bg);
44 color: var(--text);
45 font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
46 font-size: 15px;
47 line-height: 1.6;
48 min-height: 100vh;
49}
50
51body,
52.pulse-line,
53.theme-toggle,
54.field__input,
55.btn,
56.module-card {
57 transition: background-color 0.2s ease, border-color 0.2s ease, color 0.2s ease;
58}
59
60.mono {
61 font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, "Liberation Mono", monospace;
62}
63
64.eyebrow {
65 font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, "Liberation Mono", monospace;
66 font-size: 11px;
67 letter-spacing: 0.08em;
68 text-transform: uppercase;
69 color: var(--text-muted);
70}
71
72.muted {
73 color: var(--text-muted);
74}
75
76.small {
77 font-size: 13px;
78}
79
80a {
81 color: var(--accent);
82 text-decoration: none;
83}
84
85a:hover {
86 text-decoration: underline;
87}
88
89h1 {
90 font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, "Liberation Mono", monospace;
91 font-size: 26px;
92 font-weight: 600;
93 letter-spacing: -0.01em;
94}
95
96h2 {
97 font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, "Liberation Mono", monospace;
98 font-size: 18px;
99 font-weight: 600;
100}
101
102/* signature element: one-time handshake pulse on load */
103.pulse-line {
104 position: fixed;
105 top: 0;
106 left: 0;
107 right: 0;
108 height: 2px;
109 z-index: 40;
110 background: linear-gradient(90deg, transparent, var(--accent), transparent);
111 background-size: 200% 100%;
112 animation: pulse-sweep 1.4s ease-out 1;
113}
114
115@keyframes pulse-sweep {
116 from { background-position: 160% 0; }
117 to { background-position: -60% 0; }
118}
119
120/* theme toggle */
121.theme-toggle {
122 position: fixed;
123 top: 16px;
124 right: 16px;
125 z-index: 50;
126 display: flex;
127 align-items: center;
128 justify-content: center;
129 width: 36px;
130 height: 36px;
131 border-radius: 8px;
132 border: 1px solid var(--border);
133 background: var(--surface);
134 color: var(--text-muted);
135 cursor: pointer;
136}
137
138.theme-toggle:hover {
139 color: var(--accent);
140 border-color: var(--accent);
141}
142
143.theme-toggle:focus-visible {
144 outline: 2px solid var(--accent);
145 outline-offset: 2px;
146}
147
148.theme-toggle .icon-sun { display: none; }
149.theme-toggle .icon-moon { display: block; }
150:root[data-theme="light"] .theme-toggle .icon-sun { display: block; }
151:root[data-theme="light"] .theme-toggle .icon-moon { display: none; }
152
153/* focus ring, used everywhere */
154a:focus-visible,
155button:focus-visible,
156input:focus-visible {
157 outline: 2px solid var(--accent);
158 outline-offset: 2px;
159}
160
161/* buttons */
162.btn {
163 font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, "Liberation Mono", monospace;
164 font-size: 14px;
165 font-weight: 600;
166 padding: 10px 18px;
167 border-radius: 8px;
168 border: 1px solid transparent;
169 cursor: pointer;
170 display: inline-flex;
171 align-items: center;
172 gap: 8px;
173}
174
175.btn--primary {
176 background: var(--accent);
177 color: var(--accent-ink);
178}
179
180.btn--primary:hover {
181 background: var(--accent-strong);
182}
183
184.btn--full {
185 width: 100%;
186 justify-content: center;
187}
188
189/* form fields */
190.field {
191 margin-bottom: 18px;
192}
193
194.field__label {
195 display: block;
196 font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, "Liberation Mono", monospace;
197 font-size: 11px;
198 letter-spacing: 0.08em;
199 text-transform: uppercase;
200 color: var(--text-muted);
201 margin-bottom: 6px;
202}
203
204.field__input {
205 width: 100%;
206 font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, "Liberation Mono", monospace;
207 font-size: 14px;
208 padding: 10px 12px;
209 background: var(--bg);
210 color: var(--text);
211 border: 1px solid var(--border);
212 border-radius: 8px;
213}
214
215.field__input:focus {
216 outline: 2px solid var(--accent);
217 outline-offset: 1px;
218 border-color: var(--accent);
219}
220
221.field__input--error {
222 border-color: var(--status-bad);
223}
224
225.field__error {
226 margin-top: 6px;
227 font-size: 13px;
228 color: var(--status-bad);
229}
230
231/* auth split-panel shell */
232.auth-page {
233 min-height: 100vh;
234 display: flex;
235 align-items: center;
236 justify-content: center;
237 padding: 32px 16px;
238}
239
240.auth-shell {
241 display: grid;
242 grid-template-columns: 1fr 1fr;
243 max-width: 880px;
244 width: 100%;
245 border: 1px solid var(--border);
246 border-radius: 16px;
247 overflow: hidden;
248}
249
250.auth-hero {
251 background: var(--surface-raised);
252 padding: 40px 32px;
253 display: flex;