/* Panarc sand transition, version 2 (builder T, 31 Oct 2026). Pairs with sand-transition.js; see sand-transition-v2/README.md.
   Arriving: from before the first paint the old page's ground (::before) and a soft glow in the symbol's colour (::after)
   cover the new page while the sand symbol holds. The page is underneath, in the DOM and readable by assistive tech.
   A CSS failsafe lifts both after 3.2 s even if script fails. */
html.pst-arriving::before,
html.pst-arriving::after {
  content: ""; position: fixed; inset: 0; z-index: 2147483646; pointer-events: none;
  animation: pst-failsafe .3s ease 3.2s forwards;
}
html.pst-arriving::before {
  background-color: var(--pst-bg, #100d14);
  transition: background-color .5s ease, opacity .42s ease;
}
html.pst-arriving::after {
  background-image: radial-gradient(circle at 50% var(--pst-gy, 48%), var(--pst-glow, rgba(0,0,0,0)) 0, rgba(0,0,0,0) var(--pst-glow-r, 30vmin));
  transition: opacity .45s ease;
}
html.pst-arriving.pst-break::after,
html.pst-arriving.pst-reveal::before { opacity: 0; }
@keyframes pst-failsafe { to { opacity: 0; visibility: hidden; } }
/* the one canvas: fixed, never takes clicks, never moves layout */
.pst-canvas { position: fixed; left: 0; top: 0; width: 100vw; height: 100vh; z-index: 2147483647; pointer-events: none; display: block; contain: strict; }
@media (prefers-reduced-motion: reduce) { html.pst-arriving::before, html.pst-arriving::after, .pst-canvas { display: none !important; } }
html[data-motion="off"].pst-arriving::before, html[data-motion="off"].pst-arriving::after, html[data-motion="off"] .pst-canvas { display: none !important; }
html.pst-debug.pst-arriving::before, html.pst-debug.pst-arriving::after { animation: none; }
