:root{
  --bg:        #0c0d10;
  --bg-soft:   #121319;
  --surface:   #16181f;
  --surface-2: #1c1f28;
  --border:    #2a2d38;
  --border-soft: #21232c;
  --text:      #f1efe8;
  --text-muted:#9497a3;
  --text-dim:  #62646f;
  --accent:    #d9a441;
  --accent-2:  #e8c77e;
  --accent-line: rgba(217,164,65,0.5);

  --font-display: 'Space Grotesk', sans-serif;
  --font-body: 'Inter', sans-serif;
  --font-mono: 'JetBrains Mono', monospace;

  --section-pad: clamp(4.5rem, 9vw, 7.5rem);
  --edge: clamp(1.5rem, 6vw, 5rem);
  --maxw: 1180px;
}

*{ box-sizing:border-box; margin:0; padding:0; }
html{ scroll-behavior:smooth; }
@media (prefers-reduced-motion: reduce){
  html{ scroll-behavior:auto; }
  *{ animation-duration:0.01ms !important; animation-iteration-count:1 !important; transition-duration:0.01ms !important; }
}

body{
  background:var(--bg);
  color:var(--text);
  font-family:var(--font-body);
  font-size:16px;
  line-height:1.6;
  -webkit-font-smoothing:antialiased;
  overflow-x:hidden;
}

img{ max-width:100%; display:block; }
a{ color:inherit; text-decoration:none; }
ul{ list-style:none; }
button{ font:inherit; cursor:pointer; }

::selection{ background:var(--accent); color:#12130f; }

:focus-visible{
  outline:2px solid var(--accent);
  outline-offset:3px;
}

h1,h2,h3{
  font-family:var(--font-display);
  font-weight:600;
  letter-spacing:-0.02em;
  color:var(--text);
}

.wrap{
  max-width:var(--maxw);
  margin:0 auto;
  padding-left:var(--edge);
  padding-right:var(--edge);
}

.eyebrow-mono{
  font-family:var(--font-mono);
  font-size:0.8rem;
  color:var(--accent);
}

#bg-canvas{
  position:fixed;
  inset:0;
  width:100%;
  height:100%;
  z-index:0;
  pointer-events:none;
  opacity:0.55;
}

.grain{
  position:fixed;
  inset:0;
  z-index:1;
  pointer-events:none;
  opacity:0.035;
  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");
}

.scanlines{
  position:fixed;
  inset:0;
  z-index:3;
  pointer-events:none;
  background:repeating-linear-gradient(
    to bottom,
    rgba(0,0,0,0.10) 0px,
    rgba(0,0,0,0.10) 1px,
    transparent 1px,
    transparent 3px
  );
  animation:scanFlicker 6s steps(2) infinite;
}
@keyframes scanFlicker{
  0%,100%{ opacity:0.6; }
  50%{ opacity:0.85; }
}

header{
  position:fixed;
  top:0; left:0; right:0;
  z-index:100;
  border-bottom:1px solid transparent;
  transition:border-color .3s ease, background-color .3s ease;
}
header.scrolled{
  background:rgba(12,13,16,0.82);
  backdrop-filter:blur(10px);
  border-bottom-color:var(--border-soft);
}
nav{
  display:flex;
  align-items:center;
  justify-content:space-between;
  padding:1.15rem var(--edge);
  max-width:var(--maxw);
  margin:0 auto;
}
.logo{
  font-family:var(--font-mono);
  font-size:0.98rem;
  color:var(--text);
  display:flex;
  align-items:center;
  gap:.5rem;
}
.logo .dot{ color:var(--accent); }

.nav-links{
  display:flex;
  align-items:center;
  gap:2.1rem;
}
.nav-links a{
  font-size:0.92rem;
  color:var(--text-muted);
  transition:color .2s ease;
  position:relative;
  padding-bottom:2px;
}
.nav-links a:hover, .nav-links a.active{ color:var(--text); }
.nav-links a.active::after{
  content:'';
  position:absolute;
  left:0; right:0; bottom:-4px;
  height:1px;
  background:var(--accent);
}
.nav-cta{
  border:1px solid var(--border);
  padding:.55rem 1.1rem;
  font-size:0.88rem;
  color:var(--text);
  transition:border-color .2s ease, background-color .2s ease;
  white-space:nowrap;
}
.nav-cta:hover{ border-color:var(--accent); background:rgba(217,164,65,0.08); }

