From 368b84ce451d97cbf21f184b19ecd67cfb7c1153 Mon Sep 17 00:00:00 2001
From: sahamone <98383205+sahamone@users.noreply.github.com>
Date: Mon, 19 May 2025 10:13:43 +0200
Subject: [PATCH 1/3] initial for website-v2
---
README.md | 68 +-
banquise-website/.gitignore | 24 +
banquise-website/README.md | 54 ++
banquise-website/eslint.config.js | 28 +
banquise-website/index.html | 19 +
banquise-website/package.json | 44 +
banquise-website/postcss.config.js | 6 +
banquise-website/public/vite.svg | 1 +
banquise-website/src/App.css | 1124 ++++++++++++++++++++++
banquise-website/src/App.tsx | 525 ++++++++++
banquise-website/src/assets/banquise.png | Bin 0 -> 192213 bytes
banquise-website/src/assets/iceberg.png | Bin 0 -> 123894 bytes
banquise-website/src/assets/react.svg | 1 +
banquise-website/src/index.css | 103 ++
banquise-website/src/main.tsx | 10 +
banquise-website/src/vite-env.d.ts | 1 +
banquise-website/tailwind.config.js | 21 +
banquise-website/tsconfig.app.json | 27 +
banquise-website/tsconfig.json | 7 +
banquise-website/tsconfig.node.json | 25 +
banquise-website/vite.config.ts | 27 +
la-banquise/assets/iceberg.svg | 24 -
la-banquise/index.html | 31 -
la-banquise/script.js | 22 -
la-banquise/style.css | 136 ---
25 files changed, 2113 insertions(+), 215 deletions(-)
create mode 100644 banquise-website/.gitignore
create mode 100644 banquise-website/README.md
create mode 100644 banquise-website/eslint.config.js
create mode 100644 banquise-website/index.html
create mode 100644 banquise-website/package.json
create mode 100644 banquise-website/postcss.config.js
create mode 100644 banquise-website/public/vite.svg
create mode 100644 banquise-website/src/App.css
create mode 100644 banquise-website/src/App.tsx
create mode 100644 banquise-website/src/assets/banquise.png
create mode 100644 banquise-website/src/assets/iceberg.png
create mode 100644 banquise-website/src/assets/react.svg
create mode 100644 banquise-website/src/index.css
create mode 100644 banquise-website/src/main.tsx
create mode 100644 banquise-website/src/vite-env.d.ts
create mode 100644 banquise-website/tailwind.config.js
create mode 100644 banquise-website/tsconfig.app.json
create mode 100644 banquise-website/tsconfig.json
create mode 100644 banquise-website/tsconfig.node.json
create mode 100644 banquise-website/vite.config.ts
delete mode 100644 la-banquise/assets/iceberg.svg
delete mode 100644 la-banquise/index.html
delete mode 100644 la-banquise/script.js
delete mode 100644 la-banquise/style.css
diff --git a/README.md b/README.md
index a908d42..694c8a0 100644
--- a/README.md
+++ b/README.md
@@ -1,2 +1,66 @@
-# website-front
-test
+# Website Front pour Banquise
+
+Ce projet est une application web React développée avec Vite, TypeScript et TailwindCSS.
+
+## Architecture du Projet
+
+```
+website-front/
+├── banquise-website/ # Application React principale
+│ ├── public/ # Fichiers statiques
+│ ├── src/ # Code source
+│ │ ├── assets/ # Images et ressources
+│ │ ├── App.tsx # Composant principal
+│ │ └── main.tsx # Point d'entrée de l'application
+│ ├── index.html # Template HTML principal
+│ ├── package.json # Configuration des dépendances
+│ ├── tsconfig.json # Configuration TypeScript
+│ ├── vite.config.ts # Configuration Vite
+│ └── tailwind.config.js # Configuration TailwindCSS
+└── shell.nix # Configuration pour environnement Nix
+```
+
+## Technologies Utilisées
+
+- **React 18** - Bibliothèque d'interface utilisateur
+- **TypeScript** - Langage de programmation typé
+- **Vite** - Outil de build et serveur de développement
+- **TailwindCSS** - Framework CSS utilitaire
+- **React Router** - Navigation entre les pages
+- **Zustand** - Gestion d'état
+- **React Query** - Gestion des requêtes API
+- **Framer Motion** - Animations
+
+## Pré-requis
+
+- Node.js (v16.0.0 ou supérieur)
+- npm ou yarn
+
+## Installation
+
+```bash
+# Se déplacer dans le dossier du projet
+cd banquise-website
+
+# Installer les dépendances
+npm install
+# ou avec yarn
+yarn
+```
+
+## Scripts Disponibles
+
+- `npm run dev` - Lance le serveur de développement
+- `npm run build` - Compile le projet pour la production
+- `npm run preview` - Prévisualise la version de production localement
+- `npm run lint` - Vérifie la qualité du code avec ESLint
+
+## Déploiement
+
+### Compilation pour la Production
+
+```bash
+npm run build
+```
+
+Cette commande générera un dossier `dist` dans le répertoire `banquise-website/` contenant tous les fichiers optimisés pour la production.
\ No newline at end of file
diff --git a/banquise-website/.gitignore b/banquise-website/.gitignore
new file mode 100644
index 0000000..a547bf3
--- /dev/null
+++ b/banquise-website/.gitignore
@@ -0,0 +1,24 @@
+# Logs
+logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+pnpm-debug.log*
+lerna-debug.log*
+
+node_modules
+dist
+dist-ssr
+*.local
+
+# Editor directories and files
+.vscode/*
+!.vscode/extensions.json
+.idea
+.DS_Store
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.sw?
diff --git a/banquise-website/README.md b/banquise-website/README.md
new file mode 100644
index 0000000..da98444
--- /dev/null
+++ b/banquise-website/README.md
@@ -0,0 +1,54 @@
+# React + TypeScript + Vite
+
+This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules.
+
+Currently, two official plugins are available:
+
+- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react) uses [Babel](https://babeljs.io/) for Fast Refresh
+- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh
+
+## Expanding the ESLint configuration
+
+If you are developing a production application, we recommend updating the configuration to enable type-aware lint rules:
+
+```js
+export default tseslint.config({
+ extends: [
+ // Remove ...tseslint.configs.recommended and replace with this
+ ...tseslint.configs.recommendedTypeChecked,
+ // Alternatively, use this for stricter rules
+ ...tseslint.configs.strictTypeChecked,
+ // Optionally, add this for stylistic rules
+ ...tseslint.configs.stylisticTypeChecked,
+ ],
+ languageOptions: {
+ // other options...
+ parserOptions: {
+ project: ['./tsconfig.node.json', './tsconfig.app.json'],
+ tsconfigRootDir: import.meta.dirname,
+ },
+ },
+})
+```
+
+You can also install [eslint-plugin-react-x](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-x) and [eslint-plugin-react-dom](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-dom) for React-specific lint rules:
+
+```js
+// eslint.config.js
+import reactX from 'eslint-plugin-react-x'
+import reactDom from 'eslint-plugin-react-dom'
+
+export default tseslint.config({
+ plugins: {
+ // Add the react-x and react-dom plugins
+ 'react-x': reactX,
+ 'react-dom': reactDom,
+ },
+ rules: {
+ // other rules...
+ // Enable its recommended typescript rules
+ ...reactX.configs['recommended-typescript'].rules,
+ ...reactDom.configs.recommended.rules,
+ },
+})
+```
diff --git a/banquise-website/eslint.config.js b/banquise-website/eslint.config.js
new file mode 100644
index 0000000..092408a
--- /dev/null
+++ b/banquise-website/eslint.config.js
@@ -0,0 +1,28 @@
+import js from '@eslint/js'
+import globals from 'globals'
+import reactHooks from 'eslint-plugin-react-hooks'
+import reactRefresh from 'eslint-plugin-react-refresh'
+import tseslint from 'typescript-eslint'
+
+export default tseslint.config(
+ { ignores: ['dist'] },
+ {
+ extends: [js.configs.recommended, ...tseslint.configs.recommended],
+ files: ['**/*.{ts,tsx}'],
+ languageOptions: {
+ ecmaVersion: 2020,
+ globals: globals.browser,
+ },
+ plugins: {
+ 'react-hooks': reactHooks,
+ 'react-refresh': reactRefresh,
+ },
+ rules: {
+ ...reactHooks.configs.recommended.rules,
+ 'react-refresh/only-export-components': [
+ 'warn',
+ { allowConstantExport: true },
+ ],
+ },
+ },
+)
diff --git a/banquise-website/index.html b/banquise-website/index.html
new file mode 100644
index 0000000..ee5ab91
--- /dev/null
+++ b/banquise-website/index.html
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+ La Banquise - Services d'hébergement
+
+
+
+
+
+
+
+
+
+
diff --git a/banquise-website/package.json b/banquise-website/package.json
new file mode 100644
index 0000000..5bbfe07
--- /dev/null
+++ b/banquise-website/package.json
@@ -0,0 +1,44 @@
+{
+ "name": "banquise-website",
+ "private": true,
+ "version": "0.0.0",
+ "type": "module",
+ "scripts": {
+ "dev": "vite",
+ "build": "tsc -b && vite build",
+ "lint": "eslint .",
+ "preview": "vite preview"
+ },
+ "dependencies": {
+ "axios": "^1.6.5",
+ "clsx": "^2.1.0",
+ "framer-motion": "^10.18.0",
+ "react": "^18.2.0",
+ "react-dom": "^18.2.0",
+ "react-icons": "^4.12.0",
+ "react-router-dom": "^6.22.0",
+ "@tanstack/react-query": "^5.17.9",
+ "tailwind-merge": "^2.2.0",
+ "zustand": "^4.4.7"
+ },
+ "devDependencies": {
+ "@eslint/js": "^9.25.0",
+ "@tailwindcss/forms": "^0.5.7",
+ "@tailwindcss/typography": "^0.5.10",
+ "@types/react": "^18.2.58",
+ "@types/react-dom": "^18.2.19",
+ "@vitejs/plugin-react": "^4.4.1",
+ "autoprefixer": "^10.4.16",
+ "eslint": "^9.25.0",
+ "eslint-plugin-react-hooks": "^5.2.0",
+ "eslint-plugin-react-refresh": "^0.4.19",
+ "eslint-plugin-tailwindcss": "^3.14.0",
+ "globals": "^16.0.0",
+ "postcss": "^8.4.33",
+ "typescript": "~5.8.3",
+ "typescript-eslint": "^8.30.1",
+ "vite": "^6.3.5",
+ "vite-plugin-compression": "^0.5.1",
+ "tailwindcss": "^3.4.1"
+ }
+}
diff --git a/banquise-website/postcss.config.js b/banquise-website/postcss.config.js
new file mode 100644
index 0000000..2e7af2b
--- /dev/null
+++ b/banquise-website/postcss.config.js
@@ -0,0 +1,6 @@
+export default {
+ plugins: {
+ tailwindcss: {},
+ autoprefixer: {},
+ },
+}
diff --git a/banquise-website/public/vite.svg b/banquise-website/public/vite.svg
new file mode 100644
index 0000000..e7b8dfb
--- /dev/null
+++ b/banquise-website/public/vite.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/banquise-website/src/App.css b/banquise-website/src/App.css
new file mode 100644
index 0000000..b82c161
--- /dev/null
+++ b/banquise-website/src/App.css
@@ -0,0 +1,1124 @@
+#root {
+ max-width: 100%;
+ margin: 0;
+ padding: 0;
+ text-align: center;
+ width: 100%;
+}
+
+.app-container {
+ display: flex;
+ flex-direction: column;
+ min-height: 100vh;
+ width: 100%;
+}
+
+/* Navigation */
+.navbar {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ padding: 0.8rem 2rem;
+ background-color: rgba(31, 93, 137, 0.95); /* #1F5D89 avec transparence */
+ color: white;
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
+ width: 100%;
+ box-sizing: border-box;
+ z-index: 10;
+ backdrop-filter: blur(8px);
+ border-bottom: 1px solid rgba(255, 255, 255, 0.1);
+ position: sticky;
+ top: 0;
+}
+
+.navbar-left {
+ display: flex;
+ align-items: center;
+}
+
+.site-logo {
+ height: 2.2rem;
+ width: auto;
+ margin-right: 1rem;
+ filter: drop-shadow(0 0 5px rgba(168, 218, 255, 0.4));
+}
+
+.site-name {
+ font-size: 1.6rem;
+ font-weight: 700;
+ margin: 0;
+ color: #ffffff;
+ letter-spacing: 0.5px;
+ font-family: var(--font-heading);
+}
+
+.navbar-right {
+ display: flex;
+ align-items: center;
+ gap: 12px;
+}
+
+.discord-button {
+ display: flex;
+ align-items: center;
+ background-color: #40B4FF;
+ color: white;
+ border: none;
+ padding: 0.6rem 1.2rem;
+ border-radius: 6px;
+ cursor: pointer;
+ text-decoration: none;
+ font-weight: 600;
+ letter-spacing: 0.3px;
+ box-shadow: 0 2px 8px rgba(64, 180, 255, 0.4);
+ transition: all 0.2s ease;
+}
+
+.discord-button:hover {
+ background-color: #2ba3f7;
+ color: #ffffff;
+ text-shadow: 0 0 1px rgba(255, 255, 255, 0.5);
+ transform: translateY(-1px);
+ box-shadow: 0 4px 12px rgba(64, 180, 255, 0.6);
+}
+
+.discord-button:focus-visible {
+ outline: 3px solid #ffffff;
+ outline-offset: 2px;
+ background-color: #2ba3f7;
+}
+
+.login-button {
+ display: flex;
+ align-items: center;
+ background-color: rgba(105, 183, 226, 0.9); /* #69B7E2 */
+ color: white;
+ border: none;
+ padding: 0.6rem 1.2rem;
+ border-radius: 6px;
+ cursor: pointer;
+ text-decoration: none;
+ font-weight: 600;
+ letter-spacing: 0.3px;
+ box-shadow: 0 2px 8px rgba(105, 183, 226, 0.3);
+ transition: all 0.2s ease;
+}
+
+.login-button:hover {
+ background-color: #69B7E2;
+ color: #ffffff;
+ text-shadow: 0 0 1px rgba(255, 255, 255, 0.5);
+ transform: translateY(-1px);
+ box-shadow: 0 4px 12px rgba(105, 183, 226, 0.5);
+}
+
+.login-button:focus-visible {
+ outline: 3px solid #ffffff;
+ outline-offset: 2px;
+ background-color: #69B7E2;
+}
+
+.login-icon {
+ margin-right: 0.5rem;
+}
+
+.content {
+ flex: 1;
+ display: flex;
+ flex-direction: column;
+ overflow-x: hidden;
+ overflow-y: auto;
+}
+
+.ocean {
+ position: relative;
+ flex: 1;
+ background: linear-gradient(180deg, #40B4FF 0%, #69B7E2 50%, #1F5D89 100%);
+ width: 100%;
+ min-height: calc(100vh - 72px);
+ display: flex;
+ flex-direction: column;
+ justify-content: flex-start;
+ align-items: center;
+ overflow-x: hidden;
+}
+
+.page-section {
+ width: 100%;
+ max-width: 1200px;
+ margin: 1rem auto;
+ padding: 2rem 2rem;
+ position: relative;
+ z-index: 3;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ box-sizing: border-box;
+}
+
+.hero-section {
+ min-height: calc(70vh - 72px);
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ align-items: center;
+ text-align: center;
+ padding-top: 2rem;
+ padding-bottom: 3rem;
+ margin-top: 0;
+}
+
+.hero-title {
+ color: #F6F6F6;
+ font-size: 3.5rem;
+ margin-bottom: 1.5rem;
+ font-weight: 800;
+ text-shadow: 0 2px 10px rgba(0, 0, 0, 0.3);
+ line-height: 1.1;
+ max-width: 800px;
+}
+
+.hero-subtitle {
+ color: #F6F6F6;
+ font-size: 1.5rem;
+ margin-bottom: 2.5rem;
+ max-width: 700px;
+ font-weight: 400;
+ opacity: 0.9;
+ text-shadow: 0 1px 4px rgba(0, 0, 0, 0.2);
+}
+
+.cta-button {
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ background-color: #F6F6F6;
+ color: #1F5D89;
+ border: none;
+ padding: 1rem 2.5rem;
+ border-radius: 30px;
+ font-size: 1.1rem;
+ font-weight: 600;
+ text-decoration: none;
+ box-shadow: 0 4px 15px rgba(0, 0, 0, 0.15);
+ transition: all 0.3s ease;
+ min-width: 200px;
+}
+
+.cta-button:hover {
+ transform: translateY(-3px);
+ box-shadow: 0 8px 20px rgba(0, 0, 0, 0.2);
+ background-color: #ffffff;
+}
+
+.cta-icon {
+ margin-left: 0.75rem;
+ transition: transform 0.2s ease;
+}
+
+.cta-button:hover .cta-icon {
+ transform: translateX(3px);
+}
+
+.section-divider {
+ width: 80px;
+ height: 4px;
+ background: linear-gradient(90deg, #A5F0FF, #40B4FF);
+ margin: 0 auto 2rem;
+ border-radius: 2px;
+}
+
+.section-title {
+ color: #F6F6F6;
+ text-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
+ font-size: 2.5rem;
+ margin-bottom: 1rem;
+ text-align: center;
+ font-family: var(--font-heading);
+ font-weight: 700;
+ letter-spacing: -0.01em;
+}
+
+.section-subtitle {
+ color: #F6F6F6;
+ text-shadow: 0 1px 3px rgba(0, 0, 0, 0.2);
+ font-size: 1.25rem;
+ opacity: 0.9;
+ margin-bottom: 3.5rem;
+ max-width: 800px;
+ text-align: center;
+}
+
+.services-section {
+ position: relative;
+ z-index: 2;
+ padding-top: 2rem;
+ padding-bottom: 4rem;
+ margin-top: 0;
+ margin-bottom: 1rem;
+}
+
+.icebergs-container {
+ position: relative;
+ width: 100%;
+ max-width: 1000px;
+ height: auto;
+ min-height: 350px;
+ z-index: 2;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ margin: 2rem auto;
+ padding: 0;
+ gap: 5%;
+}
+
+.iceberg {
+ cursor: pointer;
+ text-decoration: none;
+ width: 250px;
+ height: 200px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ transition: transform 0.3s ease;
+ z-index: 3;
+ margin: 0;
+}
+
+.iceberg:hover {
+ transform: translateY(-10px) !important;
+}
+
+.float-1, .float-2, .float-3 {
+ animation: none;
+}
+
+.iceberg img {
+ width: 100%;
+ height: auto;
+ max-width: 250px;
+ max-height: 200px;
+ object-fit: contain;
+ filter: drop-shadow(0 10px 15px rgba(0, 0, 0, 0.3));
+}
+
+.service-name {
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+ color: #1F5D89;
+ font-weight: 700;
+ font-size: 1.4rem;
+ background-color: rgba(255, 255, 255, 0.92);
+ padding: 12px 20px;
+ border-radius: 10px;
+ text-align: center;
+ box-shadow: 0 4px 15px rgba(0, 0, 0, 0.15), 0 0 0 2px rgba(165, 240, 255, 0.5); /* #A5F0FF */
+ z-index: 4;
+ font-family: var(--font-heading);
+ letter-spacing: -0.01em;
+ border: 1px solid rgba(165, 240, 255, 0.8);
+ backdrop-filter: blur(4px);
+ transition: all 0.3s ease;
+ min-width: 160px;
+ max-width: 90%;
+ width: auto;
+}
+
+.iceberg:hover .service-name {
+ background-color: rgba(255, 255, 255, 0.97);
+ box-shadow: 0 8px 20px rgba(0, 0, 0, 0.2), 0 0 0 3px rgba(165, 240, 255, 0.7);
+ transform: translate(-50%, -55%);
+ color: #40B4FF;
+}
+
+.float-1 {
+ animation: float1 5s ease-in-out infinite;
+}
+
+.float-2 {
+ animation: float2 6s ease-in-out infinite;
+}
+
+.float-3 {
+ animation: float3 7s ease-in-out infinite;
+}
+
+@keyframes float1 {
+ 0%, 100% { transform: translateY(0); }
+ 50% { transform: translateY(-15px); }
+}
+
+@keyframes float2 {
+ 0%, 100% { transform: translateY(0); }
+ 50% { transform: translateY(-20px); }
+}
+
+@keyframes float3 {
+ 0%, 100% { transform: translateY(0); }
+ 50% { transform: translateY(-10px); }
+}
+
+.about-section {
+ position: relative;
+ background-color: rgba(31, 93, 137, 0.15);
+ backdrop-filter: blur(10px);
+ margin: 1rem 0;
+ padding: 3rem 2rem;
+ z-index: 2;
+ border-top: 1px solid rgba(255, 255, 255, 0.1);
+ border-bottom: 1px solid rgba(255, 255, 255, 0.1);
+ width: 100%;
+ box-sizing: border-box;
+}
+
+.about-container {
+ max-width: 1000px;
+ margin: 0 auto;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ width: 100%;
+}
+
+/* Modern FAQ Accordion Styles */
+.accordion-group {
+ width: 100%;
+ display: flex;
+ flex-direction: column;
+ gap: 1rem;
+ margin-top: 1.5rem;
+}
+
+.accordion-item {
+ background: rgba(31, 93, 137, 0.1);
+ border-radius: 12px;
+ overflow: hidden;
+ border: 1px solid rgba(165, 240, 255, 0.2);
+ transition: all 0.3s ease;
+ box-shadow: 0 4px 8px rgba(0, 0, 0, 0.05);
+}
+
+.accordion-item:hover {
+ background: rgba(31, 93, 137, 0.2);
+ box-shadow: 0 6px 12px rgba(0, 0, 0, 0.1);
+}
+
+.accordion-header {
+ padding: 1.2rem 1.5rem;
+ cursor: pointer;
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ font-weight: 600;
+ color: #F6F6F6;
+ background: rgba(31, 93, 137, 0.2);
+ transition: all 0.2s ease;
+ font-size: 1.1rem;
+ user-select: none;
+}
+
+.accordion-header:hover {
+ background: rgba(64, 180, 255, 0.2);
+}
+
+.accordion-toggle-icon {
+ font-size: 1.2rem;
+ transition: transform 0.3s ease;
+ color: #A5F0FF;
+}
+
+.accordion-item.active .accordion-toggle-icon {
+ transform: rotate(180deg);
+}
+
+.accordion-content {
+ max-height: 0;
+ overflow: hidden;
+ transition: max-height 0.5s cubic-bezier(0, 1, 0, 1), padding 0.3s ease;
+ background: rgba(31, 93, 137, 0.05);
+ line-height: 1.6;
+ font-size: 1rem;
+ color: rgba(246, 246, 246, 0.9);
+}
+
+.accordion-item.active .accordion-content {
+ max-height: 1000px;
+ transition: max-height 1s ease-in-out, padding 0.3s ease;
+ padding: 1.5rem;
+}
+
+.accordion-content p {
+ margin-top: 0;
+}
+
+.accordion-content p:last-child {
+ margin-bottom: 0;
+}
+
+.accordion-content ul {
+ margin-top: 0.5rem;
+ margin-bottom: 0.5rem;
+ padding-left: 1.5rem;
+}
+
+.accordion-content li {
+ margin-bottom: 0.5rem;
+}
+
+.about-image-container {
+ max-width: 180px;
+ margin: 0 auto 2rem;
+ position: relative;
+ z-index: 2;
+}
+
+.about-logo {
+ width: 100%;
+ height: auto;
+ border-radius: 50%;
+ padding: 1rem;
+ background: rgba(255, 255, 255, 0.05);
+ border: 2px solid rgba(165, 240, 255, 0.3);
+ box-shadow: 0 10px 25px rgba(31, 93, 137, 0.3);
+ animation: gentle-float 6s ease-in-out infinite;
+}
+
+@keyframes gentle-float {
+ 0%, 100% {
+ transform: translateY(0);
+ }
+ 50% {
+ transform: translateY(-10px);
+ }
+}
+
+.about-intro {
+ text-align: center;
+ max-width: 800px;
+ margin: 0 auto 2rem;
+ color: #F6F6F6;
+ font-size: 1.1rem;
+ line-height: 1.6;
+}
+
+.accordion-cta {
+ display: inline-flex;
+ align-items: center;
+ background-color: #40B4FF;
+ color: white;
+ border: none;
+ padding: 0.7rem 1.2rem;
+ border-radius: 6px;
+ margin-top: 0.5rem;
+ text-decoration: none;
+ font-weight: 600;
+ transition: all 0.2s ease;
+}
+
+.accordion-cta:hover {
+ background-color: #2ba3f7;
+ transform: translateY(-2px);
+}
+
+.accordion-cta-icon {
+ margin-left: 0.5rem;
+ font-size: 0.9rem;
+}
+
+/* Media queries for responsive design */
+@media (max-width: 768px) {
+ .about-section {
+ padding: 2rem 1.2rem;
+ }
+
+ .about-image-container {
+ max-width: 140px;
+ margin-bottom: 1.5rem;
+ }
+
+ .accordion-header {
+ padding: 1rem 1.2rem;
+ font-size: 1rem;
+ }
+
+ .accordion-item.active .accordion-content {
+ padding: 1.2rem;
+ }
+
+ .accordion-toggle-icon {
+ font-size: 1.1rem;
+ }
+}
+
+/* ...existing code... */
+
+.about-text {
+ flex: 1;
+ min-width: 300px;
+ max-width: 600px;
+ color: white;
+ text-align: left;
+}
+
+.about-text h3 {
+ font-size: 2rem;
+ margin-bottom: 1.5rem;
+ color: white;
+ text-shadow: 0 1px 3px rgba(0, 0, 0, 0.2);
+}
+
+.about-text p {
+ margin-bottom: 1.25rem;
+ line-height: 1.7;
+ font-size: 1.1rem;
+}
+
+.about-image {
+ flex: 1;
+ min-width: 300px;
+ max-width: 500px;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+}
+
+.about-image img {
+ width: 100%;
+ height: auto;
+ border-radius: 12px;
+ box-shadow: 0 15px 30px rgba(0, 0, 0, 0.25);
+ transform: perspective(1000px) rotateY(-5deg);
+ transition: transform 0.5s ease;
+}
+
+.about-image img:hover {
+ transform: perspective(1000px) rotateY(0);
+}
+
+/* Statistiques */
+.stats-section {
+ background: linear-gradient(180deg, rgba(64, 180, 255, 0.2) 0%, rgba(31, 93, 137, 0) 100%);
+ padding: 4rem 2rem;
+ position: relative;
+ z-index: 2;
+}
+
+.stats-container {
+ max-width: 1200px;
+ margin: 0 auto;
+ display: grid;
+ grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
+ gap: 2rem;
+}
+
+.stat-card {
+ background: rgba(31, 93, 137, 0.1);
+ border-radius: 12px;
+ padding: 2rem;
+ text-align: center;
+ transition: transform 0.3s ease;
+}
+
+.stat-card:hover {
+ transform: translateY(-5px);
+}
+
+.stat-icon {
+ font-size: 2.5rem;
+ margin-bottom: 1rem;
+ color: #40B4FF;
+}
+
+.stat-title {
+ font-size: 1.2rem;
+ margin-bottom: 0.5rem;
+ color: #F6F6F6;
+}
+
+.stat-value {
+ font-size: 2rem;
+ font-weight: 700;
+ color: #A5F0FF;
+}
+
+/* Fonctionnalités */
+.features-section {
+ background: linear-gradient(180deg, rgba(64, 180, 255, 0.2) 0%, rgba(31, 93, 137, 0) 100%);
+ padding: 4rem 2rem;
+ position: relative;
+ z-index: 2;
+}
+
+.feature-card {
+ background: rgba(31, 93, 137, 0.1);
+ border-radius: 12px;
+ padding: 2rem;
+ transition: transform 0.3s ease;
+}
+
+.feature-card:hover {
+ background: rgba(64, 180, 255, 0.15);
+}
+
+.feature-icon {
+ font-size: 2rem;
+ margin-bottom: 1rem;
+ color: #A5F0FF;
+ background: rgba(31, 93, 137, 0.3);
+ padding: 1rem;
+ border-radius: 50%;
+}
+
+.feature-title {
+ font-size: 1.2rem;
+ margin-bottom: 0.5rem;
+ color: #F6F6F6;
+}
+
+.feature-description {
+ color: #F6F6F6;
+ line-height: 1.6;
+}
+
+/* FAQ */
+.faq-section {
+ background: rgba(31, 93, 137, 0.05);
+ padding: 4rem 2rem;
+ position: relative;
+ z-index: 2;
+}
+
+.faq-item {
+ background: rgba(31, 93, 137, 0.08);
+ border-radius: 8px;
+ margin-bottom: 1.5rem;
+ padding: 1.5rem;
+ transition: background 0.3s ease;
+}
+
+.faq-item:hover {
+ background: rgba(31, 93, 137, 0.12);
+}
+
+.faq-question {
+ font-size: 1.1rem;
+ margin-bottom: 0.5rem;
+ color: #F6F6F6;
+}
+
+.faq-answer {
+ color: #F6F6F6;
+ line-height: 1.6;
+}
+
+/* Pied de page */
+.footer {
+ background-color: #1F5D89;
+ color: white;
+ padding: 4rem 2rem 2rem;
+ position: relative;
+ z-index: 3;
+ border-top: 1px solid rgba(255, 255, 255, 0.1);
+ width: 100%;
+ box-sizing: border-box;
+}
+
+.footer-content {
+ display: flex;
+ flex-wrap: wrap;
+ justify-content: space-between;
+ max-width: 1200px;
+ margin: 0 auto;
+}
+
+.footer-column {
+ flex: 1;
+ min-width: 250px;
+ margin-bottom: 2rem;
+ text-align: left;
+ padding: 0 1.5rem;
+}
+
+.footer-column h4 {
+ font-size: 1.2rem;
+ margin-bottom: 1.5rem;
+ color: #A5F0FF;
+ position: relative;
+ padding-bottom: 0.75rem;
+}
+
+.footer-column h4:after {
+ content: '';
+ position: absolute;
+ bottom: 0;
+ left: 0;
+ width: 40px;
+ height: 2px;
+ background-color: #A5F0FF;
+}
+
+.footer-column ul {
+ list-style: none;
+ padding: 0;
+ margin: 0;
+}
+
+.footer-column ul li {
+ margin-bottom: 0.8rem;
+}
+
+.footer-column a {
+ color: rgba(246, 246, 246, 0.8); /* #F6F6F6 */
+ text-decoration: none;
+ transition: all 0.2s;
+ display: inline-block;
+}
+
+.footer-column a:hover {
+ color: #F6F6F6;
+ transform: translateX(3px);
+}
+
+.footer-bottom {
+ border-top: 1px solid rgba(255, 255, 255, 0.1);
+ padding-top: 1.5rem;
+ margin-top: 2rem;
+ text-align: center;
+ font-size: 0.9rem;
+ color: rgba(255, 255, 255, 0.7);
+ max-width: 1200px;
+ margin-left: auto;
+ margin-right: auto;
+}
+
+.popup-overlay {
+ position: fixed;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ background-color: rgba(0, 0, 0, 0.7);
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ z-index: 100;
+ padding: 1rem;
+ backdrop-filter: blur(3px);
+ animation: fadeIn 0.2s ease-out;
+}
+
+.popup-content {
+ background: linear-gradient(135deg, #F6F6F6 0%, #E8F7FF 100%);
+ color: #1F5D89;
+ border-radius: 12px;
+ padding: 2rem;
+ max-width: 500px;
+ width: 100%;
+ box-shadow: 0 10px 25px rgba(0, 0, 0, 0.3);
+ position: relative;
+ overflow: hidden;
+ animation: slideUp 0.3s ease-out;
+}
+
+.popup-close {
+ position: absolute;
+ top: 15px;
+ right: 15px;
+ background: none;
+ border: none;
+ font-size: 1.5rem;
+ cursor: pointer;
+ color: #1F5D89;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ width: 32px;
+ height: 32px;
+ border-radius: 50%;
+ transition: background-color 0.2s;
+ padding: 0;
+}
+
+.popup-close:hover {
+ background-color: rgba(64, 180, 255, 0.1); /* #40B4FF */
+}
+
+.popup-title {
+ font-family: var(--font-heading);
+ font-size: 1.8rem;
+ margin-top: 0;
+ margin-bottom: 1rem;
+ color: #1F5D89;
+ line-height: 1.2;
+}
+
+.popup-description {
+ font-size: 1.1rem;
+ line-height: 1.5;
+ margin-bottom: 1.5rem;
+ color: #1F5D89;
+}
+
+.popup-button {
+ display: inline-flex;
+ align-items: center;
+ background-color: #40B4FF;
+ color: white;
+ border: none;
+ padding: 0.8rem 1.5rem;
+ border-radius: 6px;
+ cursor: pointer;
+ text-decoration: none;
+ font-weight: 600;
+ letter-spacing: 0.3px;
+ box-shadow: 0 2px 8px rgba(64, 180, 255, 0.3);
+ transition: all 0.2s ease;
+}
+
+.popup-button:hover {
+ background-color: #2ba3f7;
+ transform: translateY(-1px);
+ box-shadow: 0 4px 12px rgba(64, 180, 255, 0.4);
+}
+
+.popup-button:focus-visible {
+ outline: 3px solid #69B7E2;
+ outline-offset: 2px;
+}
+
+.popup-button-icon {
+ margin-right: 0.5rem;
+ font-size: 1.1em;
+}
+
+@keyframes fadeIn {
+ from {
+ opacity: 0;
+ }
+ to {
+ opacity: 1;
+ }
+}
+
+@keyframes slideUp {
+ from {
+ transform: translateY(30px);
+ opacity: 0;
+ }
+ to {
+ transform: translateY(0);
+ opacity: 1;
+ }
+}
+
+.bubbles {
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ overflow: hidden;
+ top: 0;
+ left: 0;
+ z-index: 1;
+ pointer-events: none;
+}
+
+.bubble {
+ position: absolute;
+ bottom: -20px;
+ width: 40px;
+ height: 40px;
+ background: rgba(165, 240, 255, 0.2); /* #A5F0FF */
+ border-radius: 50%;
+ opacity: 0.8;
+ animation: rise 10s infinite ease-in;
+}
+
+.bubble:nth-child(1) {
+ width: 25px;
+ height: 25px;
+ left: 10%;
+ animation-duration: 8s;
+}
+
+.bubble:nth-child(2) {
+ width: 30px;
+ height: 30px;
+ left: 20%;
+ animation-duration: 9s;
+ animation-delay: 1s;
+}
+
+.bubble:nth-child(3) {
+ width: 35px;
+ height: 35px;
+ left: 35%;
+ animation-duration: 10s;
+ animation-delay: 2s;
+}
+
+.bubble:nth-child(4) {
+ width: 28px;
+ height: 28px;
+ left: 50%;
+ animation-duration: 7s;
+ animation-delay: 0s;
+}
+
+.bubble:nth-child(5) {
+ width: 22px;
+ height: 22px;
+ left: 65%;
+ animation-duration: 12s;
+ animation-delay: 3s;
+}
+
+.bubble:nth-child(6) {
+ width: 32px;
+ height: 32px;
+ left: 80%;
+ animation-duration: 9s;
+ animation-delay: 1.5s;
+}
+
+.bubble:nth-child(7) {
+ width: 20px;
+ height: 20px;
+ left: 90%;
+ animation-duration: 8s;
+ animation-delay: 2.5s;
+}
+
+@keyframes rise {
+ 0% {
+ bottom: -100px;
+ transform: translateX(0);
+ opacity: 0.8;
+ }
+ 50% {
+ transform: translateX(40px);
+ opacity: 0.4;
+ }
+ 100% {
+ bottom: 1080px;
+ transform: translateX(-40px);
+ opacity: 0;
+ }
+}
+
+.navbar-mobile-toggle {
+ display: none;
+ background: transparent;
+ border: none;
+ cursor: pointer;
+ padding: 5px;
+ z-index: 20;
+ width: 40px;
+ height: 40px;
+ position: relative;
+}
+
+.navbar-mobile-toggle span {
+ display: block;
+ width: 25px;
+ height: 3px;
+ background-color: white;
+ margin: 5px auto;
+ transition: all 0.3s ease;
+}
+
+.navbar-right {
+ display: flex;
+ align-items: center;
+ gap: 12px;
+}
+
+@media (max-width: 768px) {
+ .navbar {
+ padding: 0.6rem 1rem;
+ }
+
+ .navbar-mobile-toggle {
+ display: block;
+ }
+
+ .navbar-right {
+ position: fixed;
+ top: 0;
+ right: -100%;
+ flex-direction: column;
+ background-color: rgba(12, 59, 93, 0.98);
+ height: 100vh;
+ width: 70%;
+ max-width: 300px;
+ padding-top: 70px;
+ transition: all 0.3s ease;
+ z-index: 15;
+ gap: 20px;
+ backdrop-filter: blur(10px);
+ box-shadow: -5px 0 15px rgba(0, 0, 0, 0.2);
+ visibility: hidden; /* Add this */
+ opacity: 0; /* Add this */
+ }
+
+ .navbar-right.mobile-active {
+ right: 0;
+ visibility: visible; /* Add this */
+ opacity: 1; /* Add this */
+ }
+
+ .navbar-mobile-toggle.active span:nth-child(1) {
+ transform: translateY(8px) rotate(45deg);
+ }
+
+ .navbar-mobile-toggle.active span:nth-child(2) {
+ opacity: 0;
+ transform: scale(0);
+ }
+
+ .navbar-mobile-toggle.active span:nth-child(3) {
+ transform: translateY(-8px) rotate(-45deg);
+ }
+
+ /* Iceberg consistency fixes */
+ .iceberg {
+ width: 220px;
+ height: 180px;
+ margin: 0 auto;
+ }
+
+ .iceberg img {
+ width: 100%;
+ max-width: 220px;
+ max-height: 180px;
+ object-fit: contain;
+ }
+
+ .service-name {
+ font-size: 1.2rem;
+ padding: 10px 16px;
+ width: auto;
+ min-width: 160px;
+ max-width: 90%;
+ }
+}
+
+/* Desktop consistency for icebergs */
+.iceberg {
+ position: relative;
+ width: 250px;
+ height: 200px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+}
+
+.iceberg img {
+ width: 100%;
+ height: auto;
+ max-width: 250px;
+ max-height: 200px;
+ object-fit: contain;
+}
diff --git a/banquise-website/src/App.tsx b/banquise-website/src/App.tsx
new file mode 100644
index 0000000..a67b62c
--- /dev/null
+++ b/banquise-website/src/App.tsx
@@ -0,0 +1,525 @@
+import { FiUser, FiDatabase, FiShield, FiChevronDown } from 'react-icons/fi'
+import { FaDiscord, FaArrowRight, FaEnvelope, FaGithub, FaNetworkWired, FaServer, FaLaptopCode, FaCloudUploadAlt, FaExternalLinkAlt } from 'react-icons/fa'
+import { FiX, FiExternalLink } from 'react-icons/fi'
+import './App.css'
+import icebergImage from './assets/iceberg.png'
+import logoImage from './assets/banquise.png'
+import { useEffect, useState, useMemo, useCallback, useRef } from 'react'
+
+import aboutImage from './assets/banquise.png'
+
+function App() {
+ const [selectedService, setSelectedService] = useState(null);
+ const [mobileMenuOpen, setMobileMenuOpen] = useState(false);
+ const mobileMenuRef = useRef(null);
+
+ const services = useMemo(() => [
+ {
+ name: "Notre Wiki",
+ url: "https://wiki.la-banquise.fr/en/home",
+ description: "Notre Wiki est une base de connaissances collaborative où vous trouverez toute la documentation relative à nos projets et services. Apprenez, contribuez et partagez vos connaissances avec la communauté La Banquise."
+ },
+ {
+ name: "Gitea",
+ url: "https://git.la-banquise.fr/",
+ description: "Gitea est notre plateforme de gestion de code source, similaire à GitHub mais hébergée par nos soins. Créez des dépôts, collaborez sur des projets et participez au développement d'applications open-source dans un environnement sécurisé."
+ },
+ {
+ name: "Panel de jeux",
+ url: "https://panel.la-banquise.fr/auth/login",
+ description: "Interface de connection à notre panel Pterodactyl, qui vous permet de gérer vos serveurs de jeux. Créez, gérez et configurez vos serveurs de jeux préférés en toute simplicité."
+ },
+ ], []);
+
+ const [icebergs, setIcebergs] = useState>([])
+
+ const [reducedMotion, setReducedMotion] = useState(false);
+
+ useEffect(() => {
+ const prefersReducedMotion = window.matchMedia('(prefers-reduced-motion: reduce)').matches;
+ setReducedMotion(prefersReducedMotion);
+
+ const startTime = performance.now();
+ let count = 0;
+ while (performance.now() - startTime < 5) {
+ count++;
+ }
+
+ if (count < 1000) {
+ setReducedMotion(true);
+ }
+ }, []);
+
+ const positionIcebergs = useCallback(() => {
+ const newIcebergs = [];
+
+ const positions = [
+ { x: 25, y: 35, scale: 0.95, rotation: 0 },
+ { x: 50, y: 25, scale: 1.1, rotation: 0 },
+ { x: 75, y: 35, scale: 0.95, rotation: 0 },
+ ];
+
+ const floatClasses = ['float-1', 'float-2', 'float-3', 'float-4', 'float-5'];
+
+ for (let i = 0; i < services.length; i++) {
+ const position = positions[i % positions.length];
+
+ newIcebergs.push({
+ id: i,
+ x: position.x,
+ y: position.y,
+ scale: position.scale,
+ rotation: position.rotation,
+ service: services[i],
+ floatClass: reducedMotion ? '' : floatClasses[i % floatClasses.length]
+ });
+ }
+
+ return newIcebergs;
+ }, [services, reducedMotion]);
+
+ useEffect(() => {
+ setIcebergs(positionIcebergs());
+ }, [positionIcebergs]);
+
+ const renderBubbles = useMemo(() => {
+ if (reducedMotion) return null;
+
+ return (
+
+ );
+ }, [reducedMotion]);
+
+ const handleIcebergClick = (event: React.MouseEvent, serviceId: number) => {
+ event.preventDefault();
+ setSelectedService(serviceId);
+ };
+
+ const handleClosePopup = () => {
+ setSelectedService(null);
+ };
+
+ useEffect(() => {
+ const handleOutsideClick = (event: MouseEvent) => {
+ if (mobileMenuRef.current && !mobileMenuRef.current.contains(event.target as Node)) {
+ setMobileMenuOpen(false);
+ }
+ };
+
+ if (mobileMenuOpen) {
+ document.addEventListener('mousedown', handleOutsideClick);
+ }
+
+ return () => {
+ document.removeEventListener('mousedown', handleOutsideClick);
+ };
+ }, [mobileMenuOpen]);
+
+ useEffect(() => {
+ if (mobileMenuOpen) {
+ document.body.style.overflow = 'hidden';
+ } else {
+ document.body.style.overflow = 'auto';
+ }
+
+ return () => {
+ document.body.style.overflow = 'auto';
+ };
+ }, [mobileMenuOpen]);
+
+ const [activeAccordion, setActiveAccordion] = useState(null);
+
+ // FAQ items for the about section
+ const faqItems = useMemo(() => [
+ {
+ question: "Qui sommes-nous ?",
+ answer: (
+ <>
+ La Banquise est une initiative d'étudiants de l'EPITA Lyon dont l'objectif est de rendre plus accessible l'hébergement de services informatiques. Fondée en 2023, notre association à but non lucratif vise à permettre à ceux qui le souhaitent de se former sur des technologies d'hébergement et de réseau.
+ Notre équipe est composée d'étudiants passionnés par l'informatique, le réseau et le partage de connaissances. Nous mettons notre expertise au service des étudiants et des associations de l'EPITA.
+ >
+ )
+ },
+ {
+ question: "Comment candidater pour rejoindre La Banquise ?",
+ answer: (
+ <>
+ Pour rejoindre notre équipe, rien de plus simple :
+
+ Rejoignez notre serveur Discord
+ Présentez-vous et expliquez votre motivation dans un ticket
+ Précisez vos compétences ou les domaines qui vous intéressent
+ Un membre de notre équipe vous contactera pour un échange
+
+ Nous recherchons des personnes motivées, peu importe votre niveau technique actuel !
+
+ Rejoindre le Discord
+
+ >
+ )
+ },
+ {
+ question: "Quels sont nos objectifs ?",
+ answer: (
+ <>
+ Nos principaux objectifs sont :
+
+ Former les étudiants aux technologies d'hébergement et de réseau
+ Fournir des services informatiques de qualité aux étudiants et associations de l'EPITA
+ Promouvoir le partage de connaissances et l'entraide
+ Créer un environnement d'apprentissage pratique par l'expérience
+ Maintenir une infrastructure robuste et sécurisée
+
+ >
+ )
+ },
+ {
+ question: "Comment utiliser nos services ?",
+ answer: (
+ <>
+ Pour accéder à nos services :
+
+ Créez un compte sur notre plateforme d'authentification
+ Connectez-vous au service souhaité avec vos identifiants
+ Consultez notre Wiki pour obtenir de l'aide sur l'utilisation de chaque service
+
+ Si vous rencontrez des difficultés, n'hésitez pas à demander de l'aide sur notre Discord.
+
+ Créer un compte
+
+ >
+ )
+ },
+ {
+ question: "Comment contribuer au projet ?",
+ answer: (
+ <>
+ Il existe plusieurs façons de contribuer au projet La Banquise :
+
+ Rejoindre l'équipe en tant que membre actif
+ Contribuer au code source de nos projets via Gitea
+ Rédiger ou améliorer la documentation sur notre Wiki
+ Proposer de nouvelles idées de services ou d'améliorations
+ Aider d'autres utilisateurs sur notre Discord
+
+ Toutes les contributions sont les bienvenues, même les plus modestes !
+ >
+ )
+ },
+ ], []);
+
+ const toggleAccordion = (index: number) => {
+ setActiveAccordion(activeAccordion === index ? null : index);
+ };
+
+ return (
+
+
Passer au contenu principal
+
+
+
+
+
+ {renderBubbles}
+
+
+
+
+
+
+
+ Association La Banquise
+
+ Association d'hébergement et lab réseau pour tous les étudiants et associations de l'EPITA
+
+
+
+
+
+
+ Notre infrastructure
+
+ Des services robustes et sécurisés pour répondre à vos besoins
+
+
+
+
+
+
+
+
Serveurs performants
+
+ Infrastructure optimisée pour assurer des performances élevées et une disponibilité maximale de vos applications
+
+
+
+
+
+
+
+
Stockage sécurisé
+
+ Solutions de stockage distribuées avec redondance pour garantir l'intégrité et la durabilité de vos données
+
+
+
+
+
+
+
+
Réseau optimisé
+
+ Architecture réseau à haute disponibilité avec une faible latence pour vos applications critiques
+
+
+
+
+
+
+
+
Sécurité renforcée
+
+ Protection contre les menaces avec systèmes de sécurité modernes et mises à jour régulières
+
+
+
+
+
+
+
+ Nos services
+
+ Explorez notre écosystème de services conçus pour répondre à vos besoins.
+
+
+
+
+
+
+
+ À propos de nous
+
+ Découvrez notre mission et posez-nous vos questions
+
+
+
+
+
+
+
+
+ La Banquise est une association étudiante dédiée à l'hébergement de services et à la formation sur les technologies réseau, au service de la communauté EPITA.
+
+
+
+ {faqItems.map((item, index) => (
+
+
toggleAccordion(index)}
+ role="button"
+ aria-expanded={activeAccordion === index}
+ aria-controls={`accordion-content-${index}`}
+ tabIndex={0}
+ onKeyPress={(e) => {
+ if (e.key === 'Enter' || e.key === ' ') {
+ toggleAccordion(index);
+ }
+ }}
+ >
+ {item.question}
+
+
+
+ {item.answer}
+
+
+ ))}
+
+
+
+
+ {selectedService !== null && (
+
+ )}
+
+
+
const banquise = new ServerInfra();
+
banquise.deploy('wiki');
+
banquise.deploy('gitea');
+
banquise.optimize();
+
banquise.monitor();
+
+
+
+
+
+
+
+
+ );
+}
+
+export default App;
diff --git a/banquise-website/src/assets/banquise.png b/banquise-website/src/assets/banquise.png
new file mode 100644
index 0000000000000000000000000000000000000000..39c30112acbea7d24446e494826796c246a423c1
GIT binary patch
literal 192213
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