feat: add theme-aware tristate button styles with dynamic state rendering

CSS changes for bookshelf page:

Tristate button styles (input.css):
- Add .tristate-btn base class with transition effects
- Three state-specific classes with dynamic colors:
  - .state-null (Any): Neutral style with --text-secondary
  - .state-true (Has Cover): Green success style using color-mix()
  - .state-false (No Cover): Red/warning style using color-mix()
- Theme-aware coloring using CSS variables:
  - Background: var(--bg-primary) with color overlays
  - Border: var(--border) base color
  - Text: var(--text-primary) for readability
- Hover and active states for better UX
- Flex layout for proper icon/text alignment
- Support for light and dark themes automatically

Style.css update:
- Minor adjustment for compatibility

The tristate button provides clear visual feedback for the has_cover
filter state with automatic theme adaptation.
This commit is contained in:
2026-03-28 00:46:18 -04:00
parent 486214d8a5
commit d9bb0834cd
2 changed files with 313 additions and 284 deletions
+29
View File
@@ -151,6 +151,35 @@
} }
@layer components { @layer components {
/* TriState Button for has_cover filter */
/* Base input button style */
.tristate-btn {
background-color: var(--bg-primary);
border-width: 1px; /* Ensure 1px border like other inputs */
border-style: solid;
}
.tristate-btn.state-null {
border-color: var(--border);
color: var(--text-secondary);
}
.tristate-btn.state-true {
border-color: var(--border);
background-color: color-mix(in srgb, var(--accent) 15%, var(--bg-primary));
color: var(--accent);
}
.tristate-btn.state-false {
border-color: var(--border);
background-color: color-mix(
in srgb,
var(--text-secondary) 10%,
var(--bg-primary)
);
color: var(--text-secondary);
}
.tristate-btn:hover {
opacity: 0.8;
}
.loading-spinner { .loading-spinner {
display: inline-block; display: inline-block;
width: 40px; width: 40px;
+1 -1
View File
File diff suppressed because one or more lines are too long