.burger{
  display:none;
  width:34px; height:34px;
  border:none; background:none;
  position:relative;
  z-index:110;
}
.burger span{
  position:absolute; left:6px; right:6px;
  height:1px; background:var(--text);
  transition:transform .3s ease, opacity .3s ease, top .3s ease;
}
.burger span:nth-child(1){ top:12px; }
.burger span:nth-child(2){ top:17px; }
.burger span:nth-child(3){ top:22px; }
.burger.open span:nth-child(1){ top:17px; transform:rotate(45deg); }
.burger.open span:nth-child(2){ opacity:0; }
.burger.open span:nth-child(3){ top:17px; transform:rotate(-45deg); }

.mobile-menu{
  position:fixed;
  inset:0;
  background:var(--bg);
  z-index:105;
  display:flex;
  flex-direction:column;
  justify-content:center;
  gap:1.6rem;
  padding:0 var(--edge);
  transform:translateX(100%);
  transition:transform .35s cubic-bezier(.65,0,.35,1);
}
.mobile-menu.open{ transform:translateX(0); }
.mobile-menu a{
  font-family:var(--font-display);
  font-size:2.1rem;
  color:var(--text);
}
.mobile-menu .mm-note{
  font-family:var(--font-mono);
  font-size:0.8rem;
  color:var(--text-dim);
  margin-top:1rem;
}

.hero{
  position:relative;
  z-index:2;
  min-height:100svh;
  display:flex;
  flex-direction:column;
  justify-content:center;
  padding-top:6rem;
}
.hero-inner{ max-width:780px; position:relative; z-index:1; }

.hero{ overflow-anchor:none; }
.hero-boot{
  position:absolute;
  inset:0;
  z-index:-1;
  overflow:hidden;
  contain:strict;
  overflow-anchor:none;
  mask-image:linear-gradient(to bottom, transparent 0%, black 15%, black 100%);
  -webkit-mask-image:linear-gradient(to bottom, transparent 0%, black 15%, black 100%);
}
#boot-log{
  position:absolute;
  left:0; right:0; bottom:0;
  padding:0 clamp(1.5rem,6vw,5rem) 2rem;
  font-family:var(--font-mono);
  font-size:0.8rem;
  line-height:24px;
}
.boot-line{
  height:24px;
  overflow:hidden;
  white-space:pre;
  color:var(--text-dim);
}
.boot-line.ok{ color:var(--accent); opacity:.8; }
.boot-line.cmd{ color:var(--text-muted); }
.boot-line.new{ animation:bootIn .3s ease; }
@keyframes bootIn{
  from{ opacity:0; }
  to{ opacity:1; }
}
.hero-boot-overlay{
  position:absolute;
  inset:0;
  z-index:-1;
  background:
    linear-gradient(90deg, rgba(12,13,16,0.94) 0%, rgba(12,13,16,0.86) 52%, rgba(12,13,16,0.4) 100%),
    linear-gradient(0deg, var(--bg) 0%, transparent 30%);
}
@media (max-width: 860px){
  .hero-boot-overlay{ background:linear-gradient(90deg, rgba(12,13,16,0.96) 0%, rgba(12,13,16,0.7) 100%), linear-gradient(0deg, var(--bg) 0%, transparent 30%); }
}

.hero-visual{
  position:absolute;
  top:50%;
  right:clamp(1.5rem, 6vw, 6rem);
  transform:translateY(-50%);
  z-index:1;
  pointer-events:none;
}
.floating-terminal{
  width:290px;
  border:1px solid var(--border);
  background:rgba(19,21,27,0.92);
  box-shadow:0 20px 45px -25px rgba(217,164,65,0.2);
  animation:floatTerminal 7s ease-in-out infinite;
  will-change:transform;
}
@keyframes floatTerminal{
  0%,100%{ transform:translateY(0) rotate(-1.2deg); }
  50%{ transform:translateY(-16px) rotate(1deg); }
}
.ft-head{
  display:flex;
  align-items:center;
  gap:.4rem;
  padding:.65rem .8rem;
  border-bottom:1px solid var(--border-soft);
}
.ft-dot{ width:8px; height:8px; border-radius:50%; background:var(--border-soft); border:1px solid var(--border); }
.ft-title{
  margin-left:auto;
  font-family:var(--font-mono);
  font-size:0.68rem;
  color:var(--text-dim);
}
.ft-body{
  padding:1rem 1.1rem 1.3rem;
  font-family:var(--font-mono);
  font-size:0.78rem;
  line-height:2;
}
.ft-body p{ margin:0; white-space:pre; }
.ft-prompt{ color:var(--accent); margin-right:.5rem; }
.ft-out{ color:var(--text-muted); padding-left:1.2rem; }
.ft-out.ft-accent{ color:var(--accent-2); }
.ft-cursor{
  display:inline-block;
  width:7px; height:1em;
  background:var(--accent);
  vertical-align:-2px;
  animation:blink 1.1s step-end infinite;
}
@media (max-width: 960px){
  .hero-visual{ display:none; }
}

