/** * Shared design tokens for SVG card rendering. * Mirror of the values in web/src/app/globals.css so social-card output * matches the in-app brand exactly. */ const COLORS = Object.freeze({ bg0: '#06060B', bg1: '#0E0E16', bg2: '#15151F', bg3: '#1A1A26', text0: '#E8E8F0', text1: '#7A7A8E', text2: '#4A4A5E', border: '#1E1E2E', borderHi: '#2A2A3E', acc0: '#0F3D2E', acc1: '#1A5A42', gradeAplus: '#00FFB8', gradeA: '#00D4A0', gradeB: '#4A9EFF', gradeC: '#FFB347', gradeD: '#FF5252', crimson: '#8B0000', nba: '#E94B3C', mlb: '#1E90FF', wnba: '#F7944A', nfl: '#013369', nhl: '#A0A0B0', tennis: '#C5B358', mma: '#D4AF37', boxing: '#8B0000', golf: '#2E7D32', }); const FONTS = Object.freeze({ mono: "'IBM Plex Mono','JetBrains Mono','SF Mono',ui-monospace,monospace", sans: "'Instrument Sans','Helvetica Neue',-apple-system,sans-serif", }); const SPORT_LABEL_COLOR = Object.freeze({ nba: COLORS.nba, wnba: COLORS.wnba, mlb: COLORS.mlb, nfl: COLORS.nfl, nhl: COLORS.nhl, tennis: COLORS.tennis, mma: COLORS.mma, boxing: COLORS.boxing, golf: COLORS.golf, }); function gradeColor(grade) { if (!grade) return COLORS.text1; const head = String(grade).trim().toUpperCase(); if (head.startsWith('A+')) return COLORS.gradeAplus; if (head.startsWith('A')) return COLORS.gradeA; if (head.startsWith('B')) return COLORS.gradeB; if (head.startsWith('C')) return COLORS.gradeC; if (head.startsWith('D') || head.startsWith('F')) return COLORS.gradeD; return COLORS.text1; } module.exports = { COLORS, FONTS, SPORT_LABEL_COLOR, gradeColor };