diff --git a/banquise-website/src/App.tsx b/banquise-website/src/App.tsx index b7c4643..ecb8704 100644 --- a/banquise-website/src/App.tsx +++ b/banquise-website/src/App.tsx @@ -6,6 +6,7 @@ import { TechFeaturesSection } from './components/sections/TechFeaturesSection'; import { ServicesSection } from './components/sections/ServicesSection'; import { AboutSection } from './components/sections/AboutSection'; import { Popup } from './components/ui/Popup'; +import { URLS } from './config/constants'; // Define Service interface directly in App interface Service { @@ -22,7 +23,7 @@ const App: React.FC = () => { const services: Service[] = [ { name: "Wiki", - url: "https://wiki.la-banquise.fr", + url: URLS.services.wiki, image: "/src/assets/iceberg.png", icon: "📚", description: "Notre wiki collaboratif est votre centre de documentation technique. Accédez à des guides détaillés, des tutoriels et de la documentation API pour tous nos services.", @@ -37,7 +38,7 @@ const App: React.FC = () => { }, { name: "Gitea", - url: "https://git.la-banquise.fr", + url: URLS.services.gitea, image: "/src/assets/iceberg.png", icon: "🔧", description: "Instance Gitea auto-hébergée pour la gestion de vos dépôts Git. Collaborez sur vos projets avec un contrôle total sur votre code source.", @@ -52,7 +53,7 @@ const App: React.FC = () => { }, { name: "Panel", - url: "https://panel.la-banquise.fr", + url: URLS.services.panel, image: "/src/assets/iceberg.png", icon: "🎮", description: "Interface de gestion centralisée pour vos serveurs de jeux. Déployez, configurez et surveillez vos serveurs gaming en quelques clics.", diff --git a/banquise-website/src/components/layout/Footer.tsx b/banquise-website/src/components/layout/Footer.tsx index f430587..0072ea6 100644 --- a/banquise-website/src/components/layout/Footer.tsx +++ b/banquise-website/src/components/layout/Footer.tsx @@ -1,4 +1,5 @@ import React from 'react'; +import { URLS, SITE_CONFIG } from '../../config/constants'; export const Footer: React.FC = () => ( ); diff --git a/banquise-website/src/components/layout/Header.tsx b/banquise-website/src/components/layout/Header.tsx deleted file mode 100644 index e69de29..0000000 diff --git a/banquise-website/src/components/layout/MobileMenu.tsx b/banquise-website/src/components/layout/MobileMenu.tsx index c07830a..a233ef8 100644 --- a/banquise-website/src/components/layout/MobileMenu.tsx +++ b/banquise-website/src/components/layout/MobileMenu.tsx @@ -1,5 +1,7 @@ import React, { useEffect } from 'react'; import banquiseServer from '../../assets/banquise_server.svg' +import { URLS, SITE_CONFIG } from '../../config/constants'; +import { commonStyles } from '../../styles/components'; interface MobileMenuProps { isOpen: boolean; @@ -7,7 +9,6 @@ interface MobileMenuProps { } export const MobileMenu: React.FC = ({ isOpen, onClose }) => { - // Empêcher le scroll du body quand le menu mobile est ouvert useEffect(() => { if (isOpen) { document.body.style.overflow = 'hidden'; @@ -22,16 +23,16 @@ export const MobileMenu: React.FC = ({ isOpen, onClose }) => { return (
- {/* Overlay amélioré */} + {/* Overlay */}
- {/* Menu mobile moderne */} + {/* Menu mobile */}
- {/* Header moderne - retirer le padding top excessif */} + {/* Header */}
@@ -44,8 +45,8 @@ export const MobileMenu: React.FC = ({ isOpen, onClose }) => { />
- - La Banquise + + {SITE_CONFIG.name}

Menu Navigation

@@ -62,18 +63,14 @@ export const MobileMenu: React.FC = ({ isOpen, onClose }) => {
- {/* Navigation moderne */} + {/* Navigation */}
{/* Navigation Links */}
- +
-
+
@@ -88,13 +85,9 @@ export const MobileMenu: React.FC = ({ isOpen, onClose }) => { - +
-
+
@@ -109,15 +102,11 @@ export const MobileMenu: React.FC = ({ isOpen, onClose }) => { - +
-
+
- +
- {/* Footer simplifié - repositionné */} + {/* Footer */}

- © 2024 La Banquise + © 2024 {SITE_CONFIG.name}

diff --git a/banquise-website/src/components/layout/Navigation.tsx b/banquise-website/src/components/layout/Navigation.tsx index ed0fd67..70935b2 100644 --- a/banquise-website/src/components/layout/Navigation.tsx +++ b/banquise-website/src/components/layout/Navigation.tsx @@ -1,12 +1,13 @@ import React, { useState, useEffect } from 'react'; import { MobileMenu } from './MobileMenu'; import banquiseServer from '/src/assets/banquise_server.svg' +import { URLS, SITE_CONFIG } from '../../config/constants'; +import { commonStyles } from '../../styles/components'; export const Navigation: React.FC = () => { const [mobileMenuOpen, setMobileMenuOpen] = useState(false); const [scrolled, setScrolled] = useState(false); - // Gérer l'effet de scroll sur la navbar useEffect(() => { const handleScroll = () => { const isScrolled = window.scrollY > 20; @@ -17,7 +18,6 @@ export const Navigation: React.FC = () => { return () => window.removeEventListener('scroll', handleScroll); }, []); - // Fermer le menu mobile quand on redimensionne la fenêtre useEffect(() => { const handleResize = () => { if (window.innerWidth >= 768) { @@ -36,8 +36,8 @@ export const Navigation: React.FC = () => { ? 'bg-banquise-blue-dark/98 backdrop-blur-xl shadow-2xl border-b border-banquise-blue-lightest/30' : 'bg-banquise-blue-dark/95 backdrop-blur-lg shadow-xl border-b border-banquise-blue-lightest/20' }`}> -
-
+
+
{/* Logo section */}
@@ -51,29 +51,23 @@ export const Navigation: React.FC = () => { />
-

- La Banquise +

+ {SITE_CONFIG.name}

- Communauté • Hébergement + {SITE_CONFIG.tagline}

{/* Navigation links desktop */}
- + Services
- + À propos
@@ -82,12 +76,12 @@ export const Navigation: React.FC = () => { {/* Action buttons desktop */}
-
+
@@ -97,12 +91,12 @@ export const Navigation: React.FC = () => { diff --git a/banquise-website/src/components/sections/AboutSection.tsx b/banquise-website/src/components/sections/AboutSection.tsx index 86e2bc1..e71693f 100644 --- a/banquise-website/src/components/sections/AboutSection.tsx +++ b/banquise-website/src/components/sections/AboutSection.tsx @@ -1,5 +1,7 @@ import React from 'react'; import { AccordionItem } from '../ui/AccordionItem'; +import { URLS } from '../../config/constants'; +import { commonStyles } from '../../styles/components'; interface AboutSectionProps { openAccordion: string | null; @@ -11,18 +13,18 @@ export const AboutSection: React.FC = ({ openAccordion, toggl
{/* Header */}
-
-

+
+

À Propos de La Banquise

-

+

Une communauté passionnée qui propose des services d'hébergement et des outils collaboratifs pour les développeurs et les gamers.

{/* FAQ Section */}
-

+

Questions Fréquentes

@@ -33,11 +35,11 @@ export const AboutSection: React.FC = ({ openAccordion, toggl onToggle={() => toggleAccordion("mission")} >
-

+

Former les étudiants au déploiment et a la gestion d'une infra, et de maitriser des technologies entreprise grade. Cela permet de fournir une plateforme stable et accessible pour héberger vos projets, partager vos connaissances et jouer ensemble !

-

+

Nous croyons en la puissance de la collaboration et mettons à disposition des outils modernes pour faciliter le travail en équipe.

@@ -55,31 +57,31 @@ export const AboutSection: React.FC = ({ openAccordion, toggl >
-
-
📚
+
+
📚

Wiki

Documentation collaborative et guides détaillés

-
-
🔧
+
+
🔧

Gitea

Gestion de versions Git auto-hébergée

-
-
🎮
+
+
🎮

Panel de Jeux

Interface de gestion pour serveurs de jeux

-

+

Tous nos services sont maintenus avec soin et régulièrement mis à jour pour garantir une expérience optimale.

@@ -91,11 +93,11 @@ export const AboutSection: React.FC = ({ openAccordion, toggl onToggle={() => toggleAccordion("community")} >
-

+

Rejoignez notre serveur Discord pour rejoindre l'asso, échanger avec nous, obtenir de l'aide et rester informé des dernières nouveautés !

-
+

💬 Comment rejoindre l'asso ? @@ -107,8 +109,8 @@ export const AboutSection: React.FC = ({ openAccordion, toggl 🚀 Rejoindre Discord diff --git a/banquise-website/src/components/sections/HeroSection.tsx b/banquise-website/src/components/sections/HeroSection.tsx index d9e5893..6d18ac1 100644 --- a/banquise-website/src/components/sections/HeroSection.tsx +++ b/banquise-website/src/components/sections/HeroSection.tsx @@ -15,9 +15,9 @@ export const HeroSection: React.FC = () => ( Association d'hébergement et lab réseau pour tous les étudiants et associations de l'EPITA !

-
- Découvrir nos services - + + Découvrir nos services + ); diff --git a/banquise-website/src/components/ui/AccordionItem.tsx b/banquise-website/src/components/ui/AccordionItem.tsx index ac36d0a..2f7fd4d 100644 --- a/banquise-website/src/components/ui/AccordionItem.tsx +++ b/banquise-website/src/components/ui/AccordionItem.tsx @@ -14,7 +14,7 @@ export const AccordionItem: React.FC = ({ title, children, i className="p-4 sm:p-6 md:p-8 cursor-pointer flex items-center justify-between font-semibold text-banquise-gray transition-all duration-200 text-base sm:text-lg select-none hover:bg-banquise-blue-dark/10 active:bg-banquise-blue-dark/15" onClick={onToggle} > - {title} + {title} diff --git a/banquise-website/src/components/ui/Popup.tsx b/banquise-website/src/components/ui/Popup.tsx index c88609a..4cd8f2c 100644 --- a/banquise-website/src/components/ui/Popup.tsx +++ b/banquise-website/src/components/ui/Popup.tsx @@ -1,4 +1,5 @@ import React from 'react'; +import { URLS } from '../../config/constants'; interface Service { name: string; @@ -32,7 +33,7 @@ export const Popup: React.FC = ({ service, onClose }) => ( {service.icon}

-

+

{service.name}

@@ -47,20 +48,20 @@ export const Popup: React.FC = ({ service, onClose }) => (
- {/* Content */} -
+ {/* Content - Forcer le fond blanc */} +
{/* Description */} -

+

📋 Description détaillée

diff --git a/banquise-website/src/config/constants.ts b/banquise-website/src/config/constants.ts new file mode 100644 index 0000000..5a493bf --- /dev/null +++ b/banquise-website/src/config/constants.ts @@ -0,0 +1,20 @@ +export const URLS = { + services: { + wiki: "https://wiki.la-banquise.fr", + gitea: "https://git.la-banquise.fr", + panel: "https://panel.la-banquise.fr", + auth: "https://auth.la-banquise.fr" + }, + social: { + discord: "https://discord.gg/labanquise" + }, + contact: { + email: "mailto:contact@la-banquise.fr" + } +} as const; + +export const SITE_CONFIG = { + name: "La Banquise", + description: "Association d'hébergement et lab réseau pour tous les étudiants et associations de l'EPITA", + tagline: "Communauté • Hébergement" +} as const; diff --git a/banquise-website/src/styles/components.ts b/banquise-website/src/styles/components.ts new file mode 100644 index 0000000..48fcabf --- /dev/null +++ b/banquise-website/src/styles/components.ts @@ -0,0 +1,63 @@ +export const commonStyles = { + // 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-indigo-600 to-purple-600", + discordHover: "hover:from-indigo-500 hover:to-purple-500" + }, + + // Buttons + buttons: { + primary: "inline-flex items-center justify-center font-bold text-white border-0 rounded-2xl transition-all duration-300 hover:shadow-xl hover:-translate-y-1 hover:scale-105 active:scale-95", + discord: "group relative overflow-hidden px-4 lg:px-6 py-2.5 lg:py-3 text-white font-semibold text-sm lg:text-base rounded-xl transition-all duration-300 hover:shadow-xl hover:shadow-indigo-500/25 hover:-translate-y-1 hover:scale-105", + auth: "group relative overflow-hidden px-4 lg:px-6 py-2.5 lg:py-3 text-white font-semibold text-sm lg:text-base rounded-xl transition-all duration-300 hover:shadow-xl hover:-translate-y-1 hover:scale-105" + }, + + // Cards + cards: { + base: "backdrop-blur-lg rounded-2xl border border-banquise-blue-lightest/30 transition-all duration-300", + hover: "hover:shadow-xl hover:border-banquise-blue-lightest/50", + interactive: "cursor-pointer hover:-translate-y-4 hover:shadow-2xl active:scale-95" + }, + + // Text - Hiérarchie améliorée + text: { + heading: "font-heading font-bold tracking-tight", + // Titres principaux de section + headingXl: "text-3xl sm:text-4xl md:text-5xl text-banquise-gray font-heading font-bold tracking-tight", + headingLg: "text-2xl sm:text-3xl md:text-4xl text-banquise-gray font-heading font-bold tracking-tight", + headingMd: "text-xl sm:text-2xl md:text-3xl text-banquise-blue-dark font-heading font-bold tracking-tight", + headingSm: "text-lg sm:text-xl md:text-2xl text-banquise-blue-dark font-heading font-semibold tracking-tight", + // Sous-titres + subheading: "text-base sm:text-lg md:text-xl text-banquise-gray/90 font-medium leading-relaxed", + // Corps de texte + body: "text-sm sm:text-base md:text-lg text-banquise-blue-dark/90 leading-relaxed", + description: "text-banquise-gray/80 leading-relaxed", + muted: "text-banquise-gray/90 leading-relaxed", + // Texte sur fond sombre + lightHeading: "text-banquise-blue-lightest font-heading font-bold tracking-tight", + lightBody: "text-white/90 leading-relaxed" + }, + + // Layout + layout: { + section: "py-12 sm:py-16 md:py-20 w-full max-w-6xl mx-auto px-4 sm:px-6 md:px-8", + container: "max-w-6xl mx-auto", + divider: "w-20 h-1 bg-gradient-to-r from-banquise-blue-lightest to-banquise-blue mx-auto mb-6 sm:mb-8 rounded-full" + }, + + // Icons and decorative elements + icons: { + base: "w-16 h-16 sm:w-20 sm:h-20 lg:w-24 lg:h-24 rounded-2xl flex items-center justify-center text-3xl sm:text-4xl lg:text-5xl shadow-lg", + small: "w-10 h-10 rounded-lg flex items-center justify-center text-white" + }, + + // Navigation + nav: { + link: "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", + mobileItem: "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" + } +} as const;