Skip to content

Commit 2f00006

Browse files
author
Paul C
committed
v24.21.0: add Bat Dark theme — cold steel-cyan tactical-HUD on near-black with concentric radar rings + off-centre core glow; gunmetal hairline panels, crisp small radii, distinct semantic colours; wired into the theme picker and validThemes whitelist
1 parent 7490fd0 commit 2f00006

4 files changed

Lines changed: 200 additions & 2 deletions

File tree

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "wolfstack"
3-
version = "24.20.0"
3+
version = "24.21.0"
44
edition = "2024"
55
authors = ["Wolf Software Systems Ltd"]
66
description = "Server management platform for the Wolf software suite"

web/css/style.css

Lines changed: 180 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -326,6 +326,186 @@
326326
--shadow-glow: 0 0 0 3px var(--accent-glow);
327327
}
328328

329+
/* ─── Bat Dark Theme ───
330+
Cold tactical-HUD aesthetic modelled on a cave command console: a
331+
near-black canvas with a faint blue tint, concentric radar rings
332+
radiating from an off-centre core glow, and steel-cyan accents over
333+
gunmetal hairline panels. Crisp small radii give the precise,
334+
instrument-panel feel. Semantic colours stay distinct (a clearly
335+
readable teal-green / dim-gold / cold-red) so status meaning survives
336+
the monochrome treatment. Original name to steer clear of anyone's
337+
masked-vigilante trademarks. */
338+
[data-theme="bat"] {
339+
--bg-primary: #06080c;
340+
--bg-secondary: #0a0d13;
341+
--bg-card: #0e131b;
342+
--bg-card-hover: #131a25;
343+
--bg-input: #05070b;
344+
--bg-tertiary: #0c111a;
345+
--border: #1b2530;
346+
--border-light: #2b3a48;
347+
--text-primary: #cdd6e0;
348+
--text-secondary: #7e8c9b;
349+
--text-muted: #4d5965;
350+
--accent: #4ea7d4;
351+
--accent-light: #86ccea;
352+
--accent-glow: rgba(78, 167, 212, 0.18);
353+
--success: #2fb589;
354+
--success-bg: rgba(47, 181, 137, 0.10);
355+
--warning: #d6a649;
356+
--warning-bg: rgba(214, 166, 73, 0.10);
357+
--danger: #d75763;
358+
--danger-bg: rgba(215, 87, 99, 0.12);
359+
--info: #4ea7d4;
360+
--info-bg: rgba(78, 167, 212, 0.10);
361+
--gradient-main: linear-gradient(135deg, #2a6f93 0%, #4ea7d4 50%, #86ccea 100%);
362+
--gradient-success: linear-gradient(135deg, #1f9a78 0%, #2fb589 100%);
363+
--gradient-danger: linear-gradient(135deg, #b8404c 0%, #d75763 100%);
364+
--shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.5);
365+
--shadow-md: 0 3px 12px rgba(0, 0, 0, 0.55), 0 0 1px rgba(78, 167, 212, 0.10);
366+
--shadow-lg: 0 14px 44px rgba(0, 0, 0, 0.70), 0 0 28px rgba(20, 70, 110, 0.18);
367+
--shadow-glow: 0 0 0 3px var(--accent-glow);
368+
--radius: 3px;
369+
--radius-sm: 2px;
370+
--radius-lg: 5px;
371+
}
372+
373+
/* Bat — concentric radar rings + off-centre core glow on the canvas.
374+
The repeating-radial-gradient draws faint 1px steel rings every 82px
375+
around the core; the two radial-gradients lay a cold central glow and
376+
an outer vignette over them. Fixed so the rings stay put as you scroll. */
377+
[data-theme="bat"] body {
378+
background:
379+
radial-gradient(circle at 50% 38%, rgba(40, 110, 150, 0.18) 0%, rgba(20, 60, 90, 0.07) 22%, transparent 46%),
380+
radial-gradient(ellipse at 50% 50%, rgba(8, 24, 40, 0.55) 0%, transparent 75%),
381+
repeating-radial-gradient(circle at 50% 38%,
382+
transparent 0,
383+
transparent 80px,
384+
rgba(90, 150, 185, 0.045) 81px,
385+
rgba(90, 150, 185, 0.045) 82px),
386+
#06080c;
387+
background-attachment: fixed;
388+
}
389+
390+
/* Bat — gunmetal sidebar with a faint cold edge glow */
391+
[data-theme="bat"] .sidebar {
392+
background: rgba(8, 11, 17, 0.94);
393+
border-right: 1px solid var(--border);
394+
box-shadow: 2px 0 28px rgba(0, 0, 0, 0.6);
395+
}
396+
397+
/* Bat — top-bar matches the sidebar tone */
398+
[data-theme="bat"] .top-bar {
399+
background: rgba(7, 10, 15, 0.94);
400+
border-bottom: 1px solid var(--border);
401+
box-shadow: 0 2px 20px rgba(0, 0, 0, 0.55);
402+
}
403+
404+
/* Bat — instrument panels: hairline border, faint inner top highlight */
405+
[data-theme="bat"] .card,
406+
[data-theme="bat"] .stat-card {
407+
background: rgba(14, 19, 27, 0.82);
408+
border: 1px solid var(--border);
409+
box-shadow:
410+
0 4px 18px rgba(0, 0, 0, 0.55),
411+
inset 0 1px 0 rgba(120, 180, 215, 0.05);
412+
}
413+
414+
[data-theme="bat"] .card:hover,
415+
[data-theme="bat"] .stat-card:hover {
416+
border-color: var(--border-light);
417+
box-shadow:
418+
0 8px 28px rgba(0, 0, 0, 0.65),
419+
inset 0 1px 0 rgba(130, 195, 230, 0.08),
420+
0 0 22px rgba(30, 90, 130, 0.16);
421+
}
422+
423+
/* Bat — subtle cold glow on panel headings for the HUD readout feel */
424+
[data-theme="bat"] .card h1,
425+
[data-theme="bat"] .card h2,
426+
[data-theme="bat"] .card h3,
427+
[data-theme="bat"] .card-header h3 {
428+
text-shadow: 0 0 6px rgba(78, 167, 212, 0.22);
429+
}
430+
431+
/* Bat — deep modals / dropdowns with steel edge */
432+
[data-theme="bat"] .modal-content,
433+
[data-theme="bat"] .dropdown-menu {
434+
background: rgba(9, 13, 19, 0.97);
435+
border: 1px solid var(--border-light);
436+
box-shadow:
437+
0 24px 80px rgba(0, 0, 0, 0.8),
438+
inset 0 1px 0 rgba(120, 180, 215, 0.06);
439+
}
440+
441+
/* Bat — recessed form inputs */
442+
[data-theme="bat"] .form-control,
443+
[data-theme="bat"] input,
444+
[data-theme="bat"] select,
445+
[data-theme="bat"] textarea {
446+
background: rgba(5, 7, 11, 0.95);
447+
border-color: var(--border);
448+
color: var(--text-primary);
449+
box-shadow: inset 0 2px 8px rgba(0, 0, 0, 0.5);
450+
}
451+
452+
[data-theme="bat"] .form-control:focus,
453+
[data-theme="bat"] input:focus,
454+
[data-theme="bat"] select:focus,
455+
[data-theme="bat"] textarea:focus {
456+
border-color: rgba(78, 167, 212, 0.5);
457+
box-shadow: inset 0 2px 8px rgba(0, 0, 0, 0.45), 0 0 0 3px var(--accent-glow);
458+
outline: none;
459+
}
460+
461+
/* Bat — primary action: steel-cyan gradient with a cold rim light */
462+
[data-theme="bat"] .btn-primary {
463+
background: linear-gradient(135deg, #2a6f93 0%, #4ea7d4 100%);
464+
border: 1px solid rgba(120, 195, 230, 0.35);
465+
box-shadow: 0 3px 14px rgba(0, 60, 100, 0.4), inset 0 1px 0 rgba(160, 215, 240, 0.18);
466+
}
467+
468+
[data-theme="bat"] .btn-primary:hover {
469+
background: linear-gradient(135deg, #347fa6 0%, #62b6df 100%);
470+
box-shadow: 0 5px 20px rgba(0, 80, 130, 0.5), inset 0 1px 0 rgba(180, 225, 245, 0.22);
471+
}
472+
473+
/* Bat — active nav: steel bar + faint glow */
474+
[data-theme="bat"] .nav-item.active {
475+
background: rgba(30, 80, 110, 0.22);
476+
box-shadow: inset 3px 0 0 var(--accent), 0 0 14px rgba(20, 70, 110, 0.25);
477+
}
478+
479+
/* Bat — stat icon ring + log readout */
480+
[data-theme="bat"] .stat-icon {
481+
box-shadow: 0 0 10px rgba(78, 167, 212, 0.25), inset 0 1px 0 rgba(160, 215, 240, 0.12);
482+
}
483+
484+
[data-theme="bat"] .log-viewer {
485+
background: #04060a;
486+
color: #9fc4d8;
487+
box-shadow: inset 0 4px 28px rgba(0, 0, 0, 0.7);
488+
}
489+
490+
/* Bat — recessed progress track */
491+
[data-theme="bat"] .progress-bar {
492+
background: rgba(8, 14, 22, 0.7);
493+
box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.5);
494+
}
495+
496+
[data-theme="bat"] ::selection {
497+
background: rgba(78, 167, 212, 0.35);
498+
color: #eaf4fb;
499+
}
500+
501+
[data-theme="bat"] ::-webkit-scrollbar-thumb {
502+
background: var(--border-light);
503+
}
504+
505+
[data-theme="bat"] ::-webkit-scrollbar-track {
506+
background: #05070b;
507+
}
508+
329509
/* ─── Light theme overrides for specific elements ─── */
330510
[data-theme="light"] .top-bar {
331511
background: rgba(245, 246, 250, 0.9);

web/index.html

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5564,6 +5564,24 @@ <h4 style="margin:0 0 8px 0; font-size:16px; font-weight:600;">Theme</h4>
55645564
<div class="theme-card-desc">Jedi mentor — lightsaber blue on deep space, Tatooine cream text</div>
55655565
</div>
55665566
</div>
5567+
<!-- Bat Dark -->
5568+
<div class="theme-card" onclick="applyTheme('bat')" data-theme-id="bat">
5569+
<div class="theme-preview">
5570+
<div class="theme-preview-sidebar" style="background:#0a0d13; border-right:1px solid #1b2530;"></div>
5571+
<div class="theme-preview-main" style="background:radial-gradient(circle at 50% 42%, rgba(40,110,150,0.30) 0%, transparent 55%), repeating-radial-gradient(circle at 50% 42%, transparent 0, transparent 7px, rgba(90,150,185,0.20) 8px, rgba(90,150,185,0.20) 9px), #06080c;">
5572+
<div class="theme-preview-bar" style="background:#0e131b; border-bottom:1px solid #1b2530;"></div>
5573+
<div class="theme-preview-card" style="background:rgba(14,19,27,0.85); border:1px solid #2b3a48; border-radius:3px; box-shadow:0 0 10px rgba(78,167,212,0.22);">
5574+
<div class="theme-preview-card-inner" style="background:#4ea7d4; border-radius:2px;"></div>
5575+
<div class="theme-preview-card-inner" style="background:#86ccea; border-radius:2px;"></div>
5576+
<div class="theme-preview-card-inner" style="background:#d6a649; border-radius:2px;"></div>
5577+
</div>
5578+
</div>
5579+
</div>
5580+
<div class="theme-card-info">
5581+
<div class="theme-card-name">Bat Dark</div>
5582+
<div class="theme-card-desc">Cold steel-cyan HUD on black with concentric radar rings</div>
5583+
</div>
5584+
</div>
55675585
</div>
55685586

55695587
</div>

web/js/app.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35393,7 +35393,7 @@ async function saveFail2banConfig(nodePrefix, btn) {
3539335393

3539435394
// ─── Theme System ───
3539535395
function applyTheme(themeId) {
35396-
const validThemes = ['dark', 'light', 'midnight', 'datacenter', 'forest', 'amber', 'glass', 'deepred', 'tty', 'obsidian', 'carbon', 'void', 'twilight', 'arctic', 'trek', 'punk', 'fruit', 'obe1'];
35396+
const validThemes = ['dark', 'light', 'midnight', 'datacenter', 'forest', 'amber', 'glass', 'deepred', 'tty', 'obsidian', 'carbon', 'void', 'twilight', 'arctic', 'trek', 'punk', 'fruit', 'obe1', 'bat'];
3539735397
if (!validThemes.includes(themeId)) themeId = 'dark';
3539835398

3539935399
// Apply to root element

0 commit comments

Comments
 (0)