/* One motion style, triggered by desktop hover or a short mobile viewport visit. */
.map-motion-decoration{opacity:0;pointer-events:none}
.map-search-traces{position:absolute;inset:0;width:100%;height:100%;z-index:7}
.map-search-traces path{stroke:#bdd0e1;stroke-width:1.4;stroke-dasharray:4 7;stroke-linecap:round}
.map-route-stream{stroke-dasharray:3 14}
.map-route-traveler{offset-path:var(--map-route);offset-rotate:auto;offset-anchor:0px 0px}
[data-map-motion] .slot{--map-signal:#2e78dc}
[data-map-motion] .slot.fact{--map-signal:#2b9b8f}
[data-map-motion] .slot.rule{--map-signal:#ef8b2c}
[data-map-motion] .slot.method{--map-signal:#6d63c8}
[data-map-motion="fresh"] .slot::after{content:"";position:absolute;inset:-7px;border:1px solid var(--map-signal);border-radius:50%;opacity:0;pointer-events:none}
[data-map-motion="fresh"] .map-area::after{content:"";position:absolute;inset:0;z-index:9;background:linear-gradient(110deg,transparent 30%,rgba(255,255,255,.42) 49%,transparent 66%);transform:translateX(-130%);opacity:0;pointer-events:none}
[data-map-motion="guided"] .goal-dot::after{content:"";position:absolute;inset:-10px;border:1.5px solid currentColor;border-radius:50%;opacity:0;pointer-events:none}

/* Give each tall hero card a reachable resting position between chapter snaps. */
@media(max-width:1100px){
  #top.hero,#top .stage{overflow:clip}
  #top .triptych>section{scroll-snap-align:center;scroll-snap-stop:normal}
}

@media(prefers-reduced-motion:no-preference){
  /* Lost: short attempts, hesitation and retreat; the two agents search separately. */
  [data-map-motion="lost"].is-map-playing .ai-chat,
  [data-map-motion="lost"].is-map-playing .beam-chat{animation:map-lost-chat 6.8s ease-in-out infinite}
  [data-map-motion="lost"].is-map-playing .ai-ds,
  [data-map-motion="lost"].is-map-playing .beam-ds{animation:map-lost-ds 7.6s ease-in-out -.8s infinite}
  [data-map-motion].is-map-playing .map-search-traces{opacity:1}
  [data-map-motion].is-map-playing .map-search-traces path{animation:map-search-attempt 6.8s ease-in-out infinite}
  [data-map-motion].is-map-playing .map-search-traces path+path{animation-delay:-2.1s}
  [data-map-motion="lost"].is-map-playing .unknown-mark{animation:map-unknown 5.2s ease-in-out var(--map-phase,0s) infinite}

  /* Fresh: every point breathes at a different phase, retaining its shape and color. */
  [data-map-motion="fresh"].is-map-playing .slot{animation:map-node-wake 4.2s ease-in-out var(--map-phase,0s) infinite}
  [data-map-motion="fresh"].is-map-playing .slot::after{animation:map-node-ring 4.2s ease-out var(--map-phase,0s) infinite}
  [data-map-motion="fresh"].is-map-playing .map-area::after{animation:map-renew-sweep 5.8s ease-in-out infinite}

  /* Guided: chevrons and highlights always travel from the agents towards the goals. */
  [data-map-motion].is-map-playing .map-route-stream{opacity:.8;animation:map-route-flow 2s linear infinite}
  [data-map-motion].is-map-playing .map-route-traveler{animation:map-route-travel 3.2s linear var(--travel-phase,0s) infinite}
  [data-map-motion].is-map-playing .map-reasoning-route{animation:map-reasoning-flow 1.8s linear infinite}
  [data-map-motion="guided"].is-map-playing .goal-dot::after{animation:map-arrival 3.2s ease-out infinite}
  [data-map-motion="guided"].is-map-playing .goal-ds::after{animation-delay:-1.1s}
}

@keyframes map-lost-chat{
  0%,100%{transform:translate(0,0) rotate(0)}
  14%{transform:translate(16px,-10px) rotate(-12deg)}
  25%{transform:translate(16px,-10px) rotate(8deg)}
  42%{transform:translate(-10px,13px) rotate(11deg)}
  55%{transform:translate(-10px,13px) rotate(-9deg)}
  73%{transform:translate(9px,20px) rotate(14deg)}
  86%{transform:translate(-4px,6px) rotate(-7deg)}
}
@keyframes map-lost-ds{
  0%,100%{transform:translate(0,0) rotate(0)}
  18%{transform:translate(-19px,-9px) rotate(13deg)}
  31%{transform:translate(-19px,-9px) rotate(-10deg)}
  49%{transform:translate(8px,-22px) rotate(-13deg)}
  60%{transform:translate(8px,-22px) rotate(8deg)}
  79%{transform:translate(-12px,8px) rotate(12deg)}
}
@keyframes map-search-attempt{
  0%,100%{opacity:0;stroke-dashoffset:0}
  22%{opacity:.42;stroke-dashoffset:-18}
  45%{opacity:.3;stroke-dashoffset:-25}
  64%{opacity:.5;stroke-dashoffset:-8}
  86%{opacity:0;stroke-dashoffset:9}
}
@keyframes map-unknown{
  0%,100%{opacity:.65;transform:scale(1)}
  42%{opacity:1;transform:scale(1.18);color:rgba(255,255,255,.55)}
  68%{opacity:.55;transform:scale(.96)}
}
@keyframes map-node-wake{
  0%,100%{opacity:.8;transform:scale(1);filter:brightness(1)}
  32%{opacity:1;transform:scale(1.28);filter:brightness(1.18)}
  58%{opacity:1;transform:scale(1);filter:brightness(1)}
  78%{opacity:.56;transform:scale(.95);filter:brightness(.98)}
}
@keyframes map-node-ring{
  0%,14%{opacity:0;transform:scale(.45)}
  32%{opacity:.48}
  62%,100%{opacity:0;transform:scale(1.65)}
}
@keyframes map-renew-sweep{
  0%,12%{opacity:0;transform:translateX(-130%)}
  22%{opacity:.75}
  70%{opacity:.6;transform:translateX(130%)}
  82%,100%{opacity:0;transform:translateX(130%)}
}
@keyframes map-route-flow{to{stroke-dashoffset:-34}}
@keyframes map-reasoning-flow{to{stroke-dashoffset:-24}}
@keyframes map-route-travel{
  0%{offset-distance:0%;opacity:0}
  10%,85%{opacity:1}
  100%{offset-distance:100%;opacity:0}
}
@keyframes map-arrival{
  0%,12%{opacity:0;transform:scale(.5)}
  30%{opacity:.55}
  80%,100%{opacity:0;transform:scale(1.5)}
}
