:root {
  --black:     #050709;
  --dark:      #0a0e16;
  --navy:      #0d1b2a;
  --navy-mid:  #112240;
  --blue-deep: #1b3a6b;
  --blue:      #1e6fff;
  --blue-glow: #3a8eff;
  --cyan:      #64cfff;
  --cyan-pale: #a8dfff;
  --gray-900:  #111827;
  --gray-800:  #1f2937;
  --gray-600:  #4b5563;
  --gray-400:  #9ca3af;
  --gray-200:  #d1d5db;
  --white:     #f0f6ff;
  --mono:      'Space Mono', monospace;
  --display:   'Syne', sans-serif;
  --body:      'Inter', sans-serif;
}

*, *::before, *::after { margin:0; padding:0; box-sizing:border-box; }

html { scroll-behavior: smooth; }

body {
  background: var(--dark);
  color: var(--white);
  font-family: var(--body);
  overflow-x: hidden;
}

@media (pointer: fine) {
  body { cursor: none; }
}

/* SKIP LINK */
.skip-link {
  position:absolute; top:-100%; left:1rem;
  padding:.75rem 1.5rem;
  background:var(--blue); color:#fff;
  font-family:var(--mono); font-size:.8rem;
  text-decoration:none; z-index:10000;
  border-radius:0 0 4px 4px;
  transition:top .2s;
}
.skip-link:focus { top:0; }

/* FOCUS STYLES */
:focus-visible {
  outline:2px solid var(--cyan);
  outline-offset:3px;
}

/* REDUCED MOTION */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration:0.01ms !important;
    animation-iteration-count:1 !important;
    transition-duration:0.01ms !important;
  }
  .reveal { opacity:1; transform:none; }
  .hero-tag, .hero-name, .hero-subtitle, .hero-cta, .hero-image-wrapper { opacity:1; animation:none; }
  .badge-dot { animation:none; opacity:1; }
  .hero-scroll-hint { animation:none; opacity:.6; }
}

/* CURSOR */
.cursor-dot {
  position: fixed; top:0; left:0; width:8px; height:8px;
  background: var(--cyan); border-radius:50%;
  pointer-events:none; z-index:9999;
  transform: translate(-50%,-50%);
  transition: transform .1s;
}
.cursor-ring {
  position: fixed; top:0; left:0; width:36px; height:36px;
  border: 1.5px solid var(--blue-glow); border-radius:50%;
  pointer-events:none; z-index:9998;
  transform: translate(-50%,-50%);
  transition: transform .18s ease, width .2s, height .2s, border-color .2s;
  opacity:.7;
}
body:hover .cursor-ring { opacity:1; }

/* NOISE OVERLAY */
body::before {
  content:'';
  position:fixed; inset:0; z-index:0;
  background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='0.035'/%3E%3C/svg%3E");
  pointer-events:none;
  opacity:.4;
}

section { position:relative; z-index:1; }

/* SCROLLBAR */
::-webkit-scrollbar { width:4px; }
::-webkit-scrollbar-track { background:var(--dark); }
::-webkit-scrollbar-thumb { background:var(--blue); border-radius:2px; }

/* NAVBAR */
nav {
  position: fixed; top:0; left:0; right:0; z-index:100;
  display:flex; justify-content:space-between; align-items:center;
  padding: 1.25rem 4rem;
  background: linear-gradient(to bottom, rgba(10,14,22,.95) 70%, transparent);
  backdrop-filter: blur(12px);
}
.nav-logo {
  font-family: var(--mono);
  font-size:.85rem;
  color: var(--cyan);
  letter-spacing:.1em;
  text-transform:uppercase;
}
.nav-logo span { color: var(--gray-400); }
.nav-links { display:flex; gap:2.5rem; list-style:none; }
.nav-links a {
  font-family: var(--mono);
  font-size:.75rem;
  letter-spacing:.12em;
  text-transform:uppercase;
  color: var(--gray-400);
  text-decoration:none;
  transition: color .25s;
  position:relative;
}
.nav-links a::after {
  content:''; position:absolute; bottom:-3px; left:0; right:0;
  height:1px; background:var(--cyan);
  transform:scaleX(0); transition:transform .25s;
}
.nav-links a:hover { color:var(--cyan); }
.nav-links a:hover::after { transform:scaleX(1); }

