:root {
  --teal: #34f5e0;
  --teal-dim: #1aa89c;
  --bg: #040a0a;
}


* {
  box-sizing: border-box;
}

img {
  width: 100%;
  height: auto;
}

.h1,
.h2,
.h3,
.h4,
.h5,
.h6,
h1,
h2,
h3,
h4,
h5,
h6 {
  margin-bottom: 0;
}

h2 {
  font-size: 30px;
}

h3 {
  font-size: 28px;
}

html,
body {
  margin: 0;
  padding: 0;
  overflow-x: hidden !important;
}

body {
  margin: 0;
  position: relative;
  font-family: "Montserrat", sans-serif;
}

img {
  width: 100%;
  height: auto;
}

a,
span,
img {
  display: inline-block;
}

a {
  text-decoration: none;
  color: inherit;
}

/* ---------- bg ---------- */

.main {
  position: relative;
  background: radial-gradient(ellipse at 50% 40%, #071515 0%, #010404 70%);
  overflow: hidden;
}

.main-text {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background: rgba(255, 255, 255, 0.05);
  backdrop-filter: blur(40px);
  display: flex;
  align-items: center;
  justify-content: center;
  z-index: 999;
}

.main-text h2{
  font-size: 90px;
  font-weight: 600;
  color: #fff;
  text-align: center;
  text-transform: uppercase;
  max-width: 900px;
}

.main .bg {
  height: auto;
  width: 100%;
  min-height: 100vh;
  margin-top: 200px;
}

.main .content {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
}

.main .bg-hero {
  position: absolute;
  top: 200px;
  left: 0;
  width: 100%;
  height: 100%;
}

.main .bg-hero img {
  -webkit-mask-image: linear-gradient(to bottom,
      black 0%,
      black 65%,
      transparent 100%);

  mask-image: linear-gradient(to bottom,
      black 0%,
      black 65%,
      transparent 100%);
}

/* --- matrix rain canvas --- */
.main canvas#matrix {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  opacity: 0.55;
  mix-blend-mode: screen;
}


/* --- title banner --- */
.title-banner {
  position: absolute;
  top: 100px;
  left: 50%;
  transform: translateX(-50%);
  width: max-content;
  text-align: center;
  padding: 15px 30px;
  border: 3px solid var(--teal);
  border-radius: 14px;
  box-shadow: 0 0 12px var(--teal), 0 0 30px rgba(52, 245, 224, 0.5), inset 0 0 12px rgba(52, 245, 224, 0.4);
  background: rgba(0, 10, 10, 0.35);
}

.title-banner h1 {
  margin: 0;
  color: #fff;
  font-weight: 700;
  letter-spacing: 2px;
  font-size: clamp(24px, 5.8vw, 70px);
  text-shadow: 0 0 10px var(--teal), 0 0 22px rgba(52, 245, 224, 0.6);
}


/* --- bottom CTA --- */
.cta {
  position: absolute;
  bottom: 13%;
  left: 50%;
  transform: translateX(-50%);
  width: 350px;
  height: 350px;
  background: none;
  border: 0;
  z-index: 99999;
}

.cta .cont{
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translateX(-50%) translateY(-50%);
}

.cta .cont h6{
  color: #fff;
  font-weight: 800;
  font-size: 22px;
  text-transform: uppercase;
  text-shadow: 0 0 10px var(--teal), 0 0 22px rgba(52, 245, 224, 0.6);
}



/* ////// */

.glitch-wrap img {
  width: 100%;
  height: auto;
  display: block;
}

/* =====================================================
   BASE IMAGE
===================================================== */

.glitch-main {
  position: relative;
  z-index: 1;

  filter:
    contrast(1.08) brightness(.9) saturate(.95);

  animation: baseGlitch 4s infinite steps(1);
}


/* =====================================================
   HEAVY BLUR / DISTORTION
===================================================== */

.glitch-blur {
  position: absolute;
  inset: -8%;

  z-index: 2;

  background: url("assets/imgs/hero.png") center / cover no-repeat;

  opacity: .45;

  filter:
    blur(8px) contrast(1.5) brightness(.85) saturate(1.5);

  mix-blend-mode: screen;

  animation: blurGlitch 3.2s infinite steps(1);
}


/* =====================================================
   CYAN RGB CHANNEL
===================================================== */

