Card tooltips now show what a card represents *as* an Obstacle (the rulebook obstacle table entry) in addition to its suit theme, which is relevant when challenging another Pi-Rat. The obstacle tables are served from the backend via GET /api/obstacles (single source of truth in cards.py) and cached client-side in cards.js, with a retry so a transient first-load failure doesn't silently disable the tooltips. Enriched everywhere cards appear in the challenge flow: hand/board cards (Card.svelte), PvP defend buttons and the temporary-obstacle line (ChallengePanel), and the duel card selector, which also shows an inline description of what the chosen card becomes as an Obstacle. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
23 lines
643 B
JavaScript
23 lines
643 B
JavaScript
import { mount } from 'svelte'
|
|
|
|
// Self-hosted fonts (bundled by Vite — no external font CDN at runtime)
|
|
import '@fontsource/pirata-one'
|
|
import '@fontsource/alegreya-sc/500.css'
|
|
import '@fontsource/alegreya-sc/700.css'
|
|
import '@fontsource/alegreya-sans/400.css'
|
|
import '@fontsource/alegreya-sans/500.css'
|
|
import '@fontsource/alegreya-sans/700.css'
|
|
|
|
import './app.css'
|
|
import App from './App.svelte'
|
|
import { loadObstacleTable } from './lib/cards'
|
|
|
|
// Warm the obstacle-table cache so card tooltips can describe cards as Obstacles
|
|
loadObstacleTable()
|
|
|
|
const app = mount(App, {
|
|
target: document.getElementById('app'),
|
|
})
|
|
|
|
export default app
|