summaryrefslogtreecommitdiffstats
path: root/static/style.css
diff options
context:
space:
mode:
authorsalmonik <salmonik@tuta.io>2026-07-12 19:38:03 +0200
committersalmonik <salmonik@tuta.io>2026-07-12 19:38:03 +0200
commitae7ef10b67737f08a86743f687bca30a12e9e17a (patch)
tree056539ab76b801559dc8d07ee6599220e2bd8e07 /static/style.css
parentarchitecture (diff)
downloadminecraft-ui-ae7ef10b67737f08a86743f687bca30a12e9e17a.tar.gz
minecraft-ui-ae7ef10b67737f08a86743f687bca30a12e9e17a.zip
first stable
Diffstat (limited to 'static/style.css')
-rw-r--r--static/style.css424
1 files changed, 424 insertions, 0 deletions
diff --git a/static/style.css b/static/style.css
new file mode 100644
index 0000000..2d095a4
--- /dev/null
+++ b/static/style.css
@@ -0,0 +1,424 @@
1*,
2*::before,
3*::after {
4 box-sizing: border-box;
5 margin: 0;
6 padding: 0;
7}
8
9:root {
10 --bg: #1a1b1e;
11 --bg-card: #25262b;
12 --bg-input: #2c2e33;
13 --fg: #c1c2c5;
14 --fg-muted: #909296;
15 --accent: #4c9aff;
16 --ok: #51cf66;
17 --warn: #fcc419;
18 --err: #ff6b6b;
19 --border: #373a40;
20 --radius: 8px;
21}
22
23body {
24 font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
25 background: var(--bg);
26 color: var(--fg);
27 line-height: 1.5;
28 min-height: 100vh;
29}
30
31/* Navigation */
32nav {
33 display: flex;
34 align-items: center;
35 justify-content: space-between;
36 padding: 0.75rem 1.5rem;
37 background: var(--bg-card);
38 border-bottom: 1px solid var(--border);
39 flex-wrap: wrap;
40 gap: 0.5rem;
41}
42
43nav .brand {
44 font-weight: 700;
45 font-size: 1.1rem;
46 color: var(--accent);
47}
48
49nav .nav-links {
50 display: flex;
51 align-items: center;
52 gap: 1rem;
53 flex-wrap: wrap;
54}
55
56nav a {
57 color: var(--fg);
58 text-decoration: none;
59 font-size: 0.9rem;
60}
61
62nav a:hover {
63 color: var(--accent);
64}
65
66nav .nav-user {
67 color: var(--fg-muted);
68 font-size: 0.85rem;
69}
70
71/* Buttons */
72.btn, button {
73 display: inline-block;
74 padding: 0.5rem 1rem;
75 border: 1px solid var(--border);
76 border-radius: var(--radius);
77 background: var(--bg-input);
78 color: var(--fg);
79 cursor: pointer;
80 font-size: 0.9rem;
81 text-decoration: none;
82 transition: background 0.15s;
83}
84
85.btn:hover, button:hover {
86 background: var(--border);
87}
88
89.btn-ok, button.btn-ok {
90 background: var(--ok);
91 color: #000;
92 border-color: var(--ok);
93}
94
95.btn-ok:hover {
96 opacity: 0.85;
97}
98
99.btn-danger, button.btn-danger {
100 background: var(--err);
101 color: #000;
102 border-color: var(--err);
103}
104
105.btn-danger:hover {
106 opacity: 0.85;
107}
108
109.btn-sm {
110 padding: 0.25rem 0.6rem;
111 font-size: 0.8rem;
112}
113
114.btn-link {
115 background: none;
116 border: none;
117 color: var(--fg-muted);
118 cursor: pointer;
119 padding: 0;
120}
121
122.btn-link:hover {
123 color: var(--err);
124}
125
126/* Cards */
127.card {
128 background: var(--bg-card);
129 border: 1px solid var(--border);
130 border-radius: var(--radius);
131 padding: 1.25rem;
132}
133
134.card-ok {
135 border-color: var(--ok);
136}
137
138.card-err {
139 border-color: var(--err);
140}
141
142.card-muted {
143 opacity: 0.7;
144}
145
146.card-active {
147 border-color: var(--accent);
148 position: relative;
149}
150
151.active-badge {
152 position: absolute;
153 top: -8px;
154 right: -8px;
155 background: var(--accent);
156 color: #000;
157 font-size: 0.7rem;
158 font-weight: 700;
159 padding: 0.15rem 0.5rem;
160 border-radius: 100px;
161}
162
163/* Forms */
164form.form-col {
165 display: flex;
166 flex-direction: column;
167 gap: 1rem;
168}
169
170form.form-col:not(.form-wide) {
171 max-width: 600px;
172}
173
174form.form-row {
175 display: flex;
176 align-items: center;
177 gap: 0.5rem;
178}
179
180label {
181 display: flex;
182 flex-direction: column;
183 gap: 0.25rem;
184 font-size: 0.9rem;
185 color: var(--fg-muted);
186}
187
188label:has(input[type="radio"]),
189label:has(input[type="checkbox"]) {
190 flex-direction: row;
191 align-items: center;
192 gap: 0.5rem;
193 color: var(--fg);
194}
195
196input, select, textarea {
197 padding: 0.5rem 0.75rem;
198 border: 1px solid var(--border);
199 border-radius: var(--radius);
200 background: var(--bg-input);
201 color: var(--fg);
202 font-size: 0.9rem;
203}
204
205input:focus, select:focus {
206 outline: none;
207 border-color: var(--accent);
208}
209
210fieldset {
211 border: 1px solid var(--border);
212 border-radius: var(--radius);
213 padding: 1rem;
214}
215
216legend {
217 font-weight: 600;
218 padding: 0 0.5rem;
219 color: var(--fg-muted);
220 font-size: 0.85rem;
221}
222
223small {
224 color: var(--fg-muted);
225 font-size: 0.8rem;
226}
227
228/* Layout */
229main {
230 max-width: 1000px;
231 margin: 0 auto;
232 padding: 1.5rem;
233}
234
235h1, h2, h3 {
236 color: var(--fg);
237 margin-bottom: 0.75rem;
238}
239
240.page-header {
241 display: flex;
242 align-items: center;
243 justify-content: space-between;
244 margin-bottom: 1.5rem;
245 flex-wrap: wrap;
246 gap: 1rem;
247}
248
249.instance-grid {
250 display: grid;
251 grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
252 gap: 1rem;
253}
254
255.tab-row {
256 display: grid;
257 grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
258 gap: 1rem;
259}
260
261/* Status badges */
262.status-badge {
263 display: inline-block;
264 padding: 0.25rem 0.75rem;
265 border-radius: 100px;
266 font-size: 0.85rem;
267 font-weight: 600;
268}
269
270.status-running {
271 background: var(--ok);
272 color: #000;
273}
274
275.status-starting {
276 background: var(--warn);
277 color: #000;
278}
279
280.status-stopped {
281 background: var(--fg-muted);
282 color: #000;
283}
284
285.status-error, .status-not_found {
286 background: var(--err);
287 color: #000;
288}
289
290.status-row {
291 display: flex;
292 align-items: center;
293 gap: 1rem;
294 margin: 0.75rem 0;
295}
296
297/* Tags */
298.tag {
299 display: inline-block;
300 padding: 0.1rem 0.5rem;
301 border-radius: 100px;
302 font-size: 0.75rem;
303 background: var(--border);
304 color: var(--fg-muted);
305}
306
307.tag-admin {
308 background: var(--warn);
309 color: #000;
310}
311
312/* Instance meta */
313.instance-meta, .meta {
314 display: flex;
315 gap: 0.75rem;
316 flex-wrap: wrap;
317 font-size: 0.85rem;
318 color: var(--fg-muted);
319 margin-bottom: 0.5rem;
320}
321
322.actions {
323 display: flex;
324 gap: 0.5rem;
325 flex-wrap: wrap;
326 margin-top: 0.75rem;
327}
328
329.players {
330 font-size: 0.9rem;
331 color: var(--accent);
332}
333
334/* Player list */
335.player-list {
336 list-style: none;
337 margin-top: 0.5rem;
338}
339
340.player-list li {
341 display: flex;
342 align-items: center;
343 justify-content: space-between;
344 padding: 0.4rem 0;
345 border-bottom: 1px solid var(--border);
346 font-size: 0.9rem;
347}
348
349/* Table */
350.table {
351 width: 100%;
352 border-collapse: collapse;
353 font-size: 0.9rem;
354}
355
356.table th, .table td {
357 text-align: left;
358 padding: 0.5rem;
359 border-bottom: 1px solid var(--border);
360}
361
362.table th {
363 color: var(--fg-muted);
364 font-weight: 600;
365}
366
367/* Flash messages */
368.flash {
369 padding: 0.75rem 1rem;
370 border-radius: var(--radius);
371 margin-bottom: 1rem;
372 font-size: 0.9rem;
373}
374
375.flash-err {
376 background: color-mix(in srgb, var(--err) 15%, transparent);
377 border: 1px solid var(--err);
378 color: var(--err);
379}
380
381.flash-ok {
382 background: color-mix(in srgb, var(--ok) 15%, transparent);
383 border: 1px solid var(--ok);
384 color: var(--ok);
385}
386
387.flash-warn {
388 background: color-mix(in srgb, var(--warn) 15%, transparent);
389 border: 1px solid var(--warn);
390 color: var(--warn);
391}
392
393/* Login page */
394.login-page {
395 display: flex;
396 flex-direction: column;
397 align-items: center;
398 justify-content: center;
399 min-height: 100vh;
400 max-width: 380px;
401}
402
403.login-form {
404 width: 100%;
405 display: flex;
406 flex-direction: column;
407 gap: 1rem;
408}
409
410.login-form button {
411 margin-top: 0.5rem;
412}
413
414/* Responsive */
415@media (max-width: 600px) {
416 nav {
417 flex-direction: column;
418 align-items: flex-start;
419 }
420
421 .instance-grid {
422 grid-template-columns: 1fr;
423 }
424}