/* ==========================================================================
   Animations & scroll reveals
   ========================================================================== */
@keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } }
@keyframes fadeInUp { from { opacity: 0; transform: translateY(18px); } to { opacity: 1; transform: translateY(0); } }
@keyframes ringPulse { 0% { transform: scale(0.6); opacity: 0.6; } 100% { transform: scale(2.4); opacity: 0; } }
@keyframes drawLine { to { stroke-dashoffset: 0; } }

.map-marker__ring { animation: ringPulse 2.6s ease-out infinite; }

/* Scroll-reveal: progressive enhancement (visible by default if JS off) */
[data-reveal] { opacity: 1; }
.js [data-reveal] { opacity: 0; transform: translateY(22px); transition: opacity 0.7s var(--ease), transform 0.7s var(--ease); will-change: opacity, transform; }
.js [data-reveal].is-in { opacity: 1; transform: none; }
.js [data-reveal-stagger] > * { opacity: 0; transform: translateY(22px); transition: opacity 0.6s var(--ease), transform 0.6s var(--ease); }
.js [data-reveal-stagger].is-in > * { opacity: 1; transform: none; }
.js [data-reveal-stagger].is-in > *:nth-child(2) { transition-delay: 0.08s; }
.js [data-reveal-stagger].is-in > *:nth-child(3) { transition-delay: 0.16s; }
.js [data-reveal-stagger].is-in > *:nth-child(4) { transition-delay: 0.24s; }
.js [data-reveal-stagger].is-in > *:nth-child(5) { transition-delay: 0.32s; }
.js [data-reveal-stagger].is-in > *:nth-child(6) { transition-delay: 0.40s; }

/* Image mask reveal */
.js [data-mask] { clip-path: inset(0 0 100% 0); transition: clip-path 1s var(--ease); }
.js [data-mask].is-in { clip-path: inset(0 0 0 0); }

/* CAD line-draw motif */
.cad-line { stroke: var(--emerald); stroke-width: 1; fill: none; stroke-dasharray: var(--len, 1000); stroke-dashoffset: var(--len, 1000); }
.js .cad-line.is-in { animation: drawLine 1.6s var(--ease) forwards; }
.section--dark .cad-line { stroke: var(--metallic); }

/* Decorative BIM grid background */
.bim-grid-bg { position: absolute; inset: 0; pointer-events: none; opacity: 0.5; background-image: linear-gradient(var(--line) 1px, transparent 1px), linear-gradient(90deg, var(--line) 1px, transparent 1px); background-size: 56px 56px; -webkit-mask-image: radial-gradient(ellipse at center, #000 0%, transparent 75%); mask-image: radial-gradient(ellipse at center, #000 0%, transparent 75%); }
.section--dark .bim-grid-bg { background-image: linear-gradient(var(--line-dark) 1px, transparent 1px), linear-gradient(90deg, var(--line-dark) 1px, transparent 1px); }

@media (prefers-reduced-motion: reduce) {
  .map-marker__ring { animation: none; opacity: 0; }
  .js [data-reveal], .js [data-reveal-stagger] > *, .js [data-mask] { opacity: 1 !important; transform: none !important; clip-path: none !important; }
  .hero__slide img { transition: none; transform: none; }
}
