/* ================================================
   Self-hosted fonts — no Google Fonts dependency.
   The site renders in the right faces even if a
   third party is blocked, slow, or offline.
   ================================================ */
@font-face {
  font-family: 'Archivo Black';
  src: url('assets/fonts/archivo-black-400.woff2') format('woff2');
  font-weight: 400; font-style: normal; font-display: swap;
}
@font-face {
  font-family: 'IBM Plex Mono';
  src: url('assets/fonts/ibm-plex-mono-400.woff2') format('woff2');
  font-weight: 400; font-style: normal; font-display: swap;
}
@font-face {
  font-family: 'IBM Plex Mono';
  src: url('assets/fonts/ibm-plex-mono-500.woff2') format('woff2');
  font-weight: 500; font-style: normal; font-display: swap;
}
@font-face {
  font-family: 'IBM Plex Mono';
  src: url('assets/fonts/ibm-plex-mono-600.woff2') format('woff2');
  font-weight: 600; font-style: normal; font-display: swap;
}
@font-face {
  font-family: 'IBM Plex Mono';
  src: url('assets/fonts/ibm-plex-mono-700.woff2') format('woff2');
  font-weight: 700; font-style: normal; font-display: swap;
}

/* ================================================
   STEWSKIM — Global Styles
   Palette: black + violet  (#000000 / #a855f7)
   Black matches the StewSkim logo plate exactly.
   Fonts:   Archivo Black (display) + IBM Plex Mono (body)
   ================================================ */

/* --- Reset & Base --- */
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
html { scroll-behavior: smooth; }
body {
  background: #000000;
  color: #f2eefa;
  font-family: 'IBM Plex Mono', monospace;
  font-size: 14px;
  line-height: 1.6;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}
a { color: inherit; text-decoration: none; }
img { max-width: 100%; height: auto; display: block; }
ul { list-style: none; }

/* --- Typography --- */
.disp {
  font-family: 'Archivo Black', sans-serif;
  text-transform: uppercase;
  letter-spacing: -0.015em;
  line-height: 0.98;
  color: #f2eefa;
}
.mono {
  font-family: 'IBM Plex Mono', monospace;
  font-weight: 500;
  letter-spacing: 0.3em;
  text-transform: uppercase;
  font-size: 10px;
  color: #a49db3;
}
.sub {
  font: 400 13px/1.6 'IBM Plex Mono', monospace;
  letter-spacing: 0.03em;
  color: #a49db3;
}
.foot {
  font: 400 10px 'IBM Plex Mono', monospace;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: #7d7590;
}
.lnk {
  font: 500 10px 'IBM Plex Mono', monospace;
  letter-spacing: 0.3em;
  text-transform: uppercase;
  color: #a49db3;
}

/* --- Layout --- */
.site-wrapper {
  min-height: 100vh;
  min-height: 100svh;
  display: flex;
  flex-direction: column;
}
.page-content { flex: 1; }

/* --- Nav --- */
.site-nav {
  padding: 14px 34px;
  border-bottom: 1px solid rgba(232, 230, 238, 0.1);
  /* Stays put while the page scrolls. Sticky (not fixed) so it keeps its
     place in the flow and the home page's full-height math still holds. */
  position: sticky;
  top: 0;
  z-index: 50;                       /* under the lightbox, which is 100 */
  background: rgba(0, 0, 0, 0.82);
  -webkit-backdrop-filter: blur(14px) saturate(0.9);
  backdrop-filter: blur(14px) saturate(0.9);
}
@supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
  .site-nav { background: #000000; }
}
.nav-links {
  display: flex;
  gap: 6px;
  align-items: center;
}
.nav-links a {
  font: 500 10px 'IBM Plex Mono', monospace;
  letter-spacing: 0.3em;
  text-transform: uppercase;
  color: #a49db3;
  padding: 4px 2px;
  transition: color 0.2s;
}
.nav-links a:hover,
.nav-links a.active {
  color: #f2eefa;
}
.nav-sep {
  color: #a49db3;
  font-size: 10px;
  letter-spacing: 0.3em;
  user-select: none;
}

