/* ============================================================
   LIQUID GLASS BUTTON — liquid-glass.css
   Vanilla port of the <LiquidButton /> React component.
   Everything is scoped under .lq-btn so it cannot leak.
   Tokens (--bg, --text, --gold, --accent, --border, --ease) come
   from style.css and are never redefined here.
   Dark-only site — no light-mode branch.
   ============================================================ */

/* ── ROOT ───────────────────────────────────────────── */
.lq-btn {
  position: relative;
  isolation: isolate;                 /* keeps the z-index:-1 refract layer inside */
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  /* default size == --md */
  height: 40px;
  padding: 0 22px;
  font-size: 0.8rem;
  border: 0;
  border-radius: 999px;
  background: transparent;            /* the glass is the child layers, not this */
  color: var(--text);
  font-family: 'Syne', sans-serif;
  font-weight: 600;
  letter-spacing: 0.04em;
  line-height: 1;
  white-space: nowrap;
  text-decoration: none;              /* so <a class="lq-btn"> matches <button> */
  text-align: center;
  cursor: pointer;
  user-select: none;
  -webkit-appearance: none;
  appearance: none;
  -webkit-tap-highlight-color: transparent;
  transition:
    transform 280ms var(--ease),
    color 280ms var(--ease),
    opacity 280ms var(--ease);
}

/* <a> resets — anchors inherit colour on this site, force the token back */
a.lq-btn,
a.lq-btn:visited {
  color: var(--text);
}

/* ── SHINE — the glass edge (dark-mode shadow stack) ── */
.lq-btn__shine {
  position: absolute;
  inset: 0;
  z-index: 0;
  border-radius: inherit;
  pointer-events: none;
  box-shadow:
    0 0 8px rgba(0, 0, 0, 0.03),
    0 2px 6px rgba(0, 0, 0, 0.08),
    inset 3px 3px 0.5px -3.5px rgba(255, 255, 255, 0.09),
    inset -3px -3px 0.5px -3.5px rgba(255, 255, 255, 0.85),
    inset 1px 1px 1px -0.5px rgba(255, 255, 255, 0.6),
    inset -1px -1px 1px -0.5px rgba(255, 255, 255, 0.6),
    inset 0 0 6px 6px rgba(255, 255, 255, 0.12),
    inset 0 0 2px 2px rgba(255, 255, 255, 0.06),
    0 0 12px rgba(0, 0, 0, 0.15);
  transition: box-shadow 320ms var(--ease), opacity 320ms var(--ease);
}

/* ── REFRACT — the backdrop layer ────────────────────
   Base value is a REAL blur so Safari/Firefox still read
   as glass; the SVG displacement is layered on top only
   where url() filters actually resolve (Chromium).       */
.lq-btn__refract {
  position: absolute;
  inset: 0;
  z-index: -1;
  border-radius: inherit;
  overflow: hidden;
  pointer-events: none;
  background: rgba(255, 255, 255, 0.045);
  -webkit-backdrop-filter: blur(6px) saturate(140%);
  backdrop-filter: blur(6px) saturate(140%);
  transition: background-color 320ms var(--ease);
}

/* Enhanced: SVG displacement refraction.
   blur/saturate are kept in the chain so that if a UA parses
   url() as valid but renders it as a no-op, the glass survives. */
@supports (backdrop-filter: url("#container-glass")) {
  .lq-btn__refract {
    background: rgba(255, 255, 255, 0.03);
    -webkit-backdrop-filter: url("#container-glass") blur(2px) saturate(140%);
    backdrop-filter: url("#container-glass") blur(2px) saturate(140%);
  }
}

/* No backdrop-filter at all → paint an opaque-ish fill instead
   of leaving a transparent, invisible button. */
@supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
  .lq-btn__refract {
    background:
      linear-gradient(180deg, rgba(255, 255, 255, 0.10), rgba(255, 255, 255, 0.035)),
      rgba(14, 14, 14, 0.72);
  }

  .lq-btn--gold .lq-btn__refract {
    background:
      linear-gradient(180deg, rgba(201, 169, 110, 0.22), rgba(201, 169, 110, 0.07)),
      rgba(14, 14, 14, 0.76);
  }
}

/* ── CONTENT ────────────────────────────────────────── */
.lq-btn__content {
  position: relative;
  z-index: 1;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  pointer-events: none;               /* clicks always land on the root */
}

