feat: complete UI redesign with DaisyUI + Tailwind CSS v4

Design system overhaul using DaisyUI v5 on Tailwind CSS v4:

- Custom 'ohmstream' dark theme with orange primary (#FF9F1C),
  magenta secondary, gold accent matching existing palette
- Tailwind CSS-first config (input.css source, style.css built output)
- DaisyUI components: navbar, drawer, cards, badges, alerts, tables,
  progress bars, tabs, toggles, stats, form controls, tooltips
- Mobile-first responsive layout with drawer navigation
- Eliminated ~500+ lines of embedded CSS across 15+ template files
- Removed all inline style spam from admin_panel and settings_section
- Preserved all HTMX triggers, Alpine.js state, and Jinja2 logic
- Updated auth-ui.js for DaisyUI tab-active class compatibility

Build: npm run build:css (minified) / npm run watch:css (dev)
This commit is contained in:
root
2026-04-11 19:46:52 +00:00
parent 87f245d3fc
commit 4101d98a41
28 changed files with 2534 additions and 2808 deletions
+34
View File
@@ -0,0 +1,34 @@
@import "tailwindcss";
@plugin "daisyui";
@plugin "daisyui/theme" {
name: "ohmstream";
default: true;
prefersdark: false;
color-scheme: dark;
--color-base-100: oklch(0.15 0.01 260); /* #1a1c20 - main bg */
--color-base-200: oklch(0.18 0.01 260); /* #202327 - card bg */
--color-base-300: oklch(0.22 0.01 260); /* #2a2d32 - elevated */
--color-base-content: oklch(0.93 0.01 80); /* #eae8e4 - text */
--color-primary: oklch(0.72 0.16 65); /* #FF9F1C - orange */
--color-primary-content: oklch(0.18 0.02 65); /* #1a1400 */
--color-secondary: oklch(0.65 0.12 310); /* #e05faa - magenta */
--color-secondary-content: oklch(0.95 0 0);
--color-accent: oklch(0.78 0.14 75); /* #FFBF69 - gold */
--color-accent-content: oklch(0.18 0.02 75);
--color-neutral: oklch(0.25 0.01 260); /* #292b30 */
--color-neutral-content: oklch(0.9 0.01 80);
--color-info: oklch(0.65 0.15 250); /* #3b7ddd */
--color-success: oklch(0.65 0.14 155); /* #2d936c */
--color-warning: oklch(0.75 0.16 75); /* #f0a500 */
--color-error: oklch(0.6 0.2 25); /* #e63946 */
--color-error-content: oklch(0.95 0 0);
--radius-selector: 0.5rem;
--radius-field: 0.375rem;
--radius-box: 0.5rem;
--size-selector: 0.25rem;
--size-field: 0.25rem;
--border: 1px;
--depth: 1;
--noise: 0;
}
+2 -1185
View File
File diff suppressed because one or more lines are too long
+12 -8
View File
@@ -104,19 +104,23 @@ function switchTab(tab) {
const tabs = document.querySelectorAll('.auth-tab');
const forms = document.querySelectorAll('.auth-form');
tabs.forEach(t => t.classList.remove('active'));
forms.forEach(f => f.classList.remove('active'));
// Remove active states — DaisyUI uses tab-active on tabs, hidden on forms
tabs.forEach(t => t.classList.remove('tab-active'));
forms.forEach(f => f.classList.add('hidden'));
if (tab === 'login') {
tabs[0].classList.add('active');
document.getElementById('loginForm').classList.add('active');
tabs[0].classList.add('tab-active');
document.getElementById('loginForm').classList.remove('hidden');
} else {
tabs[1].classList.add('active');
document.getElementById('registerForm').classList.add('active');
tabs[1].classList.add('tab-active');
document.getElementById('registerForm').classList.remove('hidden');
}
document.getElementById('authError').classList.remove('show');
document.getElementById('authSuccess').classList.remove('show');
// Hide alerts on tab switch
const authError = document.getElementById('authError');
const authSuccess = document.getElementById('authSuccess');
if (authError) authError.classList.add('hidden');
if (authSuccess) authSuccess.classList.add('hidden');
}
window.authUi = {