/* ===========================================================
   PLANTUM — custom styles (complements Tailwind)
   =========================================================== */

:root {
  --forest-950: #082a1b;
  --forest-900: #12442c;
  --forest-700: #1a6e41;
  --forest-500: #2fa362;
  --forest-300: #8bd5a8;
  --gold-400: #e9ad2a;
  --gold-300: #edc14e;
  --gold-500: #d4900f;
}

html { -webkit-tap-highlight-color: transparent; }
body {
  overflow-x: hidden;
  /* Richer sky -> meadow gradient with deeper, more saturated bands (was reading pale/washed out) */
  background:
    radial-gradient(120% 70% at 85% -10%, rgba(255, 226, 150, .45), transparent 55%),
    radial-gradient(90% 60% at 8% 0%, rgba(140, 220, 255, .5), transparent 60%),
    linear-gradient(180deg,
      #bfe3ff 0%,
      #cdeeff 8%,
      #d9f5ea 18%,
      #d3f2e2 34%,
      #dff6ea 52%,
      #e9f8ee 70%,
      #d8f0e2 88%,
      #cdead9 100%);
  background-attachment: scroll;
}
/* Faint film-grain texture across the whole page for depth (kills the flat/pale look).
   Real fractal noise (feTurbulence) instead of a dot grid — reads as organic grain, not a pattern. */
body::before {
  content: "";
  position: fixed;
  inset: 0;
  z-index: 0;
  pointer-events: none;
  /* no mix-blend-mode: blending a fixed full-viewport layer forces the browser
     to re-composite the whole page on every scroll frame — visibly laggy on
     large/ultrawide screens. Plain low opacity looks the same and is cheap. */
  opacity: .06;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='180' height='180'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='180' height='180' filter='url(%23n)'/%3E%3C/svg%3E");
  background-size: 180px 180px;
}
/* ultrawide (3440/5120px): drop the grain layer entirely and promote the big
   parallax layers — keeps scrolling at full frame rate */
@media (min-width: 2800px) {
  body::before { display: none; }
}
.hills, #globe-wrap, .marquee__track { will-change: transform; }

/* Tailwind Play CDN exposes weights as font-700 etc. via arbitrary values;
   make sure the named utilities below also exist. */
.font-700 { font-weight: 700; }
.font-600 { font-weight: 600; }

/* ---------- Typography helpers ---------- */
/* "Classic Elegant" pairing (UI/UX Pro Max): Playfair Display headlines for a
   premium, exclusive, editorial feel — Space Grotesk for labels, Inter for body. */
.font-serif,
h1.font-display,
h2.font-display {
  font-family: 'Playfair Display', Georgia, 'Times New Roman', serif;
  letter-spacing: -0.01em;
}

/* Accessibility: visible keyboard focus on all interactive elements */
a:focus-visible,
button:focus-visible,
input:focus-visible,
[tabindex]:focus-visible {
  outline: 3px solid rgba(47, 163, 98, .6);
  outline-offset: 3px;
  border-radius: 8px;
}

.text-gradient {
  background: linear-gradient(95deg, #1f8a4f, #2fa362, #d4900f, #2fa362, #1f8a4f);
  background-size: 220% auto;
  -webkit-background-clip: text;
  background-clip: text;
  color: transparent;
  animation: gradientshift 7s ease-in-out infinite;
}
@keyframes gradientshift {
  0%, 100% { background-position: 0% center; }
  50%      { background-position: 100% center; }
}

/* Keep brand tokens on one line, and guarantee a gap on both sides even after
   machine translation collapses the surrounding spaces (e.g. "PLANTUM LABSpostoji"). */
.notranslate { white-space: nowrap; margin-inline: 0.16em; }

.eyebrow {
  display: inline-flex;
  align-items: center;
  gap: .55rem;
  font-family: "Space Grotesk", Inter, sans-serif;
  font-size: .8rem;
  font-weight: 600;
  letter-spacing: .18em;
  text-transform: uppercase;
  color: var(--forest-700);
  padding: .4rem .85rem;
  border-radius: 999px;
  background: rgba(47, 163, 98, .10);
  border: 1px solid rgba(47, 163, 98, .18);
}
.eyebrow--light {
  color: #bdf0d2;
  background: rgba(255, 255, 255, .06);
  border-color: rgba(255, 255, 255, .14);
}

/* ---------- Navbar ---------- */
#navbar.scrolled {
  background: rgba(246, 253, 249, .82);
  backdrop-filter: saturate(160%) blur(14px);
  -webkit-backdrop-filter: saturate(160%) blur(14px);
  box-shadow: 0 8px 30px -18px rgba(16, 68, 44, .35);
  border-bottom: 1px solid rgba(47, 163, 98, .12);
}

.nav-link {
  position: relative;
  font-size: .95rem;
  font-weight: 500;
  color: #1c4d36;
  transition: color .2s ease;
}
.nav-link::after {
  content: "";
  position: absolute;
  left: 0; bottom: -6px;
  height: 2px; width: 0;
  background: linear-gradient(90deg, var(--forest-500), var(--gold-400));
  transition: width .25s ease;
}
.nav-link:hover { color: var(--forest-700); }
.nav-link:hover::after { width: 100%; }
/* scroll-spy: link of the section currently in view stays highlighted */
.nav-link.is-active { color: var(--forest-700); font-weight: 600; }
.nav-link.is-active::after { width: 100%; }

.mobile-link {
  padding: .85rem .4rem;
  font-size: 1.05rem;
  font-weight: 600;
  color: #173f2c;
  border-bottom: 1px solid rgba(47, 163, 98, .08);
}

/* ---------- Buttons ---------- */
.btn-primary {
  position: relative;
  overflow: hidden;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: .5rem;
  padding: .8rem 1.6rem;
  border-radius: 999px;
  font-weight: 600;
  font-size: .98rem;
  color: #fff;
  background: linear-gradient(120deg, #1f8a4f, #2fa362 55%, #1a6e41);
  box-shadow: 0 12px 30px -12px rgba(31, 138, 79, .65);
  transition: transform .2s ease, box-shadow .2s ease, filter .2s ease;
}
/* Light sweep across the button on hover */
.btn-primary::before {
  content: "";
  position: absolute;
  top: 0;
  left: -120%;
  width: 70%;
  height: 100%;
  background: linear-gradient(100deg, transparent, rgba(255, 255, 255, .35), transparent);
  transform: skewX(-18deg);
  transition: left .6s ease;
}
.btn-primary:hover::before { left: 130%; }
/* Magnetic hover: JS feeds --mag-x/--mag-y so the button subtly follows the cursor */
.btn-primary { transform: translate3d(var(--mag-x, 0px), var(--mag-y, 0px), 0); }
.btn-primary:hover {
  transform: translate3d(var(--mag-x, 0px), calc(var(--mag-y, 0px) - 2px), 0);
  box-shadow: 0 18px 36px -12px rgba(31, 138, 79, .7), 0 0 0 1.5px rgba(233, 173, 42, .55);
  filter: brightness(1.05);
}
.btn-primary:active { transform: translate3d(var(--mag-x, 0px), var(--mag-y, 0px), 0); }

.btn-ghost {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: .5rem;
  padding: .8rem 1.6rem;
  border-radius: 999px;
  font-weight: 600;
  font-size: .98rem;
  color: var(--forest-800, #185737);
  background: rgba(255, 255, 255, .7);
  border: 1px solid rgba(47, 163, 98, .28);
  transition: transform .2s ease, border-color .2s ease, background .2s ease;
}
.btn-ghost { transform: translate3d(var(--mag-x, 0px), var(--mag-y, 0px), 0); }
.btn-ghost:hover {
  transform: translate3d(var(--mag-x, 0px), calc(var(--mag-y, 0px) - 2px), 0);
  background: #fff;
  border-color: var(--forest-500);
}

/* ---------- Sky / sun / clouds / hills (hero nature scene) ---------- */
.sky {
  position: absolute;
  inset: 0;
  background:
    radial-gradient(130% 90% at 82% -12%, rgba(255, 246, 209, .85), rgba(255, 246, 209, 0) 42%),
    linear-gradient(180deg, #c8e6ff 0%, #ddf1ff 22%, #eafaf0 58%, rgba(241, 250, 244, 0) 92%);
  z-index: 0;
  pointer-events: none;
}

.sun {
  position: absolute;
  top: -70px;
  right: 9%;
  width: 280px;
  height: 280px;
  border-radius: 999px;
  background: radial-gradient(circle, rgba(255, 240, 178, .95), rgba(255, 223, 128, .45) 42%, rgba(255, 223, 128, 0) 70%);
  filter: blur(6px);
  z-index: 0;
  pointer-events: none;
  animation: sunpulse 9s ease-in-out infinite;
}
@keyframes sunpulse {
  0%, 100% { opacity: .85; transform: scale(1); }
  50%      { opacity: 1;   transform: scale(1.06); }
}

.clouds {
  position: absolute;
  inset: 0 -10% 0 0;
  overflow: hidden;
  z-index: 0;
  pointer-events: none;
}
.cloud {
  position: absolute;
  display: block;
  background: radial-gradient(closest-side, rgba(255, 255, 255, .95), rgba(255, 255, 255, 0));
  border-radius: 999px;
  filter: blur(4px);
}
.cloud--1 { width: 260px; height: 84px; top: 12%; left: -25%; opacity: .85; animation: drift 46s linear infinite; }
.cloud--2 { width: 190px; height: 62px; top: 26%; left: -35%; opacity: .6;  animation: drift 60s linear infinite 8s; }
.cloud--3 { width: 320px; height: 96px; top: 6%;  left: -45%; opacity: .5;  animation: drift 74s linear infinite 16s; }
.cloud--4 { width: 150px; height: 52px; top: 38%; left: -20%; opacity: .45; animation: drift 54s linear infinite 4s; }
@keyframes drift {
  from { transform: translateX(0); }
  to   { transform: translateX(180vw); }
}

.hills {
  position: absolute;
  left: 0;
  right: 0;
  bottom: -1px;
  z-index: 0;
  line-height: 0;
  pointer-events: none;
}
.hills svg { width: 100%; height: clamp(90px, 14vw, 200px); display: block; }
.hill--back  { fill: rgba(47, 163, 98, .16); }
.hill--mid   { fill: rgba(31, 138, 79, .26); }
.hill--front { fill: rgba(26, 110, 65, .42); }

/* ---------- Background grid + blobs ---------- */
.bg-grid {
  position: absolute;
  inset: 0;
  background-image:
    linear-gradient(to right, rgba(31, 138, 79, .06) 1px, transparent 1px),
    linear-gradient(to bottom, rgba(31, 138, 79, .06) 1px, transparent 1px);
  background-size: 54px 54px;
  -webkit-mask-image: radial-gradient(ellipse 80% 60% at 50% 30%, #000 35%, transparent 80%);
  mask-image: radial-gradient(ellipse 80% 60% at 50% 30%, #000 35%, transparent 80%);
  pointer-events: none;
}
.bg-grid--dark {
  background-image:
    linear-gradient(to right, rgba(139, 213, 168, .08) 1px, transparent 1px),
    linear-gradient(to bottom, rgba(139, 213, 168, .08) 1px, transparent 1px);
}

.blob {
  position: absolute;
  width: 30rem;
  height: 30rem;
  border-radius: 999px;
  filter: blur(80px);
  opacity: .55;
  pointer-events: none;
  z-index: 0;
}
.blob--mint { background: radial-gradient(circle, rgba(80, 200, 140, .55), transparent 65%); }
.blob--gold { background: radial-gradient(circle, rgba(233, 173, 42, .35), transparent 65%); }
.blob--deep { background: radial-gradient(circle, rgba(47, 163, 98, .35), transparent 60%); width: 40rem; height: 40rem; opacity: .5; }

/* Slow drifting blobs (alive, organic background motion) */
.blob--drift  { animation: blobdrift 22s ease-in-out infinite; }
.blob--drift2 { animation: blobdrift2 28s ease-in-out infinite; }
@keyframes blobdrift  { 0%,100% { transform: translate(0,0) scale(1); } 50% { transform: translate(40px,30px) scale(1.08); } }
@keyframes blobdrift2 { 0%,100% { transform: translate(0,0) scale(1); } 50% { transform: translate(-50px,40px) scale(1.1); } }

/* Aurora: soft moving colour wash behind the hero */
.aurora {
  position: absolute;
  inset: -20% -10% auto -10%;
  height: 90%;
  background:
    radial-gradient(40% 50% at 20% 30%, rgba(80, 200, 140, .25), transparent 70%),
    radial-gradient(45% 55% at 80% 20%, rgba(233, 173, 42, .18), transparent 70%),
    radial-gradient(50% 60% at 55% 60%, rgba(47, 163, 98, .20), transparent 70%);
  filter: blur(40px);
  z-index: 0;
  pointer-events: none;
  /* static on purpose: animating a near-fullscreen blurred layer re-composites
     the whole surface every frame and stutters on ultrawide (5120x1440) — the
     same fix as the PIN gate aurora. The hero has plenty of motion already. */
}
@keyframes auroramove {
  0%, 100% { transform: translate3d(0, 0, 0) scale(1); opacity: .9; }
  50%      { transform: translate3d(0, -3%, 0) scale(1.08); opacity: 1; }
}

/* Live pulse dot in the hero eyebrow */
.live-dot {
  position: relative;
  display: inline-block;
  height: .55rem;
  width: .55rem;
  border-radius: 999px;
  background: #2fa362;
}
.live-dot::after {
  content: "";
  position: absolute;
  inset: 0;
  border-radius: 999px;
  background: #2fa362;
  animation: livepulse 1.8s ease-out infinite;
}
@keyframes livepulse {
  0%   { transform: scale(1); opacity: .7; }
  100% { transform: scale(3.2); opacity: 0; }
}

/* Floating particles (sparks of life rising in the hero) */
.particles { position: absolute; inset: 0; overflow: hidden; z-index: 0; pointer-events: none; }
.particle {
  position: absolute;
  bottom: -10%;
  width: 8px;
  height: 8px;
  border-radius: 60% 40% 55% 45%;
  background: radial-gradient(circle at 35% 30%, #8bd5a8, #2fa362);
  opacity: 0;
  animation: floatUp linear infinite;
}
.particle:nth-child(1)  { left: 6%;  width: 7px;  height: 7px;  animation-duration: 15s; animation-delay: 0s;  }
.particle:nth-child(2)  { left: 16%; width: 10px; height: 10px; animation-duration: 19s; animation-delay: 2s;  background: radial-gradient(circle at 35% 30%, #f3da8a, #e9ad2a); }
.particle:nth-child(3)  { left: 26%; width: 6px;  height: 6px;  animation-duration: 13s; animation-delay: 4s;  }
.particle:nth-child(4)  { left: 37%; width: 9px;  height: 9px;  animation-duration: 21s; animation-delay: 1s;  }
.particle:nth-child(5)  { left: 47%; width: 7px;  height: 7px;  animation-duration: 17s; animation-delay: 5s;  background: radial-gradient(circle at 35% 30%, #f3da8a, #e9ad2a); }
.particle:nth-child(6)  { left: 57%; width: 11px; height: 11px; animation-duration: 23s; animation-delay: 3s;  }
.particle:nth-child(7)  { left: 66%; width: 6px;  height: 6px;  animation-duration: 14s; animation-delay: 6s;  }
.particle:nth-child(8)  { left: 74%; width: 9px;  height: 9px;  animation-duration: 20s; animation-delay: 2.5s;background: radial-gradient(circle at 35% 30%, #f3da8a, #e9ad2a); }
.particle:nth-child(9)  { left: 82%; width: 7px;  height: 7px;  animation-duration: 16s; animation-delay: 7s;  }
.particle:nth-child(10) { left: 90%; width: 10px; height: 10px; animation-duration: 24s; animation-delay: 1.5s;}
.particle:nth-child(11) { left: 33%; width: 6px;  height: 6px;  animation-duration: 18s; animation-delay: 8s;  }
.particle:nth-child(12) { left: 62%; width: 8px;  height: 8px;  animation-duration: 22s; animation-delay: 4.5s;background: radial-gradient(circle at 35% 30%, #f3da8a, #e9ad2a); }
@keyframes floatUp {
  0%   { transform: translateY(0) translateX(0) rotate(0deg); opacity: 0; }
  10%  { opacity: .8; }
  90%  { opacity: .8; }
  100% { transform: translateY(-115vh) translateX(40px) rotate(220deg); opacity: 0; }
}

/* ---------- Globe ---------- */
#globe-wrap { z-index: 1; }
#globe-canvas { display: block; }

/* A hologram needs a darker "projection bed" behind it so the glowing wireframe
   and dots have contrast to pop against, even sitting on the light hero background. */
.globe-glow {
  position: absolute;
  inset: 2%;
  border-radius: 999px;
  background:
    radial-gradient(circle at 50% 50%, rgba(6, 32, 22, .55), rgba(6, 32, 22, .28) 45%, transparent 72%),
    radial-gradient(circle at 50% 45%, rgba(63, 224, 143, .30), transparent 60%);
  filter: blur(14px);
  z-index: 0;
}

/* Fallback shown only when JS/WebGL globe is unavailable — a flat hologram sketch */
.globe-fallback {
  position: absolute;
  inset: 12%;
  border-radius: 999px;
  background: radial-gradient(circle at 50% 50%, rgba(8, 42, 27, .5), rgba(8, 42, 27, .18) 60%, transparent 78%);
  background-image:
    repeating-linear-gradient(0deg, rgba(63, 224, 143, .28) 0 1px, transparent 1px 14%),
    repeating-linear-gradient(90deg, rgba(63, 224, 143, .28) 0 1px, transparent 1px 14%),
    radial-gradient(circle at 50% 50%, rgba(8, 42, 27, .5), rgba(8, 42, 27, .18) 60%, transparent 78%);
  -webkit-mask-image: radial-gradient(circle, #000 68%, transparent 72%);
  mask-image: radial-gradient(circle, #000 68%, transparent 72%);
  box-shadow: 0 0 40px rgba(63, 224, 143, .3);
  display: none;
}
.globe-fallback::after {
  content: "";
  position: absolute;
  inset: -6%;
  border-radius: 999px;
  border: 1px solid rgba(63, 224, 143, .4);
}
.no-webgl .globe-fallback { display: block; animation: spinglow 12s ease-in-out infinite; }
.no-webgl #globe-canvas { display: none; }

@keyframes spinglow {
  0%, 100% { opacity: .75; transform: scale(1); }
  50%      { opacity: 1;   transform: scale(1.03); }
}

/* ---------- Floating coin ---------- */
.floaty { animation: floaty 6s ease-in-out infinite; }
@keyframes floaty {
  0%, 100% { transform: translateY(0) rotate(-2deg); }
  50%      { transform: translateY(-14px) rotate(2deg); }
}

/* ---------- Marquee ---------- */
/* Track repeats the phrase group 5x so the strip always overflows past even
   ultra-wide monitors (previously only 2x, which left a visible gap on the
   right on wide screens and made the whole ticker read as stuck to the left). */
.marquee { overflow: hidden; white-space: nowrap; }
.marquee__track {
  display: inline-flex;
  align-items: center;
  gap: 2rem;
  padding-left: 2rem;
  animation: marquee 26s linear infinite;
  will-change: transform; /* compositor-driven, stays 60fps even under load */
}
.marquee__track .dot { color: var(--gold-300); }
.marquee:hover .marquee__track { animation-play-state: paused; }
@keyframes marquee {
  from { transform: translateX(0); }
  to   { transform: translateX(-20%); }
}

/* ---------- Cards (vision) ---------- */
.card {
  position: relative;
  padding: 2rem;
  border-radius: 1.5rem; /* organic 24px */
  background: #fff;
  border: 1px solid rgba(47, 163, 98, .14);
  box-shadow: 0 8px 32px rgba(16, 68, 44, .08); /* natural soft shadow */
  transition: transform .3s ease, box-shadow .3s ease, border-color .3s ease;
}
.card:hover {
  transform: translateY(-6px);
  box-shadow: 0 24px 60px -28px rgba(16, 68, 44, .4);
  border-color: rgba(233, 173, 42, .45);
}
.icon-badge {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  height: 3rem; width: 3rem;
  border-radius: .9rem;
  color: var(--forest-700);
  background: linear-gradient(140deg, rgba(47,163,98,.16), rgba(233,173,42,.14));
  margin-bottom: 1.2rem;
}
.card-title { font-family: "Space Grotesk", sans-serif; font-size: 1.25rem; font-weight: 700; color: #103b27; }
.card-text { margin-top: .6rem; color: rgba(24, 87, 55, .75); line-height: 1.65; }

/* ---------- Power cards (superpowers, dark) ---------- */
.power-card {
  position: relative;
  padding: 2.6rem 2.4rem;
  border-radius: 1.5rem;
  background: linear-gradient(160deg, rgba(255,255,255,.06), rgba(255,255,255,.02));
  border: 1px solid rgba(139, 213, 168, .15);
  overflow: hidden;
  transition: transform .3s ease, border-color .3s ease, background .3s ease;
}
/* thin gold accent along the top of each card */
.power-card::after {
  content: "";
  position: absolute;
  top: 0; left: 2.4rem;
  width: 64px; height: 3px;
  border-radius: 0 0 4px 4px;
  background: linear-gradient(90deg, #e9ad2a, rgba(233,173,42,.1));
}
.power-card::before {
  content: "";
  position: absolute;
  inset: 0;
  background: radial-gradient(600px circle at var(--mx, 50%) var(--my, 0%), rgba(47,163,98,.18), transparent 40%);
  opacity: 0;
  transition: opacity .4s ease;
}
.power-card:hover { transform: translateY(-6px); border-color: rgba(233, 173, 42, .45); }
.power-card:hover::before { opacity: 1; }
.power-index {
  font-family: "Space Grotesk", sans-serif;
  font-size: .95rem;
  font-weight: 700;
  letter-spacing: .1em;
  color: var(--gold-300);
}
.power-title { margin-top: .6rem; font-family: "Space Grotesk", sans-serif; font-size: 1.5rem; font-weight: 700; color: #eafff3; }
.power-text { margin-top: .8rem; color: rgba(225, 247, 234, .72); line-height: 1.7; }

/* ---------- Step cards (how it works) ---------- */
.step-card {
  position: relative;
  padding: 2rem 1.8rem;
  border-radius: 1.4rem;
  background: linear-gradient(180deg, #ffffff, #f3fbf6);
  border: 1px solid rgba(47, 163, 98, .16);
  box-shadow: 0 12px 46px -30px rgba(16, 68, 44, .4);
  transition: transform .3s ease, box-shadow .3s ease, border-color .3s ease;
}
.step-card:hover { transform: translateY(-6px); box-shadow: 0 22px 54px -30px rgba(16, 68, 44, .45); border-color: rgba(233, 173, 42, .4); }
.step-num {
  position: absolute;
  top: 1.4rem; right: 1.5rem;
  font-family: "Space Grotesk", sans-serif;
  font-size: 1.6rem;
  font-weight: 700;
  color: rgba(47, 163, 98, .18);
}
.step-icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  height: 3.4rem; width: 3.4rem;
  border-radius: 999px;
  color: var(--forest-700);
  border: 1.5px solid rgba(47, 163, 98, .35);
  background: rgba(47, 163, 98, .07);
  margin-bottom: 1.3rem;
}
.step-title { font-family: "Space Grotesk", sans-serif; font-size: 1.2rem; font-weight: 700; color: #103b27; }
.step-text { margin-top: .55rem; font-size: .95rem; color: rgba(24, 87, 55, .72); line-height: 1.6; }

/* ---------- Technology ---------- */
.tech-item { display: flex; gap: .9rem; color: rgba(24, 87, 55, .8); line-height: 1.6; }
.tech-check {
  position: relative;
  flex: none;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  height: 1.7rem; width: 1.7rem;
  border-radius: 999px;
  font-size: .9rem;
  font-weight: 700;
  color: #fff;
  background: linear-gradient(135deg, #4ade80, #1a6e41);
  box-shadow: 0 0 0 4px rgba(47,163,98,.14), 0 6px 16px -4px rgba(47,163,98,.6);
  animation: checkGlow 2.6s ease-in-out infinite;
  overflow: hidden;
}
.tech-check::after {
  content: "";
  position: absolute;
  top: 0; left: -120%;
  width: 60%; height: 100%;
  background: linear-gradient(100deg, transparent, rgba(255,255,255,.7), transparent);
  transform: skewX(-18deg);
  animation: checkShine 2.6s ease-in-out infinite;
}
.tech-item:nth-child(2) .tech-check, .tech-item:nth-child(2) .tech-check::after { animation-delay: .3s; }
.tech-item:nth-child(3) .tech-check, .tech-item:nth-child(3) .tech-check::after { animation-delay: .6s; }
@keyframes checkGlow {
  0%, 100% { box-shadow: 0 0 0 4px rgba(47,163,98,.12), 0 6px 16px -4px rgba(47,163,98,.5); }
  50%      { box-shadow: 0 0 0 6px rgba(74,222,128,.22), 0 8px 22px -4px rgba(74,222,128,.75); }
}
@keyframes checkShine {
  0%, 65% { left: -120%; }
  100%    { left: 130%; }
}
.metric-card {
  padding: 1.6rem;
  border-radius: 1.2rem;
  background: #fff;
  border: 1px solid rgba(47, 163, 98, .16);
  box-shadow: 0 12px 44px -28px rgba(16, 68, 44, .35);
  transition: transform .3s ease, border-color .3s ease, box-shadow .3s ease;
}
.metric-card:hover {
  transform: translateY(-4px);
  border-color: rgba(233, 173, 42, .45);
  box-shadow: 0 18px 50px -26px rgba(16, 68, 44, .45);
}
.metric-card--accent {
  background: linear-gradient(150deg, #1f8a4f, #12442c);
  border-color: transparent;
}
.metric-card--accent .metric-value { color: #fff; }
.metric-card--accent .metric-label { color: rgba(225, 247, 234, .75); }
.metric-value { font-family: "Space Grotesk", sans-serif; font-size: 1.9rem; font-weight: 700; color: var(--forest-700); }
.metric-label { margin-top: .3rem; font-size: .9rem; color: rgba(24, 87, 55, .65); }

/* ---------- Tokenomics legend rows, each with its own animated proportion bar ---------- */
.legend-top { display: flex; align-items: center; gap: .7rem; }
.legend-dot { height: .7rem; width: .7rem; border-radius: 999px; flex: none; }
.legend-name { flex: 1; color: rgba(225, 247, 234, .78); }
.legend-pct { font-family: "Space Grotesk", sans-serif; font-weight: 700; color: #eafff3; }
.legend-bar {
  margin-top: .5rem;
  height: 7px;
  border-radius: 999px;
  background: rgba(255, 255, 255, .08);
  overflow: hidden;
}
.legend-fill {
  display: block;
  height: 100%;
  width: 0;
  border-radius: 999px;
  box-shadow: 0 0 8px currentColor;
}
.reveal.is-visible .legend-fill { animation: legendGrow 1s cubic-bezier(.2,.85,.25,1) forwards; }
.reveal.is-visible .legend:nth-child(1) .legend-fill { animation-delay: .05s; }
.reveal.is-visible .legend:nth-child(2) .legend-fill { animation-delay: .18s; }
.reveal.is-visible .legend:nth-child(3) .legend-fill { animation-delay: .31s; }
.reveal.is-visible .legend:nth-child(4) .legend-fill { animation-delay: .44s; }
.reveal.is-visible .legend:nth-child(5) .legend-fill { animation-delay: .57s; }
@keyframes legendGrow { from { width: 0; } to { width: var(--w); } }

/* ---------- Stats ---------- */
.stat-num { font-family: "Space Grotesk", sans-serif; font-size: 2rem; font-weight: 700; color: var(--forest-700); line-height: 1; }
.stat-label { margin-top: .4rem; font-size: .85rem; color: rgba(24, 87, 55, .65); }

/* ---------- Footer ---------- */
.footer-head { font-family: "Space Grotesk", sans-serif; font-weight: 700; color: #fff; margin-bottom: 1.1rem; font-size: .95rem; letter-spacing: .04em; }
.footer-link { color: rgba(225, 247, 234, .6); transition: color .2s ease; }
.footer-link:hover { color: var(--gold-300); }

/* ---------- Scroll reveal ---------- */
/* No blur here: the blur-in read as "ghosting" and costs GPU — crisp rise+fade only */
.reveal {
  opacity: 0;
  transform: translateY(28px);
  transition: opacity .7s cubic-bezier(.2,.7,.2,1), transform .7s cubic-bezier(.2,.7,.2,1);
  transition-delay: var(--d, 0s);
  will-change: opacity, transform;
}
.reveal.is-visible { opacity: 1; transform: translateY(0); }

/* Section scroll offset for sticky navbar */
section[id] { scroll-margin-top: 90px; }

/* ---------- Reduced motion ---------- */
/* ---------- How it works: steps + flow arrows ---------- */
.steps { display: flex; flex-direction: column; gap: 1rem; }
.steps .step-card { flex: 1; }
/* Arrows sweep in the direction of the flow (fade in, travel, fade out) */
.step-arrow {
  display: flex; align-items: center; justify-content: center;
  color: var(--forest-500);
  animation: arrowFlowV 1.5s ease-in-out infinite;
}
.step-arrow svg { width: 2rem; height: 2rem; transform: rotate(90deg); }
@keyframes arrowFlowV {
  0%   { transform: translateY(-8px); opacity: 0; }
  30%  { opacity: 1; }
  70%  { opacity: 1; }
  100% { transform: translateY(8px); opacity: 0; }
}
@keyframes arrowFlowH {
  0%   { transform: translateX(-10px); opacity: 0; }
  30%  { opacity: 1; }
  70%  { opacity: 1; }
  100% { transform: translateX(10px); opacity: 0; }
}
@media (min-width: 1024px) {
  .steps { flex-direction: row; align-items: stretch; }
  .step-arrow { animation: arrowFlowH 1.5s ease-in-out infinite; }
  .step-arrow svg { transform: rotate(0deg); }
}

/* ---------- Rewards chart ---------- */
.reward-chart {
  border: 1px solid rgba(47, 163, 98, .16);
  background: #fff;
  border-radius: 1.5rem;
  padding: 1.75rem 1.5rem 1.25rem;
  box-shadow: 0 8px 32px rgba(16, 68, 44, .08);
}
.reward-bars {
  position: relative;
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 1rem;
  align-items: end;
  min-height: 320px;
  padding-bottom: 8px;
  border-bottom: 1px solid rgba(47, 163, 98, .18);
}
.reward-bar { position: relative; z-index: 1; display: flex; flex-direction: column; justify-content: flex-end; align-items: center; text-align: center; }

/* horizontal gridlines with € marks — bars use a true linear scale (38px per €)
   so the gridlines are honest: €1=38px, €2=76px, €3=114px, €6=228px */
.rc-grid { position: absolute; inset: 0; pointer-events: none; }
.rc-grid span {
  position: absolute;
  left: 0; right: 0;
  bottom: calc(8px + var(--gy));
  border-top: 1px dashed rgba(47, 163, 98, .18);
  pointer-events: none;
}
.rc-grid i {
  position: absolute;
  left: 0; top: -0.62em;
  font-style: normal;
  font-family: "Space Grotesk", sans-serif;
  font-size: .62rem;
  font-weight: 600;
  color: rgba(24, 87, 55, .45);
  background: #fff;
  padding-right: 5px;
  line-height: 1;
}

/* gold "Total" tag above the 3-year column */
.rb-badge {
  display: inline-block;
  margin-bottom: .45rem;
  font-family: "Space Grotesk", sans-serif;
  font-size: .58rem;
  font-weight: 700;
  letter-spacing: .16em;
  text-transform: uppercase;
  color: #8a530d;
  background: linear-gradient(120deg, #ffe9ad, #f3da8a);
  border: 1px solid rgba(176, 111, 10, .35);
  padding: .22rem .62rem;
  border-radius: 999px;
}
.rb-val { font-family: 'Space Grotesk', sans-serif; font-weight: 700; font-size: 1.3rem; color: #1a6e41; margin-bottom: .45rem; }
.reward-bar--total .rb-val { color: #b06f0a; font-size: 1.55rem; }

/* A simple, clean bar that grows straight up from the ground when it scrolls
   into view — height is an explicit px value per column (var(--h)), and the
   growth itself is a scaleY transform anchored to the bottom, so the bar
   never overflows/jumps and every column shares one true baseline. */
.rb-fill {
  position: relative;
  display: block;
  width: 56px;
  height: var(--h);
  margin: 0 auto;
  border-radius: .6rem .6rem .2rem .2rem;
  background: linear-gradient(180deg, #6ee0a0, #1f8a4f 65%, #146a3c);
  box-shadow: 0 0 0 1px rgba(255,255,255,.12) inset, 0 10px 24px -10px rgba(31,138,79,.55);
  overflow: hidden;
  transform-origin: bottom center;
  transform: scaleY(0);
}
.reward-bar--total .rb-fill {
  background: linear-gradient(180deg, #ffe28a, #e9ad2a 65%, #b06f0a);
  box-shadow: 0 0 0 1px rgba(255,255,255,.18) inset, 0 10px 26px -8px rgba(176,111,10,.6);
}
.reveal.is-visible .rb-fill {
  animation: rbGrow 1s cubic-bezier(.2,.85,.25,1) forwards;
  animation-delay: calc(var(--i) * .16s);
}
@keyframes rbGrow { from { transform: scaleY(0); } to { transform: scaleY(1); } }

/* a soft light sweeping up through the bar once it has grown, looping */
.rb-fill::after {
  content: "";
  position: absolute;
  inset: 0;
  background: linear-gradient(0deg, transparent, rgba(255,255,255,.55) 45%, transparent 60%);
  mix-blend-mode: overlay;
  transform: translateY(100%);
  opacity: 0;
  animation: rbSparkle 3.4s ease-in-out infinite;
  animation-delay: calc(var(--i) * .16s + 1.1s);
}
@keyframes rbSparkle { 0%, 55% { transform: translateY(100%); opacity: 0; } 65% { opacity: .9; } 100% { transform: translateY(-100%); opacity: 0; } }
.rb-label { margin-top: .55rem; font-size: .8rem; color: rgba(24, 87, 55, .6); }
.reward-note {
  margin-top: 1rem; text-align: center; font-size: .8rem; color: rgba(24, 87, 55, .55);
  opacity: 0; transform: translateY(8px);
  transition: opacity .6s ease, transform .6s ease;
}
.reveal.is-visible .reward-note { opacity: 1; transform: none; transition-delay: .9s; }

/* ---------- Tokenomics: coin showcase rings + label ---------- */

/* legend rows stagger in */
.legend { opacity: 0; transform: translateX(-12px); transition: opacity .55s ease, transform .55s ease; }
.reveal.is-visible .legend { opacity: 1; transform: none; }
.reveal.is-visible .legend:nth-child(1) { transition-delay: .05s; }
.reveal.is-visible .legend:nth-child(2) { transition-delay: .13s; }
.reveal.is-visible .legend:nth-child(3) { transition-delay: .21s; }
.reveal.is-visible .legend:nth-child(4) { transition-delay: .29s; }
.reveal.is-visible .legend:nth-child(5) { transition-delay: .37s; }

/* ---------- Superpowers: livelier section ---------- */
#superpowers::before {
  content: "";
  position: absolute;
  inset: 0;
  pointer-events: none;
  background:
    radial-gradient(45% 38% at 18% 18%, rgba(47,163,98,.22), transparent 60%),
    radial-gradient(42% 42% at 85% 82%, rgba(233,173,42,.13), transparent 62%);
  animation: spAurora 15s ease-in-out infinite;
}
@keyframes spAurora { 0%,100% { transform: translate3d(0,0,0) scale(1); } 50% { transform: translate3d(0,-2.5%,0) scale(1.06); } }

/* ============================================================
   APP DOWNLOAD MODAL — phone-mockup preview of the PLANTUM app
   ============================================================ */
.app-modal {
  position: fixed;
  inset: 0;
  z-index: 998;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 1.25rem;
  visibility: hidden;
  opacity: 0;
  transition: opacity .35s ease, visibility 0s linear .35s;
}
.app-modal.is-open {
  visibility: visible;
  opacity: 1;
  transition: opacity .35s ease, visibility 0s linear 0s;
}
.app-modal-backdrop {
  position: absolute;
  inset: 0;
  background: rgba(6, 28, 19, .72);
  backdrop-filter: blur(6px);
  -webkit-backdrop-filter: blur(6px);
}
.app-modal-panel {
  position: relative;
  z-index: 1;
  display: grid;
  grid-template-columns: 1fr;
  gap: 2rem;
  width: 100%;
  max-width: 980px;
  max-height: 92vh;
  overflow: auto;
  padding: 2.5rem 2rem;
  border-radius: 1.75rem;
  background: linear-gradient(165deg, #f6fdf9, #eaf7f0);
  box-shadow: 0 60px 120px -30px rgba(0,0,0,.55);
  transform: scale(.94) translateY(14px);
  opacity: 0;
  transition: transform .4s cubic-bezier(.2,.85,.25,1), opacity .35s ease;
}
.app-modal.is-open .app-modal-panel { transform: none; opacity: 1; }
@media (min-width: 900px) { .app-modal-panel { grid-template-columns: 1fr 340px; align-items: center; } }

.app-modal-close {
  position: absolute;
  top: 1rem; right: 1rem;
  z-index: 2;
  display: flex; align-items: center; justify-content: center;
  width: 2.4rem; height: 2.4rem;
  border-radius: 999px;
  background: rgba(8,42,27,.06);
  color: var(--forest-800, #185737);
  transition: background .2s ease, transform .2s ease;
}
.app-modal-close:hover { background: rgba(8,42,27,.12); transform: rotate(90deg); }
.app-modal-close svg { width: 1.15rem; height: 1.15rem; }

.app-modal-title { margin-top: .8rem; font-family: 'Playfair Display', Georgia, serif; font-size: 1.9rem; font-weight: 700; color: #103b27; letter-spacing: -.01em; }
.app-modal-text { margin-top: .75rem; color: rgba(24,87,55,.72); line-height: 1.65; }
.store-badges { display: flex; flex-wrap: wrap; gap: .75rem; margin-top: 1.5rem; }
.store-badge {
  display: inline-flex; align-items: center; gap: .6rem;
  padding: .65rem 1rem;
  border-radius: .8rem;
  background: rgba(8,42,27,.9);
  color: #fff;
  font-size: .75rem;
  line-height: 1.25;
  opacity: .88;
}
.store-badge svg { width: 1.5rem; height: 1.5rem; flex: none; }
.store-badge b { font-size: .92rem; }
/* ---- Phone mockup ---- */
.phone-mock { display: flex; flex-direction: column; align-items: center; gap: 1.1rem; }
.phone-frame {
  position: relative;
  width: 260px;
  height: 540px;
  padding: 14px;
  border-radius: 2.6rem;
  background: linear-gradient(155deg, #1b1f1d, #05100b);
  box-shadow: 0 30px 60px -20px rgba(8,42,27,.5), inset 0 0 0 2px rgba(255,255,255,.06);
}
.phone-notch {
  position: absolute;
  top: 14px; left: 50%;
  width: 90px; height: 22px;
  transform: translateX(-50%);
  background: #05100b;
  border-radius: 0 0 14px 14px;
  z-index: 3;
}
.phone-screen {
  position: relative;
  width: 100%; height: 100%;
  border-radius: 2rem;
  overflow: hidden;
  background: linear-gradient(180deg, #eafaf0, #ffffff);
}
.app-screen {
  position: absolute; inset: 0;
  display: flex; flex-direction: column;
  padding: 2.4rem 1.1rem 1rem;
  opacity: 0;
  transform: translateX(24px);
  transition: opacity .5s ease, transform .5s ease;
  pointer-events: none;
}
.app-screen.is-active { opacity: 1; transform: none; pointer-events: auto; }
.app-topbar { display: flex; align-items: center; justify-content: space-between; font-size: .78rem; font-weight: 600; color: #103b27; }
.app-avatar { display: flex; align-items: center; justify-content: center; width: 1.6rem; height: 1.6rem; border-radius: 999px; background: var(--forest-500); color: #fff; font-size: .7rem; font-weight: 700; }

.app-balance-card {
  margin-top: 1rem;
  padding: 1rem 1.1rem;
  border-radius: 1.1rem;
  background: linear-gradient(150deg, #1f8a4f, #103b27);
  color: #fff;
  box-shadow: 0 12px 28px -12px rgba(16,68,44,.5);
}
.app-balance-label { display: block; font-size: .65rem; text-transform: uppercase; letter-spacing: .08em; color: rgba(255,255,255,.65); }
.app-balance-value { display: block; margin-top: .3rem; font-family: "Space Grotesk", sans-serif; font-size: 1.6rem; font-weight: 700; }
.app-balance-value small { font-size: .8rem; font-weight: 600; color: #ffe8ad; }
.app-balance-sub { display: block; margin-top: .2rem; font-size: .68rem; color: rgba(255,255,255,.6); }

.app-stat-row { display: grid; grid-template-columns: 1fr 1fr; gap: .6rem; margin-top: .85rem; }
.app-stat { padding: .7rem .6rem; border-radius: .8rem; background: rgba(47,163,98,.08); text-align: center; }
.app-stat b { display: block; font-family: "Space Grotesk", sans-serif; font-size: 1.05rem; color: #103b27; }
.app-stat span { display: block; margin-top: .1rem; font-size: .65rem; color: rgba(24,87,55,.6); }

.app-cta {
  margin-top: 1rem;
  padding: .75rem;
  border-radius: 999px;
  background: linear-gradient(120deg, #1f8a4f, #2fa362);
  color: #fff;
  font-size: .82rem;
  font-weight: 700;
  box-shadow: 0 10px 22px -10px rgba(31,138,79,.6);
}
.app-cta--ghost { background: rgba(47,163,98,.1); color: var(--forest-700); box-shadow: none; border: 1px solid rgba(47,163,98,.25); }

.app-navbar {
  margin-top: auto;
  display: flex; justify-content: space-around;
  padding-top: .9rem;
  border-top: 1px solid rgba(8,42,27,.08);
  color: rgba(24,87,55,.4);
}
.app-navbar svg { width: 1.2rem; height: 1.2rem; }
.app-navbar .active { color: var(--forest-600, #1f8a4f); }

.app-camera { position: relative; margin-top: 1rem; height: 210px; border-radius: 1.2rem; background: linear-gradient(160deg,#12271d,#0a1a12); overflow: hidden; }
.app-camera-tree { position: absolute; inset: 0; width: 100%; height: 100%; }
.app-camera-guide { position: absolute; inset: 18%; border: 2px dashed rgba(255,255,255,.6); border-radius: 1rem; box-shadow: 0 0 0 1000px rgba(0,0,0,.12); }
.app-camera-hint { position: absolute; bottom: .9rem; left: 0; right: 0; text-align: center; font-size: .68rem; color: rgba(255,255,255,.8); }
.app-geo-chip { position: absolute; top: .7rem; left: .7rem; padding: .25rem .55rem; border-radius: 999px; background: rgba(0,0,0,.45); color: #fff; font-size: .6rem; }
.app-verify-check { display: flex; align-items: center; gap: .6rem; margin-top: 1rem; padding: .8rem .9rem; border-radius: .9rem; background: rgba(47,163,98,.1); font-size: .74rem; color: #103b27; }
.app-check-circle { display: flex; align-items: center; justify-content: center; width: 1.5rem; height: 1.5rem; border-radius: 999px; background: #2fa362; color: #fff; font-size: .8rem; flex: none; }

.app-map { position: relative; margin-top: 1rem; height: 230px; border-radius: 1.2rem; background: radial-gradient(circle at 30% 20%, #123a2c, #0a2318 70%); overflow: hidden; }
.app-map-art { position: absolute; left: 50%; top: 52%; width: 118%; max-width: none; transform: translate(-50%, -50%); opacity: .9; }
.app-pin { position: absolute; width: 8px; height: 8px; border-radius: 999px; background: #f2c14e; box-shadow: 0 0 0 4px rgba(242,193,78,.25); animation: appPinPulse 2.2s ease-in-out infinite; transform: translate(-50%, -50%); }
/* positions verified via canvas alpha-hit-testing against assets/img/world-map.svg so every pin lands on a continent, not open ocean */
.app-pin.p1 { top: 41.7%; left: 14.6%; } .app-pin.p2 { top: 38.9%; left: 53.5%; animation-delay:.3s;} .app-pin.p3 { top: 58.5%; left: 22.9%; animation-delay:.6s;}
.app-pin.p4 { top: 38.9%; left: 76%; animation-delay:.9s;} .app-pin.p5 { top: 52%; left: 57.1%; animation-delay:1.2s;} .app-pin.p6 { top: 58.1%; left: 90.1%; animation-delay:1.5s;}
.app-pin.p7 { top: 47.3%; left: 73.6%; animation-delay:1.8s;} .app-pin.p8 { top: 50.1%; left: 83%; animation-delay:2.1s;}
@keyframes appPinPulse { 0%,100% { transform: scale(1); opacity:.85; } 50% { transform: scale(1.6); opacity:1; } }
.app-map-counter { margin-top: 1rem; text-align: center; }
.app-map-counter b { display: block; font-family:"Space Grotesk",sans-serif; font-size: 1.3rem; color: #103b27; }
.app-map-counter span { font-size: .68rem; color: rgba(24,87,55,.6); }

.app-wallet-chart { display: flex; align-items: end; gap: .5rem; height: 120px; margin-top: 1rem; padding: 0 .3rem; }
.wb { flex: 1; border-radius: 8px 8px 0 0; background: linear-gradient(180deg, #54bb80, #1a6e41); }
.wb1 { height: 22%; } .wb2 { height: 46%; } .wb3 { height: 70%; } .wb4 { height: 100%; background: linear-gradient(180deg, #f3da8a, #d4900f); }
.app-reward-list { margin-top: 1rem; display: flex; flex-direction: column; gap: .5rem; }
.app-reward-list li { display: flex; justify-content: space-between; font-size: .72rem; padding: .55rem .7rem; border-radius: .7rem; background: rgba(47,163,98,.07); color: #185737; }
.app-reward-list b { color: var(--forest-700); }

.phone-dots { display: flex; gap: .5rem; }
.phone-dot { width: .55rem; height: .55rem; border-radius: 999px; background: rgba(8,42,27,.18); transition: background .2s ease, transform .2s ease; }
.phone-dot.is-active { background: var(--forest-500); transform: scale(1.2); }

/* ---------- Section curve dividers (light ↔ dark transitions) ---------- */
/* In-flow SVG hills between sections so light and dark blocks blend instead of
   cutting on a straight line. The path fill is the dark section color; the
   default variant leads INTO a dark section, the --flip variant leads OUT. */
.curve { position: relative; z-index: 1; line-height: 0; margin-bottom: -1px; }
.curve svg { display: block; width: 100%; height: clamp(38px, 6vw, 74px); }
.curve--flip { margin-bottom: 0; margin-top: -1px; }
.curve--flip svg { transform: scaleY(-1); }

/* ---------- Hero: scroll cue ---------- */
.scroll-cue {
  position: absolute;
  left: 50%; bottom: 20px;
  z-index: 10;
  display: flex; align-items: center; justify-content: center;
  width: 42px; height: 42px;
  border-radius: 999px;
  color: var(--forest-700);
  background: rgba(255, 255, 255, .85);
  backdrop-filter: blur(4px);
  box-shadow: 0 10px 24px -10px rgba(16, 68, 44, .45);
  animation: cueBob 2.1s ease-in-out infinite;
  transition: background .2s ease, color .2s ease;
}
.scroll-cue:hover { background: #fff; color: var(--forest-500); }
.scroll-cue svg { width: 20px; height: 20px; }
@keyframes cueBob {
  0%, 100% { transform: translate(-50%, 0); }
  50%      { transform: translate(-50%, 7px); }
}

/* ---------- Hero: glass stat pills ---------- */
.stat-pill {
  display: flex; align-items: center; gap: .9rem;
  padding: .9rem 1.1rem;
  border-radius: 1.1rem;
  text-align: left;
  background: rgba(255, 255, 255, .6);
  border: 1px solid rgba(47, 163, 98, .16);
  backdrop-filter: blur(8px);
  -webkit-backdrop-filter: blur(8px);
  box-shadow: 0 10px 30px -18px rgba(16, 68, 44, .3);
  transition: transform .3s ease, border-color .3s ease;
}
.stat-pill:hover { transform: translateY(-3px); border-color: rgba(233, 173, 42, .4); }
.stat-ico {
  flex: none;
  display: inline-flex; align-items: center; justify-content: center;
  width: 2.5rem; height: 2.5rem;
  border-radius: .8rem;
  color: var(--forest-700);
  background: linear-gradient(140deg, rgba(47,163,98,.15), rgba(233,173,42,.13));
}
.stat-ico svg { width: 1.3rem; height: 1.3rem; }
.stat-pill .stat-num { font-size: 1.45rem; }
.stat-pill .stat-label { margin-top: .15rem; font-size: .78rem; }

/* ---------- Tokenomics: typographic fact cards + legend total ---------- */
.token-fact {
  padding: 1.6rem 1.7rem;
  border-radius: 1.3rem;
  background: linear-gradient(160deg, rgba(255,255,255,.06), rgba(255,255,255,.02));
  border: 1px solid rgba(139, 213, 168, .16);
  transition: transform .3s ease, border-color .3s ease;
}
.token-fact:hover { transform: translateY(-4px); border-color: rgba(233, 173, 42, .4); }
.token-fact-title {
  display: flex; align-items: center; gap: .65rem;
  font-family: "Space Grotesk", sans-serif;
  font-weight: 700;
  font-size: 1.05rem;
  color: #eafff3;
}
/* gold dot replaced by a real icon (.tf-ico) in the markup */
.tf-ico {
  flex: none;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 2.2rem; height: 2.2rem;
  border-radius: .65rem;
  color: #ffd97a;
  background: rgba(233, 173, 42, .12);
  border: 1px solid rgba(233, 173, 42, .3);
  box-shadow: 0 0 14px -4px rgba(233, 173, 42, .5);
}
.tf-ico svg { width: 1.15rem; height: 1.15rem; }
.token-fact-text { margin-top: .55rem; font-size: .95rem; color: rgba(225, 247, 234, .66); line-height: 1.65; }

.legend-sum {
  margin-top: 1.15rem;
  padding-top: .95rem;
  border-top: 1px solid rgba(255, 255, 255, .1);
  display: flex; justify-content: space-between; align-items: center;
  font-family: "Space Grotesk", sans-serif;
  font-weight: 700;
  font-size: .82rem;
  letter-spacing: .08em;
  text-transform: uppercase;
  color: #bdf0d2;
}
.legend-sum b { color: var(--gold-300); font-size: 1rem; }

/* ---------- "Live on Solana" badge (under nav logo) ---------- */
.token-badge {
  display: inline-flex;
  align-items: center;
  gap: .4rem;
  width: max-content;
  font-family: "Space Grotesk", sans-serif;
  font-size: .6rem;
  font-weight: 700;
  letter-spacing: .12em;
  text-transform: uppercase;
  color: var(--forest-700);
  padding: .18rem .5rem;
  border-radius: 999px;
  background: rgba(47, 163, 98, .1);
  border: 1px solid rgba(47, 163, 98, .22);
  transition: color .2s ease, background .2s ease, border-color .2s ease;
}
.token-badge:hover {
  color: var(--forest-800);
  background: rgba(233, 173, 42, .12);
  border-color: rgba(233, 173, 42, .5);
}
.token-badge-dot {
  width: 6px; height: 6px;
  border-radius: 999px;
  background: #2fa362;
  animation: liveDot 1.3s ease-in-out infinite;
}
/* a real visible blink: the dot dims and its glow ring expands, like a status LED */
@keyframes liveDot {
  0%, 100% { opacity: 1;   box-shadow: 0 0 0 0 rgba(47, 163, 98, .6); }
  50%      { opacity: .25; box-shadow: 0 0 0 5px rgba(47, 163, 98, 0); }
}

/* ---------- Pull quote ("trees are infrastructure") ---------- */
.pull-quote { position: relative; padding: 1rem 0 0; }
.pull-quote::before {
  content: "\201C";
  display: block;
  font-family: 'Playfair Display', Georgia, serif;
  font-size: 4.2rem;
  line-height: .6;
  color: rgba(233, 173, 42, .55);
  margin-bottom: .6rem;
}
.pull-quote p {
  font-family: 'Playfair Display', Georgia, serif;
  font-size: clamp(1.7rem, 4.4vw, 2.9rem);
  font-weight: 700;
  letter-spacing: -.01em;
  line-height: 1.25;
  color: #103b27;
}
.pull-quote-by {
  margin-top: 1.1rem;
  font-family: "Space Grotesk", sans-serif;
  font-size: .72rem;
  font-weight: 700;
  letter-spacing: .22em;
  text-transform: uppercase;
  color: rgba(24, 87, 55, .5);
}
.pull-quote-by::before {
  content: "";
  display: inline-block;
  vertical-align: middle;
  width: 26px; height: 2px;
  margin-right: .6rem;
  border-radius: 999px;
  background: linear-gradient(90deg, #2fa362, #e9ad2a);
}

/* ---------- "live" chip on the network-fee metric ---------- */
.live-chip {
  display: inline-flex;
  align-items: center;
  gap: .3rem;
  margin-left: .45rem;
  padding: .1rem .45rem;
  border-radius: 999px;
  font-family: "Space Grotesk", sans-serif;
  font-size: .58rem;
  font-weight: 700;
  letter-spacing: .12em;
  text-transform: uppercase;
  color: var(--forest-700);
  background: rgba(47, 163, 98, .1);
  border: 1px solid rgba(47, 163, 98, .25);
}
.live-chip-dot {
  width: 5px; height: 5px;
  border-radius: 999px;
  background: #2fa362;
  animation: liveDot 1.3s ease-in-out infinite;
}
/* small marketing sub-line under the fee metric */
.metric-sub {
  margin-top: .4rem;
  font-size: .72rem;
  line-height: 1.45;
  color: rgba(24, 87, 55, .55);
}

/* ---------- Token proof: on-chain contract address card ---------- */
.token-contract {
  margin-top: 2.5rem;
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  gap: 1.25rem;
  padding: 1.5rem 1.7rem;
  border-radius: 1.4rem;
  background: linear-gradient(150deg, rgba(233, 173, 42, .09), rgba(255, 255, 255, .02));
  border: 1px solid rgba(233, 173, 42, .28);
}
.tc-badge {
  display: inline-flex;
  align-items: center;
  gap: .45rem;
  font-family: "Space Grotesk", sans-serif;
  font-size: .62rem;
  font-weight: 700;
  letter-spacing: .14em;
  text-transform: uppercase;
  color: #ffe8ad;
}
.tc-label {
  margin-top: .55rem;
  font-size: .72rem;
  letter-spacing: .08em;
  text-transform: uppercase;
  color: rgba(225, 247, 234, .5);
}
.tc-addr {
  display: block;
  margin-top: .3rem;
  font-family: "Space Grotesk", ui-monospace, monospace;
  font-size: clamp(.82rem, 2.6vw, 1.05rem);
  font-weight: 600;
  color: #eafff3;
  word-break: break-all;
}
.tc-supply { margin-top: .6rem; font-size: .82rem; color: rgba(225, 247, 234, .6); }
.tc-supply b { color: #eafff3; font-weight: 700; }
.tc-actions { display: flex; flex-wrap: wrap; gap: .6rem; }
.tc-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  padding: .6rem 1.1rem;
  border-radius: 999px;
  font-family: "Space Grotesk", sans-serif;
  font-size: .82rem;
  font-weight: 600;
  cursor: pointer;
  color: #0a2318;
  background: linear-gradient(120deg, #ffe28a, #e9ad2a);
  border: 1px solid rgba(233, 173, 42, .5);
  transition: transform .2s ease, filter .2s ease, background .2s ease, color .2s ease;
}
.tc-btn:hover { transform: translateY(-2px); filter: brightness(1.05); }
.tc-btn--ghost {
  color: #ffe8ad;
  background: transparent;
  border-color: rgba(255, 236, 173, .32);
}
.tc-btn--ghost:hover { background: rgba(255, 236, 173, .08); color: #fff6df; }
.tc-btn.is-copied { background: linear-gradient(120deg, #8bf0c0, #2fa362); color: #052015; }

/* ---------- Roadmap ---------- */
.roadmap { position: relative; }
.roadmap-line {
  display: none;
  position: absolute;
  top: 5px; left: 1.5%; right: 1.5%;
  height: 2px;
  border-radius: 999px;
  background: linear-gradient(90deg, #2fa362, #8bd5a8 55%, rgba(233, 173, 42, .75));
}
.roadmap-grid { display: grid; gap: 2.4rem; }
@media (min-width: 1024px) {
  .roadmap-line { display: block; }
  .roadmap-grid { grid-template-columns: repeat(4, 1fr); gap: 1.6rem; }
}
.roadmap-item { position: relative; padding-top: 1.7rem; }
.roadmap-phase {
  display: flex; align-items: center; gap: .55rem;
  font-family: "Space Grotesk", sans-serif;
  font-size: .74rem;
  font-weight: 700;
  letter-spacing: .16em;
  text-transform: uppercase;
  color: var(--forest-500);
}
.roadmap-now {
  font-size: .58rem;
  font-weight: 700;
  letter-spacing: .12em;
  padding: .16rem .55rem;
  border-radius: 999px;
  color: #8a530d;
  background: linear-gradient(120deg, #ffe9ad, #f3da8a);
  border: 1px solid rgba(176, 111, 10, .3);
}
.roadmap-title { margin-top: .55rem; font-family: "Space Grotesk", sans-serif; font-size: 1.35rem; font-weight: 700; color: #103b27; }
.roadmap-text { margin-top: .5rem; font-size: .95rem; color: rgba(24, 87, 55, .72); line-height: 1.65; }

/* ---------- FAQ (native details/summary accordion) ---------- */
.faq-item {
  border: 1px solid rgba(47, 163, 98, .16);
  border-radius: 1.1rem;
  background: #fff;
  box-shadow: 0 8px 30px -22px rgba(16, 68, 44, .35);
  overflow: hidden;
  transition: border-color .25s ease;
}
.faq-item[open] { border-color: rgba(233, 173, 42, .45); }
.faq-item summary {
  list-style: none;
  cursor: pointer;
  display: flex; align-items: center; justify-content: space-between; gap: 1rem;
  padding: 1.15rem 1.4rem;
  font-family: "Space Grotesk", sans-serif;
  font-weight: 700;
  color: #103b27;
}
.faq-item summary::-webkit-details-marker { display: none; }
.faq-item summary::after {
  content: "+";
  flex: none;
  font-size: 1.45rem;
  font-weight: 400;
  line-height: 1;
  color: var(--forest-500);
  transition: transform .25s ease;
}
.faq-item[open] summary::after { transform: rotate(45deg); color: var(--gold-500); }
.faq-item p { padding: 0 1.4rem 1.25rem; color: rgba(24, 87, 55, .75); line-height: 1.65; }

/* ---------- Waitlist success state ---------- */
.waitlist-success {
  margin: 3rem auto 0;
  max-width: 28rem;
  padding: 1rem 1.6rem;
  border-radius: 999px;
  font-weight: 600;
  color: var(--forest-700);
  background: rgba(47, 163, 98, .1);
  border: 1px solid rgba(47, 163, 98, .32);
}

/* ============================================================
   PREMIUM MOTION LAYER — cinematic hero intro, scroll progress,
   3D tilt + glare cards, roadmap line draw, magnetic buttons
   ============================================================ */

/* ---- Scroll progress bar (top of viewport) ---- */
#scroll-progress {
  position: fixed;
  top: 0; left: 0; right: 0;
  height: 3px;
  z-index: 1000;
  pointer-events: none;
}
#scroll-progress span {
  display: block;
  height: 100%;
  transform-origin: left center;
  transform: scaleX(0);
  background: linear-gradient(90deg, #1f8a4f, #2fa362 45%, #e9ad2a);
  box-shadow: 0 0 10px rgba(47, 163, 98, .55);
}

/* ---- Hero intro: headline words rise out of a mask, then copy/CTAs/stats follow ----
   Animations are keyed on body:not(.gated) so on a first (PIN-gated) visit the
   whole sequence starts the moment the gate unlocks, not while it is hidden. */
.hw {
  display: inline-block;
  overflow: hidden;
  vertical-align: bottom;
  /* room for descenders inside the overflow mask (tight leading would clip "p"/"g") */
  padding-bottom: .13em;
  margin-bottom: -.13em;
}
.hw-in { display: inline-block; transform: translateY(112%); }
body:not(.gated) .hw-in {
  animation: hwRise .85s cubic-bezier(.19, .72, .22, 1) forwards;
  animation-delay: calc(.15s + var(--wi, 0) * .07s);
}
@keyframes hwRise { to { transform: translateY(0); } }

.hero-el { opacity: 0; }
body:not(.gated) .hero-el {
  animation: heroElUp .8s cubic-bezier(.2, .75, .25, 1) both;
  animation-delay: calc(.85s + var(--he, 0) * .16s);
}
@keyframes heroElUp {
  from { opacity: 0; transform: translateY(22px); }
  to   { opacity: 1; transform: none; }
}

/* ---- 3D tilt + light glare on cards (JS feeds --rx/--ry/--mx/--my) ---- */
.tilt {
  transform: perspective(950px) rotateX(var(--rx, 0deg)) rotateY(var(--ry, 0deg)) translate3d(0, var(--lift, 0px), 0);
  transition: transform .18s ease-out, box-shadow .3s ease, border-color .3s ease, background .3s ease;
  will-change: transform;
}
.tilt:hover {
  --lift: -6px;
  transform: perspective(950px) rotateX(var(--rx, 0deg)) rotateY(var(--ry, 0deg)) translate3d(0, var(--lift, 0px), 0);
}
.glare { position: relative; }
.glare::after {
  content: "";
  position: absolute;
  inset: 0;
  border-radius: inherit;
  pointer-events: none;
  background: radial-gradient(420px circle at var(--mx, 50%) var(--my, 50%), rgba(255, 255, 255, .38), transparent 46%);
  mix-blend-mode: soft-light;
  opacity: 0;
  transition: opacity .35s ease;
}
.glare:hover::after { opacity: 1; }

/* ---- Roadmap: the timeline draws itself, dots pop in, a gold spark travels it ---- */
.roadmap-line {
  transform: scaleX(0);
  transform-origin: left center;
  transition: transform 1.6s cubic-bezier(.22, .7, .2, 1) .15s;
}
.roadmap.is-visible .roadmap-line { transform: scaleX(1); }
.roadmap-line::after {
  content: "";
  position: absolute;
  top: 50%; left: 0;
  width: 9px; height: 9px;
  margin-top: -4.5px;
  border-radius: 999px;
  background: #ffe28a;
  box-shadow: 0 0 12px 3px rgba(233, 173, 42, .65);
  opacity: 0;
}
.roadmap.is-visible .roadmap-line::after { animation: roadTravel 7s ease-in-out 1.9s infinite; }
@keyframes roadTravel {
  0%   { left: 0%; opacity: 0; }
  6%   { opacity: 1; }
  94%  { opacity: 1; }
  100% { left: calc(100% - 9px); opacity: 0; }
}
/* ---------- Reduced motion ---------- */
@media (prefers-reduced-motion: reduce) {
  .hw-in { transform: none !important; animation: none !important; }
  .hero-el { opacity: 1 !important; animation: none !important; }
  .tilt, .tilt:hover { transform: none !important; }
  .glare::after { display: none; }
  .roadmap-line { transform: scaleX(1) !important; transition: none !important; }
  .roadmap-line::after { animation: none !important; }
  .reveal { filter: none !important; }
}

/* ---------- Reduced motion ---------- */
@media (prefers-reduced-motion: reduce) {
  /* .marquee__track intentionally NOT stilled — the ticker must always move
     (same decision as the app-modal carousel; OS "animation effects off" was
     why it read as stuck) */
  .floaty, .no-webgl .globe-fallback,
  .aurora, .particle, .text-gradient, .blob--drift, .blob--drift2,
  .sun, .cloud, .tech-check, .tech-check::after, .step-arrow,
  #superpowers::before, .scroll-cue,
  .legend-fill,
  .rb-fill, .rb-fill::after,
  /* .token-badge-dot and .live-chip-dot deliberately NOT listed: the tiny
     "live" status blink must always run (explicit user requirement) — it is
     a 6px status LED, not vestibular-heavy motion. */
  .app-pin, body::before { animation: none !important; }
  .particle { opacity: 0 !important; }
  .rb-fill { transform: scaleY(1) !important; }
  .legend-fill { width: var(--w) !important; }
  .legend, .reward-note { opacity: 1 !important; transform: none !important; }
  .reveal { opacity: 1; transform: none; transition: none; }
  #site-content, .app-screen, .app-modal, .app-modal-panel { transition: none !important; }
  html { scroll-behavior: auto; }
}

/* ============================================================
   VISUAL POLISH LAYER — items 1-18 from the design review
   (appended last so equal-specificity overrides win)
   ============================================================ */

/* ---- 1. Hero stat pills: gradient number + top hairline ---- */
.stat-pill { position: relative; overflow: hidden; }
.stat-pill::before {
  content: "";
  position: absolute;
  top: 0; left: 0; right: 0;
  height: 2px;
  background: linear-gradient(90deg, #2fa362, #e9ad2a);
  opacity: .85;
}
.stat-pill .stat-num {
  font-size: 1.7rem;
  background: linear-gradient(120deg, #1a6e41, #2fa362 55%, #d4900f);
  -webkit-background-clip: text;
  background-clip: text;
  color: transparent;
}

/* ---- 4. Superpowers: gold border glow on hover ---- */
.power-card:hover {
  box-shadow:
    0 24px 60px -24px rgba(0, 0, 0, .55),
    0 0 0 1px rgba(233, 173, 42, .35),
    0 0 38px -8px rgba(47, 163, 98, .4);
}

/* ---- 5. Film grain on the dark sections ---- */
#superpowers::after,
#token::after,
#site-content footer::after {
  content: "";
  position: absolute;
  inset: 0;
  pointer-events: none;
  opacity: .06;
  mix-blend-mode: overlay;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='160' height='160' filter='url(%23n)'/%3E%3C/svg%3E");
  background-size: 160px 160px;
}
#site-content footer { position: relative; overflow: hidden; }

/* ---- 7. Vision icon badges: round, richer, springy hover ---- */
.icon-badge {
  height: 3.6rem; width: 3.6rem;
  border-radius: 999px;
  background: radial-gradient(circle at 30% 25%, rgba(139, 213, 168, .45), rgba(47, 163, 98, .15) 62%, rgba(233, 173, 42, .14));
  transition: transform .45s cubic-bezier(.34, 1.56, .64, 1);
}
.card:hover .icon-badge { transform: translateY(-4px) rotate(-8deg) scale(1.08); }

/* ---- 8. Rewards chart: glassier card, bigger values, gold glow on total ---- */
.reward-chart {
  background: rgba(255, 255, 255, .82);
  backdrop-filter: blur(10px);
  -webkit-backdrop-filter: blur(10px);
  border-color: rgba(233, 173, 42, .28);
  box-shadow: 0 30px 70px -34px rgba(16, 68, 44, .5), 0 8px 32px rgba(16, 68, 44, .08);
}
.rc-grid i { font-size: .7rem; color: rgba(24, 87, 55, .55); }
/* "1xPLNT"-style values are longer than the old "€1" — size to fit the column */
.rb-val { font-size: 1.1rem; }
.reward-bar--total .rb-val { font-size: 1.3rem; }
.reward-bar--total .rb-fill {
  box-shadow:
    0 0 0 1px rgba(255, 255, 255, .18) inset,
    0 10px 26px -8px rgba(176, 111, 10, .6),
    0 0 30px -2px rgba(233, 173, 42, .5);
}

/* ---- 9. Metric cards: icon + sweeping top accent line ---- */
.metric-card { position: relative; overflow: hidden; }
.metric-card::before {
  content: "";
  position: absolute;
  top: 0; left: 0; right: 0;
  height: 3px;
  background: linear-gradient(90deg, #2fa362, #e9ad2a);
  opacity: 0;
  transform: scaleX(.35);
  transform-origin: left center;
  transition: opacity .3s ease, transform .45s ease;
}
.metric-card:hover::before { opacity: 1; transform: scaleX(1); }
.metric-ico {
  display: inline-flex; align-items: center; justify-content: center;
  width: 2.4rem; height: 2.4rem;
  border-radius: .7rem;
  color: var(--forest-700);
  background: linear-gradient(140deg, rgba(47, 163, 98, .14), rgba(233, 173, 42, .12));
  margin-bottom: .8rem;
}
.metric-ico svg { width: 1.25rem; height: 1.25rem; }
.metric-card--accent .metric-ico { color: #ffe8ad; background: rgba(255, 255, 255, .12); }

/* ---- 10. Tokenomics legend: thicker bars + looping light sweep ---- */
.legend-bar { height: 11px; }
.legend-fill { position: relative; overflow: hidden; }
.legend-fill::after {
  content: "";
  position: absolute;
  inset: 0;
  background: linear-gradient(100deg, transparent 25%, rgba(255, 255, 255, .55) 50%, transparent 75%);
  transform: translateX(-100%);
  animation: legendShine 3.4s ease-in-out infinite;
}
.legend:nth-child(1) .legend-fill::after { animation-delay: 1.3s; }
.legend:nth-child(2) .legend-fill::after { animation-delay: 1.55s; }
.legend:nth-child(3) .legend-fill::after { animation-delay: 1.8s; }
.legend:nth-child(4) .legend-fill::after { animation-delay: 2.05s; }
.legend:nth-child(5) .legend-fill::after { animation-delay: 2.3s; }
@keyframes legendShine {
  0%, 55% { transform: translateX(-100%); }
  100%    { transform: translateX(100%); }
}

/* ---- 11. Token fact cards: gold hover glow (icons in .tf-ico above) ---- */
.token-fact:hover {
  box-shadow: 0 18px 44px -20px rgba(0, 0, 0, .5), 0 0 24px -6px rgba(233, 173, 42, .35);
}

/* ---- 12. Roadmap phases as cards, active phase emphasized ---- */
.roadmap-item {
  margin-top: 2.2rem;
  padding: 1.5rem 1.4rem 1.4rem;
  border-radius: 1.2rem;
  background: rgba(255, 255, 255, .68);
  border: 1px solid rgba(47, 163, 98, .16);
  box-shadow: 0 14px 40px -30px rgba(16, 68, 44, .45);
  transition: transform .3s ease, box-shadow .3s ease, border-color .3s ease;
}
.roadmap-item:hover {
  transform: translateY(-4px);
  border-color: rgba(233, 173, 42, .4);
  box-shadow: 0 20px 48px -28px rgba(16, 68, 44, .55);
}
.roadmap-item--now {
  background: linear-gradient(165deg, #ffffff, #eefaf2);
  border-color: rgba(47, 163, 98, .45);
  box-shadow: 0 18px 48px -26px rgba(31, 138, 79, .55);
}
/* "WE ARE HERE" — small chip with a blinking status dot (same liveDot blink
   as the nav badge), sitting ON the connecting line just before Phase 02.
   The phase circles were removed on purpose — this is the only marker. */
.roadmap-here {
  position: absolute;
  display: inline-flex;
  align-items: center;
  gap: .4rem;
  white-space: nowrap;
  padding: .22rem .6rem;
  border-radius: 999px;
  font-family: "Space Grotesk", sans-serif;
  font-size: .6rem;
  font-weight: 700;
  letter-spacing: .14em;
  text-transform: uppercase;
  color: var(--forest-700);
  background: rgba(255, 255, 255, .95);
  border: 1px solid rgba(47, 163, 98, .35);
  box-shadow: 0 6px 18px -8px rgba(16, 68, 44, .4);
  z-index: 2;
  pointer-events: none;
  /* mobile: on the vertical connector, in the gap above this phase's card */
  left: -3px;
  top: calc(-2.2rem - 1.9rem);
}
.roadmap-here-dot {
  flex: none;
  width: 8px; height: 8px;
  border-radius: 999px;
  background: #2fa362;
  animation: liveDot 1.3s ease-in-out infinite;
}
@media (min-width: 1024px) {
  .roadmap-here {
    /* desktop: centered on the horizontal line, right before Phase 02 */
    left: -1.6rem;
    top: calc(-2.2rem + 6px);
    transform: translateY(-50%);
  }
}

/* mobile: vertical connector line between the phases (the horizontal
   .roadmap-line only exists on desktop) */
.roadmap-item::before {
  content: "";
  position: absolute;
  left: 5px;
  top: calc(-2.2rem + 2px);
  bottom: calc(-2.4rem - 1px);
  width: 2px;
  border-radius: 999px;
  background: linear-gradient(180deg, rgba(47, 163, 98, .55), rgba(139, 213, 168, .35));
}
.roadmap-item:last-child::before { bottom: 100%; }
@media (min-width: 1024px) {
  .roadmap-item::before { display: none; }
}

/* ---- 13. FAQ: stronger hover state ---- */
.faq-item { transition: border-color .25s ease, box-shadow .25s ease; }
.faq-item:hover {
  border-color: rgba(47, 163, 98, .4);
  box-shadow: 0 14px 40px -24px rgba(16, 68, 44, .45);
}
.faq-item summary { transition: color .2s ease; }
.faq-item summary:hover { color: var(--forest-700); }

/* ---- 14. Footer links with icons ---- */
.footer-link--ico { display: inline-flex; align-items: center; gap: .55rem; }
.footer-link--ico svg { width: 1rem; height: 1rem; flex: none; opacity: .8; }

/* ---- 17. Back-to-top button (coin + chevron badge) ---- */
#back-top {
  position: fixed;
  right: 1.25rem; bottom: 1.25rem;
  z-index: 60;
  display: flex; align-items: center; justify-content: center;
  width: 3.2rem; height: 3.2rem;
  border-radius: 999px;
  background: rgba(255, 255, 255, .85);
  backdrop-filter: blur(8px);
  -webkit-backdrop-filter: blur(8px);
  border: 1px solid rgba(47, 163, 98, .25);
  box-shadow: 0 14px 34px -14px rgba(16, 68, 44, .5);
  opacity: 0;
  transform: translateY(16px);
  pointer-events: none;
  transition: opacity .35s ease, transform .35s ease, box-shadow .25s ease;
}
#back-top.show { opacity: 1; transform: none; pointer-events: auto; }
#back-top:hover { box-shadow: 0 18px 40px -14px rgba(16, 68, 44, .6), 0 0 0 1.5px rgba(233, 173, 42, .5); }
#back-top img { width: 2.1rem; height: 2.1rem; }
#back-top svg {
  position: absolute;
  top: -4px; right: -4px;
  width: 1.1rem; height: 1.1rem;
  padding: 2px;
  border-radius: 999px;
  background: #1f8a4f;
  color: #fff;
  box-shadow: 0 4px 10px -3px rgba(31, 138, 79, .7);
}

/* ---- 18. Section rhythm: warm cream band for How it works, cool band for FAQ ---- */
#how {
  background: linear-gradient(180deg,
    rgba(255, 249, 231, 0) 0%,
    rgba(255, 249, 231, .75) 16%,
    rgba(255, 249, 231, .75) 84%,
    rgba(255, 249, 231, 0) 100%);
}
#faq {
  background: linear-gradient(180deg,
    rgba(238, 249, 255, 0) 0%,
    rgba(238, 249, 255, .6) 18%,
    rgba(238, 249, 255, .6) 82%,
    rgba(238, 249, 255, 0) 100%);
}

/* ---- Rewards: CO2 absorption-by-age strip (the "why" behind growing rewards) ---- */
.co2-curve {
  padding: 1.9rem 1.6rem 1.6rem;
  border-radius: 1.5rem;
  background: linear-gradient(165deg, #ffffff, #f0faf4);
  border: 1px solid rgba(47, 163, 98, .18);
  box-shadow: 0 14px 44px -30px rgba(16, 68, 44, .45);
}
.co2-curve-title {
  font-family: "Space Grotesk", sans-serif;
  font-size: 1.15rem;
  font-weight: 700;
  color: #103b27;
}
.co2-curve-sub { margin-top: .3rem; font-size: .88rem; color: rgba(24, 87, 55, .6); }
.co2-steps {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: clamp(.5rem, 2vw, 1rem);
  align-items: end;
  margin-top: 1.5rem;
}
.co2-step {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: flex-end;
  text-align: center;
}
.co2-kg {
  font-family: "Space Grotesk", sans-serif;
  font-weight: 700;
  font-size: clamp(.8rem, 2.2vw, .98rem);
  color: #1a6e41;
  margin-bottom: .45rem;
}
.co2-fill {
  display: block;
  width: clamp(30px, 8vw, 46px);
  height: var(--h);
  border-radius: .5rem .5rem .2rem .2rem;
  background: linear-gradient(180deg, #6ee0a0, #1f8a4f 70%);
  box-shadow: 0 8px 18px -8px rgba(31, 138, 79, .5);
  transform-origin: bottom center;
  transform: scaleY(0);
}
.reveal.is-visible .co2-fill {
  animation: rbGrow 1s cubic-bezier(.2, .85, .25, 1) forwards;
  animation-delay: calc(var(--i) * .14s);
}
.co2-step--max .co2-fill {
  background: linear-gradient(180deg, #ffe28a, #e9ad2a 70%);
  box-shadow: 0 8px 20px -8px rgba(176, 111, 10, .55);
}
.co2-step--max .co2-kg { color: #b06f0a; }
.co2-age { margin-top: .5rem; font-size: clamp(.66rem, 1.8vw, .8rem); color: rgba(24, 87, 55, .65); }

/* ---- CO2 facts section: big comparison numbers + closing note ---- */
.fact-num {
  margin-bottom: .4rem;
  font-family: "Space Grotesk", sans-serif;
  font-size: 2.1rem;
  font-weight: 700;
  line-height: 1.1;
}
.fact-num small {
  font-size: .95rem;
  font-weight: 600;
  color: rgba(24, 87, 55, .55);
  letter-spacing: .04em;
}
.fact-note {
  padding: 1.4rem 1.8rem;
  border-radius: 1.25rem;
  text-align: center;
  font-size: 1.02rem;
  line-height: 1.7;
  color: #185737;
  background: linear-gradient(120deg, rgba(233, 173, 42, .12), rgba(47, 163, 98, .1));
  border: 1px solid rgba(233, 173, 42, .32);
  box-shadow: 0 14px 40px -30px rgba(16, 68, 44, .4);
}
.fact-note b { color: #103b27; }

/* ---- Facts: lifestyle -> trees calculator ---- */
.co2-calc {
  padding: 1.9rem 1.6rem;
  border-radius: 1.5rem;
  background: linear-gradient(165deg, #ffffff, #f0faf4);
  border: 1px solid rgba(47, 163, 98, .18);
  box-shadow: 0 14px 44px -30px rgba(16, 68, 44, .45);
}
.co2-calc-title {
  font-family: "Space Grotesk", sans-serif;
  font-size: 1.15rem;
  font-weight: 700;
  color: #103b27;
}
.co2-calc-sub { margin-top: .3rem; font-size: .88rem; color: rgba(24, 87, 55, .6); }
.co2-calc-grid { display: grid; gap: 1.2rem 2.4rem; margin-top: 1.5rem; }
@media (min-width: 768px) { .co2-calc-grid { grid-template-columns: 1fr 1fr; } }
.calc-field label { display: block; font-weight: 600; font-size: .92rem; color: #185737; }
.calc-field input[type="range"] {
  width: 100%;
  margin-top: .55rem;
  accent-color: var(--forest-500);
  cursor: pointer;
}
.calc-field output {
  display: block;
  margin-top: .15rem;
  font-family: "Space Grotesk", sans-serif;
  font-weight: 700;
  font-size: .95rem;
  color: var(--forest-700);
}
.calc-field--toggle { align-self: center; }
.calc-field--toggle label { display: flex; align-items: center; gap: .6rem; cursor: pointer; }
.calc-field--toggle input { width: 1.05rem; height: 1.05rem; accent-color: var(--forest-500); cursor: pointer; }
.co2-calc-result {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 1rem 2rem;
  margin-top: 1.7rem;
  padding-top: 1.5rem;
  border-top: 1px dashed rgba(47, 163, 98, .28);
}
.calc-trees {
  font-family: "Space Grotesk", sans-serif;
  font-weight: 700;
  font-size: clamp(1.1rem, 2.4vw, 1.35rem);
  color: #103b27;
}
.calc-trees b { font-size: clamp(1.8rem, 3.6vw, 2.3rem); font-weight: 700; }
.calc-co2-line { margin-top: .2rem; font-size: .92rem; color: rgba(24, 87, 55, .68); }
.calc-co2-line b { font-family: "Space Grotesk", sans-serif; color: #103b27; }
.co2-calc-result .btn-primary { margin-left: auto; }

/* ---- Investors & partners strip ---- */
.investor-strip {
  display: grid;
  gap: 2rem;
  padding: clamp(1.8rem, 4vw, 3rem);
  border-radius: 1.75rem;
  margin-bottom: 5.5rem;
  color: #eafff3;
  background:
    radial-gradient(60% 80% at 85% 15%, rgba(233, 173, 42, .16), transparent 60%),
    linear-gradient(150deg, #0d3a26, #082a1b);
  border: 1px solid rgba(139, 213, 168, .18);
  box-shadow: 0 30px 70px -40px rgba(8, 42, 27, .8);
}
@media (min-width: 1024px) {
  .investor-strip { grid-template-columns: 1.2fr 1fr; align-items: center; gap: 3rem; }
}
.investor-title {
  margin-top: 1.1rem;
  font-size: clamp(1.6rem, 3vw, 2.2rem);
  font-weight: 700;
  color: #fff;
  letter-spacing: -.01em;
}
.investor-text { margin-top: .8rem; max-width: 34rem; color: rgba(225, 247, 234, .72); line-height: 1.7; }
.investor-contact {
  display: flex;
  flex-direction: column;
  gap: .9rem;
  padding: 1.6rem;
  border-radius: 1.25rem;
  background: rgba(255, 255, 255, .05);
  border: 1px solid rgba(139, 213, 168, .16);
}
.investor-contact-label {
  font-family: "Space Grotesk", sans-serif;
  font-size: .72rem;
  font-weight: 700;
  letter-spacing: .18em;
  text-transform: uppercase;
  color: #bdf0d2;
}
.investor-mail {
  font-family: "Space Grotesk", sans-serif;
  font-size: .95rem;
  font-weight: 600;
  letter-spacing: .01em;
  color: var(--gold-300);
  word-break: break-all;
  transition: color .2s ease;
}
.investor-mail:hover { color: #ffe28a; text-decoration: underline; }
.investor-mail-row { display: flex; align-items: center; gap: .65rem; flex-wrap: wrap; }
.mail-copy {
  flex: none;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 1.9rem;
  height: 1.9rem;
  border-radius: .55rem;
  color: #bdf0d2;
  background: rgba(255, 255, 255, .06);
  border: 1px solid rgba(139, 213, 168, .25);
  transition: color .2s ease, border-color .2s ease, background .2s ease;
}
.mail-copy:hover { color: var(--gold-300); border-color: rgba(233, 173, 42, .5); background: rgba(233, 173, 42, .08); }
.mail-copy svg { width: .95rem; height: .95rem; }
.mail-copy.copied { color: #6ee0a0; border-color: rgba(110, 224, 160, .6); font-size: .85rem; font-weight: 700; }
.investor-actions { display: flex; flex-wrap: wrap; gap: .7rem; margin-top: .35rem; }

/* ---- Gold CTA button (mobile hero "Download app") ---- */
.btn-gold {
  position: relative;
  overflow: hidden;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: .5rem;
  padding: .8rem 1.6rem;
  border-radius: 999px;
  font-weight: 700;
  font-size: .98rem;
  color: #3b2604;
  background: linear-gradient(120deg, #f3cf6b, #e9ad2a 55%, #d4900f);
  box-shadow: 0 12px 30px -12px rgba(212, 144, 15, .65);
  transform: translate3d(var(--mag-x, 0px), var(--mag-y, 0px), 0);
  transition: transform .2s ease, box-shadow .2s ease, filter .2s ease;
}
.btn-gold::before {
  content: "";
  position: absolute;
  top: 0;
  left: -120%;
  width: 70%;
  height: 100%;
  background: linear-gradient(100deg, transparent, rgba(255, 255, 255, .45), transparent);
  transform: skewX(-18deg);
  transition: left .6s ease;
}
.btn-gold:hover::before { left: 130%; }
.btn-gold:hover {
  transform: translate3d(var(--mag-x, 0px), calc(var(--mag-y, 0px) - 2px), 0);
  box-shadow: 0 18px 36px -12px rgba(212, 144, 15, .7), 0 0 0 1.5px rgba(31, 138, 79, .4);
  filter: brightness(1.03);
}
.btn-gold:active { transform: translate3d(var(--mag-x, 0px), var(--mag-y, 0px), 0); }
/* styles.css loads after tailwind.css, so .btn-gold's display would beat the
   lg:hidden utility — re-assert the responsive hide here */
@media (min-width: 1024px) {
  .btn-gold.lg\:hidden { display: none; }
}

/* ---- Reduced-motion fallbacks for the polish layer ---- */
@media (prefers-reduced-motion: reduce) {
  /* .roadmap-here deliberately NOT disabled — status blink always runs */
  .legend-fill::after { animation: none !important; }
  .card:hover .icon-badge { transform: none; }
  #back-top { transition: none; }
  .co2-fill { transform: scaleY(1) !important; animation: none !important; }
}