.lq-btn__content svg,
.lq-btn__content img {
  flex-shrink: 0;
  width: 16px;
  height: 16px;
  display: block;
}

/* ── SIZES ──────────────────────────────────────────── */
.lq-btn--sm {
  height: 34px;
  padding: 0 16px;
  font-size: 0.72rem;
}

.lq-btn--md {
  height: 40px;
  padding: 0 22px;
  font-size: 0.8rem;
}

.lq-btn--lg {
  height: 48px;
  padding: 0 30px;
  font-size: 0.88rem;
}

.lq-btn--xl {
  height: 56px;
  padding: 0 38px;
  font-size: 0.95rem;
}

.lq-btn--sm .lq-btn__content svg,
.lq-btn--sm .lq-btn__content img { width: 14px; height: 14px; }

.lq-btn--lg .lq-btn__content svg,
.lq-btn--lg .lq-btn__content img { width: 17px; height: 17px; }

.lq-btn--xl .lq-btn__content svg,
.lq-btn--xl .lq-btn__content img { width: 19px; height: 19px; }

/* Touch targets: --sm (34) and --md (40) sit under 44px.
   Grow an invisible hit area rather than the box — no reflow. */
@media (pointer: coarse) {
  .lq-btn--sm::after,
  .lq-btn--md::after,
  .lq-btn:not(.lq-btn--lg):not(.lq-btn--xl)::after {
    content: '';
    position: absolute;
    left: 0;
    right: 0;
    top: 50%;
    height: 44px;
    transform: translateY(-50%);
    border-radius: inherit;
  }
}

/* ── GOLD VARIANT — primary CTA ─────────────────────── */
.lq-btn--gold {
  color: var(--accent);
}

a.lq-btn--gold,
a.lq-btn--gold:visited {
  color: var(--accent);
}

/* warmer inset highlights + a gold edge glow, still glass */
.lq-btn--gold .lq-btn__shine {
  box-shadow:
    0 0 8px rgba(0, 0, 0, 0.03),
    0 2px 6px rgba(0, 0, 0, 0.08),
    inset 3px 3px 0.5px -3.5px rgba(255, 240, 214, 0.14),
    inset -3px -3px 0.5px -3.5px rgba(255, 243, 222, 0.9),
    inset 1px 1px 1px -0.5px rgba(255, 238, 208, 0.66),
    inset -1px -1px 1px -0.5px rgba(255, 238, 208, 0.66),
    inset 0 0 6px 6px rgba(201, 169, 110, 0.18),
    inset 0 0 2px 2px rgba(232, 213, 183, 0.10),
    0 0 0 1px rgba(201, 169, 110, 0.30),
    0 0 12px rgba(0, 0, 0, 0.15),
    0 2px 20px var(--gold-glow2);
}

.lq-btn--gold .lq-btn__refract {
  background: rgba(201, 169, 110, 0.09);
}

@supports (backdrop-filter: url("#container-glass")) {
  .lq-btn--gold .lq-btn__refract {
    background: rgba(201, 169, 110, 0.07);
  }
}

/* ── INTERACTION ────────────────────────────────────── */
.lq-btn:hover {
  transform: scale(1.02);
  will-change: transform;
}

.lq-btn:hover .lq-btn__shine {
  box-shadow:
    0 0 8px rgba(0, 0, 0, 0.03),
    0 2px 6px rgba(0, 0, 0, 0.10),
    inset 3px 3px 0.5px -3.5px rgba(255, 255, 255, 0.14),
    inset -3px -3px 0.5px -3.5px rgba(255, 255, 255, 0.95),
    inset 1px 1px 1px -0.5px rgba(255, 255, 255, 0.75),
    inset -1px -1px 1px -0.5px rgba(255, 255, 255, 0.75),
    inset 0 0 7px 7px rgba(255, 255, 255, 0.17),
    inset 0 0 2px 2px rgba(255, 255, 255, 0.09),
    0 4px 22px rgba(0, 0, 0, 0.28);
}

.lq-btn:hover .lq-btn__refract {
  background: rgba(255, 255, 255, 0.07);
}