/* HAMBURGER */
.nav-toggle {
  display:none;
  flex-direction:column; gap:5px;
  background:none; border:none; cursor:pointer;
  padding:6px; z-index:110;
}
.hamburger-line {
  display:block; width:22px; height:2px;
  background:var(--cyan); border-radius:1px;
  transition:transform .3s, opacity .3s;
}
.nav-toggle[aria-expanded="true"] .hamburger-line:nth-child(1) {
  transform:translateY(7px) rotate(45deg);
}
.nav-toggle[aria-expanded="true"] .hamburger-line:nth-child(2) {
  opacity:0;
}
.nav-toggle[aria-expanded="true"] .hamburger-line:nth-child(3) {
  transform:translateY(-7px) rotate(-45deg);
}

/* SECTIONS */
section { position:relative; z-index:1; }

/* ========== HERO ========== */
#hero {
  min-height:100vh;
  display:flex; align-items:center;
  padding: 0 clamp(2rem, 8vw, 10rem);
  background:
    radial-gradient(ellipse 60% 60% at 70% 50%, rgba(30,111,255,.07) 0%, transparent 70%),
    radial-gradient(ellipse 40% 40% at 10% 80%, rgba(100,207,255,.05) 0%, transparent 60%),
    var(--dark);
}

.hero-grid-bg {
  position:absolute; inset:0;
  background-image:
    linear-gradient(rgba(30,111,255,.06) 1px, transparent 1px),
    linear-gradient(90deg, rgba(30,111,255,.06) 1px, transparent 1px);
  background-size: 60px 60px;
  mask-image: radial-gradient(ellipse 80% 80% at 50% 50%, black 30%, transparent 100%);
}

/* Layout de dos columnas dentro del hero */
.hero-layout {
  position:relative; z-index:1;
  width:100%; max-width:1200px;
  margin:0 auto;
  display:grid;
  grid-template-columns: 1fr auto;
  align-items:center;
  gap:5rem;
}

.hero-content { max-width:620px; }

/* ---- Imagen del hero ---- */
.hero-image-wrapper {
  position:relative;
  z-index:1;
  width:300px;
  flex-shrink:0;
  padding:2px;
  border-radius:18px;
  background:linear-gradient(135deg, var(--blue), var(--cyan), var(--blue-glow), var(--blue));
  background-size:300% 300%;
  animation: gradientShift 6s ease infinite;
  box-shadow:
    0 0 30px rgba(30,111,255,.2),
    0 0 60px rgba(100,207,255,.08);
}

/* Esquinas decorativas */
.img-corner {
  position:absolute; width:18px; height:18px; z-index:2;
}
.img-corner--tl { top:-8px;  left:-8px;  border-top:2px solid var(--cyan); border-left:2px solid var(--cyan); border-radius:4px 0 0 0; }
.img-corner--tr { top:-8px;  right:-8px; border-top:2px solid var(--cyan); border-right:2px solid var(--cyan); border-radius:0 4px 0 0; }
.img-corner--bl { bottom:-8px; left:-8px;  border-bottom:2px solid var(--cyan); border-left:2px solid var(--cyan); border-radius:0 0 0 4px; }
.img-corner--br { bottom:-8px; right:-8px; border-bottom:2px solid var(--cyan); border-right:2px solid var(--cyan); border-radius:0 0 4px 0; }

/* Barra de acento superior */
.img-accent-bar {
  position:absolute; top:-2px; left:18px; right:18px; height:2px; z-index:2;
  background:linear-gradient(to right, transparent, var(--blue-glow), var(--cyan), var(--blue-glow), transparent);
  border-radius:1px;
}

