/* Page-to-page transition (home <-> calendar <-> gallery): a "wine
   stain" iris, hand-built with a plain overlay + clip-path instead of the
   native View Transitions API (Chromium-only). js/page-transition.js
   intercepts internal link clicks, plays the "close" animation from the
   click point, then navigates; the freshly loaded page plays the "open"
   animation to reveal itself. 225ms + 225ms = 450ms in total. */
.page-veil{
  position: fixed;
  inset: 0;
  z-index: 999;
  pointer-events: none;
  background:
    radial-gradient(circle at 30% 20%, rgba(255,59,48,.45), transparent 55%),
    var(--wine-deep);
  clip-path: circle(150% at var(--veil-x, 8%) var(--veil-y, 4%));
  animation: page-veil-open 225ms var(--ease-out) both;
}
.page-veil.is-closing{
  animation: page-veil-close 225ms var(--ease-in-out) both;
}
@keyframes page-veil-open{
  from{ clip-path: circle(150% at var(--veil-x, 8%) var(--veil-y, 4%)); }
  to{ clip-path: circle(0% at var(--veil-x, 8%) var(--veil-y, 4%)); }
}
@keyframes page-veil-close{
  from{ clip-path: circle(0% at var(--veil-x, 50%) var(--veil-y, 50%)); }
  to{ clip-path: circle(150% at var(--veil-x, 50%) var(--veil-y, 50%)); }
}
@media (prefers-reduced-motion: reduce){
  .page-veil{ display: none; }
}