.lq-btn--gold:hover .lq-btn__shine {
  box-shadow:
    0 0 8px rgba(0, 0, 0, 0.03),
    0 2px 6px rgba(0, 0, 0, 0.10),
    inset 3px 3px 0.5px -3.5px rgba(255, 243, 222, 0.20),
    inset -3px -3px 0.5px -3.5px rgba(255, 246, 231, 0.96),
    inset 1px 1px 1px -0.5px rgba(255, 240, 214, 0.80),
    inset -1px -1px 1px -0.5px rgba(255, 240, 214, 0.80),
    inset 0 0 7px 7px rgba(201, 169, 110, 0.24),
    inset 0 0 2px 2px rgba(232, 213, 183, 0.14),
    0 0 0 1px rgba(201, 169, 110, 0.42),
    0 4px 26px var(--gold-glow);
}

.lq-btn--gold:hover .lq-btn__refract {
  background: rgba(201, 169, 110, 0.13);
}

/* Press: instant feedback on pointer-down, shorter than hover. */
.lq-btn:active {
  transform: scale(0.97);
  transition: transform 100ms ease-out;
  will-change: transform;
}

.lq-btn:active .lq-btn__shine {
  transition: box-shadow 100ms ease-out;
}

/* Focus */
.lq-btn:focus { outline: none; }

.lq-btn:focus-visible {
  outline: 2px solid var(--gold);
  outline-offset: 3px;
}

/* Disabled */
.lq-btn:disabled,
.lq-btn[aria-disabled="true"] {
  opacity: 0.45;
  cursor: not-allowed;
}

.lq-btn:disabled:hover,
.lq-btn:disabled:active,
.lq-btn[aria-disabled="true"]:hover,
.lq-btn[aria-disabled="true"]:active {
  transform: none;
  will-change: auto;
}

.lq-btn:disabled:hover .lq-btn__shine,
.lq-btn[aria-disabled="true"]:hover .lq-btn__shine {
  box-shadow:
    0 0 8px rgba(0, 0, 0, 0.03),
    0 2px 6px rgba(0, 0, 0, 0.08),
    inset 3px 3px 0.5px -3.5px rgba(255, 255, 255, 0.09),
    inset -3px -3px 0.5px -3.5px rgba(255, 255, 255, 0.85),
    inset 1px 1px 1px -0.5px rgba(255, 255, 255, 0.6),
    inset -1px -1px 1px -0.5px rgba(255, 255, 255, 0.6),
    inset 0 0 6px 6px rgba(255, 255, 255, 0.12),
    inset 0 0 2px 2px rgba(255, 255, 255, 0.06),
    0 0 12px rgba(0, 0, 0, 0.15);
}

/* ── MOTION / TRANSPARENCY / CONTRAST ───────────────── */
@media (prefers-reduced-motion: reduce) {
  .lq-btn,
  .lq-btn:hover,
  .lq-btn:active {
    transform: none;
    will-change: auto;
    transition: color 200ms linear, opacity 200ms linear;
  }

  .lq-btn__shine,
  .lq-btn:active .lq-btn__shine {
    transition: box-shadow 200ms linear, opacity 200ms linear;
  }

  .lq-btn__refract {
    transition: background-color 200ms linear;
  }
}

@media (prefers-reduced-transparency: reduce) {
  .lq-btn__refract {
    -webkit-backdrop-filter: none;
    backdrop-filter: none;
    background: rgba(16, 16, 16, 0.96);
    box-shadow: inset 0 0 0 1px var(--border-2);
  }

  .lq-btn:hover .lq-btn__refract {
    background: rgba(26, 26, 26, 0.96);
  }

  .lq-btn--gold .lq-btn__refract,
  .lq-btn--gold:hover .lq-btn__refract {
    background: rgba(24, 20, 14, 0.96);
    box-shadow: inset 0 0 0 1px rgba(201, 169, 110, 0.45);
  }

  .lq-btn__shine {
    box-shadow: none;
  }
}

@media (prefers-contrast: more) {
  .lq-btn {
    color: #fff;
  }

  .lq-btn__refract {
    -webkit-backdrop-filter: none;
    backdrop-filter: none;
    background: #0d0d0d;
    box-shadow: inset 0 0 0 2px rgba(255, 255, 255, 0.72);
  }

  .lq-btn__shine {
    box-shadow: none;
  }

  .lq-btn--gold {
    color: var(--accent);
  }

  .lq-btn--gold .lq-btn__refract {
    background: #100d08;
    box-shadow: inset 0 0 0 2px var(--gold);
  }

  .lq-btn:focus-visible {
    outline-width: 3px;
  }
}
