 @keyframes float {

     0%,
     100% {
         transform: translateY(0);
     }

     50% {
         transform: translateY(-15px);
     }
 }

 .floating {
     animation: float 6s ease-in-out infinite;
 }

 .github-card {
     border-radius: 8px;
     border: 1.5px solid #30363d;
     background: rgba(13, 17, 23, 0.7);
     transition:
         box-shadow 0.3s cubic-bezier(.4, 0, .2, 1),
         transform 0.3s cubic-bezier(.4, 0, .2, 1),
         border-color 0.3s cubic-bezier(.4, 0, .2, 1),
         background 0.3s cubic-bezier(.4, 0, .2, 1);
     box-shadow: 0 1px 3px 0 rgba(10, 12, 16, 0.07) inset;
     position: relative;
     overflow: hidden;
 }

 .github-card:hover {
     border-color: #388bfd;
     background: linear-gradient(120deg, rgba(13, 17, 23, 0.7) 80%, rgba(56, 139, 253, 0.06) 100%);
     box-shadow:
         0 4px 12px 0 rgba(56, 139, 253, 0.09),
         0 1px 3px 0 rgba(10, 12, 16, 0.07) inset;
     transform: scale(1.012) translateY(-4px);
 }

 .github-card::before {
     content: "";
     position: absolute;
     inset: -2px;
     border-radius: 12px;
     background: radial-gradient(circle, rgba(56, 139, 253, 0.12) 0%, rgba(13, 17, 23, 0) 80%);
     opacity: 0;
     z-index: 1;
     pointer-events: none;
     transition: opacity 0.3s;
 }

 .github-card:hover::before {
     opacity: 1;
 }

 .github-card .card-title,
 .github-card .glow {
     transition: color 0.3s, text-shadow 0.3s;
 }

 .github-card:hover .card-title,
 .github-card:hover .glow {
     color: #58a6ff;
     text-shadow: 0 0 4px #388bfd77, 0 0 12px #388bfd33;
 }






 .language-color {
     position: relative;
     top: 1px;
     display: inline-block;
     width: 12px;
     height: 12px;
     border-radius: 50%;
     margin-right: 4px;
 }

 .contributions-grid {
     display: grid;
     grid-template-columns: repeat(53, 15px);
     grid-gap: 3px;
 }

 .contribution-cell {
     width: 15px;
     height: 15px;
     border-radius: 2px;
     background-color: #161b22;
 }

 .contribution-cell[data-level="1"] {
     background-color: #0e4429;
 }

 .contribution-cell[data-level="2"] {
     background-color: #006d32;
 }

 .contribution-cell[data-level="3"] {
     background-color: #26a641;
 }

 .contribution-cell[data-level="4"] {
     background-color: #39d353;
 }

 .tab {
     padding: 8px 16px;
     border-bottom: 2px solid transparent;
     font-weight: 500;
 }

 .tab.active {
     border-bottom-color: #f78166;
     color: #58a6ff;
 }

 .tab:hover:not(.active) {
     border-bottom-color: #30363d;
 }

 .repo-language-color {
     position: relative;
     top: 1px;
     display: inline-block;
     width: 12px;
     height: 12px;
     border-radius: 50%;
 }

 .glow {
     text-shadow: 0 0 10px rgba(88, 166, 255, 0.5);
 }

 .terminal {
     background-color: #0d111762;
     border-radius: 10px;
     border: 1px solid #30363d;
     font-family: 'Courier New', monospace;
 }

 .terminal-header {
      background-color: rgba(13, 17, 23, 0.2);
     border-bottom: 1px solid #30363d;
 }

 .terminal-dot {
     width: 12px;
     height: 12px;
     border-radius: 50%;
 }

.terminal-content {
    background-color: rgba(13, 17, 23, 0.2); /* transparent, même teinte que #0d1117 */
    backdrop-filter: blur(1px); /* flou léger, ajuste la valeur si tu veux plus ou moins flou */
}
.terminal-contentt {
    background-color: rgba(13, 17, 23, 0.2); /* transparent, même teinte que #0d1117 */
    backdrop-filter: blur(0.5px); /* flou léger, ajuste la valeur si tu veux plus ou moins flou */
}


 .command {
     color: #58a6ff;
 }

 .comment {
     color: #8b949e;
 }