/* Marco contenedor de la foto */
.hero-image-frame {
  width:100%;
  aspect-ratio: 3 / 4;
  overflow:hidden;
  border-radius:16px;
  position:relative;
  background: var(--navy);
  box-shadow:
    inset 0 0 30px rgba(10,14,22,.5);
}
.hero-image-frame::after {
  content:'';
  position:absolute; inset:0;
  border-radius:16px;
  border:1px solid rgba(100,207,255,.15);
  box-shadow:
    inset 0 1px 0 rgba(255,255,255,.1),
    inset 0 -1px 0 rgba(0,0,0,.4);
  z-index:2;
  pointer-events:none;
}
@keyframes gradientShift {
  0%   { background-position:0% 50%; }
  50%  { background-position:100% 50%; }
  100% { background-position:0% 50%; }
}

/* Foto real — se activa al reemplazar el placeholder */
.hero-photo {
  width:100%; height:100%;
  object-fit:cover;
  object-position: center top;
  display:block;
  filter: brightness(.9) contrast(1.05) saturate(.85);
  transition: filter .4s;
}
.hero-image-frame:hover .hero-photo {
  filter: brightness(1) contrast(1.05) saturate(.95);
}

/* Placeholder visible mientras no hay foto */
.hero-image-placeholder {
  width:100%; height:100%;
  display:flex; flex-direction:column;
  align-items:center; justify-content:center;
  gap:1.2rem;
  background:
    repeating-linear-gradient(
      45deg,
      rgba(30,111,255,.03) 0px,
      rgba(30,111,255,.03) 1px,
      transparent 1px,
      transparent 12px
    ),
    var(--navy);
  color:var(--gray-600);
}
.hero-image-placeholder svg { width:60px; height:60px; opacity:.45; }
.hero-image-placeholder span {
  font-family:var(--mono); font-size:.65rem;
  letter-spacing:.18em; text-transform:uppercase;
  color:var(--gray-600);
}

/* Degradado inferior que suaviza el corte con el fondo */
.hero-image-overlay {
  position:absolute; bottom:0; left:0; right:0; height:35%;
  background:linear-gradient(to top, var(--dark) 0%, transparent 100%);
  pointer-events:none;
}

/* Etiqueta flotante "Open to work" */
.hero-image-badge {
  position:absolute; bottom:-1.1rem; left:50%; transform:translateX(-50%);
  display:inline-flex; align-items:center; gap:.55rem;
  padding:.45rem 1.1rem;
  background:rgba(10,14,22,.95);
  border:1px solid rgba(100,207,255,.3);
  border-radius:20px;
  font-family:var(--mono); font-size:.65rem;
  color:var(--cyan-pale); letter-spacing:.12em; text-transform:uppercase;
  white-space:nowrap;
  box-shadow:0 4px 20px rgba(0,0,0,.4), 0 0 12px rgba(100,207,255,.08);
  z-index:3;
  backdrop-filter:blur(8px);
}
.badge-dot {
  width:6px; height:6px; border-radius:50%;
  background:var(--cyan);
  box-shadow:0 0 6px var(--cyan);
  animation: pulse 2s infinite;
}

.hero-tag {
  display:inline-flex; align-items:center; gap:.6rem;
  font-family:var(--mono); font-size:.75rem;
  color:var(--cyan); letter-spacing:.15em; text-transform:uppercase;
  margin-bottom:1.8rem;
  opacity:0; animation: fadeUp .6s .2s ease forwards;
}
.hero-tag::before {
  content:''; width:40px; height:1px; background:var(--cyan);
}

