/* ==========================================================
   TOKENS
   ========================================================== */
:root{
  --bg: #14161A;
  --panel: #1B1E24;
  --panel-2: #21252C;
  --border: #2B2F37;
  --line: rgba(111,227,255,0.14);
  --cyan: #6FE3FF;
  --amber: #E8A662;
  --text: #ECEEF1;
  --muted: #8A93A3;

  --display: 'Space Grotesk', sans-serif;
  --body: 'Inter', sans-serif;
  --mono: 'IBM Plex Mono', monospace;
}

*{box-sizing:border-box; margin:0; padding:0;}
html{scroll-behavior:smooth;}
body{
  background:var(--bg);
  color:var(--text);
  font-family:var(--body);
  line-height:1.5;
  -webkit-font-smoothing:antialiased;
  overflow-x:hidden;
}
h1,h2,h3{font-family:var(--display); font-weight:600; letter-spacing:-0.01em;}
a{color:inherit; text-decoration:none;}
ul,ol{list-style:none;}

@media (prefers-reduced-motion: reduce){
  *{animation-duration:0.001ms !important; transition-duration:0.001ms !important;}
}

.grain{
  position:fixed; inset:0; pointer-events:none; z-index:999;
  opacity:0.035; mix-blend-mode:overlay;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='120' height='120'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
}

.eyebrow{
  font-family:var(--mono);
  font-size:0.72rem;
  letter-spacing:0.12em;
  text-transform:uppercase;
  color:var(--cyan);
  margin-bottom:0.9rem;
}

/* ==========================================================
   TOPBAR
   ========================================================== */
.topbar{
  position:fixed; top:0; left:0; right:0; z-index:50;
  display:flex; align-items:center; justify-content:space-between;
  padding:1.4rem 2.4rem;
  font-family:var(--mono); font-size:0.8rem;
  background:linear-gradient(to bottom, rgba(20,22,26,0.9), transparent);
}
.topbar__mark{letter-spacing:0.08em; font-weight:500;}
.topbar__mark .dim{color:var(--muted);}
.topbar__nav{display:flex; gap:2rem;}
.topbar__nav a{color:var(--muted); transition:color .2s;}
.topbar__nav a:hover{color:var(--cyan);}
.topbar__cta{
  border:1px solid var(--border);
  padding:0.5rem 1rem;
  border-radius:2px;
  transition:border-color .2s, color .2s;
}
.topbar__cta:hover{border-color:var(--amber); color:var(--amber);}

@media (max-width:760px){
  .topbar__nav{display:none;}
}

/* ==========================================================
   VIEWPORT / HERO
   ========================================================== */
.viewport{
  position:relative;
  height:100svh;
  min-height:560px;
  display:flex; align-items:center; justify-content:center;
  overflow:hidden;
  background:
    radial-gradient(ellipse 60% 50% at 50% 100%, rgba(232,166,98,0.10), transparent),
    radial-gradient(ellipse 80% 60% at 50% 0%, rgba(111,227,255,0.06), transparent),
    var(--bg);
}

.viewport__grid{
  position:absolute; inset:0;
  background-image:
    linear-gradient(var(--line) 1px, transparent 1px),
    linear-gradient(90deg, var(--line) 1px, transparent 1px);
  background-size:56px 56px;
  -webkit-mask-image:radial-gradient(ellipse 70% 70% at 50% 55%, black 0%, transparent 75%);
          mask-image:radial-gradient(ellipse 70% 70% at 50% 55%, black 0%, transparent 75%);
  transform:perspective(600px) rotateX(2deg);
}

.viewport__center{
  position:relative; z-index:2;
  text-align:center;
  padding:0 1.5rem;
}
.viewport__title{
  font-size:clamp(3.4rem, 12vw, 8.2rem);
  line-height:0.88;
  letter-spacing:-0.02em;
}
.viewport__tagline{
  margin-top:1.4rem;
  color:var(--muted);
  font-size:1.02rem;
  max-width:34rem;
  margin-left:auto; margin-right:auto;
}

.hud{
  position:absolute; z-index:2;
  display:flex; flex-direction:column; gap:0.15rem;
  font-family:var(--mono); font-size:0.72rem;
}
.hud__label{color:var(--cyan); letter-spacing:0.1em;}
.hud__value{color:var(--muted);}
.hud--tl{top:5.6rem; left:2.4rem;}
.hud--tr{top:5.6rem; right:2.4rem; align-items:flex-end; text-align:right;}
.hud--bl{bottom:2.4rem; left:2.4rem;}
.hud--br{bottom:2.4rem; right:2.4rem; align-items:flex-end; text-align:right;}
.hud__coords{margin-top:0.4rem;}
.gizmo{opacity:0.85;}

