@charset "UTF-8";

/* =========================================================
   TOKENS
========================================================= */
:root{
  --bg:#f3f6fb;
  --surface:#fbfcfe;

  --ink:#1f2a37;
  --ink-soft:#243244;

  --shadow: rgba(20,35,55,.10);
  --shadow-soft: rgba(20,35,55,.08);

  --halo: rgba(50,80,120,.10);
  --halo-strong: rgba(50,80,120,.14);

  --r-lg:18px;
  --r-md:16px;
  --r-pill:999px;

  --t-fast:160ms;
  --t-med:180ms;
}

/* =========================================================
   BASE
========================================================= */
*{ box-sizing:border-box; }
html,body{ height:100%; }

body{
  margin:0;
  font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica,Arial,"Apple Color Emoji","Segoe UI Emoji";
  background:var(--bg);
  color:var(--ink);
  font-weight:300;
  -webkit-font-smoothing:antialiased;
  -moz-osx-font-smoothing:grayscale;
}

.wrap{
  min-height:100%;
  display:grid;
  place-items:center;
  padding:28px 18px;
}

.sr-only{
  position:absolute;
  width:1px;height:1px;
  padding:0;margin:-1px;
  overflow:hidden;
  clip:rect(0,0,0,0);
  white-space:nowrap;
  border:0;
}

/* =========================================================
   ELEVATED + HALO
========================================================= */
:where(.circle-link,.icon-link,.btn,.btn-link){
  background:var(--surface);
  color:var(--ink);
  box-shadow:0 16px 44px var(--shadow-soft);
  position:relative;
  isolation:isolate;
  transition:box-shadow var(--t-med) ease, transform var(--t-fast) ease, color var(--t-med) ease;
  -webkit-tap-highlight-color:transparent;
}

:where(.circle-link,.icon-link,.btn,.btn-link)::after{
  content:"";
  position:absolute;
  inset:-12px;
  border-radius:inherit;
  background:radial-gradient(circle at 50% 50%, var(--halo), transparent 60%);
  opacity:0;
  transition:opacity var(--t-med) ease;
  z-index:-1;
  pointer-events:none;
  filter:blur(2px);
}

:where(.circle-link,.icon-link,.btn,.btn-link):hover{
  color:var(--ink-soft);
  box-shadow:0 18px 52px var(--shadow);
  transform:translateY(-1px);
}
:where(.circle-link,.icon-link,.btn,.btn-link):hover::after{ opacity:1; }

:where(.circle-link,.icon-link,.btn,.btn-link):focus-visible{
  outline:3px solid rgba(31,42,55,.25);
  outline-offset:6px;
}

.circle-link:focus-visible::after{
  opacity:1;
  background:radial-gradient(circle at 50% 50%, var(--halo-strong), transparent 60%);
}

/* =========================================================
   HOME
========================================================= */
.home{
  display:grid;
  gap:clamp(22px,5vw,50px);
  justify-items:center;
  width:min(980px,100%);
  transform:translateY(-18px);
}

.title{
  margin:0;
  font-size:clamp(18px,2.2vw,22px);
  font-weight:500;
  letter-spacing:.2px;
}

.circles{
  display:flex;
  align-items:center;
  justify-content:center;
  gap:18px;
  flex-wrap:nowrap;
}

.circle-link{
  width:clamp(112px,13vw,120px);
  height:clamp(112px,13vw,120px);
  border-radius:var(--r-pill);
  text-decoration:none;
  display:grid;
  place-items:center;
  user-select:none;
}

.circle-link span{
  font-size:14px;
  letter-spacing:.15px;
  font-weight:400;
}

.circle-link{ --i:0; opacity:1; transform:none; }
.circle-link:nth-child(2){ --i:1; }
.circle-link:nth-child(3){ --i:2; }
.circle-link:nth-child(4){ --i:3; }

@media (prefers-reduced-motion: no-preference){
  .circle-link{
    opacity:0;
    transform:translateY(10px);
    animation:circleFadeIn 520ms ease both;
    animation-delay:calc(60ms + (var(--i) * 140ms));
    will-change:opacity,transform;
  }
}

@keyframes circleFadeIn{
  from{ opacity:0; transform:translateY(10px); }
  to{ opacity:1; transform:translateY(0); }
}

@media (max-width:700px){
  .home{ transform:translateY(-10px); }
  .circles{ flex-direction:column; gap:16px; }
  .circle-link{ width:160px; height:160px; }
  .circle-link span{ font-size:16px; }
}

