karbe/src/lib/theme.ts
Claude Integration c69c355f90 feat(plugin): theme-aquarelle + hero variant (Phase 2.4 partie 1/2)
Registry : ajoute 2 plugins :
- theme-aquarelle (carnet naturaliste XIXᵉ, mutual exclusion avec theme-guyane)
- image-gallery-aquarelle-seed (14 aquarelles → MinIO + Media carbets démo)

Hooks :
- theme-guyane et theme-aquarelle se désactivent mutuellement au toggle ON
  via disableOtherTheme()

CSS (globals.css) :
- body[data-theme=aquarelle] : background papier teinté #faf5e9 + texture
  grain papier inline SVG + radial gradients ocres/canopy délavés
- Surcharges automatiques des borders zinc/gray vers sépia délavé

Layout :
- PT_Serif (au lieu de Cormorant) en theme aquarelle, plus dense et encrée
- data-theme = aquarelle prioritaire sur guyane si les deux sont enabled
  (défensif — le hook garantit normalement la mutual exclusion)

Hero :
- 2 versions dans le composant : guyane (existant, SVG CarbetRiver) et
  aquarelle (image MinIO 01-hero-fleuve-maroni.jpg en fond, voile crème,
  texte sépia, CTAs carrés sans rounded, hairlines, ornement de planche)
- Branchement via getActiveTheme()
- aquarelleUrl() helper qui construit l'URL MinIO publique

Partie 2/2 (PR ultérieure) : upload des 14 images dans MinIO + hook
image-gallery-aquarelle-seed + variantes aquarelle des autres composants
(CarbetCard, ExperiencesSection, HowItWorksSection, CESection, Footer).
2026-05-31 12:15:07 +00:00

28 lines
1 KiB
TypeScript

/**
* Helpers theme — server-side.
*
* Centralise la résolution du theme actif (guyane | aquarelle | none) pour
* que chaque composant qui veut un rendu spécifique au theme appelle un seul
* helper plutôt que de checker `isPluginEnabled("theme-...")` individuellement.
*/
import "server-only";
import { isPluginEnabled } from "@/lib/plugins/server";
export type ActiveTheme = "guyane" | "aquarelle" | "none";
export async function getActiveTheme(): Promise<ActiveTheme> {
if (await isPluginEnabled("theme-aquarelle")) return "aquarelle";
if (await isPluginEnabled("theme-guyane")) return "guyane";
return "none";
}
/**
* URL publique d'une illustration aquarelle hébergée dans MinIO.
* Les fichiers sont uploadés dans karbe-medias/seed/aquarelle/ et servis via
* media.karbe.cosmolan.fr (bucket public-download).
*/
export function aquarelleUrl(filename: string): string {
const base = process.env.S3_PUBLIC_URL?.replace(/\/+$/, "") ?? "https://media.karbe.cosmolan.fr/karbe-medias";
return `${base}/seed/aquarelle/${filename}`;
}