/* ==========================================================================
   Scroll reveal
   ========================================================================== */

[data-reveal] {
  opacity: 0;
  transform: translateY(28px);
  transition: opacity 0.7s cubic-bezier(0.16, 0.84, 0.44, 1),
    transform 0.7s cubic-bezier(0.16, 0.84, 0.44, 1);
  transition-delay: var(--reveal-delay, 0ms);
  will-change: opacity, transform;
}

[data-reveal].is-revealed {
  opacity: 1;
  transform: translateY(0);
}

[data-reveal="fade"] {
  transform: none;
}

[data-reveal="left"] {
  transform: translateX(-36px);
}

[data-reveal="left"].is-revealed {
  transform: translateX(0);
}

[data-reveal="right"] {
  transform: translateX(36px);
}

[data-reveal="right"].is-revealed {
  transform: translateX(0);
}

[data-reveal="zoom"] {
  transform: scale(0.9);
}

[data-reveal="zoom"].is-revealed {
  transform: scale(1);
}

/* ==========================================================================
   Buttons
   ========================================================================== */

.btn {
  transition: transform 0.25s ease, box-shadow 0.25s ease,
    background-color 0.2s ease, color 0.2s ease, border-color 0.2s ease;
}

.btn-primary:hover,
.btn-video:hover {
  transform: translateY(-3px);
  box-shadow: 0 0.75rem 1.5rem -0.4rem rgba(99, 102, 241, 0.55);
}

.btn-primary:active,
.btn-video:active {
  transform: translateY(-1px) scale(0.98);
}

.btn-icon {
  transition: transform 0.25s cubic-bezier(0.34, 1.56, 0.64, 1),
    box-shadow 0.25s ease, background-color 0.2s ease;
}

.btn-icon:hover {
  transform: translateY(-2px) scale(1.08);
}

.btn-icon:active {
  transform: scale(0.94);
}

.btn-prev:hover,
.btn-next:hover {
  transform: scale(1.12);
}

.btn-video {
  animation: pulse-ring 2.4s ease-out infinite;
}

@keyframes pulse-ring {
  0% {
    box-shadow: 0 0 0 0 rgba(255, 255, 255, 0.55);
  }
  70% {
    box-shadow: 0 0 0 18px rgba(255, 255, 255, 0);
  }
  100% {
    box-shadow: 0 0 0 0 rgba(255, 255, 255, 0);
  }
}

/* Back to top */
.btn-scroll-top {
  transition: bottom 400ms cubic-bezier(0.68, -0.55, 0.265, 1.55),
    opacity 0.3s, background-color 0.25s ease-in-out, transform 0.3s ease,
    box-shadow 0.3s ease;
}

.btn-scroll-top:hover {
  transform: translateY(-4px);
}

.btn-scroll-top-icon {
  transition: transform 0.25s ease;
}

.btn-scroll-top:hover .btn-scroll-top-icon {
  transform: translateY(-2px);
}

/* Footer social icons */
.btn-facebook,
.btn-instagram,
.btn-twitter,
.btn-youtube {
  transition: transform 0.3s cubic-bezier(0.34, 1.56, 0.64, 1),
    box-shadow 0.3s ease, background-color 0.2s ease-in-out,
    color 0.2s ease-in-out, border-color 0.2s ease-in-out;
}

.btn-facebook:hover,
.btn-instagram:hover,
.btn-twitter:hover,
.btn-youtube:hover {
  transform: translateY(-4px) rotate(-6deg) scale(1.1);
  box-shadow: 0 0.5rem 1.25rem -0.25rem rgba(0, 0, 0, 0.35);
}

/* Área do aluno / navbar CTA */
.navbar .btn-primary i {
  transition: transform 0.25s ease;
}

.navbar .btn-primary:hover i {
  transform: translateX(2px);
}

/* ==========================================================================
   Icons
   ========================================================================== */

.feactured-icons {
  display: inline-block;
  transition: transform 0.35s cubic-bezier(0.34, 1.56, 0.64, 1);
}

.card:hover .feactured-icons {
  transform: scale(1.15) rotate(-6deg);
}

/* ==========================================================================
   Cards / content blocks
   ========================================================================== */

section .card {
  transition: opacity 0.35s ease, transform 0.35s ease, box-shadow 0.35s ease;
}

.swiper-slide .card:hover {
  transform: translateY(-6px);
  box-shadow: 0 1.25rem 2.5rem -0.75rem rgba(31, 45, 90, 0.18) !important;
}

#preços .card {
  transition: transform 0.35s ease, box-shadow 0.35s ease;
}

.table-responsive-lg .card:hover {
  transform: translateY(-4px);
}

/* Step numbers */
.step-number-inner {
  transition: transform 0.3s cubic-bezier(0.34, 1.56, 0.64, 1),
    box-shadow 0.3s ease;
}

.step:hover .step-number-inner {
  transform: scale(1.12);
}

/* FAQ accordion */
.accordion-item {
  transition: opacity 0.3s ease, box-shadow 0.3s ease, transform 0.3s ease;
}

.accordion-item:has(.accordion-collapse.show) {
  box-shadow: 0 0.75rem 1.75rem -0.5rem rgba(31, 45, 90, 0.15) !important;
}

/* Nav links underline sweep */
.navbar-nav .nav-link {
  position: relative;
}

.navbar-nav .nav-link::after {
  content: "";
  position: absolute;
  left: 0;
  bottom: -2px;
  width: 0%;
  height: 2px;
  background: currentColor;
  transition: width 0.25s ease;
}

.navbar-nav .nav-link:hover::after {
  width: 100%;
}

/* Comparison slider handle */
img-comparison-slider [slot="handle"] {
  transition: transform 0.2s ease;
}

img-comparison-slider:hover [slot="handle"] svg {
  transform: scale(1.08);
}

/* Pricing toggle switch pop */
.price-switch .form-check-input {
  transition: transform 0.2s ease;
}

.price-switch .form-check-input:active {
  transform: scale(0.92);
}

/* Logo subtle interaction */
.navbar-brand img {
  transition: transform 0.3s ease;
}

.navbar-brand:hover img {
  transform: rotate(-4deg) scale(1.05);
}

/* ==========================================================================
   Reduced motion
   ========================================================================== */

@media (prefers-reduced-motion: reduce) {
  [data-reveal] {
    opacity: 1 !important;
    transform: none !important;
    transition: none !important;
  }

  .btn-video {
    animation: none !important;
  }

  .btn,
  .btn-icon,
  .btn-scroll-top,
  .btn-scroll-top-icon,
  .btn-facebook,
  .btn-instagram,
  .btn-twitter,
  .btn-youtube,
  .feactured-icons,
  section .card,
  #preços .card,
  .step-number-inner,
  .accordion-item,
  .accordion-button,
  .navbar-nav .nav-link::after,
  img-comparison-slider [slot="handle"],
  .price-switch .form-check-input,
  .navbar-brand img {
    transition: none !important;
    animation: none !important;
  }

  * {
    scroll-behavior: auto !important;
  }
}
