/* Gentle movement, clear touch targets, and responsive refinements. */
html { scrollbar-gutter: stable; }
body { overflow-x: clip; }
body.modal-open { overflow: hidden; }
.hero-copy, .hero-art, .venue-copy, .event-body { min-width: 0; }
.reading-progress { position: fixed; inset: 0 0 auto; height: 2px; background: var(--gold); z-index: 95; transform: scaleX(0); transform-origin: left; pointer-events: none; }
.invitation-closed .reading-progress { visibility: hidden; }
.reveal { transform: translate3d(0,28px,0); transition: opacity .85s cubic-bezier(.2,.65,.2,1), transform .85s cubic-bezier(.2,.65,.2,1); }
.reveal.visible { transform: translate3d(0,0,0); }
.event-card.reveal { transform: translate3d(0,28px,0) scale(.985); }
.event-card.reveal.visible { transform: translate3d(0,0,0) scale(1); }
.event-card.reveal.visible:hover { transform: translate3d(0,-5px,0) scale(1); }
.event-grid .reveal:nth-child(2) { transition-delay: .08s; }
.event-grid .reveal:nth-child(3) { transition-delay: .16s; }
.invitation-open .hero-copy > * { animation: hero-arrive .95s cubic-bezier(.2,.65,.2,1) both; }
.invitation-open .hero-copy > :nth-child(2) { animation-delay: .1s; }
.invitation-open .hero-copy > :nth-child(3) { animation-delay: .2s; }
.invitation-open .hero-copy > :nth-child(4) { animation-delay: .3s; }
.invitation-open .hero-copy > :nth-child(5) { animation-delay: .4s; }
.invitation-open .hero-copy > :nth-child(6) { animation-delay: .5s; }
.invitation-open .hero-art img { animation: art-appear 1.2s ease both, botanical-breathe 9s 1.2s ease-in-out infinite; }
.scroll-cue span:last-child { animation: scroll-hint 2.6s ease-in-out infinite; }
.opening-petals { position: fixed; inset: 0; z-index: 22; pointer-events: none; overflow: hidden; }
.opening-petals > span { position: absolute; top: -20px; left: var(--petal-x); width: 9px; height: 15px; border-radius: 75% 20% 70% 25%; background: #d1b7a5; opacity: 0; animation: petal-fall var(--petal-duration) var(--petal-delay) ease-in both; }
.opening-petals > span:nth-child(even) { background: #a6b493; width: 7px; height: 12px; }
.event-grid { grid-template-columns: repeat(3,minmax(0,1fr)); align-items: stretch; }
.event-body { padding-inline: 24px; }
.event-card-top { padding-inline: 24px; }
.event-body h3 { font-size: clamp(30px,2.8vw,38px); }
.event-description { min-height: 54px; }
.event-details { gap: 8px; }
.event-details strong { font-size: 19px; }
.event-location { min-height: 58px; align-items: flex-start; line-height: 1.7; font-size: 11px; }
.event-location > svg { margin-top: 2px; }
.event-actions { gap: 5px; align-items: center; }
.event-actions .text-button { display: inline-flex; align-items: center; justify-content: center; min-height: 44px; font-size: 9px; letter-spacing: .2px; }
.event-actions .text-button span { margin-left: 5px; }
.event-card[data-theme=sage] { border-color: #a9b69a; }
.schedule-note { letter-spacing: .6px; line-height: 2.1; }
.venue-section { gap: 70px; }
.venue-art { min-height: 530px; }
.venue-detail { margin-top: 28px; }
.venue-detail + .venue-detail { border-top: 1px solid var(--line); padding-top: 26px; }
.venue-detail h3 { margin-top: 10px; font-size: 31px; line-height: 1.15; }
.venue-detail .venue-city { line-height: 1.8; }
.venue-detail .venue-note { margin-top: 10px; font-size: 16px; line-height: 1.7; }
.venue-detail .button { margin-top: 16px; gap: 20px; }
.venue-art.visible svg path { stroke-dasharray: 1000; stroke-dashoffset: 1000; animation: venue-draw 2.8s .15s ease forwards; }
.invitation-modal { position: fixed; overscroll-behavior: contain; scrollbar-width: thin; scrollbar-color: #a5b094 transparent; }
.invitation-modal[open] .modal-inner { animation: card-arrive .45s cubic-bezier(.2,.65,.2,1) both; }
.invitation-modal[open]::backdrop { animation: backdrop-arrive .3s ease both; }
.invitation-modal[data-theme=gold] .event-illustration::before { background: #f0e4c9; }
.invitation-modal[data-theme=sage] .event-illustration::before { background: #e2e8d9; }
.modal-inner > p { overflow-wrap: anywhere; }
.music-toggle { width: 44px; height: 44px; padding: 10px; justify-content: center; right: 16px; }
.music-label { display: none; }
.site-header nav a, .header-date, .site-footer button { min-height: 44px; display: inline-flex; align-items: center; }
.site-header nav a::after { bottom: 6px; }
@keyframes hero-arrive { from { opacity: 0; transform: translate3d(0,18px,0); } to { opacity: 1; transform: translate3d(0,0,0); } }
@keyframes botanical-breathe { 0%,100% { transform: translate3d(0,0,0); } 50% { transform: translate3d(0,-5px,0); } }
@keyframes scroll-hint { 0%,100% { transform: translateY(0); } 50% { transform: translateY(4px); } }
@keyframes petal-fall { 0% { opacity: 0; transform: translate3d(0,-20px,0) rotate(0); } 12% { opacity: .5; } 85% { opacity: .35; } 100% { opacity: 0; transform: translate3d(var(--petal-drift),100vh,0) rotate(240deg); } }
@keyframes venue-draw { to { stroke-dashoffset: 0; } }
@keyframes card-arrive { from { opacity: .4; transform: translate3d(0,12px,0) scale(.98); } to { opacity: 1; transform: translate3d(0,0,0) scale(1); } }
@keyframes backdrop-arrive { from { opacity: 0; } to { opacity: 1; } }
@media (min-width:701px) and (max-width:1050px) {
  .event-grid { grid-template-columns: repeat(2,minmax(0,1fr)); }
  .event-card:last-child { grid-column: 1 / -1; width: min(100%,540px); justify-self: center; }
  .event-body h3 { font-size: 36px; }
  .event-description { min-height: 54px; }
  .venue-section { gap: 35px; }
}
@media (max-width:700px) {
  .event-grid { grid-template-columns: minmax(0,1fr); }
  .event-body h3 { font-size: 36px; }
  .event-description { min-height: 0; }
  .event-location { min-height: 0; margin-top: 17px; }
  .event-actions { display: grid; grid-template-columns: repeat(3,minmax(0,1fr)); gap: 6px; }
  .event-actions .text-button { font-size: 9px; letter-spacing: 0; line-height: 1.5; }
  .event-details strong { font-size: 20px; }
  .venue-section { gap: 34px; }
  .venue-art { min-height: 340px; }
  .venue-detail .eyebrow { font-size: 8px; }
  .venue-detail h3 { font-size: 30px; }
  .venue-detail .button { font-size: 10px; gap: 18px; max-width: 100%; }
  .mobile-nav { bottom: max(12px,env(safe-area-inset-bottom)); padding-block: 5px; }
  .mobile-nav a { min-height: 44px; display: flex; align-items: center; justify-content: center; font-size: 9px; }
  .mobile-nav .music-toggle { position: static; flex: 0 0 36px; width: 36px; height: 44px; margin-left: 5px; border: 0; border-left: 1px solid var(--line); border-radius: 0; padding: 9px; background: transparent; box-shadow: none; backdrop-filter: none; }
  .mobile-nav .music-toggle[aria-pressed=true] { color: var(--gold); }
  .music-toggle { bottom: calc(80px + env(safe-area-inset-bottom)); width: 44px; height: 44px; }
  .site-footer { padding-bottom: calc(100px + env(safe-area-inset-bottom)); }
  .hero-copy > .eyebrow { max-width: 100%; }
}
@media (max-width:359px) {
  .section-wrap, .site-header { width: calc(100% - 36px); }
  h1 { font-size: 72px; }
  .hero-copy > .eyebrow { font-size: 7px; letter-spacing: 1px; }
  .countdown { gap: 7px; }
  .countdown > div { min-width: 43px; }
  .countdown > div > span { font-size: 43px; }
  .event-body { padding-inline: 18px; }
  .event-card-top { padding-inline: 18px; }
  .event-details strong { font-size: 18px; }
  .event-actions .text-button { flex-wrap: wrap; gap: 1px; font-size: 8px; }
  .event-actions .text-button span { margin-left: 3px; }
  .venue-detail .button { letter-spacing: .4px; }
}
@media (hover:none) { .event-card.reveal.visible:hover { transform: none; } }
@media (max-height:550px) {
  .invitation-gate { justify-content: flex-start; overflow-y: auto; overscroll-behavior: contain; }
  .invitation-gate > :not(.gate-bloom) { flex-shrink: 0; }
}
@media (prefers-reduced-motion:reduce) {
  *, *::before, *::after { animation: none !important; transition: none !important; }
  .reveal, .event-card.reveal { opacity: 1; transform: none; }
  .opening-petals { display: none; }
  .venue-art.visible svg path { stroke-dashoffset: 0; }
  .event-card.reveal.visible:hover { transform: none; }
  html { scroll-behavior: auto; }
}
@media print { .reading-progress, .opening-petals { display: none; } .venue-art svg path { stroke-dashoffset: 0 !important; } }