.hero-name {
  font-family: var(--display);
  font-size: clamp(2rem, 7vw, 6.5rem);
  font-weight:800;
  line-height:.95;
  letter-spacing:-.02em;
  margin-bottom:1rem;
  opacity:0; animation: fadeUp .7s .35s ease forwards;
}
.hero-name .line1 { display:block; color: var(--white); }
.hero-name .line2 {
  display:block;
  background: linear-gradient(135deg, var(--blue-glow), var(--cyan));
  -webkit-background-clip: text;
  -webkit-text-fill-color: transparent;
  background-clip: text;
}

.hero-subtitle {
  font-size:1.05rem; font-weight:300;
  color:var(--gray-400); line-height:1.7;
  max-width:560px; margin-bottom:2.8rem;
  opacity:0; animation: fadeUp .7s .5s ease forwards;
}
.hero-subtitle strong { color:var(--cyan-pale); font-weight:500; }

.hero-cta {
  display:flex; gap:1.2rem; flex-wrap:wrap;
  opacity:0; animation: fadeUp .7s .65s ease forwards;
}
.btn-primary {
  display:inline-flex; align-items:center; gap:.6rem;
  padding:.85rem 2rem;
  background: linear-gradient(135deg, var(--blue), var(--blue-glow));
  color:#fff; border:none;
  font-family:var(--mono); font-size:.8rem; font-weight:700;
  letter-spacing:.1em; text-transform:uppercase;
  text-decoration:none; border-radius:2px;
  position:relative; overflow:hidden;
  transition: box-shadow .3s, transform .2s;
}
@media (pointer: fine) { .btn-primary { cursor:none; } }
.btn-primary::before {
  content:''; position:absolute; inset:0;
  background: linear-gradient(135deg, var(--cyan), var(--blue));
  opacity:0; transition:opacity .3s;
}
.btn-primary:hover { box-shadow: 0 0 30px rgba(58,142,255,.5); transform:translateY(-2px); }
.btn-primary:hover::before { opacity:1; }
.btn-primary span { position:relative; }

.btn-outline {
  display:inline-flex; align-items:center; gap:.6rem;
  padding:.85rem 2rem;
  background:transparent;
  border:1px solid var(--blue-deep);
  color:var(--cyan-pale);
  font-family:var(--mono); font-size:.8rem; font-weight:700;
  letter-spacing:.1em; text-transform:uppercase;
  text-decoration:none; border-radius:2px;
  transition: border-color .3s, color .3s, box-shadow .3s;
}
@media (pointer: fine) { .btn-outline { cursor:none; } }
.btn-outline:hover {
  border-color:var(--cyan);
  color:var(--cyan);
  box-shadow: 0 0 20px rgba(100,207,255,.15);
}

.hero-scroll-hint {
  position:absolute; bottom:2.5rem; left:50%; transform:translateX(-50%);
  display:flex; flex-direction:column; align-items:center; gap:.5rem;
  font-family:var(--mono); font-size:.65rem; color:var(--gray-600);
  letter-spacing:.15em; text-transform:uppercase;
  animation: pulse 2s infinite;
}
.scroll-line {
  width:1px; height:40px;
  background: linear-gradient(to bottom, var(--cyan), transparent);
}

/* ========== ABOUT ========== */
#about {
  padding: 9rem clamp(2rem, 8vw, 10rem);
  background:
    radial-gradient(ellipse 50% 70% at 5% 50%, rgba(17,34,64,.5) 0%, transparent 70%),
    var(--dark);
}
.section-header {
  display:flex; align-items:center; gap:1.5rem;
  margin-bottom:4rem;
}
.section-num {
  font-family:var(--mono); font-size:.75rem;
  color:var(--cyan); letter-spacing:.15em;
}
.section-title {
  font-family:var(--display);
  font-size:clamp(1.8rem, 4vw, 2.8rem);
  font-weight:700; letter-spacing:-.02em;
}
.section-line { flex:1; height:1px; background:linear-gradient(to right, var(--blue-deep), transparent); }

