/* ==========================================================================
   BASE — Hale Custom Signs
   Typography, layout primitives, and the shared "signage vocabulary":
   deco chamfers, speed-lines, neon text, gold-leaf text, blueprint grid.
   ========================================================================== */

body {
  background: var(--bg);
  color: var(--text-mid);
  font-family: var(--font-body);
  font-size: var(--fs-body);
  line-height: var(--lh-body);
  font-weight: 400;
  overflow-x: hidden;
  position: relative;
}

/* Ambient shop-light: a fixed, very slow purple/crimson wash behind everything.
   Fixed (not scrolled) so it reads as room light, not content. */
body::before {
  content: "";
  position: fixed;
  inset: 0;
  z-index: 0;
  pointer-events: none;
  background:
    radial-gradient(
      120% 80% at 12% -10%,
      rgba(64, 40, 144, 0.5) 0%,
      transparent 55%
    ),
    radial-gradient(
      90% 70% at 88% 8%,
      rgba(232, 24, 48, 0.16) 0%,
      transparent 50%
    ),
    radial-gradient(
      100% 90% at 50% 105%,
      rgba(64, 40, 144, 0.32) 0%,
      transparent 60%
    );
}

main {
  position: relative;
  z-index: var(--z-base);
}

::selection {
  background: var(--brand-gold);
  color: var(--ink-950);
}

/* Inline SVG icons default to the local text size.
   Without this, an <svg viewBox> with no width/height and no component rule
   inherits `max-width:100%` from the reset and inflates to the FULL width of
   its container — a 1200px Google glyph in a paragraph. Specificity here is
   (0,0,1), so every component rule (`.btn svg`, `.stars svg`, …) overrides it. */
svg {
  width: 1.05em;
  height: 1.05em;
  flex: none;
  /* Overrides the reset's display:block — a block SVG inside a <p> forces its
     own line. Flex/grid children blockify automatically, so icon layouts that
     rely on flex are unaffected. */
  display: inline-block;
  vertical-align: -0.14em;
}

/* --------------------------------------------------------------------------
   FOCUS — visible, on-brand, never removed
   -------------------------------------------------------------------------- */
:focus-visible {
  outline: 2px solid var(--gold-500);
  outline-offset: 3px;
  border-radius: var(--r-xs);
}

.skip-link {
  position: absolute;
  top: -100px;
  left: var(--sp-4);
  z-index: var(--z-toast);
  padding: var(--sp-3) var(--sp-5);
  background: var(--gold-500);
  color: var(--ink-950);
  font-family: var(--font-display);
  font-size: 1.05rem;
  letter-spacing: var(--tr-label);
  border-radius: 0 0 var(--r-sm) var(--r-sm);
  transition: top var(--d-base) var(--e-out);
}
.skip-link:focus {
  top: 0;
}

/* --------------------------------------------------------------------------
   LAYOUT PRIMITIVES
   -------------------------------------------------------------------------- */
.wrap {
  width: 100%;
  max-width: var(--maxw);
  margin-inline: auto;
  padding-inline: var(--gutter);
}
.wrap--narrow {
  max-width: var(--maxw-narrow);
}
.wrap--wide {
  max-width: 1560px;
}

.section {
  position: relative;
  padding-block: var(--section-y);
}
.section--tight {
  padding-block: clamp(3rem, 1.5rem + 6vw, 6rem);
}
.section--flush-t {
  padding-top: 0;
}

.stack > * + * {
  margin-top: var(--flow, var(--sp-4));
}

/* --------------------------------------------------------------------------
   TYPE
   -------------------------------------------------------------------------- */
.display,
.h1,
.h2,
.h3,
.h4 {
  font-family: var(--font-display);
  font-weight: 400; /* Bebas ships single-weight */
  color: var(--text-hi);
  line-height: var(--lh-tight);
  letter-spacing: var(--tr-display);
  text-transform: uppercase;
}

.h1 {
  font-size: var(--fs-h1);
}
.h2 {
  font-size: var(--fs-h2);
}
.h3 {
  font-size: var(--fs-h3);
  line-height: var(--lh-snug);
}
.h4 {
  font-size: var(--fs-h4);
  line-height: var(--lh-snug);
}
.mega {
  font-size: var(--fs-mega);
  letter-spacing: var(--tr-mega);
}

/* Script accent — echoes the "Hale" script in the logo. Never uppercase. */
.script {
  font-family: var(--font-script);
  text-transform: none;
  font-weight: 400;
  letter-spacing: 0;
  line-height: 1.3;
  /* Kaushan sits low; nudge optical alignment */
  display: inline-block;
  transform: translateY(0.06em);
}

/* Eyebrow — the small tracked label above headings */
.eyebrow {
  display: inline-flex;
  align-items: center;
  gap: var(--sp-3);
  font-family: var(--font-body);
  font-size: var(--fs-eyebrow);
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: var(--tr-eyebrow);
  color: var(--gold-400);
  margin-bottom: var(--sp-4);
}
.eyebrow::before {
  content: "";
  width: clamp(24px, 4vw, 52px);
  height: 1px;
  background: linear-gradient(90deg, transparent, var(--gold-500));
  flex: none;
}
.eyebrow--center {
  justify-content: center;
}
.eyebrow--center::after {
  content: "";
  width: clamp(24px, 4vw, 52px);
  height: 1px;
  background: linear-gradient(90deg, var(--gold-500), transparent);
  flex: none;
}

.lede {
  font-size: var(--fs-body-lg);
  line-height: var(--lh-loose);
  color: var(--text-mid);
  max-width: var(--measure);
}

