/* ─────────────────────────────────────────────
   SHARED REVEAL ANIMATIONS
   Used by: index.html, solutions.html, about.html
────────────────────────────────────────────── */

.r-up    { opacity:0; transform:translateY(28px); transition: opacity .8s cubic-bezier(.2,.7,.2,1), transform .8s cubic-bezier(.2,.7,.2,1); will-change: opacity, transform; }
.r-up.in { opacity:1; transform:none; }

.r-blur    { opacity:0; transform:translateY(22px); filter: blur(10px); transition: opacity .9s ease, transform .9s cubic-bezier(.2,.7,.2,1), filter .9s ease; }
.r-blur.in { opacity:1; transform:none; filter: blur(0); }

.r-line    { position:relative; }
.r-line::after {
  content:""; position:absolute; left:0; bottom:-14px; height:1px; width:0;
  background:#1A1A1A; transition: width 1.1s cubic-bezier(.2,.7,.2,1); transition-delay:.15s;
}
.r-line.in::after { width: 96px; }
.r-line-white::after { background: rgba(255,255,255,0.25); }
.r-line-center::after { left:50%; transform:translateX(-50%); }

.r-mask    { display:inline-block; overflow:hidden; vertical-align:bottom; padding-bottom:.08em; }
.r-mask > span { display:inline-block; transform: translateY(105%); transition: transform .9s cubic-bezier(.2,.8,.2,1); }
.r-mask.in > span { transform: translateY(0); }
.r-mask.d1 > span { transition-delay: .06s; }
.r-mask.d2 > span { transition-delay: .12s; }
.r-mask.d3 > span { transition-delay: .18s; }
.r-mask.d4 > span { transition-delay: .24s; }
.r-mask.d5 > span { transition-delay: .30s; }
.r-mask.d6 > span { transition-delay: .36s; }

.r-stagger > * { opacity:0; transform:translateY(18px); transition: opacity .7s ease, transform .7s cubic-bezier(.2,.7,.2,1); }
.r-stagger.in > *:nth-child(1) { transition-delay:.05s; opacity:1; transform:none; }
.r-stagger.in > *:nth-child(2) { transition-delay:.15s; opacity:1; transform:none; }
.r-stagger.in > *:nth-child(3) { transition-delay:.25s; opacity:1; transform:none; }
.r-stagger.in > *:nth-child(4) { transition-delay:.35s; opacity:1; transform:none; }
.r-stagger.in > *:nth-child(5) { transition-delay:.45s; opacity:1; transform:none; }

.r-zoom    { opacity:0; transform: scale(1.04); transition: opacity 1s ease, transform 1.2s cubic-bezier(.2,.7,.2,1); }
.r-zoom.in { opacity:1; transform: none; }

.parallax { will-change: transform; }

/* ─────────────────────────────────────────────
   TOP PROGRESS STRIP
────────────────────────────────────────────── */
#page-progress {
  position: fixed; top: 0; left: 0; right: 0; height: 2px; z-index: 60;
  background: transparent; pointer-events: none;
}
#page-progress .bar {
  height:100%; width:0%; background: linear-gradient(90deg, #2E59BD, #1A1A1A);
  transition: width .08s linear;
}