@media (max-width:640px){
  .hud--tl,.hud--bl{left:1.2rem;}
  .hud--tr,.hud--br{right:1.2rem;}
  .hud--tl,.hud--tr{top:4.6rem;}
}

.scrollcue{
  position:absolute; bottom:2.4rem; left:50%; transform:translateX(-50%);
  display:flex; flex-direction:column; align-items:center; gap:0.5rem;
  font-family:var(--mono); font-size:0.65rem; letter-spacing:0.15em;
  color:var(--muted); z-index:2;
}
.scrollcue__line{width:1px; height:28px; background:linear-gradient(var(--cyan), transparent); animation:pulse 2.2s ease-in-out infinite;}
@keyframes pulse{0%,100%{opacity:0.3;} 50%{opacity:1;}}

/* ==========================================================
   SECTIONS (shared)
   ========================================================== */
.section{
  padding:7rem 2.4rem;
  max-width:1180px;
  margin:0 auto;
}
.section h2{font-size:clamp(1.9rem, 3.6vw, 2.7rem); margin-bottom:0.6rem;}

/* ==========================================================
   WORK
   ========================================================== */
.work{padding-top:6rem;}
.section__head{
  display:flex; flex-wrap:wrap; align-items:flex-end; justify-content:space-between;
  gap:1.5rem; margin-bottom:3rem; border-bottom:1px solid var(--border); padding-bottom:2rem;
}
.filters{display:flex; gap:0.5rem;}
.filter{
  font-family:var(--mono); font-size:0.72rem; letter-spacing:0.06em;
  color:var(--muted); background:transparent; border:1px solid var(--border);
  padding:0.45rem 0.9rem; border-radius:2px; cursor:pointer; transition:all .2s;
}
.filter:hover{color:var(--text); border-color:var(--muted);}
.filter.is-active{color:var(--bg); background:var(--cyan); border-color:var(--cyan);}

.frames{
  display:grid; grid-template-columns:repeat(2, 1fr); gap:1.6rem;
}
@media (max-width:760px){ .frames{grid-template-columns:1fr;} }

.frame{
  border:1px solid var(--border);
  background:var(--panel);
  border-radius:2px;
  overflow:hidden;
  transition:transform .25s ease, border-color .25s ease;
}
.frame:hover{transform:translateY(-4px); border-color:var(--cyan);}
.frame[hidden]{display:none;}

.frame__viz{
  position:relative;
  aspect-ratio:4/3;
  display:flex; align-items:flex-end;
  padding:1rem;
  cursor:zoom-in;
}
.frame__tag{
  font-family:var(--mono); font-size:0.65rem; letter-spacing:0.1em;
  color:rgba(255,255,255,0.75);
  background:rgba(0,0,0,0.35);
  padding:0.25rem 0.55rem;
  border:1px solid rgba(255,255,255,0.15);
}