/* =========================================================
   PAGES INTERNES
========================================================= */
.wrap.page{
  align-content:start;
  justify-items:center;
  row-gap:14px;
  padding-top:32px;
}

.page-title{
  margin:0 0 20px 0;
  font-size:20px;
  font-weight:500;
  letter-spacing:.2px;
}

.panel{
  width:min(820px,100%);
  border-radius:var(--r-lg);
  background:var(--surface);
  box-shadow:0 16px 44px var(--shadow-soft);
  padding:22px;
}

.topbar{
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:12px;
  margin-bottom:14px;
}

.icon-link{
  width:44px;
  height:44px;
  border-radius:var(--r-pill);
  display:grid;
  place-items:center;
  text-decoration:none;
}

.icon-link svg{ width:18px; height:18px; }

.grid{
  display:grid;
  grid-template-columns:1fr 1fr;
  gap:18px;
  align-items:start;
}

/* =========================================================
   CONTACT
========================================================= */
.panel.panel-contact{ width:min(760px,100%); }

.panel.panel-contact .grid{
  grid-template-columns:220px 1fr;
  gap:20px;
}

.lines, .cv-lines{
  margin:0;
  padding:0;
  list-style:none;
}

.lines{ line-height:1.75; font-size:14px; }
.cv-lines{ line-height:1.45; font-size:13px; }

.lines a,
.cv-lines a{
  color:var(--ink);
  text-decoration:none;
  border-bottom:1px solid rgba(31,42,55,.22);
}
.lines a:hover,
.cv-lines a:hover{ border-bottom-color:rgba(31,42,55,.45); }

form{ display:grid; gap:10px; }

label{
  font-size:12px;
  color:rgba(31,42,55,.70);
}

input,textarea{
  width:100%;
  border:1px solid rgba(31,42,55,.14);
  border-radius:12px;
  padding:10px 12px;
  font:inherit;
  font-size:14px;
  background:#fff;
  color:var(--ink);
  outline:none;
  transition:border-color 140ms ease, box-shadow var(--t-med) ease;
}

textarea{ min-height:140px; resize:vertical; }

input:focus,textarea:focus{
  border-color:rgba(31,42,55,.28);
  box-shadow:0 0 0 4px rgba(31,42,55,.06);
}

.row{
  display:grid;
  grid-template-columns:1fr 1fr;
  gap:10px;
}

.btn{
  height:44px;
  border-radius:var(--r-pill);
  border:0;
  cursor:pointer;
}

.btn-link{
  font-size:13px;
  height:44px;
  padding:0 18px;
  border-radius:var(--r-pill);
  text-decoration:none;
  display:inline-flex;
  align-items:center;
  justify-content:center;
}

.hint{
  margin:0;
  font-size:12px;
  color:rgba(31,42,55,.70);
  line-height:1.5;
}

.hp{
  position:absolute;
  left:-10000px;
  top:auto;
  width:1px;height:1px;
  overflow:hidden;
}

.msg{
  margin:0 0 10px 0;
  font-size:13px;
  color:#b91c1c;
}

@media (max-width:900px){
  .panel.panel-contact{ width:min(720px,100%); }
  .panel.panel-contact .grid{ grid-template-columns:200px 1fr; }
}

@media (max-width:820px){
  .panel.panel-contact .grid{ grid-template-columns:1fr; }
  .row{ grid-template-columns:1fr; }
}

@media (max-width:520px){
  .panel{ padding:18px; }
  .topbar{ margin-bottom:10px; }
}

/* =========================================================
   THANKS
========================================================= */
.thanks{
  text-align:center;
  padding:18px 6px 6px;
}

.thanks-title{
  margin:2px 0 10px;
  font-size:18px;
  font-weight:500;
  letter-spacing:.2px;
}

.thanks-actions{
  margin-top:16px;
  display:flex;
  gap:10px;
  justify-content:center;
  flex-wrap:wrap;
}

.panel.panel-contact .thanks{ padding-top:8px; }

/* =========================================================
   CV (SCREEN)
========================================================= */
.panel.cv{ padding:22px; }

.cv-actions{
  display:flex;
  gap:10px;
  align-items:center;
}

.btn-print{
  padding:0 16px;
  width:auto;
}

.cv-layout{
  display:grid;
  grid-template-columns:minmax(190px, 220px) minmax(0, 1fr);
  gap:18px;
  align-items:stretch;
}

.cv-left,
.cv-right{
  display:flex;
  flex-direction:column;
  gap:10px;
}

/* Une section « à plusieurs lignes » de chaque colonne absorbe l'écart
   de hauteur entre les deux colonnes, en répartissant l'espace en trop
   finement entre ses propres lignes plutôt que de créer un seul grand
   vide en bas (Compétences techniques à gauche, Expériences pro à droite). */
