<template>
  <NuxtLoadingIndicator />
  <NuxtLayout>
    <NuxtPage />
  </NuxtLayout>
</template>

<style>
/* Page Transitions - Enhanced with multiple effects */
.page-enter-active,
.page-leave-active {
  transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
  position: absolute;
  width: 100%;
}

.page-enter-from {
  opacity: 0;
  transform: translateY(20px) scale(0.98);
  filter: blur(2px);
}

.page-leave-to {
  opacity: 0;
  transform: translateY(-20px) scale(1.02);
  filter: blur(2px);
}

/* Slide transitions for dynamic direction */
.page-slide-left-enter-from {
  opacity: 0;
  transform: translateX(50px);
}

.page-slide-left-leave-to {
  opacity: 0;
  transform: translateX(-50px);
}

.page-slide-right-enter-from {
  opacity: 0;
  transform: translateX(-50px);
}

.page-slide-right-leave-to {
  opacity: 0;
  transform: translateX(50px);
}

/* Zoom transitions */
.page-zoom-enter-from {
  opacity: 0;
  transform: scale(0.9);
}

.page-zoom-leave-to {
  opacity: 0;
  transform: scale(1.1);
}

/* Layout Transitions - Enhanced */
.layout-enter-active,
.layout-leave-active {
  transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
  position: absolute;
  width: 100%;
}

.layout-enter-from {
  opacity: 0;
  filter: grayscale(100%) brightness(0.8);
  transform: scale(0.95);
}

.layout-leave-to {
  opacity: 0;
  filter: grayscale(100%) brightness(1.2);
  transform: scale(1.05);
}

  /* Collapse transition for sidebar */
  .sidebar-collapse-enter-active,
  .sidebar-collapse-leave-active {
    transition: width 0.3s cubic-bezier(0.4, 0, 0.2, 1);
  }

  /* Custom dialog/drawer transitions */
  .dialog-zoom :deep(.el-dialog) {
    animation: custom-zoom 0.3s cubic-bezier(0.34, 1.56, 0.64, 1);
  }

  .drawer-transition :deep(.el-drawer) {
    animation: custom-slide-in 0.3s cubic-bezier(0.34, 1.56, 0.64, 1);
  }

  @keyframes custom-zoom {
    0% {
      opacity: 0;
      transform: scale(0.8) translateY(-20px);
    }
    100% {
      opacity: 1;
      transform: scale(1) translateY(0);
    }
  }

  @keyframes custom-slide-in {
    0% {
      opacity: 0;
      transform: translateX(-100%);
    }
    100% {
      opacity: 1;
      transform: translateX(0);
    }
  }
  </style>
