/* ==========================================================================
   KHETHIWE MOYO — PORTFOLIO
   Design tokens: cream #FAF6EE / sand #E4D2AE / cinnamon #B15A2B /
   bark #5B3A22 / charcoal #241F1B — Fraunces (display) + Inter (body) +
   IBM Plex Mono (data/utility). Signature motif: concentric "growth rings".
   ========================================================================== */

:root{
  /* --- color --- */
  --cream:      #FAF6EE;
  --ivory:      #FFFDF8;
  --sand:       #E4D2AE;
  --sand-deep:  #D3B98C;
  --cinnamon:   #B15A2B;
  --cinnamon-d: #8C4520;
  --bark:       #5B3A22;
  --charcoal:   #241F1B;
  --leaf:       #746138;
  --line:       rgba(36,31,27,0.12);
  --line-light: rgba(250,246,238,0.18);

  /* --- type --- */
  --font-display: 'Fraunces', 'Iowan Old Style', serif;
  --font-body:    'Inter', -apple-system, BlinkMacSystemFont, sans-serif;
  --font-mono:    'IBM Plex Mono', ui-monospace, monospace;

  --fs-h1: clamp(2.6rem, 5.6vw + 1rem, 5.4rem);
  --fs-h2: clamp(2rem, 3.2vw + 1rem, 3.4rem);
  --fs-h3: clamp(1.25rem, 1vw + 1rem, 1.6rem);
  --fs-lede: clamp(1.05rem, 0.6vw + 0.9rem, 1.25rem);
  --fs-body: 1rem;
  --fs-small: 0.85rem;
  --fs-eyebrow: 0.78rem;

  /* --- layout --- */
  --max-w: 1240px;
  --gutter: clamp(1.25rem, 5vw, 4rem);
  --radius: 2px;
  --radius-lg: 6px;
  --ease: cubic-bezier(0.22, 1, 0.36, 1);
  --dur: 0.6s;

  --header-h: 84px;
}

/* ---------------------------------------------------------------------- */
/* Reset                                                                  */
/* ---------------------------------------------------------------------- */
*, *::before, *::after{ box-sizing: border-box; }
html{ scroll-behavior: auto; }
body{
  margin: 0;
  background: var(--cream);
  color: var(--charcoal);
  font-family: var(--font-body);
  font-size: var(--fs-body);
  line-height: 1.6;
  -webkit-font-smoothing: antialiased;
  overflow-x: hidden;
}
img, svg{ display:block; max-width:100%; }
a{ color: inherit; text-decoration: none; }
ul{ list-style: none; margin:0; padding:0; }
button{ font: inherit; background:none; border:none; cursor:pointer; color:inherit; }
input, select, textarea{ font: inherit; }
h1,h2,h3,h4,p{ margin:0; }

.skip-link{
  position:absolute; left:-999px; top:0; background:var(--charcoal); color:var(--cream);
  padding:0.9rem 1.4rem; z-index:9999; border-radius:0 0 6px 0;
}
.skip-link:focus{ left:0; }

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

.section-inner{
  max-width: var(--max-w);
  margin: 0 auto;
  padding-inline: var(--gutter);
}

.eyebrow{
  font-family: var(--font-mono);
  font-size: var(--fs-eyebrow);
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--cinnamon-d);
  margin-bottom: 1rem;
  display:block;
}
.eyebrow-light{ color: var(--sand-deep); }

.section-title{
  font-family: var(--font-display);
  font-weight: 500;
  font-size: var(--fs-h2);
  line-height: 1.08;
  letter-spacing: -0.01em;
  color: var(--bark);
  max-width: 16ch;
}
.section-title-light{ color: var(--ivory); }

.section-lede{
  font-size: var(--fs-lede);
  color: rgba(36,31,27,0.7);
  max-width: 46ch;
  margin-top: 1.1rem;
}
.section-lede-light{ color: rgba(250,246,238,0.72); }

.section-head{ margin-bottom: clamp(2.5rem, 5vw, 4.5rem); }

/* ---------------------------------------------------------------------- */
/* Motion-reduction                                                       */
/* ---------------------------------------------------------------------- */
@media (prefers-reduced-motion: reduce){
  *, *::before, *::after{
    animation-duration: 0.001ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.001ms !important;
    scroll-behavior: auto !important;
  }
}