.about-grid {
  display:grid; grid-template-columns:1fr 1fr;
  gap:5rem; align-items:start;
}
.about-text p {
  color:var(--gray-400); line-height:1.85; margin-bottom:1.2rem;
  font-size:.97rem;
}
.about-text p strong { color:var(--cyan-pale); }

.about-traits {
  display:flex; flex-wrap:wrap; gap:.7rem; margin-top:2rem;
}
.trait-tag {
  padding:.4rem 1rem;
  border:1px solid var(--blue-deep);
  border-radius:2px;
  font-family:var(--mono); font-size:.7rem;
  color:var(--gray-400); letter-spacing:.08em;
  transition:all .25s;
}
.trait-tag:hover { border-color:var(--cyan); color:var(--cyan); }

.about-stats {
  display:grid; grid-template-columns:1fr 1fr; gap:1.5rem;
}
.stat-card {
  background: linear-gradient(135deg, rgba(17,34,64,.7), rgba(10,14,22,.5));
  border:1px solid rgba(30,111,255,.15);
  border-radius:4px; padding:1.8rem;
  position:relative; overflow:hidden;
  transition: border-color .3s, transform .2s;
}
.stat-card::before {
  content:''; position:absolute; top:0; left:0; right:0;
  height:2px; background:linear-gradient(to right, var(--blue), var(--cyan));
  opacity:0; transition:opacity .3s;
}
.stat-card:hover { border-color:rgba(30,111,255,.4); transform:translateY(-3px); }
.stat-card:hover::before { opacity:1; }
.stat-num {
  font-family:var(--display);
  font-size:2.5rem; font-weight:800;
  background: linear-gradient(135deg, var(--white), var(--cyan));
  -webkit-background-clip:text; -webkit-text-fill-color:transparent;
  background-clip:text;
  display:block; margin-bottom:.3rem;
}
.stat-label {
  font-family:var(--mono); font-size:.7rem;
  color:var(--gray-400); letter-spacing:.1em; text-transform:uppercase;
}
.about-interests {
  grid-column:1/-1; margin-top:1rem;
  display:flex; gap:1.5rem; flex-wrap:wrap;
}
.interest-item {
  display:flex; align-items:center; gap:.7rem;
  padding:.7rem 1.2rem;
  background:rgba(17,34,64,.5); border:1px solid rgba(30,111,255,.1);
  border-radius:2px; font-size:.85rem; color:var(--gray-400);
}
.interest-icon { display:inline-flex; align-items:center; }

/* ========== SKILLS ========== */
#skills {
  padding: 9rem clamp(2rem, 8vw, 10rem);
  background:
    linear-gradient(to bottom, var(--dark), var(--navy) 50%, var(--dark)),
    radial-gradient(ellipse 60% 60% at 80% 20%, rgba(30,111,255,.06) 0%, transparent 70%);
}
.skills-grid {
  display:grid; grid-template-columns:repeat(3, 1fr);
  gap:2rem;
}
.skill-group {
  background: rgba(11,17,28,.8);
  border:1px solid rgba(30,111,255,.12);
  border-radius:4px; padding:2rem;
  transition:border-color .3s, transform .2s;
}
.skill-group:hover { border-color:rgba(100,207,255,.3); transform:translateY(-4px); }
.skill-group-icon {
  margin-bottom:.8rem; display:block;
  line-height:0;
}
.skill-group-icon svg { display:block; }
.skill-group-title {
  font-family:var(--display); font-size:1.1rem; font-weight:700;
  margin-bottom:.3rem; color:var(--white);
}
.skill-group-sub {
  font-family:var(--mono); font-size:.65rem;
  color:var(--cyan); letter-spacing:.1em; margin-bottom:1.5rem;
}
.skill-tags { display:flex; flex-wrap:wrap; gap:.5rem; }
.skill-tag {
  padding:.32rem .75rem;
  background:rgba(30,111,255,.1);
  border:1px solid rgba(30,111,255,.2);
  border-radius:2px;
  font-family:var(--mono); font-size:.68rem;
  color:var(--cyan-pale); letter-spacing:.05em;
  transition:all .2s;
}
.skill-tag:hover { background:rgba(30,111,255,.25); border-color:var(--cyan); }
.skill-tag.highlight {
  background:linear-gradient(135deg, rgba(30,111,255,.25), rgba(100,207,255,.15));
  border-color:rgba(100,207,255,.4);
  color:var(--cyan);
}

