    /* ---------- glass gradient UNDER the video (below the hero area) ---------- */
    .hero-glass {
      position: relative;
      left: 0;
      right: 0;
      height: calc(170*var(--t));
      background: linear-gradient(to bottom,
          rgba(20, 27, 38, 0) 0%,
          rgba(20, 27, 38, .4) 40%,
          #141B26 100%);
      backdrop-filter: blur(calc(22*var(--t))) saturate(180%);
      -webkit-backdrop-filter: blur(calc(22*var(--t))) saturate(180%);
      border-top: 1px solid rgba(255, 255, 255, .12);
      box-shadow:
        0 -20px 60px rgba(0, 0, 0, .6),
        0 -8px 24px rgba(255, 255, 255, .06);
      pointer-events: none;
      z-index: 3;
    }

    /* ---------- center title stack ---------- */
    .hero {
      position: absolute;
      left: 0;
      right: 0;
      bottom: calc(14*var(--t));
      display: flex;
      flex-direction: column;
      align-items: center;
      text-align: center
    }

    .hero-core {
      display: flex;
      flex-direction: column;
      align-items: center;
      gap: calc(8*var(--t));
      text-align: center
    }

    .name {
      margin: 0;
      font-weight: 900;
      font-size: calc(48*var(--t));
      line-height: 1;
      letter-spacing: calc(1.5*var(--t));
      color: #fff;
      text-transform: uppercase;
      -webkit-text-stroke: calc(1.4*var(--t)) #000;
      paint-order: stroke fill;
      text-shadow: 0 0 24px rgba(0, 0, 0, .85);
      font-family: 'Chakra S', 'Inter S', sans-serif
    }

    .role {
      margin: 0;
      font-weight: 800;
      font-size: calc(24*var(--t));
      line-height: 1;
      letter-spacing: calc(1.2*var(--t));
      color: #8b9dff;
      text-transform: uppercase;
      -webkit-text-stroke: calc(1.2*var(--t)) #000;
      paint-order: stroke fill;
      text-shadow: 0 0 20px rgba(0, 0, 0, .95);
      font-family: 'Chakra S', 'Inter S', sans-serif
    }

    .stack {
      display: flex;
      flex-direction: column;
      margin-top: calc(10*var(--t))
    }

    .stack-icons {
      display: flex;
      gap: calc(14*var(--t));
      justify-content: center;
      align-items: center
    }

    .stack-icon {
      width: calc(55*var(--t));
      height: calc(55*var(--t));
      display: flex;
      align-items: center;
      justify-content: center;
      background: rgba(4, 7, 13, .12);
      border: 1px solid rgba(215, 226, 234, .28);
      border-radius: calc(10*var(--t));
      box-shadow: 0 0 20px rgba(0, 0, 0, 0.3);
      transition: transform .25s ease, border-color .25s ease
    }

    .stack-icon:hover {
      transform: translateY(calc(-2*var(--t)));
      border-color: rgba(215, 226, 234, .5)
    }

    .stack-icon svg {
      width: calc(100*var(--t));
      height: calc(100*var(--t));
      display: block
    }

    .stack-icon.flutter-icon svg {
      filter: drop-shadow(0 0 8px rgba(3, 169, 244, 0.6))
    }

    .stack-icon.android-icon svg {
      filter: drop-shadow(0 0 8px rgba(164, 198, 57, 0.6));
      -webkit-text-stroke: calc(0.7*var(--t)) #000;
    }

    .summary {
      max-width: 560px;
      margin: calc(12*var(--t)) auto 0;
      font-family: 'Chakra S', 'Inter S', sans-serif;
      font-weight: 700;
      font-size: clamp(1rem, 2vw, 1.35rem);
      line-height: 1.625;
      text-align: center;
      color: #fff;
      -webkit-text-stroke: calc(0.7*var(--t)) #000;
      paint-order: stroke fill;
      text-shadow: 0 0 16px rgba(0, 0, 0, .85)
    }

    /* character-level reveal: the invisible placeholder keeps the natural
       wrap , the live copy layers above and fades with scroll progress.
       Ghost chars read as blue-steel ink lines so they catch the eye on
       the white sky footage; completed chars light up white + halo. */
    .summary .char {
      position: relative
    }

    .summary .ph {
      visibility: hidden
    }

    .summary .rv {
      position: absolute;
      left: 0;
      top: 0;
      color: transparent;
      -webkit-text-stroke: calc(0.9*var(--t)) rgba(139, 157, 255, .9);
      text-shadow: 0 0 10px rgba(139, 157, 255, .45);
      opacity: .2;
      will-change: opacity
    }

    .summary .rv.lit {
      color: #fff;
      -webkit-text-stroke: calc(0.7*var(--t)) #000;
      text-shadow: 0 0 16px rgba(0, 0, 0, .85)
    }

    /* ---------- quick social chips under the summary (same icons as contact) ---------- */
    .hero-socials {
      margin-top: calc(16*var(--t));
      margin-bottom: calc(28*var(--t));
      display: flex;
      gap: calc(14*var(--t));
      justify-content: center;
      align-items: center
    }

    .contact-icon {
      display: flex;
      align-items: center;
      justify-content: center;
      color: #8b9dff;
      animation: icon-beat 2.6s ease-in-out infinite;
      transition: color .3s ease
    }

    .contact-icon svg {
      width: calc(35*var(--t));
      height: calc(35*var(--t));
      fill: currentColor;
      display: block
    }

    .hero-socials .contact-icon {
      width: calc(44*var(--t));
      height: calc(44*var(--t));
      background: rgba(255, 255, 255, .08);
      border: 1px solid rgba(255, 255, 255, .18);
      border-radius: calc(12*var(--t));
      box-shadow: 0 0 20px rgba(0, 0, 0, .3);
      text-decoration: none
    }

    .hero-socials .contact-icon:hover {
      background: rgba(255, 255, 255, .14);
      border-color: rgba(255, 255, 255, .3)
    }

    @keyframes icon-beat {

      0%,
      100% {
        transform: translateY(0) scale(1);
        filter: drop-shadow(0 0 0 rgba(139, 157, 255, 0))
      }

      40% {
        transform: translateY(calc(-3*var(--t))) scale(1.08);
        filter: drop-shadow(0 0 calc(7*var(--t)) rgba(139, 157, 255, .9))
      }

      60% {
        transform: translateY(calc(-1*var(--t))) scale(.98);
        filter: drop-shadow(0 0 calc(4*var(--t)) rgba(139, 157, 255, .5))
      }
    }

    .xgrid2 .xcontact:nth-child(1) .contact-icon,
    .hero-socials .contact-icon:nth-child(1) {
      animation-delay: 0s
    }

    .xgrid2 .xcontact:nth-child(2) .contact-icon,
    .hero-socials .contact-icon:nth-child(2) {
      animation-delay: .3s
    }

    .xgrid2 .xcontact:nth-child(3) .contact-icon,
    .hero-socials .contact-icon:nth-child(3) {
      animation-delay: .6s
    }

    /* ---------- scroll cue centered bottom + shredded down arrow glow hover ---------- */
    .scroll-cue {
      display: flex;
      flex-direction: column;
      align-items: center;
      gap: calc(12*var(--t));
      margin-top: auto;
      padding-bottom: calc(26*var(--t));
    }

    .scroll-label.lbl {
      color: #fff;
      letter-spacing: calc(1.2*var(--t));
      text-transform: uppercase;
      -webkit-text-stroke: calc(1.4*var(--t)) #000;
      paint-order: stroke fill;
      text-shadow: 0 0 14px rgba(0, 0, 0, .85);
    }

    .scroll-label:hover {
      color: #fff
    }

    .shred-arrow {
      position: relative;
      width: calc(16*var(--t));
      height: calc(30*var(--t));
    }

    .shred {
      position: absolute;
      left: 50%;
      width: calc(2.5*var(--t));
      background: linear-gradient(to bottom, #fff, rgba(255, 255, 255, 0));
      transform: translateX(-50%);
      opacity: 0;
      filter: drop-shadow(0 0 8px rgba(255, 255, 255, .4));
      transition: all .45s cubic-bezier(.2, .7, .2, 1);
    }

    .shred.s1 {
      top: 0;
      height: 28%;
      transform: translateX(-50%) rotate(3deg)
    }

    .shred.s2 {
      top: 12%;
      height: 52%;
      transform: translateX(-50%) rotate(6deg)
    }

    .shred.s3 {
      top: 25%;
      height: 78%;
      transform: translateX(-50%) rotate(0deg)
    }

    .shred.s4 {
      top: 38%;
      height: 52%;
      transform: translateX(-50%) rotate(-6deg)
    }

    .shred.s5 {
      top: 50%;
      height: 28%;
      transform: translateX(-50%) rotate(-3deg)
    }

    .shred-arrow:hover .shred {
      opacity: 1;
      height: 100%;
      top: 0;
      background: linear-gradient(to bottom, #fff, #8b9dff);
      filter: drop-shadow(0 0 18px #fff) drop-shadow(0 0 45px rgba(255, 255, 255, .5));
    }

    @keyframes shredFloat {

      0%,
      100% {
        transform: translateX(-50%) translateY(0)
      }

      50% {
        transform: translateX(-50%) translateY(calc(-5*var(--t)))
      }
    }

    .shred-arrow:hover .s1 {
      animation: shredFloat 2.2s ease-in-out infinite 0s
    }

    .shred-arrow:hover .s2 {
      animation: shredFloat 2.2s ease-in-out infinite 0.25s
    }

    .shred-arrow:hover .s3 {
      animation: shredFloat 2.2s ease-in-out infinite 0.5s
    }

    .shred-arrow:hover .s4 {
      animation: shredFloat 2.2s ease-in-out infinite 0.75s
    }

    .shred-arrow:hover .s5 {
      animation: shredFloat 2.2s ease-in-out infinite 1s
    }

    /* ---------- dock ---------- */
    .dock {
      position: absolute;
      left: 0;
      right: 0;
      bottom: 0;
      height: calc(47*var(--t));
      --nudge: calc(1.6*var(--t))
    }

    .dock .rule {
      position: absolute;
      left: 0;
      right: 0;
      top: 0;
      height: var(--hair);
      background: var(--line)
    }

    .dock .div {
      position: absolute;
      top: 0;
      bottom: 0;
      width: var(--hair);
      background: rgba(255, 255, 255, .21);
      box-shadow: 0 0 16px rgba(255, 255, 255, .35)
    }

    .dock .div-l {
      left: calc(116*var(--t))
    }

    .dock .div-r {
      right: calc(139*var(--t))
    }

    .dock a,
    .dock button {
      display: flex;
      align-items: center;
      text-decoration: none;
      background: none;
      border: 0;
      padding: 0;
      cursor: pointer;
      color: rgba(0, 0, 0, .85);
      transition: color .3s ease
    }

    .dock a:hover,
    .dock button:hover {
      color: #000
    }

    .scroll {
      position: absolute;
      left: 50%;
      transform: translateX(-50%);
      top: 0;
      bottom: 0
    }

    .scroll .ico {
      width: calc(5*var(--t));
      height: calc(7*var(--t));
      flex: none;
      fill: currentColor;
      position: relative;
      top: calc(-1*var(--t))
    }

    .scroll span {
      margin-left: calc(10*var(--t));
      letter-spacing: calc(-.23*var(--t))
    }

    .talk {
      position: absolute;
      right: calc(24*var(--t));
      top: 0;
      bottom: 0
    }

    .talk span {
      letter-spacing: calc(.12*var(--t))
    }

    .talk .ico {
      width: calc(16*var(--t));
      height: calc(15*var(--t));
      margin-left: calc(11*var(--t));
      flex: none;
      fill: none;
      stroke: currentColor;
      stroke-width: 1.6
    }

