mirror of
https://github.com/samjage/metro-warden.git
synced 2026-06-06 01:20:42 +00:00
332 lines
7.6 KiB
Plaintext
332 lines
7.6 KiB
Plaintext
/**
|
|
* Metro Warden — Industrial Dark Metro Map Theme
|
|
*
|
|
* Colour palette:
|
|
* Deep charcoal background : #1a1a2e
|
|
* Surface / panels : #16213e
|
|
* Border / accent : #0f3460
|
|
* Electric blue primary : #00d4ff
|
|
* Amber warning : #ff8c00
|
|
* Green active : #00ff88
|
|
* Muted text : #8892a4
|
|
* Error / danger : #ff4444
|
|
*/
|
|
|
|
/* ── Root variables ─────────────────────────────────────────────────── */
|
|
$background: #1a1a2e;
|
|
$surface: #16213e;
|
|
$panel: #0f3460;
|
|
$primary: #00d4ff;
|
|
$secondary: #0099bb;
|
|
$accent: #00ff88;
|
|
$warning: #ff8c00;
|
|
$error: #ff4444;
|
|
$success: #00ff88;
|
|
$text: #e0e6f0;
|
|
$text-muted: #8892a4;
|
|
$border: #0f3460;
|
|
$cursor: #00d4ff 30%;
|
|
|
|
/* ── App shell ──────────────────────────────────────────────────────── */
|
|
App {
|
|
background: $background;
|
|
color: $text;
|
|
}
|
|
|
|
Screen {
|
|
background: $background;
|
|
layers: base overlay;
|
|
}
|
|
|
|
/* ── Header ─────────────────────────────────────────────────────────── */
|
|
MetroHeader {
|
|
height: 3;
|
|
background: $surface;
|
|
border-bottom: heavy $primary;
|
|
color: $text;
|
|
}
|
|
|
|
MetroHeader .header-brand {
|
|
color: $primary;
|
|
text-style: bold;
|
|
width: 1fr;
|
|
content-align: left middle;
|
|
padding-left: 1;
|
|
}
|
|
|
|
MetroHeader .header-clock {
|
|
color: $text-muted;
|
|
content-align: center middle;
|
|
min-width: 26;
|
|
}
|
|
|
|
MetroHeader .header-status {
|
|
color: $success;
|
|
content-align: right middle;
|
|
width: 1fr;
|
|
padding-right: 1;
|
|
}
|
|
|
|
MetroHeader .status-warn {
|
|
color: $warning;
|
|
}
|
|
|
|
/* ── Footer ─────────────────────────────────────────────────────────── */
|
|
Footer {
|
|
background: $surface;
|
|
color: $text-muted;
|
|
border-top: heavy $border;
|
|
}
|
|
|
|
Footer .footer-key--label {
|
|
color: $primary;
|
|
}
|
|
|
|
/* ── TabbedContent ──────────────────────────────────────────────────── */
|
|
TabbedContent {
|
|
height: 1fr;
|
|
background: $background;
|
|
}
|
|
|
|
TabPane {
|
|
background: $background;
|
|
padding: 0;
|
|
}
|
|
|
|
Tabs {
|
|
background: $surface;
|
|
border-bottom: heavy $border;
|
|
}
|
|
|
|
Tab {
|
|
color: $text-muted;
|
|
background: $surface;
|
|
padding: 0 2;
|
|
}
|
|
|
|
Tab:hover {
|
|
color: $text;
|
|
background: $panel;
|
|
}
|
|
|
|
Tab.-active {
|
|
color: $primary;
|
|
background: $background;
|
|
border-top: heavy $primary;
|
|
text-style: bold;
|
|
}
|
|
|
|
Tab.-active:hover {
|
|
color: $primary;
|
|
}
|
|
|
|
/* ── DataTable ──────────────────────────────────────────────────────── */
|
|
DataTable {
|
|
background: $surface;
|
|
color: $text;
|
|
border: round $border;
|
|
scrollbar-color: $panel;
|
|
scrollbar-background: $background;
|
|
}
|
|
|
|
DataTable > .datatable--header {
|
|
background: $panel;
|
|
color: $primary;
|
|
text-style: bold;
|
|
}
|
|
|
|
DataTable > .datatable--cursor {
|
|
background: $primary 20%;
|
|
color: $text;
|
|
}
|
|
|
|
DataTable > .datatable--hover {
|
|
background: $panel;
|
|
}
|
|
|
|
DataTable > .datatable--fixed {
|
|
background: $surface;
|
|
color: $primary;
|
|
}
|
|
|
|
DataTable > .datatable--zebra {
|
|
background: $background;
|
|
}
|
|
|
|
/* ── Input / Form controls ──────────────────────────────────────────── */
|
|
Input {
|
|
background: $surface;
|
|
border: round $border;
|
|
color: $text;
|
|
padding: 0 1;
|
|
}
|
|
|
|
Input:focus {
|
|
border: round $primary;
|
|
color: $text;
|
|
}
|
|
|
|
Input.-invalid {
|
|
border: round $error;
|
|
}
|
|
|
|
Switch {
|
|
background: $surface;
|
|
border: round $border;
|
|
}
|
|
|
|
Switch:focus {
|
|
border: round $primary;
|
|
}
|
|
|
|
Switch.-on {
|
|
color: $accent;
|
|
}
|
|
|
|
Select {
|
|
background: $surface;
|
|
border: round $border;
|
|
color: $text;
|
|
}
|
|
|
|
Select:focus {
|
|
border: round $primary;
|
|
}
|
|
|
|
/* ── Button ─────────────────────────────────────────────────────────── */
|
|
Button {
|
|
background: $panel;
|
|
color: $text;
|
|
border: round $border;
|
|
padding: 0 2;
|
|
}
|
|
|
|
Button:hover {
|
|
background: $border;
|
|
border: round $primary;
|
|
}
|
|
|
|
Button:focus {
|
|
border: round $primary;
|
|
}
|
|
|
|
Button.-primary {
|
|
background: $primary 40%;
|
|
color: $primary;
|
|
border: round $primary;
|
|
text-style: bold;
|
|
}
|
|
|
|
Button.-primary:hover {
|
|
background: $primary 60%;
|
|
}
|
|
|
|
/* ── RichLog ────────────────────────────────────────────────────────── */
|
|
RichLog {
|
|
background: $surface;
|
|
border: round $border;
|
|
color: $text;
|
|
scrollbar-color: $panel;
|
|
padding: 0 1;
|
|
}
|
|
|
|
/* ── Labels / Static ────────────────────────────────────────────────── */
|
|
Label {
|
|
color: $text;
|
|
}
|
|
|
|
Static {
|
|
color: $text;
|
|
}
|
|
|
|
/* ── Shared tab utilities ──────────────────────────────────────────── */
|
|
.tab-title {
|
|
color: $primary;
|
|
text-style: bold;
|
|
height: 1;
|
|
margin-bottom: 1;
|
|
padding-left: 1;
|
|
}
|
|
|
|
.section-header {
|
|
color: $accent;
|
|
text-style: bold;
|
|
height: 1;
|
|
margin-top: 1;
|
|
margin-bottom: 1;
|
|
}
|
|
|
|
.hint {
|
|
color: $text-muted;
|
|
height: 1;
|
|
margin-top: 1;
|
|
padding-left: 1;
|
|
}
|
|
|
|
.filter-label {
|
|
color: $text-muted;
|
|
content-align: left middle;
|
|
}
|
|
|
|
/* ── Pulse animation (for active indicators) ────────────────────────── */
|
|
.pulse {
|
|
color: $accent;
|
|
}
|
|
|
|
.pulse-off {
|
|
color: $panel;
|
|
}
|
|
|
|
/* ── Status colours ─────────────────────────────────────────────────── */
|
|
.status-up {
|
|
color: $success;
|
|
text-style: bold;
|
|
}
|
|
|
|
.status-down {
|
|
color: $error;
|
|
text-style: bold;
|
|
}
|
|
|
|
.status-warn {
|
|
color: $warning;
|
|
}
|
|
|
|
.status-nominal {
|
|
color: $success;
|
|
}
|
|
|
|
/* ── Scrollbar ──────────────────────────────────────────────────────── */
|
|
ScrollBar {
|
|
background: $background;
|
|
color: $panel;
|
|
}
|
|
|
|
ScrollBar > .scrollbar--bar {
|
|
color: $border;
|
|
background: $surface;
|
|
}
|
|
|
|
ScrollBar > .scrollbar--bar:hover {
|
|
color: $primary;
|
|
}
|
|
|
|
/* ── Modal / Overlay ────────────────────────────────────────────────── */
|
|
ModalScreen {
|
|
background: $background 80%;
|
|
align: center middle;
|
|
}
|
|
|
|
/* ── Notification (toast) ───────────────────────────────────────────── */
|
|
Toast {
|
|
background: $surface;
|
|
border: round $primary;
|
|
color: $text;
|
|
}
|
|
|
|
/* ── Loading indicator ──────────────────────────────────────────────── */
|
|
LoadingIndicator {
|
|
background: $background;
|
|
color: $primary;
|
|
}
|