@keyframes shimmer-sweep {
  0%   { transform: translateX(-100%) skewX(-12deg); }
  100% { transform: translateX(300%) skewX(-12deg); }
}

@keyframes gold-pulse {
  0%,100% { box-shadow: 0 0 0 0 rgba(184,146,74,0); }
  50%     { box-shadow: 0 0 30px 6px rgba(184,146,74,0.18); }
}

@keyframes line-draw {
  0%   { width: 0; }
  100% { width: 100%; }
}

@keyframes float-gentle {
  0%,100% { transform: translateY(0); }
  50%     { transform: translateY(-10px); }
}

@keyframes scroll-bounce {
  0%,100% { transform: translateX(-50%) translateY(0); }
  50%     { transform: translateX(-50%) translateY(8px); }
}

@keyframes grain {
  0%,100% { transform: translate(0,0); }
  10%     { transform: translate(-1%,-2%); }
  30%     { transform: translate(2%,1%); }
  50%     { transform: translate(-1%,2%); }
  70%     { transform: translate(2%,-1%); }
  90%     { transform: translate(-2%,2%); }
}

@keyframes roofline-draw {
  0%   { stroke-dashoffset: 2000; }
  100% { stroke-dashoffset: 0; }
}

@keyframes ripple-out {
  0%   { transform: scale(0.8); opacity: 1; }
  100% { transform: scale(2.5); opacity: 0; }
}

@keyframes whatsapp-pulse {
  0%,100% { box-shadow: 0 8px 40px rgba(37,211,102,0.25); }
  50%     { box-shadow: 0 8px 60px rgba(37,211,102,0.45); }
}

.overflow-clip { overflow: hidden; }
.will-t { will-change: transform; }
.will-o { will-change: opacity; }
.word-wrap { display: inline-block; overflow: hidden; vertical-align: bottom; line-height: inherit; }
.word-inner { display: inline-block; transform: translateY(110%); }
.char-wrap { display: inline-block; overflow: hidden; }
.char-inner { display: inline-block; transform: translateY(100%); }
.clip-right { clip-path: inset(0 100% 0 0); }
.clip-up { clip-path: inset(100% 0 0 0); }

.grain-overlay {
  position: absolute; inset: -50%; width: 200%; height: 200%;
  background-image: url('data:image/svg+xml,%3Csvg viewBox="0 0 200 200" xmlns="http://www.w3.org/2000/svg"%3E%3Cfilter id="noiseFilter"%3E%3CfeTurbulence type="fractalNoise" baseFrequency="0.65" numOctaves="3" stitchTiles="stitch"/%3E%3C/filter%3E%3Crect width="100%25" height="100%25" filter="url(%23noiseFilter)"/%3E%3C/svg%3E');
  background-size: 200px; animation: grain 8s steps(10) infinite;
  opacity: 0.03; pointer-events: none; mix-blend-mode: overlay; z-index: 2;
}

.hover-shimmer {
  position: relative; overflow: hidden;
}
.hover-shimmer::before {
  content: ''; position: absolute; inset: 0; z-index: 3; pointer-events: none;
  background: linear-gradient(105deg, transparent 35%, rgba(247,243,238,0.05) 50%, transparent 65%);
  transform: translateX(-100%) skewX(-12deg);
}
.hover-shimmer:hover::before {
  animation: shimmer-sweep 0.9s var(--ease-silk) forwards;
}

[data-parallax] { will-change: transform; }

[data-reveal]:not([data-stagger]) { opacity: 0; }
[data-reveal][data-stagger] > * { opacity: 0; }

[data-reveal="up"]:not([data-stagger]) { transform: translateY(60px); }
[data-reveal="up"][data-stagger] > * { transform: translateY(60px); }

[data-reveal="down"]:not([data-stagger]) { transform: translateY(-40px); }
[data-reveal="down"][data-stagger] > * { transform: translateY(-40px); }

[data-reveal="left"]:not([data-stagger]) { transform: translateX(-60px); }
[data-reveal="left"][data-stagger] > * { transform: translateX(-60px); }

[data-reveal="right"]:not([data-stagger]) { transform: translateX(60px); }
[data-reveal="right"][data-stagger] > * { transform: translateX(60px); }

[data-reveal="scale"]:not([data-stagger]) { transform: scale(0.86); }
[data-reveal="scale"][data-stagger] > * { transform: scale(0.86); }

[data-reveal="rotate"]:not([data-stagger]) { transform: rotate(-4deg); transform-origin: bottom left; }
[data-reveal="rotate"][data-stagger] > * { transform: rotate(-4deg); transform-origin: bottom left; }
