librelad 875a60f90f LibrePortal v0.1.0 — initial release
A free, open, self-hosted app platform (GNU AGPLv3): one-click app deploys,
Traefik reverse proxy with automatic SSL, rootless Docker support, gluetun
VPN routing, and a web dashboard to manage it all.

Free & open forever to self-host; optional paid hosted services fund it.
See PROMISE.md.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

Signed-off-by: librelad <librelad@digitalangels.vip>
2026-05-21 20:37:54 +01:00

152 lines
6.3 KiB
CSS

/* Nebula — default theme. Matches the loading/login aurora gradient. */
[data-theme="nebula"] {
/* Gradient stops (shared by surface-bg and install/login screens).
Three deep cosmic stops: indigo -> violet-blue -> ocean. */
--gradient-from: #1a1442;
--gradient-mid: #1b2a5e;
--gradient-to: #0f3b6e;
/* Surfaces */
--surface-bg: linear-gradient(135deg, var(--gradient-from) 0%, var(--gradient-mid) 50%, var(--gradient-to) 100%);
--surface-bg-solid: #0f1729;
--surface-elevated: rgba(255, 255, 255, 0.07);
--surface-sunken: rgba(0, 0, 0, 0.22);
--surface-hover: rgba(255, 255, 255, 0.10);
--surface-selected: rgba(0, 212, 255, 0.18);
/* Borders — bright enough to read as glass edges */
--border: rgba(255, 255, 255, 0.16);
--border-strong: rgba(255, 255, 255, 0.26);
--border-subtle: rgba(255, 255, 255, 0.08);
/* Text */
--text-primary: #ffffff;
--text-secondary: rgba(255, 255, 255, 0.82);
--text-muted: rgba(255, 255, 255, 0.65);
--text-on-accent: #0a1426;
/* Accent (cyan from the loading screen) */
--accent: #00d4ff;
--accent-hover: #0099cc;
--accent-soft: rgba(0, 212, 255, 0.15);
--accent-rgb: 0, 212, 255;
/* Status colors — stable across themes */
--status-success: #28a745;
--status-success-hover: #218838;
--status-success-rgb: 40, 167, 69;
--status-danger: #dc3545;
--status-danger-hover: #c82333;
--status-danger-rgb: 220, 53, 69;
--status-warning: #ffc107;
--status-warning-rgb: 255, 193, 7;
--status-info: #17a2b8;
--status-info-rgb: 23, 162, 184;
/* Theme-aware foreground RGB triplets for overlays */
--text-rgb: 255, 255, 255;
--bg-rgb: 0, 0, 0;
/* Components — cards LIFT off the gradient with a light glassy tint
instead of darkening it. The cyan undertone keeps them on-theme. */
--card-bg: linear-gradient(155deg, rgba(255, 255, 255, 0.09) 0%, rgba(0, 212, 255, 0.05) 100%);
--card-border: rgba(255, 255, 255, 0.16);
--card-shadow: 0 4px 18px rgba(0, 0, 0, 0.30), inset 0 1px 0 rgba(255, 255, 255, 0.06);
--card-shadow-hover: 0 10px 32px rgba(0, 212, 255, 0.18), 0 4px 18px rgba(0, 0, 0, 0.40), inset 0 1px 0 rgba(255, 255, 255, 0.10);
--input-bg: rgba(255, 255, 255, 0.06);
--input-border: rgba(255, 255, 255, 0.18);
--input-text: #ffffff;
--console-bg: rgba(0, 0, 0, 0.40);
--console-text: #00d4ff;
--code-bg: rgba(255, 255, 255, 0.06);
--code-text: #e6f3ff;
--tooltip-bg: rgba(10, 20, 38, 0.95);
--tooltip-text: #ffffff;
/* Chrome — translucent so the cosmic gradient bleeds through.
The backdrop-filter on .topbar/.sidebar frosts them into glass. */
--topbar-bg: rgba(15, 25, 50, 0.40);
--topbar-text: #ffffff;
--topbar-border: rgba(255, 255, 255, 0.12);
--sidebar-bg: rgba(15, 25, 50, 0.30);
--sidebar-text: #ffffff;
--sidebar-border: rgba(255, 255, 255, 0.10);
/* Legacy aliases — kept so older style.css var() refs resolve */
--bg-primary: var(--topbar-bg);
--bg-secondary: var(--surface-elevated);
--bg-tertiary: var(--surface-hover);
--text-color: var(--text-primary);
--primary-color: var(--accent);
--primary-hover: var(--accent-hover);
--primary-color-rgb: var(--accent-rgb);
--border-color: var(--border);
--content-bg: var(--surface-bg);
--hover-bg: var(--surface-hover);
--error-color: var(--status-danger);
--danger-color: var(--status-danger);
}
/* Every rule below must be prefixed with [data-theme="nebula"] — the
theme-registry loads every theme's CSS file at boot, so unscoped
selectors here would apply on light / dark-blue / example as well. */
/* Notifications float over arbitrary content (apps grid, task logs, etc.),
so the default --card-bg gradient — designed for cards inside a container
— bleeds the page through them. Use the sidebar's navy with a much higher
opacity so the toast reads as a solid panel without losing the glass feel. */
[data-theme="nebula"] .notification {
background: rgba(15, 25, 50, 0.88);
border-color: rgba(255, 255, 255, 0.14);
backdrop-filter: blur(12px);
-webkit-backdrop-filter: blur(12px);
}
/* App-page tab strips: anchor every tab bar to the same surface as
the sidebar so the chrome reads as one coherent navy surface.
Using var(--sidebar-bg) directly so any future sidebar tweak
carries through. Covers all three tab places on the apps page:
1. .tab-navigation — main app tabs (Config / Services / …) and
the Backup-location sub-tabs (Local / Remote 1 / Remote 2).
2. .tabs-list inside .tabs-wrapper — config sub-tabs that the
app-config form renders inside the Config tab. */
[data-theme="nebula"] .tab-navigation,
[data-theme="nebula"] .tabs-wrapper .tabs-list,
[data-theme="nebula"] .tabs-content {
background: var(--sidebar-bg);
}
[data-theme="nebula"] .login-btn {
color: #ffffff;
}
/* "Back to Apps" — same translucent design as Update Configuration (btn-manage),
but tinted with the warning amber so it reads as a distinct secondary action. */
[data-theme="nebula"] .config-actions .btn-secondary,
[data-theme="nebula"] .console-actions .btn-secondary {
background: rgba(var(--status-warning-rgb), 0.20) !important;
color: var(--text-primary) !important;
border: 1px solid rgba(var(--status-warning-rgb), 0.55) !important;
text-shadow: none;
font-weight: 600 !important;
transition: background 0.18s ease, border-color 0.18s ease, transform 0.15s ease !important;
}
[data-theme="nebula"] .config-actions .btn-secondary:hover:not(:disabled),
[data-theme="nebula"] .console-actions .btn-secondary:hover:not(:disabled) {
background: rgba(var(--status-warning-rgb), 0.35) !important;
border-color: rgba(var(--status-warning-rgb), 0.80) !important;
transform: translateY(-1px);
}
/* Advanced badge — bump the red to a brighter coral pink so it pops
on the cosmic gradient. The theme --status-danger (#dc3545) reads
as muddy maroon against nebula's blue/indigo, similar to how
--status-success needed a lift to #86efac for task pills. */
[data-theme="nebula"] .is-advanced .domains-header h3::after,
[data-theme="nebula"] .is-advanced .config-category h3::after {
background: rgba(252, 165, 165, 0.18);
border-color: rgba(252, 165, 165, 0.65);
color: #fca5a5;
}