/* ==========================================================================
   AXI-x Persist v0.1 — the score.                      (extension; not SNX core)
   Every page that loads this sheet opts into cross-document view transitions;
   names are set here by class, motion is set here by pseudo-element.
   ========================================================================== */
@view-transition{navigation:auto}
/* law 1: names are roles */
.vt-field{view-transition-name:field}
.vt-ledge{view-transition-name:ledge}
.vt-claim{view-transition-name:claim}
.vt-signal{view-transition-name:signal}
.vt-mint{view-transition-name:mint}
.vt-sky{view-transition-name:sky}
.vt-window{view-transition-name:window}
.vt-glass{view-transition-name:glass}
.vt-pop{view-transition-name:pop}
[data-vt]{view-transition-class:snx}
/* the chrome stays: the site nav has the same name on every page */
.vt-chrome{view-transition-name:chrome}
/* the set piece: explicit rows so a hidden block cannot collapse the beat */
.vt-stage{grid-template-rows:repeat(var(--vt-rows,6),var(--snx-row));grid-auto-rows:0;margin-top:14px}
.vt-stage .snx-hide{display:none}
.vt-claim{color:var(--snx-chalk)}
.vt-claim p{font-weight:700;font-size:var(--snx-s3);line-height:1.15;text-wrap:balance}
.vt-claim small{display:block;font-family:var(--snx-mono);font-size:10px;letter-spacing:.14em;text-transform:uppercase;font-weight:600;margin-bottom:8px;color:var(--snx-sky)}
.vt-pop p{font-family:var(--snx-mono);font-size:11px;letter-spacing:.06em;line-height:1.5}
.vt-window .snx-recess{left:18%;top:20%;right:18%;bottom:20%}
/* law 4: one duration, one curve; entrances rise, exits sink; the page crossfades */
::view-transition-group(*){animation-duration:400ms;animation-timing-function:cubic-bezier(.22,.9,.3,1.14)}
::view-transition-old(root),::view-transition-new(root){animation-duration:300ms;animation-timing-function:ease}
::view-transition-group(chrome){animation-duration:0s}
::view-transition-new(.snx):only-child{animation:vt-rise 400ms cubic-bezier(.22,.9,.3,1.14) both}
::view-transition-old(.snx):only-child{animation:vt-sink 400ms ease-in both}
@keyframes vt-rise{from{opacity:0;transform:translateY(28px)}to{opacity:1;transform:none}}
@keyframes vt-sink{from{opacity:1;transform:none}to{opacity:0;transform:translateY(18px) scaleY(.6)}}
/* law 5: reduced motion — nothing travels, everything crossfades */
@media (prefers-reduced-motion:reduce){
  ::view-transition-group(*){animation-duration:0s}
  ::view-transition-old(*),::view-transition-new(*){animation:vt-fade 300ms ease both}
  ::view-transition-old(*){animation-direction:reverse}
}
@keyframes vt-fade{from{opacity:0}to{opacity:1}}
/* held at the midpoint: a mark so the reader knows time is stopped */
html.vt-held .vt-held-mark{display:inline}
.vt-held-mark{display:none;color:var(--snx-ai-deep)}

/* ---------- post furniture ---------- */
.vt-posts{display:flex;gap:6px 14px;flex-wrap:wrap;align-items:center;font-family:var(--snx-mono);font-size:11px;letter-spacing:.1em;text-transform:uppercase;margin-top:18px}
.vt-posts a{text-decoration:none;color:var(--snx-ink);padding:6px 10px;border:1px solid var(--snx-ink)}
.vt-posts a:hover{background:var(--snx-mint);color:var(--snx-ink)}
.vt-posts a[aria-current]{background:var(--snx-ink);color:var(--snx-chalk)}
.vt-posts a.hold{border-style:dashed;color:var(--snx-ai-deep)}
.vt-posts .k{color:var(--snx-ink-40);font-size:10px}
.vt-release{appearance:none;border:1px dashed var(--snx-ai);background:transparent;color:var(--snx-ai-deep);font-family:var(--snx-mono);font-size:11px;letter-spacing:.1em;text-transform:uppercase;padding:6px 10px;cursor:pointer}
.vt-release:hover{background:var(--snx-butter)}
.vt-release:focus-visible{outline:2px solid var(--snx-signal);outline-offset:2px}
.vt-post-head .snx-h1{font-size:clamp(30px,4.6vw,48px)}
