Files
Portfolio-LG2/style.css

384 lines
9.0 KiB
CSS
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/* ======================================= */
/* 1. RÉINITIALISATION ET STYLES DE BASE */
/* ======================================= */
:root {
--primary: #6a11cb;
--secondary: #2575fc;
--accent: cyan;
--highlight: #ffd700;
--bg-light: #f4f4f4;
--text-dark: #333;
--bg-dark-header: linear-gradient(135deg, #1f104c, #03296b);
--bg-dark-footer: #1f104c;
}
html {
scroll-behavior: smooth;
}
body {
font-family: 'Poppins', sans-serif;
margin: 0;
background: var(--bg-light);
color: var(--text-dark);
transition: background 0.3s, color 0.3s;
/* Correction principale pour le HEADER fixe */
/* Ajustement basé sur la hauteur de la navbar (environ 56px) + padding (py-3) */
padding-top: 80px;
}
/* ======================================= */
/* 2. NAVIGATION ET EN-TÊTE FIXE */
/* ======================================= */
/* Cibler le nav à l'intérieur du header pour appliquer le dégradé,
car le nav a la classe Bootstrap py-3 */
header .navbar {
background: var(--bg-dark-header);
}
nav a {
position: relative;
text-decoration: none;
color: #fff;
font-weight: 500;
}
nav a::after {
content: '';
position: absolute;
width: 0%;
height: 2px;
bottom: -3px;
left: 0;
background-color: var(--highlight);
transition: width 0.3s;
}
nav a:hover::after {
width: 100%;
}
nav a:hover {
color: var(--highlight);
transition: color 0.3s;
}
/* ======================================= */
/* 3. SECTION HÉRO (#hero) */
/* ======================================= */
#hero {
position: relative;
text-align: center;
padding: 6rem 2rem;
background: linear-gradient(135deg, var(--primary), var(--secondary));
background-size: 200% 200%;
animation: gradientMove 8s ease infinite;
color: white;
min-height: calc(122vh - 120px); /* 100% de la fenêtre moins la hauteur du header */
display: flex; /* Assure que le contenu est centré verticalement (d-flex dans HTML) */
align-items: center;
}
#hero::after {
content: "";
position: absolute;
inset: 0;
background: rgba(0, 255, 255, 0.15); /* voile cyan */
pointer-events: none;
}
@keyframes gradientMove {
0% {
background-position: 0% 50%;
}
50% {
background-position: 100% 50%;
}
100% {
background-position: 0% 50%;
}
}
/* ======================================= */
/* 4. TYPOGRAPHIE ET HIERARCHIE */
/* ======================================= */
h1 {
font-size: 2.5rem;
font-weight: 700;
}
h2 {
font-size: 1.8rem;
margin-bottom: 1rem;
}
p {
line-height: 1.6;
}
/* Styles spécifiques pour les sections */
#about {
background-color: var(--bg-light); /* Override Bootstrap's bg-light if needed */
}
/* ======================================= */
/* 5. SECTION PROJETS (#projects) */
/* ======================================= */
#projects {
padding-top: 5rem !important; /* Pour compenser le padding-top du body qui masque le titre */
padding-bottom: 5rem !important;
background: #f9f9f9; /* S'assurer de la couleur de fond */
}
/* Le système de grille Bootstrap gère le display et flex-wrap */
/* On cible la classe project-card que vous aviez dans l'HTML */
.project-card {
/* Utilisation de l'effet glassmorphism sur les cartes */
background: rgba(255, 255, 255, 0.85);
backdrop-filter: blur(10px);
border-radius: 16px;
box-shadow: 0 8px 20px rgba(0, 0, 0, 0.15);
transition: transform 0.3s ease, box-shadow 0.3s ease;
text-align: left; /* Aligne le texte à gauche dans les cartes */
}
.project-card:hover {
transform: translateY(-8px) scale(1.01); /* Moins agressif que 1.05 */
box-shadow: 0 16px 32px rgba(0, 0, 0, 0.25);
}
.card a {
text-decoration: none;
color: var(--secondary);
font-weight: 600;
display: inline-block; /* Pour un lien plus contenu */
}
/* Supprime le bleu/violet par défaut */
.card a:visited {
color: var(--secondary);
}
.card a:hover {
color: var(--highlight);
transition: color 0.3s;
}
/* ======================================= */
/* 6. BOUTON DU THÈME (#themeToggle) */
/* ======================================= */
#themeToggle {
background: #fff;
color: var(--secondary);
border: none;
padding: 0.8rem 1.2rem;
border-radius: 25px;
cursor: pointer;
transition: background 0.3s, color 0.3s;
}
#themeToggle:hover {
background: var(--secondary);
color: #fff;
}
/* ======================================= */
/* 7. FOOTER */
/* ======================================= */
footer {
background: var(--bg-dark-footer);
color: #fff;
text-align: center;
/* Bootstrap's py-4 is used, we keep padding here just in case */
}
/* ======================================= */
/* 8. DARK MODE (Structure pour JS) */
/* ======================================= */
.dark-mode {
--bg-light: #121212;
--text-dark: #f0f0f0;
--bg-dark-header: linear-gradient(135deg, #0a0a0a, #1f1f1f);
--bg-dark-footer: #1f1f1f;
}
.dark-mode .project-card {
background: rgba(30, 30, 30, 0.85); /* Fond de carte sombre et transparent */
box-shadow: 0 8px 20px rgba(255, 255, 255, 0.05);
color: var(--text-dark);
}
/* ======================================= */
/* 5. SECTION PROJETS (#projects)          */
/* ======================================= */
/* ... (autres styles project-card) ... */
/* Styles pour les liens généraux dans les cartes (sauf les boutons) */
/* C'est cette règle qui est trop forte. Nous allons la laisser mais la surclasser. */
.card a {
  text-decoration: none;
  color: var(--secondary); /* Garde les autres liens bleus si vous en avez */
  font-weight: 600;
  display: inline-block;
}
/* 🏆 CORRECTION DÉFINITIVE : Rendre le texte des boutons blanc */
/* Cibler le lien <a> AVEC la classe btn-primary */
.card a.btn-primary {
/* Ceci force le texte à être BLANC. Le !important est souvent nécessaire
ici pour écraser la règle générique .card a */
color: #fff !important;
transition: color 0.3s, background-color 0.3s;
}
/* Et au survol, le texte redevient jaune comme vous le souhaitez */
.card a.btn-primary:hover {
color: var(--highlight) !important;
}
/* Supprime le bleu/violet par défaut */
.card a:visited {
  color: var(--secondary);
}
.card a:hover {
  color: var(--highlight);
  transition: color 0.3s;
}
.dark-mode .card-text.text-muted {
color: #b0b0b0 !important;
}
.dark-mode #about {
background-color: #1a1a1a !important;
color: var(--text-dark);
}
.dark-mode #projects {
background-color: #212121;
}
.dark-mode .navbar {
background: var(--bg-dark-header);
}
.dark-mode .navbar-brand {
color: #fff !important;
}
#preloader {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
/* Utilisation du dégradé du header pour un look cohérent */
background: var(--bg-dark-header);
z-index: 9999; /* Toujours au-dessus de tout */
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
opacity: 0;
visibility: hidden;
/* Transition douce pour la disparition */
transition: opacity 0.5s ease-out, visibility 0.5s ease-out;
}
/* Classe active (visible au début du chargement) */
#preloader.preloader-active {
opacity: 1;
visibility: visible;
}
/* Styles pour le texte/logo sur l'écran de chargement */
#preloader h1 {
font-size: 3rem;
/* Petite animation d'entrée */
animation: pulse 1s infinite alternate;
}
@keyframes pulse {
from {
transform: scale(1);
}
to {
transform: scale(1.05);
}
}
img {
transition: transform 0.4s ease, box-shadow 0.4s ease;
}
img:hover {
transform: scale(1.05) rotate(-2deg);
box-shadow: 0 16px 40px rgba(72, 56, 255, 0.4);
}
.fade-section {
opacity: 0;
transform: translateY(20px);
transition: opacity 0.8s ease, transform 0.8s ease;
}
.fade-section.visible {
opacity: 1;
transform: translateY(0);
}
/* ======================================= */
/* 9. DÉTAIL DU PROJET ET VIDÉOS           */
/* ======================================= */
.video-container {
position: relative;
padding-bottom: 56.25%; /* Ratio 16:9 */
height: 0;
overflow: hidden;
border-radius: 12px;
box-shadow: 0 6px 15px rgba(0, 0, 0, 0.1);
transition: transform 0.3s ease, box-shadow 0.3s ease;
}
.video-container:hover {
transform: translateY(-4px);
box-shadow: 0 10px 25px rgba(0, 0, 0, 0.2);
}
.video-container iframe {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
border: 0;
}
/* Style pour le logo Gitea dans la barre de navigation */
.gitea-icon-nav {
height: 1.5rem; /* Ajuste la hauteur de l'image (environ la taille d'une icône de texte) */
width: auto;
/* Optionnel : ajoute un filtre pour qu'il soit blanc dans le Dark Mode, si ton logo PNG n'est pas déjà blanc/transparent */
/* filter: invert(1); */
}
/* Ajustement pour que le bouton contienne bien l'image */
.gitea-link-button {
padding-top: 0.5rem !important;
padding-bottom: 0.5rem !important;
}