.glitch-cyan {
  position: absolute;
  inset: -5%;

  z-index: 3;

  background: url("assets/imgs/hero.png") center / cover no-repeat;

  opacity: 0;

  filter:
    blur(3px) drop-shadow(-22px 0 #00ffff) saturate(3);

  mix-blend-mode: screen;

  animation: cyanGlitch 2.6s infinite steps(1);
}


/* =====================================================
   RED RGB CHANNEL
===================================================== */

.glitch-red {
  position: absolute;
  inset: -5%;

  z-index: 4;

  background: url("assets/imgs/hero.png") center / cover no-repeat;

  opacity: 0;

  filter:
    blur(3px) drop-shadow(22px 0 #ff1744) saturate(3);

  mix-blend-mode: screen;

  animation: redGlitch 3s infinite steps(1);
}


/* =====================================================
   REAL GLITCH SLICES
===================================================== */

.glitch-slices {
  position: absolute;
  inset: 0;
  z-index: 7;

  overflow: hidden;
  pointer-events: none;
}

.slice {
  position: absolute;
  left: -15%;
  width: 130%;

  background-image: url("assets/imgs/hero.png");
  background-size: 100% 100%;
  background-repeat: no-repeat;

  opacity: 0;

  filter:
    blur(1.5px) contrast(1.4) brightness(1.1);

  mix-blend-mode: screen;
}


/* many slices */

.s1 {
  top: 14%;
  height: 3%;
  animation: sliceA 2.2s infinite steps(1);
}

.s2 {
  top: 21%;
  height: 6%;
  animation: sliceB 2.8s infinite steps(1);
}

.s3 {
  top: 29%;
  height: 2%;
  animation: sliceC 2s infinite steps(1);
}

.s4 {
  top: 36%;
  height: 7%;
  animation: sliceD 2.5s infinite steps(1);
}

.s5 {
  top: 45%;
  height: 4%;
  animation: sliceE 3s infinite steps(1);
}

.s6 {
  top: 52%;
  height: 8%;
  animation: sliceF 2.3s infinite steps(1);
}

.s7 {
  top: 63%;
  height: 3%;
  animation: sliceG 2.7s infinite steps(1);
}

.s8 {
  top: 70%;
  height: 7%;
  animation: sliceH 2.4s infinite steps(1);
}

.s9 {
  top: 79%;
  height: 4%;
  animation: sliceI 3s infinite steps(1);
}

.s10 {
  top: 87%;
  height: 3%;
  animation: sliceJ 2.2s infinite steps(1);
}


/* =====================================================
   HUGE HORIZONTAL DIGITAL STREAKS
===================================================== */

.glitch-lines {
  position: absolute;
  inset: 0;
  z-index: 9;
  pointer-events: none;
}

.line {
  position: absolute;
  left: -20%;

  width: 140%;
  height: var(--size);

  background:
    linear-gradient(90deg,
      transparent 0%,
      rgba(0, 255, 255, 0) 5%,
      rgba(0, 255, 255, .8) 15%,
      white 27%,
      rgba(0, 255, 255, .9) 42%,
      rgba(255, 0, 70, .7) 60%,
      rgba(0, 255, 255, .7) 75%,
      transparent 100%);

  box-shadow:
    0 0 10px #00ffff,
    0 0 30px rgba(0, 255, 255, .7);

  opacity: 0;

  mix-blend-mode: screen;

  animation: violentLines 2.1s infinite steps(1);
}

.line:nth-child(1) {
  top: 18%;
  --size: 5px;
}

.line:nth-child(2) {
  top: 25%;
  --size: 12px;
  animation-delay: .4s;
}

.line:nth-child(3) {
  top: 34%;
  --size: 3px;
  animation-delay: .9s;
}

.line:nth-child(4) {
  top: 42%;
  --size: 15px;
  animation-delay: .2s;
}

.line:nth-child(5) {
  top: 50%;
  --size: 6px;
  animation-delay: 1.1s;
}

.line:nth-child(6) {
  top: 58%;
  --size: 11px;
  animation-delay: .5s;
}

.line:nth-child(7) {
  top: 68%;
  --size: 4px;
  animation-delay: 1.3s;
}

.line:nth-child(8) {
  top: 76%;
  --size: 14px;
  animation-delay: .8s;
}

.line:nth-child(9) {
  top: 85%;
  --size: 5px;
  animation-delay: 1.6s;
}


/* =====================================================
   PIXEL FRAGMENTS
===================================================== */

.glitch-pixels {
  position: absolute;
  inset: 0;
  z-index: 10;
  pointer-events: none;
}

.pixel {
  position: absolute;

  background: #00ffff;

  box-shadow:
    0 0 8px #00ffff,
    0 0 20px #00ffff;

  opacity: 0;

  mix-blend-mode: screen;

  animation: pixels 1.8s infinite steps(1);
}

.p1 {
  width: 90px;
  height: 5px;
  left: 8%;
  top: 31%;
}

.p2 {
  width: 30px;
  height: 16px;
  left: 68%;
  top: 39%;
  animation-delay: .3s;
}

.p3 {
  width: 130px;
  height: 4px;
  left: 20%;
  top: 47%;
  animation-delay: .6s;
}

.p4 {
  width: 20px;
  height: 20px;
  left: 76%;
  top: 55%;
  animation-delay: .9s;
}

.p5 {
  width: 70px;
  height: 7px;
  left: 5%;
  top: 64%;
  animation-delay: .2s;
}

.p6 {
  width: 110px;
  height: 4px;
  left: 54%;
  top: 72%;
  animation-delay: .7s;
}

.p7 {
  width: 25px;
  height: 12px;
  left: 30%;
  top: 81%;
  animation-delay: 1s;
}

.p8 {
  width: 150px;
  height: 3px;
  left: 45%;
  top: 27%;
  animation-delay: .4s;
}


/* =====================================================
   CYAN LIGHT
===================================================== */

.cyan-light {
  position: absolute;
  inset: 0;
  z-index: 5;

  pointer-events: none;

  background:
    radial-gradient(ellipse at center,
      rgba(0, 255, 255, .28),
      rgba(0, 255, 255, .1) 35%,
      transparent 68%);

  mix-blend-mode: screen;

  animation: lightPulse 2s infinite;
}


/* =====================================================
   DIGITAL NOISE
===================================================== */

.noise {
  position: absolute;
  inset: -30%;

  z-index: 13;

  pointer-events: none;

  opacity: .18;

  background-image:
    repeating-radial-gradient(circle,
      rgba(0, 255, 255, .8) 0 1px,
      transparent 1px 4px);

  background-size: 5px 5px;

  mix-blend-mode: screen;

  animation: noise 0.12s infinite steps(2);
}


/* =====================================================
   BLUR ANIMATION
===================================================== */

@keyframes blurGlitch {

  0%,
  70%,
  100% {
    opacity: 0;
    filter: blur(0);
    transform: translate(0);
  }

  71% {
    opacity: .8;
    filter:
      blur(8px) contrast(1.7) brightness(1.2);

    transform: translate(-25px, 2px);
  }

  72% {
    opacity: .65;
    filter:
      blur(14px) contrast(1.5) brightness(.8);

    transform: translate(40px, -2px);
  }

  73% {
    opacity: .9;
    filter:
      blur(5px) contrast(2) brightness(1.15);

    transform: translate(-60px, 1px);
  }

  74% {
    opacity: 0;
  }
}


/* =====================================================
   CYAN RGB
===================================================== */

@keyframes cyanGlitch {

  0%,
  68%,
  100% {
    opacity: 0;
    transform: translateX(0);
  }

  69% {
    opacity: .8;
    transform: translateX(-25px);
    clip-path: inset(20% 0 68% 0);
  }

  70% {
    opacity: 1;
    transform: translateX(35px);
    clip-path: inset(48% 0 35% 0);
  }

  71% {
    opacity: .7;
    transform: translateX(-50px);
    clip-path: inset(72% 0 12% 0);
  }

  72% {
    opacity: 0;
  }
}


/* =====================================================
   RED RGB
===================================================== */

@keyframes redGlitch {

  0%,
  75%,
  100% {
    opacity: 0;
    transform: translateX(0);
  }

  76% {
    opacity: .75;
    transform: translateX(30px);
    clip-path: inset(25% 0 60% 0);
  }

  77% {
    opacity: .8;
    transform: translateX(-40px);
    clip-path: inset(55% 0 30% 0);
  }

  78% {
    opacity: 0;
  }
}


/* =====================================================
   SLICES
===================================================== */

@keyframes sliceA {

  0%,
  70%,
  100% {
    opacity: 0;
    transform: translateX(0);
  }

  71% {
    opacity: 1;
    transform: translateX(-100px) skewX(-2deg);
  }

  72% {
    opacity: .8;
    transform: translateX(120px);
  }

  73% {
    opacity: 0;
  }
}

@keyframes sliceB {

  0%,
  62%,
  100% {
    opacity: 0;
    transform: translateX(0);
  }

  63% {
    opacity: 1;
    transform: translateX(130px);
  }

  64% {
    opacity: .7;
    transform: translateX(-100px);
  }

  65% {
    opacity: 0;
  }
}

@keyframes sliceC {

  0%,
  66%,
  100% {
    opacity: 0;
    transform: translateX(0);
  }

  67% {
    opacity: 1;
    transform: translateX(-150px);
  }

  68% {
    opacity: 0;
  }
}

@keyframes sliceD {

  0%,
  78%,
  100% {
    opacity: 0;
    transform: translateX(0);
  }

  79% {
    opacity: 1;
    transform: translateX(160px);
  }

  80% {
    opacity: .8;
    transform: translateX(-120px);
  }

  81% {
    opacity: 0;
  }
}

@keyframes sliceE {

  0%,
  72%,
  100% {
    opacity: 0;
    transform: translateX(0);
  }

  73% {
    opacity: 1;
    transform: translateX(-130px);
  }

  74% {
    opacity: .8;
    transform: translateX(90px);
  }

  75% {
    opacity: 0;
  }
}

@keyframes sliceF {

  0%,
  82%,
  100% {
    opacity: 0;
    transform: translateX(0);
  }

  83% {
    opacity: 1;
    transform: translateX(180px);
  }

  84% {
    opacity: .8;
    transform: translateX(-140px);
  }

  85% {
    opacity: 0;
  }
}

@keyframes sliceG {

  0%,
  69%,
  100% {
    opacity: 0;
    transform: translateX(0);
  }

  70% {
    opacity: 1;
    transform: translateX(-180px);
  }

  71% {
    opacity: 0;
  }
}

@keyframes sliceH {

  0%,
  76%,
  100% {
    opacity: 0;
    transform: translateX(0);
  }

  77% {
    opacity: 1;
    transform: translateX(140px);
  }

  78% {
    opacity: .7;
    transform: translateX(-100px);
  }

  79% {
    opacity: 0;
  }
}

@keyframes sliceI {

  0%,
  64%,
  100% {
    opacity: 0;
    transform: translateX(0);
  }

  65% {
    opacity: 1;
    transform: translateX(-120px);
  }

  66% {
    opacity: 0;
  }
}

@keyframes sliceJ {

  0%,
  85%,
  100% {
    opacity: 0;
    transform: translateX(0);
  }

  86% {
    opacity: 1;
    transform: translateX(170px);
  }

  87% {
    opacity: 0;
  }
}


/* =====================================================
   GLITCH LINES
===================================================== */

@keyframes violentLines {

  0%,
  68%,
  100% {
    opacity: 0;
    transform: translateX(0);
  }

  69% {
    opacity: 1;
    transform: translateX(-150px);
  }

  70% {
    opacity: .9;
    transform: translateX(180px);
  }

  71% {
    opacity: .5;
    transform: translateX(-70px);
  }

  72% {
    opacity: 0;
  }
}


/* =====================================================
   PIXELS
===================================================== */

@keyframes pixels {

  0%,
  65%,
  100% {
    opacity: 0;
    transform: translate(0);
  }

  66% {
    opacity: 1;
    transform: translateX(-60px) scaleX(1.7);
  }

  67% {
    opacity: .8;
    transform: translateX(100px) scaleX(.5);
  }

  68% {
    opacity: 0;
  }
}


/* =====================================================
   BASE MICRO DISTORTION
===================================================== */

@keyframes baseGlitch {

  0%,
  92%,
  100% {
    transform: translateX(0);
    filter:
      contrast(1.08) brightness(.9) saturate(.95) blur(0);
  }

  93% {
    transform: translateX(-3px);
    filter:
      contrast(1.3) brightness(1) saturate(1.3) blur(1px);
  }

  94% {
    transform: translateX(4px);
    filter:
      contrast(1.5) brightness(.85) saturate(1.5) blur(3px);
  }

  95% {
    transform: translateX(-7px);
    filter:
      contrast(1.7) brightness(1.1) saturate(1.8) blur(5px);
  }

  96% {
    transform: translateX(5px);
    filter:
      contrast(1.4) brightness(.8) saturate(1.5) blur(2px);
  }
}


/* =====================================================
   LIGHT
===================================================== */

@keyframes lightPulse {

  0%,
  100% {
    opacity: .5;
  }

  50% {
    opacity: .9;
  }
}


/* =====================================================
   NOISE
===================================================== */

@keyframes noise {

  0% {
    transform: translate(0, 0);
  }

  25% {
    transform: translate(-3%, 4%);
  }

  50% {
    transform: translate(4%, -2%);
  }

  75% {
    transform: translate(-2%, -4%);
  }

  100% {
    transform: translate(3%, 2%);
  }
}