html.light .comment {
    color: #555d66 !important; /* rouge vif, adapte la teinte si besoin */
}




.terminal-bash-label {
  margin-left: auto;
  font-size: 0.75rem;
  color:white; /* noir/gris foncé (visible sur fond clair) */
}



.custom-blur {
  backdrop-filter: blur(1px);
}



 html.light {
     --bg: #ffffff;
     --text: #0d1117;
     --border: #d0d7de;
     --card-bg: #e1e8f542;
     --hover-bg: #eaeef2;
     --accent: #0969da;
 }

 html.light body {
     background-color: var(--bg);
     color: var(--text);
 }

 html.light .github-card,
 html.light .github-carde,
 html.light .terminal,
 html.light .terminal-header,
 html.light .terminal-contentt,
 html.light .terminal-content {
     background-color: var(--card-bg);
     border-color: var(--border);
 }

 html.light nav {
     background-color: white;
     border-color: var(--border);
 }

 html.light .hover\:bg-\[\#21262d\]:hover {
     background-color: var(--hover-bg) !important;
 }


 html.light .text-white {
     color: var(--text) !important;
 }

 html.light .glow {
     text-shadow: none;
     color: var(--accent);
 }


 @keyframes floatMove {
     0% {
         transform: translate(0, 0);
     }

     25% {
         transform: translate(-12px, 8px);
     }

     50% {
         transform: translate(8px, -12px);
     }

     75% {
         transform: translate(-8px, -4px);
     }

     100% {
         transform: translate(0, 0);
     }
 }

 .custom-blur {
     backdrop-filter: blur(2px);
 }


 html.light .bg-\[\#21262d\] {
     background-color: #e1e4e9b4 !important;
     /* gris clair */
 }

 html.light .hover\:bg-\[\#21262d\]:hover {
     background-color: #d1d5db !important;
 }

 html.light .text-\[\#21262d\] {
     color: #d1d5db !important;
 }


 html.light .bg-\[\#161b22\] {
     background-color: #ffffff !important;
 }

 html.light .hover\:bg-\[\#161b22\]:hover {
     background-color: #ffffff !important;
 }

 html.light .text-\[\#161b22\] {
     color: #ffffff !important;
 }


html.light [class*="bg-[rgba(13,17,23,0.8)]"] {
    background: #e2e8ecaf !important;
    backdrop-filter: blur(1px);
}


 html.light .bg-\[\#0d1117\] {
     background-color: #e4e7ecf5 !important;
     color: #0d1117 !important;
 }


 html.light [class*="bg-gradient-to-r"][class*="text-transparent"] {
     background-image: none !important;
     -webkit-background-clip: initial !important;
     background-clip: initial !important;
     color: #000000 !important;
 }


 html.light .github-card:hover {
     /* Optionnel : hover très soft pour le mode clair, ou laisser vide pour aucun effet spécial */
     border-color: var(--accent);
     box-shadow: 0 2px 6px 0 rgba(9, 105, 218, 0.07);
     background: var(--card-bg);
     transform: scale(1.007) translateY(-2px);
 }


  html.light .github-carde:hover {
     /* Optionnel : hover très soft pour le mode clair, ou laisser vide pour aucun effet spécial */
     border-color: var(--accent);
     box-shadow: 0 2px 6px 0 rgba(9, 105, 218, 0.07);
     background: var(--card-bg);
     transform: scale(0.95) translateY(-2px);
 }





 :root {
  --hex-bg: rgba(13, 17, 23,1);
  --hex-hl: #1a4367;
}
html.light {
  --hex-bg: #ffffff;
  --hex-hl: #578cc9;
}