.muted {
  color: var(--text-low);
}
.small {
  font-size: var(--fs-body-sm);
}

.text-center {
  text-align: center;
}
.mx-auto {
  margin-inline: auto;
}

/* --------------------------------------------------------------------------
   SIGNAGE VOCABULARY
   These classes are the theme. Reused across every page.
   -------------------------------------------------------------------------- */

/* Gold leaf — real 23k goldleaf is a service Hale offers. This is its analogue. */
.gold-leaf {
  background: var(--grad-gold);
  background-size: 100% 200%;
  -webkit-background-clip: text;
  background-clip: text;
  color: transparent;
  -webkit-text-fill-color: transparent;
  /* Filter, not text-shadow — text-shadow paints behind clipped text */
  filter: drop-shadow(0 1px 0 rgba(6, 4, 13, 0.9))
    drop-shadow(0 3px 8px rgba(6, 4, 13, 0.6))
    drop-shadow(0 0 22px rgba(248, 192, 8, 0.28));
}

/* Neon tube text — the outline glows, the core is hot white */
.neon {
  color: var(--gold-100);
  text-shadow:
    0 0 4px rgba(255, 246, 221, 0.9),
    0 0 11px rgba(248, 192, 8, 0.8),
    0 0 24px rgba(248, 192, 8, 0.6),
    0 0 52px rgba(248, 192, 8, 0.36),
    0 0 90px rgba(248, 192, 8, 0.2);
}
.neon--crimson {
  color: #fff0f2;
  text-shadow:
    0 0 4px rgba(255, 240, 242, 0.9),
    0 0 11px rgba(232, 24, 48, 0.85),
    0 0 24px rgba(232, 24, 48, 0.6),
    0 0 52px rgba(232, 24, 48, 0.36),
    0 0 90px rgba(232, 24, 48, 0.2);
}
.neon--purple {
  color: #f4f0ff;
  text-shadow:
    0 0 4px rgba(244, 240, 255, 0.9),
    0 0 11px rgba(122, 84, 224, 0.85),
    0 0 26px rgba(122, 84, 224, 0.6),
    0 0 56px rgba(122, 84, 224, 0.36);
}

/* Dimensional letters — stood off the wall, casting real shadow */
.dimensional {
  color: var(--text-hi);
  text-shadow: var(--sh-letter);
}

/* Brushed aluminium fill */
.metal-fill {
  background: var(--grad-metal);
  -webkit-background-clip: text;
  background-clip: text;
  color: transparent;
  -webkit-text-fill-color: transparent;
  filter: drop-shadow(0 2px 4px rgba(6, 4, 13, 0.8));
}

/* Speed-lines — lifted directly from the logo, which flanks "SIGNS" with
   three stacked rules on each side. Used as a section/heading ornament. */
.speed-lines {
  display: flex;
  flex-direction: column;
  gap: 4px;
  width: clamp(28px, 6vw, 64px);
  flex: none;
}
.speed-lines span {
  height: 2px;
  background: var(--crimson-500);
  border-radius: 1px;
  box-shadow: 0 0 8px rgba(232, 24, 48, 0.5);
  transform-origin: right center;
}
.speed-lines span:nth-child(1) {
  width: 100%;
}
.speed-lines span:nth-child(2) {
  width: 78%;
  margin-left: auto;
}
.speed-lines span:nth-child(3) {
  width: 100%;
}
.speed-lines--gold span {
  background: var(--gold-500);
  box-shadow: 0 0 8px rgba(248, 192, 8, 0.5);
}
.speed-lines--left span:nth-child(2) {
  margin-left: 0;
  margin-right: auto;
}

/* Deco chamfer — the logo's cut corners, as a reusable clip */
.chamfer {
  clip-path: polygon(
    var(--chamfer) 0,
    calc(100% - var(--chamfer)) 0,
    100% var(--chamfer),
    100% calc(100% - var(--chamfer)),
    calc(100% - var(--chamfer)) 100%,
    var(--chamfer) 100%,
    0 calc(100% - var(--chamfer)),
    0 var(--chamfer)
  );
}

/* Blueprint grid — the fabrication-drawing motif */
.blueprint {
  position: relative;
}
.blueprint::before {
  content: "";
  position: absolute;
  inset: 0;
  pointer-events: none;
  background-image:
    linear-gradient(rgba(165, 134, 240, 0.07) 1px, transparent 1px),
    linear-gradient(90deg, rgba(165, 134, 240, 0.07) 1px, transparent 1px);
  background-size: 44px 44px;
  mask-image: radial-gradient(80% 60% at 50% 40%, #000 0%, transparent 78%);
  -webkit-mask-image: radial-gradient(
    80% 60% at 50% 40%,
    #000 0%,
    transparent 78%
  );
}

/* Hairline rule with a gold node — section divider */
.rule {
  display: flex;
  align-items: center;
  gap: var(--sp-3);
  width: 100%;
}
.rule::before,
.rule::after {
  content: "";
  height: 1px;
  flex: 1;
  background: linear-gradient(90deg, transparent, var(--border-strong), transparent);
}
.rule i {
  width: 5px;
  height: 5px;
  background: var(--gold-500);
  transform: rotate(45deg);
  flex: none;
  box-shadow: var(--glow-gold);
}

/* --------------------------------------------------------------------------
   UTILITY
   -------------------------------------------------------------------------- */
.visually-hidden {
  position: absolute !important;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  border: 0;
}

.no-scroll {
  overflow: hidden;
}

[hidden] {
  display: none !important;
}