/* ---------------------------------------------------------------------- */
/* Loader                                                                 */
/* ---------------------------------------------------------------------- */
#loader{
  position: fixed; inset: 0; z-index: 10000;
  background: var(--charcoal);
  display:flex; align-items:center; justify-content:center;
  transition: opacity 0.8s var(--ease), visibility 0.8s var(--ease);
}
#loader.is-hidden{ opacity:0; visibility:hidden; pointer-events:none; }
.loader-inner{ text-align:center; }
.loader-rings circle{
  fill:none; stroke: var(--sand-deep); stroke-width:1;
  stroke-dasharray: 600; stroke-dashoffset: 600;
  transform-origin: center;
  animation: drawRing 1.6s var(--ease) forwards;
}
.ring-1{ animation-delay: 0s; stroke: var(--cinnamon); }
.ring-2{ animation-delay: 0.12s; }
.ring-3{ animation-delay: 0.24s; }
.ring-4{ animation-delay: 0.36s; }
@keyframes drawRing{ to{ stroke-dashoffset: 0; } }
.loader-word{
  margin-top:1.4rem; font-family: var(--font-display); font-style:italic;
  color: var(--cream); letter-spacing:0.02em; font-size:1.1rem; opacity:0;
  animation: fadeUp 0.8s var(--ease) 1s forwards;
}
@keyframes fadeUp{ from{opacity:0; transform:translateY(10px);} to{opacity:1; transform:translateY(0);} }

/* ---------------------------------------------------------------------- */
/* Custom cursor (desktop only, added via JS body class)                  */
/* ---------------------------------------------------------------------- */
.cursor-dot, .cursor-outline{
  position: fixed; top:0; left:0; pointer-events:none; z-index:9998;
  border-radius:50%; transform: translate(-50%,-50%);
  opacity:0; transition: opacity 0.3s ease;
}
.cursor-dot{ width:6px; height:6px; background: var(--cinnamon); }
.cursor-outline{ width:34px; height:34px; border:1px solid rgba(177,90,43,0.5); }
body.has-cursor .cursor-dot, body.has-cursor .cursor-outline{ opacity:1; }
body.has-cursor, body.has-cursor a, body.has-cursor button{ cursor:none; }
body.cursor-hover .cursor-outline{ width:56px; height:56px; border-color: var(--cinnamon); background: rgba(177,90,43,0.08); }
body.no-fine-pointer .cursor-dot, body.no-fine-pointer .cursor-outline{ display:none; }

/* ---------------------------------------------------------------------- */
/* Scroll progress                                                        */
/* ---------------------------------------------------------------------- */
.scroll-progress{
  position: fixed; top:0; left:0; width:100%; height:3px; z-index:9997;
  background: rgba(91,58,34,0.08);
}
.scroll-progress span{
  display:block; height:100%; width:0%;
  background: linear-gradient(90deg, var(--cinnamon-d), var(--cinnamon));
}

/* ---------------------------------------------------------------------- */
/* Header                                                                 */
/* ---------------------------------------------------------------------- */
.site-header{
  position: fixed; top:0; left:0; width:100%; z-index:1000;
  height: var(--header-h);
  display:flex; align-items:center;
  transition: background 0.4s var(--ease), box-shadow 0.4s var(--ease), backdrop-filter 0.4s var(--ease);
}
.site-header.scrolled{
  background: rgba(250,246,238,0.72);
  backdrop-filter: blur(14px) saturate(140%);
  -webkit-backdrop-filter: blur(14px) saturate(140%);
  box-shadow: 0 1px 0 var(--line);
}
.header-inner{
  width:100%; max-width: var(--max-w); margin:0 auto; padding-inline: var(--gutter);
  display:flex; align-items:center; justify-content:space-between;
}
.logo{ display:flex; align-items:center; gap:0.6rem; }
.logo-mark svg{ fill:none; stroke: var(--cinnamon); stroke-width:1.4; }
.logo-text{
  font-family: var(--font-display); font-weight:500; font-size:1.05rem;
  letter-spacing:0.01em; color: var(--bark);
}

.main-nav ul{ display:flex; align-items:center; gap: clamp(1.2rem, 2vw, 2.2rem); }
.nav-link{
  position:relative; font-size:0.92rem; color: var(--charcoal); padding: 0.4rem 0;
}
.nav-link span{ position:relative; }
.nav-link span::after{
  content:''; position:absolute; left:0; bottom:-4px; width:100%; height:1px;
  background: var(--cinnamon); transform: scaleX(0); transform-origin:left;
  transition: transform 0.35s var(--ease);
}
.nav-link:hover span::after, .nav-link:focus-visible span::after{ transform: scaleX(1); }
.nav-cta{
  border:1px solid var(--bark); border-radius: 999px; padding: 0.55rem 1.2rem !important;
  color: var(--bark);
}
.nav-cta span::after{ display:none; }
.nav-cta:hover{ background: var(--bark); color: var(--cream); }

