Add a Settings area with 4 color themes (Aurora, Light, Ocean, Sunset)

Requested directly: "lets add some themeing into it now, perhaps
under the configuration, have white/black, and some more colors."
There was no existing app-wide Settings/Configuration surface -
every prior setting lived in its own panel-specific modal (Fetch
Data Settings, subtitle provider settings) - so this adds the
app's first one: a palette-icon button in the sidebar footer opens
a new Settings modal with a 2x2 grid of theme swatches.

Four themes: Aurora (the existing dark teal/green look, unchanged,
stays the default), Light (a clean white/black theme - the literal
"white/black" ask), Ocean (a cool blue-toned dark variant), and
Sunset (a warm amber-toned dark variant) - the "some more colors"
part. Picking one applies instantly via a `data-theme` attribute on
<html> and persists through new get_theme/save_theme commands
(added to settings.rs/lib.rs alongside delivery 25's movie-naming-
scheme fix), applied on every future launch by a boot-time effect
in App.tsx so it takes effect even if Settings is never reopened.

theme.css's variable set was expanded to cover every place a color
was previously hardcoded outside the existing --dock/--surface/etc.
variables, so the whole app actually re-themes instead of leaving
dark boxes behind on the Light theme: button resting/hover/active
shades, the Load-files popup background, the primary button's hover
tint, the header's gradient stops, and five levels of white-tint
row/button hover highlights (RenamePanel.css/Header.css) all moved
to new variables (--btn-bg*, --popup-bg, --accent-hover, --header-
grad-a/b, --tint-02/03/05/06/16) with theme-specific values - the
light theme in particular needed dark tints instead of white ones
for hover states to stay visible on a white background.

Verified with a new Playwright script covering: default theme on a
fresh install, the Settings modal listing all 4 themes with the
right one marked selected, clicking a theme applying it immediately
(actual computed background color and CSS variable checked, not
just the data-theme attribute) and saving it, and a previously-saved
theme applying on boot before Settings is ever opened. Screenshots
taken of all 4 themes across the main view and the Naming Scheme
editor (whose buttons/popups were part of the hardcoded-color
cleanup) to confirm visually. All prior verification suites (47
checks across naming-scheme/match-fetch/hash-files/movie-scheme),
`cargo test --workspace` (162 tests), and `npm run build` still
pass clean.
This commit is contained in:
Renamr Scaffold
2026-08-30 05:24:48 +00:00
parent 635d57f55b
commit 03390b43f1
9 changed files with 390 additions and 26 deletions
+19 -19
View File
@@ -60,7 +60,7 @@
}
.list-row:hover {
background: rgba(255, 255, 255, 0.03);
background: var(--tint-03);
}
.list-row.selected {
@@ -88,7 +88,7 @@
letter-spacing: 0.03em;
text-transform: uppercase;
color: var(--muted-text);
background: rgba(255, 255, 255, 0.05);
background: var(--tint-05);
border-radius: 999px;
padding: 2px 8px;
}
@@ -114,17 +114,17 @@
justify-content: center;
border-radius: 8px;
border: 1px solid var(--surface-deep);
background: #172a31;
background: var(--btn-bg);
color: var(--text);
cursor: pointer;
}
.list-icon-button:hover {
background: #203941;
background: var(--btn-bg-hover);
}
.list-icon-button:active {
background: #28515a;
background: var(--btn-bg-active);
}
.list-icon-button:disabled {
@@ -147,7 +147,7 @@
flex-direction: column;
min-width: 150px;
padding: 4px;
background: #16262d;
background: var(--popup-bg);
border: 1px solid var(--surface-deep);
border-radius: 10px;
box-shadow: 0 8px 24px rgba(0, 0, 0, 0.35);
@@ -197,7 +197,7 @@
justify-content: center;
border-radius: 10px;
border: 1px solid var(--surface-deep);
background: #172a31;
background: var(--btn-bg);
color: var(--text);
font-size: 13px;
font-weight: 600;
@@ -206,7 +206,7 @@
}
.action-button:hover {
background: #203941;
background: var(--btn-bg-hover);
}
.action-button.primary {
@@ -217,7 +217,7 @@
}
.action-button.primary:hover {
background: #70e3bb;
background: var(--accent-hover);
}
.format-editor {
@@ -264,7 +264,7 @@
.format-hint code,
.format-editor label code {
background: rgba(255, 255, 255, 0.06);
background: var(--tint-06);
border-radius: 4px;
padding: 1px 5px;
font-family: ui-monospace, "SF Mono", monospace;
@@ -307,7 +307,7 @@
}
.format-field-chip {
background: rgba(255, 255, 255, 0.06);
background: var(--tint-06);
border: none;
border-radius: 4px;
padding: 2px 6px;
@@ -319,7 +319,7 @@
}
.format-field-chip:hover {
background: rgba(255, 255, 255, 0.16);
background: var(--tint-16);
}
.format-field-chip:active {
@@ -389,7 +389,7 @@
}
.modal-plan-row:hover {
background: rgba(255, 255, 255, 0.03);
background: var(--tint-03);
}
.modal-plan-old {
@@ -431,7 +431,7 @@
}
.modal-plan-remove:hover {
background: rgba(255, 255, 255, 0.06);
background: var(--tint-06);
color: #ff8a8a;
}
@@ -558,7 +558,7 @@
.history-batch {
padding: 8px;
border-radius: 8px;
background: rgba(255, 255, 255, 0.02);
background: var(--tint-02);
}
.history-batch-header {
@@ -583,7 +583,7 @@
font-size: 10.5px;
font-weight: 700;
color: var(--muted-text);
background: rgba(255, 255, 255, 0.05);
background: var(--tint-05);
border-radius: 999px;
padding: 2px 8px;
}
@@ -612,7 +612,7 @@
}
.preset-row:hover {
background: rgba(255, 255, 255, 0.03);
background: var(--tint-03);
}
.preset-slot-badge {
@@ -623,7 +623,7 @@
align-items: center;
justify-content: center;
border-radius: 6px;
background: rgba(255, 255, 255, 0.06);
background: var(--tint-06);
color: var(--aurora-green);
font-size: 11.5px;
font-weight: 700;
@@ -646,7 +646,7 @@
}
.preset-expression:hover {
background: rgba(255, 255, 255, 0.06);
background: var(--tint-06);
}
.preset-expression:disabled {