/* ========== PROJECTS ========== */
#projects {
  padding: 9rem clamp(2rem, 8vw, 10rem);
  background:
    radial-gradient(ellipse 50% 60% at 20% 80%, rgba(17,34,64,.4) 0%, transparent 70%),
    var(--dark);
}
.projects-grid { display:grid; gap:2rem; }
.project-card {
  display:grid; grid-template-columns:1fr auto;
  gap:2rem; align-items:start;
  background:linear-gradient(135deg, rgba(13,27,42,.9), rgba(10,14,22,.7));
  border:1px solid rgba(30,111,255,.12);
  border-radius:4px; padding:2.5rem;
  position:relative; overflow:hidden;
  transition:border-color .3s, transform .25s, box-shadow .3s;
}
@media (pointer: fine) { .project-card { cursor:none; } }
.project-card::after {
  content:''; position:absolute; top:0; left:0;
  width:3px; height:100%;
  background:linear-gradient(to bottom, var(--blue), var(--cyan));
  opacity:0; transition:opacity .3s;
}
.project-card:hover {
  border-color:rgba(100,207,255,.3);
  transform:translateX(6px);
  box-shadow:-4px 0 30px rgba(30,111,255,.1);
}
.project-card:hover::after { opacity:1; }
.project-card.featured {
  grid-template-columns:1fr;
  border-color:rgba(30,111,255,.25);
}
.project-card.featured::after { opacity:.6; }
.project-featured-tag {
  display:inline-block;
  font-family:var(--mono); font-size:.65rem;
  color:var(--cyan); letter-spacing:.15em; text-transform:uppercase;
  margin-bottom:1rem;
}
.project-title {
  font-family:var(--display); font-size:1.4rem;
  font-weight:700; margin-bottom:.8rem;
  color:var(--white);
}
.project-desc {
  font-size:.9rem; color:var(--gray-400);
  line-height:1.75; max-width:600px;
}
.project-tags { display:flex; flex-wrap:wrap; gap:.5rem; margin-top:1.5rem; }
.project-tech {
  padding:.3rem .7rem;
  background:rgba(30,111,255,.1); border:1px solid rgba(30,111,255,.2);
  border-radius:2px;
  font-family:var(--mono); font-size:.65rem;
  color:var(--cyan-pale);
}
.project-links {
  display:flex; flex-direction:column; gap:.8rem; align-items:flex-end;
}
.project-link {
  display:flex; align-items:center; gap:.5rem;
  font-family:var(--mono); font-size:.7rem;
  color:var(--gray-400); text-decoration:none;
  letter-spacing:.08em; text-transform:uppercase;
  transition:color .2s;
}
.project-link:hover { color:var(--cyan); }
.project-link svg { width:14px; height:14px; stroke:currentColor; fill:none; }
.projects-note {
  margin-top:3rem; text-align:center;
  font-family:var(--mono); font-size:.75rem;
  color:var(--gray-600); letter-spacing:.1em;
}
.projects-note a { color:var(--blue-glow); text-decoration:none; }
.projects-note a:hover { color:var(--cyan); }

