Sacha VAUDEY 7e47c6163d
Some checks failed
Build and Test / Classic Build (pull_request) Failing after 55s
Build and Test / Docker Build (pull_request) Has been skipped
fix
2025-09-14 14:43:01 +02:00

197 lines
7.5 KiB
TypeScript

// Design System La Banquise - Système centralisé de styles
export const designSystem = {
// 🎨 Gradients
gradients: {
primary: "bg-gradient-to-r from-banquise-blue to-banquise-blue-light",
primaryBr: "bg-gradient-to-br from-banquise-blue to-banquise-blue-light",
card: "bg-gradient-to-br from-banquise-blue-dark/10 to-banquise-blue-dark/5",
cardHover: "hover:from-banquise-blue-dark/15 hover:to-banquise-blue-dark/8",
discord: "bg-gradient-to-r from-[#5865F2] to-[#7289DA]", // Couleurs officielles Discord
discordHover: "hover:from-[#4752C4] hover:to-[#5B6EAE]", // Couleurs Discord hover officielles
hero: "bg-gradient-to-br from-banquise-blue to-banquise-blue-dark",
section: "bg-gradient-to-b from-white/95 to-white"
},
// 🎯 Boutons optimisés
buttons: {
base: "inline-flex items-center justify-center font-bold border-0 rounded-2xl transition-all duration-300 active:scale-95",
effects: "hover:shadow-xl hover:-translate-y-1 hover:scale-105",
variants: {
primary: "text-white",
discord: "group relative overflow-hidden text-white font-semibold rounded-xl hover:shadow-[#5865F2]/25", // Ombre officielle Discord
auth: "group relative overflow-hidden text-white font-semibold rounded-xl",
secondary: "bg-white/10 backdrop-blur-sm text-white border border-white/20",
outline: "bg-transparent border-2 border-banquise-blue text-banquise-blue hover:bg-banquise-blue hover:text-white"
},
sizes: {
sm: "px-3 py-2 text-sm",
md: "px-4 lg:px-6 py-2.5 lg:py-3 text-sm lg:text-base",
lg: "px-6 lg:px-8 py-3 lg:py-4 text-base lg:text-lg"
}
},
// 🃏 Cartes
cards: {
base: "backdrop-blur-lg rounded-2xl border transition-all duration-300",
borders: {
default: "border-banquise-blue-lightest/30",
hover: "hover:border-banquise-blue-lightest/50",
active: "border-banquise-blue/50"
},
effects: {
hover: "hover:shadow-xl",
lift: "hover:-translate-y-4 hover:shadow-2xl",
interactive: "cursor-pointer hover:-translate-y-4 hover:shadow-2xl active:scale-95"
},
backgrounds: {
glass: "bg-white/80 backdrop-blur-lg",
gradient: "bg-gradient-to-br from-white/90 to-white/80",
solid: "bg-white"
}
},
// 📝 Typographie
typography: {
headings: {
xl: "text-3xl sm:text-4xl md:text-5xl font-heading font-bold tracking-tight",
lg: "text-2xl sm:text-3xl md:text-4xl font-heading font-bold tracking-tight",
md: "text-xl sm:text-2xl md:text-3xl font-heading font-bold tracking-tight",
sm: "text-lg sm:text-xl md:text-2xl font-heading font-semibold tracking-tight"
},
body: {
xl: "text-lg sm:text-xl md:text-2xl leading-relaxed",
lg: "text-base sm:text-lg md:text-xl leading-relaxed",
md: "text-sm sm:text-base md:text-lg leading-relaxed",
sm: "text-xs sm:text-sm md:text-base leading-relaxed"
},
colors: {
primary: "text-banquise-gray",
secondary: "text-banquise-blue-dark",
muted: "text-banquise-gray/80",
light: "text-banquise-blue-lightest",
white: "text-white/90"
},
weights: {
normal: "font-normal",
medium: "font-medium",
semibold: "font-semibold",
bold: "font-bold"
}
},
// 📐 Layout
layout: {
sections: {
default: "py-12 sm:py-16 md:py-20",
compact: "py-8 sm:py-12 md:py-16",
spacious: "py-16 sm:py-20 md:py-24"
},
containers: {
default: "w-full max-w-6xl mx-auto px-4 sm:px-6 md:px-8",
narrow: "w-full max-w-4xl mx-auto px-4 sm:px-6 md:px-8",
wide: "w-full max-w-7xl mx-auto px-4 sm:px-6 md:px-8"
},
dividers: {
default: "w-20 h-1 bg-gradient-to-r from-banquise-blue-lightest to-banquise-blue mx-auto rounded-full",
small: "w-12 h-1 bg-gradient-to-r from-banquise-blue-lightest to-banquise-blue mx-auto rounded-full",
large: "w-32 h-1 bg-gradient-to-r from-banquise-blue-lightest to-banquise-blue mx-auto rounded-full"
},
grids: {
responsive: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6 lg:gap-8",
auto: "grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 gap-4 sm:gap-6",
services: "grid grid-cols-1 lg:grid-cols-2 gap-6 lg:gap-8"
}
},
// 🎯 Icônes
icons: {
sizes: {
xs: "w-4 h-4",
sm: "w-6 h-6",
md: "w-8 h-8",
lg: "w-12 h-12",
xl: "w-16 h-16 sm:w-20 sm:h-20 lg:w-24 lg:h-24"
},
containers: {
card: "rounded-2xl flex items-center justify-center shadow-lg",
small: "w-10 h-10 rounded-lg flex items-center justify-center text-white",
service: "text-3xl sm:text-4xl lg:text-5xl"
},
effects: {
hover: "transition-transform duration-300 hover:scale-110",
spin: "animate-spin",
bounce: "animate-bounce"
}
},
// 🧭 Navigation
navigation: {
links: {
desktop: "px-4 lg:px-6 py-2.5 lg:py-3 text-white/90 hover:text-white font-medium text-sm lg:text-base rounded-xl transition-all duration-300 hover:bg-white/10 hover:backdrop-blur-sm relative group",
mobile: "group flex items-center p-4 text-white/90 hover:text-white no-underline rounded-2xl hover:bg-gradient-to-r hover:from-banquise-blue/20 hover:to-banquise-blue-light/20 transition-all duration-300 border border-transparent hover:border-banquise-blue-lightest/20"
},
effects: {
underline: "after:absolute after:bottom-1 after:left-1/2 after:w-0 after:h-0.5 after:bg-banquise-blue-lightest after:transition-all after:duration-300 group-hover:after:w-3/4 group-hover:after:left-1/8",
glow: "hover:drop-shadow-lg hover:drop-shadow-banquise-blue-lightest/50"
}
},
// ⚡ Animations & Transitions
animations: {
transitions: {
fast: "transition-all duration-200",
default: "transition-all duration-300",
slow: "transition-all duration-500"
},
transforms: {
lift: "hover:-translate-y-1",
liftLarge: "hover:-translate-y-4",
scale: "hover:scale-105",
scaleSmall: "hover:scale-102"
},
loading: {
spin: "animate-spin",
pulse: "animate-pulse",
bounce: "animate-bounce"
}
},
// 🌊 Effets spéciaux La Banquise
effects: {
ocean: {
wave: "animate-pulse",
depth: "backdrop-blur-xl",
surface: "bg-gradient-to-b from-transparent to-banquise-blue/5"
},
ice: {
crystal: "backdrop-blur-lg bg-white/10",
frost: "backdrop-blur-sm bg-white/5",
shine: "bg-gradient-to-br from-white/20 to-transparent"
}
}
} as const;
// 🎨 Utilitaires de combinaison
export const combineStyles = {
// Bouton primaire complet
primaryButton: `${designSystem.buttons.base} ${designSystem.buttons.effects} ${designSystem.gradients.primary} ${designSystem.buttons.variants.primary}`,
// Carte interactive complète
interactiveCard: `${designSystem.cards.base} ${designSystem.cards.borders.default} ${designSystem.cards.effects.interactive} ${designSystem.cards.backgrounds.glass}`,
// Section standard
standardSection: `${designSystem.layout.sections.default} ${designSystem.layout.containers.default}`,
// Titre de section
sectionTitle: `${designSystem.typography.headings.lg} ${designSystem.typography.colors.primary}`,
// Lien de navigation desktop
navLink: `${designSystem.navigation.links.desktop} ${designSystem.navigation.effects.underline}`,
// Grid responsive services
servicesGrid: designSystem.layout.grids.services
} as const;
// Type pour l'autocomplétion
export type DesignSystemKey = keyof typeof designSystem;
export type CombinedStyleKey = keyof typeof combineStyles;