/* ==========================================================================
   VIEWS — per-page components
   ========================================================================== */

/* ── shared card chrome ─────────────────────────────────────────────────── */
.card{
  position:relative;
  border-radius:var(--radius);
  border:1px solid var(--line);
  background:var(--glass-solid);
  overflow:hidden;
  transition:transform .5s var(--ease-out), border-color .4s var(--ease), box-shadow .4s var(--ease);
}
/* specular sheen that tracks the pointer (set by fx.js) */
.card::before{
  content:'';
  position:absolute; inset:0;
  z-index:3;
  pointer-events:none;
  opacity:0;
  transition:opacity .4s var(--ease);
  background:radial-gradient(340px circle at var(--mx,50%) var(--my,50%), rgba(200,125,255,.16), transparent 62%);
}
.card:hover::before{ opacity:1; }
.card:hover{
  border-color:rgba(200,125,255,.55);
  box-shadow:0 18px 50px rgba(0,0,0,.5), var(--glow-violet);
}

/* ══ HOME ═══════════════════════════════════════════════════════════════ */
.hero{
  position:relative;
  min-height:min(88vh,780px);
  display:grid;
  place-items:center;
  text-align:center;
  padding:4rem 1.5rem 6rem;
  overflow:hidden;
}
.hero__glow{
  position:absolute;
  top:-20%; left:50%;
  width:min(120vw,1100px);
  aspect-ratio:1;
  transform:translateX(-50%);
  background:radial-gradient(circle, rgba(168,85,247,.22), transparent 62%);
  /* blur() removed: this is already a soft radial gradient, so the blur was
     visually redundant — but it forced the whole 1100px layer to be
     re-rasterised on every frame of the scale animation below. */
  animation:heroPulse 9s ease-in-out infinite alternate;
  pointer-events:none;
}
@keyframes heroPulse{
  to{ transform:translateX(-50%) scale(1.14); opacity:.75; }
}
/* deliberately no z-index: a stacking context here would isolate the
   logo's mix-blend-mode and the black plate would come back */
.hero__inner{ position:relative; max-width:900px; }

