/**
 * VALINA Buttons V2 — Unified Button System
 *
 * 6 variants: Primary, Secondary, Ghost, Accent, Terminal, Outline-Pulse
 * 3 sizes: sm, md (default), lg
 * States: default, hover, active, focus, disabled, loading
 *
 * Uses Valina design tokens from page-base.css / valina.css
 * Version: 2.0.0-prototype
 */

/* ============================================
   BASE BUTTON
============================================ */
.v2-btn {
  --_btn-bg: transparent;
  --_btn-color: var(--text-primary, #f8fafc);
  --_btn-border: rgba(138, 105, 199, 0.3);
  --_btn-glow: transparent;
  --_btn-radius: 10px;
  --_btn-font: "Orbitron", sans-serif;

  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 10px;
  padding: 12px 28px;
  font-family: var(--_btn-font);
  font-size: 0.8rem;
  font-weight: 600;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  text-decoration: none;
  color: var(--_btn-color);
  background: var(--_btn-bg);
  border: 1px solid var(--_btn-border);
  border-radius: var(--_btn-radius);
  cursor: pointer;
  position: relative;
  overflow: hidden;
  isolation: isolate;
  white-space: nowrap;
  user-select: none;
  -webkit-tap-highlight-color: transparent;
  transition:
    color 0.3s ease,
    background 0.3s ease,
    border-color 0.3s ease,
    box-shadow 0.3s ease,
    transform 0.2s ease;
}

/* Focus ring (accessibility) */
.v2-btn:focus-visible {
  outline: 2px solid var(--val-cyan, #22d3ee);
  outline-offset: 3px;
}

/* Active press */
.v2-btn:active:not(:disabled) {
  transform: scale(0.97);
}

/* Disabled state */
.v2-btn:disabled,
.v2-btn[aria-disabled="true"] {
  opacity: 0.35;
  cursor: not-allowed;
  pointer-events: none;
  filter: grayscale(0.5);
}

/* ============================================
   SIZES: sm / md (default) / lg
============================================ */
.v2-btn--sm {
  padding: 8px 18px;
  font-size: 0.65rem;
  gap: 6px;
  --_btn-radius: 8px;
}

/* md is the default — no class needed */

.v2-btn--lg {
  padding: 16px 40px;
  font-size: 0.95rem;
  gap: 12px;
  --_btn-radius: 14px;
}

/* ============================================
   ICON SLOTS
============================================ */
.v2-btn-icon {
  display: inline-flex;
  align-items: center;
  width: 1.1em;
  height: 1.1em;
  flex-shrink: 0;
}
.v2-btn-icon svg {
  width: 100%;
  height: 100%;
  fill: currentColor;
}

/* ============================================
   VARIANT 1: PRIMARY
   Gradient fill + glow pulse + scan sweep on hover
============================================ */
.v2-btn--primary {
  --_btn-bg: linear-gradient(135deg, #8a69c7, #a855f7);
  --_btn-border: transparent;
  --_btn-color: #fff;
  border: none;
  background: var(--_btn-bg);
  box-shadow: 0 0 20px rgba(138, 105, 199, 0.2);
  animation: v2BtnPrimaryPulse 3s ease-in-out infinite;
}

.v2-btn--primary:hover {
  transform: translateY(-2px);
  box-shadow:
    0 6px 30px rgba(138, 105, 199, 0.35),
    0 0 40px rgba(138, 105, 199, 0.15);
}

/* Scan sweep on hover */
.v2-btn--primary::after {
  content: "";
  position: absolute;
  inset: 0;
  background: linear-gradient(
    105deg,
    transparent 40%,
    rgba(255, 255, 255, 0.15) 45%,
    rgba(255, 255, 255, 0.05) 55%,
    transparent 60%
  );
  transform: translateX(-100%);
  transition: none;
  z-index: 1;
}
.v2-btn--primary:hover::after {
  animation: v2BtnSweep 0.7s ease-out;
}

@keyframes v2BtnSweep {
  to {
    transform: translateX(100%);
  }
}

@keyframes v2BtnPrimaryPulse {
  0%,
  100% {
    box-shadow: 0 0 20px rgba(138, 105, 199, 0.2);
  }
  50% {
    box-shadow: 0 0 28px rgba(138, 105, 199, 0.35);
  }
}

/* ============================================
   VARIANT 2: SECONDARY
   Transparent + cyan border + data-stream fill on hover
============================================ */
.v2-btn--secondary {
  --_btn-border: rgba(34, 211, 238, 0.35);
  --_btn-color: var(--val-cyan, #22d3ee);
}

.v2-btn--secondary:hover {
  background: rgba(34, 211, 238, 0.08);
  border-color: var(--val-cyan, #22d3ee);
  box-shadow: 0 0 20px rgba(34, 211, 238, 0.15);
  transform: translateY(-2px);
}

/* Data-stream effect: moving dots on hover */
.v2-btn--secondary::before {
  content: "";
  position: absolute;
  inset: -1px;
  border-radius: inherit;
  background: repeating-linear-gradient(
    90deg,
    transparent 0px,
    transparent 8px,
    rgba(34, 211, 238, 0.06) 8px,
    rgba(34, 211, 238, 0.06) 10px
  );
  opacity: 0;
  animation: none;
  z-index: -1;
  transition: opacity 0.3s;
}
.v2-btn--secondary:hover::before {
  opacity: 1;
  animation: v2BtnDataStream 2s linear infinite;
}

@keyframes v2BtnDataStream {
  to {
    background-position: 18px 0;
  }
}

/* ============================================
   VARIANT 3: GHOST
   Borderless → border materializes on hover
============================================ */
.v2-btn--ghost {
  --_btn-border: transparent;
  --_btn-color: var(--text-secondary, #c8c8e8);
  background: transparent;
}

.v2-btn--ghost:hover {
  --_btn-color: var(--text-primary, #f8fafc);
  border-color: rgba(138, 105, 199, 0.25);
  background: rgba(138, 105, 199, 0.06);
}

.v2-btn--ghost:active:not(:disabled) {
  background: rgba(138, 105, 199, 0.12);
}

/* ============================================
   VARIANT 4: ACCENT (data-accent color-coded)
   Matches the card accent system from sections-v2
============================================ */
.v2-btn--accent {
  --_accent: var(--val-purple, #8a69c7);
  --_btn-border: color-mix(in srgb, var(--_accent) 40%, transparent);
  --_btn-color: var(--_accent);
}

.v2-btn--accent:hover {
  background: color-mix(in srgb, var(--_accent) 10%, transparent);
  border-color: var(--_accent);
  box-shadow: 0 0 22px color-mix(in srgb, var(--_accent) 20%, transparent);
  transform: translateY(-2px);
  color: #fff;
}

/* Accent colors via data attribute */
.v2-btn--accent[data-accent="cyan"] {
  --_accent: var(--val-cyan, #22d3ee);
}
.v2-btn--accent[data-accent="pink"] {
  --_accent: var(--val-pink, #f472b6);
}
.v2-btn--accent[data-accent="green"] {
  --_accent: var(--val-green, #10b981);
}
.v2-btn--accent[data-accent="gold"] {
  --_accent: var(--val-gold, #ffd700);
}
.v2-btn--accent[data-accent="violet"] {
  --_accent: var(--val-violet, #a855f7);
}
.v2-btn--accent[data-accent="purple"] {
  --_accent: var(--val-purple, #8a69c7);
}

/* ============================================
   VARIANT 5: TERMINAL
   Monospace, >_ prefix, green text, cursor blink on hover
============================================ */
.v2-btn--terminal {
  --_btn-font: "Courier New", "Fira Code", monospace;
  --_btn-border: rgba(16, 185, 129, 0.3);
  --_btn-color: var(--val-green, #10b981);
  --_btn-radius: 4px;
  letter-spacing: 0.05em;
  text-transform: none;
  font-weight: 500;
}

.v2-btn--terminal::before {
  content: ">_ ";
  color: rgba(16, 185, 129, 0.5);
  font-weight: 400;
}

.v2-btn--terminal:hover {
  background: rgba(16, 185, 129, 0.08);
  border-color: var(--val-green, #10b981);
  box-shadow:
    0 0 16px rgba(16, 185, 129, 0.15),
    inset 0 0 30px rgba(16, 185, 129, 0.03);
  color: #fff;
}

/* Blinking cursor after text on hover */
.v2-btn--terminal::after {
  content: "";
  display: inline-block;
  width: 2px;
  height: 1em;
  background: var(--val-green, #10b981);
  margin-left: 4px;
  opacity: 0;
  transition: opacity 0.2s;
}
.v2-btn--terminal:hover::after {
  opacity: 1;
  animation: v2BtnCursorBlink 0.8s step-end infinite;
}

@keyframes v2BtnCursorBlink {
  0%,
  100% {
    opacity: 1;
  }
  50% {
    opacity: 0;
  }
}

/* ============================================
   VARIANT 6: OUTLINE PULSE
   Border animates through the color spectrum
============================================ */
.v2-btn--outline-pulse {
  --_btn-border: var(--val-purple, #8a69c7);
  --_btn-color: var(--text-primary, #f8fafc);
  background: transparent;
  border-width: 1.5px;
  animation: v2BtnSpectrumBorder 6s linear infinite;
}

.v2-btn--outline-pulse:hover {
  transform: translateY(-2px);
  box-shadow: 0 0 25px color-mix(in srgb, var(--_btn-border) 25%, transparent);
  background: rgba(138, 105, 199, 0.05);
}

@keyframes v2BtnSpectrumBorder {
  0% {
    border-color: var(--val-purple, #8a69c7);
    color: var(--val-purple, #8a69c7);
  }
  25% {
    border-color: var(--val-cyan, #22d3ee);
    color: var(--val-cyan, #22d3ee);
  }
  50% {
    border-color: var(--val-pink, #f472b6);
    color: var(--val-pink, #f472b6);
  }
  75% {
    border-color: var(--val-green, #10b981);
    color: var(--val-green, #10b981);
  }
  100% {
    border-color: var(--val-purple, #8a69c7);
    color: var(--val-purple, #8a69c7);
  }
}

/* ============================================
   LOADING STATE
   Replaces text with animated dots
============================================ */
.v2-btn--loading {
  color: transparent !important;
  pointer-events: none;
}

.v2-btn--loading::after {
  content: "";
  position: absolute;
  inset: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  /* Three bouncing dots via box-shadow */
  width: 6px;
  height: 6px;
  border-radius: 50%;
  background: rgba(255, 255, 255, 0.8);
  margin: auto;
  animation: v2BtnLoadDots 1.2s ease-in-out infinite;
  box-shadow:
    -14px 0 0 rgba(255, 255, 255, 0.4),
    14px 0 0 rgba(255, 255, 255, 0.4);
}

@keyframes v2BtnLoadDots {
  0%,
  80%,
  100% {
    transform: scale(0.6);
    opacity: 0.5;
    box-shadow:
      -14px 0 0 rgba(255, 255, 255, 0.4),
      14px 0 0 rgba(255, 255, 255, 0.4);
  }
  40% {
    transform: scale(1);
    opacity: 1;
    box-shadow:
      -14px 0 0 rgba(255, 255, 255, 0.8),
      14px 0 0 rgba(255, 255, 255, 0.8);
  }
}

/* ============================================
   BUTTON GROUP
   Flex container for grouping buttons
============================================ */
.v2-btn-group {
  display: flex;
  flex-wrap: wrap;
  gap: 12px;
  align-items: center;
}

.v2-btn-group--center {
  justify-content: center;
}

.v2-btn-group--vertical {
  flex-direction: column;
  align-items: stretch;
}

/* ============================================
   RESPONSIVE
============================================ */
@media (max-width: 768px) {
  .v2-btn {
    padding: 10px 22px;
    font-size: 0.72rem;
  }
  .v2-btn--sm {
    padding: 7px 14px;
    font-size: 0.6rem;
  }
  .v2-btn--lg {
    padding: 14px 32px;
    font-size: 0.85rem;
  }
}

@media (max-width: 480px) {
  .v2-btn {
    padding: 10px 18px;
    font-size: 0.68rem;
    gap: 6px;
  }
  .v2-btn--lg {
    padding: 12px 26px;
    font-size: 0.8rem;
  }
  .v2-btn-group {
    gap: 8px;
  }
}