.prompt-line{
  font-family:var(--font-mono);
  font-size:0.9rem;
  color:var(--text-dim);
  margin-bottom:1.4rem;
  opacity:0;
  animation:fadeUp .7s ease forwards .1s;
}
.prompt-line .cursor{
  display:inline-block;
  width:7px; height:1.1em;
  background:var(--accent);
  margin-left:2px;
  vertical-align:-2px;
  animation:blink 1.1s step-end infinite;
}

.hero h1{
  font-size:clamp(2.6rem, 6.4vw, 4.6rem);
  line-height:1.06;
  opacity:0;
  animation:fadeUp .8s ease forwards .25s;
}
.hero h1 .accent-text{ color:var(--accent); }

.hero p.lead{
  margin-top:1.6rem;
  max-width:560px;
  font-size:1.1rem;
  color:var(--text-muted);
  opacity:0;
  animation:fadeUp .8s ease forwards .4s;
}

.hero-cta{
  margin-top:2.4rem;
  display:flex;
  gap:1rem;
  flex-wrap:wrap;
  opacity:0;
  animation:fadeUp .8s ease forwards .55s;
}

.btn{
  display:inline-flex;
  align-items:center;
  gap:.5rem;
  padding:.85rem 1.6rem;
  font-size:0.95rem;
  font-weight:500;
  border-radius:999px;
  transition:transform .2s ease, background-color .2s ease, border-color .2s ease;
}
.btn-primary{
  background:var(--accent);
  color:#161104;
}
.btn-primary:hover{ transform:translateY(-2px); background:var(--accent-2); }
.btn-ghost{
  border:1px solid var(--border);
  color:var(--text);
}
.btn-ghost:hover{ border-color:var(--accent); transform:translateY(-2px); }

.hero-stats{
  margin-top:4.5rem;
  display:flex;
  gap:clamp(1.8rem, 5vw, 3.2rem);
  flex-wrap:wrap;
  opacity:0;
  animation:fadeUp .8s ease forwards .7s;
}
.stat b{
  display:block;
  font-family:var(--font-display);
  font-size:1.9rem;
  color:var(--text);
}
.stat span{
  font-size:0.85rem;
  color:var(--text-dim);
}

@keyframes fadeUp{
  from{ opacity:0; transform:translateY(14px); }
  to{ opacity:1; transform:translateY(0); }
}
@keyframes blink{ 50%{ opacity:0; } }

.scroll-hint{
  position:absolute;
  bottom:2.2rem; left:var(--edge);
  font-family:var(--font-mono);
  font-size:0.72rem;
  color:var(--text-dim);
  display:flex;
  align-items:center;
  gap:.6rem;
}
.scroll-hint .line{
  width:28px; height:1px; background:var(--border);
  position:relative;
  overflow:hidden;
}
.scroll-hint .line::after{
  content:'';
  position:absolute; left:-100%; top:0; bottom:0; width:100%;
  background:var(--accent);
  animation:slide 1.8s ease-in-out infinite;
}
@keyframes slide{
  0%{ left:-100%; } 50%{ left:0; } 100%{ left:100%; }
}

section{
  position:relative;
  z-index:2;
  padding:var(--section-pad) 0;
  border-top:1px solid var(--border-soft);
  overflow:hidden;
}
.section-head{
  display:flex;
  justify-content:space-between;
  align-items:flex-end;
  gap:2rem;
  margin-bottom:3.2rem;
  flex-wrap:wrap;
}
.section-head h2{ font-size:clamp(1.9rem, 4vw, 2.6rem); }
.section-note{
  max-width:460px;
  color:var(--text-muted);
  font-size:0.98rem;
}

.reveal{
  opacity:0;
  transform:translateY(18px);
  transition:opacity .7s ease, transform .7s ease;
}
.reveal.in{ opacity:1; transform:translateY(0); }

section.fx-paused,
section.fx-paused *{
  animation-play-state:paused !important;
}

