/* ---------- hero ---------- */
.hero{
  position:relative;min-height:100svh;
  display:flex;flex-direction:column;align-items:center;justify-content:center;
  text-align:center;
  padding:7rem var(--gutter) 9.5rem;
  overflow:hidden;
}
#bgSpheres{position:absolute;inset:0;width:100%;height:100%;pointer-events:none}
.hero-copy{
  position:relative;z-index:3;max-width:46rem;
  display:flex;flex-direction:column;align-items:center;
}
.hero-mark{filter:drop-shadow(0 8px 22px rgba(255,90,71,.45));margin-bottom:.9rem}
.hero h1{margin:.55rem 0 1.1rem}
.hero h1 em{font-style:normal;color:var(--coral)}
.hero .lede{font-size:clamp(1rem,1.5vw,1.14rem);margin:0 auto .9rem}

/* The three-line version of the pitch. Left-aligned inside a centred block:
   centred bullets are hard to scan once a line wraps. */
.hero-points{
  list-style:none;margin:0 auto 1.9rem;text-align:left;
  display:flex;flex-direction:column;gap:.45rem;
  max-width:30rem;
}
.hero-points li{
  position:relative;padding-left:1.15rem;
  color:var(--muted);font-weight:500;font-size:.98rem;line-height:1.5;
}
.hero-points li::before{
  content:"";position:absolute;left:0;top:.62em;
  width:.42rem;height:.42rem;border-radius:50%;background:var(--coral);
}
.hero-points li:last-child::before{background:var(--gold)}
/* ---------- city search (hero + browse filters) ---------- */
.city-search{position:relative;display:flex;align-items:center;gap:.6rem;z-index:6}
.city-pin{
  position:absolute;left:1.15rem;top:50%;margin-top:-8px;
  color:var(--coral);pointer-events:none;
}
.city-input{
  flex:1 1 18rem;min-width:0;
  font-family:var(--font);font-size:1rem;font-weight:600;color:var(--text);
  background:var(--card);border:1.5px solid var(--line);border-radius:999px;
  padding:.75rem 1.3rem .75rem 2.9rem;
  transition:border-color .25s;
}
.city-input::placeholder{color:var(--muted);font-weight:500}
.city-input:focus{border-color:var(--coral);outline:none}