.menu-toggle{ display:none; flex-direction:column; gap:5px; padding:8px; z-index:1001; }
.menu-toggle span{ width:22px; height:1px; background: var(--charcoal); transition: transform 0.3s var(--ease), opacity 0.3s var(--ease); }

/* ---------------------------------------------------------------------- */
/* Buttons + links                                                        */
/* ---------------------------------------------------------------------- */
.btn{
  display:inline-flex; align-items:center; justify-content:center;
  padding: 1rem 1.9rem; border-radius: 999px; font-size:0.92rem; font-weight:500;
  letter-spacing:0.01em; position:relative; overflow:hidden; isolation:isolate;
  transition: transform 0.35s var(--ease), color 0.35s var(--ease), border-color 0.35s var(--ease);
}
.btn span{ position:relative; z-index:2; }
.btn-primary{
  background: var(--cinnamon); color: var(--ivory);
}
.btn-primary::before{
  content:''; position:absolute; inset:0; background: var(--cinnamon-d);
  transform: translateY(100%); transition: transform 0.4s var(--ease); z-index:1;
}
.btn-primary:hover::before, .btn-primary:focus-visible::before{ transform: translateY(0); }
.btn-ghost{
  background:transparent; color: var(--bark); border:1px solid var(--bark);
}
.btn-ghost:hover{ background: var(--bark); color: var(--cream); }
.btn-block{ width:100%; }

.text-link{
  display:inline-flex; align-items:center; gap:0.5rem; font-weight:500; color: var(--cinnamon-d);
  border-bottom: 1px solid transparent; padding-bottom:2px;
}
.text-link:hover{ border-color: var(--cinnamon-d); }
.text-link span{ transition: transform 0.3s var(--ease); }
.text-link:hover span{ transform: translateX(4px); }

/* ---------------------------------------------------------------------- */
/* Reveal-on-scroll base states (JS/GSAP toggles .is-visible)             */
/* ---------------------------------------------------------------------- */
.reveal-up{
  opacity:0; transform: translateY(28px);
}
.reveal-up.is-visible{
  animation: revealUp 0.9s var(--ease) forwards;
  animation-delay: calc(var(--d, 0) * 0.08s);
}
@keyframes revealUp{ to{ opacity:1; transform:translateY(0); } }

/* ---------------------------------------------------------------------- */
/* Decorative rings / dividers / textures                                 */
/* ---------------------------------------------------------------------- */
.ring-divider{ height: 60px; overflow:hidden; }
.ring-divider svg{ width:100%; height:100%; }
.ring-divider path{ fill: var(--cream); }
.ring-divider-dark path{ fill: var(--charcoal); }

/* grain/paper texture generated inline via SVG noise, tinted brown */
.hero-texture, .services-texture, .work-texture, .contact-texture{
  position:absolute; inset:0; pointer-events:none; z-index:0;
  opacity:0.5; mix-blend-mode: multiply;
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='200' height='200'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2' stitchTiles='stitch'/><feColorMatrix type='matrix' values='0 0 0 0 0.36  0 0 0 0 0.22  0 0 0 0 0.13  0 0 0 0.35 0'/></filter><rect width='100%25' height='100%25' filter='url(%23n)'/></svg>");
}
.work-texture, .contact-texture{ mix-blend-mode: screen; opacity:0.16; }