#about::before{
  content:'';
  position:absolute;
  top:-25%; left:-12%;
  width:55%; height:150%;
  background:radial-gradient(circle closest-side, rgba(217,164,65,0.09), transparent);
  z-index:-1;
  transform:translateY(var(--parallax, 0px));
  animation:breatheGlow 7s ease-in-out infinite;
}
@keyframes breatheGlow{
  0%,100%{ opacity:0.7; }
  50%{ opacity:1; }
}
.code-glyph{
  position:absolute;
  z-index:-1;
  font-family:var(--font-mono);
  font-weight:500;
  font-size:clamp(3.5rem, 9vw, 7rem);
  color:rgba(217,164,65,0.07);
  transform:translateY(calc(var(--parallax, 0px) * var(--depth, 1)));
  pointer-events:none;
  user-select:none;
  line-height:1;
}

.about-grid{
  display:grid;
  grid-template-columns:minmax(0,1fr) minmax(260px,340px);
  gap:clamp(2rem, 6vw, 5rem);
  align-items:start;
}
.about-text p{
  color:var(--text-muted);
  margin-bottom:1.1rem;
  max-width:64ch;
  text-align:justify;
  text-justify:inter-word;
  hyphens:auto;
}
.about-text p:first-child{ font-size:1.15rem; color:var(--text); }
.facts-card{ border:1px solid var(--border); background:rgba(19,21,27,0.82); }
.facts-head{
  display:flex; align-items:center; gap:.4rem;
  padding:.65rem .9rem;
  border-bottom:1px solid var(--border-soft);
  font-family:var(--font-mono);
  font-size:0.7rem;
  color:var(--text-dim);
}
.facts-head .ft-dot:first-child{ background:var(--accent); border-color:var(--accent); }
.facts-head span:last-child{ margin-left:auto; }
.facts-list{ padding:.4rem 0; }
.fact{ padding:.85rem 1.1rem; }
.fact + .fact{ border-top:1px solid var(--border-soft); }
.fact b{ display:block; font-family:var(--font-mono); font-weight:500; font-size:0.72rem; color:var(--accent); margin-bottom:.25rem; }
.fact span{ font-size:0.95rem; color:var(--text); overflow-wrap:anywhere; }

#skills::before{
  content:'';
  position:absolute;
  inset:-10%;
  background-image:radial-gradient(rgba(217,164,65,0.16) 1px, transparent 1px);
  background-size:28px 28px;
  z-index:-1;
  transform:translateY(var(--parallax, 0px));
  animation:panSkills 40s linear infinite;
}
@keyframes panSkills{
  from{ background-position:0 0; }
  to{ background-position:280px 140px; }
}
#skills::after{
  content:'';
  position:absolute;
  left:0; right:0;
  top:-160px;
  height:160px;
  background:linear-gradient(180deg, transparent, rgba(217,164,65,0.09), transparent);
  z-index:-1;
  animation:scanSweep 9s linear infinite;
}
@keyframes scanSweep{
  0%{ top:-160px; }
  100%{ top:100%; }
}

.skills-grid{
  display:grid;
  grid-template-columns:repeat(auto-fit, minmax(260px, 1fr));
  gap:1rem;
}
.skill-block{
  background:rgba(12,13,16,0.88);
  border:1px solid var(--border-soft);
  padding:1.7rem;
  transition:border-color .25s ease;
}
.skill-block:hover{ border-color:var(--accent-line); }
.skill-block h3{ font-size:1.05rem; margin-bottom:.5rem; display:flex; align-items:center; gap:.6rem; }
.skill-block h3::before{ content:''; width:6px; height:6px; background:var(--accent); border-radius:50%; flex-shrink:0; }
.skill-block p{ color:var(--text-muted); font-size:0.9rem; margin-bottom:1.1rem; }
.tag-list{
  display:flex;
  flex-wrap:wrap;
  gap:.5rem;
}
.tag{
  font-family:var(--font-mono);
  font-size:0.78rem;
  color:var(--text-muted);
  border:1px solid var(--border);
  padding:.35rem .7rem;
  border-radius:999px;
  transition:border-color .2s ease, color .2s ease;
}
.skill-block:hover .tag{ }
.tag:hover{ border-color:var(--accent); color:var(--text); }

#projects::before{
  content:'';
  position:absolute;
  inset:0;
  background:radial-gradient(ellipse at 50% 30%, rgba(217,164,65,0.05), transparent 60%),
             radial-gradient(ellipse at center, transparent 45%, rgba(0,0,0,0.4) 100%);
  z-index:-1;
  transform:translateY(var(--parallax, 0px));
}

