/**
 * CloudStudio IoT - Advanced Components CSS
 * Sistema de componentes avanzados con efectos modernos
 * Versión: 1.0.0
 */

/* ============================================
   CONTAINER FADE TRANSITIONS
   Transiciones fluidas entre containers
   ============================================ */

.cs-container-fade-top {
  -webkit-mask-image: linear-gradient(to bottom, transparent 0%, black 10%) !important;
  mask-image: linear-gradient(to bottom, transparent 0%, black 10%) !important;
}

.cs-container-fade-bottom {
  -webkit-mask-image: linear-gradient(to top, transparent 0%, black 10%) !important;
  mask-image: linear-gradient(to top, transparent 0%, black 10%) !important;
}

.cs-container-fade-both {
  -webkit-mask-image: linear-gradient(to bottom,
    transparent 0%,
    black 10%,
    black 90%,
    transparent 100%) !important;
  mask-image: linear-gradient(to bottom,
    transparent 0%,
    black 10%,
    black 90%,
    transparent 100%) !important;
}

/* ============================================
   IMAGE CARDS
   Cards con imagen que se adapta al contenido al hacer hover
   Basado en diseño original user-card-light-dark
   ============================================ */

.cs-card-image {
  --bg: #FDFDFD;
  --title-color: #1A1A1A;
  --title-color-hover: #6C46CE;
  --text-color: #666666;
  --button-color: #F1F3F5;
  --button-color-hover: #E9ECEF;

  background: var(--bg);
  border-radius: 32px;
  padding: 8px;
  width: 320px;
  height: 480px;
  overflow: clip;
  position: relative;
  font-family: 'Nunito', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
  box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08);
  transition: box-shadow 0.3s ease;
  display: flex;
  flex-direction: column;
}

.cs-card-image:hover {
  box-shadow: 0 20px 60px rgba(108, 70, 206, 0.2);
}

/* Dark variant */
.cs-card-image.dark {
  --bg: #1A1A1A;
  --title-color: #FDFDFD;
  --title-color-hover: #FDFDFD;
  --text-color: #DEE2E6;
  --button-color: #343A40;
  --button-color-hover: #495057;
}

/* Backdrop blur effect para el área de info */
.cs-card-image::before {
  content: "";
  position: absolute;
  width: calc(100% - 16px);
  height: 30%;
  bottom: 8px;
  left: 8px;
  -webkit-mask: linear-gradient(transparent 0%, black 80%);
  mask: linear-gradient(transparent 0%, black 80%);
  backdrop-filter: blur(16px);
  -webkit-backdrop-filter: blur(16px);
  border-radius: 0 0 24px 24px;
  translate: 0 0;
  transition: translate 0.25s;
  pointer-events: none;
}

/* Imagen de usuario */
.cs-card-image > img {
  width: 100%;
  flex: 1 1 auto;
  min-height: 0;
  object-fit: cover;
  object-position: 50% 5%;
  border-radius: 24px;
  display: block;
  transition: all 0.6s cubic-bezier(0.4, 0, 0.2, 1);
}

/* Sección de contenido */
.cs-card-image > section {
  position: absolute;
  bottom: 0;
  left: 0;
  right: 0;
  margin: 16px;
  height: calc(33.3333% - 16px);
  display: flex;
  flex-direction: column;
  opacity: 0;
  transition: opacity 0.8s ease;
}

/* En hover, la sección se hace relativa y visible */
.cs-card-image:hover > section,
.cs-card-image:focus-within > section {
  position: relative;
  opacity: 1;
  margin: 16px;
  height: auto;
  flex: 0 1 auto;
  min-height: 0;
  gap: 8px;
}

.cs-card-image h2 {
  margin: 0;
  font-size: 24px;
  font-weight: 800;
  color: var(--title-color);
  transition: color 0.6s ease;
  flex-shrink: 0;
}

.cs-card-image p {
  font-size: 15px;
  line-height: 1.4;
  color: var(--text-color);
  margin: 0;
  flex: 1 1 auto;
  min-height: 0;
}