.cv-left .cv-block:nth-of-type(4),
.cv-right .cv-section:first-of-type{
  flex:1 1 auto;
  display:flex;
  flex-direction:column;
  justify-content:space-between;
}

.cv-photo{
  border-radius:var(--r-md);
  overflow:hidden;
  box-shadow:0 16px 44px var(--shadow-soft);
  background:#fff;
  height:175px;
}
.cv-photo img{
  width:100%;
  height:100%;
  display:block;
  object-fit:cover;
  object-position:50% 12%;
}

@media (max-width:860px){
  .cv-layout{
    grid-template-columns:1fr;
    gap:12px;
    justify-items:stretch;
  }

  .cv-left,
  .cv-right{
    justify-items:stretch;
  }

  .cv-photo,
  .cv-block,
  .cv-header,
  .cv-section{
    width:100%;
    max-width:none;
  }

  .cv-photo{ height:min(56vw,300px); }
  .cv-photo img{ object-position:50% 22%; }
}

@media (max-width:520px){
  .cv-photo{ height:min(70vw,340px); }
  .cv-photo img{ object-position:50% 24%; }
}

.cv-block{
  border-radius:var(--r-md);
  background:#fff;
  box-shadow:0 16px 44px var(--shadow-soft);
  padding:12px;
}

.cv-h2{
  margin:0 0 7px;
  font-size:12px;
  font-weight:500;
  letter-spacing:.25px;
  text-transform:uppercase;
  color:rgba(31,42,55,.75);
}

.skill{
  display:grid;
  grid-template-columns:1fr 50px;
  gap:6px;
  align-items:center;
  margin-bottom:7px;
}
.skill:last-child{ margin-bottom:0; }

.skill-top{
  font-size:12px;
  color:rgba(31,42,55,.82);
  white-space:nowrap;
  overflow:hidden;
  text-overflow:ellipsis;
}

.skill-pct{ display:none; }

.bar{
  height:8px;
  border-radius:var(--r-pill);
  background:rgba(31,42,55,.12);
  overflow:hidden;
}
.bar span{
  display:block;
  height:100%;
  width:calc(var(--lvl, 0.6) * 100%);
  border-radius:var(--r-pill);
  background:rgba(50,80,120,.22);
}

.cv-tags{
  margin:0;
  padding:0;
  list-style:none;
  display:flex;
  flex-wrap:wrap;
  gap:6px;
}
.cv-tags li{
  padding:5px 9px;
  border-radius:var(--r-pill);
  background:rgba(31,42,55,.06);
  font-size:11px;
  color:rgba(31,42,55,.78);
}

.cv-header{
  border-radius:var(--r-md);
  background:#fff;
  box-shadow:0 16px 44px var(--shadow-soft);
  padding:14px;
}

.cv-name{
  margin:0;
  font-size:22px;
  font-weight:600;
  letter-spacing:.2px;
}

.cv-role{
  margin:6px 0 0;
  font-size:14px;
  font-weight:500;
  color:rgba(31,42,55,.78);
}

.cv-summary{
  margin:6px 0 0;
  font-size:13px;
  line-height:1.45;
  color:rgba(31,42,55,.72);
}

.cv-section{
  border-radius:var(--r-md);
  background:#fff;
  box-shadow:0 16px 44px var(--shadow-soft);
  padding:14px;
}

.cv-h3{
  margin:0 0 12px;
  font-size:12px;
  font-weight:600;
  letter-spacing:.25px;
  text-transform:uppercase;
  color:rgba(31,42,55,.75);
}

.cv-item{
  padding-top:5px;
  margin-top:5px;
  border-top:1px solid rgba(31,42,55,.08);
}
.cv-item:first-of-type{
  padding-top:0;
  margin-top:0;
  border-top:0;
}

.cv-item-head{
  display:flex;
  justify-content:space-between;
  gap:14px;
  align-items:baseline;
}

.cv-item-title{
  font-size:13px;
  color:rgba(31,42,55,.90);
}

.cv-item-date{
  font-size:12px;
  color:rgba(31,42,55,.55);
  white-space:nowrap;
}

.cv-bullets{
  margin:8px 0 0;
  padding-left:16px;
  color:rgba(31,42,55,.78);
  font-size:13px;
  line-height:1.55;
}

.cv-summary,
.cv-bullets,
.cv-bullets li{
  text-align:justify;
  text-justify:inter-word;
}