/* ========== CONTACT ========== */
#contact {
  padding: 9rem clamp(2rem, 8vw, 10rem);
  background:
    radial-gradient(ellipse 70% 60% at 50% 100%, rgba(13,27,42,.7) 0%, transparent 70%),
    var(--dark);
}
.contact-inner {
  max-width:700px; margin:0 auto; text-align:center;
}
.contact-lead {
  font-family:var(--display); font-size:clamp(2rem, 5vw, 3.5rem);
  font-weight:800; letter-spacing:-.02em;
  margin-bottom:1.2rem; line-height:1.1;
}
.contact-lead span {
  background:linear-gradient(135deg, var(--blue-glow), var(--cyan));
  -webkit-background-clip:text; -webkit-text-fill-color:transparent;
  background-clip:text;
}
.contact-sub {
  color:var(--gray-400); font-size:.97rem;
  line-height:1.75; margin-bottom:3rem;
}
.contact-links {
  display:flex; justify-content:center; gap:1.5rem; flex-wrap:wrap;
}
.contact-item {
  display:flex; align-items:center; gap:.8rem;
  padding:1rem 1.8rem;
  background:rgba(13,27,42,.8);
  border:1px solid rgba(30,111,255,.2);
  border-radius:4px; text-decoration:none;
  color:var(--gray-400); font-family:var(--mono);
  font-size:.78rem; letter-spacing:.08em;
  transition:all .3s;
}
.contact-item:hover {
  border-color:var(--cyan); color:var(--cyan);
  box-shadow:0 0 20px rgba(100,207,255,.1);
  transform:translateY(-3px);
}
.contact-icon { display:inline-flex; align-items:center; }

/* ========== FOOTER ========== */
footer {
  position:relative; z-index:1;
  padding:2rem clamp(2rem, 8vw, 10rem);
  border-top:1px solid rgba(30,111,255,.08);
  display:flex; justify-content:space-between; align-items:center;
}
.footer-copy {
  font-family:var(--mono); font-size:.68rem;
  color:var(--gray-600); letter-spacing:.1em;
}
.footer-built {
  font-family:var(--mono); font-size:.68rem;
  color:var(--gray-600); letter-spacing:.08em;
}
.footer-built span { color:var(--cyan); }

/* ========== ANIMATIONS ========== */
@keyframes fadeUp {
  from { opacity:0; transform:translateY(24px); }
  to   { opacity:1; transform:translateY(0); }
}
@keyframes pulse {
  0%,100% { opacity:.4; } 50% { opacity:1; }
}

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

/* ========== RESPONSIVE ========== */
@media (max-width:900px) {
  nav { padding:1.2rem 2rem; }
  .nav-links { gap:1.5rem; }
  #hero { padding-top:5rem; padding-bottom:2rem; min-height:auto; align-items:start; }
  .hero-layout { grid-template-columns:1fr; gap:3rem; }
  .hero-image-wrapper { width:220px; margin:0 auto; order:-1; }
  .about-grid { grid-template-columns:1fr; gap:3rem; }
  .skills-grid { grid-template-columns:1fr 1fr; }
  .project-card { grid-template-columns:1fr; }
  .project-links { flex-direction:row; align-items:flex-start; }
  footer { flex-direction:column; gap:.8rem; text-align:center; }
}
@media (max-width:600px) {
  nav { padding:1rem 1.5rem; }
  .nav-toggle { display:flex; }
  .nav-links {
    display:none;
    position:absolute; top:100%; left:0; right:0;
    flex-direction:column;
    background:rgba(10,14,22,.98);
    backdrop-filter:blur(12px);
    padding:1.5rem;
    gap:1.2rem;
    border-top:1px solid rgba(30,111,255,.15);
  }
  .nav-links.open { display:flex; }
  #hero { padding-top:5.5rem; }
  .hero-image-wrapper { width:180px; }
  .skills-grid { grid-template-columns:1fr; }
  .about-stats { grid-template-columns:1fr; }
  .project-card { padding:1.5rem; }
  .project-card.featured { padding:1.5rem; }
  .project-desc { text-align:justify; padding-right:.3rem; }
  .stat-card { padding:1.2rem; }
  .stat-num { font-size:2rem; }
  .project-links { flex-direction:column; gap:.6rem; }
}
