 .tech-icons-row i {
      font-size: 2.25rem; /* text-xl */
      margin-left: 0.5rem; /* mx-2 */
      margin-right: 0.5rem;
      opacity: 0;
      transform: translateY(0.5rem); /* translate-y-2 */
      animation: bounceIn 0.6s forwards;
    }
    .tech-icons-row i:nth-child(1) { animation-delay: 0.1s; }
    .tech-icons-row i:nth-child(2) { animation-delay: 0.2s; }
    .tech-icons-row i:nth-child(3) { animation-delay: 0.3s; }
    .tech-icons-row i:nth-child(4) { animation-delay: 0.4s; }
    .tech-icons-row i:nth-child(5) { animation-delay: 0.5s; }
    .tech-icons-row i:nth-child(6) { animation-delay: 0.6s; }
    .tech-icons-row i:nth-child(7) { animation-delay: 0.7s; }
    .tech-icons-row i:nth-child(8) { animation-delay: 0.8s; }
    .tech-icons-row i:nth-child(9) { animation-delay: 0.9s; }
    .tech-icons-row i:nth-child(10) { animation-delay: 1.0s; }

    @keyframes bounceIn {
      0% { opacity: 0; transform: translateY(10px); }
      50% { opacity: 1; transform: translateY(-5px); }
      100% { opacity: 1; transform: translateY(0); }
    }

    @keyframes typingEffect {
      from { width: 0; }
      to { width: 58ch; }
    }

    @keyframes blinkCursor {
      0%, 49% { border-color: rgba(255,255,255,0.5); }
      50%, 100% { border-color: transparent; }
    }

    .typing-line {
      overflow: hidden;
      white-space: nowrap;
      border-right: 2px solid rgba(255,255,255,0.5);
      animation: typingEffect 4s steps(58, end) 1 forwards, blinkCursor 0.8s step-end infinite alternate;
      display: inline-block;
      max-width: 100%;
    }

    body { transition: background-color 0.3s, color 0.3s; }
    .tech-icon {
      position: absolute;
      width: 30px;
      height: 30px;
      background-color: #1f2937;
      border-radius: 9999px;
      display: flex;
      align-items: center;
      justify-content: center;
      font-size: 0.7rem;
      color: white;
      opacity: 0;
      transition: opacity 0.3s;
    }
    .group:hover .tech-icon { opacity: 1; }