.cv-two-cols{
  display:grid;
  grid-template-columns:repeat(2, minmax(0, 1fr));
  gap:18px 28px;
}
.cv-two-cols .cv-col{ display:grid; gap:0; }

@media (max-width:720px){
  .cv-two-cols{
    grid-template-columns:1fr;
    gap:0;
  }
}

/* =========================================================
   PORTFOLIO
========================================================= */
.panel-portfolio-intro,
.portfolio-container{
  width:min(1040px,100%);
  margin:0 auto;
}

.panel-portfolio-intro{ padding:16px 22px 12px; }

.topbar-portfolio{
  display:flex;
  align-items:center;
  justify-content:flex-start;
  gap:14px;
  margin:0;
}

.topbar-portfolio .icon-link{ flex:0 0 auto; }

.hint-inline{
  margin:0;
  max-width:720px;
}

.portfolio{ margin-top:14px; }

.portfolio-list{
  display:flex;
  flex-direction:column;
  gap:16px;
}

.portfolio-sentinel{
  height:32px; 
}

.project{
  --media-w: clamp(260px, 34vw, 420px);
  display:grid;
  grid-template-columns:var(--media-w) 1fr;
  gap:16px;
  align-items:start;
  background:#fff;
  border-radius:var(--r-md);
  padding:14px;
  box-shadow:0 12px 30px rgba(15,23,42,.06);
}

.project--reverse{ grid-template-columns:1fr var(--media-w); }
.project--reverse .project__media{ grid-column:2; }
.project--reverse .project__content{ grid-column:1; }

.project__media{
  display:block;
  background:#fff;
  aspect-ratio:16 / 9;
  border-radius:var(--r-md);
  overflow:hidden;
  -webkit-mask-image:-webkit-radial-gradient(white, black);
  clip-path:inset(0 round var(--r-md));
}

.project__media img{
  width:100%;
  height:100%;
  display:block;
  object-fit:cover;
  object-position:center;
}

.project__content{
  display:flex;
  flex-direction:column;
  gap:7px;
  align-self:start;
}

.project__title{
  display:flex;
  justify-content:space-between;
  gap:12px;
  align-items:baseline;
}

.project__title h2{
  font-size:15px;
  font-weight:500;
  letter-spacing:.05px;
  color:rgba(31,42,55,.90);
  margin:0;
}

.project__meta{
  opacity:.55;
  white-space:nowrap;
  font-size:12px;
  letter-spacing:.1px;
}

.project__subtitle{
  margin:0;
  font-size:14px;
  line-height:1.42 !important;
  font-weight:400;
  text-align:justify;
  text-justify:inter-word;
  opacity:.75;
  color:rgba(31,42,55,.78);
}

.project__desc{
  margin:0;
  font-size:13.5px;
  line-height:1.42 !important;
  font-weight:400;
  text-align:justify;
  text-justify:inter-word;
  opacity:.85;
  color:rgba(31,42,55,.78);
}

.project__bullets{
  margin:6px 0 0;
  padding-left:16px;      
  display:grid;
  gap:4px;                  
  font-size:12.5px;          
  line-height:1.38;
  color:rgba(31,42,55,.62);  
}

.project__bullets li{
  margin:0;
}

.project__bullets li::marker{
  color:rgba(31,42,55,.38);   /* ✅ puce plus claire */
}

.project__tags{
  margin-top:10px;
  display:flex;
  flex-wrap:wrap;
  gap:8px;
}

.tag{
  font-size:.85rem;
  padding:6px 10px;
  border-radius:var(--r-pill);
  background:rgba(148,163,184,.18);
  color:rgba(15,23,42,.80);
}

.project__pub{
  margin:12px 0 0;
  display:flex;
  justify-content:flex-start;
}

.project__pub .btn-link{
  margin:0;
  height:40px;
  padding:0 16px;
  font-size:13px;
  text-decoration:none;
}

@media (max-width:900px){
  .project,
  .project--reverse{ grid-template-columns:1fr; }
  .project--reverse .project__media,
  .project--reverse .project__content{ grid-column:auto; }
  .project__media{ aspect-ratio:16 / 10; }
}

@media (max-width:520px){
  .topbar-portfolio{ align-items:flex-start; }
  .hint-inline{ padding-top:2px; }
}

@keyframes projectIn{
  from{ opacity:0; transform:translateY(10px); }
  to{ opacity:1; transform:translateY(0); }
}
.project.is-new{ animation: projectIn 2000ms cubic-bezier(.2,.8,.2,1) both; }

/* =========================================================
   PRINT (CV)
========================================================= */
@page{
  size:A4;
  margin:0;
}