/* Footer con stats y botón */
.cs-card-image-footer {
  display: flex;
  align-items: center;
  justify-content: space-between;
  flex-shrink: 0;
  margin-top: 4px;
}

.cs-card-image-stat {
  align-self: center;
  color: var(--title-color-hover);
  font-weight: 600;
  display: flex;
  align-items: center;
  gap: 8px;
}

.cs-card-image-button {
  border: 1px solid transparent;
  border-radius: 20px 20px 24px 20px;
  font-size: 16px;
  font-weight: 600;
  padding: 16px 24px 16px 44px;
  translate: 16px;
  background: var(--button-color);
  transition: background 0.33s ease;
  outline-offset: 2px;
  position: relative;
  color: var(--title-color-hover);
  cursor: pointer;
  font-family: 'Nunito', sans-serif;
}

/* Icono + en el botón */
.cs-card-image-button::before,
.cs-card-image-button::after {
  content: "";
  width: 14px;
  height: 2px;
  background: currentcolor;
  position: absolute;
  top: 50%;
  left: 21px;
  border-radius: 16px;
}

.cs-card-image-button::after {
  rotate: 90deg;
  transition: rotate 0.15s;
}

.cs-card-image-button.following::after {
  rotate: 0deg;
}

.cs-card-image-button:hover {
  background: var(--button-color-hover);
}

.cs-card-image-button:focus {
  outline: 2px solid var(--text-color);
}

/* Estado hover/focus de la card */
.cs-card-image:hover::before,
.cs-card-image:focus-within::before {
  translate: 0 100%;
}

.cs-card-image:hover > img,
.cs-card-image:focus-within > img {
  flex: 0 0 auto;
  max-height: 55%;
  object-position: 50% 10%;
}

.cs-card-image:hover > section h2,
.cs-card-image:focus-within > section h2 {
  color: var(--title-color-hover);
}

/* ============================================
   3D FANCY BUTTONS
   Botones con efecto 3D y animaciones dinámicas
   Adaptado con colores y gradientes CloudStudio
   ============================================ */

.cs-btn-3d {
  background: none;
  border: none;
  perspective: 1000px;
  cursor: pointer;
  position: relative;
  padding: 0;
  font-family: 'Nunito', sans-serif;
}

.cs-btn-3d-inner {
  background: rgba(255, 255, 255, 0.05);
  border: 1px solid rgba(255, 255, 255, 0.1);
  border-radius: 16px;
  height: 140px;
  min-width: 200px;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 12px;
  padding: 20px;
  transform-style: preserve-3d;
  transition: transform 0.4s cubic-bezier(0.18, 0.9, 0.32, 1), box-shadow 0.3s ease;
  box-shadow: 0 10px 25px rgba(0, 0, 0, 0.3);
}

.cs-btn-3d:hover .cs-btn-3d-inner {
  transform: rotateX(12deg) rotateY(-10deg) translateY(-8px);
  box-shadow: 0 15px 40px rgba(0, 0, 0, 0.4);
}

.cs-btn-3d:active .cs-btn-3d-inner {
  transform: translateY(2px) scale(0.97);
  box-shadow: 0 5px 15px rgba(0, 0, 0, 0.3);
}

.cs-btn-3d-label {
  font-weight: 700;
  font-size: 18px;
  color: #FDFDFD;
}

.cs-btn-3d-icon {
  width: 56px;
  height: 56px;
  fill: #FDFDFD;
  transition: transform 0.6s ease, fill 0.3s ease, filter 0.4s ease;
  filter: drop-shadow(0 0 0 transparent);
}

/* Variantes de color CloudStudio */

