/* ─── Keyframes ──────────────────────────────────────────── */
@keyframes pulse-dot {
  0%   { box-shadow: 0 0 0 0 rgba(5, 150, 105, 0.5); }
  70%  { box-shadow: 0 0 0 6px rgba(5, 150, 105, 0); }
  100% { box-shadow: 0 0 0 0 rgba(5, 150, 105, 0); }
}

@keyframes hairline {
  from { transform: translateX(-100%); }
  to   { transform: translateX(200%); }
}

@keyframes spin {
  to { transform: rotate(360deg); }
}

/* ─── Scroll reveal ──────────────────────────────────────── */
.reveal {
  opacity: 0;
  transform: translateY(20px);
  transition:
    opacity  700ms var(--ease),
    transform 700ms var(--ease);
  transition-delay: var(--reveal-delay, 0ms);
  will-change: opacity, transform;
}
.reveal.is-visible { opacity: 1; transform: translateY(0); }

.reveal--left  { transform: translateX(-20px); }
.reveal--left.is-visible  { transform: translateX(0); }
.reveal--right { transform: translateX(20px); }
.reveal--right.is-visible { transform: translateX(0); }

/* ─── Accordion body ─────────────────────────────────────── */
.pillar__body {
  display: grid;
  grid-template-rows: 0fr;
  transition: grid-template-rows 480ms var(--ease);
}
.pillar__body.is-open {
  grid-template-rows: 1fr;
}
.pillar__inner { overflow: hidden; }

/* Chevron rotation */
.pillar__chevron {
  transition: transform 350ms var(--ease);
  display: flex; align-items: center;
}
.pillar__trigger[aria-expanded="true"] .pillar__chevron {
  transform: rotate(45deg);
}

/* ─── Hairline sweep on status panel ─────────────────────── */
.status-panel {
  position: relative;
  overflow: hidden;
}
.status-panel::after {
  content: '';
  position: absolute; top: 0; left: 0;
  width: 60%;
  height: 1px;
  background: linear-gradient(90deg, transparent, var(--panel-strong), transparent);
  animation: hairline 4s cubic-bezier(0.4, 0, 0.6, 1) infinite;
  pointer-events: none;
}

/* ─── Reduced motion ─────────────────────────────────────── */
@media (prefers-reduced-motion: reduce) {
  .reveal {
    opacity: 1; transform: none; transition: none;
  }
  .pillar__body {
    transition: none;
  }
  .status-panel::after { animation: none; }
  *, *::before, *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
  }
}