@media print{
  :root{
    --print-pad:6mm;
    --print-pad-top:6mm;
    --print-gap:4mm;
    --print-scale:1;
  }

  *{
    -webkit-print-color-adjust:exact;
    print-color-adjust:exact;
  }

  html,body{
    margin:0 !important;
    padding:0 !important;
    background:var(--bg) !important;
    color:var(--ink) !important;
  }

  .page-title,
  .topbar,
  .cv-actions,
  .btn,
  .btn-link,
  .btn-print,
  .icon-link{
    display:none !important;
  }

  .wrap{
    min-height:auto !important;
    display:block !important;
    place-items:unset !important;
    padding:0 !important;
  }

  .wrap.page{
    padding:var(--print-pad-top) var(--print-pad) var(--print-pad) var(--print-pad) !important;
    row-gap:0 !important;
    align-content:start !important;
    transform:scale(var(--print-scale)) !important;
    transform-origin:top left !important;
  }

  .panel,
  .panel.cv{
    width:100% !important;
    max-width:none !important;
    margin:0 !important;
    padding:0 !important;
    background:transparent !important;
    border:0 !important;
    border-radius:0 !important;
    box-shadow:none !important;
  }

  .cv-layout{
    grid-template-columns:58mm 1fr !important;
    gap:6mm !important;
    align-items:stretch !important;
  }

  .cv-left,
  .cv-right{
    display:flex !important;
    flex-direction:column !important;
    gap:var(--print-gap) !important;
  }

  .cv-left > *:last-child{
    margin-top:auto !important;
  }

  .cv-photo,
  .cv-block,
  .cv-header,
  .cv-section{
    background:#fff !important;
    border-radius:16px !important;
    box-shadow:none !important;
    filter:drop-shadow(0 10px 22px rgba(20,35,55,.14)) !important;
    break-inside:avoid !important;
    page-break-inside:avoid !important;
  }

  body{ font-size:12.8px !important; }

  .cv-block{ padding:11px !important; }
  .cv-header,
  .cv-section{ padding:12px !important; }

  .cv-name{ font-size:20px !important; }
  .cv-role{ font-size:13.2px !important; }

  .cv-h2,
  .cv-h3{ margin:0 0 6px !important; }

  .cv-item{ padding-top:5px !important; margin-top:5px !important; }

  .cv-summary{
    font-size:12.8px !important;
    line-height:1.42 !important;
    margin-top:6px !important;
  }

  .cv-bullets{
    margin:5px 0 0 !important;
    font-size:12.8px !important;
    line-height:1.42 !important;
  }

  .cv-photo{
    height:46mm !important;
    overflow:hidden !important;
  }
  .cv-photo img{
    width:100% !important;
    height:100% !important;
    object-fit:cover !important;
    object-position:50% 16% !important;
  }

  .cv-section .cv-item{
    padding-top:10px !important;
    margin-top:10px !important;
  }

  .cv-section .cv-bullets{ margin-top:6px !important; }
  .cv-section .cv-summary{ margin-top:6px !important; }

  .cv-item-head{
    display:grid !important;
    grid-template-columns: 1fr max-content !important;
    column-gap: 10px !important;
    align-items: baseline !important;
  }

  .cv-item-title{
    white-space: normal !important;
  }

  .cv-two-cols{
    display:grid !important;
    grid-template-columns:1fr 1fr !important;
    gap:10mm !important;
  }

}

/* =========================================================
   REDUCED MOTION
========================================================= */
@media (prefers-reduced-motion: reduce){
  :where(.circle-link,.icon-link,.btn,.btn-link),
  :where(.circle-link,.icon-link,.btn,.btn-link)::after,
  input,textarea{
    transition:none !important;
  }
  .project.is-new{ animation:none !important; }
}

/* =========================================================
   linkedin
========================================================= */

/* LinkedIn badge — tuning visuel */
.li-badge-wrap{
  width: 100%;
  display: flex;
  justify-content: center;
  padding-top: 10px;
  padding-bottom: 16px; 
}

.li-badge-wrap{
  --li-scale: .92;        
  --li-opacity: .88;      
  --li-brightness: 1.06;  
  --li-contrast: .96;     
}

.li-badge-wrap .LI-profile-badge{
  transform-origin: top center;
  transform: scale(var(--li-scale));
  opacity: var(--li-opacity);
  filter: brightness(var(--li-brightness)) contrast(var(--li-contrast));
}

@media (max-width: 520px){
  .li-badge-wrap{
    --li-scale: .98;
  }
}

@media (min-width: 900px){
  .li-badge-wrap{
    --li-scale: .90;
  }
}