/* Placeholder "render" gradients — swap for real project photos, see README */
.frame__viz--1{background:linear-gradient(160deg,#2b2f22 0%,#5b6b3c 40%,#e8a662 100%);}
.frame__viz--2{background:linear-gradient(160deg,#131722 0%,#1f3a52 45%,#6fe3ff 130%);}
.frame__viz--3{background:linear-gradient(160deg,#241f1a 0%,#4a3c30 50%,#c98a4b 120%);}
.frame__viz--4{background:linear-gradient(160deg,#1c2320 0%,#33473e 45%,#9fd8c0 120%);}
.frame__viz--5{background:linear-gradient(160deg,#191b24 0%,#2c3350 45%,#8ea3d8 120%);}
.frame__viz--6{background:linear-gradient(160deg,#221a1a 0%,#573434 45%,#e08a6a 120%);}

.frame__meta{padding:1.1rem 1.2rem 1.3rem;}
.frame__meta h3{font-size:1.05rem; margin-bottom:0.6rem;}
.frame__meta dl{display:flex; flex-wrap:wrap; gap:0 1.2rem;}
.frame__meta dl div{display:flex; gap:0.35rem; font-family:var(--mono); font-size:0.7rem;}
.frame__meta dt{color:var(--muted);}
.frame__meta dd{color:var(--text);}

.hint{
  margin-top:2rem; color:var(--muted); font-family:var(--mono); font-size:0.72rem;
}
.hint code{color:var(--amber);}

/* ==========================================================
   ABOUT
   ========================================================== */
.about{
  display:grid; grid-template-columns:1.3fr 1fr; gap:4rem;
  border-top:1px solid var(--border);
}
@media (max-width:800px){ .about{grid-template-columns:1fr;} }
.about__text h2{margin-bottom:1.4rem;}
.about__text p{color:var(--muted); max-width:34rem; margin-bottom:1rem;}
.link-arrow{
  display:inline-block; margin-top:1rem; font-family:var(--mono); font-size:0.85rem;
  color:var(--amber); border-bottom:1px solid transparent; transition:border-color .2s;
}
.link-arrow:hover{border-color:var(--amber);}

.spec{
  border:1px solid var(--border); background:var(--panel); padding:1.6rem; border-radius:2px; height:fit-content;
}
.spec__title{font-family:var(--mono); font-size:0.7rem; letter-spacing:0.12em; color:var(--cyan); margin-bottom:1rem;}
.spec ul li{
  display:flex; justify-content:space-between; gap:1rem;
  padding:0.55rem 0; border-bottom:1px dashed var(--border);
  font-size:0.85rem;
}
.spec ul li:last-child{border-bottom:none;}
.spec ul li span:first-child{color:var(--muted);}

/* ==========================================================
   PROCESS
   ========================================================== */
.process{border-top:1px solid var(--border);}
.process h2{margin-bottom:2.6rem;}
.steps{
  display:grid; grid-template-columns:repeat(4, 1fr); gap:1.6rem;
}
@media (max-width:900px){ .steps{grid-template-columns:1fr 1fr;} }
@media (max-width:560px){ .steps{grid-template-columns:1fr;} }
.steps li{border-top:1px solid var(--border); padding-top:1rem;}
.steps__index{font-family:var(--mono); color:var(--amber); font-size:0.85rem;}
.steps h3{font-size:1rem; margin:0.6rem 0 0.5rem;}
.steps p{color:var(--muted); font-size:0.88rem;}

/* ==========================================================
   CONTACT
   ========================================================== */
.contact{
  position:relative;
  border-top:1px solid var(--border);
  text-align:center;
  padding-top:7rem; padding-bottom:8rem;
  overflow:hidden;
}
.contact__grid{
  position:absolute; inset:0;
  background-image:linear-gradient(var(--line) 1px, transparent 1px), linear-gradient(90deg, var(--line) 1px, transparent 1px);
  background-size:64px 64px;
  -webkit-mask-image:radial-gradient(ellipse 60% 60% at 50% 40%, black 0%, transparent 70%);
          mask-image:radial-gradient(ellipse 60% 60% at 50% 40%, black 0%, transparent 70%);
}
.contact .eyebrow, .contact h2, .contact__lead, .contact__mail, .contact__social{position:relative; z-index:1;}
.contact h2{margin-bottom:0.8rem;}
.contact__lead{color:var(--muted); max-width:30rem; margin:0 auto 2.2rem;}
.contact__mail{
  display:inline-block; font-family:var(--display); font-size:clamp(1.4rem, 4vw, 2.1rem);
  color:var(--amber); border-bottom:1px solid var(--amber); padding-bottom:0.3rem;
}
.contact__social{
  margin-top:2.4rem; display:flex; gap:1.6rem; justify-content:center; flex-wrap:wrap;
  font-family:var(--mono); font-size:0.78rem; color:var(--muted);
}
.contact__social a:hover{color:var(--cyan);}

/* ==========================================================
   FOOTER
   ========================================================== */
.footer{
  display:flex; justify-content:space-between; flex-wrap:wrap; gap:0.6rem;
  padding:1.6rem 2.4rem; border-top:1px solid var(--border);
  font-family:var(--mono); font-size:0.68rem; color:var(--muted);
}

/* ==========================================================
   LIGHTBOX (agrandissement des images)
   ========================================================== */
.lightbox{
  position:fixed; inset:0; z-index:200;
  background:rgba(10,11,13,0.92);
  display:none; align-items:center; justify-content:center;
  padding:3rem 1.5rem;
  cursor:zoom-out;
}
.lightbox.is-open{display:flex;}
.lightbox__img{
  width:min(1100px, 92vw);
  height:min(80vh, 750px);
  background-size:cover;
  background-position:center;
  border:1px solid var(--border);
  border-radius:2px;
  box-shadow:0 30px 80px rgba(0,0,0,0.5);
  cursor:zoom-in;
  transition:background-size .15s ease;
}
.lightbox__img.is-zoomed{
  cursor:zoom-out;
  background-size:220%;
}
.lightbox__close{
  position:absolute; top:1.6rem; right:1.8rem;
  background:transparent; border:1px solid var(--border);
  color:var(--text); width:2.4rem; height:2.4rem;
  border-radius:2px; cursor:pointer; font-size:1rem;
  transition:border-color .2s, color .2s;
}
.lightbox__close:hover{border-color:var(--cyan); color:var(--cyan);}

@media (max-width:640px){
  .lightbox__img{height:min(70vh, 600px);}
}