.projects-grid{
  display:grid;
  grid-template-columns:1fr 1fr;
  gap:1.5rem;
}
.project-card{
  border:1px solid var(--border);
  background:var(--bg-soft);
  overflow:hidden;
  transition:border-color .25s ease;
}
.project-card:hover{
  border-color:var(--accent-line);
}
.project-thumb{
  aspect-ratio:16/10;
  background:
    repeating-linear-gradient(135deg, var(--surface) 0 2px, var(--surface-2) 2px 40px);
  background-position:0 var(--thumb-parallax, 0px);
  position:relative;
  display:flex; align-items:center; justify-content:center;
}
.project-thumb span{
  font-family:var(--font-mono);
  font-size:0.75rem;
  color:var(--text-dim);
  background:var(--bg);
  padding:.3rem .6rem;
  border:1px solid var(--border);
}
.project-body{ padding:1.5rem; }
.project-body h3{
  font-size:1.2rem;
  margin-bottom:.5rem;
}
.project-body p{
  color:var(--text-muted);
  font-size:0.92rem;
  margin-bottom:1.1rem;
}
.project-tags{
  display:flex;
  flex-wrap:wrap;
  gap:.4rem;
  margin-bottom:1.4rem;
}
.project-tags span{
  font-family:var(--font-mono);
  font-size:0.7rem;
  color:var(--text-dim);
}
.project-tags span:not(:last-child)::after{ content:'·'; margin-left:.4rem; color:var(--border); }
.project-links{
  padding-top:1.2rem;
  border-top:1px solid var(--border-soft);
}
.project-links a{
  display:inline-flex;
  align-items:center;
  padding:.55rem 1.2rem;
  font-size:0.85rem;
  color:var(--text);
  border:1px solid var(--border);
  border-radius:999px;
  transition:border-color .2s ease, background-color .2s ease;
}
.project-links a:hover{
  border-color:var(--accent);
  background:rgba(217,164,65,0.08);
}

#contact::before{
  content:'';
  position:absolute;
  right:-15%; bottom:-25%;
  width:60%; height:130%;
  background:radial-gradient(circle closest-side, rgba(217,164,65,0.13), transparent);
  z-index:-1;
  animation:pulseContact 9s ease-in-out infinite;
}
@keyframes pulseContact{
  0%,100%{ opacity:0.55; transform:translateY(var(--parallax, 0px)) scale(1); }
  50%{ opacity:1; transform:translateY(var(--parallax, 0px)) scale(1.1); }
}
.radar-ring{
  position:absolute;
  right:12%; bottom:22%;
  width:12px; height:12px;
  border:1px solid var(--accent);
  border-radius:50%;
  z-index:-1;
  opacity:0;
  animation:radarPulse 4.5s ease-out infinite;
}
@keyframes radarPulse{
  0%{ transform:scale(1); opacity:0.55; }
  100%{ transform:scale(16); opacity:0; }
}

.contact-grid{
  display:grid;
  grid-template-columns:1fr 1fr;
  gap:clamp(2.5rem, 6vw, 5rem);
}
.contact-info h2{ font-size:clamp(1.9rem, 4vw, 2.6rem); margin-bottom:1.2rem; }
.contact-info p{ color:var(--text-muted); max-width:44ch; margin-bottom:2rem; }
.contact-email{
  font-family:var(--font-mono);
  font-size:1.15rem;
  color:var(--accent);
  display:inline-block;
  margin-bottom:2.2rem;
  border-bottom:1px solid var(--accent-line);
  padding-bottom:2px;
}
.social-links{ display:flex; gap:1.2rem; }
.social-links a{
  width:42px; height:42px;
  border:1px solid var(--border);
  display:flex; align-items:center; justify-content:center;
  transition:border-color .2s ease, color .2s ease;
  color:var(--text-muted);
}
.social-links a:hover{ border-color:var(--accent); color:var(--accent); }

