/* Shared control treatment; the invitation artwork keeps its own silhouette. */
:root{--control-ease:cubic-bezier(.2,.8,.2,1);--control-shadow:0 8px 20px #641e3126,0 2px 5px #641e3110}
.button,.text-action,.open-invitation,.back-to-envelope{border-radius:999px;touch-action:manipulation;transition:transform .22s var(--control-ease),box-shadow .22s var(--control-ease),background-color .2s ease,border-color .2s ease,color .2s ease}
.button:focus-visible,.text-action:focus-visible,.open-invitation:focus-visible,.back-to-envelope:focus-visible{border-radius:999px;outline-offset:4px}
.button .icon,.registry-link::after,.action-arrow,.return-link .icon{transition:transform .22s var(--control-ease)}
.open-invitation{padding:11px 22px;border:1px solid #f0e0cc4d;background:#f0e0cc0a;--control-shadow:0 8px 20px #17020845}
.back-to-envelope{--control-shadow:0 8px 20px #17020845}
.story-rsvp{--control-shadow:0 9px 22px #17020860}
.text-action{padding-inline:10px}
.button:disabled,.button[aria-disabled="true"]{transform:none;cursor:default;box-shadow:none}
.music-toggle{touch-action:manipulation}
.music-toggle:focus-visible,.seal:focus-visible{border-radius:50%}
.guest-nav{gap:4px;padding:4px}
.guest-nav a{border-radius:999px;transition:transform .2s var(--control-ease),background-color .2s ease,color .2s ease}
.chapter-nav{border-radius:16px}
.chapter-nav a{border-radius:11px;transition:transform .2s var(--control-ease),background-color .2s ease,color .2s ease}
.return-link,.rsvp-details-link,.story-details,.signoff-return,.hotel-phone,.hotel-website{border-radius:12px;transition:transform .2s var(--control-ease),color .2s ease,background-color .2s ease;text-decoration-thickness:1px;text-underline-offset:.24em}
.return-link:focus-visible,.rsvp-details-link:focus-visible,.story-details:focus-visible,.signoff-return:focus-visible{border-radius:12px}
.calendar-options{border-radius:16px;box-shadow:0 12px 32px #4b2a1d1f}
.calendar-options a{border-radius:10px;transition:background-color .18s ease,color .18s ease}
.calendar-menu[open]>.text-action{background:#641e310a}
.guest-faq summary{border-radius:12px;padding-inline:12px;transition:background-color .2s ease,color .2s ease}
.guest-faq details>p{padding-left:12px}
.reply-form input:not([type=radio]),.reply-form select,.reply-form textarea{border-radius:12px;transition:border-color .2s ease,background-color .2s ease,box-shadow .2s ease}
.reply-form input:focus-visible,.reply-form select:focus-visible,.reply-form textarea:focus-visible{border-radius:12px;box-shadow:0 0 0 4px #641e310c}
.attendance-option{border-radius:16px;touch-action:manipulation;transition:transform .2s var(--control-ease),box-shadow .2s ease,border-color .2s ease,background-color .2s ease}
.attendance-option:has(input:checked){box-shadow:0 3px 12px #641e310c}
.attendance-option input:checked~.choice-dot{transform:scale(1.06)}
.choice-dot{transition:transform .2s var(--control-ease),background-color .2s ease,border-color .2s ease}
.guest-card,.reply-summary{border-radius:16px}
.reply-preview,.reply-error{border-radius:12px}
.details-card,.rsvp-vignette,.our-story{border-radius:18px;touch-action:manipulation;transition:transform .26s var(--control-ease),filter .26s var(--control-ease)}

/* Fine-pointer hover never becomes a stuck hover state after a phone tap. */
@media(hover:hover) and (pointer:fine){
  .button:not(:disabled):not([aria-disabled="true"]):hover,.open-invitation:hover,.back-to-envelope:hover{transform:translateY(-2px);box-shadow:var(--control-shadow)}
  .open-invitation:hover{opacity:1;background:#f0e0cc14;border-color:#f0e0cc85}
  .button:not(:disabled):not([aria-disabled="true"]):hover>.icon:last-child,.registry-link:not([aria-disabled="true"]):hover::after,.open-invitation:hover .action-arrow{transform:translate(2px,-2px)}
  .text-action:not(:disabled):hover{background:#641e3109;transform:translateY(-1px)}
  .guest-nav a:hover,.chapter-nav a:hover{transform:translateY(-1px)}
  .return-link:hover .icon{transform:translateX(-2px)}
  .guest-faq summary:hover{background:#641e3107}
  .attendance-option:not(:has(input:disabled)):hover{transform:translateY(-2px);border-color:#641e3180;box-shadow:0 6px 16px #641e3110}
}

/* Gentle press response works with a mouse, keyboard activation and touch. */
.button:not(:disabled):not([aria-disabled="true"]):active,.open-invitation:active,.back-to-envelope:active{transform:translateY(0) scale(.98);box-shadow:0 2px 6px #641e311a}
.text-action:not(:disabled):active,.guest-nav a:active,.chapter-nav a:active{transform:scale(.98)}
.attendance-option:not(:has(input:disabled)):active{transform:scale(.995)}
.details-card:active,.rsvp-vignette:active,.our-story:active{transform:translateY(0) scale(.99)}
.seal:active{transform:translate(-50%,-50%) scale(.98)}
@media(hover:none){
  .button:hover,.text-action:hover,.open-invitation:hover,.back-to-envelope:hover,.music-toggle:hover,.details-card:hover,.rsvp-vignette:hover,.our-story:hover{transform:none}
  .button-wine:hover{background:var(--wine)}
  .pinterest-link:hover{background:#fff9ef70}
  .story-rsvp:hover{background:#f8efdf}
  .open-invitation:hover{opacity:1;background:#f0e0cc0a}
  .back-to-envelope:hover{background:#360a151a}
  .details-card:hover{filter:drop-shadow(0 8px 9px #17020845)}
  .rsvp-vignette:hover{filter:drop-shadow(0 12px 14px #17020850)}
  .guest-nav a:hover:not([aria-current="page"]){background:transparent}
  .chapter-nav a:hover:not([aria-current]){color:var(--muted);background:transparent}
  .button:not(:disabled):not([aria-disabled="true"]):active,.open-invitation:active,.back-to-envelope:active,.music-toggle:active{transform:scale(.98)}
  .text-action:not(:disabled):active,.details-card:active,.rsvp-vignette:active,.our-story:active{transform:scale(.99)}
  .seal:hover{transform:translate(-50%,-50%)}
  .seal:active{transform:translate(-50%,-50%) scale(.98)}
}
@media(max-width:560px){.guest-nav{gap:2px;padding:4px 1px}.guest-faq summary{padding-inline:9px}.guest-faq details>p{padding-left:9px}}
@media(prefers-reduced-motion:reduce){
  html{scroll-behavior:auto}
  .button,.text-action,.open-invitation,.back-to-envelope,.music-toggle,.guest-nav a,.chapter-nav a,.attendance-option,.choice-dot,.details-card,.rsvp-vignette,.our-story,.button .icon,.registry-link::after,.action-arrow,.return-link .icon{transition:none!important}
  .button:hover,.button:active,.text-action:hover,.text-action:active,.open-invitation:hover,.open-invitation:active,.back-to-envelope:hover,.back-to-envelope:active,.music-toggle:hover,.music-toggle:active,.guest-nav a:hover,.guest-nav a:active,.chapter-nav a:hover,.chapter-nav a:active,.attendance-option:hover,.attendance-option:active,.choice-dot,.details-card:hover,.details-card:active,.rsvp-vignette:hover,.rsvp-vignette:active,.our-story:hover,.our-story:active,.button:hover>.icon:last-child,.registry-link:hover::after,.open-invitation:hover .action-arrow,.return-link:hover .icon{transform:none!important}
  .seal:hover,.seal:active{transform:translate(-50%,-50%)!important}
}