/* --- Buttons --- */
.cta {
  display: inline-flex;
  align-items: center;
  font: 700 12px 'IBM Plex Mono', monospace;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  padding: 11px 20px;
  background: #a855f7;
  color: #0a0a0a;
  border: 2px solid #000;
  box-shadow: 3px 3px 0 #000;
  cursor: pointer;
  transition: transform 0.15s, box-shadow 0.15s;
}
.cta:hover {
  transform: translate(-1px, -1px);
  box-shadow: 4px 4px 0 #000;
}

/* --- HOME PAGE --- */
/* Percentage heights need a definite ancestor. The other pages keep
   min-height so they can scroll; only home is pinned to one screen. */
body.home .site-wrapper { height: 100vh; height: 100svh; }
body.home .page-content { min-height: 0; }
/* The animation alone, centred on one screen. Its final frame is the
   StewSkim logo, which is why no separate logo image sits here. */
.home-main {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: clamp(18px, 3vh, 34px);
  padding: 26px 28px 34px;
  min-height: 0;
}
.home-animation {
  /* Takes the space under the nav; the video is clamped inside it so the
     page never scrolls at any viewport. */
  flex: 1 1 auto;
  min-height: 0;
  width: 100%;
  display: flex;
  align-items: center;
  justify-content: center;
}
/* Page is #000000, matching the logo plate. The current clip's blacks are
   already crushed to pure #000, so the panel has no visible seam — verified
   by sampling the rendered page. Keep the final animation's blacks at 0 too. */