/* ---------------------------------------------------------------------- */
/* HERO                                                                    */
/* ---------------------------------------------------------------------- */
.hero{
  position:relative; min-height: 100svh; display:flex; align-items:center;
  padding-top: var(--header-h); overflow:hidden;
  background: radial-gradient(ellipse at 70% 20%, #F1E6D0 0%, var(--cream) 55%);
}
.hero-rings{
  position:absolute; right: -8%; top:50%; transform: translateY(-50%);
  width: min(60vw, 600px); opacity:0.9; z-index:0;
}
.hero-rings svg{ width:100%; height:auto; }
.hr{ fill:none; stroke: var(--cinnamon); }
.hr-1{ stroke-width:1.4; opacity:0.75; }
.hr-2{ stroke-width:1; opacity:0.6; stroke: var(--bark); }
.hr-3{ stroke-width:1.6; opacity:0.5; }
.hr-4{ stroke-width:0.8; opacity:0.45; stroke: var(--leaf); }
.hr-5{ stroke-width:1.2; opacity:0.35; }
.hr-6{ stroke-width:0.6; opacity:0.3; stroke: var(--bark); }

.orbit-label{
  position:absolute; font-family: var(--font-mono); font-size:0.72rem;
  letter-spacing:0.08em; text-transform:uppercase; color: var(--bark);
  background: rgba(255,253,248,0.75); backdrop-filter: blur(6px);
  padding: 0.35rem 0.7rem; border-radius:999px; border:1px solid var(--line);
  white-space:nowrap;
}
.ol-1{ top:8%; right:56%; }
.ol-2{ top:28%; right:-4%; }
.ol-3{ bottom:22%; right:60%; }
.ol-4{ bottom:6%; right:2%; }

.floating-leaf{
  position:absolute; border-radius: 0 100% 0 100%;
  background: linear-gradient(135deg, var(--leaf), var(--cinnamon-d));
  opacity:0.18; filter: blur(0.5px);
}
.leaf-1{ width:120px; height:150px; top:12%; left:6%; transform: rotate(-18deg); }
.leaf-2{ width:70px; height:90px; bottom:16%; left:16%; transform: rotate(24deg); opacity:0.14; }

.hero-inner{ position:relative; z-index:1; padding-inline: var(--gutter); max-width: var(--max-w); margin:0 auto; width:100%; }
.hero-title{
  display:block; font-family: var(--font-display); font-weight:400;
  font-size: var(--fs-h1); line-height:1.03; letter-spacing:-0.015em; color: var(--bark);
  max-width: 15ch;
}
.hero-title span{ display:block; }
.hero-title-accent{ font-style:italic; font-weight:400; color: var(--cinnamon-d); }
.hero-sub{
  margin-top: 1.8rem; max-width:44ch; font-size: var(--fs-lede);
  color: rgba(36,31,27,0.72);
}
.hero-actions{ display:flex; flex-wrap:wrap; gap:1rem; margin-top:2.4rem; }

.hero-stats{ display:flex; flex-wrap:wrap; gap: clamp(1.6rem, 4vw, 3.2rem); margin-top: 3.6rem; padding-top:2rem; border-top:1px solid var(--line); }
.stat{ display:flex; align-items:baseline; flex-wrap:wrap; gap:0.15rem; }
.stat-num, .stat-suffix{ font-family: var(--font-display); font-size:2rem; color: var(--cinnamon-d); }
.stat-label{ font-family: var(--font-mono); font-size:0.72rem; letter-spacing:0.05em; color: var(--bark); width:100%; margin-top:0.2rem; text-transform:uppercase; }

.scroll-cue{
  position:absolute; left: var(--gutter); bottom: 2rem; z-index:1;
  display:flex; flex-direction:column; align-items:center; gap:0.6rem;
  font-family: var(--font-mono); font-size:0.7rem; letter-spacing:0.1em; text-transform:uppercase;
  color: var(--bark);
}
.scroll-cue-line{ width:1px; height:34px; background: var(--bark); position:relative; overflow:hidden; }
.scroll-cue-line::after{
  content:''; position:absolute; top:-100%; left:0; width:100%; height:100%; background: var(--cinnamon);
  animation: scrollCue 2s ease-in-out infinite;
}
@keyframes scrollCue{ 50%{ top:0; } 100%{ top:100%; } }

/* ---------------------------------------------------------------------- */
/* ABOUT                                                                   */
/* ---------------------------------------------------------------------- */
.about{ padding-block: clamp(4rem, 8vw, 8rem); }
.about-grid{ display:grid; gap: clamp(3rem, 6vw, 5rem); }
.about-visual{ display:flex; flex-direction:column; align-items:center; gap:2rem; }
.portrait-frame{ position:relative; width: min(320px, 80vw); aspect-ratio: 1/1; }
.portrait-rings{ position:absolute; inset:0; }
.portrait-rings svg{ width:100%; height:100%; }
.portrait-rings circle{ fill:none; stroke: var(--sand-deep); stroke-width:1; }
.portrait-rings circle:first-child{ stroke: var(--cinnamon); stroke-width:1.4; }
.portrait-figure{
  position:absolute; inset:14%; border-radius:50%; overflow:hidden;
  background: linear-gradient(160deg, var(--sand) 0%, var(--cinnamon) 60%, var(--bark) 100%);
  display:flex; align-items:flex-end; justify-content:center;
}
.figure-svg{ width:78%; height:auto; margin-bottom:-6%; }
.figure-shape{ fill: rgba(255,253,248,0.92); }
.portrait-badge{
  position:absolute; bottom:2%; right:2%; background: var(--charcoal); color: var(--cream);
  font-family: var(--font-mono); font-size:0.7rem; letter-spacing:0.05em;
  padding:0.5rem 0.8rem; border-radius:999px;
}
.about-quote-tag{ max-width:280px; text-align:center; }
.about-quote-tag p{ font-family: var(--font-display); font-style:italic; color: var(--bark); font-size:1.05rem; }

.about-copy .section-title{ margin-bottom:1.4rem; }
.about-copy p + p{ margin-top:1.1rem; }
.about-copy > p{ color: rgba(36,31,27,0.75); max-width:56ch; }

.about-values{ margin-top:2.4rem; display:flex; flex-direction:column; gap:1.3rem; }
.about-values li{ display:flex; gap:1rem; align-items:flex-start; }
.val-mark{ width:9px; height:9px; border-radius:50%; border:1.5px solid var(--cinnamon); margin-top:6px; flex-shrink:0; }
.about-values strong{ font-family: var(--font-display); font-weight:500; color: var(--bark); font-size:1.05rem; }
.about-values p{ margin-top:0.2rem; color: rgba(36,31,27,0.68); font-size:0.94rem; }

.about-copy .text-link{ margin-top:2.2rem; }

/* ---------------------------------------------------------------------- */
/* SERVICES                                                                */
/* ---------------------------------------------------------------------- */
.services{ position:relative; padding-block: clamp(4rem, 8vw, 8rem); background: var(--sand); overflow:hidden; }
.services-grid{ display:grid; gap:1.4rem; grid-template-columns: 1fr; position:relative; z-index:1; }
.service-card{
  position:relative; background: var(--ivory); border-radius: var(--radius-lg);
  padding: 2.2rem 1.8rem; overflow:hidden;
  transition: transform 0.4s var(--ease), box-shadow 0.4s var(--ease);
  border:1px solid rgba(91,58,34,0.08);
}
.service-card:hover{ transform: translateY(-6px); box-shadow: 0 24px 48px -20px rgba(91,58,34,0.35); }
.service-ring{
  position:absolute; top:-40px; right:-40px; width:120px; height:120px; border-radius:50%;
  border:1px solid var(--sand-deep); opacity:0; transition: opacity 0.4s var(--ease), transform 0.5s var(--ease);
  transform: scale(0.7);
}
.service-card:hover .service-ring{ opacity:1; transform: scale(1); }
.service-icon{ width:36px; height:36px; fill:none; stroke: var(--cinnamon); stroke-width:1.6; stroke-linecap:round; stroke-linejoin:round; margin-bottom:1.4rem; }
.service-card h3{ font-family: var(--font-display); font-weight:500; font-size:var(--fs-h3); color: var(--bark); margin-bottom:0.6rem; }
.service-card p{ color: rgba(36,31,27,0.68); font-size:0.94rem; }

/* ---------------------------------------------------------------------- */
/* SKILLS                                                                  */
/* ---------------------------------------------------------------------- */
.skills{ padding-block: clamp(4rem, 8vw, 8rem); }
.skills-grid{ display:grid; gap: clamp(2.5rem, 5vw, 4rem); }
.skills-copy .section-title{ margin-bottom:1.2rem; }
.skills-copy p{ color: rgba(36,31,27,0.7); max-width:42ch; }

.skills-list{ display:flex; flex-direction:column; gap:0; }
.skill-row{ display:flex; align-items:center; gap:1.4rem; padding-block:1.3rem; border-top:1px solid var(--line); }
.skill-row:last-child{ border-bottom:1px solid var(--line); }
.skill-ring-mini{ position:relative; width:60px; height:60px; flex-shrink:0; }
.skill-ring-mini svg{ width:100%; height:100%; transform: rotate(-90deg); }
.skill-ring-mini .track{ fill:none; stroke: var(--line); stroke-width:3; }
.skill-ring-mini .fill{
  fill:none; stroke: var(--cinnamon); stroke-width:3; stroke-linecap:round;
  stroke-dasharray: 151; stroke-dashoffset:151; transition: stroke-dashoffset 1.4s var(--ease);
}
.skill-row.is-visible .fill{ stroke-dashoffset: calc(151 - (151 * var(--pct, 0)) / 100); }
.skill-pct{
  position:absolute; inset:0; display:flex; align-items:center; justify-content:center;
  font-family: var(--font-mono); font-size:0.72rem; color: var(--bark);
}
.skill-info h3{ font-family: var(--font-display); font-weight:500; font-size:1.05rem; color: var(--bark); }
.skill-info p{ font-size:0.88rem; color: rgba(36,31,27,0.62); margin-top:0.2rem; }

/* ---------------------------------------------------------------------- */
/* WORK / PROJECTS                                                        */
/* ---------------------------------------------------------------------- */
.work{ position:relative; padding-block: clamp(4rem, 8vw, 8rem); background: var(--charcoal); overflow:hidden; }
.projects-grid{ display:grid; gap:1.6rem; grid-template-columns:1fr; position:relative; z-index:1; }
.project-card{
  position:relative; border-radius: var(--radius-lg); overflow:hidden;
  background: rgba(250,246,238,0.03); border:1px solid rgba(250,246,238,0.1);
  transition: transform 0.5s var(--ease);
}
.project-visual{
  height:220px; position:relative;
  background: linear-gradient(135deg, var(--pc-1), var(--pc-2));
  display:flex; align-items:flex-end; padding:1.2rem;
  overflow:hidden;
}
.project-visual::before{
  content:''; position:absolute; inset:-20%;
  background-image: repeating-radial-gradient(circle at 50% 120%, transparent 0, transparent 26px, rgba(255,253,248,0.08) 27px, rgba(255,253,248,0.08) 28px);
  transition: transform 0.6s var(--ease);
}
.project-card:hover .project-visual::before{ transform: scale(1.08) rotate(3deg); }
.project-tag{
  position:relative; z-index:1; font-family: var(--font-mono); font-size:0.7rem;
  letter-spacing:0.08em; text-transform:uppercase; color: var(--ivory);
  background: rgba(36,31,27,0.35); padding:0.4rem 0.8rem; border-radius:999px;
  backdrop-filter: blur(4px);
}
.project-body{ padding: 1.8rem; }
.project-body h3{ font-family: var(--font-display); font-weight:500; font-size:1.3rem; color: var(--ivory); }
.project-body p{ margin-top:0.7rem; color: rgba(250,246,238,0.62); font-size:0.94rem; }
.project-metrics{ display:flex; gap:2rem; margin-top:1.4rem; padding-top:1.2rem; border-top:1px solid rgba(250,246,238,0.12); }
.project-metrics li{ display:flex; flex-direction:column; }
.project-metrics strong{ font-family: var(--font-display); font-size:1.3rem; color: var(--sand-deep); }
.project-metrics span{ font-family: var(--font-mono); font-size:0.68rem; text-transform:uppercase; letter-spacing:0.05em; color: rgba(250,246,238,0.5); margin-top:0.2rem; }
.project-link{
  display:inline-flex; align-items:center; gap:0.4rem; margin-top:1.4rem;
  font-family: var(--font-mono); font-size:0.72rem; letter-spacing:0.06em; text-transform:uppercase;
  color: var(--sand-deep); border-bottom:1px solid rgba(211,185,140,0.4); padding-bottom:2px;
  transition: color 0.3s ease, border-color 0.3s ease;
}
.project-link span{ transition: transform 0.3s var(--ease); }
.project-link:hover{ color: var(--ivory); border-color: var(--sand-deep); }
.project-link:hover span{ transform: translateX(4px); }

/* ---------------------------------------------------------------------- */
/* TESTIMONIALS                                                           */
/* ---------------------------------------------------------------------- */
.testimonials{ padding-block: clamp(4rem, 8vw, 8rem); }
.testimonial-track{
  display:flex; gap:1.6rem; overflow-x:auto; scroll-snap-type:x mandatory;
  padding-bottom:1.5rem; -webkit-overflow-scrolling:touch; scrollbar-width:none;
}
.testimonial-track::-webkit-scrollbar{ display:none; }
.testimonial-card{
  scroll-snap-align:start; flex: 0 0 min(420px, 88vw);
  background: var(--ivory); border:1px solid var(--line); border-radius: var(--radius-lg);
  padding: 2.4rem 2rem; position:relative;
}
.quote-ring{
  font-family: var(--font-display); font-style:italic; font-size:3.4rem; color: var(--sand-deep);
  line-height:0.5; display:block; margin-bottom:1rem;
}
.testimonial-text{ font-family: var(--font-display); font-size:1.15rem; line-height:1.5; color: var(--bark); }
.testimonial-person{ display:flex; align-items:center; gap:0.8rem; margin-top:1.6rem; }
.person-avatar{ width:38px; height:38px; border-radius:50%; background: var(--av); flex-shrink:0; }
.testimonial-person strong{ display:block; font-size:0.92rem; color: var(--bark); }
.testimonial-person span{ display:block; font-size:0.8rem; color: rgba(36,31,27,0.55); margin-top:0.1rem; }

.testimonial-dots{ display:flex; gap:0.5rem; justify-content:center; margin-top:1rem; }
.testimonial-dots button{ width:7px; height:7px; border-radius:50%; background: var(--line); transition: background 0.3s ease, transform 0.3s ease; }
.testimonial-dots button.active{ background: var(--cinnamon); transform: scale(1.3); }

/* ---------------------------------------------------------------------- */
/* CERTIFICATIONS                                                         */
/* ---------------------------------------------------------------------- */
.certifications{ padding-block: clamp(4rem, 8vw, 8rem); background: var(--sand); }
.cert-grid{ display:grid; grid-template-columns: 1fr 1fr; gap:1px; background: var(--line); border:1px solid var(--line); }
.cert-card{
  position:relative; background: var(--sand); padding: 2.2rem 1.4rem; text-align:center;
  display:flex; flex-direction:column; align-items:center; gap:0.5rem;
  transition: background 0.35s ease;
}
.cert-card:hover{ background: var(--ivory); }
.cert-card h3{ font-family: var(--font-display); font-weight:500; font-size:1rem; color: var(--bark); }
.cert-card p{ font-family: var(--font-mono); font-size:0.72rem; color: rgba(36,31,27,0.55); text-transform:uppercase; letter-spacing:0.04em; }
.cert-thumb{
  position:relative; width:100%; aspect-ratio: 4/3; border-radius:4px; overflow:hidden;
  background: linear-gradient(160deg, var(--ivory), var(--sand));
  border:1px solid rgba(91,58,34,0.12); margin-bottom:1rem;
  display:flex; align-items:center; justify-content:center;
}
.cert-thumb::before{
  content:''; position:absolute; width:44px; height:44px; border-radius:50%;
  border:1.4px solid var(--cinnamon);
}
.cert-thumb::after{
  content:''; position:absolute; width:30px; height:30px; border-radius:50%;
  border:1px solid var(--sand-deep);
}
.cert-thumb img{
  position:relative; z-index:1; width:100%; height:100%; object-fit:cover;
}

/* ---------------------------------------------------------------------- */
/* Certificate lightbox                                                    */
/* ---------------------------------------------------------------------- */
.cert-lightbox{
  position:fixed; inset:0; z-index:10001; background: rgba(36,31,27,0.86);
  backdrop-filter: blur(8px); -webkit-backdrop-filter: blur(8px);
  display:flex; align-items:center; justify-content:center; padding: var(--gutter);
}
.cert-lightbox[hidden]{ display:none; }
.cert-lightbox img{
  max-width: min(920px, 100%); max-height: 86vh; width:auto; height:auto;
  border-radius: var(--radius-lg); box-shadow: 0 30px 80px -20px rgba(0,0,0,0.6);
  background: var(--ivory);
}
.cert-lightbox-close{
  position:absolute; top:1.4rem; right:1.4rem; width:44px; height:44px; border-radius:50%;
  border:1px solid rgba(250,246,238,0.35); color: var(--cream);
  display:flex; align-items:center; justify-content:center;
  transition: background 0.3s ease, transform 0.3s ease;
}
.cert-lightbox-close:hover{ background: var(--cinnamon); transform: rotate(90deg); }
.cert-lightbox-close svg{ fill:none; stroke: currentColor; stroke-width:1.6; stroke-linecap:round; }
body.cert-lightbox-open{ overflow:hidden; }

/* ---------------------------------------------------------------------- */
/* CONTACT                                                                */
/* ---------------------------------------------------------------------- */
.contact{ position:relative; padding-block: clamp(4rem, 8vw, 8rem); background: var(--charcoal); overflow:hidden; }
.contact-grid{ display:grid; gap: clamp(3rem, 6vw, 5rem); position:relative; z-index:1; }
.contact-copy .section-lede{ margin-bottom:2.4rem; }
.contact-details{ display:flex; flex-direction:column; gap:1rem; margin-top:1rem;}
.contact-line{
  display:flex; flex-direction:column; gap:0.2rem; font-family: var(--font-display); font-size:1.15rem; color: var(--ivory);
  padding-bottom:1rem; border-bottom:1px solid rgba(250,246,238,0.12);
}
.contact-line span{ font-family: var(--font-mono); font-size:0.68rem; text-transform:uppercase; letter-spacing:0.06em; color: var(--sand-deep); }
a.contact-line:hover{ color: var(--sand-deep); }
.contact-social{ display:flex; gap:1.4rem; margin-top:2rem; }
.social-link{ font-size:0.88rem; color: rgba(250,246,238,0.65); border-bottom:1px solid transparent; padding-bottom:2px; }
.social-link:hover{ color: var(--ivory); border-color: var(--sand-deep); }

.contact-form{
  background: rgba(250,246,238,0.04); border:1px solid rgba(250,246,238,0.12);
  border-radius: var(--radius-lg); padding: clamp(1.6rem, 3vw, 2.4rem);
  display:flex; flex-direction:column; gap:1.3rem;
}
.form-row{ display:flex; flex-direction:column; gap:0.5rem; }
.form-row label{ font-family: var(--font-mono); font-size:0.72rem; text-transform:uppercase; letter-spacing:0.05em; color: var(--sand-deep); }
.form-row input, .form-row select, .form-row textarea{
  background: transparent; border:none; border-bottom:1px solid rgba(250,246,238,0.25);
  color: var(--ivory); padding:0.6rem 0.1rem; transition: border-color 0.3s ease;
  resize: vertical;
}
.form-row select option{ color: var(--charcoal); }
.form-row input:focus, .form-row select:focus, .form-row textarea:focus{ border-color: var(--cinnamon); outline:none; }
.form-row input::placeholder, .form-row textarea::placeholder{ color: rgba(250,246,238,0.35); }
.form-status{ font-size:0.85rem; color: var(--sand-deep); min-height:1.2em; }

/* ---------------------------------------------------------------------- */
/* FOOTER                                                                  */
/* ---------------------------------------------------------------------- */
.site-footer{ position:relative; background: var(--bark); color: var(--cream); padding-block: clamp(3rem, 6vw, 5rem) 2rem; overflow:hidden; }
.footer-rings{ position:absolute; left:-10%; bottom:-30%; width:420px; opacity:0.12; pointer-events:none; }
.footer-rings svg{ width:100%; height:100%; fill:none; stroke: var(--cream); stroke-width:1; }
.footer-grid{ position:relative; z-index:1; display:flex; flex-direction:column; gap:2.4rem; }
.footer-brand .logo-text{ color: var(--cream); font-size:1.2rem; }
.footer-brand p{ margin-top:0.8rem; max-width:34ch; color: rgba(250,246,238,0.62); font-size:0.92rem; }
.footer-nav{ display:flex; flex-wrap:wrap; gap: 1rem 1.6rem; }
.footer-nav a{ font-size:0.88rem; color: rgba(250,246,238,0.7); }
.footer-nav a:hover{ color: var(--cream); }
.footer-meta{ display:flex; align-items:center; justify-content:space-between; gap:1rem; padding-top:2rem; border-top:1px solid rgba(250,246,238,0.14); }
.footer-meta p{ font-size:0.8rem; color: rgba(250,246,238,0.5); }
.back-to-top{
  width:40px; height:40px; border-radius:50%; border:1px solid rgba(250,246,238,0.3);
  display:flex; align-items:center; justify-content:center; transition: transform 0.3s var(--ease), background 0.3s ease;
}
.back-to-top:hover{ background: rgba(250,246,238,0.1); transform: translateY(-4px); }

/* ---------------------------------------------------------------------- */
/* Tilt helper (3D mouse movement via JS, transform set inline)          */
/* ---------------------------------------------------------------------- */
.tilt-el, .tilt-card{ transform-style: preserve-3d; will-change: transform; }

/* ---------------------------------------------------------------------- */
/* Responsive — tablet & up                                               */
/* ---------------------------------------------------------------------- */
@media (min-width: 700px){
  .services-grid{ grid-template-columns: repeat(2, 1fr); }
  .projects-grid{ grid-template-columns: repeat(2, 1fr); }
  .cert-grid{ grid-template-columns: repeat(auto-fit, minmax(170px, 1fr)); }
  .about-grid{ grid-template-columns: 0.85fr 1.15fr; align-items:center; }
  .skills-grid{ grid-template-columns: 0.8fr 1.2fr; }
  .contact-grid{ grid-template-columns: 1fr 1fr; }
}

@media (min-width: 960px){
  .menu-toggle{ display:none; }
  .services-grid{ grid-template-columns: repeat(3, 1fr); }
  .cert-grid{ grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); }
  .mobile-break{ display:none; }
}

