Add dark mode palettes + Woodpecker CI pipeline
- Add 2 dark palettes (Nuit, Ocean) to DisplaySettings with full SVG theme tokens — all hardcoded SVG colors (grids, legends, text fills, pills, dot strokes, drag handles) replaced with reactive bindings - Update scoped CSS to use var(--color-*) and var(--svg-*) throughout - Add Woodpecker CI pipeline (.woodpecker.yml): build → docker push → deploy - Add multi-stage Dockerfiles for backend (Python) and frontend (Nuxt) - Add production docker-compose with Traefik labels + dev override - Remove old single-stage Dockerfiles and root docker-compose.yml - Update Makefile with docker-dev target - Exclude data files (pdf, xls, ipynb) from git Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -15,6 +15,12 @@
|
||||
--shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
|
||||
--shadow-md: 0 4px 6px rgba(0, 0, 0, 0.1);
|
||||
--chart-scale: 1;
|
||||
/* SVG theme tokens (overridden by DisplaySettings palettes) */
|
||||
--svg-plot-bg: #f8fafc;
|
||||
--svg-grid: #e2e8f0;
|
||||
--svg-legend-bg: white;
|
||||
--svg-text: #334155;
|
||||
--svg-text-light: #64748b;
|
||||
}
|
||||
|
||||
* {
|
||||
@@ -235,6 +241,61 @@ a:hover {
|
||||
to { transform: rotate(360deg); }
|
||||
}
|
||||
|
||||
/* ── Dark mode overrides ── */
|
||||
.palette-dark body,
|
||||
.palette-dark {
|
||||
color-scheme: dark;
|
||||
}
|
||||
|
||||
.palette-dark .card {
|
||||
background: var(--color-surface);
|
||||
border-color: var(--color-border);
|
||||
}
|
||||
|
||||
.palette-dark .btn-secondary {
|
||||
background: var(--color-surface);
|
||||
color: var(--color-text);
|
||||
border-color: var(--color-border);
|
||||
}
|
||||
.palette-dark .btn-secondary:hover {
|
||||
background: var(--color-bg);
|
||||
}
|
||||
|
||||
.palette-dark .form-input {
|
||||
background: var(--color-surface);
|
||||
color: var(--color-text);
|
||||
border-color: var(--color-border);
|
||||
}
|
||||
|
||||
.palette-dark .alert-info { background: #1e3a5f; color: #93c5fd; border-color: #1e3a5f; }
|
||||
.palette-dark .alert-success { background: #14532d; color: #86efac; border-color: #14532d; }
|
||||
.palette-dark .alert-error { background: #450a0a; color: #fca5a5; border-color: #450a0a; }
|
||||
|
||||
.palette-dark .badge-green { background: #14532d; color: #86efac; }
|
||||
.palette-dark .badge-blue { background: #1e3a5f; color: #93c5fd; }
|
||||
.palette-dark .badge-amber { background: #451a03; color: #fcd34d; }
|
||||
|
||||
.palette-dark .table th,
|
||||
.palette-dark .table td {
|
||||
border-bottom-color: var(--color-border);
|
||||
}
|
||||
.palette-dark .table th { color: var(--color-text-muted); }
|
||||
|
||||
/* ── Dev hint ── */
|
||||
.dev-hint {
|
||||
margin-top: 1rem;
|
||||
padding: 0.75rem;
|
||||
background: #fef3c7;
|
||||
border: 1px solid #f59e0b;
|
||||
border-radius: 6px;
|
||||
font-size: 0.8rem;
|
||||
}
|
||||
.palette-dark .dev-hint {
|
||||
background: #451a03;
|
||||
border-color: #92400e;
|
||||
color: #fcd34d;
|
||||
}
|
||||
|
||||
/* ── Responsive table ── */
|
||||
@media (max-width: 480px) {
|
||||
.table th, .table td {
|
||||
|
||||
Reference in New Issue
Block a user