.footer-white-overlay {
    position: absolute;
    top: 0; left: 0; right: 0; bottom: 0;
    width: 100%;
    height: 100%;
    background: rgba(255, 255, 255, 0.61); /* blanc, un peu transparent */
    pointer-events: none;
    z-index: 2; /* au-dessus des canvas, sous le contenu */
    opacity: 0;
    transition: opacity 0.2s;
    backdrop-filter: blur(0.5px);

}
html.light .footer-white-overlay {
    opacity: 1;
}



 .github-corner {
     position: fixed;
     top: 0;
     right: 0;
     z-index: 9999;
 }

 .github-corner:hover .octo-arm {
     animation: octocat-wave 560ms ease-in-out;
 }

 @keyframes octocat-wave {

     0%,
     100% {
         transform: rotate(0deg);
     }

     20%,
     60% {
         transform: rotate(-25deg);
     }

     40%,
     80% {
         transform: rotate(10deg);
     }

 }

 /* Masquer .github-corner sur les petits écrans */
 @media (max-width: 1024px) {
     .github-corner {
         display: none;
     }
 }

 /* Animation blink très subtile pour bouton call-to-action */
 .cta-animate {
     animation: blinkBtnSubtle 1.3s infinite alternate cubic-bezier(0.6, 0, 0.4, 0.1);
 }

 @keyframes blinkBtnSubtle {
     0% {
         opacity: 1;
     }

     50% {
         opacity: 0.80;
     }

     100% {
         opacity: 1;
     }
 }

 @media (max-width: 600px) {
     .nav-links-desktop {
         display: none !important;
     }
 }













 .timeline-gradient-anim {
     position: absolute;
     left: 50%;
     top: 0;
     bottom: 0;
     width: 4px;
     z-index: 0;
     /* Dégradé RGB animé */
     background: linear-gradient(180deg,
             #ff3c3c,
             #fffb38,
             #3effaf,
             #38edff,
             #3c3cff,
             #b03cff,
             #ff3cb6,
             #ff3c3c);
     background-size: 200% 200%;
     animation: rgbTimelineMove 6s ease-in-out infinite;
     opacity: 0.55;
     border-radius: 2px;
     transform: translateX(-50%);
     transition: left 0.4s, width 0.4s;
     pointer-events: none;
 }

 @keyframes rgbTimelineMove {
     0% {
         background-position: 0% 50%;
     }

     50% {
         background-position: 100% 50%;
     }

     100% {
         background-position: 0% 50%;
     }
 }

 /* Dot style (point sur la timeline) */
 .timeline-dot-animate,
 .timeline-dot {
     position: absolute;
     z-index: 10;
     border-radius: 50%;
     background: #21262d;
     border: 3px solid #58a6ff;
     box-shadow: 0 2px 8px 0 #58a6ff22;
     transition: left 0.4s;
     animation: none !important;
     width: 1.3rem;
     height: 1.3rem;
 }

 /* Dot centré pour desktop (parent = ligne entière) */
 @media (min-width: 768px) {
     .timeline-dot {
         left: 50%;
         top: 50%;
         margin-left: -0.65rem;
         margin-top: -0.65rem;
         width: 1.3rem;
         height: 1.3rem;
         border-width: 3px;
     }

     .md\:hidden {
         display: none !important;
     }

     .md\:block {
         display: block !important;
     }

     /* Largeur spéciale pour ces 3 cartes, uniquement sur desktop */
     @media (min-width: 768px) {
         .carte-petite {
             width: 75% !important;
             max-width: 75%;
         }
     }
 }

 /* Dot à gauche pour mobile (parent = carte) */
 @media (max-width: 767px) {
     .timeline-dot {
         left: 0;
         top: 50%;
         margin-left: -0.55rem;
         margin-top: -0.55rem;
         width: 1.1rem;
         height: 1.1rem;
         border-width: 2.5px;
     }

     .md\:hidden {
         display: block !important;
     }

     .md\:block {
         display: none !important;
     }

     #projects {
         overflow-x: hidden;
         position: relative;
     }

     #projects .timeline-gradient-anim {
         left: 0 !important;
         width: 4px !important;
         min-width: 4px !important;
         right: auto;
         /* NE PAS écraser background ni background-image */
         /* NE PAS désactiver l'animation */
         transform: none !important;
         opacity: 0.35;
         border-radius: 2px;
     }


     #projects .timeline-card-container {
         width: 100% !important;
         padding: 0 !important;
         text-align: left !important;
         justify-content: flex-start !important;
         margin-bottom: 2.5rem;
         position: relative;
     }

     #projects .github-card,
     #projects .large-card.github-card {
         width: 100% !important;
         max-width: 100% !important;
         margin-left: 2.2rem !important;
         margin-right: 0 !important;
     }

     .md\:pr-12,
     .md\:pl-12 {
         padding-right: 0 !important;
         padding-left: 0 !important;
     }

     .md\:flex {
         display: block !important;
     }
 }

 /* --- Animation Timeline Projects --- */

 /* État initial : invisible et décalé, PAS d'animation */
 .timeline-fade-slide,
 .slide-in-left,
 .slide-in-right {
     opacity: 0;
     pointer-events: none;
 }

 .slide-in-left {
     transform: translateX(-100px);
 }

 .slide-in-right {
     transform: translateX(100px);
 }

 .timeline-fade-slide {
     transform: translateY(40px) scale(0.98);
 }

 /* Animation au moment voulu */
 .timeline-fade-slide.visible {
     pointer-events: auto;
     animation: fadeSlideIn 0.7s cubic-bezier(.22, 1, .36, 1) forwards;
 }

 .slide-in-left.visible {
     pointer-events: auto;
     animation: slideInLeft 0.8s cubic-bezier(.22, 1, .36, 1) forwards;
 }

 .slide-in-right.visible {
     pointer-events: auto;
     animation: slideInRight 0.8s cubic-bezier(.22, 1, .36, 1) forwards;
 }

 @keyframes fadeSlideIn {
     to {
         opacity: 1;
         transform: translateY(0) scale(1);
     }
 }

 @keyframes slideInLeft {
     to {
         opacity: 1;
         transform: translateX(0);
     }
 }

 @keyframes slideInRight {
     to {
         opacity: 1;
         transform: translateX(0);
     }
 }


