- theme.css: CSS custom properties for both modes (surface, accent, text, sev, badge); .dark class override; smooth 0.15s transitions - uno.config.ts: colors now reference var() — all semantic classes auto-switch with the .dark class; dark: 'class' strategy enabled - main.ts: apply saved preference (localStorage ts-theme) or prefers-color-scheme before first paint to prevent flash - App.vue: ☾/☀ toggle button persists choice to localStorage - IncidentsView: severityStyle() uses badge CSS variables via inline style — fixes /opacity modifier incompatibility with CSS vars
20 lines
651 B
TypeScript
20 lines
651 B
TypeScript
import { createApp } from 'vue'
|
|
import { createPinia } from 'pinia'
|
|
import 'virtual:uno.css'
|
|
import '@fontsource/jetbrains-mono/400.css'
|
|
import '@fontsource/jetbrains-mono/600.css'
|
|
import './style/theme.css'
|
|
import App from './App.vue'
|
|
import router from './router'
|
|
|
|
// Apply saved theme or OS preference before first paint to avoid flash
|
|
const saved = localStorage.getItem('ts-theme')
|
|
const prefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches
|
|
if (saved === 'dark' || (!saved && prefersDark)) {
|
|
document.documentElement.classList.add('dark')
|
|
}
|
|
|
|
const app = createApp(App)
|
|
app.use(createPinia())
|
|
app.use(router)
|
|
app.mount('#app')
|