feat(#29): Arcade Neon design system — visual overhaul completo

Implementa o sistema visual Arcade Neon do neon-handoff/ em todo o app:

- tokens.css: tokens --fc-*, utilities (fc-pixel/mono/body/glow), form inputs/buttons globais
- AppHud.vue: HUD persistente com LV/XP/META + nav chips por rota
- BottomNav.vue: nav mobile com 5 rotas
- NeonPanel.vue, CharacterSprite.vue, XPBar.vue, HUDStat.vue: componentes base
- MonthSwitcher.vue, LevelUpModal.vue
- HomeView, CharacterView, TransactionsView, ImportView, CategoriesView,
  AccountsView, SettingsView: reescritos com Arcade Neon
- sprites PNG (lv01–lv15) + sprite-data.json: cosméticos com temas de cor
- game.ts: equippedTheme getter para merge de cores do cosmético equipado
- 008_cosmetics.sql: seeds alinhados com sprite-data.json

Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
This commit is contained in:
2026-05-26 22:53:41 -03:00
co-authored by Claude Sonnet 4.6
parent 91ab9c4360
commit c327d5c970
38 changed files with 2576 additions and 911 deletions
+19 -29
View File
@@ -1,39 +1,29 @@
<script setup lang="ts">
import { onMounted } from 'vue'
import { useGameStore } from '@/stores/game'
import { useDashboardStore } from '@/stores/dashboard'
import AppHud from '@/components/AppHud.vue'
import BottomNav from '@/components/BottomNav.vue'
const gameStore = useGameStore()
const dashStore = useDashboardStore()
onMounted(() => {
gameStore.fetchSummary()
dashStore.fetch(new Date().toISOString().slice(0, 7))
})
</script>
<template>
<header class="app-header">
<span class="app-title">💰 Financeiro Carvalho</span>
<nav class="app-nav">
<RouterLink to="/">Início</RouterLink>
<RouterLink to="/categorias">Categorias</RouterLink>
<RouterLink to="/transacoes">Transações</RouterLink>
<RouterLink to="/importar">Importar</RouterLink>
<RouterLink to="/contas">Contas</RouterLink>
<RouterLink to="/personagem">Personagem</RouterLink>
<RouterLink to="/configuracoes">Configurações</RouterLink>
</nav>
</header>
<RouterView />
<div class="fc-app">
<AppHud />
<RouterView />
<BottomNav />
</div>
</template>
<style>
*, *::before, *::after { box-sizing: border-box; }
body { margin: 0; font-family: system-ui, sans-serif; background: #f8fafc; color: #1e293b; }
a { color: inherit; text-decoration: none; }
</style>
<style scoped>
.app-header {
display: flex;
align-items: center;
gap: 2rem;
padding: 0.75rem 1.5rem;
background: #1e293b;
color: #f8fafc;
}
.app-title { font-weight: 700; font-size: 1rem; }
.app-nav { display: flex; gap: 1.25rem; }
.app-nav a { font-size: 0.875rem; opacity: 0.8; }
.app-nav a.router-link-active { opacity: 1; text-decoration: underline; }
button { font-family: inherit; }
</style>