:root {
  /* Brand colors: change these values to update the page theme. */
  --color-blue: #29394d;
  --color-mint: #6dba9c;
  --color-mint-soft: #e8f5f0;
  --color-blue-soft: #eef4f7;
  --color-background: #f4faf8;
  --page-padding: clamp(1.5rem, 5vw, 5rem);
  --parallax-soft-x: 0px;
  --parallax-soft-y: 0px;
  --parallax-mid-x: 0px;
  --parallax-mid-y: 0px;
  --parallax-near-x: 0px;
  --parallax-near-y: 0px;
}

* {
  box-sizing: border-box;
}

html,
body {
  width: 100%;
  height: 100%;
  margin: 0;
  overflow: hidden;
}

body {
  color: var(--color-blue);
  background: var(--color-background);
  font-family:
    Inter, "Avenir Next", Avenir, "Segoe UI", Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
}

.portal {
  position: relative;
  isolation: isolate;
  display: grid;
  width: 100%;
  min-width: 0;
  height: 100%;
  min-height: 100%;
  padding: var(--page-padding);
  overflow: hidden;
  place-items: center;
  background:
    linear-gradient(112deg, rgba(232, 244, 241, 0.9), transparent 42%),
    linear-gradient(298deg, rgba(226, 237, 243, 0.78), transparent 46%),
    linear-gradient(180deg, #f7fbfa 0%, #eef7f4 58%, #e8f4f1 100%),
    var(--color-background);
}

.portal::before {
  position: absolute;
  z-index: 0;
  inset: 0;
  pointer-events: none;
  content: "";
  background-image: radial-gradient(rgba(41, 57, 77, 0.075) 0.7px, transparent 0.7px);
  background-size: 28px 28px;
  opacity: 0.28;
  mask-image: linear-gradient(to bottom, black, transparent 46%);
}

.portal::after {
  position: absolute;
  z-index: 0;
  inset: 0;
  pointer-events: none;
  content: "";
  background:
    linear-gradient(
      90deg,
      rgba(41, 57, 77, 0.035),
      transparent 22%,
      rgba(255, 255, 255, 0.55) 48%,
      transparent 75%,
      rgba(41, 57, 77, 0.025)
    ),
    linear-gradient(to bottom, transparent 64%, rgba(41, 57, 77, 0.035));
}

.particles {
  position: absolute;
  z-index: 2;
  inset: 0;
  width: 100%;
  height: 100%;
  pointer-events: none;
}

.light-sweep {
  position: absolute;
  z-index: 2;
  top: -30%;
  bottom: -30%;
  left: -45%;
  width: 24%;
  pointer-events: none;
  background: linear-gradient(
    90deg,
    transparent,
    rgba(255, 255, 255, 0.5),
    rgba(255, 255, 255, 0.14),
    transparent
  );
  filter: blur(18px);
  opacity: 0;
  transform: skewX(-17deg);
  animation: light-sweep 15s ease-in-out 2s infinite;
}

.diagonal {
  position: absolute;
  z-index: 0;
  width: 72vw;
  height: 38vh;
  pointer-events: none;
  transform: rotate(-12deg);
  will-change: translate;
}

.diagonal--one {
  top: -20%;
  left: -24%;
  background: linear-gradient(110deg, rgba(109, 186, 156, 0.09), transparent 72%);
  translate: var(--parallax-soft-x) var(--parallax-soft-y);
}

.diagonal--two {
  right: -24%;
  bottom: -19%;
  background: linear-gradient(290deg, rgba(41, 57, 77, 0.065), transparent 70%);
  translate: var(--parallax-mid-x) var(--parallax-mid-y);
}

.ambient {
  position: absolute;
  z-index: 0;
  pointer-events: none;
  filter: blur(2px);
  will-change: transform;
}

.ambient--mint {
  top: -24%;
  right: -12%;
  width: 52vw;
  height: 52vw;
  min-width: 420px;
  min-height: 420px;
  border-radius: 42% 58% 64% 36% / 46% 42% 58% 54%;
  background: rgba(109, 186, 156, 0.09);
  animation: float-mint 24s ease-in-out infinite alternate;
  translate: var(--parallax-mid-x) var(--parallax-mid-y);
}

.ambient--blue {
  bottom: -34%;
  left: -14%;
  width: 54vw;
  height: 48vw;
  min-width: 430px;
  min-height: 380px;
  border-radius: 62% 38% 43% 57% / 52% 58% 42% 48%;
  background: rgba(96, 137, 159, 0.09);
  animation: float-blue 29s ease-in-out infinite alternate;
  translate: var(--parallax-soft-x) var(--parallax-soft-y);
}

.architecture {
  position: absolute;
  z-index: 1;
  bottom: 8%;
  display: flex;
  width: min(29vw, 410px);
  height: min(46vh, 430px);
  align-items: flex-end;
  gap: clamp(9px, 1.3vw, 20px);
  opacity: 0.34;
  pointer-events: none;
  mask-image: linear-gradient(to bottom, transparent 4%, black 35%, black 76%, transparent);
  transition: translate 0.8s cubic-bezier(0.2, 0.7, 0.2, 1);
}

.architecture--left {
  left: -2%;
  translate: var(--parallax-soft-x) var(--parallax-soft-y);
}

.architecture--right {
  right: -3%;
  flex-direction: row-reverse;
  translate: var(--parallax-near-x) var(--parallax-mid-y);
}

.architecture span {
  position: relative;
  width: 24%;
  height: var(--height);
  border: 1px solid rgba(41, 57, 77, 0.13);
  border-bottom: 0;
  background:
    repeating-linear-gradient(
      to bottom,
      transparent 0 25px,
      rgba(109, 186, 156, 0.13) 25px 26px
    ),
    repeating-linear-gradient(
      90deg,
      transparent 0 21px,
      rgba(41, 57, 77, 0.07) 21px 22px
    );
  animation: building-breathe 9s ease-in-out var(--delay) infinite;
}

.architecture span::before,
.architecture span::after {
  position: absolute;
  content: "";
}

.architecture span::before {
  top: -9px;
  left: 13%;
  width: 74%;
  height: 8px;
  border: 1px solid rgba(41, 57, 77, 0.11);
  border-bottom: 0;
}

.architecture span::after {
  top: 13%;
  right: -5px;
  width: 5px;
  height: 62%;
  border-top: 1px solid rgba(109, 186, 156, 0.18);
  border-bottom: 1px solid rgba(109, 186, 156, 0.18);
}

.flow {
  position: absolute;
  z-index: 1;
  right: -8%;
  bottom: -20%;
  left: -8%;
  height: 48%;
  pointer-events: none;
  transform: rotate(-2deg);
  translate: var(--parallax-soft-x) var(--parallax-soft-y);
  transition: translate 1s cubic-bezier(0.2, 0.7, 0.2, 1);
}

.flow::before {
  position: absolute;
  inset: 9% 0 0;
  border-radius: 48% 52% 0 0 / 38% 42% 0 0;
  content: "";
  background: linear-gradient(105deg, rgba(109, 186, 156, 0.08), rgba(227, 243, 238, 0.45));
  animation: wave-breathe 13s ease-in-out infinite alternate;
}

.flow-line {
  position: absolute;
  right: -4%;
  left: -4%;
  height: 56%;
  border-top: 1px solid rgba(109, 186, 156, 0.24);
  border-radius: 50%;
}

.flow-line--one {
  top: 3%;
  animation: wave-line 17s ease-in-out infinite alternate;
}

.flow-line--two {
  top: 17%;
  border-color: rgba(41, 57, 77, 0.09);
  animation: wave-line 21s ease-in-out -6s infinite alternate-reverse;
}

.hero {
  position: relative;
  z-index: 3;
  display: flex;
  width: min(100%, 1000px);
  flex-direction: column;
  align-items: center;
  text-align: center;
  transform: translateY(-4vh);
  translate: var(--parallax-soft-x) var(--parallax-soft-y);
  transition: translate 0.9s cubic-bezier(0.2, 0.7, 0.2, 1);
}

.logo-frame {
  position: relative;
  width: clamp(290px, 43vw, 600px);
  aspect-ratio: 5.8 / 1;
  margin-bottom: clamp(2rem, 5vh, 3.8rem);
  overflow: hidden;
  opacity: 0;
  filter: drop-shadow(0 13px 18px rgba(41, 57, 77, 0.11));
  animation: logo-enter 1s cubic-bezier(0.2, 0.75, 0.25, 1) 0.1s forwards;
}

.logo {
  position: absolute;
  top: 50%;
  left: 50%;
  display: block;
  width: 100%;
  height: auto;
  filter: contrast(1.08) saturate(1.03);
  transform: translate(-50%, -50%);
}

h1 {
  max-width: 960px;
  margin: 0;
  color: var(--color-blue);
  font-size: clamp(1.85rem, 3.8vw, 4.15rem);
  font-weight: 550;
  letter-spacing: -0.038em;
  line-height: 1.12;
  text-wrap: balance;
  opacity: 0;
  text-shadow:
    0 1px 0 rgba(255, 255, 255, 0.7),
    0 14px 30px rgba(41, 57, 77, 0.1);
  animation: text-enter 0.9s cubic-bezier(0.2, 0.75, 0.25, 1) 0.55s forwards;
}

.title-accent {
  width: clamp(48px, 5vw, 74px);
  height: 3px;
  margin-top: clamp(1.25rem, 3vh, 2rem);
  border-radius: 999px;
  background: var(--color-mint);
  box-shadow: 0 8px 22px rgba(109, 186, 156, 0.2);
  opacity: 0;
  transform: scaleX(0);
  transform-origin: center;
  will-change: transform, opacity;
  animation: accent-enter 0.75s cubic-bezier(0.22, 0.72, 0.24, 1) 1.05s forwards;
}

@keyframes logo-enter {
  from {
    opacity: 0;
    transform: translateY(22px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

@keyframes text-enter {
  from {
    opacity: 0;
    transform: translateY(18px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

@keyframes accent-enter {
  from {
    opacity: 0;
    transform: scaleX(0);
  }
  to {
    opacity: 1;
    transform: scaleX(1);
  }
}

@keyframes light-sweep {
  0%,
  12% {
    left: -45%;
    opacity: 0;
  }
  26% {
    opacity: 0.65;
  }
  48% {
    left: 122%;
    opacity: 0;
  }
  100% {
    left: 122%;
    opacity: 0;
  }
}

@keyframes float-mint {
  to {
    border-radius: 58% 42% 37% 63% / 40% 57% 43% 60%;
    transform: translate(-7vw, 8vh) rotate(8deg);
  }
}

@keyframes float-blue {
  to {
    border-radius: 38% 62% 58% 42% / 61% 39% 61% 39%;
    transform: translate(8vw, -7vh) rotate(-7deg);
  }
}

@keyframes building-breathe {
  0%,
  100% {
    opacity: 0.62;
    transform: translateY(0);
  }
  50% {
    opacity: 1;
    transform: translateY(-5px);
  }
}

@keyframes wave-breathe {
  to {
    transform: translateY(-3%) scaleY(1.06);
  }
}

@keyframes wave-line {
  to {
    transform: translateX(4%) translateY(-8%) scaleX(1.04);
  }
}

@media (max-width: 720px) {
  .architecture {
    width: 36vw;
    opacity: 0.25;
  }

  .architecture--left {
    left: -12%;
  }

  .architecture--right {
    right: -13%;
  }
}

@media (max-width: 480px) {
  .logo-frame {
    width: min(88vw, 390px);
    margin-bottom: 1.8rem;
  }

  h1 {
    font-size: clamp(1.65rem, 8vw, 2.35rem);
  }

  .architecture {
    opacity: 0.2;
  }
}

@media (max-height: 520px) {
  .hero {
    transform: none;
  }

  .logo-frame {
    width: clamp(235px, 34vw, 390px);
    margin-bottom: 1rem;
  }

  h1 {
    font-size: clamp(1.35rem, 5vh, 2.1rem);
  }

  .title-accent {
    margin-top: 0.8rem;
  }

  .architecture {
    height: 50vh;
    opacity: 0.18;
  }
}

@media (prefers-reduced-motion: reduce) {
  :root {
    --parallax-soft-x: 0px !important;
    --parallax-soft-y: 0px !important;
    --parallax-mid-x: 0px !important;
    --parallax-mid-y: 0px !important;
    --parallax-near-x: 0px !important;
    --parallax-near-y: 0px !important;
  }

  *,
  *::before,
  *::after {
    scroll-behavior: auto !important;
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    animation-delay: 0ms !important;
  }
}