/* Primary - Purple gradient */
.cs-btn-3d-primary .cs-btn-3d-inner {
  background: linear-gradient(145deg, #5a36b3, #6C46CE);
}

.cs-btn-3d-primary:hover .cs-btn-3d-icon {
  transform: scale(1.3) rotate(10deg);
  fill: #8B6FDE;
  filter: drop-shadow(0 0 12px #8B6FDE);
}

/* Secondary - Coral gradient */
.cs-btn-3d-secondary .cs-btn-3d-inner {
  background: linear-gradient(145deg, #c7485e, #DF5676);
}

.cs-btn-3d-secondary:hover .cs-btn-3d-icon {
  transform: scale(1.3) rotate(10deg);
  fill: #E87A93;
  filter: drop-shadow(0 0 12px #E87A93);
}

/* Clarity - Blue gradient */
.cs-btn-3d-clarity .cs-btn-3d-inner {
  background: linear-gradient(145deg, #327a99, #3E98BC);
}

.cs-btn-3d-clarity:hover .cs-btn-3d-icon {
  transform: scale(1.3) rotate(10deg);
  fill: #89D0D6;
  filter: drop-shadow(0 0 12px #89D0D6);
}

/* Success - Green */
.cs-btn-3d-success .cs-btn-3d-inner {
  background: linear-gradient(145deg, #0d9668, #10b981);
}

.cs-btn-3d-success:hover .cs-btn-3d-icon {
  transform: scale(1.3) rotate(10deg);
  fill: #34d399;
  filter: drop-shadow(0 0 12px #34d399);
}

/* Pulse animation on click */
.cs-btn-3d-pulse {
  animation: cs-btn-pulse 0.5s ease, cs-btn-glow 0.5s ease;
}

@keyframes cs-btn-pulse {
  0% { transform: scale(1); }
  50% { transform: scale(1.25); }
  100% { transform: scale(1); }
}

@keyframes cs-btn-glow {
  0% { filter: drop-shadow(0 0 0 transparent); }
  50% { filter: drop-shadow(0 0 14px currentColor); }
  100% { filter: drop-shadow(0 0 0 transparent); }
}

/* ============================================
   MICRO CARDS CON BORDES ILUMINADOS
   Cards con efecto de bordes que brillan siguiendo el mouse
   REQUIERE JavaScript para tracking del pointer
   Adaptado con colores CloudStudio IoT
   ============================================ */

.cs-micro-card {
  --glow-sens: 30;
  --color-sens: calc(var(--glow-sens) + 20);
  --pointer-°: 45deg;
  --pointer-d: 0;
  --card-bg: linear-gradient(8deg, #fdfdfd 75%, #f5f0ff 75.5%);
  --glow-color-1: 268deg 90% 76%; /* Purple - Primary */
  --glow-color-2: 349deg 85% 74%; /* Coral - Secondary */
  --glow-color-3: 192deg 80% 64%; /* Blue - Clarity */
  --glow-color-4: 186deg 75% 74%; /* Cyan */
  --glow-boost: 0%;

  position: relative;
  width: 100%;
  max-width: 400px;
  min-height: 280px;
  border-radius: 16px;
  isolation: isolate;
  transform: translate3d(0, 0, 0.01px);
  display: flex;
  flex-direction: column;
  border: 1px solid rgba(108, 70, 206, 0.1);
  background: var(--card-bg);
  background-repeat: no-repeat;
  padding: 32px;
  box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08);
  transition: box-shadow 0.3s ease;
}

.cs-micro-card:hover {
  box-shadow: 0 8px 30px rgba(108, 70, 206, 0.15);
}

/* Dark variant */
.cs-micro-card.dark {
  --card-bg: linear-gradient(8deg, #1A1A1A 75%, #2a2a2a 75.5%);
  --glow-boost: 15%;
  border-color: rgba(108, 70, 206, 0.3);
}

.cs-micro-card::before,
.cs-micro-card::after,
.cs-micro-card > .cs-micro-glow {
  content: "";
  position: absolute;
  inset: 0;
  border-radius: inherit;
  transition: opacity 0.25s ease-out;
  z-index: -1;
  pointer-events: none;
}

.cs-micro-card:not(:hover):not(.animating)::before,
.cs-micro-card:not(:hover):not(.animating)::after,
.cs-micro-card:not(:hover):not(.animating) > .cs-micro-glow {
  opacity: 0;
  transition: opacity 0.75s ease-in-out;
}

/* Colored border following pointer */
.cs-micro-card::before {
  border: 1px solid transparent;
  background:
    linear-gradient(var(--card-bg) 0 100%) padding-box,
    linear-gradient(rgba(255, 255, 255, 0) 0% 100%) border-box,
    radial-gradient(at 80% 55%, hsla(var(--glow-color-1)) 0px, transparent 50%) border-box,
    radial-gradient(at 69% 34%, hsla(var(--glow-color-2)) 0px, transparent 50%) border-box,
    radial-gradient(at 41% 38%, hsla(var(--glow-color-3)) 0px, transparent 50%) border-box,
    radial-gradient(at 86% 85%, hsla(var(--glow-color-4)) 0px, transparent 50%) border-box,
    linear-gradient(#6C46CE 0 100%) border-box;

  opacity: calc((var(--pointer-d) - var(--color-sens)) / (100 - var(--color-sens)));

  mask-image: conic-gradient(
    from var(--pointer-°) at center,
    black 25%,
    transparent 40%,
    transparent 60%,
    black 75%
  );
}

/* Colored background glow */
.cs-micro-card::after {
  border: 1px solid transparent;
  background:
    radial-gradient(at 80% 55%, hsla(var(--glow-color-1)) 0px, transparent 50%) padding-box,
    radial-gradient(at 69% 34%, hsla(var(--glow-color-2)) 0px, transparent 50%) padding-box,
    radial-gradient(at 41% 38%, hsla(var(--glow-color-3)) 0px, transparent 50%) padding-box,
    radial-gradient(at 86% 85%, hsla(var(--glow-color-4)) 0px, transparent 50%) padding-box,
    linear-gradient(#6C46CE 0 100%) padding-box;

  mask-image:
    linear-gradient(to bottom, black, black),
    radial-gradient(ellipse at 50% 50%, black 40%, transparent 65%),
    radial-gradient(ellipse at 66% 66%, black 5%, transparent 40%),
    radial-gradient(ellipse at 33% 33%, black 5%, transparent 40%),
    radial-gradient(ellipse at 66% 33%, black 5%, transparent 40%),
    radial-gradient(ellipse at 33% 66%, black 5%, transparent 40%),
    conic-gradient(from var(--pointer-°) at center, transparent 5%, black 15%, black 85%, transparent 95%);

  mask-composite: subtract, add, add, add, add, add;
  opacity: calc((var(--pointer-d) - var(--color-sens)) / (100 - var(--color-sens)));
  mix-blend-mode: soft-light;
}

/* Glowing edges */
.cs-micro-card > .cs-micro-glow {
  --outset: 20px;
  inset: calc(var(--outset) * -1);
  z-index: 1;

  mask-image: conic-gradient(
    from var(--pointer-°) at center,
    black 2.5%,
    transparent 10%,
    transparent 90%,
    black 97.5%
  );

  opacity: calc((var(--pointer-d) - var(--glow-sens)) / (100 - var(--glow-sens)));
  mix-blend-mode: plus-lighter;
}

.cs-micro-card > .cs-micro-glow::before {
  content: "";
  position: absolute;
  inset: var(--outset);
  border-radius: inherit;
  box-shadow:
    inset 0 0 0 1px hsl(268deg 90% 76% / 100%),
    inset 0 0 1px 0 hsl(268deg 90% 76% / calc(var(--glow-boost) + 60%)),
    inset 0 0 3px 0 hsl(268deg 90% 76% / calc(var(--glow-boost) + 50%)),
    inset 0 0 6px 0 hsl(268deg 90% 76% / calc(var(--glow-boost) + 40%)),
    inset 0 0 15px 0 hsl(268deg 90% 76% / calc(var(--glow-boost) + 30%)),
    inset 0 0 25px 2px hsl(268deg 90% 76% / calc(var(--glow-boost) + 20%)),
    inset 0 0 50px 2px hsl(268deg 90% 76% / calc(var(--glow-boost) + 10%)),
    0 0 1px 0 hsl(268deg 90% 76% / calc(var(--glow-boost) + 60%)),
    0 0 3px 0 hsl(268deg 90% 76% / calc(var(--glow-boost) + 50%)),
    0 0 6px 0 hsl(268deg 90% 76% / calc(var(--glow-boost) + 40%)),
    0 0 15px 0 hsl(268deg 90% 76% / calc(var(--glow-boost) + 30%)),
    0 0 25px 2px hsl(268deg 90% 76% / calc(var(--glow-boost) + 20%)),
    0 0 50px 2px hsl(268deg 90% 76% / calc(var(--glow-boost) + 10%));
}

/* Content inside micro-card */
.cs-micro-card-content {
  position: relative;
  z-index: 2;
  display: flex;
  flex-direction: column;
  gap: 12px;
}

.cs-micro-card-title {
  font-size: 20px;
  font-weight: 700;
  color: #1A1A1A;
  margin: 0;
}

.cs-micro-card.dark .cs-micro-card-title {
  color: #FDFDFD;
}

.cs-micro-card-description {
  font-size: 14px;
  color: #666;
  line-height: 1.6;
  margin: 0;
}

.cs-micro-card.dark .cs-micro-card-description {
  color: #DEE2E6;
}

/* ============================================
   CARDS CON ELEVACIÓN DINÁMICA
   ============================================ */

.cs-card-elevated {
  background: var(--cs-white, #FDFDFD) !important;
  border-radius: 16px !important;
  box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08) !important;
  transition: transform 0.3s ease, box-shadow 0.3s ease !important;
}

.cs-card-elevated:hover {
  transform: translateY(-8px) !important;
  box-shadow: 0 20px 60px rgba(108, 70, 206, 0.2) !important;
}

/* ============================================
   GRADIENT BORDERS
   Bordes con gradiente animado
   ============================================ */

.cs-gradient-border {
  position: relative;
}

.cs-gradient-border::before {
  content: '' !important;
  position: absolute !important;
  inset: 0 !important;
  border-radius: 16px !important;
  padding: 2px !important;
  background: linear-gradient(135deg, #6C46CE 0%, #DF5676 100%) !important;
  -webkit-mask:
    linear-gradient(#fff 0 0) content-box,
    linear-gradient(#fff 0 0) !important;
  -webkit-mask-composite: xor !important;
  mask-composite: exclude !important;
  animation: cs-gradient-border-rotate 3s linear infinite !important;
  pointer-events: none !important;
}

@keyframes cs-gradient-border-rotate {
  0% {
    filter: hue-rotate(0deg);
  }
  100% {
    filter: hue-rotate(360deg);
  }
}

/* ============================================
   GLASSMORPHISM COMPONENTS
   Componentes con efecto de vidrio
   ============================================ */

.cs-glass {
  background: rgba(255, 255, 255, 0.1) !important;
  backdrop-filter: blur(10px) !important;
  -webkit-backdrop-filter: blur(10px) !important;
  border: 1px solid rgba(255, 255, 255, 0.2) !important;
  border-radius: 16px !important;
}

.cs-glass-card {
  background: rgba(255, 255, 255, 0.15) !important;
  backdrop-filter: blur(12px) !important;
  -webkit-backdrop-filter: blur(12px) !important;
  border: 1px solid rgba(255, 255, 255, 0.3) !important;
  border-radius: 16px !important;
  padding: 32px !important;
  box-shadow: 0 8px 32px rgba(0, 0, 0, 0.1) !important;
}

.cs-glass-navbar {
  background: rgba(253, 253, 253, 0.8) !important;
  backdrop-filter: blur(20px) !important;
  -webkit-backdrop-filter: blur(20px) !important;
  border-bottom: 1px solid rgba(0, 0, 0, 0.05) !important;
  box-shadow: 0 4px 20px rgba(0, 0, 0, 0.05) !important;
}

/* ============================================
   MICROINTERACCIONES
   Efectos hover sutiles
   ============================================ */

.cs-hover-float {
  transition: transform 0.3s ease !important;
}

.cs-hover-float:hover {
  transform: translateY(-6px) !important;
}

.cs-hover-grow {
  transition: transform 0.3s ease !important;
}

.cs-hover-grow:hover {
  transform: scale(1.05) !important;
}

.cs-hover-glow {
  transition: filter 0.3s ease, box-shadow 0.3s ease !important;
}

.cs-hover-glow:hover {
  filter: brightness(1.1) !important;
  box-shadow: 0 0 30px rgba(108, 70, 206, 0.4) !important;
}

/* ============================================
   ADVANCED BUTTONS
   Botones con efectos especiales
   ============================================ */

.cs-btn-glow {
  background: linear-gradient(135deg, #6C46CE 0%, #DF5676 100%) !important;
  color: white !important;
  border: none !important;
  padding: 16px 32px !important;
  border-radius: 12px !important;
  font-family: 'Nunito', sans-serif !important;
  font-size: 16px !important;
  font-weight: 700 !important;
  cursor: pointer !important;
  transition: all 0.3s ease !important;
  box-shadow: 0 8px 24px rgba(108, 70, 206, 0.3) !important;
}

.cs-btn-glow:hover {
  transform: translateY(-2px) !important;
  box-shadow:
    0 8px 24px rgba(108, 70, 206, 0.3),
    0 0 40px rgba(108, 70, 206, 0.2) !important;
}

.cs-btn-shine {
  background: linear-gradient(135deg, #3E98BC 0%, #89D0D6 100%) !important;
  color: white !important;
  border: none !important;
  padding: 16px 32px !important;
  border-radius: 12px !important;
  font-family: 'Nunito', sans-serif !important;
  font-size: 16px !important;
  font-weight: 700 !important;
  cursor: pointer !important;
  position: relative !important;
  overflow: hidden !important;
  transition: all 0.3s ease !important;
}

.cs-btn-shine::before {
  content: '' !important;
  position: absolute !important;
  top: 0 !important;
  left: -100% !important;
  width: 100% !important;
  height: 100% !important;
  background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.3), transparent) !important;
  transition: left 0.5s ease !important;
}

.cs-btn-shine:hover::before {
  left: 100% !important;
}

.cs-btn-glass {
  background: rgba(108, 70, 206, 0.1) !important;
  backdrop-filter: blur(10px) !important;
  -webkit-backdrop-filter: blur(10px) !important;
  color: #6C46CE !important;
  border: 1px solid rgba(108, 70, 206, 0.3) !important;
  padding: 16px 32px !important;
  border-radius: 12px !important;
  font-family: 'Nunito', sans-serif !important;
  font-size: 16px !important;
  font-weight: 700 !important;
  cursor: pointer !important;
  transition: all 0.3s ease !important;
}

.cs-btn-glass:hover {
  background: rgba(108, 70, 206, 0.2) !important;
  border-color: rgba(108, 70, 206, 0.5) !important;
  transform: translateY(-2px) !important;
}

/* ============================================
   BACKGROUND PATTERNS
   Patrones de fondo sutiles
   ============================================ */

.cs-pattern-dots {
  background-image: radial-gradient(circle, rgba(108, 70, 206, 0.1) 1px, transparent 1px) !important;
  background-size: 20px 20px !important;
}

.cs-pattern-grid {
  background-image:
    linear-gradient(rgba(108, 70, 206, 0.05) 1px, transparent 1px),
    linear-gradient(90deg, rgba(108, 70, 206, 0.05) 1px, transparent 1px) !important;
  background-size: 20px 20px !important;
}

.cs-pattern-lines {
  background-image: repeating-linear-gradient(
    45deg,
    transparent,
    transparent 10px,
    rgba(108, 70, 206, 0.03) 10px,
    rgba(108, 70, 206, 0.03) 20px
  ) !important;
}

/* ============================================
   ACCESSIBILITY - REDUCE MOTION
   ============================================ */

@media (prefers-reduced-motion: reduce) {
  *,
  *::before,
  *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
  }
}