.horizontal-scroll-wrapper {
  position: relative;
  margin: 0 auto;
  overflow: hidden;
  border-radius: 10px;
  border-left: 3px solid #0969DA;
  border-right: 3px solid #0969DA;
}

.horizontal-scroll-wrapper::before,
.horizontal-scroll-wrapper::after {
  content: "";
  position: absolute;
  top: 0; bottom: 0;
  width: 4px; /* Plus fin */
  pointer-events: none;
  z-index: 2;
}

.horizontal-scroll-wrapper::before {
  left: 0;
  background: linear-gradient(to right, rgba(51,170,255,0.10) 80%, transparent 100%);
  border-radius: 10px 0 0 10px;
}

.horizontal-scroll-wrapper::after {
  right: 0;
  background: linear-gradient(to left, rgba(51,170,255,0.10) 80%, transparent 100%);
  border-radius: 0 10px 10px 0;
}


.horizontal-scroll-container {
  display: flex;
  flex-wrap: nowrap;
}
.infinite-scroll {
  display: flex;
  flex-wrap: nowrap;
  animation: scroll 20s linear infinite;
  will-change: transform;
}
@keyframes scroll {
  0% {
    transform: translateX(0);
  }
  100% {
    /* 5 cards * 270px (card width + margin) = 1350px, adapte selon ton design */
    transform: translateX(-1350px);
  }
}
.scroll-item {
  flex: 0 0 auto;
  width: 256px; /* w-64 */
  margin-right: 16px; /* mr-4 */
  scroll-snap-align: start;
}

