/**
 * Shared chrome - primary CTA, ghost, pill, card, modal.
 * Dual-selectors keep existing markup working while unifying look.
 */

/* ── Primary CTA (join / enter / main action) - lime→cyan energy ── */
.btn-primary,
.btn.neon,
.enter-btn,
.status-join-btn,
.front-cta.primary,
.submit-btn,
.chime-big-btn.as-primary {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 0.45em;
  padding: 0.85em 1.5em;
  border-radius: var(--radius-pill);
  border: 1px solid var(--status-open-line);
  background: linear-gradient(135deg, rgba(183, 255, 74, 0.95), rgba(49, 227, 255, 0.88));
  color: var(--bg0);
  font-family: var(--font-body);
  font-weight: 700;
  font-size: 0.92rem;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  text-decoration: none;
  box-shadow: var(--glow-lime), var(--glow-blue);
  cursor: pointer;
  transition: transform 0.2s ease, box-shadow 0.2s ease, filter 0.2s ease, opacity 0.2s ease;
}

.btn-primary:hover,
.btn.neon:hover,
.enter-btn:hover,
.status-join-btn:hover,
.front-cta.primary:hover,
.submit-btn:hover {
  transform: translateY(-2px) scale(1.02);
  filter: brightness(1.05);
  box-shadow:
    0 0 22px rgba(183, 255, 74, 0.55),
    0 0 36px rgba(49, 227, 255, 0.35);
}

.btn-primary:focus-visible,
.btn.neon:focus-visible,
.enter-btn:focus-visible,
.status-join-btn:focus-visible,
.front-cta.primary:focus-visible,
.submit-btn:focus-visible {
  outline: none;
  box-shadow: var(--ring);
}

.btn-primary[disabled],
.btn-primary[aria-disabled="true"],
.room-state-disabled,
.submit-btn:disabled {
  opacity: 0.55;
  cursor: not-allowed;
  pointer-events: none;
  transform: none;
  filter: grayscale(0.15);
}

/* ── Ghost / secondary ── */
.btn-ghost,
.front-cta.secondary,
.pill-btn,
.modal-btn.cancel {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 0.4em;
  padding: 0.7em 1.2em;
  border-radius: var(--radius-pill);
  border: 1px solid var(--line);
  background: var(--glass);
  color: var(--ink);
  font-family: var(--font-body);
  font-weight: 600;
  font-size: 0.85rem;
  letter-spacing: 0.06em;
  text-decoration: none;
  cursor: pointer;
  transition: border-color 0.2s ease, background 0.2s ease, box-shadow 0.2s ease;
}

.btn-ghost:hover,
.front-cta.secondary:hover,
.pill-btn:hover,
.modal-btn.cancel:hover {
  border-color: rgba(155, 92, 255, 0.45);
  background: var(--glass2);
  box-shadow: 0 0 18px rgba(155, 92, 255, 0.18);
}

/* ── Brand accent button (pink - rare flourishes only) ── */
.btn-brand {
  border-color: rgba(255, 59, 212, 0.45);
  background: linear-gradient(135deg, rgba(255, 59, 212, 0.85), rgba(155, 92, 255, 0.8));
  color: var(--ink);
  box-shadow: var(--glow-pink);
}

/* ── Pill chip ── */
.pill,
.dj-tag,
.status-kicker {
  display: inline-flex;
  align-items: center;
  gap: 0.35em;
  padding: 0.28em 0.75em;
  border-radius: var(--radius-pill);
  border: 1px solid var(--line);
  background: var(--glass);
  color: var(--muted);
  font-size: 0.72rem;
  font-weight: 700;
  letter-spacing: var(--tracking-label);
  text-transform: uppercase;
}

/* ── Card surface ── */
.card,
.dj-card,
.auth-card,
.status-card,
.glass-card {
  border-radius: var(--radius);
  border: 1px solid var(--line);
  background: linear-gradient(165deg, var(--glass2), var(--glass));
  box-shadow: 0 20px 50px rgba(0, 0, 0, 0.35);
  backdrop-filter: blur(10px);
  -webkit-backdrop-filter: blur(10px);
}

/* ── Modal shell ── */
.modal-overlay {
  /* structure left to pages; unify backdrop when present */
}