.hero__logo{
  width:min(72vw,440px);
  margin:0 auto 1.6rem;
  /* the source art sits on a near-black plate. screen blending drops most of
     it out; the mask feathers the remaining rectangle edge so the wordmark
     melts into the page instead of sitting in a visible box. */
  mix-blend-mode:screen;
  mask-image:radial-gradient(ellipse 76% 68% at 50% 50%, #000 52%, transparent 100%);
  -webkit-mask-image:radial-gradient(ellipse 76% 68% at 50% 50%, #000 52%, transparent 100%);
  filter:drop-shadow(0 0 34px rgba(99,245,66,.5)) drop-shadow(0 0 70px rgba(168,85,247,.4));
  /* Deliberately NOT animated.
     This one element stacks three of the most expensive things you can ask
     a compositor for — two drop-shadows, a mask, and screen blending against
     a live backdrop. Static, it rasterises once and costs nothing. Animated,
     all three had to be redone every single frame. The ambient .hero__glow
     behind it already gives the logo life. */
}

.hero__title{
  font-size:clamp(2.4rem,8vw,5.6rem);
  letter-spacing:.06em;
  margin-bottom:1rem;
  text-shadow:0 0 40px rgba(168,85,247,.5);
}
.hero__tagline{
  font-family:var(--ui);
  font-size:clamp(.95rem,2.2vw,1.2rem);
  letter-spacing:.06em;
  color:var(--ink-soft);
  margin:0 auto 2.4rem;
  max-width:44ch;
  min-height:1.6em;
}
/* typewriter caret */
.hero__tagline::after{
  content:'';
  display:inline-block;
  width:2px; height:1em;
  margin-left:3px;
  vertical-align:-.14em;
  background:var(--toxic);
  animation:caret 1s steps(2) infinite;
}
.hero__tagline.is-done::after{ display:none; }
@keyframes caret{ 50%{ opacity:0; } }

.hero__cta{ display:flex; gap:1rem; justify-content:center; flex-wrap:wrap; }

.hero__scroll{
  position:absolute;
  bottom:2rem; left:50%;
  transform:translateX(-50%);
  width:24px; height:38px;
  border:2px solid var(--line);
  border-radius:14px;
}
.hero__scroll span{
  position:absolute;
  top:7px; left:50%;
  width:3px; height:7px;
  margin-left:-1.5px;
  border-radius:2px;
  background:var(--toxic);
  animation:scrollDot 1.9s var(--ease) infinite;
}
@keyframes scrollDot{
  0%{ opacity:0; transform:translateY(0); }
  35%{ opacity:1; }
  100%{ opacity:0; transform:translateY(14px); }
}

/* split intro panel */
.panel{
  border-radius:var(--radius);
  border:1px solid var(--line);
  background:var(--glass);
  backdrop-filter:blur(14px);
  overflow:hidden;
  margin-bottom:4rem;
}
.panel--split{
  display:grid;
  grid-template-columns:1.15fr .85fr;
}
.panel__body{ padding:clamp(1.6rem,4vw,3rem); }
.panel__media{ position:relative; min-height:320px; }
.panel__media img{
  position:absolute; inset:0;
  width:100%; height:100%;
  object-fit:cover;
}
.panel__media::after{
  content:'';
  position:absolute; inset:0;
  background:linear-gradient(90deg, var(--glass), transparent 45%);
}

.statline{
  display:flex;
  flex-wrap:wrap;
  gap:2.2rem;
  margin-top:2rem;
  padding-top:1.6rem;
  border-top:1px solid var(--line-soft);
}
.stat__num{
  display:block;
  font-family:var(--display);
  font-size:2.4rem;
  line-height:1;
  color:var(--toxic);
  text-shadow:var(--glow-toxic);
}
.stat__label{
  font-family:var(--ui);
  font-size:.68rem;
  letter-spacing:.2em;
  text-transform:uppercase;
  color:var(--ink-mute);
}

/* portal cards */
/* Fixed 3 across so the six cards read as two even rows. auto-fit was
   packing as many 230px columns as the viewport allowed, which gave 5+1
   on a wide screen. */
.portal-grid{
  display:grid;
  grid-template-columns:repeat(3,1fr);
  gap:1.1rem;
  margin-bottom:4rem;
}
.portal{
  display:block;
  padding:1.6rem 1.4rem 1.5rem;
  border-radius:var(--radius);
  border:1px solid var(--line);
  background:var(--glass-solid);
  /* leaving the card: ease back out gently */
  transition:transform .4s var(--ease-out), border-color .35s var(--ease), box-shadow .35s var(--ease);
}
.portal:hover{
  transform:translateY(-6px);
  border-color:var(--accent,var(--violet));
  box-shadow:0 16px 44px rgba(0,0,0,.5), 0 0 26px color-mix(in srgb, var(--accent,var(--violet)) 45%, transparent);
  /* arriving: colour and glow land almost immediately so the card feels
     responsive, while the lift keeps a little travel. Fast in, slow out. */
  transition:transform .18s var(--ease-out), border-color .08s linear, box-shadow .1s linear;
}
.portal__icon{ font-size:1.7rem; display:block; margin-bottom:.7rem; }
.portal h3{
  font-size:1.35rem;
  margin-bottom:.35rem;
  color:var(--accent,var(--violet-hot));
}
.portal p{ margin:0; color:var(--ink-mute); font-size:.9rem; line-height:1.6; }
.portal__go{
  display:inline-block;
  margin-top:.9rem;
  font-family:var(--ui);
  font-size:.72rem;
  font-weight:700;
  letter-spacing:.16em;
  text-transform:uppercase;
  color:var(--accent,var(--violet-hot));
  transition:transform .3s var(--ease);
}
.portal:hover .portal__go{
  transform:translateX(5px);
  transition:transform .16s var(--ease-out);
}

/* bus teaser */
.bus-teaser{
  position:relative;
  border-radius:var(--radius);
  overflow:hidden;
  border:1px solid var(--line);
  min-height:300px;
  display:grid;
}
.bus-teaser img{
  grid-area:1/1;
  width:100%; height:100%;
  object-fit:cover;
  transition:transform 1.2s var(--ease-out);
}
.bus-teaser:hover img{ transform:scale(1.05); }
.bus-teaser__body{
  grid-area:1/1;
  position:relative;
  align-self:end;
  padding:clamp(1.5rem,4vw,2.8rem);
  background:linear-gradient(0deg, rgba(6,3,13,.94) 8%, rgba(6,3,13,.55) 55%, transparent);
}
.bus-teaser__body h3{
  font-size:clamp(1.9rem,5vw,3.2rem);
  margin-bottom:.5rem;
  text-shadow:var(--glow-toxic);
  color:var(--toxic);
}
.bus-teaser__body p{ color:var(--ink-soft); margin:0 0 1.3rem; }

/* ══ STREAM ═════════════════════════════════════════════════════════════ */
.stream-layout{
  display:grid;
  grid-template-columns:1fr 340px;
  gap:1.1rem;
  margin-bottom:2rem;
}
.stream-player,
.stream-chat{
  position:relative;
  border-radius:var(--radius);
  border:1px solid var(--line);
  overflow:hidden;
  background:var(--midnight-2);
  box-shadow:0 20px 60px rgba(0,0,0,.55), var(--glow-violet);
}
.stream-player{ aspect-ratio:16/9; }
.stream-chat{ height:auto; min-height:520px; }
.stream-player iframe,
.stream-chat iframe{
  position:absolute; inset:0;
  width:100%; height:100%;
  border:0;
}
.embed-skeleton{
  position:absolute; inset:0;
  display:grid;
  place-items:center;
  font-family:var(--ui);
  font-size:.8rem;
  letter-spacing:.2em;
  text-transform:uppercase;
  color:var(--ink-faint);
  background:
    linear-gradient(100deg, transparent 20%, rgba(168,85,247,.09) 40%, transparent 60%) 0 0/200% 100%,
    var(--midnight-2);
  animation:shimmer 1.6s linear infinite;
}
@keyframes shimmer{ to{ background-position:-200% 0; } }

.stream-actions{
  display:flex;
  flex-wrap:wrap;
  gap:.8rem;
}

/* ══ VAULT ══════════════════════════════════════════════════════════════ */
.segmented{
  position:relative;
  display:inline-flex;
  padding:.32rem;
  margin-bottom:2.2rem;
  border-radius:12px;
  border:1px solid var(--line);
  background:var(--glass);
}
.segmented button{
  position:relative;
  z-index:2;
  padding:.6rem 1.5rem;
  border-radius:9px;
  font-family:var(--ui);
  font-size:.78rem;
  font-weight:700;
  letter-spacing:.14em;
  text-transform:uppercase;
  color:var(--ink-mute);
  transition:color .3s var(--ease);
}
.segmented button.is-active{ color:#150525; }
.segmented__glide{
  position:absolute;
  top:.32rem; bottom:.32rem;
  left:0; width:0;
  z-index:1;
  border-radius:9px;
  background:linear-gradient(135deg,var(--violet-hot),var(--magenta));
  box-shadow:var(--glow-violet);
  transition:left .4s var(--ease-out), width .4s var(--ease-out);
}

.media-grid{
  display:grid;
  grid-template-columns:repeat(auto-fill,minmax(300px,1fr));
  gap:1.2rem;
}
.media-card{ display:flex; flex-direction:column; }
.media-card__frame{
  position:relative;
  aspect-ratio:16/9;
  background:var(--midnight-2);
}
.media-card__frame iframe{
  position:absolute; inset:0;
  width:100%; height:100%;
  border:0;
}

/* click-to-play poster — no Twitch player exists until this is clicked */
.media-facade{
  position:absolute; inset:0;
  width:100%; height:100%;
  padding:0;
  display:block;
  cursor:pointer;
  background:linear-gradient(140deg, var(--plum), var(--midnight) 70%);
  overflow:hidden;
}
.media-facade img{
  position:absolute; inset:0;
  width:100%; height:100%;
  object-fit:cover;
  transition:transform .7s var(--ease-out), filter .4s var(--ease);
}
.media-facade:hover img{ transform:scale(1.06); filter:saturate(1.15); }

.media-facade__scrim{
  position:absolute; inset:0;
  background:radial-gradient(ellipse at 50% 50%, rgba(6,3,13,.15), rgba(6,3,13,.7));
  transition:opacity .35s var(--ease);
}
.media-facade:hover .media-facade__scrim{ opacity:.6; }

.media-facade__play{
  position:absolute;
  top:50%; left:50%;
  width:62px; height:62px;
  margin:-31px 0 0 -31px;
  border-radius:50%;
  border:2px solid rgba(255,255,255,.9);
  background:rgba(168,85,247,.35);
  box-shadow:var(--glow-violet);
  transition:transform .35s var(--ease-out), background .35s var(--ease);
}
/* the triangle */
.media-facade__play::after{
  content:'';
  position:absolute;
  top:50%; left:54%;
  transform:translate(-50%,-50%);
  border-style:solid;
  border-width:11px 0 11px 18px;
  border-color:transparent transparent transparent #fff;
}
.media-facade:hover .media-facade__play{
  transform:scale(1.14);
  background:linear-gradient(135deg,var(--violet-hot),var(--magenta));
}

.media-facade__dur{
  position:absolute;
  right:.6rem; bottom:.6rem;
  padding:.16rem .45rem;
  border-radius:5px;
  background:rgba(6,3,13,.85);
  font-family:var(--ui);
  font-size:.7rem;
  font-weight:600;
  letter-spacing:.06em;
  color:var(--ink-soft);
}
.media-card__meta{
  padding:.95rem 1.1rem 1.1rem;
  border-top:1px solid var(--line-soft);
}
.media-card__meta h4{
  font-size:1.1rem;
  margin-bottom:.3rem;
  color:var(--ink);
}
.media-card__sub{
  font-family:var(--ui);
  font-size:.72rem;
  letter-spacing:.14em;
  text-transform:uppercase;
  color:var(--ink-mute);
}

/* empty state */
.empty-state{
  grid-column:1/-1;
  padding:3.5rem 2rem;
  text-align:center;
  border-radius:var(--radius);
  border:1px dashed var(--line);
  background:rgba(255,255,255,.02);
}
.empty-state__icon{ font-size:2.4rem; display:block; margin-bottom:.8rem; }
.empty-state h4{ font-size:1.4rem; margin-bottom:.5rem; color:var(--violet-hot); }
.empty-state p{ color:var(--ink-mute); margin:0 auto 1.4rem; max-width:46ch; font-size:.92rem; }
.empty-state code{
  font-family:var(--ui);
  font-size:.85em;
  padding:.14em .45em;
  border-radius:5px;
  background:rgba(168,85,247,.16);
  color:var(--violet-hot);
}

/* ══ ALCHEMIST'S LAB ════════════════════════════════════════════════════ */
.lab{
  display:grid;
  grid-template-columns:1fr 420px;
  gap:1.4rem;
  margin-bottom:3.5rem;
}
.lab__shelf{
  padding:1.6rem;
  border-radius:var(--radius);
  border:1px solid var(--line);
  background:var(--glass);
  backdrop-filter:blur(12px);
}
.lab__shelf-head{
  display:flex;
  align-items:baseline;
  justify-content:space-between;
  margin-bottom:1.2rem;
}
.lab__shelf-head h3{ font-size:1.4rem; }
.lab__shelf-head span{
  font-family:var(--ui);
  font-size:.74rem;
  letter-spacing:.14em;
  text-transform:uppercase;
  color:var(--ink-mute);
}

.ingredient-grid{
  display:grid;
  grid-template-columns:repeat(auto-fill,minmax(160px,1fr));
  gap:.55rem;
  margin-bottom:1.5rem;
}
.ingredient{
  padding:.72rem .8rem;
  border-radius:9px;
  border:1px solid var(--line-soft);
  background:rgba(255,255,255,.03);
  font-family:var(--ui);
  font-size:.72rem;
  font-weight:600;
  letter-spacing:.08em;
  text-align:left;
  color:var(--ink-soft);
  transition:all .28s var(--ease);
}
.ingredient:hover{
  border-color:var(--violet);
  color:var(--ink);
  transform:translateY(-2px);
}
.ingredient.is-picked{
  border-color:var(--toxic);
  background:rgba(99,245,66,.12);
  color:var(--toxic);
  box-shadow:0 0 16px rgba(99,245,66,.28);
}
.ingredient.is-picked::before{ content:'✦ '; }

.lab__controls{ display:flex; gap:.7rem; flex-wrap:wrap; }

.lab__cauldron{
  position:relative;
  border-radius:var(--radius);
  border:1px solid var(--line);
  background:radial-gradient(ellipse at 50% 25%, var(--plum-lift), var(--midnight) 70%);
  overflow:hidden;
  min-height:460px;
  display:flex;
  flex-direction:column;
}
#cauldron-canvas{
  width:100%;
  height:300px;
  display:block;
}
.cauldron-result{
  flex:1;
  padding:1.3rem 1.5rem 1.6rem;
  border-top:1px solid var(--line-soft);
  background:rgba(6,3,13,.5);
}
.cauldron-result__idle{
  color:var(--ink-faint);
  font-family:var(--ui);
  letter-spacing:.14em;
  text-transform:uppercase;
  font-size:.78rem;
  text-align:center;
  margin:1.4rem 0;
}
.potion{ animation:viewIn .5s var(--ease-out); }
.potion__rarity{
  display:inline-block;
  padding:.2rem .7rem;
  border-radius:999px;
  font-family:var(--ui);
  font-size:.64rem;
  font-weight:700;
  letter-spacing:.2em;
  text-transform:uppercase;
  margin-bottom:.6rem;
  border:1px solid currentColor;
}
.potion__name{
  font-size:1.7rem;
  margin-bottom:.5rem;
  line-height:1.05;
}
.potion__effect{
  color:var(--ink-soft);
  font-size:.92rem;
  line-height:1.6;
  margin:0 0 .8rem;
}
.potion__from{
  font-family:var(--ui);
  font-size:.68rem;
  letter-spacing:.1em;
  text-transform:uppercase;
  color:var(--ink-faint);
  margin:0;
}

.brew-log h3{ font-size:1.5rem; }
#brew-log-list{
  list-style:none;
  margin:0; padding:0;
  display:grid;
  gap:.5rem;
}
#brew-log-list li{
  display:flex;
  align-items:center;
  gap:.8rem;
  padding:.7rem 1rem;
  border-radius:9px;
  border:1px solid var(--line-soft);
  background:rgba(255,255,255,.02);
  font-size:.88rem;
  color:var(--ink-soft);
}
.brew-log__empty{ color:var(--ink-faint) !important; font-style:italic; }
.brew-log__rarity{
  font-family:var(--ui);
  font-size:.64rem;
  font-weight:700;
  letter-spacing:.16em;
  text-transform:uppercase;
  padding:.14rem .5rem;
  border-radius:5px;
  border:1px solid currentColor;
  flex-shrink:0;
}

