feature/home #10
BIN
public/assets/documents/CV.pdf
Normal file
BIN
public/assets/documents/CV.pdf
Normal file
Binary file not shown.
BIN
public/assets/images/space.jpg
Normal file
BIN
public/assets/images/space.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 2.8 MiB |
@ -1,4 +1,3 @@
|
|||||||
#root {
|
#root {
|
||||||
margin: 0 auto;
|
margin: 0 auto;
|
||||||
padding: 2rem;
|
|
||||||
}
|
}
|
||||||
@ -32,7 +32,7 @@ function Experiences() {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<section id="experiences-section">
|
<section id="experiences-section">
|
||||||
<h1>Expériences</h1>
|
<h1>Experiences</h1>
|
||||||
<div className="experiences-container">
|
<div className="experiences-container">
|
||||||
{experiencesData.map((exp, index) => (
|
{experiencesData.map((exp, index) => (
|
||||||
<SingleExperience experience={exp} whichSide={index % 2 !== 0}/>
|
<SingleExperience experience={exp} whichSide={index % 2 !== 0}/>
|
||||||
|
|||||||
@ -1,10 +1,21 @@
|
|||||||
|
import '../styles/Home.css';
|
||||||
|
import Background from "./thirdParty/Background.jsx";
|
||||||
|
|
||||||
function Home() {
|
function Home() {
|
||||||
return (
|
return (
|
||||||
|
|
||||||
<section id="home-section">
|
<section id="home-section">
|
||||||
<h1>Home</h1>
|
<Background />
|
||||||
|
<h1>Hello, I'm<span className="highlight"> Giovanni Josserand</span></h1>
|
||||||
|
<h2>Junior Developer</h2>
|
||||||
|
<p>
|
||||||
|
Passionate about development, I am currently looking
|
||||||
|
for an opportunity to put my skills into practice and continue learning.
|
||||||
|
</p>
|
||||||
|
<a href="/public/assets/documents/CV.pdf" target="_blank" className="btn">Download my CV</a>
|
||||||
|
|
||||||
</section>
|
</section>
|
||||||
)
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export default Home;
|
||||||
export default Home
|
|
||||||
|
|||||||
@ -5,7 +5,7 @@ function Projects() {
|
|||||||
return (
|
return (
|
||||||
<section id="projects-section">
|
<section id="projects-section">
|
||||||
<h1>Projects</h1>
|
<h1>Projects</h1>
|
||||||
<SingleProject image="landscape" title="Portfolio" description={desc} skills={['HTML', 'CSS', 'React', 'Git']} color="orange" />
|
<SingleProject image="landscape" title="Codev" description={desc} skills={['HTML', 'CSS', 'PHP', 'JavaScript', 'SQL']} color="orange" />
|
||||||
<SingleProject image="landscape" title="SAE C++" description={desc} skills={['C++', 'Git']} color="purple" />
|
<SingleProject image="landscape" title="SAE C++" description={desc} skills={['C++', 'Git']} color="purple" />
|
||||||
<SingleProject image="proxmox" title="Proxmox" description={desc} skills={[]} color="green" />
|
<SingleProject image="proxmox" title="Proxmox" description={desc} skills={[]} color="green" />
|
||||||
<div className="show-more-container">
|
<div className="show-more-container">
|
||||||
|
|||||||
@ -4,9 +4,9 @@ function SingleExperience({ experience, whichSide }) {
|
|||||||
return (
|
return (
|
||||||
<div className={`experience-card ${whichSide ? 'right' : 'left'}`}>
|
<div className={`experience-card ${whichSide ? 'right' : 'left'}`}>
|
||||||
<div className="experience-card-header">
|
<div className="experience-card-header">
|
||||||
<div className="experience-primary-info">
|
<div className="experience-card-header-left">
|
||||||
<h3 className="experience-role">{experience.role}</h3>
|
<h3 className="experience-role">{experience.role}</h3>
|
||||||
<p className="experience-company-location">
|
<p className="experience-location">
|
||||||
{experience.company} • {experience.location}
|
{experience.company} • {experience.location}
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
24
src/components/thirdParty/Background.jsx
vendored
Normal file
24
src/components/thirdParty/Background.jsx
vendored
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
import React from "react";
|
||||||
|
import "../../styles/thirdParty/Background.css";
|
||||||
|
|
||||||
|
export default function Background() {
|
||||||
|
return (
|
||||||
|
<div className="space-background">
|
||||||
|
{[...Array(100)].map((_, i) => (
|
||||||
|
<div
|
||||||
|
key={i}
|
||||||
|
className="star"
|
||||||
|
style={{
|
||||||
|
top: `${Math.random() * 100}%`,
|
||||||
|
left: `${Math.random() * 100}%`,
|
||||||
|
animationDelay: `${Math.random() * 5}s`,
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
))}
|
||||||
|
<div className="nebula nebula1"></div>
|
||||||
|
<div className="nebula nebula2"></div>
|
||||||
|
<div className="nebula nebula3"></div>
|
||||||
|
<div className="planet"></div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
@ -2,7 +2,7 @@
|
|||||||
font-family: system-ui, Avenir, Helvetica, Arial, sans-serif;
|
font-family: system-ui, Avenir, Helvetica, Arial, sans-serif;
|
||||||
line-height: 1.5;
|
line-height: 1.5;
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
background-color: #121212;
|
background-color: #0D0D0D;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
57
src/styles/Home.css
Normal file
57
src/styles/Home.css
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
#home-section {
|
||||||
|
position: relative;
|
||||||
|
min-height: 110vh;
|
||||||
|
overflow: hidden;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
flex-direction: column;
|
||||||
|
text-align: center;
|
||||||
|
/*background-image: url('/public/assets/images/space.jpg');
|
||||||
|
background-size: cover;
|
||||||
|
background-position: center;
|
||||||
|
z-index: 1;*/
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#home-section h1{
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#home-section h2 {
|
||||||
|
font-size: 1.8rem;
|
||||||
|
color: #EAEAEA;
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
}
|
||||||
|
#home-section p {
|
||||||
|
margin-bottom: 2rem;
|
||||||
|
color: #EAEAEA;
|
||||||
|
max-width: 40%;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
.highlight {
|
||||||
|
color: #D95F46;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn {
|
||||||
|
padding: 0.75rem 1.5rem;
|
||||||
|
border: none;
|
||||||
|
border-radius: 5px;
|
||||||
|
text-decoration: none;
|
||||||
|
font-weight: bold;
|
||||||
|
background-color: #D95F46;
|
||||||
|
color: #fff;
|
||||||
|
transition: background-color 0.3s ease;
|
||||||
|
margin-bottom: 200px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn:hover {
|
||||||
|
background-color: #b94a36;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -32,7 +32,7 @@
|
|||||||
margin-bottom: 1rem;
|
margin-bottom: 1rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.experience-primary-info {
|
.experience-card-header-left {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
}
|
}
|
||||||
@ -43,11 +43,11 @@
|
|||||||
color: #EAEAEA;
|
color: #EAEAEA;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
}
|
}
|
||||||
.experience-company-location{
|
.experience-location{
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
}
|
}
|
||||||
|
|
||||||
.experience-company-location,
|
.experience-location,
|
||||||
.experience-duration {
|
.experience-duration {
|
||||||
font-size: 0.95rem;
|
font-size: 0.95rem;
|
||||||
color: #B0B0B0;
|
color: #B0B0B0;
|
||||||
|
|||||||
118
src/styles/thirdParty/Background.css
vendored
Normal file
118
src/styles/thirdParty/Background.css
vendored
Normal file
@ -0,0 +1,118 @@
|
|||||||
|
.space-background {
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
width: 100vw;
|
||||||
|
height: 123vh;
|
||||||
|
background: radial-gradient(ellipse at center, #0a001f 0%, #000000 80%);
|
||||||
|
overflow: hidden;
|
||||||
|
z-index: -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Étoiles */
|
||||||
|
.star {
|
||||||
|
position: absolute;
|
||||||
|
width: 2px;
|
||||||
|
height: 2px;
|
||||||
|
background: white;
|
||||||
|
border-radius: 50%;
|
||||||
|
opacity: 0.8;
|
||||||
|
animation: twinkle 3s infinite ease-in-out alternate;
|
||||||
|
filter: drop-shadow(0 0 2px white);
|
||||||
|
}
|
||||||
|
|
||||||
|
.planet {
|
||||||
|
position: absolute;
|
||||||
|
bottom: 0%;
|
||||||
|
left: 50%;
|
||||||
|
transform: translateX(-50%);
|
||||||
|
width: 120vw;
|
||||||
|
height: 23vw;
|
||||||
|
max-height: 400px;
|
||||||
|
background: #0D0D0D;
|
||||||
|
border-radius: 60% 60% 0 0 / 100% 100% 0 0;
|
||||||
|
z-index: 1;
|
||||||
|
|
||||||
|
/* Halo extérieur et intérieur */
|
||||||
|
box-shadow:
|
||||||
|
0 -20px 60px 10px rgba(255, 255, 255, 0.35),
|
||||||
|
inset 0 20px 60px 10px rgba(255, 255, 255, 0.25);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Ligne lumineuse nette et fine en arc */
|
||||||
|
.planet::after {
|
||||||
|
content: "";
|
||||||
|
position: absolute;
|
||||||
|
top: -3px; /* colle bien au bord */
|
||||||
|
left: 50%;
|
||||||
|
transform: translateX(-50%);
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
border-top: 2.5px solid white; /* ligne légèrement plus épaisse */
|
||||||
|
border-radius: 60% 60% 0 0 / 100% 100% 0 0;
|
||||||
|
mask-image: linear-gradient(to right, transparent 0%, white 40%, white 60%, transparent 100%);
|
||||||
|
pointer-events: none;
|
||||||
|
z-index: 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@keyframes twinkle {
|
||||||
|
0% { opacity: 0.3; transform: scale(0.8); }
|
||||||
|
100% { opacity: 1; transform: scale(1.2); }
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Nébuleuses */
|
||||||
|
.nebula {
|
||||||
|
position: absolute;
|
||||||
|
border-radius: 50%;
|
||||||
|
filter: blur(80px);
|
||||||
|
opacity: 0.5;
|
||||||
|
mix-blend-mode: screen;
|
||||||
|
animation: nebulaMove 15s ease-in-out infinite alternate;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nebula1 {
|
||||||
|
width: 400px;
|
||||||
|
height: 400px;
|
||||||
|
background: radial-gradient(circle, #9b59b6 0%, transparent 70%);
|
||||||
|
top: 10%;
|
||||||
|
left: 15%;
|
||||||
|
animation-delay: 0s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nebula2 {
|
||||||
|
width: 600px;
|
||||||
|
height: 600px;
|
||||||
|
background: radial-gradient(circle, #8e44ad 0%, transparent 70%);
|
||||||
|
top: 50%;
|
||||||
|
left: 65%;
|
||||||
|
animation-delay: 5s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nebula3 {
|
||||||
|
width: 350px;
|
||||||
|
height: 350px;
|
||||||
|
background: radial-gradient(circle, #663399 0%, transparent 70%);
|
||||||
|
top: 75%;
|
||||||
|
left: 35%;
|
||||||
|
animation-delay: 10s;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes nebulaMove {
|
||||||
|
0% {
|
||||||
|
transform: translate(0, 0) scale(1);
|
||||||
|
opacity: 0.5;
|
||||||
|
}
|
||||||
|
100% {
|
||||||
|
transform: translate(20px, -20px) scale(1.05);
|
||||||
|
opacity: 0.6;
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user