.language-dot {
  display: inline-block;
  width: 12px;
  height: 12px;
  border-radius: 50%;
  margin-right: 4px;
}
        
        .javascript { background-color: #f1e05a; }
        .html { background-color: #e34c26; }
        .kotlin { background-color: #563d7c; }
        .python { background-color: #3572A5; }
        .java { background-color: #b07219; }
        .php { background-color: #512fce; }
        .swagger { background-color: #85ea2d; }
        .TypeScript { background-color: #2d8fea; }





.grayscale-img {
  filter: grayscale(1);
  transition: filter 0.4s cubic-bezier(.4,0,.2,1);
}
.floating:hover .grayscale-img {
  filter: grayscale(0);
}








:root {
            --primary: #58a6ff;
            --secondary: #8a2be2;
            --accent: #7ee787;
            --bg-dark: #0a0d12;
            --bg-light: #161b22;
            --text: #e6edf3;
            --text-muted: #7d8590;
        }
        
        body {
        
            background-color: var(--bg-dark);
            color: var(--text);
            overflow-x: hidden;
        }
        
        .code-bg {
            background: var(--bg-light);
            border: 1px solid #30363d;
            border-radius: 12px;
            box-shadow: 0 10px 30px rgba(0,0,0,0.5);
        }
        
        .neon-box {
            position: relative;
            overflow: hidden;
        }
        
        .neon-box::before {
            content: '';
            position: absolute;
            top: -50%;
            left: -50%;
            width: 200%;
            height: 200%;
            background: linear-gradient(
                to bottom right,
                rgba(88, 166, 255, 0.2),
                transparent 70%
            );
            transform: rotate(30deg);
            z-index: 0;
        }
        
        .gradient-text {
            background: linear-gradient(90deg, #58a6ff, #8a2be2);
            -webkit-background-clip: text;
            background-clip: text;
            color: transparent;
        }
        
        .terminal-cursor {
            animation: blink 1s step-end infinite;
        }
        
        @keyframes blink {
            from, to { opacity: 1; }
            50% { opacity: 0; }
        }
        
        .commit-tile {
            border-left: 3px solid #58a6ff;
            transition: all 0.3s ease;
        }
        
        .commit-tile:hover {
            transform: translateX(5px);
            background: rgba(88, 166, 255, 0.1);
        }
        
        .glow {
            box-shadow: 0 0 15px rgba(88, 166, 255, 0.5);
        }
        
        .tech-icon {
            transition: all 0.3s ease;
        }
        
        .tech-icon:hover {
            transform: scale(1.2) rotate(5deg);
        }
        
        @media (max-width: 768px) {
            .mobile-stack {
                display: flex;
                flex-direction: column;
            }
        }




        #contact {
  position: relative;
  z-index: 1;
}
#contact::before {
  content: "";
  position: absolute;
  inset: 0;
  z-index: 0;
  backdrop-filter: blur(1.5px);
  -webkit-backdrop-filter: blur(8px);
  border-radius: 1rem; 
  pointer-events: none;
}
#contact > * {
  position: relative;
  z-index: 1;
}


html.light #themeToggle i.fa-sun,
html.light #themeToggleMobile i.fa-sun {
  color: #f0b30c !important;
}






 .terminal-window {
  background: rgba(22,27,34,0.85);
  border-radius: 1rem;
  border: 1.5px solid #30363d;
  box-shadow: 0 6px 32px 0 rgba(20,24,31,0.18);
  backdrop-filter: blur(2.5px);
  -webkit-backdrop-filter: blur(2.5px);
  overflow: hidden;
}
.terminal-window .dot {
  transition: box-shadow 0.2s;
}
.terminal-window .dot:hover {
  box-shadow: 0 0 8px 2px currentColor, 0 0 0 2px #2226;
}
.terminal-window .terminal-content {
  background: transparent;
}
.cursor.blink {
  display: inline-block;
  animation: blink 1s steps(2, start) infinite;
}
@keyframes blink {
  to { opacity: 0; }
}





.terminal-cursor {
  display: inline-block;
  width: 3ch;
  background: none;
  color: inherit;
  animation: blink-cursor 1s steps(1) infinite;
}

@keyframes blink-cursor {
  0%, 50% { opacity: 1; }
  51%, 100% { opacity: 0; }
}

.profile-img {
  transition: transform 0.5s cubic-bezier(0.4,0,0.2,1);
}

.relative.inline-block.floating:hover .profile-img {
  transform: scale(1.12);
}