/* the suggestion list, anchored under the whole box */
.city-suggest{
  position:absolute;top:calc(100% + .5rem);left:0;right:0;
  max-height:17rem;overflow-y:auto;list-style:none;
  background:var(--card);border:1px solid var(--line);border-radius:14px;
  box-shadow:0 18px 44px rgba(0,0,0,.5);
  padding:.4rem;text-align:left;
}
.city-suggest[hidden]{display:none}
.city-opt{
  display:flex;align-items:baseline;gap:.6rem;
  font-size:.92rem;font-weight:600;color:var(--text);
  border-radius:9px;padding:.55rem .75rem;cursor:pointer;
}
.city-opt:hover,.city-opt[aria-selected="true"]{background:var(--card-2)}
.city-opt[aria-selected="true"]{color:var(--coral-soft)}
.city-opt .n{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.city-opt .n b{color:var(--coral-soft);font-weight:800}
.city-opt .c{color:var(--muted);font-size:.82rem;font-weight:600;flex:none}
.city-none{padding:.7rem .75rem;color:var(--muted);font-size:.9rem;font-weight:600}

/* in the hero the box is centred and sits on its own line */
.hero .city-search{
  width:min(34rem,100%);margin:0 auto 1.4rem;justify-content:center;flex-wrap:nowrap;
}
@media (max-width:520px){
  .hero .city-search{flex-wrap:wrap}
  .hero .city-search .btn{width:100%}
}
.hero-load{opacity:0;transform:translateY(22px);animation:heroIn 1s var(--ease-out) forwards}
.hero-load.hl-2{animation-delay:.14s}
.hero-load.hl-3{animation-delay:.28s}
.hero-load.hl-4{animation-delay:.42s}
@keyframes heroIn{to{opacity:1;transform:none}}
@media (prefers-reduced-motion: reduce){
  .hero-load{animation:none;opacity:1;transform:none}
}
.hero-chips{
  display:flex;gap:.6rem;flex-wrap:wrap;justify-content:center;
  margin-top:2.5rem;
}
.chip{
  font-size:.85rem;font-weight:700;color:var(--text);
  background:var(--card);border:1px solid var(--line);border-radius:999px;
  padding:.5rem 1.1rem;
  display:inline-flex;align-items:center;gap:.45rem;
  transition:border-color .25s;
}
.chip:hover{border-color:rgba(255,90,71,.55)}
.chip .cdot{width:.5rem;height:.5rem;border-radius:50%;background:var(--coral);flex:none}
.chip.gold .cdot{background:var(--gold)}
.chip.gold:hover{border-color:rgba(255,181,88,.6)}
@media (min-width:700px){
  /* gentle arc, echoing the horizon curve below */
  .hero-chips .chip:nth-child(1){transform:translateY(16px)}
  .hero-chips .chip:nth-child(2){transform:translateY(5px)}
  .hero-chips .chip:nth-child(4){transform:translateY(5px)}
  .hero-chips .chip:nth-child(5){transform:translateY(16px)}
}
.hero-curve{
  position:absolute;left:50%;bottom:-1px;transform:translateX(-50%);
  width:175%;min-width:64rem;height:11.5rem;
  background:var(--ink-2);
  border:1px solid var(--line);border-bottom:0;
  border-radius:100% 100% 0 0;
  z-index:1;
}
/* ---------- a section that is the whole page ---------- */
.section-page{min-height:100svh;display:flex;align-items:center}
.section-page > .section-inner{width:100%}

/* ---------- live map ---------- */
.map-wrap{
  position:relative;
  height:min(62vh,40rem);min-height:22rem;
  margin-top:2.4rem;
}
#sim{position:absolute;inset:0;width:100%;height:100%}


.sim-tip{
  position:absolute;z-index:5;pointer-events:none;
  background:rgba(27,27,30,.96);border:1px solid var(--line);
  border-radius:14px;padding:.6rem .9rem;
  font-size:.85rem;line-height:1.45;white-space:nowrap;
  transform:translate(-50%,-124%);
  opacity:0;transition:opacity .18s;
  box-shadow:0 12px 32px rgba(0,0,0,.5);
}
.sim-tip.on{opacity:1}
.sim-tip .tip-name{font-weight:700;display:block}
.sim-tip .tip-meta{color:var(--muted);display:block;font-weight:500}
.sim-tip .tip-count{color:var(--coral-soft);font-weight:700}
.sim-tip.ngo .tip-count{color:var(--gold)}


/* ---------- how it works ---------- */
.how-steps{
  display:grid;grid-template-columns:repeat(3,1fr);
  gap:clamp(1.1rem,2.6vw,2rem);
  margin-top:3rem;
}
.step{
  background:var(--card);border:1px solid var(--line);border-radius:var(--r-card);
  padding:1.6rem 1.5rem 1.8rem;
  display:flex;flex-direction:column;gap:1.1rem;
  transition:transform .25s var(--ease-out),border-color .25s;
}
.step:hover{transform:translateY(-3px);border-color:#3A3A40}
.step h2,.step h3{font-weight:700;font-size:1.12rem;line-height:1.3;letter-spacing:normal}
.step p{color:var(--muted);font-size:.94rem;font-weight:500}
.step .step-tag{
  align-self:flex-start;
  font-size:.7rem;font-weight:800;letter-spacing:.18em;text-transform:uppercase;
  color:#fff;background:linear-gradient(150deg,#FF7259,var(--coral-deep));
  border-radius:999px;padding:.28rem .8rem;
}
.vignette{
  height:8.2rem;border-radius:14px;background:var(--ink-2);
  border:1px solid var(--line);
  display:flex;align-items:center;justify-content:center;
  overflow:hidden;position:relative;
}
@media (max-width:860px){
  .how-steps{grid-template-columns:1fr;max-width:26rem}
}
/* vignette 2: surfacing bubbles */
.v-bubbles{position:absolute;inset:0}
.v-b{
  position:absolute;border-radius:50%;
  background:radial-gradient(circle at 32% 28%, #FF8A6E, var(--coral-deep) 78%);
  transform:scale(0);
}
.v-b.gold{background:radial-gradient(circle at 32% 28%, #FFC479, var(--gold-deep) 78%)}
.v-b.hollow{
  background:var(--card-2);
  box-shadow:inset 0 0 0 1.5px rgba(255,90,71,.65);
}
.in .v-b{animation:bPop .8s var(--ease-snap) forwards, bFloat 4.5s ease-in-out infinite 1s}
.in .v-b:nth-child(1){animation-delay:.1s,1s}
.in .v-b:nth-child(2){animation-delay:.25s,1.2s}
.in .v-b:nth-child(3){animation-delay:.4s,1.4s}
.in .v-b:nth-child(4){animation-delay:.55s,1.1s}
.in .v-b:nth-child(5){animation-delay:.7s,1.3s}
@keyframes bPop{to{transform:scale(1)}}
@keyframes bFloat{50%{translate:0 -6px}}
/* vignette 3: crowd row */
.v-crowd{display:flex;align-items:center;gap:.4rem}
.v-a{
  width:2.15rem;height:2.15rem;border-radius:50%;
  background:linear-gradient(150deg,#FF8A6E,var(--coral-deep));
  display:flex;align-items:center;justify-content:center;
  font-size:.68rem;font-weight:800;color:#fff;
  opacity:0;transform:translateX(-14px);
}
.v-a:nth-child(2){background:linear-gradient(150deg,#FFC479,var(--gold-deep))}
.v-a:nth-child(4){background:var(--card-2);box-shadow:inset 0 0 0 1.5px rgba(255,90,71,.6);color:var(--coral-soft)}
.in .v-a{animation:aIn .5s var(--ease-out) forwards}
.in .v-a:nth-child(2){animation-delay:.15s}
.in .v-a:nth-child(3){animation-delay:.3s}
.in .v-a:nth-child(4){animation-delay:.45s}
.in .v-a:nth-child(5){animation-delay:.6s}
.v-count{
  margin-left:.5rem;font-size:.85rem;font-weight:700;color:var(--coral-soft);
  opacity:0;
}
.in .v-count{animation:aIn .5s var(--ease-out) .8s forwards}
@keyframes aIn{to{opacity:1;transform:none}}
@media (prefers-reduced-motion: reduce){
  .in .v-city,.in .v-b,.in .v-a,.in .v-count{animation:none;opacity:1;transform:none}
}

/* ---------- interlude ---------- */
.interlude{padding:calc(var(--sect) * 1.1) var(--gutter)}
.giant{
  font-weight:800;letter-spacing:-.02em;
  font-size:clamp(2rem, 6.4vw, 5rem);line-height:1.08;
  max-width:17em;margin:0 auto;text-wrap:balance;
}
.giant em{font-style:normal;color:var(--coral)}


/* ---------- impact / NGO ---------- */
.impact .eyebrow{color:var(--gold)}
.impact h1,.impact h2{max-width:16em}
.impact .lede{margin-top:1.1rem}
.impact-line{
  font-weight:800;letter-spacing:-.01em;
  font-size:clamp(1.25rem,2.6vw,1.9rem);line-height:1.3;
  color:var(--gold);max-width:24em;margin-top:2.2rem;text-wrap:balance;
}
.impact-bubbles{display:flex;gap:.9rem;flex-wrap:wrap;margin-top:2.6rem}
.ib{
  display:flex;gap:.85rem;align-items:center;
  background:var(--card);border:1px solid rgba(255,181,88,.35);border-radius:var(--r-card);
  padding:.8rem 1.1rem;
  transition:transform .25s var(--ease-out),border-color .25s;
}
.ib:hover{transform:translateY(-2px);border-color:rgba(255,181,88,.65)}
.ib strong{display:block;font-size:.95rem;font-weight:700}
.ib span{color:var(--muted);font-size:.8rem;font-weight:600}


/* ---------- button rows ---------- */
.hero-cta{display:flex;gap:.7rem;flex-wrap:wrap;align-items:center}
.org-cta{margin-top:2.5rem;display:flex;align-items:center;gap:1.4rem;flex-wrap:wrap}

/* ---------- map empty / error state ---------- */
.map-empty{
  position:absolute;inset:0;display:flex;align-items:center;justify-content:center;
  text-align:center;padding:0 1.5rem;
  color:var(--muted);font-weight:600;
}
.map-empty[hidden]{display:none}

/* ---------- vignette 4: chatroom ---------- */
.v-chat{
  position:absolute;inset:0;display:flex;flex-direction:column;
  justify-content:center;gap:.45rem;padding:0 1.4rem;
}
.v-line{
  height:.5rem;border-radius:999px;background:var(--card-2);
  border:1px solid var(--line);width:78%;
}
.v-line.short{width:52%;align-self:flex-end;background:rgba(255,90,71,.28);border-color:rgba(255,90,71,.4)}
.v-poll{
  margin-top:.35rem;font-size:.66rem;font-weight:700;color:var(--coral-soft);
  background:rgba(255,90,71,.1);border:1px solid rgba(255,90,71,.35);
  border-radius:999px;padding:.3rem .7rem;align-self:flex-start;
}