Files
psysonic/src/styles/themes/v-tactical.css
T
Frank Stellmacher 45a6a18849 refactor(styles): split theme.css into per-theme files (#656)
theme.css (16138 LOC) → 122 per-section files in src/styles/themes/ +
an index.css that imports them in original cascade order.

Concatenating all files via index.css reproduces the original byte stream
(+1 trailing newline, cosmetic).

Each top-level section header in theme.css (matching /^\/\* ─{3,}/)
becomes its own file, slugged from the header text (or the [data-theme]
selector found in the body when the header was a banner). Pure-separator
headers fold into the previous section so they don't create empty files.

Generated via /tmp/split-theme-css.mjs.
2026-05-13 19:00:50 +02:00

85 lines
2.4 KiB
CSS

/* ─── V-Tactical ─── */
[data-theme='v-tactical'] {
color-scheme: dark;
--select-arrow: url("data:image/svg+xml;charset=US-ASCII,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23708599%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%3E%3Cpolyline%20points%3D%226%209%2012%2015%2018%209%22%3E%3C%2Fpolyline%3E%3C%2Fsvg%3E");
--ctp-crust: #090c0e;
--ctp-mantle: #0d1114;
--ctp-base: #161c22;
--ctp-surface0: #1f2830;
--ctp-surface1: #2a3640;
--ctp-surface2: #3a4a58;
--ctp-overlay0: #526371;
--ctp-overlay1: #708599;
--ctp-overlay2: #8da4b8;
--ctp-text: #e1e9ef;
--ctp-subtext1: #b0c1d1;
--ctp-subtext0: #8da4b8;
--ctp-mauve: #ff8a00;
--ctp-lavender: #ffaa45;
--ctp-pink: #bf616a;
--ctp-flamingo: #d08770;
--ctp-rosewater: #e1e9ef;
--ctp-green: #a3be8c;
--ctp-teal: #88c0d0;
--ctp-sky: #81a1c1;
--ctp-blue: #5e81ac;
--ctp-sapphire: #5e81ac;
--ctp-yellow: #ebcb8b;
--ctp-peach: #d08770;
--ctp-maroon: #bf616a;
--ctp-red: #bf616a;
--bg-app: #161c22;
--bg-sidebar: #0d1114;
--bg-card: #1f2830;
--bg-hover: rgba(255, 138, 0, 0.1);
--bg-player: #090c0e;
--bg-glass: rgba(13, 17, 20, 0.85);
--accent: #ff8a00;
--accent-dim: rgba(255, 138, 0, 0.15);
--accent-glow: rgba(255, 138, 0, 0.4);
--text-primary: #e1e9ef;
--text-secondary: #b0c1d1;
--text-muted: #708599;
--border: #3a4a58;
--border-subtle: #1f2830;
--border-dropdown: #3a4a58;
--shadow-dropdown: rgba(0, 0, 0, 0.7);
--positive: #a3be8c;
--warning: #ebcb8b;
--danger: #bf616a;
--radius-sm: 1px;
--radius-md: 2px;
--radius-lg: 4px;
}
[data-theme='v-tactical'] .sidebar {
border-right: 1px solid var(--border);
}
[data-theme='v-tactical'] .player-bar {
border-top: 2px solid var(--accent);
background: linear-gradient(180deg, #0d1114 0%, #090c0e 100%);
}
[data-theme='v-tactical'] .player-track-name {
text-transform: uppercase;
letter-spacing: 1px;
font-weight: 700;
color: var(--accent);
text-shadow: 0 0 10px var(--accent-glow);
}
[data-theme='v-tactical'] .nav-link.active {
background: linear-gradient(90deg, rgba(255, 138, 0, 0.15) 0%, transparent 100%);
border-left: 3px solid var(--accent);
}
[data-theme='v-tactical'] .btn-primary {
text-transform: uppercase;
font-weight: 800;
letter-spacing: 0.5px;
}