refactor: remove ParticlesBackground component and adjust App layout

This commit is contained in:
Félix MARQUET
2026-02-04 09:16:57 +00:00
parent 29d4bcbe30
commit 3b8f1d9da2
5 changed files with 494 additions and 992 deletions

View File

@@ -7,24 +7,22 @@
"@tailwindcss/cli": "^4.1.18",
"@tailwindcss/vite": "^4.1.18",
"@testing-library/jest-dom": "^6.9.1",
"@testing-library/react": "^16.3.1",
"@testing-library/react": "^16.3.2",
"@testing-library/user-event": "^14.6.1",
"@types/react": "19.2.7",
"@types/react": "19.2.10",
"@types/react-dom": "19.2.3",
"aos": "^2.3.4",
"browserslist": "^4.28.1",
"browserslist-useragent": "^4.0.0",
"i18next": "^25.7.3",
"i18next": "^25.8.1",
"i18next-http-backend": "^3.0.2",
"react": "19.2.3",
"react-dom": "19.2.3",
"react": "19.2.4",
"react-dom": "19.2.4",
"react-github-btn": "^1.4.0",
"react-i18next": "^16.5.1",
"react-i18next": "^16.5.4",
"react-icons": "^5.5.0",
"react-particles": "^2.12.2",
"sass": "^1.97.2",
"sass": "^1.97.3",
"tailwindcss": "^4.1.18",
"tsparticles-slim": "^2.12.0",
"typescript": "^5.9.3",
"web-vitals": "^5.1.0"
},
@@ -56,13 +54,13 @@
]
},
"devDependencies": {
"@babel/plugin-proposal-private-property-in-object": "^7.21.11",
"@babel/plugin-transform-private-property-in-object": "^7.28.6",
"@simonsmith/cypress-image-snapshot": "^10.0.3",
"@vitejs/plugin-react": "^5.1.2",
"cypress": "^15.8.2",
"prettier": "^3.7.4",
"@vitejs/plugin-react": "^5.1.3",
"cypress": "^15.10.0",
"prettier": "^3.8.1",
"vite": "^7.3.1",
"vite-plugin-svgr": "^4.5.0",
"vite-tsconfig-paths": "^6.0.3"
"vite-tsconfig-paths": "^6.0.5"
}
}

1319
pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff

View File