.modal-overlay.active {
  /* pages already toggle display */
}

.modal,
.modal-overlay .modal {
  border-radius: var(--radius);
  border: 1px solid var(--line);
  background: linear-gradient(180deg, rgba(16, 10, 28, 0.98), rgba(8, 4, 15, 0.98));
  box-shadow: 0 28px 70px rgba(0, 0, 0, 0.55), 0 0 40px rgba(155, 92, 255, 0.12);
}

.modal-btn.submit {
  border-radius: var(--radius-pill);
  border: 1px solid var(--status-open-line);
  background: linear-gradient(135deg, rgba(183, 255, 74, 0.92), rgba(49, 227, 255, 0.85));
  color: var(--bg0);
  font-weight: 700;
  letter-spacing: 0.08em;
  text-transform: uppercase;
}

/* ── Status language (banner / dots / words) ── */
[data-room-state="open"] .status-dot,
.status-dot.open,
body[data-room-state="open"] .state-dot {
  background: var(--status-open);
  box-shadow: var(--glow-lime);
}

[data-room-state="closed"] .status-dot,
.status-dot.closed,
.status-banner.closed .status-dot,
body[data-room-state="closed"] .state-dot {
  background: var(--status-closed);
  box-shadow: var(--glow-violet);
}

[data-room-state="offline"] .status-dot,
.status-dot.offline,
.status-banner.offline .status-dot,
body[data-room-state="offline"] .state-dot {
  background: var(--status-offline);
  box-shadow: var(--glow-gold);
}

[data-room-state="open"] .status-text,
[data-room-state="open"] .big-status,
[data-room-state="open"] .room-state-word,
body[data-room-state="open"] .room-state-word {
  color: var(--status-open);
  text-shadow: 0 0 18px rgba(183, 255, 74, 0.35);
}

[data-room-state="closed"] .status-text,
[data-room-state="closed"] .big-status,
[data-room-state="closed"] .room-state-word,
body[data-room-state="closed"] .room-state-word,
.status-banner.closed .status-text {
  color: var(--status-closed);
  text-shadow: 0 0 16px rgba(155, 92, 255, 0.3);
}

[data-room-state="offline"] .status-text,
[data-room-state="offline"] .big-status,
[data-room-state="offline"] .room-state-word,
body[data-room-state="offline"] .room-state-word,
.status-banner.offline .status-text {
  color: var(--status-offline);
  text-shadow: 0 0 16px rgba(255, 211, 92, 0.28);
}

/* Open: primary join emphasis; closed/offline de-emphasize multi-neon */
.status-banner[data-room-state="open"],
.status-banner:not(.closed):not(.offline) {
  border-bottom: 1px solid var(--status-open-line);
  background: linear-gradient(90deg, rgba(8, 18, 12, 0.95), rgba(14, 36, 22, 0.9), rgba(8, 18, 12, 0.95));
}

.status-banner.closed,
.status-banner[data-room-state="closed"] {
  border-bottom: 1px solid var(--status-closed-line);
  background: linear-gradient(90deg, rgba(22, 10, 36, 0.96), rgba(14, 8, 24, 0.98), rgba(22, 10, 36, 0.96));
}

.status-banner.offline,
.status-banner[data-room-state="offline"] {
  border-bottom: 1px solid var(--status-offline-line);
  background: linear-gradient(90deg, rgba(36, 24, 8, 0.96), rgba(18, 12, 8, 0.98), rgba(36, 24, 8, 0.96));
}

/* Closed/offline primary CTAs should not scream "join" green */
body[data-room-state="closed"] .front-cta.primary,
body[data-room-state="offline"] .front-cta.primary {
  border-color: var(--line);
  background: linear-gradient(135deg, rgba(155, 92, 255, 0.35), rgba(49, 227, 255, 0.12));
  color: var(--ink);
  box-shadow: var(--glow-violet);
}

body[data-room-state="offline"] .front-cta.primary {
  border-color: var(--status-offline-line);
  background: linear-gradient(135deg, rgba(255, 211, 92, 0.22), rgba(255, 51, 85, 0.12));
  box-shadow: var(--glow-gold);
}
