This commit is contained in:
Esteban
2026-07-02 15:13:54 +02:00
parent a019dcb00d
commit 07bae3eff3
38 changed files with 2039 additions and 226 deletions
+648 -1
View File
@@ -357,10 +357,58 @@ img {
.hero {
max-width: 1200px;
margin: 0 auto;
padding: clamp(56px, 10vw, 120px) clamp(20px, 4vw, 40px) clamp(30px, 5vw, 60px);
/* Le hero occupe presque tout l'écran pour un rendu plus aéré */
min-height: calc(100vh - 220px);
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
position: relative;
padding: clamp(70px, 12vw, 140px) clamp(20px, 4vw, 40px) clamp(90px, 12vw, 130px);
text-align: center;
}
/* Flèche animée qui invite à défiler vers le bas */
.scroll-indicator {
position: absolute;
bottom: 26px;
left: 50%;
margin-left: -23px;
width: 46px;
height: 46px;
display: flex;
align-items: center;
justify-content: center;
border-radius: 50%;
color: var(--accent-light);
background: var(--accent-soft);
border: 1px solid var(--accent-border);
font-size: 17px;
opacity: 0;
animation: scrollFadeIn 0.6s ease 0.9s forwards, scrollBounce 2s ease-in-out 1.5s infinite;
transition: background-color 0.2s ease, color 0.2s ease;
}
.scroll-indicator:hover {
background: var(--accent);
color: white;
}
@keyframes scrollFadeIn {
to {
opacity: 1;
}
}
@keyframes scrollBounce {
0%, 100% {
transform: translateY(0);
}
50% {
transform: translateY(9px);
}
}
.hero-badge {
display: inline-flex;
align-items: center;
@@ -1415,6 +1463,596 @@ img {
display: none;
}
/* ==== CARTES CLIQUABLES (page markdown / lien externe) ==== */
/* Indicateur en bas de carte ; le ::after rend TOUTE la carte cliquable quand c'est un lien */
.projects-list .project-card {
position: relative;
}
.card-link {
display: inline-flex;
align-items: center;
gap: 8px;
margin-top: auto;
padding-top: 16px;
font-size: 14px;
font-weight: 600;
text-decoration: none;
color: var(--accent-light);
}
a.card-link::after {
content: '';
position: absolute;
inset: 0;
}
.card-link-none {
color: var(--text-muted);
font-weight: 500;
}
/* ==== PAGE DE DÉTAILS (markdown) ==== */
.details-page {
max-width: 920px;
margin: clamp(24px, 4vw, 40px) auto clamp(48px, 7vw, 72px);
padding: 0 clamp(14px, 4vw, 24px);
}
.details-back {
margin-bottom: 20px;
}
.details-card {
background: linear-gradient(180deg, var(--surface) 0%, var(--bg-soft) 100%);
border: 1px solid var(--border);
border-radius: var(--radius-lg);
overflow: hidden;
box-shadow: var(--shadow);
}
.details-banner img {
width: 100%;
height: clamp(200px, 32vw, 320px);
object-fit: cover;
display: block;
}
.details-content {
padding: clamp(22px, 4vw, 40px);
}
.details-type {
display: inline-block;
padding: 6px 14px;
margin-bottom: 14px;
border-radius: 999px;
background: var(--accent-soft);
border: 1px solid var(--accent-border);
color: var(--accent-light);
font-size: 13px;
font-weight: 600;
}
.details-content h1 {
margin: 0 0 12px;
font-size: clamp(26px, 4vw, 38px);
font-weight: 800;
letter-spacing: -0.02em;
}
.details-meta {
display: flex;
gap: 20px;
flex-wrap: wrap;
margin: 0 0 16px;
color: var(--text-muted);
font-size: 15px;
}
.details-meta i {
color: var(--accent-light);
margin-right: 6px;
}
/* Contenu markdown rendu (via marked.js) */
.markdown-content {
margin-top: 24px;
padding-top: 24px;
border-top: 1px solid var(--border);
color: var(--text-soft);
font-size: 16px;
line-height: 1.8;
}
.markdown-content h1,
.markdown-content h2,
.markdown-content h3,
.markdown-content h4 {
color: var(--text);
font-weight: 700;
letter-spacing: -0.01em;
margin: 28px 0 12px;
line-height: 1.3;
}
.markdown-content h1 { font-size: 28px; }
.markdown-content h2 { font-size: 23px; }
.markdown-content h3 { font-size: 19px; }
.markdown-content h4 { font-size: 17px; }
.markdown-content p {
margin: 0 0 14px;
}
.markdown-content a {
color: var(--accent-light);
font-weight: 600;
}
.markdown-content ul,
.markdown-content ol {
margin: 0 0 14px;
padding-left: 26px;
}
.markdown-content li {
margin-bottom: 6px;
}
.markdown-content img {
max-width: 100%;
border-radius: var(--radius-sm);
margin: 10px 0;
}
.markdown-content code {
background: var(--surface-2);
border: 1px solid var(--border);
border-radius: 6px;
padding: 2px 7px;
font-size: 14px;
font-family: 'SF Mono', Menlo, Consolas, monospace;
color: var(--accent-light);
}
.markdown-content pre {
background: var(--surface-2);
border: 1px solid var(--border);
border-radius: var(--radius-sm);
padding: 16px 18px;
overflow-x: auto;
margin: 0 0 16px;
}
.markdown-content pre code {
background: none;
border: none;
padding: 0;
color: var(--text-soft);
}
.markdown-content blockquote {
margin: 0 0 16px;
padding: 10px 18px;
border-left: 3px solid var(--accent);
background: var(--accent-soft);
border-radius: 0 var(--radius-sm) var(--radius-sm) 0;
color: var(--text-soft);
}
.markdown-content hr {
border: none;
height: 1px;
background: var(--border);
margin: 24px 0;
}
.markdown-content table {
border-collapse: collapse;
margin: 0 0 16px;
width: 100%;
}
.markdown-content th,
.markdown-content td {
border: 1px solid var(--border);
padding: 8px 12px;
text-align: left;
}
.markdown-content th {
background: var(--surface-2);
color: var(--text);
}
/* ==== MINI LECTEUR PDF (page de détails) ==== */
.pdf-viewer-wrap {
margin-top: 24px;
padding-top: 24px;
border-top: 1px solid var(--border);
}
.pdf-viewer-toolbar {
display: flex;
align-items: center;
justify-content: space-between;
gap: 12px;
flex-wrap: wrap;
margin-bottom: 12px;
color: var(--text-soft);
font-size: 14.5px;
font-weight: 600;
}
.pdf-viewer-toolbar i {
color: var(--accent-light);
margin-right: 8px;
}
.pdf-download-btn {
padding: 8px 16px;
font-size: 13.5px;
text-decoration: none;
}
.pdf-viewer {
width: 100%;
height: 75vh;
min-height: 420px;
border: 1px solid var(--border);
border-radius: var(--radius-sm);
background: #525659;
}
@media (max-width: 700px) {
.pdf-viewer {
height: 60vh;
}
}
/* ==== PANEL ADMIN (sous-catégories) ==== */
.admin-page {
max-width: 1280px;
margin: 0 auto;
padding-bottom: 40px;
}
/* Sous-navigation par catégorie */
.admin-nav {
display: flex;
flex-wrap: wrap;
gap: 8px;
max-width: 1200px;
margin: 20px auto 8px;
padding: 0 clamp(16px, 4vw, 40px);
}
.admin-nav a {
display: inline-flex;
align-items: center;
gap: 8px;
padding: 9px 16px;
border-radius: 999px;
background: var(--surface-2);
border: 1px solid var(--border);
color: var(--text-soft);
text-decoration: none;
font-size: 14px;
font-weight: 600;
transition: color 0.2s ease, border-color 0.2s ease, background-color 0.2s ease, transform 0.2s ease;
}
.admin-nav a:hover {
color: var(--accent-light);
border-color: var(--accent-border);
transform: translateY(-1px);
}
.admin-nav a i {
color: var(--accent-light);
}
/* Sections du panel */
.admin-section {
max-width: 1280px;
margin: 0 auto;
padding: 26px 0 6px;
/* L'ancre s'arrête sous le header sticky */
scroll-margin-top: 84px;
}
.admin-section-title {
display: flex;
align-items: center;
gap: 12px;
max-width: 1200px;
margin: 0 auto 16px;
padding: 0 clamp(16px, 4vw, 40px);
font-size: clamp(21px, 3vw, 26px);
font-weight: 800;
letter-spacing: -0.01em;
}
.admin-section-title i {
color: var(--accent-light);
font-size: 0.85em;
}
/* Bloc repliable contenant chaque formulaire */
.admin-block {
max-width: 1200px;
margin: 0 auto 20px;
padding: 0 clamp(16px, 4vw, 40px);
}
.admin-block summary {
display: inline-flex;
align-items: center;
gap: 8px;
padding: 11px 20px;
border-radius: var(--radius-sm);
background: var(--surface-2);
border: 1px solid var(--border-strong);
color: var(--text);
font-size: 15px;
font-weight: 600;
cursor: pointer;
user-select: none;
transition: border-color 0.2s ease, background-color 0.2s ease;
}
.admin-block summary:hover {
border-color: var(--accent-border);
}
.admin-block[open] summary {
border-color: var(--accent-border);
color: var(--accent-light);
margin-bottom: 14px;
}
.admin-block .project-form-card {
width: 100%;
}
/* Grand champ markdown dans les formulaires admin */
.project-form-card .markdown-textarea {
min-height: 220px;
font-family: 'SF Mono', Menlo, Consolas, monospace;
font-size: 13.5px;
}
/* ==== DRAG & DROP PDF (panel admin) ==== */
/* Bandeau indiquant le PDF déjà attaché, avec option de suppression */
.pdf-current {
display: flex;
align-items: center;
gap: 10px;
flex-wrap: wrap;
margin-bottom: 12px;
padding: 12px 16px;
background: var(--surface-2);
border: 1px solid var(--border);
border-radius: var(--radius-sm);
color: var(--text-soft);
font-size: 14px;
}
.pdf-current i {
color: var(--accent-light);
font-size: 18px;
}
.pdf-current a {
color: var(--accent-light);
font-weight: 600;
text-decoration: none;
}
.pdf-current a:hover {
text-decoration: underline;
}
.pdf-remove-row {
margin: 0 0 0 auto;
}
/* Zone de dépôt du fichier PDF */
.pdf-dropzone {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
gap: 8px;
padding: 28px 20px;
margin-bottom: 16px;
text-align: center;
background: var(--bg-soft);
border: 2px dashed var(--border-strong);
border-radius: var(--radius-sm);
color: var(--text-muted);
cursor: pointer;
transition: border-color 0.2s ease, background-color 0.2s ease, transform 0.15s ease;
}
.pdf-dropzone i {
font-size: 26px;
color: var(--accent-light);
}
.pdf-dropzone p {
margin: 0;
font-size: 14px;
}
.pdf-dropzone-browse {
color: var(--accent-light);
font-weight: 600;
text-decoration: underline;
}
.pdf-dropzone-filename {
font-size: 13px;
font-weight: 600;
color: var(--text);
}
/* Survol pendant qu'un fichier est glissé au-dessus de la zone */
.pdf-dropzone.dragging {
border-color: var(--accent);
background: var(--accent-soft);
transform: scale(1.01);
}
/* Un fichier valide a été sélectionné */
.pdf-dropzone.has-file {
border-style: solid;
border-color: var(--accent);
}
/* Section Données (export / import) */
.admin-data-title {
margin: 0 0 8px;
font-size: 18px;
font-weight: 700;
}
.admin-data-title i {
color: var(--accent-light);
margin-right: 8px;
}
.admin-data-text {
margin: 0 0 16px;
color: var(--text-muted);
font-size: 14.5px;
line-height: 1.6;
}
.admin-data-warning {
color: #ffb8bb;
}
[data-theme="light"] .admin-data-warning {
color: #b03538;
}
.admin-export-btn {
display: inline-flex;
align-items: center;
gap: 8px;
text-decoration: none;
}
.admin-data-separator {
border: none;
height: 1px;
background: var(--border);
margin: 24px 0;
}
.project-form-card input[type="file"] {
display: block;
width: 100%;
margin-bottom: 16px;
padding: 12px;
background: var(--surface-2);
border: 1px dashed var(--border-strong);
border-radius: var(--radius-sm);
color: var(--text-soft);
font-family: var(--font);
font-size: 14px;
}
/* ==== BOUTON FLOTTANT EXPÉRIENCES <-> ÉCOLES ==== */
.section-jump {
position: fixed;
bottom: 24px;
right: 24px;
z-index: 200;
width: 54px;
height: 54px;
border-radius: 50%;
border: none;
background: linear-gradient(180deg, var(--accent) 0%, var(--accent-strong) 100%);
color: white;
font-size: 20px;
cursor: pointer;
box-shadow: 0 10px 26px rgba(255, 122, 26, 0.4);
transition: transform 0.2s ease, box-shadow 0.2s ease;
}
.section-jump:hover {
transform: translateY(-3px);
box-shadow: 0 14px 32px rgba(255, 122, 26, 0.5);
}
/* Par défaut (dans les expériences) : chapeau de diplômé = aller aux écoles */
.section-jump .fa-briefcase {
display: none;
}
/* Dans la section écoles : sac de travail = remonter aux expériences */
.section-jump.mode-ecoles .fa-graduation-cap {
display: none;
}
.section-jump.mode-ecoles .fa-briefcase {
display: inline;
}
/* ==== NOTIFICATIONS TOAST ==== */
.toast {
position: fixed;
bottom: 26px;
left: 50%;
transform: translateX(-50%);
z-index: 300;
display: flex;
align-items: center;
gap: 12px;
max-width: calc(100vw - 40px);
padding: 15px 22px;
background: var(--surface-2);
border: 1px solid var(--accent-border);
border-radius: 14px;
color: var(--text);
font-size: 15px;
font-weight: 500;
box-shadow: var(--shadow);
cursor: pointer;
animation: toastIn 0.4s ease, toastOut 0.5s ease 4.5s forwards;
}
.toast i {
color: var(--success);
font-size: 19px;
flex-shrink: 0;
}
@keyframes toastIn {
from {
opacity: 0;
transform: translateX(-50%) translateY(24px);
}
}
@keyframes toastOut {
to {
opacity: 0;
transform: translateX(-50%) translateY(12px);
visibility: hidden;
}
}
/* ==== ANIMATIONS & INTERACTIONS ==== */
/* Transition entre les pages : fondu de l'ancienne page vers la nouvelle
@@ -1557,4 +2195,13 @@ main {
.footer-links .discord-handle:hover {
transform: none;
}
.scroll-indicator {
animation: none;
opacity: 1;
}
.toast {
animation: none;
}
}