/** * Pet presentation config. * * Vector mode (default) draws a procedurally-rendered mascot on a DPR-aware * canvas, so it is crisp at any scale and needs no asset. Set VECTOR=false to * fall back to a sprite sheet (SPRITE path/URL, grid, and FPS below). */ export const VECTOR = true /** Rendered size of the pet, in CSS pixels (canvas scales by devicePixelRatio). */ export const SIZE = 80 /** * Overall opacity (0..1). Below 1 the content behind the pet shows through, * so it reads as a background decoration that never obscures the UI. */ export const OPACITY = 0.8 /** * Palette for the vector mascot. Light/dark aware via CSS variables when the * shell exposes them, with a soft pastel fallback for the standalone build. */ export const BODY_TOP = '#dbe7ff' export const BODY_BOTTOM = '#9fb8e8' export const BODY_EDGE = 'rgba(0, 0, 0, 0.05)' export const CHEEK = 'rgba(255, 150, 170, 0.35)' export const MOUTH = '#5a6b8c' export const PUPIL = '#2b3245' /** Pointer-follow spring. Higher STIFFNESS snaps faster; DAMPING<1 gives a * small overshoot then settle so it reads as weight, not a magnet. */ export const STIFFNESS = 0.06 export const DAMPING = 0.84 /* ---- Sprite-sheet fallback (used only when VECTOR=false) ---- */ /** Sprite-sheet asset path or URL; keep empty to draw the vector instead. */ export const SPRITE = '' // e.g. '/assets/pet.png' /** Number of columns in the sprite sheet. */ export const FRAME_COLS = 4 /** Number of rows in the sprite sheet. */ export const FRAME_ROWS = 4 /** Width of one frame, in pixels. */ export const FRAME_W = 128 /** Height of one frame, in pixels. */ export const FRAME_H = 128 /** Animation frames per second. */ export const FPS = 12