/* ---------------------------------------------------------------------- */
/* Mobile nav (below 960px)                                               */
/* ---------------------------------------------------------------------- */
@media (max-width: 959px){
  .menu-toggle{ display:inline-flex; }
  .main-nav{
    position: fixed; inset:0; top:0; height:100svh; width:100%;
    background: var(--cream); display:flex; align-items:center; justify-content:center;
    transform: translateX(100%); transition: transform 0.5s var(--ease);
    z-index:999;
  }
  .main-nav.is-open{ transform: translateX(0); }
  .main-nav ul{ flex-direction:column; gap:1.8rem; text-align:center; }
  .nav-link span{ font-family: var(--font-display); font-size:1.6rem; }
  .nav-cta{ margin-top:1rem; }
  body.nav-open{ overflow:hidden; }
}

.menu-toggle[aria-expanded="true"] span:nth-child(1){ transform: translateY(6px) rotate(45deg); }
.menu-toggle[aria-expanded="true"] span:nth-child(2){ opacity:0; }
.menu-toggle[aria-expanded="true"] span:nth-child(3){ transform: translateY(-6px) rotate(-45deg); }

/* Small phones — tighten hero orbit labels so they don't collide */
@media (max-width: 560px){
  .hero-rings{ opacity:0.55; right:-30%; }
  .orbit-label{ font-size:0.62rem; padding:0.25rem 0.5rem; }
}
