import type { Background, InkMode } from '~~/types' // Charte Figures Libres — valeurs mesurées dans gabarit_book_v3.pdf et // reprises du thème Grav figureslibres-v2 (scss/configuration/_variable.scss). export const FL_INK = '#0e1229' export const FL_BASE = '#f5f5f5' /** Palette proposée pour la couleur du filet/bandeau des pages projet * (magenta et vert du gabarit + roses/jaune/menthe du site). */ export const BAND_COLORS = [ '#ec008c', // magenta 100% (publique) '#8bd261', // vert (sociale) '#ffaeab', // rose (publique, site) '#feff74', // jaune pâle (culturelle, site) '#fabbde', // rose (commanditaires, site) '#4bffc9', // menthe (projets, site) ] /** Libellé court de la pastille d'utilité (sans le mot « Utilité »). */ export const CATEGORY_BADGE: Record = { publique: 'Publique', sociale: 'Social', culturelle: 'Culturel', } /** Classe CSS de la fonte de titre par catégorie (mixins du thème Grav). */ export const CATEGORY_TITLE_CLASS: Record = { publique: 'fl-font-publique', sociale: 'fl-font-sociale', culturelle: 'fl-font-culturelle', } /** Aplat unique du mode « teinté » (beige de la charte). */ export const TINT_COLOR = '#efece3' function luminance(hex: string): number { const m = hex.replace('#', '') if (m.length < 6) return 1 const [r, g, b] = [0, 2, 4].map(i => parseInt(m.slice(i, i + 2), 16) / 255) return 0.2126 * r + 0.7152 * g + 0.0722 * b } /** Encre lisible sur un fond donné — le gabarit imprime en noir/blanc purs. */ export function inkOn(color: string, ink: InkMode = 'auto'): string { if (ink === 'black') return '#000000' if (ink === 'white') return '#ffffff' return luminance(color) < 0.45 ? '#ffffff' : '#000000' } /** Couleur du filet/bandeau : couleur choisie, sinon l'encre neutre (plus de * couleur automatique par catégorie). */ export function filetColor(override?: string): string { return override || FL_INK } /** Couleur de fond d'une page : blanc, teinté (aplat fixe) ou plein (`fullColor`, * la couleur du filet/bandeau de la page). */ export function backgroundColorOf(bg: Background | undefined, fullColor = FL_INK): string { if (bg?.mode === 'full') return fullColor if (bg?.mode === 'tint') return TINT_COLOR return '#ffffff' } /** Style inline d'une page : fond + couleur d'encre lisible. */ export function backgroundStyle(bg: Background | undefined, fullColor = FL_INK): Record { const color = backgroundColorOf(bg, fullColor) return { backgroundColor: color, color: luminance(color) < 0.45 ? '#ffffff' : FL_INK, } }