Files
vyndr/src/services/shareCards/tokens.js
T

65 lines
1.6 KiB
JavaScript

/**
* 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 };