From 1af9b1e77a40616de32e195810fd786e0a19f8f4 Mon Sep 17 00:00:00 2001 From: John O'Keefe Date: Mon, 2 Feb 2026 10:27:35 -0500 Subject: [PATCH] Add centralized theme CSS variables to input.css Move theme CSS custom properties from individual templates to centralized location in web/static/input.css using Tailwind @layer directives for better maintainability and to eliminate duplicate code across templates. --- web/static/input.css | 184 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 183 insertions(+), 1 deletion(-) diff --git a/web/static/input.css b/web/static/input.css index 75575df..96b5a09 100644 --- a/web/static/input.css +++ b/web/static/input.css @@ -2,4 +2,186 @@ @tailwind components; @tailwind utilities; -/* Custom theme variables are handled in CSS custom properties in templates */ \ No newline at end of file +@layer base { + :root { + --bg-primary: #1a1b26; + --bg-secondary: #16161e; + --text-primary: #a9b1d6; + --text-secondary: #565f89; + --accent: #7aa2f7; + --border: #414868; + } + + .theme-tokyo-night { + --bg-primary: #1a1b26; + --bg-secondary: #16161e; + --text-primary: #a9b1d6; + --text-secondary: #565f89; + --accent: #7aa2f7; + --border: #414868; + } + + .theme-dracula { + --bg-primary: #282a36; + --bg-secondary: #21222c; + --text-primary: #f8f8f2; + --text-secondary: #6272a4; + --accent: #bd93f9; + --border: #44475a; + } + + .theme-nord { + --bg-primary: #2e3440; + --bg-secondary: #3b4252; + --text-primary: #eceff4; + --text-secondary: #5e81ac; + --accent: #88c0d0; + --border: #4c566a; + } + + .theme-solarized-dark { + --bg-primary: #002b36; + --bg-secondary: #073642; + --text-primary: #93a1a1; + --text-secondary: #586e75; + --accent: #2aa198; + --border: #586e75; + } + + .theme-monokai { + --bg-primary: #272822; + --bg-secondary: #3e3d32; + --text-primary: #f8f8f2; + --text-secondary: #75715e; + --accent: #a6e22e; + --border: #49483e; + } + + .theme-one-dark-pro { + --bg-primary: #282c34; + --bg-secondary: #21252b; + --text-primary: #abb2bf; + --text-secondary: #5c6370; + --accent: #61dafb; + --border: #3e4451; + } + + .theme-material-dark { + --bg-primary: #263238; + --bg-secondary: #37474f; + --text-primary: #eeffff; + --text-secondary: #546e7a; + --accent: #80cbc4; + --border: #455a64; + } + + .theme-catppuccin-mocha { + --bg-primary: #1e1e2e; + --bg-secondary: #181825; + --text-primary: #cdd6f4; + --text-secondary: #bac2de; + --accent: #f38ba8; + --border: #313244; + } + + .theme-catppuccin-macchiato { + --bg-primary: #24273a; + --bg-secondary: #1e2030; + --text-primary: #cad3f5; + --text-secondary: #b8c0e0; + --accent: #f0c6c6; + --border: #363a4f; + } + + .theme-catppuccin-frappe { + --bg-primary: #303446; + --bg-secondary: #292c3c; + --text-primary: #c6d0f5; + --text-secondary: #b5bfe2; + --accent: #f2d5cf; + --border: #414559; + } + + .theme-catppuccin-latte { + --bg-primary: #eff1f5; + --bg-secondary: #e6e9ef; + --text-primary: #4c4f69; + --text-secondary: #5c5f77; + --accent: #d20f39; + --border: #bcc0cc; + } + + .theme-wood-light { + --bg-primary: rgba(222, 184, 135, 0.9); + --bg-secondary: rgba(210, 166, 121, 0.95); + --text-primary: #2c1810; + --text-secondary: #5a3a2a; + --accent: #8b5a2b; + --border: #6b4423; + } + + .theme-wood-dark { + --bg-primary: rgba(139, 115, 85, 0.9); + --bg-secondary: rgba(107, 83, 68, 0.95); + --text-primary: #f5e6d3; + --text-secondary: #d4c4b0; + --accent: #deb887; + --border: #5a4636; + } + + .theme-wood-mahogany { + --bg-primary: rgba(160, 82, 45, 0.9); + --bg-secondary: rgba(139, 69, 19, 0.95); + --text-primary: #ffe4c4; + --text-secondary: #daa520; + --accent: #f4a460; + --border: #8b4513; + } + + body { + background-color: var(--bg-primary); + color: var(--text-primary); + } + + .card { + background-color: var(--bg-secondary); + border-color: var(--border); + } + + .btn-primary { + background-color: var(--accent); + color: var(--bg-primary); + } + + .btn-primary:hover { + opacity: 0.8; + } +} + +@layer components { + .loading-spinner { + display: inline-block; + width: 40px; + height: 40px; + border: 4px solid var(--border); + border-top-color: var(--accent); + border-radius: 50%; + animation: spin 1s linear infinite; + } + + @keyframes spin { + to { transform: rotate(360deg); } + } + + .status-pending { background-color: #f59e0b; color: white; } + .status-processing { background-color: #3b82f6; color: white; } + .status-completed { background-color: #10b981; color: white; } + .status-failed { background-color: #ef4444; color: white; } + + .priority-1 { background-color: #ef4444; color: white; } + .priority-2 { background-color: #f97316; color: white; } + .priority-3 { background-color: #f59e0b; color: white; } + .priority-5 { background-color: #10b981; color: white; } + .priority-7 { background-color: #6b7280; color: white; } + .priority-10 { background-color: #9ca3af; color: white; } +} \ No newline at end of file