
/* ====== Louis Cerclé — Portfolio (2025) ====== */
/* Design system */
:root {
  --bg: #0b0f14;
  --surface: #0f1620;
  --surface-2: #121c27;
  --text: #e6eef7;
  --muted: #a7b5c5;
  --brand: #3aa0ff;
  --brand-2: #5ce1e6;
  --accent: #9b86ff;
  --ok: #7ee787;
  --warn: #ffd166;
  --danger: #ff6b6b;
  --radius: 14px;
  --shadow: 0 10px 30px rgba(0,0,0,.25);
  color-scheme: light dark;
}
:root[data-theme="light"]{
  --bg:#f7fafc; --surface:#ffffff; --surface-2:#f1f5f9;
  --text:#0e1726; --muted:#475569;
  --brand:#2563eb; --brand-2:#06b6d4; --accent:#7c3aed;
}

/* Reset */
*{box-sizing:border-box}
html{scroll-behavior:smooth}
body{margin:0;font-family:Inter, system-ui, -apple-system, Segoe UI, Roboto, Ubuntu, Cantarell, 'Helvetica Neue', Arial, 'Noto Sans', 'Apple Color Emoji','Segoe UI Emoji';background:var(--bg);color:var(--text)}
img{max-width:100%;display:block}
a{color:inherit;text-decoration:none}
button{font:inherit}
.container{max-width:1100px;margin:0 auto;padding:0 20px}
.hidden{display:none}