.hero-video {
  /* Intrinsic 16:9 clamped on both axes — the browser keeps the ratio. */
  width: auto;
  height: auto;
  max-width: min(92%, 1100px);
  max-height: 100%;
  display: block;
  background: #000000;
  /* Feather the frame edges so the clip doesn't read as a rectangle pasted
     on the page. A drawn border would still be sitting there around the
     final logo frame; a fade vanishes into the black once the scene does. */
  -webkit-mask-image:
    linear-gradient(to right,  transparent 0%, #000 7%, #000 93%, transparent 100%),
    linear-gradient(to bottom, transparent 0%, #000 6%, #000 94%, transparent 100%);
  -webkit-mask-composite: source-in;
  mask-image:
    linear-gradient(to right,  transparent 0%, #000 7%, #000 93%, transparent 100%),
    linear-gradient(to bottom, transparent 0%, #000 6%, #000 94%, transparent 100%);
  mask-composite: intersect;
}
/* No motion: show the animation's final frame — the logo — as a still. */
@media (prefers-reduced-motion: reduce) {
  .hero-video { display: none; }
  .home-animation::before {
    content: '';
    width: min(100%, calc(100% - 0px));
    max-width: 1180px;
    max-height: 100%;
    aspect-ratio: 16 / 9;
    background: url('assets/hero-poster.jpg') center/contain no-repeat #000;
  }
}

/* --- MINI MOVIES PAGE --- */
.mm-hero {
  padding: 0 34px 30px;
}
.mm-player {
  position: relative;
  aspect-ratio: 16 / 9;
  background: #000;
  border: 1.5px solid rgba(232, 230, 238, 0.28);
  display: flex;
  align-items: center;
  justify-content: center;
  overflow: hidden;
  border-radius: 2px;
}
.mm-player .now-playing {
  position: absolute;
  top: 12px;
  left: 14px;
}
.mm-title {
  padding: 34px 34px 16px;
}
.poster-grid {
  padding: 0 34px 34px;
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 22px;
}
.poster {
  position: relative;
  aspect-ratio: 2 / 3;
  border: 1.5px solid rgba(232, 230, 238, 0.28);
  overflow: hidden;
  cursor: pointer;
  transition: transform 0.2s, border-color 0.2s;
}
.poster:hover {
  transform: scale(1.02);
  border-color: #a855f7;
}
.poster img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.poster .badge {
  position: absolute;
  top: 9px;
  left: 9px;
  font: 600 8px 'IBM Plex Mono', monospace;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: #0a0a0a;
  background: #a855f7;
  padding: 3px 7px;
  z-index: 1;
}
.play-btn {
  width: 44px;
  height: 44px;
  border-radius: 50%;
  background: rgba(168, 85, 247, 0.85);
  display: flex;
  align-items: center;
  justify-content: center;
  transition: opacity 0.2s;
}
.poster .play-btn {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  opacity: 0;
}
.poster:hover .play-btn { opacity: 1; }
.play-btn::after {
  content: '';
  border-left: 14px solid #0a0a0a;
  border-top: 8px solid transparent;
  border-bottom: 8px solid transparent;
  margin-left: 3px;
}
.ptitle {
  font: 600 14px 'IBM Plex Mono', monospace;
  letter-spacing: 0.06em;
  line-height: 1.35;
  color: #f2eefa;
  text-transform: uppercase;
  margin-top: 10px;
}

/* --- STEW CREW PAGE --- */
.crew-section { padding: 0 34px 20px; }
.rider-band {
  display: flex;
  gap: 28px;
  align-items: stretch;
  padding: 22px 0;
}
.rider-band + .rider-band {
  border-top: 1px solid rgba(232, 230, 238, 0.12);
}
.rider-band:nth-child(even) {
  flex-direction: row-reverse;
}
.rider-photo {
  flex: 1 1 0;
  min-width: 0;
  aspect-ratio: 16 / 10;
  background: #000000 center/cover no-repeat;
  border-radius: 2px;
}
.rider-info {
  flex: 1 1 0;
  min-width: 0;
  display: flex;
  flex-direction: column;
  justify-content: space-between;
  gap: 16px;
  padding-bottom: 2px;
}
.rider-name {
  font-size: 52px;
  line-height: 0.9;
}
.rider-stats {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 14px 20px;
}
.rider-stats .stat-label {
  font: 400 10px 'IBM Plex Mono', monospace;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: #7d7590;
}
.rider-stats .stat-value {
  font: 500 13px 'IBM Plex Mono', monospace;
  letter-spacing: 0.3em;
  color: #a49db3;
  margin-top: 4px;
  text-transform: none;
  letter-spacing: 0.06em;
}
.rider-stats .stat-full { grid-column: 1 / -1; }

/* --- SWAG PAGE --- */
.swag-hero {
  text-align: center;
  padding: 68px 34px 40px;
}
.swag-hero .disp { margin-top: 72px; }
.swag-hero .sub { margin: 14px auto 0; max-width: 460px; }
.swag-image {
  padding: 0 34px 34px;
}
.swag-image img {
  width: 100%;
  max-width: 880px;
  margin: 0 auto;
  aspect-ratio: 16 / 9;
  object-fit: cover;
  border-radius: 2px;
}

/* --- CONTACT PAGE --- */
.contact-section {
  text-align: center;
  padding: 60px 34px;
}
.contact-section .disp { margin-bottom: 24px; }
.contact-links {
  display: flex;
  justify-content: center;
  gap: 30px;
  margin-top: 32px;
  flex-wrap: wrap;
}
.contact-link {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 8px;
  transition: color 0.2s;
}
.contact-link:hover { color: #a855f7; }
.contact-link .stat-label {
  font: 400 8px 'IBM Plex Mono', monospace;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: #7d7590;
}
.contact-link .stat-value {
  font: 500 12px 'IBM Plex Mono', monospace;
  letter-spacing: 0.06em;
  color: #a49db3;
}

/* --- Logo in pages (smaller on inner pages) --- */
.page-logo {
  /* It's an <a>, so it needs block for the vertical padding to hold. */
  display: block;
  text-align: center;
  padding: 68px 34px 72px;
}
.page-logo img {
  height: 96px;
  width: auto;
  margin: 0 auto;
}

/* ================================================
   RESPONSIVE — Mobile
   ================================================ */
@media (max-width: 768px) {
  /* Nav — one small row, per the narrow artboard */
  .site-nav { padding: 10px 16px; }
  .nav-links { gap: 5px; flex-wrap: wrap; }
  .nav-links a { font-size: 8px; letter-spacing: 0.22em; }
  .nav-sep { font-size: 8px; letter-spacing: 0.22em; }

  /* Home */
  .home-main { padding: 18px 16px 24px; gap: 22px; }


  /* Page logo */
  .page-logo { padding: 40px 16px 42px; }
  .page-logo img { height: 56px; }

  /* Mini Movies */
  .mm-hero { padding: 0 16px 16px; }
  .mm-title { padding: 20px 16px 10px; }
  .mm-title .disp { font-size: 18px; }
  .poster-grid {
    padding: 0 16px 18px;
    grid-template-columns: repeat(2, 1fr);
    gap: 14px;
  }
  .ptitle { font-size: 11px; }

  /* Stew Crew */
  .crew-section { padding: 0 16px 8px; }
  .rider-band {
    flex-direction: column !important;
    gap: 14px;
    padding: 16px 0;
  }
  .rider-photo { aspect-ratio: 4 / 3; }
  .rider-name { font-size: 30px; }
  .rider-stats { gap: 10px 12px; }
  .rider-stats .stat-label { font-size: 9px; }
  .rider-stats .stat-value { font-size: 11px; }

  /* Swag */
  .swag-hero { padding: 40px 16px 26px; }
  .swag-hero .disp { font-size: 18px; margin-top: 44px; }
  .swag-hero .sub { font-size: 10px; }
  .swag-image { padding: 0 16px 18px; }

  /* Contact */
  .contact-section { padding: 40px 16px; }
  .contact-links { gap: 20px; flex-direction: column; }

}


/* ================================================
   MULLIGAN'S DROP BUTTON
   A wide, low rectangle — present but not shouting.
   One flat shade of purple, thin housing, hard black
   outline. No gloss, no gradient, no shading.
   ================================================ */
.drop-btn {
  position: relative;
  flex: none;
  padding: 17px 30px;
  border-radius: 6px;
  display: grid;
  place-items: center;
  background: #3c3349;                  /* housing ring — matte, reads against black */
  border: 3px solid #000;
  box-shadow: 0 6px 0 #000;             /* thickness: hard, zero blur */
  cursor: pointer;
  -webkit-tap-highlight-color: transparent;
  transition: transform 0.12s ease, box-shadow 0.12s ease;
}
.drop-btn::before {
  content: '';
  position: absolute;
  inset: 7px;
  border-radius: 3px;
  background: #a855f7;      /* one flat shade, no second tone */
  border: 2px solid #000;
}
.drop-btn-text {
  position: relative;
  z-index: 1;
  font-family: 'IBM Plex Mono', monospace;
  font-weight: 700;
  font-size: 15px;
  line-height: 1.22;
  letter-spacing: 0.02em;
  text-transform: uppercase;
  text-align: center;
  color: #0a0a0a;
}
.drop-btn:hover {
  transform: translateY(-2px);
  box-shadow: 0 8px 0 #000;
}
.drop-btn:active {
  transform: translateY(5px);           /* actually depresses */
  box-shadow: 0 1px 0 #000;
}
.drop-btn:focus-visible {
  outline: 2px solid #f2eefa;
  outline-offset: 5px;
}
@media (prefers-reduced-motion: reduce) {
  .drop-btn { transition: none; }
}
@media (max-width: 768px) {
  .drop-btn { padding: 14px 20px; box-shadow: 0 5px 0 #000; }
  .drop-btn::before { inset: 6px; }
  .drop-btn-text { font-size: 12px; }
  .drop-btn:active { transform: translateY(4px); }
}

/* --- SWAG: shirt turntables --- */
.shirt-grid {
  display: grid;
  /* Fixed-width columns so the gap is the actual space you see between
     the shirts — with 1fr columns the video floats inside a wider cell
     and changing the gap barely moves them. */
  grid-template-columns: repeat(2, minmax(0, 400px));
  justify-content: center;
  gap: 155px;
  padding: 0 34px 48px;
  margin: 0 auto;
}
.shirt { text-align: center; }
.shirt-video {
  width: 100%;
  max-width: 400px;
  aspect-ratio: 1 / 1;
  display: block;
  margin: 0 auto;
  background: #000000;
  object-fit: contain;
}
.shirt-name {
  font: 700 17px 'IBM Plex Mono', monospace;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: #f2eefa;
  margin-top: 16px;
}
.shirt-price {
  font: 700 15px 'IBM Plex Mono', monospace;
  letter-spacing: 0.06em;
  color: #a49db3;
  margin-top: 7px;
}
@media (max-width: 768px) {
  .shirt-grid { gap: 18px; padding: 0 16px 30px; grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .shirt-name { font-size: 13px; margin-top: 11px; }
  .shirt-price { font-size: 12px; margin-top: 5px; }
}