.form{ display:flex; flex-direction:column; gap:1.1rem; }
.field label{
  display:block;
  font-family:var(--font-mono);
  font-size:0.75rem;
  color:var(--text-dim);
  margin-bottom:.5rem;
}
.field input, .field textarea{
  width:100%;
  background:var(--bg-soft);
  border:1px solid var(--border);
  color:var(--text);
  padding:.85rem 1rem;
  font-family:var(--font-body);
  font-size:0.95rem;
  transition:border-color .2s ease;
  resize:vertical;
}
.field input:focus, .field textarea:focus{
  outline:none;
  border-color:var(--accent);
}
.form .btn-primary{ align-self:flex-start; border:none; }
.form-note{
  font-size:0.78rem;
  color:var(--text-dim);
  margin-top:.3rem;
  line-height:1.5;
}
.form-note code{
  font-family:var(--font-mono);
  color:var(--accent);
}

footer{
  position:relative; z-index:2;
  border-top:1px solid var(--border-soft);
  padding:2.2rem 0;
}
.footer-inner{
  display:flex;
  justify-content:space-between;
  align-items:center;
  flex-wrap:wrap;
  gap:1rem;
}
.footer-inner p{
  font-family:var(--font-mono);
  font-size:0.78rem;
  color:var(--text-dim);
}
.back-top{
  font-family:var(--font-mono);
  font-size:0.78rem;
  color:var(--text-muted);
  border:1px solid var(--border);
  padding:.5rem 1rem;
  transition:border-color .2s ease;
}
.back-top:hover{ border-color:var(--accent); }

@media (max-width: 860px){
  .nav-links, .nav-cta{ display:none; }
  .burger{ display:block; }
  .about-grid{ grid-template-columns:1fr; }
  .projects-grid{ grid-template-columns:1fr; }
  .contact-grid{ grid-template-columns:1fr; }
}
@media (max-width: 480px){
  .hero-stats{ gap:1.6rem; }
  .about-text p{ text-align:left; }
}

.project-thumb{ overflow:hidden; display:block; }
.project-scroll{ position:absolute; inset:0; overflow:hidden; }
.project-thumb img{ will-change:transform; display:block; width:100%; height:auto; min-height:100%; object-fit:cover; object-position:top; }
.project-scroll-hint{ position:absolute; right:.6rem; bottom:.6rem; z-index:2; font-family:var(--font-mono); font-size:.66rem; color:var(--text); background:rgba(12,13,16,.78); border:1px solid var(--border); padding:.15rem .5rem; border-radius:999px; pointer-events:none; transition:opacity .25s; }
.project-thumb.is-scrolling .project-scroll-hint{ opacity:0; }
.project-badge{
  position:absolute; top:.7rem; left:.7rem; z-index:1;
  font-family:var(--font-mono);
  font-size:0.68rem;
  color:var(--text);
  background:rgba(12,13,16,0.82);
  border:1px solid var(--border);
  padding:.2rem .55rem;
  border-radius:999px;
}
.projects-empty{
  grid-column:1 / -1;
  padding:2rem 0;
  color:var(--text-muted);
  font-family:var(--font-mono);
  font-size:0.9rem;
}
.projects-more{
  display:inline-flex;
  margin-top:2.2rem;
  font-family:var(--font-mono);
  font-size:0.85rem;
  color:var(--text-muted);
  border-bottom:1px solid var(--border);
  padding-bottom:2px;
  transition:color .2s ease, border-color .2s ease;
}
.projects-more:hover{ color:var(--accent); border-color:var(--accent); }

.project-card{ display:flex; flex-direction:column; }
.project-body{ flex:1; display:flex; flex-direction:column; }
.project-links{ margin-top:auto; }
.project-private{ display:inline-flex; align-items:center; gap:.5rem; font-family:var(--font-mono); font-size:0.78rem; color:var(--text-dim); }
.project-private::before{ content:''; width:6px; height:6px; border-radius:50%; border:1px solid var(--text-dim); }
.project-thumb.is-hidden::after{ content:''; position:absolute; inset:0; background:linear-gradient(0deg, rgba(12,13,16,0.55), rgba(12,13,16,0.15)); }
.project-thumb.is-hidden .project-badge{ z-index:2; }
.project-thumb .ph{ position:relative; z-index:1; }

.contact-email{ word-break:break-all; }
.social-links{ flex-wrap:wrap; }
.field.hp{ position:absolute; left:-9999px; width:1px; height:1px; overflow:hidden; }
.form-msg{ font-size:0.88rem; min-height:1.3em; }
.form-msg.ok{ color:var(--accent-2); }
.form-msg.err{ color:#e07a6a; }
.form .btn-primary:disabled{ opacity:.5; cursor:not-allowed; transform:none; }

[hidden]{ display:none !important; }
.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; }

.field label .opt{ color:var(--text-dim); text-transform:none; }
.form-note{ display:none; }
