/* Lavender & Lily — "Everything blooms" motion system
   All transform/opacity; one spring curve; honors prefers-reduced-motion. */

:root { --spring: cubic-bezier(.22, 1, .36, 1); }

a { color: inherit; text-decoration: none; }
a.logo { display: flex; }

/* buttons: gentle lift */
.btn { transition: transform .35s var(--spring), filter .35s var(--spring), box-shadow .35s var(--spring); will-change: transform; }
.btn:hover { transform: translateY(-2px); filter: brightness(1.06); box-shadow: 0 10px 26px -14px rgba(83,58,126,.55); }

@media (prefers-reduced-motion: no-preference) {

  /* ---------- bloom reveals ---------- */
  html.js .bloom {
    opacity: 0;
    transform: translateY(14px) scale(.96);
    transition: opacity .65s var(--spring), transform .65s var(--spring);
    transition-delay: var(--bloom-delay, 0s);
    will-change: transform, opacity;
  }
  html.js .bloom.bloomed { opacity: 1; transform: none; }

  /* ---------- hero breath ---------- */
  .hero img.bg { animation: ll-breath 14s ease-in-out infinite alternate; transform-origin: 50% 40%; }
  @keyframes ll-breath { from { transform: scale(1); } to { transform: scale(1.05); } }

  /* ---------- iridescent shimmer (leashed pastel brand spectrum) ---------- */
  .shimmer {
    background: linear-gradient(100deg,
      #E9D9FB 0%, #D9C6EC 18%, #F5C9DA 38%, #F8CBA9 58%, #F3D79A 78%, #E9D9FB 100%);
    background-size: 320% 100%;
    -webkit-background-clip: text; background-clip: text;
    color: transparent !important; -webkit-text-fill-color: transparent;
    text-shadow: none !important;
    will-change: background-position;
  }

  /* ---------- ticker marquee ---------- */
  .ticker { display: flex; }
  .ticker .ticker-track { display: inline-flex; flex-shrink: 0; align-items: center; animation: ll-marquee 36s linear infinite; }
  .ticker:hover .ticker-track { animation-play-state: paused; }
  @keyframes ll-marquee { from { transform: translateX(0); } to { transform: translateX(-100%); } }

  /* ---------- growing timeline (services) ---------- */
  html.js .timeline .tl-item:not(:last-child):after { transform: translateX(50%) scaleX(0); transform-origin: left center; transition: transform .9s var(--spring); }
  html.js .timeline.grown .tl-item:not(:last-child):after { transform: translateX(50%) scaleX(1); }
  html.js .timeline .tl-dot { transform: scale(0); transition: transform .5s var(--spring); }
  html.js .timeline.grown .tl-dot { transform: scale(1); }
  html.js .timeline.grown .tl-item:nth-child(1) .tl-dot { transition-delay: .1s; }
  html.js .timeline.grown .tl-item:nth-child(2) .tl-dot { transition-delay: .35s; }
  html.js .timeline.grown .tl-item:nth-child(3) .tl-dot { transition-delay: .6s; }
  html.js .timeline.grown .tl-item:nth-child(4) .tl-dot { transition-delay: .85s; }
  html.js .timeline.grown .tl-item:nth-child(5) .tl-dot { transition-delay: 1.1s; }
  html.js .timeline.grown .tl-item:nth-child(1):after { transition-delay: .15s; }
  html.js .timeline.grown .tl-item:nth-child(2):after { transition-delay: .4s; }
  html.js .timeline.grown .tl-item:nth-child(3):after { transition-delay: .65s; }
  html.js .timeline.grown .tl-item:nth-child(4):after { transition-delay: .9s; }

  /* ---------- flower dividers spin once ---------- */
  html.js .press .dot, html.js .venue-strip span { display: inline-block; transition: transform 1.1s var(--spring); }
  html.js .spun .press .dot, html.js .press.spun .dot, html.js .venue-strip.spun span { transform: rotate(360deg); }

  /* ---------- intro overlay (index only) ---------- */
  #ll-intro {
    position: fixed; inset: 0; z-index: 999; background: var(--ivory, #FAF6F1);
    display: flex; align-items: center; justify-content: center;
    transition: opacity .6s ease .1s; opacity: 1;
    /* CSS-only safety net: overlay always fades itself out even if JS timers stall */
    animation: ll-intro-hide .7s ease 2.7s forwards;
  }
  #ll-intro.done { opacity: 0; pointer-events: none; }
  @keyframes ll-intro-hide { to { opacity: 0; visibility: hidden; } }
  #ll-intro svg { width: 168px; height: 168px; }
  #ll-intro .stroke { fill: none; stroke: #6B4E9B; stroke-width: 5; stroke-linecap: round; stroke-linejoin: round; }
  #ll-intro .ring { opacity: 0; transition: opacity .7s ease .9s; }
  #ll-intro.play .ring { opacity: 1; }
  #ll-intro .dotp { fill: #6B4E9B; stroke: none; transform: scale(0); transform-origin: center; transform-box: fill-box; transition: transform .4s var(--spring); }
  #ll-intro.play .dotp { transform: scale(1); }
  #ll-intro .draw { stroke-dasharray: var(--len, 600); stroke-dashoffset: var(--len, 600); }
  #ll-intro.play .draw { animation: ll-draw 1s var(--spring) forwards; }
  #ll-intro.play .draw.d2 { animation-delay: .25s; }
  #ll-intro.play .draw.d3 { animation-delay: .5s; }
  @keyframes ll-draw { to { stroke-dashoffset: 0; } }
}

/* reduced motion: intro overlay must never trap the page */
@media (prefers-reduced-motion: reduce) {
  #ll-intro { display: none !important; }
}