@@ -11,7 +11,6 @@ import Footer from "./components/Footer";
import CV from "./components/CV";
import Menu from "./components/Menu";
import LoadingScreen from "./components/LoadingScreen";
import ParticlesBackground from "./components/ParticlesBackground";
import ContactSection from "./components/ContactSection";
import TimelineSection from "./components/TimelineSection";
import data from "./assets/DATA";
@@ -66,9 +65,8 @@ function App() {
}
return (
<div className="min-h-screen py-10 bg-gray-100 dark:bg-gray-900 m-0" data-testid="root">
<ParticlesBackground isDark={theme === "dark"} />
<div className={`mobile-margin transition-all duration-1000 ${showContent ? 'animate-fadeInUp' : 'opacity-0'}`}>
<div className="min-h-screen py-10 bg-gray-100 dark:bg-gray-900 m-0 relative" data-testid="root">
<div className={`mobile-margin relative z-10 transition-all duration-1000 ${showContent ? 'animate-fadeInUp' : 'opacity-0'}`}>
<Menu />
<div data-aos="face-down" data-aos-duration="800" id="top">
<Card name={data.name} title={data.title} social={data.social} />

View File

@@ -1,29 +0,0 @@
import React from 'react';
interface ParticlesBackgroundProps {
isDark: boolean;
}
const ParticlesBackground: React.FC<ParticlesBackgroundProps> = ({ isDark }) => {
return (
<div className="absolute inset-0 -z-10">
{/* Placeholder pour les particules - nous utiliserons une version CSS simple */}
<div className="particles-container">
{Array.from({ length: 20 }).map((_, i) => (
<div
key={i}
className={`absolute w-1 h-1 rounded-full ${isDark ? 'bg-white' : 'bg-gray-600'} animate-float`}
style={{
left: `${Math.random() * 100}%`,
top: `${Math.random() * 100}%`,
animationDelay: `${Math.random() * 5}s`,
animationDuration: `${3 + Math.random() * 4}s`,
}}
/>
))}
</div>
</div>
);
};
export default ParticlesBackground;

View File

@@ -1,4 +1,4 @@
/*! tailwindcss v4.1.12 | MIT License | https://tailwindcss.com */
/*! tailwindcss v4.1.18 | MIT License | https://tailwindcss.com */
@layer properties;
@layer theme, base, components, utilities;
@layer theme {
@@ -12,12 +12,9 @@
--color-red-500: oklch(63.7% 0.237 25.331);
--color-red-800: oklch(44.4% 0.177 26.899);
--color-red-900: oklch(39.6% 0.141 25.723);
--color-yellow-500: oklch(79.5% 0.184 86.047);
--color-green-50: oklch(98.2% 0.018 155.826);
--color-green-100: oklch(96.2% 0.044 156.743);
--color-green-200: oklch(92.5% 0.084 155.995);
--color-green-300: oklch(87.1% 0.15 154.449);
--color-green-400: oklch(79.2% 0.209 151.711);
--color-green-500: oklch(72.3% 0.219 149.579);
--color-green-800: oklch(44.8% 0.119 151.328);
--color-green-900: oklch(39.3% 0.095 152.535);
@@ -47,7 +44,6 @@
--color-white: #fff;
--spacing: 0.25rem;
--container-xs: 20rem;
--container-3xl: 48rem;
--container-4xl: 56rem;
--text-xs: 0.75rem;
--text-xs--line-height: calc(1 / 0.75);
@@ -72,11 +68,9 @@
--font-weight-bold: 700;
--font-weight-extrabold: 800;
--leading-relaxed: 1.625;
--radius-sm: 0.25rem;
--radius-md: 0.375rem;
--radius-lg: 0.5rem;
--radius-xl: 0.75rem;
--ease-out: cubic-bezier(0, 0, 0.2, 1);
--animate-spin: spin 1s linear infinite;
--animate-pulse: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
--animate-bounce: bounce 1s infinite;
@@ -243,7 +237,7 @@
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
clip-path: inset(50%);
white-space: nowrap;
border-width: 0;
}
@@ -286,8 +280,8 @@
.left-4 {
left: calc(var(--spacing) * 4);
}
.-z-10 {
z-index: calc(10 * -1);
.z-10 {
z-index: 10;
}
.z-50 {
z-index: 50;
@@ -391,39 +385,21 @@
.inline-block {
display: inline-block;
}
.h-1 {
height: calc(var(--spacing) * 1);
}
.h-3 {
height: calc(var(--spacing) * 3);
}
.h-6 {
height: calc(var(--spacing) * 6);
}
.h-8 {
height: calc(var(--spacing) * 8);
}
.h-20 {
height: calc(var(--spacing) * 20);
}
.h-64 {
height: calc(var(--spacing) * 64);
}
.h-full {
height: 100%;
}
.min-h-screen {
min-height: 100vh;
}
.w-0\.5 {
width: calc(var(--spacing) * 0.5);
}
.w-1 {
width: calc(var(--spacing) * 1);
}
.w-1\/3 {
width: calc(1/3 * 100%);
}
.w-3 {
width: calc(var(--spacing) * 3);
}
@@ -445,9 +421,6 @@
.w-full {
width: 100%;
}
.max-w-3xl {
max-width: var(--container-3xl);
}
.max-w-4xl {
max-width: var(--container-4xl);
}
@@ -485,12 +458,6 @@
.grid-cols-1 {
grid-template-columns: repeat(1, minmax(0, 1fr));
}
.grid-cols-2 {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
.grid-cols-12 {
grid-template-columns: repeat(12, minmax(0, 1fr));
}
.flex-col {
flex-direction: column;
}
@@ -509,9 +476,6 @@
.justify-around {
justify-content: space-around;
}
.justify-between {
justify-content: space-between;
}
.justify-center {
justify-content: center;
}
@@ -521,18 +485,12 @@
.gap-2 {
gap: calc(var(--spacing) * 2);
}
.gap-3 {
gap: calc(var(--spacing) * 3);
}
.gap-4 {
gap: calc(var(--spacing) * 4);
}
.gap-5 {
gap: calc(var(--spacing) * 5);
}
.gap-6 {
gap: calc(var(--spacing) * 6);
}
.gap-12 {
gap: calc(var(--spacing) * 12);
}
@@ -585,12 +543,6 @@
margin-inline-end: calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-x-reverse)));
}
}
.overflow-hidden {
overflow: hidden;
}
.rounded {
border-radius: 0.25rem;
}
.rounded-full {
border-radius: calc(infinity * 1px);
}
@@ -600,9 +552,6 @@
.rounded-md {
border-radius: var(--radius-md);
}
.rounded-sm {
border-radius: var(--radius-sm);
}
.rounded-xl {
border-radius: var(--radius-xl);
}
@@ -665,27 +614,12 @@
.bg-gray-400 {
background-color: var(--color-gray-400);
}
.bg-gray-600 {
background-color: var(--color-gray-600);
}
.bg-green-50 {
background-color: var(--color-green-50);
}
.bg-green-100 {
background-color: var(--color-green-100);
}
.bg-green-200 {
background-color: var(--color-green-200);
}
.bg-green-300 {
background-color: var(--color-green-300);
}
.bg-green-400 {
background-color: var(--color-green-400);
}
.bg-green-500 {
background-color: var(--color-green-500);
}
.bg-purple-50 {
background-color: var(--color-purple-50);
}
@@ -699,14 +633,6 @@
--tw-gradient-position: to bottom right in oklab;
background-image: linear-gradient(var(--tw-gradient-stops));
}
.bg-gradient-to-r {
--tw-gradient-position: to right in oklab;
background-image: linear-gradient(var(--tw-gradient-stops));
}
.from-blue-500 {
--tw-gradient-from: var(--color-blue-500);
--tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));
}
.from-blue-900 {
--tw-gradient-from: var(--color-blue-900);
--tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));
@@ -720,10 +646,6 @@
--tw-gradient-to: var(--color-indigo-900);
--tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));
}
.to-purple-500 {
--tw-gradient-to: var(--color-purple-500);
--tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));
}
.p-1 {
padding: calc(var(--spacing) * 1);
}
@@ -742,9 +664,6 @@
.p-6 {
padding: calc(var(--spacing) * 6);
}
.p-8 {
padding: calc(var(--spacing) * 8);
}
.px-2 {
padding-inline: calc(var(--spacing) * 2);
}
@@ -887,9 +806,6 @@
color: color-mix(in oklab, var(--color-white) 80%, transparent);
}
}
.text-yellow-500 {
color: var(--color-yellow-500);
}
.opacity-0 {
opacity: 0%;
}
@@ -939,10 +855,6 @@
--tw-duration: 1000ms;
transition-duration: 1000ms;
}
.ease-out {
--tw-ease: var(--ease-out);
transition-timing-function: var(--ease-out);
}
.hover\:bg-blue-700 {
&:hover {
@media (hover: hover) {
@@ -1061,11 +973,6 @@
width: calc(3/4 * 100%);
}
}
.md\:grid-cols-4 {
@media (width >= 48rem) {
grid-template-columns: repeat(4, minmax(0, 1fr));
}
}
.md\:flex-row {
@media (width >= 48rem) {
flex-direction: row;
@@ -1446,10 +1353,6 @@
syntax: "*";
inherits: false;
}
@property --tw-ease {
syntax: "*";
inherits: false;
}
@property --tw-scale-x {
syntax: "*";
inherits: false;
@@ -1549,7 +1452,6 @@
--tw-backdrop-saturate: initial;
--tw-backdrop-sepia: initial;
--tw-duration: initial;
--tw-ease: initial;
--tw-scale-x: 1;
--tw-scale-y: 1;
--tw-scale-z: 1;