/* Skip link */
.skip-link{position:absolute;left:-9999px;top:auto;width:1px;height:1px;overflow:hidden}
.skip-link:focus{position:fixed;left:16px;top:16px;width:auto;height:auto;background:var(--brand);color:#fff;padding:8px 12px;border-radius:8px;z-index:9999}

/* Header */
.site-header{position:sticky;top:0;z-index:50;background:rgba(10,14,20,.6);backdrop-filter:saturate(140%) blur(12px);border-bottom:1px solid rgba(255,255,255,.06)}
.nav{display:flex;align-items:center;justify-content:space-between;gap:16px;height:64px}
.brand{display:flex;align-items:center;gap:10px}
.brand__logo{width:28px;height:28px;border-radius:8px;background:none !important;box-shadow:none;display:flex;align-items:center;justify-content:center}
.brand__name{font-weight:700;letter-spacing:.3px}
.nav__links{display:flex;gap:18px;align-items:center}
.nav__link{padding:8px 12px;border-radius:10px}
.nav__link:hover,.nav__link[aria-current="page"]{background:rgba(255,255,255,.06)}

.theme-toggle{border:0;background:transparent;padding:6px;border-radius:10px;cursor:pointer}
.theme-toggle:focus-visible{outline:2px solid var(--brand)}

/* Hamburger menu */
.menu-toggle{display:none;border:0;background:transparent;padding:8px;border-radius:8px;cursor:pointer;flex-direction:column;gap:3px}
.menu-toggle:focus-visible{outline:2px solid var(--brand)}
.menu-toggle span{display:block;width:20px;height:2px;background:var(--text);border-radius:1px;transition:all 0.3s ease}
.menu-toggle.active span:nth-child(1){transform:rotate(45deg) translate(5px, 5px)}
.menu-toggle.active span:nth-child(2){opacity:0}
.menu-toggle.active span:nth-child(3){transform:rotate(-45deg) translate(7px, -6px)}

/* Mobile header */
@media (max-width:768px){
  .nav{height:58px;gap:12px}
  .brand__name{font-size:.95rem}
  .brand__logo{width:24px;height:24px}
  
  .menu-toggle{display:flex}
  
  .nav__links{
    position:fixed;
    top:58px;
    left:0;
    width:100%;
    height:calc(100vh - 58px);
    background:var(--bg);
    flex-direction:column;
    justify-content:flex-start;
    padding:20px;
    gap:16px;
    transform:translateX(-100%);
    transition:transform 0.3s ease;
    border-top:1px solid rgba(255,255,255,.06);
  }
  
  .nav__links.active{transform:translateX(0)}
  
  .nav__link{
    padding:12px 16px;
    width:100%;
    text-align:left;
    border-radius:12px;
    font-size:1.1rem;
  }
  
  .theme-toggle{padding:12px 16px;align-self:flex-start}
}

/* Hero */
.hero{padding:80px 0 40px}
.grid-2{display:grid;grid-template-columns:1.1fr .9fr;gap:32px;align-items:center}
@media (max-width:900px){.grid-2{grid-template-columns:1fr} .site-header{background:rgba(10,14,20,.9)}}

.hero__kicker{color:var(--brand-2);font-weight:600}
.hero__title{font-size:clamp(28px,4.2vw,50px);line-height:1.1;margin:.25em 0}
.hero__lead{color:var(--muted);max-width:55ch}
.hero__cta{display:flex;gap:12px;margin-top:18px;flex-wrap:wrap}
.btn{display:inline-flex;align-items:center;gap:8px;padding:10px 14px;border-radius:12px;border:1px solid rgba(255,255,255,.12);background:var(--surface);box-shadow:var(--shadow)}
.btn--primary{background:linear-gradient(135deg,var(--brand),var(--brand-2));border:0;color:#07131f}
.btn--ghost{background:transparent}
.badges{display:flex;gap:8px;margin-top:14px;flex-wrap:wrap}
.badge{padding:6px 10px;border-radius:999px;border:1px solid rgba(255,255,255,.12);color:var(--muted);font-size:.92rem}

/* Sections */
.section{padding:56px 0}
.section h2{font-size:clamp(22px,3.4vw,32px);margin:0 0 18px}
.lead{color:var(--muted)}

/* Skills */
.skills{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;margin-top:18px}
@media (max-width:900px){.skills{grid-template-columns:1fr 1fr}}
.skill{padding:18px;border-radius:14px;background:var(--surface);border:1px solid rgba(255,255,255,.06)}
.skill__title{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px}
.skill__tags{display:flex;gap:8px;flex-wrap:wrap}
.tag{padding:6px 10px;border-radius:999px;background:rgba(90,180,255,.12);border:1px solid rgba(90,180,255,.25)}

/* Projects */
.projects{display:grid;grid-template-columns:repeat(3,1fr);gap:18px;margin-top:18px}
@media (max-width:1100px){.projects{grid-template-columns:1fr 1fr}}
@media (max-width:700px){.projects{grid-template-columns:1fr}}
.card{background:var(--surface);border:1px solid rgba(255,255,255,.06);border-radius:16px;overflow:hidden;box-shadow:var(--shadow)}
.card__img{aspect-ratio:16/9;background:linear-gradient(135deg,var(--brand),var(--accent));}
.card__body{padding:14px 14px 16px}
.card__title{margin:2px 0 6px;font-weight:700}
.card__desc{color:var(--muted);font-size:.98rem}
.card__meta{display:flex;gap:8px;flex-wrap:wrap;margin-top:10px}
.card__actions{display:flex;gap:10px;margin-top:12px}
.badge--tech{background:rgba(123,97,255,.12);border-color:rgba(123,97,255,.25)}

/* Contact */
.contact{display:grid;grid-template-columns:1fr 1fr;gap:24px}
@media (max-width:900px){.contact{grid-template-columns:1fr}}
.form{background:var(--surface);border:1px solid rgba(255,255,255,.06);border-radius:16px;padding:18px}
.input{width:100%;padding:12px 14px;border-radius:12px;background:var(--surface-2);border:1px solid rgba(255,255,255,.12);color:var(--text)}
.input:focus{outline:2px solid var(--brand);outline-offset:2px}
label{display:block;margin:10px 0 6px}
.help{color:var(--muted);font-size:.9rem}
.honeypot{position:absolute;left:-10000px;top:auto;width:1px;height:1px;overflow:hidden}

/* Footer */
.site-footer{padding:28px 0;border-top:1px solid rgba(255,255,255,.06);color:var(--muted);font-size:.95rem}

/* CV page */
.cv{display:grid;grid-template-columns:300px 1fr;gap:24px}
@media (max-width:1000px){.cv{grid-template-columns:1fr}}
.cv-aside{position:sticky;top:90px;align-self:start;background:var(--surface);border:1px solid rgba(255,255,255,.06);border-radius:16px;padding:18px}
.cv-photo{width:140px;height:140px;border-radius:16px;background:linear-gradient(135deg,var(--brand),var(--brand-2));margin-bottom:28px;overflow:hidden}
.cv-aside h3{margin:8px 0 8px}
.cv-main{display:flex;flex-direction:column;gap:16px}
.cv-item{background:var(--surface);border:1px solid rgba(255,255,255,.06);border-radius:16px;padding:18px}
.cv-item h3{margin:0 0 8px}
.cv-meta{color:var(--muted);font-size:.95rem}
.cv-list{margin:10px 0 0 18px}
.print-only{display:none}
@media print{
  .site-header,.site-footer,.theme-toggle,.nav,.skip-link{display:none !important}
  .container{max-width:none}
  .print-only{display:block}
}

/* CV spacing and sections */
.cv-aside, .cv-item { line-height: 1.6 }
.cv-main .cv-item + .cv-item { margin-top: 8px }
.cv-section-title { font-size: 1.15rem; margin: 18px 0 10px; color: var(--muted) }
.cv-head { display:flex; align-items:center; justify-content:space-between; gap:12px; margin-bottom: 8px }
.cv-head .btn { box-shadow:none }

/* Language gauges */
.lang-list{display:grid;grid-template-columns:1fr;gap:10px}
.lang{display:flex;align-items:center;gap:12px}
.lang-name{min-width:110px;font-weight:600}
.gauge{flex:1;height:12px;border-radius:999px;background:var(--surface-2);border:1px solid rgba(255,255,255,.12);position:relative;overflow:hidden}
.gauge__fill{position:absolute;left:0;top:0;bottom:0;width:0;background:linear-gradient(90deg,var(--brand),var(--accent));}
.gauge__label{min-width:54px;text-align:right;color:var(--muted);font-variant-numeric:tabular-nums}

/* Extra comfy spacing on CV */
.cv-item{padding:22px}
.cv-main{gap:22px}

/* --- Micro-interactions & transitions --- */
:root { --ease: cubic-bezier(.2,.8,.2,1) }
a, .btn, .card, .nav__link, .skill, .badge, .tag { transition: all .2s var(--ease) }

.btn:hover { transform: translateY(-1px); filter: brightness(1.05) }
.nav__link:hover { background: rgba(255,255,255,.08) }
.card:hover { transform: translateY(-2px); border-color: rgba(255,255,255,.18) }
.skill:hover, .tag:hover, .badge:hover { border-color: rgba(255,255,255,.2) }

/* --- Feature bullets under hero --- */
.features{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;margin-top:18px}
@media (max-width:900px){.features{grid-template-columns:1fr}}
.feature{display:flex;gap:12px;align-items:flex-start;background:var(--surface);border:1px solid rgba(255,255,255,.06);border-radius:14px;padding:12px}
.feature__icon{width:34px;height:34px;border-radius:10px;background:none !important;display:flex;align-items:center;justify-content:center;font-size:1.5rem}
.feature strong{display:block;margin-bottom:2px}

/* --- Contact cards on home --- */
.contact-cards{display:grid;grid-template-columns:1fr;gap:10px}
.contact-card{display:flex;gap:12px;align-items:center;background:var(--surface);border:1px solid rgba(255,255,255,.06);border-radius:14px;padding:12px}
.contact-card:hover{border-color:rgba(255,255,255,.18);transform:translateY(-1px)}
.contact-card__icon{
  width:34px;
  height:34px;
  border-radius:10px;
  background:none !important;
  display:flex;
  align-items:center;
  justify-content:center;
  font-size:1.7rem;
  line-height:1;
  padding:0;
}
.contact-card__body small{color:var(--muted)}

/* --- CV clearer separation --- */
.cv-section{background:var(--surface);border:1px solid rgba(255,255,255,.06);border-radius:16px;padding:18px}
.cv-section + .cv-section{margin-top:18px}
.cv-section h2{margin:0 0 12px}
.cv-divider{height:1px;background:rgba(255,255,255,.06);margin:12px 0}
.cv-item{padding:18px;border:1px dashed rgba(255,255,255,.08);border-radius:12px;background:transparent}
.cv-item + .cv-item{margin-top:12px}
.cv-meta{display:flex;gap:10px;flex-wrap:wrap}
.tag--role{background:rgba(126,231,135,.12);border-color:rgba(126,231,135,.25)}

/* Vertical rhythm and responsive gaps */
:root{ --vspace: clamp(44px, 8vw, 84px); --gap: clamp(12px, 3.6vw, 28px) }
.section{ padding: var(--vspace) 0 }
.grid-2{ gap: var(--gap) }
.features{ gap: clamp(10px, 2.6vw, 18px) }
.hero__cta{ margin-top: clamp(12px, 2.5vw, 20px) }
.badges{ margin-top: clamp(10px, 2vw, 16px) }

/* Favicon images near external links */
.favicon{ width:18px; height:18px; border-radius:4px; margin-right:6px; vertical-align:middle; opacity:.95 }
a[data-favicon]{display:inline-flex; align-items:center; gap:6px}

/* Button ghost hover */
.btn--ghost:hover{ border-color:rgba(255,255,255,.22); background:rgba(255,255,255,.04) }

/* Contact copy buttons */
.copy-wrap{ display:flex; gap:8px; align-items:center }
.copy-wrap .btn{ padding:6px 10px; }

/* Responsive tweaks */
@media (max-width:1100px){
  .container{ padding: 0 16px }
}
@media (max-width:700px){
  .hero{ padding-top: calc(var(--vspace) * .8) }
  .nav{ height:58px }
}

/* Utilities */
.mobile-only{ display:none }
@media (max-width:900px){ .mobile-only{ display:block } }

/* Prevent boxes touching */
.features, .contact-cards, .skills, .projects{ gap: clamp(14px, 3vw, 22px) }
.form{ gap: 12px }

/* Highlight */
mark{ background: rgba(255, 223, 99, .45); padding: 0 .2em; border-radius: 4px }

/* Social proof */
.social{ display:grid; grid-template-columns:1fr 1fr; gap: clamp(14px, 3vw, 22px) }
@media (max-width:900px){ .social{ grid-template-columns:1fr } }
.social-card{ background:var(--surface); border:1px solid rgba(255,255,255,.06); border-radius:16px; padding:16px }
.social-logos{ display:flex; gap:12px; flex-wrap:wrap }
.logo-badge{ padding:8px 10px; border-radius:10px; background:var(--surface-2); border:1px solid rgba(255,255,255,.08); font-weight:600 }
.stars{ display:inline-flex; align-items:center; gap:6px; padding:6px 10px; border:1px solid rgba(255,255,255,.12); border-radius:999px; }

/* Icon styling to replace favicons where needed */
.icon{ width:18px; height:18px; display:inline-block; vertical-align:middle }
.icon svg{ width:18px; height:18px; display:block }
a[data-favicon]{ gap:8px }

/* CV mobile fix: no sticky, compact aside */
@media (max-width:900px){
  .cv-aside{ position:static; top:auto }
  .cv{ gap: 16px }
  .cv-aside ul{ margin: 6px 0 }
  .cv-aside h3{ margin: 10px 0 6px }
  .cv-aside{ padding:14px }
}

/* Prevent boxes touching further */
.features, .contact-cards, .skills, .projects{ gap: clamp(16px, 3.3vw, 24px) }