/* ══ TAVERN ═════════════════════════════════════════════════════════════ */
.tavern-layout{
  display:grid;
  grid-template-columns:380px 1fr;
  gap:1.4rem;
  align-items:start;
}
.comment-form{
  position:sticky;
  top:calc(var(--ticker-h) + var(--mast-h) + 1.5rem);
  padding:1.6rem;
  border-radius:var(--radius);
  border:1px solid var(--line);
  background:var(--glass);
  backdrop-filter:blur(14px);
}
.comment-form__row{ position:relative; margin-bottom:1.1rem; }
.comment-form label{
  display:block;
  font-family:var(--ui);
  font-size:.7rem;
  font-weight:700;
  letter-spacing:.2em;
  text-transform:uppercase;
  color:var(--ink-mute);
  margin-bottom:.45rem;
}
.comment-form input,
.comment-form textarea{
  width:100%;
  padding:.8rem .95rem;
  border-radius:9px;
  border:1px solid var(--line);
  background:rgba(6,3,13,.6);
  color:var(--ink);
  font-family:var(--body);
  font-size:.95rem;
  resize:vertical;
  transition:border-color .3s var(--ease), box-shadow .3s var(--ease);
}
.comment-form input::placeholder,
.comment-form textarea::placeholder{ color:var(--ink-faint); }
.comment-form input:focus,
.comment-form textarea:focus{
  outline:none;
  border-color:var(--violet);
  box-shadow:0 0 0 3px rgba(168,85,247,.16), var(--glow-violet);
}
.charcount{
  position:absolute;
  right:.2rem; bottom:-1.15rem;
  font-family:var(--ui);
  font-size:.66rem;
  letter-spacing:.1em;
  color:var(--ink-faint);
}
.comment-form .btn{ width:100%; margin-top:.6rem; }
.form-status{
  margin:.9rem 0 0;
  font-family:var(--ui);
  font-size:.76rem;
  letter-spacing:.06em;
  min-height:1.2em;
}
.form-status.is-ok{ color:var(--toxic); }
.form-status.is-err{ color:#ff6b6b; }

.comment-wall__head{
  display:flex;
  align-items:baseline;
  justify-content:space-between;
  margin-bottom:1.1rem;
}
.comment-wall__head h3{ font-size:1.6rem; }
.comment-wall__head span{
  font-family:var(--ui);
  font-size:.74rem;
  letter-spacing:.14em;
  text-transform:uppercase;
  color:var(--ink-mute);
}
.comment-list{ display:grid; gap:.8rem; }

.comment{
  position:relative;
  padding:1.1rem 1.3rem;
  border-radius:var(--radius-sm);
  border:1px solid var(--line-soft);
  background:var(--glass-solid);
  transition:border-color .35s var(--ease), transform .35s var(--ease);
  animation:viewIn .45s var(--ease-out);
}
.comment:hover{
  border-color:var(--line);
  transform:translateX(3px);
}
.comment--op{
  border-color:rgba(99,245,66,.4);
  background:rgba(99,245,66,.06);
}
.comment__head{
  display:flex;
  align-items:center;
  gap:.7rem;
  margin-bottom:.5rem;
  flex-wrap:wrap;
}
.comment__avatar{
  width:34px; height:34px;
  border-radius:9px;
  display:grid;
  place-items:center;
  font-family:var(--display);
  font-size:1.05rem;
  color:#150525;
  flex-shrink:0;
}
.comment__name{
  font-family:var(--ui);
  font-weight:700;
  font-size:.9rem;
  letter-spacing:.04em;
  color:var(--ink);
}
.comment__op-tag{
  font-family:var(--ui);
  font-size:.6rem;
  font-weight:700;
  letter-spacing:.18em;
  text-transform:uppercase;
  padding:.12rem .45rem;
  border-radius:4px;
  background:var(--toxic);
  color:#0d2b07;
}
.comment__date{
  margin-left:auto;
  font-family:var(--ui);
  font-size:.68rem;
  letter-spacing:.1em;
  color:var(--ink-faint);
}
.comment__body{
  margin:0;
  color:var(--ink-soft);
  font-size:.95rem;
  line-height:1.65;
  white-space:pre-wrap;
  overflow-wrap:anywhere;
}

.wall-notice{
  padding:.75rem 1rem;
  margin-bottom:1rem;
  border-radius:9px;
  border:1px solid rgba(251,191,36,.35);
  background:rgba(251,191,36,.07);
  font-family:var(--ui);
  font-size:.76rem;
  letter-spacing:.04em;
  color:var(--gold);
}

/* ══ MERCH ══════════════════════════════════════════════════════════════ */
.merch-grid{
  display:grid;
  grid-template-columns:repeat(auto-fill,minmax(240px,1fr));
  gap:1.2rem;
  margin-bottom:3rem;
}
.product{
  display:flex;
  flex-direction:column;
  transform-style:preserve-3d;
}
.product__shot{
  position:relative;
  aspect-ratio:1;
  overflow:hidden;
  background:var(--midnight-2);
}
.product__shot img{
  width:100%; height:100%;
  object-fit:cover;
  transition:transform .8s var(--ease-out), filter .5s var(--ease);
}
.product:hover .product__shot img{
  transform:scale(1.07);
  filter:saturate(1.15);
}
.product__tag{
  position:absolute;
  top:.75rem; left:.75rem;
  z-index:2;
  padding:.24rem .6rem;
  border-radius:5px;
  font-family:var(--ui);
  font-size:.6rem;
  font-weight:700;
  letter-spacing:.18em;
  text-transform:uppercase;
  background:linear-gradient(135deg,var(--toxic),var(--toxic-dim));
  color:#0d2b07;
  box-shadow:var(--glow-toxic);
}
.product__meta{
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:.8rem;
  padding:1rem 1.1rem;
  border-top:1px solid var(--line-soft);
}
.product__name{
  font-family:var(--ui);
  font-weight:600;
  font-size:.9rem;
  line-height:1.35;
  color:var(--ink);
}
.product__price{
  font-family:var(--display);
  font-size:1.4rem;
  color:var(--toxic);
  flex-shrink:0;
  text-shadow:0 0 16px rgba(99,245,66,.4);
}
.product__buy{
  display:block;
  padding:.72rem;
  text-align:center;
  font-family:var(--ui);
  font-size:.72rem;
  font-weight:700;
  letter-spacing:.18em;
  text-transform:uppercase;
  color:var(--violet-hot);
  border-top:1px solid var(--line-soft);
  background:rgba(168,85,247,.07);
  transition:all .3s var(--ease);
}
.product:hover .product__buy{
  background:linear-gradient(135deg,var(--violet-hot),var(--magenta));
  color:#150525;
}

.shop-cta{
  text-align:center;
  padding:2.6rem 1.5rem;
  border-radius:var(--radius);
  border:1px solid var(--line);
  background:var(--glass);
}
.shop-cta p{ color:var(--ink-mute); margin:0 0 1.3rem; }

/* ══ STREAM BUS ═════════════════════════════════════════════════════════ */
.bus-hero{
  position:relative;
  height:min(46vh,420px);
  overflow:hidden;
  display:grid;
  margin-bottom:3rem;
}
.bus-hero img{
  grid-area:1/1;
  width:100%; height:100%;
  object-fit:cover;
  transform:scale(1.04);
  animation:bgDrift 30s ease-in-out infinite alternate;
}
.bus-hero__scrim{
  grid-area:1/1;
  background:linear-gradient(0deg, var(--void) 4%, rgba(6,3,13,.35) 60%, rgba(6,3,13,.6));
}
.bus-hero__title{
  grid-area:1/1;
  position:relative;
  align-self:end;
  justify-self:center;
  text-align:center;
  padding:0 1.5rem 2rem;
  font-size:clamp(2.2rem,8vw,5.4rem);
  color:var(--toxic);
  text-shadow:0 0 30px rgba(99,245,66,.6), 0 0 80px rgba(99,245,66,.3);
}

.bus-copy{ margin-bottom:3rem; }
.bus-copy p{
  color:var(--ink-soft);
  font-size:1.08rem;
  line-height:1.85;
  margin:0 0 1.5rem;
}
.bus-copy p:first-of-type{
  font-size:1.28rem;
  color:var(--ink);
  line-height:1.7;
}
.bus-divider{
  height:1px;
  margin:2.4rem auto;
  width:70%;
  background:linear-gradient(90deg,transparent,var(--violet),transparent);
  position:relative;
}
.bus-divider::after{
  content:'✦';
  position:absolute;
  top:50%; left:50%;
  transform:translate(-50%,-50%);
  padding:0 .7rem;
  background:var(--void);
  color:var(--violet);
  font-size:.7rem;
}

.donate-block{
  border-radius:var(--radius);
  border:1px solid rgba(99,245,66,.3);
  overflow:hidden;
  box-shadow:0 20px 60px rgba(0,0,0,.5), 0 0 40px rgba(99,245,66,.12);
  margin-bottom:2rem;
}
.donate-block img{ width:100%; height:auto; }
.donate-block__body{
  padding:2rem 1.5rem 2.4rem;
  text-align:center;
  background:linear-gradient(180deg, rgba(27,11,54,.7), rgba(6,3,13,.9));
}
.donate-note{
  margin:.9rem 0 0;
  font-family:var(--ui);
  font-size:.7rem;
  letter-spacing:.14em;
  text-transform:uppercase;
  color:var(--ink-faint);
}

.progress{ margin-bottom:1.6rem; }
.progress__bar{
  height:12px;
  border-radius:999px;
  border:1px solid var(--line);
  background:rgba(6,3,13,.7);
  overflow:hidden;
}
.progress__fill{
  height:100%;
  border-radius:999px;
  background:linear-gradient(90deg,var(--toxic-dim),var(--toxic));
  box-shadow:var(--glow-toxic);
  width:0;
  transition:width 1.6s var(--ease-out);
}
.progress__labels{
  display:flex;
  justify-content:space-between;
  margin-top:.6rem;
  font-family:var(--ui);
  font-size:.78rem;
  letter-spacing:.08em;
  color:var(--ink-mute);
}
.progress__labels strong{ color:var(--toxic); }

/* ══ SOCIALS ════════════════════════════════════════════════════════════ */
.social-grid{
  display:grid;
  grid-template-columns:repeat(auto-fit,minmax(260px,1fr));
  gap:1.2rem;
}
.social{
  position:relative;
  display:block;
  padding:1.8rem 1.5rem 1.6rem;
  border-radius:var(--radius);
  border:1px solid var(--line);
  background:var(--glass-solid);
  overflow:hidden;
  transition:transform .5s var(--ease-out), border-color .4s var(--ease), box-shadow .4s var(--ease);
}
/* colour wash keyed to each platform */
.social::after{
  content:'';
  position:absolute;
  inset:auto -30% -60% -30%;
  height:160px;
  background:radial-gradient(ellipse at 50% 100%, var(--accent), transparent 70%);
  opacity:.16;
  transition:opacity .45s var(--ease), transform .6s var(--ease-out);
}
.social:hover{
  transform:translateY(-7px);
  border-color:var(--accent);
  box-shadow:0 20px 50px rgba(0,0,0,.5), 0 0 30px color-mix(in srgb, var(--accent) 50%, transparent);
}
.social:hover::after{ opacity:.42; transform:translateY(-14px); }

.social__top{
  display:flex;
  align-items:center;
  gap:.9rem;
  margin-bottom:1rem;
  position:relative;
  z-index:2;
}
.social__icon{
  width:46px; height:46px;
  flex-shrink:0;
  border-radius:12px;
  display:grid;
  place-items:center;
  border:1px solid color-mix(in srgb, var(--accent) 45%, transparent);
  background:color-mix(in srgb, var(--accent) 14%, transparent);
  color:var(--accent);
  transition:transform .45s var(--ease-out);
}
.social__icon svg{ width:24px; height:24px; fill:currentColor; }
.social:hover .social__icon{ transform:rotate(-8deg) scale(1.1); }
.social__label{
  font-family:var(--display);
  font-size:1.5rem;
  line-height:1;
  color:var(--ink);
}
.social__handle{
  display:block;
  font-family:var(--ui);
  font-size:.72rem;
  letter-spacing:.12em;
  color:var(--accent);
  margin-top:.15rem;
}
.social__blurb{
  position:relative;
  z-index:2;
  margin:0;
  color:var(--ink-mute);
  font-size:.9rem;
  line-height:1.6;
}
.social__go{
  position:relative;
  z-index:2;
  display:inline-block;
  margin-top:1rem;
  font-family:var(--ui);
  font-size:.7rem;
  font-weight:700;
  letter-spacing:.18em;
  text-transform:uppercase;
  color:var(--accent);
  transition:transform .3s var(--ease);
}
.social:hover .social__go{ transform:translateX(6px); }

/* ══ RESPONSIVE ═════════════════════════════════════════════════════════ */
@media (max-width:1100px){
  .stream-layout{ grid-template-columns:1fr; }
  .stream-chat{ min-height:460px; }
  .lab{ grid-template-columns:1fr; }
  .tavern-layout{ grid-template-columns:1fr; }
  .comment-form{ position:static; }
}

@media (max-width:820px){
  .portal-grid{ grid-template-columns:repeat(2,1fr); }
  .panel--split{ grid-template-columns:1fr; }
  .panel__media{ min-height:240px; order:-1; }
  .panel__media::after{
    background:linear-gradient(0deg, var(--glass), transparent 55%);
  }
  .statline{ gap:1.6rem; }
}

@media (max-width:560px){
  .portal-grid,
  .media-grid,
  .merch-grid{ grid-template-columns:1fr; }
  .ingredient-grid{ grid-template-columns:repeat(auto-fill,minmax(140px,1fr)); }
  .statline{ justify-content:space-between; }
  .hero{ min-height:auto; padding-top:2rem; }
}
