/* photoaicompany legal pages — universal animation set (2026-10-01).
   40+ distinct keyframes wired to elements present on /privacy/ and /terms/
   (header, brand, TOC, headings, paragraphs, lists, links, disclosures,
   footer). Pure CSS: no JS on these pages, no-JS safe by construction,
   opacity/transform-only (no layout shift), .15-.6s on smooth easings
   (infinite ambients are slow/subtle). */

/* ---- 1. top progress bar sweep ---- */
body::before {
  content: ""; position: fixed; top: 0; left: 0; right: 0; height: 3px; z-index: 2000;
  background: linear-gradient(90deg, #7d2ae8, #c026d3, #2dd4bf);
  transform-origin: left center; pointer-events: none;
  transform: scaleX(var(--lb-x,0)); opacity: var(--lb-op,1);
}

/* ---- 2. page fade ---- */
body {  }

/* ---- 3. header drops in ---- */
header.site { position: relative;  }

/* ---- 4. header underline grows ---- */
header.site::after {
  content: ""; position: absolute; left: 0; right: 0; bottom: -1px; height: 2px;
  background: linear-gradient(90deg, #7d2ae8, #c026d3);
  transform: scaleX(var(--hl-x,0)); transform-origin: left center;
}

/* ---- 5. brand pops in ---- */
header.site .brand { display: inline-flex;  }

/* ---- 6. logo spins on hover ---- */
@keyframes lg-logospin { from { transform: rotate(0); } to { transform: rotate(360deg); } }
.brand:hover img { animation: lg-logospin .55s cubic-bezier(.22,1,.36,1); }

/* ---- 7. brand lifts on hover ---- */
@keyframes lg-brandlift { from { transform: translateY(0); } to { transform: translateY(-2px); } }
.brand:hover { animation: lg-brandlift .25s cubic-bezier(.22,1,.36,1) both; }

/* ---- 8. logo fades in ---- */
.brand img {  }

/* ---- 9. main rises ---- */
main {  }

/* ---- 10. content column settles ---- */
main .wrap {  }

/* ---- 11. h1 blur-rise ---- */
main h1 {  }

/* ---- 12. h1 accent bar ---- */
main h1::after {
  content: ""; display: block; width: 64px; height: 4px; border-radius: 2px;
  margin-top: .65rem; background: linear-gradient(90deg, #7d2ae8, #c026d3);
  transform: scaleX(var(--h1b-x,0)); transform-origin: left center;
}

/* ---- 13. effective-date line fades ---- */
.effective {  }

/* ---- 14. TOC card pops ---- */
nav.toc {  }

/* ---- 15. TOC label fades ---- */
nav.toc p {  }

/* ---- 16. TOC links stagger in ---- */
nav.toc a {  position: relative; }
nav.toc a:nth-child(2) { animation-delay: .45s; }
nav.toc a:nth-child(3) { animation-delay: .5s; }
nav.toc a:nth-child(4) { animation-delay: .55s; }
nav.toc a:nth-child(5) { animation-delay: .6s; }
nav.toc a:nth-child(6) { animation-delay: .65s; }
nav.toc a:nth-child(7) { animation-delay: .7s; }
nav.toc a:nth-child(8) { animation-delay: .75s; }
nav.toc a:nth-child(9) { animation-delay: .8s; }
nav.toc a:nth-child(10) { animation-delay: .85s; }
nav.toc a:nth-child(n+11) { animation-delay: .9s; }

/* ---- 17. TOC link underline ---- */
@keyframes lg-tocline { from { transform: scaleX(0); } to { transform: scaleX(1); } }
nav.toc a::after {
  content: ""; position: absolute; left: 0; bottom: 1px; width: 100%; height: 1.5px;
  background: currentColor; transform: scaleX(0); transform-origin: right center;
}
nav.toc a:hover::after { transform-origin: left center; animation: lg-tocline .28s cubic-bezier(.22,1,.36,1) both; }

/* ---- 18. TOC link lifts ---- */
@keyframes lg-toclift { from { transform: translateX(0); } to { transform: translateX(4px); } }
nav.toc a:hover { animation: lg-toclift .25s cubic-bezier(.22,1,.36,1) both; }

/* ---- 19. TOC card lifts on hover ---- */
@keyframes lg-tochover { from { transform: translateY(0); } to { transform: translateY(-3px); } }
nav.toc:hover { animation: lg-tochover .3s cubic-bezier(.22,1,.36,1) both; }

/* ---- 20. TOC link press ---- */
@keyframes lg-tocactive { from { transform: scale(1); } to { transform: scale(.98); } }
nav.toc a:active { animation: lg-tocactive .15s ease-out both; }

/* ---- 21. h2 rises into view ---- */
main h2 {
  
   
}

/* ---- 22. h2 underline grows ---- */
main h2::after {
  content: ""; display: block; width: 44px; height: 3px; border-radius: 2px;
  margin-top: .45rem; background: linear-gradient(90deg, #c026d3, #7d2ae8);
  transform: scaleX(var(--h2l-x,0)); transform-origin: left center;
}

/* ---- 23. h2 number pops ---- */
main h2 .n {
  display: inline-block;
  
   
}

/* ---- 24. h2 glows on hover ---- */
@keyframes lg-h2hover { from { color: inherit; } to { color: #c026d3; } }
main h2:hover { animation: lg-h2hover .3s ease-out both; }

/* ---- 25. jumped-to section flashes ---- */
@keyframes lg-targetflash {
  0%, 100% { background-color: transparent; }
  30% { background-color: rgba(192,38,211,.10); }
}
main h2:target { border-radius: 8px; animation: lg-targetflash 1.2s ease-out; }

/* ---- 26. paragraphs fade up ---- */
main p {
  
   
}

/* ---- 27. lists fade ---- */
main ul, main ol {
  
   
}

/* ---- 28. list items pop ---- */
main li {
  
   
}

/* ---- 29. link underline grows ---- */
@keyframes lg-linkline { from { transform: scaleX(0); } to { transform: scaleX(1); } }
main p a, main li a, footer.site a { position: relative; }
main p a::after, main li a::after, footer.site a::after {
  content: ""; position: absolute; left: 0; right: 0; bottom: -1px; height: 1.5px;
  background: currentColor; transform: scaleX(0); transform-origin: right center;
}
main p a:hover::after, main li a:hover::after, footer.site a:hover::after {
  transform-origin: left center; animation: lg-linkline .28s cubic-bezier(.22,1,.36,1) both;
}

/* ---- 30. link nudges ---- */
@keyframes lg-linknudge { from { transform: translateX(0); } to { transform: translateX(2px); } }
main p a:hover, main li a:hover, footer.site a:hover { animation: lg-linknudge .25s cubic-bezier(.22,1,.36,1) both; }

/* ---- 31. tables rise (privacy) ---- */
main table {
  
   
}

/* ---- 32. table rows glow on hover (privacy) ---- */
@keyframes lg-rowglow { from { background-color: transparent; } to { background-color: rgba(125,42,232,.06); } }
main tbody tr:hover { animation: lg-rowglow .3s ease-out both; }

/* ---- 33. disclosure cards pop ---- */
main details {
  
   
}

/* ---- 34. summary lifts on hover ---- */
@keyframes lg-summaryhover { from { transform: translateX(0); } to { transform: translateX(3px); } }
main summary:hover { animation: lg-summaryhover .25s cubic-bezier(.22,1,.36,1) both; }

/* ---- 35. summary press ---- */
@keyframes lg-summaryactive { from { transform: scale(1); } to { transform: scale(.99); } }
main summary:active { animation: lg-summaryactive .15s ease-out both; }

/* ---- 36. disclosure caret flips ---- */
@keyframes lg-summarycaret { from { transform: rotate(0); } to { transform: rotate(180deg); } }
main summary { list-style: none; }
main summary::-webkit-details-marker { display: none; }
main summary::after {
  content: "\25BE"; display: inline-block; margin-left: .5em; color: #c026d3; font-size: .85em;
}
main details[open] summary::after { animation: lg-summarycaret .3s cubic-bezier(.22,1,.36,1) both; }

/* ---- 37. disclosure body expands ---- */
@keyframes lg-detailopen {
  from { opacity: 0; transform: translateY(-6px); }
  to { opacity: 1; transform: none; }
}
main details[open] > div { animation: lg-detailopen .35s cubic-bezier(.22,1,.36,1) both; }

/* ---- 38. FAQ section fades ---- */
main .faq {
  
   
}

/* ---- 39. footer rises ---- */
footer.site {
  
   
}

/* ---- 40. footer top line ---- */
footer.site::before {
  content: ""; display: block; height: 2px;
  background: linear-gradient(90deg, transparent, #7d2ae8, #c026d3, transparent);
  transform: scaleX(var(--lfl-x,0)); opacity: var(--lfl-op,0);
}

/* ---- 41. footer text fades ---- */
footer.site p {
  
   
}

/* ---- 42. footer link slides ---- */
@keyframes lg-footerlink { from { transform: translateX(0); } to { transform: translateX(4px); } }
footer.site a:hover { animation: lg-footerlink .25s cubic-bezier(.22,1,.36,1) both; }

/* ---- 43. focus ring blooms ---- */
@keyframes lg-focusring {
  from { outline-offset: 6px; outline-color: transparent; }
  to { outline-offset: 2px; }
}
:focus-visible {
  outline: 2px solid #7d2ae8; outline-offset: 2px;
  animation: lg-focusring .25s cubic-bezier(.22,1,.36,1);
}

/* ---- 44. ambient background glow drift ---- */
body::after {
  content: ""; position: fixed; inset: auto -10% -20% -10%; height: 46vh; z-index: -1;
  background: radial-gradient(60% 100% at 50% 100%, rgba(192,38,211,.08), transparent 70%);
  pointer-events: none; opacity: var(--lg-glow-op,.35); transform: translateY(var(--lg-glow-y,0px));
}

/* Self-contained reduced-motion gate (no shared CSS on these pages). */

