Add custom dark theme with Fichero brand blue accent
Replace Bootstrap default dark grays and hardcoded colors with a design-token system: surface levels, ink hierarchy, logo blue (#07addf) as the single accent, mark-feed red for print indicators. Card browsers get rounded corners, subtle borders, and hover-reveal action buttons.
This commit is contained in:
@@ -548,14 +548,14 @@
|
|||||||
|
|
||||||
<style>
|
<style>
|
||||||
.canvas-wrapper {
|
.canvas-wrapper {
|
||||||
border: 1px solid rgba(0, 0, 0, 0.4);
|
border: 1px solid var(--border-standard);
|
||||||
background-color: rgba(60, 55, 63, 0.5);
|
background-color: var(--surface-1);
|
||||||
}
|
}
|
||||||
.canvas-wrapper.print-start-left {
|
.canvas-wrapper.print-start-left {
|
||||||
border-left: 2px solid #ff4646;
|
border-left: 2px solid var(--mark-feed);
|
||||||
}
|
}
|
||||||
.canvas-wrapper.print-start-top {
|
.canvas-wrapper.print-start-top {
|
||||||
border-top: 2px solid #ff4646;
|
border-top: 2px solid var(--mark-feed);
|
||||||
}
|
}
|
||||||
.canvas-wrapper canvas {
|
.canvas-wrapper canvas {
|
||||||
image-rendering: pixelated;
|
image-rendering: pixelated;
|
||||||
|
|||||||
@@ -595,14 +595,14 @@
|
|||||||
<style>
|
<style>
|
||||||
canvas {
|
canvas {
|
||||||
image-rendering: pixelated;
|
image-rendering: pixelated;
|
||||||
border: 1px solid #6d6d6d;
|
border: 1px solid var(--border-emphasis);
|
||||||
max-width: 100%;
|
max-width: 100%;
|
||||||
}
|
}
|
||||||
canvas.print-start-left {
|
canvas.print-start-left {
|
||||||
border-left: 2px solid #ff4646;
|
border-left: 2px solid var(--mark-feed);
|
||||||
}
|
}
|
||||||
canvas.print-start-top {
|
canvas.print-start-top {
|
||||||
border-top: 2px solid #ff4646;
|
border-top: 2px solid var(--mark-feed);
|
||||||
}
|
}
|
||||||
.progress-bar {
|
.progress-bar {
|
||||||
transition: none;
|
transition: none;
|
||||||
|
|||||||
@@ -89,34 +89,52 @@
|
|||||||
.card-wrapper {
|
.card-wrapper {
|
||||||
width: 96px;
|
width: 96px;
|
||||||
height: 96px;
|
height: 96px;
|
||||||
|
border-radius: var(--radius-sm);
|
||||||
|
transition: background-color 0.15s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.card-wrapper:hover {
|
||||||
|
background-color: var(--surface-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
.card {
|
.card {
|
||||||
background-color: white;
|
background-color: var(--surface-2);
|
||||||
|
border: 1px solid var(--border-standard);
|
||||||
|
border-radius: var(--radius-sm);
|
||||||
position: relative;
|
position: relative;
|
||||||
|
overflow: hidden;
|
||||||
}
|
}
|
||||||
|
|
||||||
.card > .remove {
|
.card > .remove {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 0;
|
top: 0;
|
||||||
right: 0;
|
right: 0;
|
||||||
|
opacity: 0;
|
||||||
|
transition: opacity 0.15s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.card-wrapper:hover .remove {
|
||||||
|
opacity: 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
.card > .remove > button {
|
.card > .remove > button {
|
||||||
padding: 0;
|
padding: 0;
|
||||||
line-height: 100%;
|
line-height: 100%;
|
||||||
|
font-size: 0.75rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.card > .label {
|
.card > .label {
|
||||||
background-color: rgba(255, 255, 255, 0.8);
|
color: var(--ink-secondary);
|
||||||
color: black;
|
font-size: 0.7rem;
|
||||||
border-radius: 8px;
|
line-height: 1.2;
|
||||||
|
text-align: center;
|
||||||
|
padding: 2px 4px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.card.print-start-left {
|
.card.print-start-left {
|
||||||
border-left: 2px solid #ff4646;
|
border-left: 2px solid var(--mark-feed);
|
||||||
}
|
}
|
||||||
.card.print-start-top {
|
.card.print-start-top {
|
||||||
border-top: 2px solid #ff4646;
|
border-top: 2px solid var(--mark-feed);
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -105,11 +105,20 @@
|
|||||||
.card-wrapper {
|
.card-wrapper {
|
||||||
width: 96px;
|
width: 96px;
|
||||||
height: 96px;
|
height: 96px;
|
||||||
|
border-radius: var(--radius-sm);
|
||||||
|
transition: background-color 0.15s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.card-wrapper:hover {
|
||||||
|
background-color: var(--surface-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
.card {
|
.card {
|
||||||
background-color: white;
|
background-color: var(--surface-2);
|
||||||
|
border: 1px solid var(--border-standard);
|
||||||
|
border-radius: var(--radius-sm);
|
||||||
position: relative;
|
position: relative;
|
||||||
|
overflow: hidden;
|
||||||
}
|
}
|
||||||
|
|
||||||
.card > .buttons {
|
.card > .buttons {
|
||||||
@@ -117,25 +126,39 @@
|
|||||||
top: 0;
|
top: 0;
|
||||||
right: 0;
|
right: 0;
|
||||||
z-index: 2;
|
z-index: 2;
|
||||||
|
opacity: 0;
|
||||||
|
transition: opacity 0.15s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.card-wrapper:hover .buttons {
|
||||||
|
opacity: 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
.card > .buttons > button {
|
.card > .buttons > button {
|
||||||
padding: 0;
|
padding: 0;
|
||||||
line-height: 100%;
|
line-height: 100%;
|
||||||
|
font-size: 0.75rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.card > .label {
|
.card > .label {
|
||||||
background-color: rgba(255, 255, 255, 0.8);
|
background-color: rgba(0, 0, 0, 0.55);
|
||||||
color: black;
|
color: var(--ink-primary);
|
||||||
border-radius: 8px;
|
border-radius: 0 0 var(--radius-sm) var(--radius-sm);
|
||||||
z-index: 1;
|
z-index: 1;
|
||||||
|
font-size: 0.7rem;
|
||||||
|
line-height: 1.2;
|
||||||
|
position: absolute;
|
||||||
|
bottom: 0;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
text-align: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
.card.print-start-left {
|
.card.print-start-left {
|
||||||
border-left: 2px solid #ff4646;
|
border-left: 2px solid var(--mark-feed);
|
||||||
}
|
}
|
||||||
.card.print-start-top {
|
.card.print-start-top {
|
||||||
border-top: 2px solid #ff4646;
|
border-top: 2px solid var(--mark-feed);
|
||||||
}
|
}
|
||||||
|
|
||||||
.card .thumbnail {
|
.card .thumbnail {
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
@import "bootstrap/scss/progress";
|
@import "bootstrap/scss/progress";
|
||||||
@import "bootstrap/scss/alert";
|
@import "bootstrap/scss/alert";
|
||||||
@import "bootstrap/scss/transitions";
|
@import "bootstrap/scss/transitions";
|
||||||
|
@import "theme";
|
||||||
@import "font";
|
@import "font";
|
||||||
|
|
||||||
body {
|
body {
|
||||||
|
|||||||
211
web/src/styles/theme.scss
Normal file
211
web/src/styles/theme.scss
Normal file
@@ -0,0 +1,211 @@
|
|||||||
|
// Fichero custom dark theme
|
||||||
|
// Pure CSS custom property overrides applied after Bootstrap loads.
|
||||||
|
|
||||||
|
// ── Design tokens ──────────────────────────────────────────────
|
||||||
|
|
||||||
|
:root {
|
||||||
|
// Surfaces (cool neutral darks)
|
||||||
|
--surface-0: #161819;
|
||||||
|
--surface-1: #1c1e20;
|
||||||
|
--surface-2: #232628;
|
||||||
|
--surface-3: #2a2d30;
|
||||||
|
|
||||||
|
// Text
|
||||||
|
--ink-primary: #e4e7eb;
|
||||||
|
--ink-secondary: #949ba4;
|
||||||
|
--ink-tertiary: #5d6670;
|
||||||
|
--ink-muted: #3a4048;
|
||||||
|
|
||||||
|
// Accent (Fichero logo blue)
|
||||||
|
--fichero: #07addf;
|
||||||
|
--fichero-hover: #0699c7;
|
||||||
|
--fichero-subtle: rgba(7, 173, 223, 0.10);
|
||||||
|
--fichero-rgb: 7, 173, 223;
|
||||||
|
|
||||||
|
// Functional (print-start indicator)
|
||||||
|
--mark-feed: #e85454;
|
||||||
|
|
||||||
|
// Semantic
|
||||||
|
--status-ok: #6bb88a;
|
||||||
|
--status-ok-rgb: 107, 184, 138;
|
||||||
|
--status-warn: #d4a24c;
|
||||||
|
--status-warn-rgb: 212, 162, 76;
|
||||||
|
--status-danger: #d45454;
|
||||||
|
--status-danger-rgb: 212, 84, 84;
|
||||||
|
|
||||||
|
// Borders
|
||||||
|
--border-standard: rgba(228, 231, 235, 0.08);
|
||||||
|
--border-soft: rgba(228, 231, 235, 0.05);
|
||||||
|
--border-emphasis: rgba(228, 231, 235, 0.14);
|
||||||
|
--border-focus: rgba(7, 173, 223, 0.5);
|
||||||
|
|
||||||
|
// Controls
|
||||||
|
--control-bg: #141617;
|
||||||
|
--control-border: rgba(228, 231, 235, 0.10);
|
||||||
|
|
||||||
|
// Radii
|
||||||
|
--radius-sm: 6px;
|
||||||
|
--radius-md: 10px;
|
||||||
|
--radius-lg: 14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ── Bootstrap dark-mode overrides ──────────────────────────────
|
||||||
|
|
||||||
|
[data-bs-theme="dark"] {
|
||||||
|
// Body
|
||||||
|
--bs-body-bg: var(--surface-0);
|
||||||
|
--bs-body-bg-rgb: 22, 24, 25;
|
||||||
|
--bs-body-color: var(--ink-primary);
|
||||||
|
--bs-body-color-rgb: 228, 231, 235;
|
||||||
|
|
||||||
|
// Secondary / tertiary
|
||||||
|
--bs-secondary-bg: var(--surface-1);
|
||||||
|
--bs-secondary-color: var(--ink-secondary);
|
||||||
|
--bs-tertiary-bg: var(--surface-2);
|
||||||
|
--bs-tertiary-color: var(--ink-tertiary);
|
||||||
|
|
||||||
|
// Borders
|
||||||
|
--bs-border-color: var(--border-standard);
|
||||||
|
--bs-border-color-translucent: var(--border-standard);
|
||||||
|
|
||||||
|
// Theme colors
|
||||||
|
--bs-primary: var(--fichero);
|
||||||
|
--bs-primary-rgb: var(--fichero-rgb);
|
||||||
|
--bs-danger: var(--status-danger);
|
||||||
|
--bs-danger-rgb: var(--status-danger-rgb);
|
||||||
|
--bs-success: var(--status-ok);
|
||||||
|
--bs-success-rgb: var(--status-ok-rgb);
|
||||||
|
--bs-warning: var(--status-warn);
|
||||||
|
--bs-warning-rgb: var(--status-warn-rgb);
|
||||||
|
|
||||||
|
// Subtle backgrounds (toasts, alerts)
|
||||||
|
--bs-primary-bg-subtle: var(--fichero-subtle);
|
||||||
|
--bs-primary-text-emphasis: var(--fichero);
|
||||||
|
--bs-danger-bg-subtle: rgba(212, 84, 84, 0.10);
|
||||||
|
--bs-danger-border-subtle: rgba(212, 84, 84, 0.25);
|
||||||
|
--bs-danger-text-emphasis: #e87070;
|
||||||
|
--bs-success-bg-subtle: rgba(107, 184, 138, 0.10);
|
||||||
|
--bs-success-border-subtle: rgba(107, 184, 138, 0.25);
|
||||||
|
--bs-success-text-emphasis: #85d0a4;
|
||||||
|
--bs-warning-bg-subtle: rgba(212, 162, 76, 0.10);
|
||||||
|
--bs-warning-border-subtle: rgba(212, 162, 76, 0.25);
|
||||||
|
--bs-warning-text-emphasis: #e0b86a;
|
||||||
|
|
||||||
|
// Links
|
||||||
|
--bs-link-color: var(--fichero);
|
||||||
|
--bs-link-color-rgb: var(--fichero-rgb);
|
||||||
|
--bs-link-hover-color: var(--fichero-hover);
|
||||||
|
|
||||||
|
// Focus ring
|
||||||
|
--bs-focus-ring-color: var(--border-focus);
|
||||||
|
|
||||||
|
// Border radii
|
||||||
|
--bs-border-radius: var(--radius-sm);
|
||||||
|
--bs-border-radius-lg: var(--radius-md);
|
||||||
|
--bs-border-radius-xl: var(--radius-lg);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ── Button overrides ───────────────────────────────────────────
|
||||||
|
|
||||||
|
.btn-primary {
|
||||||
|
--bs-btn-bg: var(--fichero);
|
||||||
|
--bs-btn-border-color: var(--fichero);
|
||||||
|
--bs-btn-color: #fff;
|
||||||
|
--bs-btn-hover-bg: var(--fichero-hover);
|
||||||
|
--bs-btn-hover-border-color: var(--fichero-hover);
|
||||||
|
--bs-btn-hover-color: #fff;
|
||||||
|
--bs-btn-active-bg: var(--fichero-hover);
|
||||||
|
--bs-btn-active-border-color: var(--fichero-hover);
|
||||||
|
--bs-btn-active-color: #fff;
|
||||||
|
--bs-btn-disabled-bg: var(--fichero);
|
||||||
|
--bs-btn-disabled-border-color: var(--fichero);
|
||||||
|
--bs-btn-disabled-color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-secondary {
|
||||||
|
--bs-btn-bg: var(--surface-2);
|
||||||
|
--bs-btn-border-color: var(--border-standard);
|
||||||
|
--bs-btn-color: var(--ink-primary);
|
||||||
|
--bs-btn-hover-bg: var(--surface-3);
|
||||||
|
--bs-btn-hover-border-color: var(--border-emphasis);
|
||||||
|
--bs-btn-hover-color: var(--ink-primary);
|
||||||
|
--bs-btn-active-bg: var(--surface-3);
|
||||||
|
--bs-btn-active-border-color: var(--border-emphasis);
|
||||||
|
--bs-btn-active-color: var(--ink-primary);
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-danger {
|
||||||
|
--bs-btn-bg: var(--status-danger);
|
||||||
|
--bs-btn-border-color: var(--status-danger);
|
||||||
|
--bs-btn-hover-bg: #c04848;
|
||||||
|
--bs-btn-hover-border-color: #c04848;
|
||||||
|
--bs-btn-active-bg: #c04848;
|
||||||
|
--bs-btn-active-border-color: #c04848;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-outline-secondary {
|
||||||
|
--bs-btn-color: var(--ink-secondary);
|
||||||
|
--bs-btn-border-color: var(--border-emphasis);
|
||||||
|
--bs-btn-hover-bg: var(--surface-2);
|
||||||
|
--bs-btn-hover-border-color: var(--border-emphasis);
|
||||||
|
--bs-btn-hover-color: var(--ink-primary);
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-light {
|
||||||
|
--bs-btn-bg: var(--surface-2);
|
||||||
|
--bs-btn-border-color: var(--border-standard);
|
||||||
|
--bs-btn-color: var(--ink-primary);
|
||||||
|
--bs-btn-hover-bg: var(--surface-3);
|
||||||
|
--bs-btn-hover-border-color: var(--border-emphasis);
|
||||||
|
--bs-btn-hover-color: var(--ink-primary);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ── Form controls ──────────────────────────────────────────────
|
||||||
|
|
||||||
|
.form-control,
|
||||||
|
.form-select {
|
||||||
|
background-color: var(--control-bg);
|
||||||
|
border-color: var(--control-border);
|
||||||
|
color: var(--ink-primary);
|
||||||
|
|
||||||
|
&:focus {
|
||||||
|
background-color: var(--control-bg);
|
||||||
|
border-color: var(--fichero);
|
||||||
|
color: var(--ink-primary);
|
||||||
|
box-shadow: 0 0 0 0.2rem var(--border-focus);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.input-group-text {
|
||||||
|
background-color: var(--surface-2);
|
||||||
|
border-color: var(--control-border);
|
||||||
|
color: var(--ink-secondary);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ── Dropdowns ──────────────────────────────────────────────────
|
||||||
|
|
||||||
|
.dropdown-menu {
|
||||||
|
--bs-dropdown-bg: var(--surface-2);
|
||||||
|
--bs-dropdown-border-color: var(--border-emphasis);
|
||||||
|
--bs-dropdown-link-color: var(--ink-primary);
|
||||||
|
--bs-dropdown-link-hover-bg: var(--surface-3);
|
||||||
|
--bs-dropdown-link-hover-color: var(--ink-primary);
|
||||||
|
--bs-dropdown-link-active-bg: var(--fichero-subtle);
|
||||||
|
--bs-dropdown-link-active-color: var(--fichero);
|
||||||
|
border-radius: var(--radius-lg);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ── Modals ─────────────────────────────────────────────────────
|
||||||
|
|
||||||
|
.modal-content {
|
||||||
|
--bs-modal-bg: var(--surface-3);
|
||||||
|
--bs-modal-border-color: var(--border-emphasis);
|
||||||
|
border-radius: var(--radius-lg);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ── Progress bar ───────────────────────────────────────────────
|
||||||
|
|
||||||
|
.progress {
|
||||||
|
--bs-progress-bg: var(--surface-1);
|
||||||
|
--bs-progress-bar-bg: var(--fichero);
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user