:root {
  --bg: #000000;
  --gold: #F2C94C;
  --red: #E30600;
  --text: #f4f4f4;
  --muted: #9a9a9a;
  --line: #222;
  --island: max(72px, calc(env(safe-area-inset-top, 0px) + 54px));
  --dock: calc(56px + env(safe-area-inset-bottom, 0px));
  --pulse: 1.6s;
}
* { box-sizing: border-box; }
html, body {
  margin: 0; padding: 0;
  background: var(--bg); color: var(--text);
  font-family: Inter, system-ui, -apple-system, BlinkMacSystemFont, sans-serif;
  min-height: 100%;
}
body { padding-bottom: var(--dock); }
#app { min-height: 100dvh; background: #000; }
.top {
  padding: var(--island) 20px 8px;
  display: flex; flex-direction: column; align-items: center; gap: 8px;
}
#brand-logo { width: min(46vw, 200px); height: auto; display: block; }
/* Gate16 title punch — toned reverse: thin red rim + soft gold shadow; paint only */
.title-punch {
  color: #fff;
  text-shadow:
    1px 1px 0 rgba(242, 201, 76, 0.35),
    -1px 0 0 rgba(227, 6, 0, 0.55),
     1px 0 0 rgba(227, 6, 0, 0.55),
     0 -1px 0 rgba(227, 6, 0, 0.55),
     0  1px 0 rgba(227, 6, 0, 0.55);
}

#seat-name {
  margin: 0;
  font-family: "Bebas Neue", Impact, "Arial Narrow", sans-serif;
  font-size: 28px; letter-spacing: 0.04em;
}

.view { display: none; padding: 8px 18px 24px; }
.view.active { display: block; }

/* 20261003-door-settle — one room door. Arrive and micro-settle, then still. No bounce. */
@keyframes room-door-settle {
  from { opacity: 0.88; transform: translateY(6px); }
  to { opacity: 1; transform: none; }
}
.view.active.room-settle {
  animation: room-door-settle 240ms cubic-bezier(0.2, 0, 0.2, 1) both;
}
@media (prefers-reduced-motion: reduce) {
  .view.active.room-settle { animation: none; }
}
/* Gate29 fold — date first, dramatic I'M IN, Who's In card under lock */
#next-meeting {
  display: block; width: 100%;
  border: 0; border-radius: 0;
  padding: 2px 0 0; background: transparent;
  text-align: center;
}
#next-meeting h2 {
  margin: 0 0 2px; font-size: 11px; letter-spacing: 0.14em;
  color: var(--gold); font-weight: 600;
}
#gather-meta { margin: 2px 0 0; color: var(--muted); font-size: 13px; }
#gather-place {
  position: relative;
  display: flex;
  flex-direction: column;
  align-items: center;
  width: fit-content;
  margin: 2px auto 12px;
  padding: 7px 20px 9px;
  border: 1px solid rgba(255, 255, 255, 0.22);
  border-radius: 18px;
  background:
    linear-gradient(180deg, rgba(255, 255, 255, 0.16), rgba(255, 255, 255, 0.04) 46%, rgba(0, 0, 0, 0.22));
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.38),
    inset 0 -10px 16px rgba(0, 0, 0, 0.18),
    0 8px 18px rgba(0, 0, 0, 0.28);
  text-align: center;
  cursor: pointer;
  overflow: hidden;
  isolation: isolate;
  -webkit-tap-highlight-color: transparent;
  -webkit-backdrop-filter: blur(18px) saturate(1.35);
  backdrop-filter: blur(18px) saturate(1.35);
  animation: none;
}
#gather-place:active { transform: translateY(1px) scale(0.985); }
#gather-date {
  position: relative;
  z-index: 1;
  margin: 0;
  font-family: "Bebas Neue", Impact, "Arial Narrow", sans-serif;
  font-size: clamp(26px, 7vw, 32px);
  line-height: 0.95;
  letter-spacing: 0.06em;
  color: rgba(255, 255, 255, 0.86);
  font-weight: 400;
  text-shadow: none;
}
#gather-date::after {
  content: "";
  display: block;
  height: 1px;
  width: 42%;
  margin: 6px auto 0;
  background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.45), transparent);
}
@keyframes date-glass {
  0%, 100% {
    box-shadow:
      inset 0 1px 0 rgba(255, 255, 255, 0.28),
      inset 0 -10px 16px rgba(0, 0, 0, 0.18),
      0 8px 18px rgba(0, 0, 0, 0.28);
  }
  50% {
    box-shadow:
      inset 0 1px 0 rgba(255, 255, 255, 0.5),
      inset 0 -10px 16px rgba(0, 0, 0, 0.1),
      0 10px 22px rgba(0, 0, 0, 0.32);
  }
}
@media (prefers-reduced-motion: reduce) {
  #gather-place { animation: none; }
}
/* 20260926-home-yellow-kill — card-quiet: hide yellow TIME & PLACE under logo */
#gather-place-label {
  display: none !important;
}

#place-sheet {
  position: fixed;
  inset: 0;
  z-index: 50;
  background: #000;
  padding: calc(var(--island) + 8px) 22px calc(28px + env(safe-area-inset-bottom, 0px));
  overflow-y: auto;
  -webkit-overflow-scrolling: touch;
  text-align: center;
}
#place-sheet[hidden] { display: none !important; }
#place-sheet-x {
  position: absolute;
  right: 14px;
  top: calc(var(--island) - 8px);
  width: 44px;
  height: 44px;
  background: transparent;
  border: 0;
  color: rgba(255,255,255,0.72);
  font-size: 20px;
  line-height: 1;
  z-index: 51;
  -webkit-tap-highlight-color: transparent;
}
#place-sheet-kicker {
  margin: 28px 0 14px;
  font-size: 11px;
  letter-spacing: 0.18em;
  font-weight: 700;
  color: var(--gold);
  text-transform: uppercase;
}
#place-sheet-time {
  margin: 0 0 18px;
  font-family: "Bebas Neue", Impact, "Arial Narrow", sans-serif;
  font-size: clamp(44px, 12vw, 58px);
  letter-spacing: 0.04em;
  line-height: 0.98;
}
#place-sheet-place {
  margin: 0 0 6px;
  font-size: 15px;
  font-weight: 700;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: #fff;
}
#place-sheet-cal {
  display: block;
  margin: 36px auto 14px;
  padding: 10px 16px 14px;
  max-width: min(100%, 420px);
  text-decoration: none;
  color: inherit;
  -webkit-tap-highlight-color: transparent;
  border-radius: 16px;
  border: 1px solid rgba(242, 201, 76, 0.42);
  background: rgba(242, 201, 76, 0.06);
  box-shadow: inset 0 0 0 1px rgba(0,0,0,0.25);
}
#place-sheet-cal:active {
  background: rgba(242, 201, 76, 0.14);
  border-color: rgba(242, 201, 76, 0.7);
}
#place-sheet-city {
  margin: 0 0 10px;
  font-size: 14px;
  color: var(--muted);
}
#place-sheet-cal #place-sheet-place {
  margin-bottom: 6px;
}
#place-sheet-cal-cue {
  display: inline-block;
  font-size: 11px;
  font-weight: 700;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--gold, #F2C94C);
  border-bottom: 1px solid rgba(242, 201, 76, 0.55);
  padding-bottom: 1px;
}
#place-sheet-cal.tb-hit-rim {
  animation: tb-hit-rim-flash 2.2s cubic-bezier(0.22, 0.61, 0.2, 1) both;
}
.place-map {
  position: relative;
  display: block;
  width: min(100%, 420px);
  margin: 0 auto;
  border-radius: 17px;
  overflow: hidden;
  border: 1px solid rgba(242, 201, 76, 0.38);
  box-shadow:
    inset 0 0 0 1px rgba(0,0,0,0.35),
    inset 0 -24px 40px rgba(0,0,0,0.45),
    0 12px 28px rgba(0,0,0,0.55);
  background: #111;
  aspect-ratio: 1000 / 720;
}
#place-sheet-pin {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: center;
  border: 0;
  margin: 0;
}
.place-map-badge {
  position: absolute;
  left: 50%;
  bottom: 12px;
  transform: translateX(-50%);
  z-index: 2;
  padding: 7px 12px;
  border-radius: 999px;
  font-size: 10px;
  font-weight: 700;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  white-space: nowrap;
  color: #0a0a0a;
  background: var(--gold, #F2C94C);
  border: 1px solid rgba(0,0,0,0.25);
  box-shadow: 0 4px 14px rgba(0,0,0,0.45);
  pointer-events: none;
}

.place-map-target {
  position: absolute;
  left: 50.0%;
  top: 50.0%;
  z-index: 3;
  width: 16px;
  height: 16px;
  margin: -8px 0 0 -8px;
  border-radius: 50%;
  background: #F2C94C;
  border: 2px solid #E30600;
  box-shadow:
    0 0 0 0 rgba(242, 201, 76, 0.85),
    0 0 18px 6px rgba(242, 201, 76, 0.75);
  pointer-events: none;
  animation: place-target-pulse calc(var(--pulse) * 2) cubic-bezier(0.22, 0.61, 0.2, 1) infinite;
  animation-delay: 0s;
}
.place-map-target::before,
.place-map-target::after {
  content: "";
  position: absolute;
  left: 50%;
  top: 50%;
  border-radius: 50%;
  border: 2px solid rgba(242, 201, 76, 0.95);
  transform: translate(-50%, -50%);
  pointer-events: none;
}
.place-map-target::before {
  width: 34px;
  height: 34px;
  animation: place-target-ring calc(var(--pulse) * 2) cubic-bezier(0.22, 0.61, 0.2, 1) infinite;
  animation-delay: 0s;
}
.place-map-target::after {
  width: 52px;
  height: 52px;
  border-color: rgba(227, 6, 0, 0.55);
  animation: place-target-ring calc(var(--pulse) * 2) cubic-bezier(0.22, 0.61, 0.2, 1) infinite;
  animation-delay: 0s;
}
@keyframes place-target-pulse {
  0%, 100% {
    transform: scale(1);
    box-shadow: 0 0 0 0 rgba(242, 201, 76, 0.9), 0 0 16px 5px rgba(242, 201, 76, 0.7);
  }
  45% {
    transform: scale(1.18);
    box-shadow: 0 0 0 10px rgba(242, 201, 76, 0), 0 0 36px 14px rgba(242, 201, 76, 0.95);
  }
}
@keyframes place-target-ring {
  0% { opacity: 0.95; transform: translate(-50%, -50%) scale(0.72); }
  70% { opacity: 0; transform: translate(-50%, -50%) scale(1.35); }
  100% { opacity: 0; transform: translate(-50%, -50%) scale(1.35); }
}
.place-map.tb-hit-rim .place-map-target {
  animation: place-target-pulse calc(var(--pulse) * 2) cubic-bezier(0.22, 0.61, 0.2, 1) infinite, tb-hit-gold-flash 2.4s cubic-bezier(0.22, 0.61, 0.2, 1) both;
  animation-delay: 0s, 0s;
}
#place-sheet-maps {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-height: 44px;
  margin: 22px auto 0;
  padding: 10px 8px;
  font-size: 13px;
  font-weight: 600;
  letter-spacing: 0.06em;
  text-decoration: none;
  color: var(--gold, #F2C94C);
  background: transparent;
  border: 0;
  border-bottom: 1px solid rgba(242, 201, 76, 0.55);
  border-radius: 0;
  -webkit-tap-highlight-color: transparent;
}
#place-sheet-maps:active { opacity: 0.75; }

#day-verse {
  margin: 8px 0 0;
  font-family: "Bebas Neue", Impact, "Arial Narrow", sans-serif;
  font-size: clamp(22px, 6vw, 28px);
  line-height: 1.05;
  color: #F2C94C;
  text-align: center;
  overflow-wrap: break-word;
}
#day-verse-ref {
  margin: 2px 0 0;
  font-size: 11px;
  letter-spacing: 0.14em;
  color: #F2C94C;
  text-align: center;
  text-transform: uppercase;
}
#rsvp-btn {
  margin-top: 12px; width: 100%; border: 0; border-radius: 14px;
  background: var(--red); color: #fff; font-weight: 800;
  letter-spacing: 0.1em; font-size: 20px; padding: 18px 14px;
  box-shadow: 0 0 24px rgba(227, 6, 0, 0.45), 0 8px 0 #7a0300;
  transform: translateY(-1px);
  -webkit-tap-highlight-color: transparent;
}
/* 20261005-locked-in-bright — resting locked-in = bright gold plate + dark ink + continuous quiet glow (confirm chrome only; house --gold untouched) */
#rsvp-btn.is-in {
  position: relative;
  overflow: hidden;
  isolation: isolate;
  background: #FFD84A; color: #1a0505;
  box-shadow: 0 0 28px rgba(255, 216, 74, 0.55), 0 6px 0 #8a6a12;
  animation: rsvp-locked-glow 2.8s ease-in-out infinite;
}
#rsvp-btn.is-in .rsvp-lock { color: #1a0505; }
#rsvp-btn.is-in::after {
  content: "";
  position: absolute;
  left: 0;
  top: 9%;
  width: 38%;
  height: 6%;
  border-radius: 999px;
  background: linear-gradient(90deg, rgba(255, 246, 214, 0) 0%, rgba(255, 246, 214, 0.85) 50%, rgba(255, 246, 214, 0) 100%);
  opacity: 0;
  transform: translateX(-110%);
  pointer-events: none;
  z-index: -1;
  animation: rsvp-locked-shimmer 2.8s ease-in-out infinite;
}
@keyframes rsvp-locked-glow {
  0%, 100% {
    background-color: #FFD84A;
    box-shadow: 0 0 28px rgba(255, 216, 74, 0.55), 0 6px 0 #8a6a12;
  }
  50% {
    background-color: #FFDD5E;
    box-shadow: 0 0 34px rgba(255, 216, 74, 0.68), 0 6px 0 #8a6a12;
  }
}
@keyframes rsvp-locked-shimmer {
  0%, 18% { opacity: 0; transform: translateX(-110%); }
  24% { opacity: 1; }
  52% { opacity: 1; }
  58%, 100% { opacity: 0; transform: translateX(280%); }
}
#rsvp-btn .rsvp-lock {
  display: block;
  font-size: 20px;
  font-weight: 800;
  letter-spacing: 0.1em;
  line-height: 1.1;
}
#rsvp-btn .rsvp-keep {
  display: block;
  margin-top: 10px;
  letter-spacing: normal;
  text-transform: none;
}
#rsvp-btn .rsvp-keep-line {
  display: block;
  color: #8C0500;
  font-size: 14px;
  font-weight: 800;
  letter-spacing: normal;
  line-height: 1.2;
  text-transform: none;
}
#rsvp-btn .fist-bump-row {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  margin: 6px 0 0;
  color: #1a0505;
  font-size: 13px;
  font-weight: 700;
  letter-spacing: normal;
  line-height: 1.2;
  text-transform: none;
}
#rsvp-btn .fist-bump-row input[type="checkbox"] {
  width: 22px;
  height: 22px;
  accent-color: #8C0500;
}
#rsvp-btn .rsvp-keep.rsvp-keep-in {
  animation: fist-bump-pop 380ms ease-out 1 both;
}
#view-more #save-it-fab {
  display: block;
  width: 100%;
  margin: 22px 0 8px;
  border: 0;
  border-radius: 14px;
  background: #E30600;
  color: #fff;
  font-weight: 800;
  letter-spacing: 0.12em;
  font-size: 18px;
  padding: 16px 14px;
}
/* 20261001-rsvp-ladder — quiet MAYBE (not red, not competing) */
#rsvp-maybe-btn,
.rsvp-maybe-btn {
  display: block;
  margin: 8px auto 0;
  padding: 6px 14px;
  border: 0;
  background: transparent;
  color: rgba(245, 240, 232, 0.55);
  font-size: 12px;
  font-weight: 700;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  -webkit-tap-highlight-color: transparent;
  cursor: pointer;
}
#rsvp-maybe-btn[hidden] { display: none !important; }
#rsvp-maybe-btn.is-maybe {
  color: rgba(245, 240, 232, 0.78);
  text-decoration: underline;
  text-underline-offset: 3px;
}
.rsvp-soft-banner {
  display: flex;
  align-items: flex-start;
  gap: 8px;
  margin: 10px 0 0;
  padding: 10px 12px;
  border-radius: 10px;
  background: rgba(255, 255, 255, 0.04);
  border: 1px solid rgba(245, 240, 232, 0.08);
}
.rsvp-soft-banner[hidden] { display: none !important; }
.rsvp-soft-line {
  flex: 1;
  margin: 0;
  font-size: 13px;
  line-height: 1.35;
  color: rgba(245, 240, 232, 0.72);
  font-weight: 600;
}
.rsvp-soft-x {
  flex: 0 0 auto;
  border: 0;
  background: transparent;
  color: rgba(245, 240, 232, 0.45);
  font-size: 18px;
  line-height: 1;
  padding: 0 2px;
  cursor: pointer;
}
.whos-chip--maybe .whos-initial {
  box-shadow: 0 0 0 1px rgba(245, 240, 232, 0.28);
  opacity: 0.82;
}
.whos-chip--maybe .whos-name {
  color: rgba(245, 240, 232, 0.55);
  font-weight: 600;
}

/* 20261001-monday-recap — soft Home card under gather plate */
.monday-recap {
  margin: 12px 0 4px;
  padding: 12px 14px 14px;
  border-radius: 12px;
  background: rgba(255, 255, 255, 0.035);
  border: 1px solid rgba(245, 240, 232, 0.08);
}
.monday-recap[hidden] { display: none !important; }
.monday-recap-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
  margin: 0 0 8px;
}
.monday-recap-title {
  margin: 0;
  font-size: 12px;
  letter-spacing: 0.18em;
  font-weight: 800;
  color: rgba(245, 240, 232, 0.78);
  text-transform: uppercase;
}
.monday-recap-done {
  border: 0;
  background: transparent;
  color: rgba(245, 240, 232, 0.55);
  font-size: 11px;
  font-weight: 700;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  padding: 4px 2px;
  cursor: pointer;
  -webkit-tap-highlight-color: transparent;
}
.monday-recap-body {
  display: flex;
  flex-direction: column;
  gap: 6px;
}
.monday-recap-line {
  margin: 0;
  font-size: 13px;
  line-height: 1.35;
  color: rgba(245, 240, 232, 0.72);
  font-weight: 600;
}
.monday-recap-line--code {
  color: rgba(245, 240, 232, 0.58);
  font-weight: 700;
  letter-spacing: 0.04em;
}
#monday-recap-opt.is-on {
  color: rgba(245, 240, 232, 0.92);
  text-decoration: underline;
  text-underline-offset: 3px;
}


/* MASH-FEEL-2 → 20261005-locked-in-bright — one bright confirm beat (~168ms peak, scale ≤1.12, gold ring once), settle ON bright resting gold. Never a dark plate. home.js clears class on animationend so .is-in idle glow wins. */
@keyframes rsvp-aftermath-flash {
  0% {
    background: #FFD84A;
    color: #1a0505;
    transform: scale(1);
    box-shadow: 0 0 0 0 rgba(255, 216, 74, 0), 0 6px 0 #8a6a12;
  }
  14% {
    background: #FFE9A0;
    color: #1a0505;
    transform: scale(1.12);
    box-shadow: 0 0 0 4px rgba(255, 216, 74, 0.95), 0 6px 0 #8a6a12;
  }
  32% {
    background: #FFE08A;
    color: #1a0505;
    transform: scale(1.03);
    box-shadow: 0 0 0 1px rgba(255, 216, 74, 0.5), 0 0 22px rgba(255, 216, 74, 0.5), 0 6px 0 #8a6a12;
  }
  100% {
    background: #FFD84A;
    color: #1a0505;
    transform: scale(1);
    box-shadow: 0 0 28px rgba(255, 216, 74, 0.55), 0 6px 0 #8a6a12;
  }
}
#rsvp-btn.rsvp-aftermath {
  animation: rsvp-aftermath-flash 1.2s cubic-bezier(0.16, 0.84, 0.18, 1) both;
}
#rsvp-btn.rsvp-mash {
  animation: rsvp-mash-flash 1.1s cubic-bezier(0.16, 0.84, 0.18, 1) both;
}
#rsvp-btn.rsvp-aftermath::after,
#rsvp-btn.rsvp-mash::after { animation: none; opacity: 0; }
@keyframes rsvp-mash-flash {
  0% {
    background: #FFD84A;
    color: #1a0505;
    transform: scale(1);
    box-shadow: 0 0 28px rgba(255, 216, 74, 0.55), 0 6px 0 #8a6a12;
  }
  15% {
    background: #FFE9A0;
    color: #1a0505;
    transform: scale(1.1);
    box-shadow: 0 0 0 4px rgba(255, 216, 74, 0.95), 0 6px 0 #8a6a12;
  }
  34% {
    background: #FFE08A;
    color: #1a0505;
    transform: scale(1.03);
    box-shadow: 0 0 0 1px rgba(255, 216, 74, 0.5), 0 0 22px rgba(255, 216, 74, 0.5), 0 6px 0 #8a6a12;
  }
  100% {
    background: #FFD84A;
    color: #1a0505;
    transform: scale(1);
    box-shadow: 0 0 28px rgba(255, 216, 74, 0.55), 0 6px 0 #8a6a12;
  }
}
/* 20261005-locked-in-bright — reduced motion: bright static plate, no enter flash, no glow loop, no shimmer */
@media (prefers-reduced-motion: reduce) {
  #rsvp-btn.is-in,
  #rsvp-btn.is-in.rsvp-aftermath,
  #rsvp-btn.is-in.rsvp-mash {
    animation: none;
    background: #FFD84A;
    color: #1a0505;
    transform: none;
    box-shadow: 0 0 28px rgba(255, 216, 74, 0.55), 0 6px 0 #8a6a12;
  }
  #rsvp-btn.is-in::after { animation: none; display: none; }
}
/* 20261012-fab-say-bubble — no gold: clean white bubble, soft dark shadow, white tail → bolt */
/* 20261006-fab-say-white-bubble — white word bubble + Bebas + tail → bolt */
#fab-say {
  position: fixed;
  right: 68px;
  bottom: calc(var(--dock) + 24px + var(--vv-gap, 0px));
  z-index: 31;
  margin: 0;
  padding: 10px 14px;
  border: 0;
  border-radius: 14px;
  background: #FFFFFF;
  color: #1a0505;
  font-family: "Bebas Neue", Impact, "Arial Narrow", sans-serif;
  font-size: 15px;
  font-weight: 400;
  letter-spacing: 0.06em;
  line-height: 1.2;
  text-transform: none;
  max-width: min(56vw, 220px);
  box-shadow: 0 4px 14px rgba(0,0,0,.35), 0 0 22px rgba(255,255,255,.32);
  pointer-events: none;
}
#fab-say::after {
  content: "";
  position: absolute;
  right: -5px;
  top: 50%;
  width: 8px;
  height: 8px;
  background: #FFFFFF;
  border: 0;
  box-shadow: 2px -2px 3px rgba(0,0,0,.12);
  transform: translateY(-50%) rotate(45deg);
  box-sizing: border-box;
  pointer-events: none;
}

/* 20261012-fab-say-bubble MOTION — born from the bolt: one shot from the tail (edge nearest #fab), 0.2 -> 1.08 -> 1, 420ms; bolt flashes a white ring once (200ms). No loop, no hop. */
@keyframes fab-say-spring {
  0% { transform: translateX(6px) scale(0.2); }
  62% { transform: translateX(0) scale(1.08); }
  100% { transform: translateX(0) scale(1); }
}
#fab-say:not([hidden]) {
  animation: fab-say-spring 420ms ease-out 1 both;
  transform-origin: right center;
}
@keyframes fab-say-flash {
  0% { opacity: 0; }
  35% { opacity: 1; }
  100% { opacity: 0; }
}
html:not(.mt-pulse-on):not(.mt-pulse-restart) #fab-say:not([hidden]) ~ #fab::after {
  content: "";
  display: block;
  position: absolute;
  inset: 6px;
  border-radius: 50%;
  box-shadow: 0 0 0 2px #FFFFFF, 0 0 16px rgba(255,255,255,0.85);
  opacity: 0;
  animation: fab-say-flash 200ms ease-out 1 both;
  pointer-events: none;
}
/* exit: back into the tail, fading — one shot (fab-arms adds .fab-say-out, hides after 280ms) */
@keyframes fab-say-out {
  0% { transform: translateX(0) scale(1); opacity: 1; }
  66% { opacity: 1; }
  100% { transform: translateX(6px) scale(0.2); opacity: 0; }
}
#fab-say.fab-say-out:not([hidden]) {
  animation: fab-say-out 280ms ease-in 1 both;
}
@media (prefers-reduced-motion: reduce) {
  #fab-say:not([hidden]),
  #fab-say.fab-say-out:not([hidden]) {
    animation: none;
    box-shadow: 0 4px 14px rgba(0,0,0,.35);
  }
  html:not(.mt-pulse-on):not(.mt-pulse-restart) #fab-say:not([hidden]) ~ #fab::after {
    animation: none;
    display: none;
  }
}

/* 20261005-gather-p1 — alerts nudge under I'm In / Stay current; never on Ask FAB */
#home-alerts-nudge {
  display: block;
  width: 100%;
  margin: 10px 0 0;
  padding: 0;
  border: 0;
  background: transparent;
  color: #F2C94C;
  font-size: 13px;
  font-weight: 700;
  letter-spacing: 0.08em;
  text-align: center;
  cursor: pointer;
  -webkit-tap-highlight-color: transparent;
}
#home-alerts-nudge[hidden] { display: none !important; }
#dock [data-view="brothers"].mash-point,
#dock [data-view="events"].mash-point,
#dock [data-view="more"].mash-point {
  color: #F2C94C;
  text-shadow: 0 0 12px rgba(242,201,76,0.9);
}
#mash-hop-word {
  margin: 8px 0 0;
  min-height: 14px;
  text-align: center;
  color: #F2C94C;
  font-size: 11px;
  letter-spacing: 0.16em;
  font-weight: 700;
  text-transform: uppercase;
}
@media (prefers-reduced-motion: reduce) {
  #rsvp-btn.rsvp-mash, #rsvp-btn.rsvp-aftermath { animation: none; transition: none; }
}
@keyframes whos-face-ring {
  from { box-shadow: 0 0 0 0 rgba(242, 201, 76, 0.9); }
  60% { box-shadow: 0 0 0 6px rgba(242, 201, 76, 0.25); }
  to { box-shadow: 0 0 0 2px var(--gold); }
}
.whos-chip--pop .whos-initial.has-photo {
  animation: whos-face-ring 0.55s ease-out both;
}
/* Gate30 THIS WEEK chip — title + tease + clear tap affordance */
#home-announce[hidden] { display: none !important; }
#home-announce {
  margin: 10px 0 0;
  border: 1px solid #4a3f28;
  border-radius: 14px;
  padding: 16px 14px 16px 16px;
  background: linear-gradient(180deg, #121212 0%, #080808 100%);
  cursor: pointer;
  -webkit-tap-highlight-color: transparent;
  display: flex;
  flex-direction: row;
  align-items: center;
  gap: 8px;
  box-shadow: inset 0 0 0 1px rgba(242, 201, 76, 0.28), 0 0 24px rgba(242, 201, 76, 0.12);
}
#home-announce:active {
  border-color: var(--gold);
  box-shadow: inset 0 0 0 1px rgba(242, 201, 76, 0.45);
}
/* Gate34 — soft flash when week Realtime lands */
#home-announce.announce--fresh {
  animation: announce-fresh 0.55s ease-out both;
}
@keyframes announce-fresh {
  from { box-shadow: inset 0 0 0 1px rgba(242, 201, 76, 0.55), 0 0 0 0 rgba(242, 201, 76, 0.35); border-color: var(--gold); }
  to { box-shadow: inset 0 0 0 1px rgba(242, 201, 76, 0.28), 0 0 24px rgba(242, 201, 76, 0.12); border-color: #4a3f28; }
}
@media (prefers-reduced-motion: reduce) {
  #home-announce.announce--fresh { animation: none; }
}
.announce-main { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 4px; }
#announce-tag {
  margin: 0;
  font-size: 10px;
  letter-spacing: 0.14em;
  color: var(--gold);
  font-weight: 600;
  text-transform: uppercase;
}
#announce-title {
  margin: 0;
  font-family: "Bebas Neue", Impact, "Arial Narrow", sans-serif;
  font-size: 26px;
  letter-spacing: 0.01em;
  line-height: 1.12;
  font-weight: 400;
  white-space: normal;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
}
#announce-tease {
  margin: 0;
  font-size: 13px;
  line-height: 1.35;
  color: #b0b0b0;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
}
#announce-tease[hidden] { display: none !important; }
#announce-more {
  margin: 2px 0 0;
  font-size: 10px;
  letter-spacing: 0.12em;
  color: var(--gold);
  font-weight: 600;
}
.announce-chev {
  flex: 0 0 auto;
  font-size: 28px;
  line-height: 1;
  color: var(--gold);
  opacity: 0.85;
  padding: 0 4px 0 2px;
}
#announce-body { display: none !important; }
/* NEXT GUEST stays. TAP FOR MORE stays down. */
#announce-more {
  display: none !important;
}
#announce-tag[hidden] { display: none !important; }
#announce-past,
#week-guest-past {
  display: block;
  margin: 8px 0 0;
  padding: 0;
  border: 0;
  background: transparent;
  color: #8a8a8a;
  font-size: 11px;
  letter-spacing: 0.16em;
  font-weight: 700;
}
#week-guest-video {
  display: block;
  width: 100%;
  margin: 16px 0 8px;
  border-radius: 12px;
  background: #000;
}
#week-guest-video[hidden] { display: none !important; }
#week-guest-watch {
  display: block;
  margin: 16px 0 8px;
  color: #F2C94C;
  font-weight: 700;
  letter-spacing: 0.14em;
  text-decoration: none;
}
#week-guest-watch[hidden] { display: none !important; }
#week-guest-list[hidden] { display: none !important; }
.past-guest {
  display: block;
  width: 100%;
  margin: 0 0 10px;
  padding: 14px 12px;
  text-align: left;
  background: #0c0c0c;
  border: 1px solid #2a2418;
  border-radius: 12px;
  color: #fff;
}
.past-guest b {
  display: block;
  font-family: "Bebas Neue", Impact, "Arial Narrow", sans-serif;
  font-size: 28px;
  font-weight: 400;
  letter-spacing: 0.03em;
}
.past-guest span {
  display: block;
  margin-top: 4px;
  color: #b0b0b0;
  font-size: 14px;
}
#week-guest-plate.is-empty {
  height: 280px;
  border: 1px dashed rgba(255, 255, 255, 0.28);
  background: #050505;
}

/* Poster — the week is the photograph, title on the still. No blink. */
#announce-photo {
  display: none;
}
#announce-photo[hidden] { display: none !important; }
#home-announce.announce--poster {
  position: relative;
  display: block;
  min-height: 196px;
  padding: 0;
  overflow: hidden;
  border: 0;
  background: #000;
  box-shadow: inset 0 0 0 1px rgba(242, 201, 76, 0.55);
}
#home-announce.announce--poster #announce-photo {
  display: block;
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: center 18%;
  pointer-events: none;
  animation: announce-settle 1.1s ease-out both;
}
@keyframes announce-settle {
  from { transform: scale(1.06); }
  to { transform: scale(1); }
}
#home-announce.announce--poster .announce-main {
  position: relative;
  z-index: 1;
  min-height: 196px;
  justify-content: flex-end;
  gap: 2px;
  padding: 72px 36px 14px 16px;
  background: linear-gradient(180deg, rgba(0,0,0,0) 28%, rgba(0,0,0,0.88) 100%);
}
#home-announce.announce--poster #announce-tag {
  display: block !important;
  color: #F2C94C;
  text-shadow: 0 1px 8px rgba(0,0,0,0.8);
}
#home-announce.announce--poster #announce-guest {
  display: block !important;
  margin: 0;
  font-family: "Bebas Neue", Impact, "Arial Narrow", sans-serif;
  font-size: 18px;
  letter-spacing: 0.08em;
  line-height: 1;
  color: #fff;
  text-shadow: 0 1px 8px rgba(0,0,0,0.85);
}
#announce-guest[hidden] { display: none !important; }
#home-announce.announce--poster #announce-tease {
  display: none !important;
}
#home-announce.announce--poster #announce-title {
  font-size: 30px;
  line-height: 0.95;
  text-shadow:
    0 2px 10px rgba(0,0,0,0.85),
    1px 1px 0 rgba(242, 201, 76, 0.35),
    -1px 0 0 rgba(227, 6, 0, 0.7),
    1px 0 0 rgba(227, 6, 0, 0.7);
}
#home-announce.announce--poster .announce-chev {
  position: absolute;
  right: 8px;
  bottom: 10px;
  z-index: 2;
  color: #F2C94C;
  text-shadow: 0 1px 8px rgba(0,0,0,0.85);
}
/* Rim only — silver at the top-left and bottom-right. The face stays clear. */
#home-announce.announce--poster::before {
  content: "";
  position: absolute;
  inset: 0;
  border-radius: inherit;
  padding: 1.5px;
  background: linear-gradient(
    135deg,
    rgba(255, 255, 255, 0.95) 0%,
    rgba(230, 236, 244, 0.45) 12%,
    rgba(255, 255, 255, 0) 34%,
    rgba(255, 255, 255, 0) 66%,
    rgba(220, 228, 238, 0.4) 88%,
    rgba(255, 255, 255, 0.92) 100%
  );
  -webkit-mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
  -webkit-mask-composite: xor;
  mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
  mask-composite: exclude;
  pointer-events: none;
  z-index: 4;
}
@media (prefers-reduced-motion: reduce) {
  #home-announce.announce--poster #announce-photo { animation: none; }
}
/* 20261005-announce-gold — Obie: make the circled poster card pop. Gold frame, gold ticket, clean name, one sheen. Face stays clear. Wins over the poster block above. */
#home-announce.announce--poster {
  min-height: 210px;
  border: 0;
  border-radius: 16px;
  background: #000;
  box-shadow:
    0 0 0 1.5px #F2C94C,
    0 0 0 4px #0a0a0a,
    0 0 22px rgba(242, 201, 76, 0.35);
}
/* Gold frame holds — the Realtime flash must not paint the old inset rim back over it. */
#home-announce.announce--poster.announce--fresh { animation: none; }
/* Silver rim is gone. */
#home-announce.announce--poster::before {
  content: none;
  display: none;
}
#home-announce.announce--poster #announce-photo {
  object-fit: cover;
  object-position: center 28%;
  filter: contrast(1.22) brightness(1.08);
  animation: announce-settle 1.1s ease-out both;
  animation-iteration-count: 1;
}
/* The wash sits under the type only — hat and face stay clear. */
#home-announce.announce--poster .announce-main {
  min-height: 210px;
  padding: 0 40px 16px 16px;
  background: linear-gradient(180deg, rgba(0,0,0,0) 0%, rgba(0,0,0,0) 52%, rgba(0,0,0,0.92) 78%, #000 100%);
}
/* NEXT GUEST — gold ticket. */
#home-announce.announce--poster #announce-tag {
  display: inline-block !important;
  width: fit-content;
  margin: 0 0 6px;
  padding: 3px 7px 2px;
  font-size: 10px;
  letter-spacing: 0.22em;
  font-weight: 700;
  color: #0a0a0a;
  background: #F2C94C;
  border-radius: 3px;
  text-shadow: none;
}
/* The name — white, one black shadow, no red offset. */
#home-announce.announce--poster #announce-title {
  font-size: 36px;
  letter-spacing: 0.04em;
  color: #fff;
  text-shadow: 0 2px 12px rgba(0,0,0,0.9);
}
#home-announce.announce--poster #announce-title::after {
  content: "";
  display: block;
  width: 42px;
  height: 2px;
  margin-top: 6px;
  background: #F2C94C;
}
#home-announce.announce--poster .announce-chev {
  color: #F2C94C;
}
/* One gold sheen, once. Not a loop. */
#home-announce.announce--poster::after {
  content: "";
  position: absolute;
  top: 0;
  bottom: 0;
  left: 0;
  width: 60%;
  background: linear-gradient(
    105deg,
    rgba(242, 201, 76, 0) 0%,
    rgba(242, 201, 76, 0) 30%,
    rgba(255, 226, 140, 0.38) 50%,
    rgba(242, 201, 76, 0) 70%,
    rgba(242, 201, 76, 0) 100%
  );
  transform: translateX(-120%) skewX(-12deg);
  pointer-events: none;
  z-index: 3;
  animation: announce-gold-sheen 1.4s ease-in-out 0.3s both;
  animation-iteration-count: 1;
}
@keyframes announce-gold-sheen {
  from { transform: translateX(-120%) skewX(-12deg); }
  to { transform: translateX(260%) skewX(-12deg); }
}
@media (prefers-reduced-motion: reduce) {
  #home-announce.announce--poster #announce-photo { animation: none; }
  #home-announce.announce--poster::after { animation: none; display: none; }
}


/* Full-screen THIS WEEK guest sheet (seat-door / night-view family) */
#week-guest {
  position: fixed;
  inset: 0;
  z-index: 50;
  background: #000;
  padding: calc(var(--island) + 8px) 20px calc(24px + env(safe-area-inset-bottom, 0px));
  overflow-y: auto;
  -webkit-overflow-scrolling: touch;
}
#week-guest[hidden] { display: none !important; }
/* Same rim as the button — corners only, once the announcement is open. */
#week-guest::before {
  content: "";
  position: fixed;
  top: env(safe-area-inset-top, 0px);
  right: 8px;
  bottom: env(safe-area-inset-bottom, 0px);
  left: 8px;
  border-radius: 18px;
  padding: 1.5px;
  background: linear-gradient(
    135deg,
    rgba(255, 255, 255, 0.95) 0%,
    rgba(230, 236, 244, 0.45) 12%,
    rgba(255, 255, 255, 0) 34%,
    rgba(255, 255, 255, 0) 66%,
    rgba(220, 228, 238, 0.4) 88%,
    rgba(255, 255, 255, 0.92) 100%
  );
  -webkit-mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
  -webkit-mask-composite: xor;
  mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
  mask-composite: exclude;
  pointer-events: none;
  z-index: 60;
}
#week-guest.week-guest--in {
  animation: week-guest-in 0.28s ease-out both;
}
@keyframes week-guest-in {
  /* Opacity only — transform would trap position:fixed Ask chip inside sheet. */
  from { opacity: 0; }
  to { opacity: 1; }
}
@media (prefers-reduced-motion: reduce) {
  #week-guest.week-guest--in { animation: none; }
  #week-guest:not([hidden]) #week-guest-photo,
  #week-guest-plate::after,
  #week-guest.week-guest--in::before,
  #week-guest.week-guest--in #week-guest-name,
  #week-guest.week-guest--in #week-guest-title,
  #week-guest.week-guest--in #week-guest-body { animation: none; }
}
#week-guest-x {
  position: sticky;
  float: right;
  right: 0;
  top: max(8px, env(safe-area-inset-top, 0px));
  margin: 0 0 8px 8px;
  width: 36px;
  height: 36px;
  min-width: 36px;
  min-height: 36px;
  background: rgba(0, 0, 0, 0.55);
  border: 0;
  border-radius: 50%;
  color: #fff;
  font-size: 22px;
  z-index: 51;
}
#week-guest-tag {
  margin: 8px 0 10px;
  font-size: 11px;
  letter-spacing: 0.16em;
  font-weight: 700;
  color: var(--gold);
  text-transform: uppercase;
}
#week-guest-name {
  margin: 0 0 8px;
  font-family: "Bebas Neue", Impact, "Arial Narrow", sans-serif;
  font-size: clamp(28px, 8vw, 36px);
  letter-spacing: 0.02em;
  line-height: 1.05;
}
#week-guest-name[hidden] { display: none !important; }
#week-guest-title {
  margin: 0 0 16px;
  font-family: "Bebas Neue", Impact, "Arial Narrow", sans-serif;
  font-size: clamp(22px, 6vw, 28px);
  letter-spacing: 0.02em;
  line-height: 1.15;
  font-weight: 400;
  color: #ddd;
}
#week-guest-body {
  margin: 0;
  font-size: 16px;
  line-height: 1.5;
  color: var(--muted);
  white-space: pre-wrap;
}

.week-edit-jump {
  display: inline-block;
  margin: 4px 0 14px;
  padding: 10px 12px;
  border: 1px solid #3a3a3a;
  border-radius: 10px;
  color: var(--gold);
  text-decoration: none;
  font-size: 12px;
  font-weight: 700;
  letter-spacing: 0.1em;
}
.week-edit-jump[hidden] { display: none !important; }
.week-edit-jump:active { border-color: var(--gold); }

/* More — founder THIS WEEK editor (cloud app_week + local cache) */
#week-edit {
  scroll-margin-top: 12px;
  scroll-margin-bottom: calc(var(--dock) + 16px);
  margin: 8px 0 20px;
  border: 1px solid #1f1f1f;
  border-radius: 12px;
  padding: 14px 12px 16px;
  background: #0a0a0a;
}
#week-edit h2 {
  margin: 0 0 6px;
  font-family: "Bebas Neue", Impact, "Arial Narrow", sans-serif;
  font-size: 24px;
  letter-spacing: 0.04em;
  color: var(--gold);
}
#week-edit > .quiet { margin: 0 0 12px; font-size: 13px; }
#week-edit label {
  display: block;
  margin: 0 0 12px;
  color: var(--muted);
  font-size: 13px;
}
#week-edit input,
#week-edit textarea {
  display: block;
  width: 100%;
  margin-top: 6px;
  background: #111;
  border: 1px solid #333;
  color: #fff;
  border-radius: 10px;
  padding: 12px;
  font-size: 16px;
  font-family: inherit;
}
#week-edit-save {
  width: 100%;
  margin-top: 4px;
  border: 0;
  border-radius: 999px;
  padding: 14px;
  font-weight: 800;
  letter-spacing: 0.06em;
  background: var(--red);
  color: #fff;
}
#week-edit-ok {
  margin: 10px 0 0;
  text-align: center;
  color: var(--gold);
  font-size: 13px;
}
#week-edit-ok[hidden] { display: none !important; }
/* Gate29 small Thunder Theater seat — ~168px; tap = welcome when URL set; no autoplay */
#film-poster {
  position: relative;
  overflow: hidden;
  margin: 0;
  width: 100%;
  aspect-ratio: 16 / 9;
  border-radius: 12px;
  border: 1px solid #1c1c1c;
  background: #050505 center / cover no-repeat url("/assets/logo-wordmark.png");
  pointer-events: auto;
  cursor: default;
  -webkit-tap-highlight-color: transparent;
}
#film-poster.is-ready { cursor: pointer; }
#film-poster[hidden] { display: none !important; }
/* HOUSE compact: capped 16:9 film card (home-film) */
#view-more #film-poster {
  width: 100%;
  max-width: 300px;
  margin: 0 auto;
  border-radius: 12px;
}
#film-poster.has-poster {
  background-color: #050505;
  background-size: cover;
  background-position: center;
  box-shadow: none;
}
#film-poster .theater-cap { display: none !important; }
/* ONE play triangle only */
#film-poster.is-ready::after {
  content: "";
  position: absolute;
  left: 50%;
  top: 50%;
  width: 0;
  height: 0;
  margin: -14px 0 0 -8px;
  border-style: solid;
  border-width: 14px 0 14px 22px;
  border-color: transparent transparent transparent #FEF105;
  filter: drop-shadow(0 2px 6px rgba(0,0,0,0.65));
  pointer-events: none;
}
#coach-replay[hidden] { display: none !important; }
#more-punch[hidden] { display: none !important; }
/* Home plate stays wordmark-only (welcome-video seat). Night wall styles live under #night-hero / .night-shot-img. */
#film-poster.has-night,
#film-poster .hero-shot-img {
  /* inert leftovers — never paint night on Home */
  pointer-events: none !important;
}
#hero-kicker {
  margin: 0 auto 6px;
  text-align: center;
  color: var(--gold);
  font-size: 12px;
  font-weight: 700;
  letter-spacing: 0.16em;
  text-transform: uppercase;
}
#last-night { display: none !important; }
.room-title {
  margin: 0 0 8px;
  font-family: "Bebas Neue", Impact, "Arial Narrow", sans-serif;
  font-size: clamp(30px, 8vw, 36px);
}
.quiet { color: var(--muted); font-size: 15px; line-height: 1.45; }
/* Weight C punch — Bebas / title-punch feel */
.more-punch {
  margin: 0 0 4px;
  font-family: "Bebas Neue", Impact, "Arial Narrow", sans-serif;
  font-size: clamp(28px, 9vw, 42px);
  letter-spacing: 0.06em;
  line-height: 1.02;
  color: var(--gold, #F2C94C);
  text-transform: uppercase;
}
.more-monday-beat {
  margin: 10px auto 4px;
  text-align: center;
  font-family: "Bebas Neue", Impact, "Arial Narrow", sans-serif;
  font-size: clamp(15px, 4.5vw, 20px);
  letter-spacing: 0.1em;
  color: var(--gold, #F2C94C);
  text-transform: uppercase;
}
.more-monday-beat[hidden] { display: none !important; }
/* P1 HOUSE WEIGHT hard-set ≤180ms once on More enter */
@keyframes more-punch-in {
  from { opacity: 0; transform: translateY(4px); }
  to { opacity: 1; transform: translateY(0); }
}
#more-punch.more-punch--in {
  animation: more-punch-in 180ms ease-out both;
}
/* P2 Monday soft land ≤120ms */
@keyframes more-monday-land {
  from { opacity: 0; transform: translateY(4px); }
  to { opacity: 1; transform: translateY(0); }
}
.more-monday-beat.more-monday-beat--in {
  animation: more-monday-land 120ms ease-out both;
}
@media (prefers-reduced-motion: reduce) {
  #more-punch.more-punch--in,
  .more-monday-beat.more-monday-beat--in { animation: none; }
}
#dock {
  position: fixed; left: 0; right: 0; bottom: var(--vv-gap, 0px); height: var(--dock);
  display: grid; grid-template-columns: repeat(5, minmax(0, 1fr));
  background: #000;
  border-top: 0;
  box-shadow: inset 0 1px 0 rgba(242, 201, 76, 0.5);
  padding-bottom: env(safe-area-inset-bottom, 0px); z-index: 20;
}
#dock button {
  appearance: none; background: transparent; border: 0; color: #777;
  font-size: 10px; font-weight: 700; letter-spacing: 0.03em; text-transform: uppercase;
}
#dock button.gold {
  color: #F2C94C;
  background: transparent;
  animation: none;
  text-shadow: none;
}
/* 20261003-room-dot — one gold circle on the corner of the word. Dock box unchanged. */
#dock [data-view="home"].room-dot::after,
#dock [data-view="brothers"].room-dot::after {
  content: '';
  display: inline-block;
  width: 6px;
  height: 6px;
  margin-left: 4px;
  border-radius: 50%;
  background: #F2C94C;
  vertical-align: top;
  pointer-events: none;
}
/* 20260930-bb-three-fix — hide Ask Thunder bolt on Brothers */
/* 20261002-fab-float — hide only on Brothers; Home / Events / House show the float */

/* 20261006-fab-motion-safe — #5 keep sole position: fixed right + bottom calc(dock+…+vv-gap); boot vv polish only. */
/* 20261007-fab-arms-look — HARD LOCK: keep 60×60 · look/assets swap only · NO size bump */
#fab {
  position: fixed;
  right: 6px;
  bottom: calc(var(--dock) + 4px + var(--vv-gap, 0px));
  width: 60px;
  height: 60px;
  border: 0;
  padding: 0;
  background: transparent;
  pointer-events: auto;
  cursor: pointer;
  z-index: 30;
  -webkit-tap-highlight-color: transparent;
  animation: tbBoltFloat calc(var(--pulse) * 3) ease-in-out infinite;
  animation-delay: 0s;
  transform-origin: center 80%;
}
#fab img {
  width: 100%;
  height: 100%;
  object-fit: contain;
  display: block;
  pointer-events: none;
  filter: drop-shadow(0 10px 14px rgba(0,0,0,0.4));
}
/* 20261007-fab-show-off — punch SAFE sole idle float (no new glance/nod/lean loops) */
@keyframes tbBoltFloat {
  0%, 100% { transform: translateY(0); }
  50% { transform: translateY(-7px); }
}
#thunder-backstage {
  position: fixed;
  inset: 0;
  z-index: 75;
  background: #000;
  display: flex;
  flex-direction: column;
  overflow: hidden;
  padding: 0;
}
#thunder-backstage[hidden] { display: none; }
.tb-ask-head {
  flex: none;
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: max(8px, env(safe-area-inset-top)) 8px 4px 16px;
}
#thunder-backstage h2 {
  font-family: "Bebas Neue", Impact, sans-serif;
  font-size: 22px;
  letter-spacing: 0.08em;
  color: #fff;
  margin: 0;
}
#thunder-backstage-x {
  width: 44px; height: 44px;
  border: 1px solid #333; border-radius: 999px;
  background: #111; color: #fff;
  font-size: 16px; font-weight: 700;
}
#thunder-ask-log {
  flex: 1 1 auto;
  min-height: 0;
  overflow-y: auto;
  -webkit-overflow-scrolling: touch;
  display: flex;
  flex-direction: column;
  gap: 10px;
  padding: 8px 14px 12px;
}
.tb-bubble {
  margin: 0;
  max-width: 92%;
  padding: 12px 14px;
  border-radius: 18px;
  font-size: 17px;
  line-height: 1.35;
  white-space: pre-wrap;
}
.tb-bubble.him {
  align-self: flex-start;
  background: #161616;
  color: #fff;
  border-bottom-left-radius: 6px;
}
.tb-bubble.me {
  align-self: flex-end;
  background: #F2C94C;
  color: #111;
  border-bottom-right-radius: 6px;
}
.tb-ask-hello { color: #F2C94C; background: transparent; padding-left: 0; }
#thunder-ask-chips {
  flex: none;
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  overflow: visible;
  padding: 8px 12px 4px;
}
.tb-ask-cite {
  align-self: flex-start;
  margin: -4px 0 2px;
  padding: 4px 10px;
  border: 1px solid #444;
  border-radius: 999px;
  font-size: 11px;
  font-weight: 700;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: #F2C94C;
  background: #161616;
}
.tb-ask-handoff {
  align-self: flex-start;
  max-width: 92%;
  margin: 0;
  padding: 12px 14px;
  border: 1px solid #555;
  border-radius: 12px;
  background: #141414;
}
.tb-ask-handoff-line {
  margin: 0;
  color: #fff;
  font-size: 15px;
  font-weight: 700;
  letter-spacing: 0.02em;
}
.tb-ask-handoff-note {
  margin: 6px 0 0;
  color: #888;
  font-size: 12px;
}
.tb-ask-acts {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  align-self: flex-start;
}
.tb-ask-act {
  background: #000;
  color: #F2C94C;
  border: 1px solid #F2C94C;
  border-radius: 999px;
  padding: 10px 14px;
  font-size: 13px;
  font-weight: 800;
  letter-spacing: 0.04em;
}
.tb-ask-chip {
  flex: 0 0 auto;
  background: #111;
  color: #F2C94C;
  border: 1px solid #F2C94C;
  border-radius: 999px;
  padding: 10px 14px;
  font-size: 14px;
  font-weight: 700;
}
#thunder-ask-bar {
  flex: none;
  display: flex;
  gap: 8px;
  align-items: flex-end;
  padding: 8px 12px calc(10px + env(safe-area-inset-bottom));
  background: #000;
  border-top: 1px solid #222;
}
#thunder-ask-q {
  flex: 1;
  width: auto;
  box-sizing: border-box;
  background: #111;
  color: #fff;
  border: 1px solid #333;
  border-radius: 16px;
  padding: 12px 14px;
  font-size: 16px;
  line-height: 1.3;
  min-height: 48px;
  max-height: 120px;
  resize: none;
}
#thunder-ask-go {
  flex: none;
  width: 76px;
  height: 48px;
  margin: 0;
  background: #F2C94C;
  color: #111;
  border: 0;
  font-weight: 800;
  letter-spacing: 0.04em;
  border-radius: 16px;
}
#thunder-ask-go:disabled { opacity: 0.55; }
#thunder-ask-cam {
  flex: none;
  width: 48px;
  height: 48px;
  border-radius: 999px;
  background: #F2C94C;
  color: #000;
  font-weight: 800;
  font-size: 10px;
  letter-spacing: 0.04em;
  border: 0;
  padding: 0;
}
#thunder-ask-shot {
  max-height: 120px;
  width: auto;
  max-width: 100%;
  display: block;
  margin: 0 14px 8px;
  border-radius: 10px;
}
#thunder-ask-shot[hidden] { display: none; }
#thunder-ask-status {
  position: absolute;
  left: 16px;
  right: 16px;
  bottom: calc(78px + env(safe-area-inset-bottom));
  margin: 0;
  color: #bdbdbd;
  font-size: 14px;
}
#thunder-ask-status.is-err { color: #E30600; }

#build-stamp {
  display: none; margin: 28px 0 8px; text-align: center;
  color: #555; font-size: 11px; letter-spacing: 0.08em;
}
#build-stamp.is-founder { display: block; }

#seat-door {
  position: fixed;
  left: 16px; right: 16px;
  top: calc(var(--island) + 8px);
  z-index: 2500; /* 20260927-seat-cta-alive — above brother-bb 2400 */
  background:
    linear-gradient(180deg, rgba(255, 248, 220, 0.06), transparent 30%),
    #0c0c0c;
  border: 1px solid #2a2418;
  border-radius: 16px;
  padding: 20px 16px 16px;
  box-shadow: 0 18px 40px rgba(0, 0, 0, 0.55), inset 0 1px 0 rgba(255, 248, 220, 0.16);
}
#seat-door[hidden] { display: none !important; }
#seat-door h2 {
  margin: 0 0 14px;
  font-family: "Bebas Neue", Impact, "Arial Narrow", sans-serif;
  font-size: 28px;
}
#seat-door label {
  display: block; margin: 0 0 12px; color: var(--muted); font-size: 13px;
}
#seat-door input {
  display: block; width: 100%; margin-top: 6px;
  background: #080808; border: 1px solid #2a2418; color: #fff;
  border-radius: 10px; padding: 12px; font-size: 16px;
  box-shadow: inset 0 1px 0 rgba(255, 248, 220, 0.1), inset 0 8px 14px rgba(0, 0, 0, 0.45);
}
#door-send, #door-lock {
  width: 100%; margin-top: 8px; border: 0; border-radius: 999px;
  padding: 14px; font-weight: 800; letter-spacing: 0.06em;
  background: var(--red); color: #fff;
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.28),
    0 6px 0 #6e0400,
    0 12px 18px rgba(0, 0, 0, 0.35);
}
#door-send:active, #door-lock:active {
  transform: translateY(2px);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.16),
    0 3px 0 #6e0400,
    0 6px 10px rgba(0, 0, 0, 0.35);
}
#door-x {
  position: absolute; right: 10px; top: 10px;
  background: transparent; border: 0; color: #fff; font-size: 18px;
}
#door-error { min-height: 1.2em; color: var(--gold); font-size: 13px; }

#welcome-back {
  position: fixed;
  left: 16px; right: 16px;
  top: calc(var(--island) + 8px);
  z-index: 40;
  background: #0a0a0a;
  border: 1px solid #2a2a2a;
  border-radius: 16px;
  padding: 20px 16px 16px;
}
#welcome-back[hidden] { display: none !important; }
#welcome-back-name {
  margin: 0 0 14px;
  color: var(--gold);
  font-family: "Bebas Neue", Impact, "Arial Narrow", sans-serif;
  font-size: 28px;
  letter-spacing: 0.04em;
  text-align: center;
}
#welcome-lock {
  width: 100%; margin-top: 8px; border: 0; border-radius: 999px;
  padding: 14px; font-weight: 800; letter-spacing: 0.06em;
  background: var(--red); color: #fff;
}


#own-card {
  margin-top: 14px; border: 1px solid #1f1f1f; border-radius: 12px;
  padding: 10px 12px; background: #0a0a0a;
  display: grid; grid-template-columns: 44px 1fr; grid-column-gap: 10px;
  align-items: start;
}
#own-photo {
  width: 44px; height: 44px; margin: 0; border-radius: 50%;
  background: #161616; display: grid; place-items: center;
  font-family: "Bebas Neue", Impact, "Arial Narrow", sans-serif;
  font-size: 18px; color: var(--gold); grid-row: 1 / -1; align-self: center;
  position: relative; overflow: hidden;
}

#own-photo.has-photo {
  color: transparent;
  box-shadow: 0 0 0 2px var(--gold);
}
#edit-preview {
  width: 80px; height: 80px; margin: 0 auto 12px; border-radius: 50%;
  background: #161616;
  position: relative; overflow: hidden;
}
#edit-preview.has-photo { box-shadow: 0 0 0 2px var(--gold); }
#edit-error { min-height: 1.2em; color: var(--gold); font-size: 13px; margin: 0 0 8px; }
/* P7 Own EDIT SAVED fade 200ms forwards + hold before close */
.edit-saved {
  margin: 8px 0 0;
  min-height: 1.4em;
  text-align: center;
  font-size: 15px;
  font-weight: 800;
  letter-spacing: 0.18em;
  color: var(--gold, #F2C94C);
  opacity: 0;
}
.edit-saved[hidden] { display: none !important; }
@keyframes edit-saved-fade {
  from { opacity: 0; }
  to { opacity: 1; }
}
.edit-saved.edit-saved--in {
  animation: edit-saved-fade 200ms ease-out forwards;
}
@media (prefers-reduced-motion: reduce) {
  .edit-saved.edit-saved--in { animation: none; opacity: 1; }
}

#own-name {
  margin: 0; font-family: "Bebas Neue", Impact, "Arial Narrow", sans-serif; font-size: 20px;
  text-align: left;
}
#own-bio { color: var(--muted); font-size: 13px; line-height: 1.35; text-align: left; margin: 4px 0 0; grid-column: 2; }
#own-bio[hidden] { display: none !important; }
#own-qr { display: none !important; }
#own-actions {
  grid-column: 2;
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 4px;
}
#own-share, #own-edit {
  margin: 0; border: 1px solid #2a2a2a; border-radius: 8px;
  background: #111; padding: 10px 10px; min-height: 40px;
  font-weight: 700; letter-spacing: 0.04em; font-size: 12px; text-align: left;
  -webkit-tap-highlight-color: transparent;
}
#own-share { color: var(--gold); border-color: #3a3a20; }
#own-edit { color: #c8c8c8; }
#edit-leave {
  display: block;
  width: 100%;
  margin: 18px 0 0;
  border: 0;
  background: transparent;
  color: #8a8a8a;
  font-size: 12px;
  letter-spacing: 0.08em;
  font-weight: 700;
  min-height: 44px;
}
#edit-save {
  width: 100%; margin: 8px 0 14px; border: 0; border-radius: 999px;
  padding: 14px; font-weight: 800; letter-spacing: 0.06em;
  background: var(--red); color: #fff;
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.28),
    0 6px 0 #6e0400,
    0 12px 18px rgba(0, 0, 0, 0.35);
}
#edit-save:active {
  transform: translateY(2px);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.16),
    0 3px 0 #6e0400;
}
#profile-edit {
  position: fixed; left: 16px; right: 16px; top: calc(var(--island) + 8px);
  z-index: 41; background:
    linear-gradient(180deg, rgba(255, 248, 220, 0.06), transparent 22%),
    #0c0c0c;
  border: 1px solid #2a2418;
  border-radius: 16px; padding: 20px 16px 24px;
  max-height: calc(100dvh - var(--island) - var(--dock) - 24px);
  overflow-y: auto;
  -webkit-overflow-scrolling: touch;
  box-shadow: 0 18px 40px rgba(0, 0, 0, 0.55), inset 0 1px 0 rgba(255, 248, 220, 0.16);
}
#profile-edit[hidden], #own-card[hidden] { display: none !important; }
#profile-edit h2 {
  margin: 0 0 14px; font-family: "Bebas Neue", Impact, "Arial Narrow", sans-serif; font-size: 28px;
}
#profile-edit label { display: block; margin: 0 0 12px; color: var(--muted); font-size: 13px; }
#profile-edit input, #profile-edit textarea {
  display: block; width: 100%; margin-top: 6px; background: #080808;
  border: 1px solid #2a2418; color: #fff; border-radius: 10px; padding: 12px; font-size: 16px;
  box-shadow: inset 0 1px 0 rgba(255, 248, 220, 0.1), inset 0 8px 14px rgba(0, 0, 0, 0.45);
}
#edit-x {
  position: absolute; right: 10px; top: 10px; background: transparent;
  border: 0; color: #fff; font-size: 18px;
}
#drop-pic {
  width: 100%; margin: 8px 0 16px; border: 0; border-radius: 999px;
  padding: 14px; font-weight: 800; letter-spacing: 0.08em;
  background: var(--red); color: #fff;
}
#drop-stage {
  width: 100%;
  margin: -8px 0 16px;
  display: flex;
  flex-direction: column;
  align-items: center;
}
#drop-stage[hidden] { display: none !important; }
#drop-preview {
  display: block;
  width: 100%;
  height: auto;
  max-height: 52vh;
  object-fit: contain;
  background: #000;
  border: 1px solid #2a2a2a;
  border-radius: 12px;
}
#drop-caption-wrap {
  width: 100%;
  margin-top: 8px;
}
#drop-caption {
  display: block;
  width: 100%;
  box-sizing: border-box;
  margin: 0;
  padding: 8px 2px 6px;
  border: 0;
  border-bottom: 1px solid #333;
  border-radius: 0;
  background: transparent;
  color: #f2f2f2;
  font-family: Inter, system-ui, sans-serif;
  font-weight: 500;
  font-size: clamp(14px, 4vw, 20px);
  line-height: 1.28;
  letter-spacing: 0.01em;
  resize: none;
  min-height: 2.4em;
  max-height: 4.2em;
}
#drop-caption::placeholder { color: #777; }
.night-caption {
  display: block;
  width: 100%;
  margin: 6px 0 0;
  color: #e8e8e8;
  font-family: Inter, system-ui, sans-serif;
  font-weight: 500;
  line-height: 1.28;
  letter-spacing: 0.01em;
  text-align: left;
}
#night-hero > .night-caption {
  font-size: clamp(14px, 3.8vw, 18px);
}
.night-tile > .night-caption {
  font-size: clamp(12px, 3.2vw, 15px);
}
#night-hero {
  position: relative;
  width: 100%;
  margin-bottom: 10px;
  background: transparent;
  border: 0;
  overflow: visible;
}
/* 20261007-events-one-column — ONE never-breaking vertical column (Obie 2:08 lock); no grid, no divider */
#night-row {
  display: flex; flex-direction: column; gap: 10px;
}
/* 20261007-events-column-polish — column capped 680px, centered on desktop; phone stays 100vw − 36px */
#night-hero,
#night-row {
  max-width: 680px;
  margin-left: auto;
  margin-right: auto;
}
.night-tile {
  position: relative;
  background: transparent;
  border: 0;
  overflow: visible;
}
#night-hero > .night-shot-img,
.night-tile > .night-shot-img {
  position: relative;
  display: block;
  width: 100%;
  height: auto;
  object-fit: contain; /* 20261007-events-column-true — box = natural ratio; never crop heads */
  pointer-events: none;
  border: 1px solid #2a2a2a;
  background: #111;
}
#night-hero > .night-shot-img.night-shot--face,
.night-tile > .night-shot-img.night-shot--face {
  object-position: center 72%;
}
/* 20261007-events-column-true — natural aspect per still (--shot-ar set before load: portrait 3:4, landscape 4:3) */
#night-hero > .night-shot-img {
  aspect-ratio: var(--shot-ar, 4 / 3);
  border-radius: 12px;
}
.night-tile > .night-shot-img {
  aspect-ratio: var(--shot-ar, 4 / 3);
  border-radius: 12px;
}
#night-empty[hidden], #night-hero[hidden], #night-count[hidden], #night-see-all[hidden] { display: none !important; }

/* WHO DROPPED — 20261006-events-credit-wall-off: wall .night-credit fully OFF; lightbox .glass-credit-* KEPT */
.night-credit {
  display: none !important;
  pointer-events: none;
}
.night-credit-face,
.night-credit-img {
  display: none !important;
}
.night-credit-name {
  display: none !important;
}
#open-chair {
  margin-top: 18px; border: 1px dashed #2a2a2a; border-radius: 14px;
  padding: 18px 16px; background: #0a0a0a; text-align: center;
  cursor: pointer; -webkit-tap-highlight-color: transparent;
}
#open-chair h2 {
  margin: 0 0 8px;
  font-family: "Bebas Neue", Impact, "Arial Narrow", sans-serif;
  font-size: 28px; color: var(--gold);
}
#open-chair .open-chair-cta {
  display: block; width: 100%; margin-top: 14px; border: 0; border-radius: 12px;
  background: var(--red); color: #fff; font-weight: 800;
  letter-spacing: 0.1em; font-size: 16px; padding: 14px 12px;
  box-shadow: 0 0 18px rgba(227, 6, 0, 0.35), 0 6px 0 #7a0300;
  cursor: pointer; -webkit-tap-highlight-color: transparent;
}
#open-chair[hidden] { display: none !important; }
#night-view {
  /* 20261007-see-all-cinema — flex column: stage contains photo; meta/actions clear below */
  position: fixed; inset: 0; z-index: 50;
  background: #000;
  display: flex;
  flex-direction: column;
  align-items: stretch;
  justify-content: flex-start;
  overflow: hidden;
}
#night-view[hidden] { display: none !important; }
#night-view-stage {
  flex: 1 1 auto;
  min-height: 0;
  width: 100%;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  box-sizing: border-box;
  padding: calc(var(--island) + 8px) 12px 8px;
  overflow: hidden;
}
/* 20261007-viewer-voice-polish — staged tile pixels (canvas) sit exactly behind the glass img until the full lands */
#night-view-stage { position: relative; }
#night-view-stagecv {
  position: absolute;
  left: 0;
  top: 0;
  z-index: 0;
  display: block;
  pointer-events: none;
}
#night-view-stagecv[hidden] { display: none !important; }
#night-view-pic {
  position: relative;
  z-index: 1;
  display: block;
  width: auto;
  height: auto;
  max-width: 100%;
  max-height: 100%;
  object-fit: contain;
  flex: 0 1 auto;
  min-height: 0;
}
#night-view-caption {
  margin: 10px 0 0;
  color: #f2f2f2;
  text-align: center;
  font-family: Inter, system-ui, sans-serif;
  font-weight: 500;
  line-height: 1.28;
  letter-spacing: 0.01em;
  text-shadow: 0 1px 2px #000;
}
#night-view-caption[hidden] { display: none !important; }
#night-view-x {
  position: absolute; right: 14px; top: calc(var(--island) - 8px);
  background: transparent; border: 0; color: #fff; font-size: 22px; z-index: 51;
}
#night-view-meta[hidden], #night-view-actions[hidden] { display: none !important; }
#night-view-meta {
  /* 20261007-see-all-cinema — in-flow under stage so counter clears the photo */
  position: relative; left: auto; right: auto; bottom: auto;
  flex: 0 0 auto;
  margin: 0;
  padding: 8px 12px 4px;
  display: flex; align-items: center; justify-content: center; gap: 8px;
  font-size: 13px; letter-spacing: 0.12em; font-weight: 700;
  color: #fff; text-shadow: 0 1px 2px #000;
  pointer-events: none;
  z-index: 51;
}
.glass-credit-face {
  width: 22px; height: 22px; border-radius: 50%;
  border: 1px solid var(--gold);
  display: flex; align-items: center; justify-content: center;
  flex: 0 0 22px;
  font-family: "Bebas Neue", Impact, "Arial Narrow", sans-serif;
  font-size: 11px; color: var(--gold); background: #111;
  position: relative; overflow: hidden;
  pointer-events: none;
}
.glass-credit-face.has-photo { color: transparent; box-shadow: 0 0 0 1px var(--gold); }
.glass-credit-img {
  position: absolute; inset: 0; width: 100%; height: 100%;
  object-fit: cover; border-radius: 50%;
  pointer-events: none;
}
.glass-credit-text {
  max-width: min(70vw, 280px);
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
#night-count {
  margin: -4px 0 12px;
  font-family: "Bebas Neue", Impact, "Arial Narrow", sans-serif;
  font-size: 18px;
  letter-spacing: 0.14em;
  color: var(--gold);
  opacity: 0.88;
}
#night-see-all {
  display: inline-block;
  margin: -6px 0 14px;
  padding: 0;
  border: 0;
  background: transparent;
  color: var(--gold);
  font-family: "Bebas Neue", Impact, "Arial Narrow", sans-serif;
  font-size: 15px;
  letter-spacing: 0.14em;
  opacity: 0.75;
  pointer-events: auto;
  cursor: pointer;
  text-decoration: underline;
  text-underline-offset: 3px;
}
#night-see-all:active { opacity: 1; }
#night-view-actions {
  position: relative; left: auto; right: auto; bottom: auto;
  flex: 0 0 auto;
  padding: 4px 12px calc(16px + env(safe-area-inset-bottom, 0px));
  display: flex; justify-content: center; gap: 12px;
  z-index: 52;
}
#night-view-delete {
  border: 1px solid #3a3a3a; border-radius: 999px;
  background: #1a0a0a; color: var(--gold);
  font-weight: 800; letter-spacing: 0.08em; font-size: 13px;
  padding: 12px 22px;
  -webkit-tap-highlight-color: transparent;
}

.bro-row {
  margin-top: 10px; border: 1px solid #1f1f1f; border-radius: 12px;
  padding: 10px 12px; background: #0a0a0a;
  display: grid; grid-template-columns: 44px 1fr; grid-column-gap: 10px;
  align-items: center;
}
.bro-face {
  width: 44px; height: 44px; margin: 0; border-radius: 50%;
  background: #161616; display: grid; place-items: center;
  font-family: "Bebas Neue", Impact, "Arial Narrow", sans-serif;
  font-size: 18px; color: var(--gold); grid-row: 1 / span 2;
  position: relative; overflow: hidden;
}
.bro-face.has-photo { color: transparent; box-shadow: 0 0 0 2px var(--gold); }
.bro-name {
  margin: 0; font-family: "Bebas Neue", Impact, "Arial Narrow", sans-serif;
  font-size: 20px; text-align: left;
}
.bro-text {
  margin-top: 6px; border: 0; background: transparent; padding: 0;
  font-weight: 700; letter-spacing: 0.04em; font-size: 11px;
  text-align: left; color: var(--gold);
}

.bro-row--self {
  outline: 1px solid var(--gold, #F2C94C);
  box-shadow: 0 0 0 1px var(--gold, #F2C94C);
}
.bro-bio-line {
  margin: 2px 0 0;
  padding: 0;
  color: var(--muted, #8a8a8a);
  font-size: 12px;
  line-height: 1.3;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  grid-column: 2;
}

#own-leave {
  margin-top: 6px; border: 0; background: transparent; padding: 0;
  font-weight: 700; letter-spacing: 0.04em; font-size: 11px;
  text-align: left; color: #b0b0b0;
}


/* Gate29 WHO'S IN locked aftermath card — paint only; no gesture owners */
#whos-in {
  margin-top: 12px;
  padding: 12px 14px 14px;
  border: 1px solid #2a2418;
  border-radius: 14px;
  background:
    linear-gradient(180deg, rgba(255, 248, 220, 0.07), transparent 38%),
    #0c0c0c;
  box-shadow: 0 12px 22px rgba(0, 0, 0, 0.4), inset 0 1px 0 rgba(255, 248, 220, 0.16);
  text-align: left;
  overflow: visible;
}
#whos-in-head {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 8px;
  flex-wrap: wrap;
  margin: 0 0 8px;
}
#whos-in-title {
  margin: 0;
  font-size: 11px;
  letter-spacing: 0.14em;
  color: var(--gold);
  font-weight: 600;
}
#whos-in-count {
  margin: 0;
  font-size: 11px;
  letter-spacing: 0.06em;
  font-weight: 700;
  color: var(--muted);
}
#whos-in-count[hidden] { display: none !important; }
#whos-in-row {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: 14px 8px;
  align-items: start;
}
.whos-chip {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 6px;
  width: auto;
  min-width: 0;
  text-align: center;
  pointer-events: auto; /* WHOS-IN-PROFILE-TAP-2 */
  cursor: pointer;
}
.whos-initial {
  width: 64px;
  height: 64px;
  border-radius: 50%;
  /* 20261004-whos-grid: gold ring on every real face, locked or not */
  border: 2px solid #F2C94C;
  display: flex;
  align-items: center;
  justify-content: center;
  flex: 0 0 64px;
  font-family: "Bebas Neue", Impact, "Arial Narrow", sans-serif;
  font-size: 18px;
  color: var(--gold);
  background: #111;
  position: relative;
  overflow: hidden;
  margin: 0 auto;
  box-shadow: none;
}
/* Hard gold coin. Depth is a contact shadow, not a bloom. Pop stays on .whos-chip. */
.whos-chip--in .whos-initial {
  border: 3px solid #F2C94C;
  box-shadow: none;
  filter: drop-shadow(0 5px 3px rgba(0, 0, 0, 0.55));
  overflow: visible;
}
/* Specular edge light on the gold only. Face stays clear.
   Idle material, not a hit. Two glints walk the rim. */
.whos-chip--in .whos-initial::after {
  content: "";
  position: absolute;
  inset: -3px;
  border-radius: 50%;
  padding: 3px;
  background: conic-gradient(
    from 0deg,
    transparent 0deg 100deg,
    rgba(242, 201, 76, 0.15) 112deg,
    rgba(255, 248, 220, 0.95) 122deg,
    #fff 126deg,
    rgba(255, 248, 220, 0.95) 130deg,
    rgba(242, 201, 76, 0.15) 142deg,
    transparent 154deg 280deg,
    rgba(242, 201, 76, 0.2) 292deg,
    rgba(255, 252, 240, 0.85) 302deg,
    #fff 306deg,
    rgba(255, 252, 240, 0.7) 312deg,
    transparent 324deg 360deg
  );
  -webkit-mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
  -webkit-mask-composite: xor;
  mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
  mask-composite: exclude;
  pointer-events: none;
  z-index: 2;
  animation: whos-rim-travel calc(var(--pulse) * 6) linear infinite;
  animation-delay: 0s;
}
.whos-chip--in:nth-child(2) .whos-initial::after,
.whos-chip--in:nth-child(3) .whos-initial::after,
.whos-chip--in:nth-child(4) .whos-initial::after,
.whos-chip--in:nth-child(5) .whos-initial::after,
.whos-chip--in:nth-child(n + 6) .whos-initial::after { animation-delay: 0s; }
.whos-chip:active {
  transform: scale(0.94);
}
@keyframes whos-rim-travel {
  from { transform: rotate(0deg); }
  to { transform: rotate(360deg); }
}
.whos-name {
  margin: 0;
  font-size: 11px;
  line-height: 1.2;
  color: #d8d8d8;
  max-width: 100%;
  width: 100%;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}


/* WHO'S IN pop — CSS only; respects reduced motion; no touch owners */
@keyframes whos-pop {
  0% { opacity: 0; transform: translateY(16px) scale(0.55); filter: brightness(1.8); }
  18% { opacity: 1; transform: translateY(0) scale(1.16); filter: brightness(1.45); }
  100% { opacity: 1; transform: translateY(0) scale(1); filter: brightness(1); }
}
@keyframes whos-count-tick {
  0% { transform: scale(1); color: inherit; }
  16% { transform: scale(1.35); color: #F2C94C; text-shadow: 0 0 18px rgba(242, 201, 76, 0.95); }
  100% { transform: scale(1); color: inherit; text-shadow: none; }
}
.whos-chip--pop {
  animation: whos-pop 2.1s cubic-bezier(0.22, 0.61, 0.2, 1) both;
}
.whos-chip--pop:nth-child(2) { animation-delay: 0.08s; }
.whos-chip--pop:nth-child(3) { animation-delay: 0.16s; }
#whos-in-count.whos-count--tick,
#night-count.night-count--tick {
  animation: whos-count-tick 2.1s cubic-bezier(0.22, 0.61, 0.2, 1) both;
}
/* Gate36 — soft flash when night Realtime lands a new tile */
@keyframes night-fresh {
  0% { box-shadow: 0 0 0 0 rgba(242, 201, 76, 0.2); border-color: #2a2a2a; filter: brightness(1); }
  16% { box-shadow: 0 0 36px 10px rgba(242, 201, 76, 0.95); border-color: #F2C94C; filter: brightness(1.45); }
  100% { box-shadow: none; border-color: #2a2a2a; filter: brightness(1); }
}
.night-tile.night-tile--fresh,
#night-hero.night-hero--fresh {
  animation: night-fresh 2.2s cubic-bezier(0.22, 0.61, 0.2, 1) both;
}

/* 20260917-feel-hits — CSS dopamine only; short, self-clearing */
@keyframes tb-hit-gold-flash {
  0% { transform: scale(1); box-shadow: 0 0 0 0 rgba(242, 201, 76, 0.95); filter: brightness(1); }
  12% { transform: scale(1.2); box-shadow: 0 0 64px 20px rgba(242, 201, 76, 1); filter: brightness(1.7); }
  36% { transform: scale(1.06); box-shadow: 0 0 28px 8px rgba(242, 201, 76, 0.45); filter: brightness(1.12); }
  100% { transform: scale(1); box-shadow: 0 0 0 0 transparent; filter: brightness(1); }
}
#drop-pic.tb-hit-gold,
.tb-hit-gold {
  animation: tb-hit-gold-flash 2.4s cubic-bezier(0.22, 0.61, 0.2, 1) both;
}
@keyframes tb-hit-rim-flash {
  0% { transform: scale(1); box-shadow: 0 0 0 0 rgba(242, 201, 76, 0.95); filter: brightness(1); }
  14% { transform: scale(1.12); box-shadow: 0 0 0 8px rgba(242, 201, 76, 1), 0 0 56px 16px rgba(242, 201, 76, 0.95); filter: brightness(1.5); }
  40% { transform: scale(1.03); box-shadow: 0 0 0 3px rgba(242, 201, 76, 0.4), 0 0 22px 6px rgba(242, 201, 76, 0.3); filter: brightness(1.08); }
  100% { transform: scale(1); box-shadow: 0 0 0 0 transparent; filter: brightness(1); }
}
#night-see-all.tb-hit-rim,
#voices-archive-open.tb-hit-rim,
.voice-tile.tb-hit-rim,
.voice-row.tb-hit-rim,
.place-map.tb-hit-rim,
#place-sheet-cal.tb-hit-rim,
#own-share.tb-hit-rim {
  animation: tb-hit-rim-flash 2.2s cubic-bezier(0.22, 0.61, 0.2, 1) both;
}
@keyframes tb-hit-curtain {
  0% { box-shadow: inset 0 0 0 0 transparent; }
  12% { box-shadow: inset 0 0 0 12px #F2C94C, inset 0 0 140px 48px rgba(227, 6, 0, 0.7); }
  38% { box-shadow: inset 0 0 0 4px rgba(242, 201, 76, 0.45), inset 0 0 50px 14px rgba(227, 6, 0, 0.2); }
  100% { box-shadow: inset 0 0 0 0 transparent; }
}
#welcome-theater.tb-hit-curtain {
  animation: tb-hit-curtain 2.4s cubic-bezier(0.22, 0.61, 0.2, 1) both;
}
@keyframes tb-hit-sheet-in {
  0% { opacity: 0.55; transform: translateY(28px) scale(0.96); box-shadow: inset 0 0 0 0 transparent; }
  16% { opacity: 1; transform: translateY(0) scale(1); box-shadow: inset 0 0 0 10px #F2C94C, inset 0 0 120px 36px rgba(227, 6, 0, 0.55); }
  100% { opacity: 1; transform: translateY(0) scale(1); box-shadow: inset 0 0 0 0 transparent; }
}
#voices-archive.tb-hit-sheet,
#place-sheet.tb-hit-sheet {
  animation: tb-hit-sheet-in 2.4s cubic-bezier(0.22, 0.61, 0.2, 1) both;
}

@media (prefers-reduced-motion: reduce) {
  .whos-chip--pop,
  .whos-chip--in .whos-initial::after,
  .bro-face.has-photo::after,
  #night-hero::after,
  .night-tile::after,
  #whos-in-count.whos-count--tick,
  #night-count.night-count--tick,
  #rsvp-btn.rsvp-aftermath,
  .night-tile.night-tile--fresh,
  #night-hero.night-hero--fresh,
  #drop-pic.tb-hit-gold,
  .tb-hit-gold,
  #night-see-all.tb-hit-rim,
  #voices-archive-open.tb-hit-rim,
  .voice-tile.tb-hit-rim,
  .voice-row.tb-hit-rim,
  #own-share.tb-hit-rim,
  #welcome-theater.tb-hit-curtain,
  #voices-archive.tb-hit-sheet,
  #place-sheet.tb-hit-sheet,
  .place-map.tb-hit-rim,
  #place-sheet-maps.tb-hit-gold,
  #place-sheet-cal.tb-hit-rim,
  .place-map-target,
  .place-map-target::before,
  .place-map-target::after,
  .thunder-ask-hero-img,
  .thunder-ask-hero-img.tb-tux-in,
  .thunder-ask-hero-img.tb-tux-speak,
  #fab,
  .tb-ask-slam,
  .tb-ask-mine,
  .tb-ask-reply,
  #thunder-backstage.tb-ask-curtain,
  #thunder-ask-listen { animation: none; }
  .whos-chip:active,
  .bro-row:active,
  #drop-pic:active,
  #door-send:active,
  #door-lock:active,
  #edit-save:active,
  #view-more .house-util-rail .house-code-read:active { transform: none; }
}

.whos-initial.has-photo {
  color: transparent;
  background-color: #111;
}

.whos-initial,
.bro-face,
#own-photo,
#edit-preview {
  position: relative;
  overflow: hidden;
}
/* Rim glint is drawn outside the coin. Clip the face, not the ring. */
.whos-initial {
  overflow: visible;
}
.whos-face-img,
.bro-face-img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  border-radius: inherit;
  display: block;
  pointer-events: none;
}
/* Two men in the file. The coin keeps Steven, on the right, same as the card. */
.whos-face-img[src*="steven-parker"],
.bro-face-img[src*="steven-parker"] {
  object-position: right top;
}
.whos-initial.has-photo,
.bro-face.has-photo {
  color: transparent;
}

/* More — founder Theater upload (Storage + app_theater URLs) */
#theater-edit {
  scroll-margin-top: 12px;
  scroll-margin-bottom: calc(var(--dock) + 16px);
  margin: 8px 0 20px;
  border: 1px solid #1f1f1f;
  border-radius: 12px;
  padding: 14px 12px 16px;
  background: #0a0a0a;
}
#theater-edit h2 {
  margin: 0 0 6px;
  font-family: "Bebas Neue", Impact, "Arial Narrow", sans-serif;
  font-size: 24px;
  letter-spacing: 0.04em;
  color: var(--gold);
}
#theater-edit > .quiet { margin: 0 0 12px; font-size: 13px; }
#theater-edit label {
  display: block;
  margin: 0 0 12px;
  color: var(--muted);
  font-size: 13px;
}
#theater-edit input[type="file"] {
  display: block;
  width: 100%;
  margin-top: 6px;
  color: #fff;
  font-size: 14px;
}
#theater-upload {
  width: 100%;
  margin-top: 4px;
  border: 0;
  border-radius: 999px;
  padding: 14px;
  font-weight: 800;
  letter-spacing: 0.06em;
  background: var(--red);
  color: #fff;
}
#theater-upload:disabled { opacity: 0.55; }
#theater-status {
  margin: 10px 0 0;
  text-align: center;
  color: var(--gold);
  font-size: 13px;
  line-height: 1.4;
}
#theater-status[hidden] { display: none !important; }

/* Light welcome player — video src set only after Home poster tap */
#welcome-theater {
  position: fixed;
  inset: 0;
  z-index: 80;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  padding: max(52px, calc(env(safe-area-inset-top) + 44px)) 6px max(12px, env(safe-area-inset-bottom));
  background: #000;
}
#welcome-theater[hidden] { display: none !important; }
#welcome-theater-x {
  position: absolute;
  top: max(12px, env(safe-area-inset-top));
  right: 12px;
  width: 44px;
  height: 44px;
  border: 1px solid #333;
  border-radius: 999px;
  background: #111;
  color: #fff;
  font-size: 16px;
  font-weight: 700;
  z-index: 81;
}
/* 20261007-viewer-voice-polish — the close X always sits above the playing video (own layer, never auto-hidden);
   video is pinned to layer 0 inside an isolated player so no compositor overlay can cover the X */
#welcome-theater { isolation: isolate; }
/* 20261007-viewer-cold-fix — page under the open player is scroll-locked (no wheel/touch bleed); exact scrollY restored on close */
html.tb-theater-lock,
html.tb-theater-lock body { overflow: hidden; overscroll-behavior: none; }
#welcome-theater { overscroll-behavior: contain; }
#welcome-theater > #welcome-theater-x {
  position: fixed;
  top: max(12px, env(safe-area-inset-top));
  right: max(12px, env(safe-area-inset-right));
  z-index: 90;
  opacity: 1;
  visibility: visible;
  pointer-events: auto;
}
#welcome-theater > #welcome-theater-x:not(.house-pass-this) {
  border-color: rgba(255, 255, 255, 0.55);
  background: rgba(17, 17, 17, 0.92);
}
#welcome-theater-video {
  position: relative;
  z-index: 0;
  width: 100%;
  max-width: 100%;
  max-height: min(92vh, 920px);
  max-height: min(92dvh, 920px);
  height: auto;
  object-fit: contain;
  border-radius: 8px;
  background: #000;
  border: 0;
}


/* Thunder backstage character — sunglasses tuxedo, living idle (CSS only) */
.thunder-ask-hero {
  display: flex;
  justify-content: center;
  margin: 4px 0 8px;
}
.thunder-ask-hero-img {
  width: min(220px, 58vw);
  height: auto;
  max-height: 36vh;
  object-fit: contain;
  display: block;
  transform-origin: center 70%;
  animation: tbTuxIdle calc(var(--pulse) * 3) ease-in-out infinite;
  animation-delay: 0s;
  filter: drop-shadow(0 0 18px rgba(254, 241, 5, 0.25));
}
.thunder-ask-hero-img.tb-tux-in {
  animation: tbTuxIn 0.7s cubic-bezier(0.22, 1, 0.36, 1), tbTuxIdle calc(var(--pulse) * 3) ease-in-out infinite;
}
.thunder-ask-hero-img.tb-tux-speak {
  animation: tbTuxSpeak 1.2s ease-in-out, tbTuxIdle calc(var(--pulse) * 3) ease-in-out infinite;
}
@keyframes tbTuxIn {
  from { opacity: 0; transform: translateY(18px) scale(0.96); filter: brightness(0.6); }
  to { opacity: 1; transform: translateY(0) scale(1); filter: brightness(1); }
}
@keyframes tbTuxIdle {
  0%, 100% { transform: translateY(0); filter: drop-shadow(0 0 14px rgba(254,241,5,0.22)); }
  50% { transform: translateY(-6px); filter: drop-shadow(0 0 26px rgba(254,241,5,0.45)); }
}
@keyframes tbTuxSpeak {
  0%, 100% { transform: translateY(0) scale(1); }
  30% { transform: translateY(-8px) scale(1.03); filter: drop-shadow(0 0 32px rgba(254,241,5,0.55)); }
  60% { transform: translateY(-2px) scale(1.01); }
}

/* 20260917-ask-hit — hard gold, then fade. CSS only. */
@keyframes tb-ask-slam {
  0% { transform: scale(1); box-shadow: 0 0 0 0 rgba(242, 201, 76, 0.95); filter: brightness(1); }
  12% { transform: scale(1.2); box-shadow: 0 0 64px 20px rgba(242, 201, 76, 1); filter: brightness(1.7); }
  34% { transform: scale(1.06); box-shadow: 0 0 28px 8px rgba(242, 201, 76, 0.45); filter: brightness(1.12); }
  100% { transform: scale(1); box-shadow: 0 0 0 0 transparent; filter: brightness(1); }
}
.tb-ask-chip.tb-ask-slam,
#thunder-ask-go.tb-ask-slam {
  animation: tb-ask-slam 2.2s cubic-bezier(0.22, 0.61, 0.2, 1) both;
}
@keyframes tb-ask-mine {
  0% { transform: scale(0.62); filter: brightness(1.8); box-shadow: 0 0 0 0 rgba(242, 201, 76, 0.95); }
  16% { transform: scale(1.14); filter: brightness(1.45); box-shadow: 0 0 48px 14px rgba(242, 201, 76, 0.95); }
  100% { transform: scale(1); filter: brightness(1); box-shadow: 0 0 0 0 transparent; }
}
.tb-bubble.me.tb-ask-mine {
  animation: tb-ask-mine 2.1s cubic-bezier(0.22, 0.61, 0.2, 1) both;
}
@keyframes tb-ask-reply {
  0% { background: #FFE08A; color: #111; transform: scale(0.8); box-shadow: 0 0 0 0 rgba(242, 201, 76, 0); }
  14% { background: #F2C94C; color: #111; transform: scale(1.08); box-shadow: 0 0 64px 18px rgba(242, 201, 76, 1); }
  42% { background: #3a2a08; color: #fff; transform: scale(1.02); box-shadow: 0 0 28px 8px rgba(242, 201, 76, 0.4); }
  100% { background: #161616; color: #fff; transform: scale(1); box-shadow: 0 0 0 0 transparent; }
}
.tb-bubble.him.tb-ask-reply {
  animation: tb-ask-reply 2.4s cubic-bezier(0.22, 0.61, 0.2, 1) both;
}
@keyframes tb-ask-curtain {
  0% { box-shadow: inset 0 0 0 0 transparent; }
  12% { box-shadow: inset 0 0 0 12px #F2C94C, inset 0 0 140px 48px rgba(227, 6, 0, 0.7); }
  38% { box-shadow: inset 0 0 0 4px rgba(242, 201, 76, 0.45), inset 0 0 50px 14px rgba(227, 6, 0, 0.2); }
  100% { box-shadow: inset 0 0 0 0 transparent; }
}
#thunder-backstage.tb-ask-curtain {
  animation: tb-ask-curtain 2.4s cubic-bezier(0.22, 0.61, 0.2, 1) both;
}
#thunder-ask-listen {
  flex: none;
  height: 10px;
  margin: 0 14px 8px;
  border-radius: 999px;
  background: #F2C94C;
  transform-origin: center;
  box-shadow: 0 0 28px 8px rgba(242, 201, 76, 0.95);
  animation: tb-ask-listen var(--pulse) ease-in-out infinite;
  animation-delay: 0s;
}
#thunder-ask-listen[hidden] { display: none; }
@keyframes tb-ask-listen {
  0%, 100% { transform: scaleX(0.22); opacity: 0.55; filter: brightness(1); }
  50% { transform: scaleX(1); opacity: 1; filter: brightness(1.6); box-shadow: 0 0 42px 14px rgba(242, 201, 76, 1); }
}

#since-left {
  margin: 10px 18px 0;
  text-align: center;
  color: #F2C94C;
  font-size: 15px;
  line-height: 1.35;
}
#since-left[hidden] { display: none !important; }

#his-place, #own-place {
  margin: 2px 0 0;
  text-align: center;
  color: #F2C94C;
  font-size: 14px;
  line-height: 1.3;
}
#his-place[hidden], #own-place[hidden] { display: none !important; }
#own-place { text-align: left; margin: 0 0 6px; }

/* LPF-FILTER-1 — Events filter sheet only. Do not touch Home card. */
#lpf-sheet {
  position: fixed; left: 16px; right: 16px; top: calc(var(--island, 48px) + 8px);
  z-index: 45; background: #0a0a0a; border: 1px solid #2a2a2a;
  border-radius: 16px; padding: 20px 16px 16px; max-height: 80dvh; overflow: auto;
}
#lpf-sheet[hidden] { display: none !important; }
#lpf-sheet h2 {
  margin: 0 0 8px;
  font-family: "Bebas Neue", Impact, "Arial Narrow", sans-serif;
  font-size: 28px;
}
#lpf-preview {
  display: block; width: 100%; max-height: 240px; object-fit: cover;
  border-radius: 12px; margin: 10px 0; background: #111;
}
#lpf-filter, #lpf-clarity, #lpf-apply {
  width: 100%; margin-top: 8px; border: 0; border-radius: 999px;
  padding: 14px; font-weight: 800; letter-spacing: 0.06em;
}
#lpf-filter { background: var(--red, #E30600); color: #fff; }
#lpf-clarity { background: #1a1a1a; color: var(--gold, #F2C94C); border: 1px solid #333; }
#lpf-clarity:disabled, #lpf-apply:disabled { opacity: 0.4; }
#lpf-apply { background: var(--gold, #F2C94C); color: #111; }
#lpf-x {
  position: absolute; right: 10px; top: 10px;
  background: transparent; border: 0; color: #fff; font-size: 18px;
}
#lpf-rungs { margin: 6px 0 0; font-size: 12px; }

/* 20260929-archive-under — photo stays inside the silver safe line */
#week-guest-plate {
  position: relative;
  width: 100%;
  max-width: none;
  margin: 0 0 22px;
  background: #000;
  border-radius: 16px;
  overflow: hidden;
}
#week-guest-plate[hidden] { display:none !important; }
#week-guest-photo {
  display: block;
  width: 100%;
  height: 280px;
  max-width: none;
  max-height: none;
  margin: 0;
  object-fit: cover;
  object-position: center 22%;
  border-radius: 0;
  background: #000;
  transform-origin: center 30%;
}
#week-guest:not([hidden]) #week-guest-photo {
  animation: none;
}
#week-guest-plate::after {
  content: "";
  position: absolute;
  inset: 0;
  background: linear-gradient(115deg, transparent 28%, rgba(255, 255, 255, 0.34) 48%, transparent 64%);
  transform: translateX(-80%);
  animation: none;
  pointer-events: none;
}
#week-guest.week-guest--in::before {
  animation: none;
}
#week-guest.week-guest--in #week-guest-name,
#week-guest.week-guest--in #week-guest-title,
#week-guest.week-guest--in #week-guest-body {
  animation: week-copy-in 0.55s cubic-bezier(0.16, 0.84, 0.22, 1) both;
}
#week-guest.week-guest--in #week-guest-title { animation-delay: 0.08s; }
#week-guest.week-guest--in #week-guest-body { animation-delay: 0.16s; }
@keyframes week-photo-live {
  0%, 100% { transform: scale(1); }
  50% { transform: scale(1.045); }
}
@keyframes week-plate-glass {
  0%, 40% { transform: translateX(-80%); opacity: 0; }
  55% { opacity: 1; }
  100% { transform: translateX(80%); opacity: 0; }
}
@keyframes week-rim-live {
  0%, 100% { opacity: 0.62; }
  50% { opacity: 1; }
}
@keyframes week-copy-in {
  from { opacity: 0; transform: translateY(10px); }
  to { opacity: 1; transform: none; }
}
#week-guest-x {
  position: sticky;
  top: max(8px, env(safe-area-inset-top, 0px));
  width: 36px;
  height: 36px;
  min-width: 36px;
  min-height: 36px;
  border-radius: 50%;
  background: rgba(0, 0, 0, 0.55);
}
#week-guest-photo[hidden] { display:none !important; }
#week-guest-facebook { display:block; margin:20px 0 12px; padding:12px 16px; border:2px solid #F2C94C; border-radius:8px; color:#F2C94C; text-align:center; text-decoration:none; font-size:13px; font-weight:700; letter-spacing:0.14em; }
#week-guest-facebook[hidden] { display:none !important; }
#week-guest-past { margin: 4px 0 22px; }
#week-guest-voices { margin:8px 0 24px; }
#week-guest-voices[hidden] { display:none !important; }

.bro-row--from-whos { outline: 2px solid var(--gold, #F2C94C); border-radius: 12px; }

/* CONTACT-CARD-PRESENCE-BIO-1 */
#own-place.own-presence {
  display: block;
  margin: 4px 0 8px;
  font-size: 13px;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  color: var(--gold, #F2C94C);
  opacity: 0.9;
}
#own-bio.own-bio-nudge {
  margin: 6px 0 10px;
  font-size: 14px;
  color: #9a9a9a;
  text-decoration: underline;
  text-underline-offset: 3px;
}

/* SHARE-CARD-FIELDS-1 */
#own-card .own-meta {
  margin: 2px 0;
  font-size: 14px;
  color: #c8c8c8;
  text-align: center;
}
#own-card .own-meta[hidden] { display: none !important; }
#own-text.own-text-btn {
  display: block;
  margin: 10px auto 0;
  padding: 8px 16px;
  border-radius: 999px;
  border: 1px solid var(--gold, #F2C94C);
  background: transparent;
  color: var(--gold, #F2C94C);
  font-size: 13px;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  cursor: pointer;
}
#own-text.own-text-btn[hidden] { display: none !important; }
#profile-edit label .quiet { font-weight: 400; opacity: 0.65; font-size: 12px; }

/* 20260921-face-page Face B overlay — Home chip / same #own-card */
body.tb-face-b #face-poster-host {
  position: fixed;
  inset: 0;
  z-index: 7200;
  background: rgba(0, 0, 0, 0.72);
}
body:not(.tb-face-b) #face-poster-host {
  display: none !important;
  pointer-events: none !important;
  background: none !important;
}
#own-card.is-poster {
  position: fixed;
  left: 16px;
  right: 16px;
  top: max(72px, calc(env(safe-area-inset-top) + 54px));
  bottom: 88px;
  z-index: 7210;
  margin: 0;
  padding: 0 0 16px;
  overflow: auto;
  display: flex;
  flex-direction: column;
  border: 1px solid var(--gold, #c9a227);
  border-radius: 18px;
  background: #000;
}
#own-card.is-poster #own-photo {
  position: relative;
  order: 0;
  width: 100%;
  height: 52vw;
  min-height: 240px;
  max-height: 340px;
  border-radius: 18px 18px 0 0;
  box-shadow: none;
  grid-row: auto;
  align-self: stretch;
}
#own-card.is-poster #own-photo.has-photo {
  box-shadow: none;
}
#own-card.is-poster #own-photo::after {
  content: "";
  position: absolute;
  left: 0;
  right: 0;
  bottom: 0;
  height: 52%;
  background: linear-gradient(to top, #000 0%, rgba(0,0,0,0.78) 42%, transparent 100%);
  pointer-events: none;
  z-index: 1;
}
#own-card.is-poster #own-photo img.bro-face-img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: center top;
}
#own-card.is-poster #own-name {
  order: 1;
  margin: -92px 16px 0;
  position: relative;
  z-index: 2;
  text-align: center;
  font-size: 34px;
  line-height: 0.95;
  letter-spacing: 0.04em;
  color: #fff;
  text-shadow: 0 1px 12px #000, 0 0 6px #000;
  grid-column: auto;
}
body.tb-face-b #profile-edit {
  z-index: 7300;
}
#own-card.is-poster #own-bio {
  order: 3;
  margin: 18px 20px 0;
  text-align: center;
  grid-column: auto;
  color: #cfcfcf;
  font-size: 14px;
  line-height: 1.4;
}
#own-card.is-poster #own-birthday,
#own-card.is-poster #own-email,
#own-card.is-poster #own-joined,
#own-card.is-poster #own-place,
#own-card.is-poster #own-qr {
  display: none !important;
}
#own-card.is-poster #own-occupation {
  display: block;
  order: 2;
  margin: 8px 16px 0;
  text-align: center;
  color: var(--gold, #c9a227);
  font-size: 13px;
  letter-spacing: 0.06em;
  grid-column: auto;
  position: relative;
  z-index: 2;
}
#own-card.is-poster #own-occupation[hidden] { display: none !important; }
#own-card.is-poster #own-text {
  order: 4;
  margin: 20px 16px 0;
}
#own-card.is-poster #own-actions {
  display: flex;
  flex-direction: column;
  order: 5;
  gap: 10px;
  margin: 10px 16px 0;
  grid-column: auto;
  align-items: stretch;
}
#own-card.is-poster #own-share,
#own-card.is-poster #own-edit,
#own-card.is-poster #own-text {
  display: block;
  width: 100%;
  min-height: 48px;
  border-radius: 999px;
  text-align: center;
  font-size: 14px;
  letter-spacing: 0.06em;
}
#own-card.is-poster #own-share {
  background: var(--gold, #c9a227);
  color: #111;
  border: 0;
}
#own-card.is-poster #own-edit {
  background: transparent;
  color: #c8c8c8;
  border: 1px solid #3a3a3a;
}
#own-card.is-poster #own-text {
  background: #b42318;
  color: #fff;
  border: 0;
}
#own-card.is-poster.is-guest #own-edit,
#own-card.is-poster #own-leave {
  display: none !important;
}
#own-card.is-poster:not(.is-guest) #own-text {
  display: none !important;
}
#own-close {
  position: absolute;
  top: 10px;
  right: 12px;
  z-index: 2;
  width: 36px;
  height: 36px;
  border: 0;
  border-radius: 50%;
  background: rgba(0, 0, 0, 0.55);
  color: #fff;
  font-size: 16px;
}
#own-card.is-poster #own-close {
  display: grid !important;
  place-items: center;
}
#own-card { position: relative; }

/* 20260921-bros-poster — Brothers Heavy circle look (Who's In Face B untouched) */
body.tb-bros-poster #bros-table,
body.tb-bros-poster #bros-room {
  opacity: 0.35;
}
#own-card.is-poster.is-bros-look {
  padding: 20px 16px 16px;
  align-items: center;
}
#own-card.is-poster.is-bros-look #own-photo {
  width: 92px;
  height: 92px;
  min-height: 92px;
  max-height: 92px;
  border-radius: 50%;
  box-shadow: 0 0 0 3px #F2C94C;
  align-self: center;
  margin: 28px auto 0;
  order: 0;
}
#own-card.is-poster.is-bros-look #own-photo.has-photo {
  box-shadow: 0 0 0 3px #F2C94C;
}
#own-card.is-poster.is-bros-look #own-photo::after {
  content: none;
  display: none;
}
#own-card.is-poster.is-bros-look #own-photo img.bro-face-img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: center;
  border-radius: 50%;
}
#own-card.is-poster.is-bros-look #own-name {
  order: 1;
  margin: 14px 0 0;
  font-family: "Bebas Neue", Impact, "Arial Narrow", sans-serif;
  text-align: center;
  font-size: 32px;
  line-height: 0.95;
  letter-spacing: 0.04em;
  color: #fff;
  text-shadow: none;
  position: static;
  z-index: auto;
}
#own-card.is-poster.is-bros-look #own-occupation {
  order: 2;
  margin: 6px 0 0;
  text-align: center;
  color: var(--gold, #F2C94C);
  font-size: 13px;
  letter-spacing: 0.06em;
  opacity: 0.9;
}
#own-card.is-poster.is-bros-look #own-bio {
  order: 3;
  margin: 14px 8px 0;
  text-align: left;
  color: #f2f2f2;
  font-size: 14px;
  line-height: 1.45;
  white-space: pre-wrap;
  overflow: visible;
  display: block;
  max-width: 100%;
  -webkit-line-clamp: unset;
  line-clamp: unset;
}
#own-card.is-poster.is-bros-look #own-text {
  order: 4;
  margin: 18px 0 0;
  width: 100%;
  min-height: 52px;
  border-radius: 999px;
  background: #b42318;
  color: #fff;
  border: 0;
  font-weight: 800;
  letter-spacing: 0.08em;
  font-size: 15px;
}
#own-card.is-poster.is-bros-look #own-actions {
  order: 5;
  width: 100%;
  margin: 10px 0 0;
}
#own-card.is-poster.is-bros-look #own-share {
  width: 100%;
  min-height: 52px;
  border-radius: 999px;
  background: var(--gold, #F2C94C);
  color: #111;
  border: 0;
  font-weight: 800;
  letter-spacing: 0.08em;
  font-size: 15px;
}
#own-card.is-poster.is-bros-look #own-edit {
  width: 100%;
  min-height: 48px;
  border-radius: 999px;
}
/* Contact Poster (Who's In from home) stays Face B full-bleed — :not(.is-bros-look) uses base .is-poster rules */

/* HOUSE compact 20260925-coach-house — label is dead, red chip is the button, gold on every row */
.house-chip-row {
  display: flex; align-items: center; justify-content: space-between; gap: 12px;
  width: 100%; margin: 0 0 12px; padding: 4px 0 4px 12px;
  border-left: 4px solid #FEF105; background: transparent; box-sizing: border-box;
}
.house-code-line,
.house-chip-line {
  font-family: "Bebas Neue", Impact, "Arial Narrow", sans-serif;
  font-size: clamp(16px, 4.6vw, 20px); letter-spacing: 0.06em; line-height: 1.1;
  color: #fff; pointer-events: none;
}
.house-code-read {
  appearance: none; border: 0; cursor: pointer;
  flex: 0 0 auto;
  border-radius: 8px;
  padding: 10px 14px;
  background: #E30600;
  color: #fff;
  font-family: "Bebas Neue", Impact, "Arial Narrow", sans-serif;
  font-size: 16px; letter-spacing: 0.1em;
  -webkit-tap-highlight-color: transparent;
}
.house-cards {
  display: grid; grid-template-columns: 1fr; gap: 10px; margin: 12px 0 10px;
}
.house-card {
  display: flex; flex-direction: column; justify-content: space-between; gap: 12px;
  min-height: 110px; padding: 14px 12px;
  border: 1px solid #1c1c1c; border-radius: 12px; background: #0e0e0e;
}
.house-card-title {
  margin: 0;
  font-family: "Bebas Neue", Impact, "Arial Narrow", sans-serif;
  font-size: 18px; letter-spacing: 0.06em; line-height: 1.05; color: #fff;
}
.house-cta {
  appearance: none; align-self: flex-start; border: 0; border-radius: 8px;
  padding: 10px 14px; background: #E30600; color: #fff;
  font-family: "Bebas Neue", Impact, "Arial Narrow", sans-serif;
  font-size: 16px; letter-spacing: 0.1em;
  -webkit-tap-highlight-color: transparent;
}
.house-cta-block { display: block; width: 100%; text-align: center; margin: 12px 0; }
.house-quiet { display: flex; flex-wrap: wrap; gap: 8px 18px; margin: 4px 0 20px; }
.house-quiet-link {
  appearance: none; border: 0; background: transparent; padding: 0;
  color: #888; font-size: 12px; font-weight: 600; letter-spacing: 0.1em;
  text-transform: uppercase; text-decoration: underline; text-underline-offset: 3px;
  -webkit-tap-highlight-color: transparent;
}
.house-sheet {
  position: fixed; inset: 0; z-index: 45;
  display: flex; align-items: flex-end; justify-content: center;
}
.house-sheet[hidden] { display: none !important; }
.house-sheet-backdrop { position: absolute; inset: 0; background: rgba(0,0,0,0.72); }
.house-sheet-panel {
  position: relative; z-index: 1; width: min(100%, 520px);
  max-height: min(86vh, 640px); overflow: auto; margin: 0;
  padding: 18px 18px calc(24px + env(safe-area-inset-bottom, 0px));
  border-radius: 18px 18px 0 0; border: 1px solid #1c1c1c; background: #0a0a0a; color: #fff;
  box-shadow: 0 -12px 40px rgba(0,0,0,0.55);
}
.house-sheet-handle {
  width: 42px; height: 4px; margin: 0 auto 14px; border-radius: 99px; background: #333;
}
.house-sheet-x {
  position: absolute; top: 12px; right: 12px; appearance: none; border: 0;
  background: transparent; color: #aaa; font-size: 16px; font-weight: 700; padding: 8px;
}
.house-sheet-title {
  margin: 0 0 12px;
  font-family: "Bebas Neue", Impact, "Arial Narrow", sans-serif;
  font-size: 28px; letter-spacing: 0.06em;
}
.house-code-lead {
  margin: 0 0 12px;
  font-family: "Bebas Neue", Impact, "Arial Narrow", sans-serif;
  font-size: 22px; letter-spacing: 0.04em; color: #FEF105;
}
.house-code-list {
  margin: 0 0 16px; padding: 0 0 0 18px; color: #ddd; font-size: 15px; line-height: 1.45;
}
.house-code-list li { margin: 0 0 8px; }
.house-code-cite { margin: 0; color: #888; font-size: 13px; line-height: 1.4; }
.house-install-sub {
  margin: 0 0 16px; color: #ccc; font-size: 15px; line-height: 1.45;
}
.house-install-inapp {
  margin: 0 0 14px; padding: 10px 12px; border-radius: 10px;
  border: 1px solid #333; background: #121212; color: #ddd;
  font-size: 14px; line-height: 1.4;
}
.house-install-dismiss {
  display: block; width: 100%; text-align: center; margin: 4px 0 14px;
  padding: 10px 8px;
}
.house-install-steps-wrap { margin: 4px 0 0; }
.house-install-steps {
  margin: 8px 0 0; padding: 0 0 0 18px; color: #ccc; font-size: 14px; line-height: 1.45;
}
.house-install-steps[hidden] { display: none !important; }
.house-install-steps li { margin: 0 0 10px; }

/* 20261005-install-keeper — text link under install steps; native playback */
.house-install-watch {
  margin: 12px 0 0;
  text-align: left;
}
.house-install-watch a {
  color: #F2C94C;
  font-size: 14px;
  font-weight: 700;
  letter-spacing: 0.02em;
  text-decoration: none;
}
.house-install-watch a:active { opacity: 0.85; }

#more-monday-beat[hidden] { display: none !important; }

/* 20260930-house-wordmark-notch — House .top uses shared island/safe-area (Brothers/Events).
   Prior first-glass collapsed padding-top:4px + shrunk #brand-logo under notch. Dropped. */
#view-more .room-title { margin: 0 0 12px; font-size: clamp(26px, 7vw, 32px); }
#view-more .house-card { min-height: 92px; padding: 12px 10px; gap: 8px; }
#view-more .house-quiet { margin: 2px 0 12px; }


/* 20260925-coach-house — voices first, gold on every row, film is the content width, no REPLAY title */
#view-more #house-code-bar,
#view-more #text-leader-btn,
#view-more #house-share-btn,
#view-more #house-key-btn {
  appearance: none;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: auto;
  min-height: 0;
  min-width: 72px;
  margin: 0;
  padding: 10px 14px;
  border: 0;
  border-radius: 8px;
  background: #E30600;
  color: #fff;
  font-family: "Bebas Neue", Impact, "Arial Narrow", sans-serif;
  font-size: 16px;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  text-align: center;
  -webkit-tap-highlight-color: transparent;
}
#view-more .house-chip-line { line-height: 1.1; }
#view-more .house-cards {
  grid-template-columns: 1fr;
  margin: 0 0 12px;
}
#view-more #house-share {
  flex-direction: row;
  align-items: center;
  justify-content: space-between;
  min-height: 64px;
  gap: 12px;
}
#view-more #house-share .house-cta { align-self: center; }
#view-more #film-poster {
  width: 100%;
  max-width: 300px;
  margin: 8px auto 18px;
  aspect-ratio: 16 / 9;
}

/* 20260927-bb-canonical — SHARE CONTACT door DEAD */
#own-share { display: none !important; }

/* 20260928-room-presence — Brothers + Events material. Idle only.
   Do not glass the rooms. Do not touch smash, pop, or night-fresh. */
#view-brothers > .bros-head,
#view-brothers > .bros-head .room-title,
#view-events > .room-title {
  display: flex;
  align-items: center;
  gap: 12px;
}
#view-brothers > .bros-head .room-title::after,
#view-events > .room-title::after {
  content: "";
  flex: 1;
  height: 1px;
  background: linear-gradient(90deg, rgba(242, 201, 76, 0.75), transparent 80%);
}
.bro-row {
  border-color: #2a2418;
  background:
    linear-gradient(180deg, rgba(255, 248, 220, 0.07) 0%, transparent 42%),
    #0c0c0c;
  box-shadow: 0 10px 18px rgba(0, 0, 0, 0.38), inset 0 1px 0 rgba(255, 248, 220, 0.14);
}
.bro-row:active { transform: scale(0.985); }
.bro-row--self {
  outline: none;
  box-shadow:
    inset 3px 0 0 #F2C94C,
    0 10px 18px rgba(0, 0, 0, 0.38),
    inset 0 1px 0 rgba(255, 248, 220, 0.14);
}
.bro-face.has-photo {
  overflow: visible;
  border: 2px solid #F2C94C;
  box-shadow: none;
  filter: drop-shadow(0 3px 2px rgba(0, 0, 0, 0.55));
}
.bro-face.has-photo::after {
  content: "";
  position: absolute;
  inset: -2px;
  border-radius: 50%;
  padding: 2px;
  background: conic-gradient(
    from 0deg,
    transparent 0deg 100deg,
    rgba(242, 201, 76, 0.2) 112deg,
    rgba(255, 248, 220, 0.95) 124deg,
    #fff 128deg,
    rgba(255, 248, 220, 0.7) 134deg,
    transparent 148deg 300deg,
    rgba(255, 252, 240, 0.85) 312deg,
    #fff 318deg,
    transparent 330deg 360deg
  );
  -webkit-mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
  -webkit-mask-composite: xor;
  mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
  mask-composite: exclude;
  pointer-events: none;
  z-index: 2;
  animation: whos-rim-travel calc(var(--pulse) * 6) linear infinite;
  animation-delay: 0s;
}
#bros-table .bro-row:nth-child(2) .bro-face.has-photo::after,
#bros-table .bro-row:nth-child(3) .bro-face.has-photo::after,
#bros-table .bro-row:nth-child(4) .bro-face.has-photo::after,
#bros-table .bro-row:nth-child(n + 5) .bro-face.has-photo::after { animation-delay: 0s; }
#open-chair {
  border: 1px dashed rgba(242, 201, 76, 0.45);
  background:
    linear-gradient(180deg, rgba(255, 248, 220, 0.06), transparent 48%),
    #0c0c0c;
  box-shadow: 0 12px 22px rgba(0, 0, 0, 0.35), inset 0 1px 0 rgba(255, 248, 220, 0.12);
}
#drop-pic {
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.28),
    0 8px 0 #6e0400,
    0 16px 22px rgba(0, 0, 0, 0.35);
}
#drop-pic:active {
  transform: translateY(3px);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.18),
    0 4px 0 #6e0400,
    0 8px 14px rgba(0, 0, 0, 0.35);
}
#night-empty:not([hidden]) {
  margin: 4px 0 0;
  padding: 22px 14px;
  text-align: center;
  border: 1px solid #2a2418;
  border-radius: 14px;
  background:
    linear-gradient(180deg, rgba(255, 248, 220, 0.05), transparent 42%),
    #0c0c0c;
  box-shadow: inset 0 1px 0 rgba(255, 248, 220, 0.12);
}
#night-hero > .night-shot-img,
.night-tile > .night-shot-img {
  border-color: rgba(242, 201, 76, 0.4);
  filter: drop-shadow(0 14px 16px rgba(0, 0, 0, 0.55));
}
#night-hero::after,
.night-tile::after {
  content: "";
  position: absolute;
  left: 0;
  right: 0;
  top: 0;
  aspect-ratio: var(--shot-ar, 4 / 3); /* 20261007-events-column-true — sheen follows natural frame */
  border-radius: 12px;
  pointer-events: none;
  z-index: 2;
  background: linear-gradient(
    115deg,
    transparent 38%,
    rgba(255, 255, 255, 0.16) 50%,
    transparent 62%
  );
  background-size: 220% 100%;
  animation: none;
}
.night-tile::after {
  aspect-ratio: var(--shot-ar, 4 / 3); /* 20261007-events-column-true — sheen follows natural frame */
  border-radius: 12px;
}
.night-tile:nth-child(2)::after { animation-delay: -3s; }
@keyframes room-sheen {
  0%, 55% { background-position: 130% 0; }
  80%, 100% { background-position: -40% 0; }
}
#keeper-brief {
  white-space: pre-line;
  margin: 10px 16px 0;
  letter-spacing: 0.04em;
}
#keeper-text {
  appearance: none;
  border: 0;
  margin: 8px 16px 0;
  border-radius: 8px;
  padding: 10px 14px;
  background: #E30600;
  color: #fff;
  font-family: "Bebas Neue", Impact, "Arial Narrow", sans-serif;
  font-size: 16px;
  letter-spacing: 0.1em;
}
#keeper-text[hidden] { display: none !important; }

#tb-look {
  position: fixed;
  left: 12px;
  right: 12px;
  bottom: calc(var(--dock, 72px) + 10px);
  z-index: 70;
  margin: 0;
  padding: 8px 10px;
  border-radius: 10px;
  background: #1a1408;
  color: #F2C94C;
  font-size: 11px;
  letter-spacing: 0.08em;
  text-align: center;
  pointer-events: none;
}
#tb-look,
#tb-look[hidden] { display: none !important; }

/* 20260930-home-key-glass — install sheet + liquid glass */
.home-key-wow {
  position: fixed; inset: 0; z-index: 60;
  display: flex; align-items: center; justify-content: center;
  padding: 24px 18px calc(24px + env(safe-area-inset-bottom, 0px));
}
.home-key-wow[hidden] { display: none !important; }
.home-key-wow-backdrop {
  position: absolute; inset: 0;
  background: rgba(0, 0, 0, 0.88);
}
.home-key-wow-panel {
  position: relative; z-index: 1;
  width: min(100%, 440px);
  max-height: min(92vh, 720px);
  overflow: auto;
  padding: 28px 22px 22px;
  border-radius: 18px;
  color: #fff;
  text-align: center;
}
.home-key-wow-title {
  margin: 0 0 14px;
  font-family: "Bebas Neue", Impact, "Arial Narrow", sans-serif;
  font-size: clamp(28px, 8vw, 36px);
  letter-spacing: 0.06em;
  line-height: 1.05;
  color: #fff;
}
.home-key-wow-line { display: block; }
.home-key-wow-sub {
  margin: 0 0 18px;
  color: #ccc;
  font-size: 15px;
  line-height: 1.45;
}
.home-key-wow-inapp {
  margin: 0 0 14px;
  padding: 10px 12px;
  border-radius: 10px;
  border: 1px solid #333;
  background: #121212;
  color: #ddd;
  font-size: 14px;
  line-height: 1.4;
  text-align: left;
}
#house-key-sheet .house-sheet-title { letter-spacing: 0.04em; }

/* 20260930-home-key-glass — shared liquid glass language (wow + forever door ONLY) */
.tb-liquid-glass {
  overflow: hidden;
  isolation: isolate;
  border: 1px solid rgba(255, 255, 255, 0.18);
  background: linear-gradient(165deg, rgba(28, 28, 28, 0.72) 0%, rgba(8, 8, 8, 0.88) 55%, rgba(0, 0, 0, 0.92) 100%);
  -webkit-backdrop-filter: blur(22px) saturate(1.4);
  backdrop-filter: blur(22px) saturate(1.4);
}
@supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
  .tb-liquid-glass {
    background: #0c0c0c;
  }
}
.tb-liquid-glass::before {
  content: "";
  position: absolute;
  inset: 0;
  border-radius: inherit;
  background: linear-gradient(115deg, transparent 20%, rgba(255, 255, 255, 0.22) 48%, transparent 70%);
  transform: translateX(-80%);
  animation: tb-liquid-glass-sheen calc(var(--pulse) * 9) ease-in-out infinite;
  animation-delay: 0s;
  pointer-events: none;
  z-index: 0;
}
.tb-liquid-glass > * {
  position: relative;
  z-index: 1;
}
@keyframes tb-liquid-glass-sheen {
  0%, 55% { transform: translateX(-80%); opacity: 0; }
  70% { opacity: 0.45; }
  100% { transform: translateX(80%); opacity: 0; }
}
@keyframes tb-liquid-glass-enter {
  from { opacity: 0; transform: translateY(14px); }
  to { opacity: 1; transform: translateY(0); }
}
@keyframes tb-liquid-glass-exit {
  from { opacity: 1; transform: translateY(0); }
  to { opacity: 0; transform: translateY(14px); }
}
@keyframes tb-liquid-glass-backdrop-in {
  from { opacity: 0; }
  to { opacity: 1; }
}
@keyframes tb-liquid-glass-backdrop-out {
  from { opacity: 1; }
  to { opacity: 0; }
}
.home-key-wow-panel.tb-liquid-glass {
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.14),
    0 18px 48px rgba(0, 0, 0, 0.65);
  animation: tb-liquid-glass-enter 320ms cubic-bezier(0.22, 1, 0.36, 1) both;
}
#house-key-sheet .house-sheet-panel.tb-liquid-glass {
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.14),
    0 -12px 40px rgba(0, 0, 0, 0.55);
  animation: tb-liquid-glass-enter 320ms cubic-bezier(0.22, 1, 0.36, 1) both;
}
.home-key-wow:not([hidden]) .home-key-wow-backdrop,
#house-key-sheet:not([hidden]) .house-sheet-backdrop {
  animation: tb-liquid-glass-backdrop-in 250ms ease both;
}
/* Exit helper (JS may add .is-exiting before hide; ≤280ms, no bounce) */
.home-key-wow.is-exiting .home-key-wow-panel.tb-liquid-glass,
#house-key-sheet.is-exiting .house-sheet-panel.tb-liquid-glass {
  animation: tb-liquid-glass-exit 260ms cubic-bezier(0.22, 1, 0.36, 1) both;
}
.home-key-wow.is-exiting .home-key-wow-backdrop,
#house-key-sheet.is-exiting .house-sheet-backdrop {
  animation: tb-liquid-glass-backdrop-out 240ms ease both;
}
@media (prefers-reduced-motion: reduce) {
  .tb-liquid-glass::before {
    animation: none !important;
    opacity: 0;
  }
  .home-key-wow-panel.tb-liquid-glass,
  #house-key-sheet .house-sheet-panel.tb-liquid-glass,
  .home-key-wow.is-exiting .home-key-wow-panel.tb-liquid-glass,
  #house-key-sheet.is-exiting .house-sheet-panel.tb-liquid-glass {
    animation: tb-liquid-glass-enter-fade 300ms ease both;
  }
  @keyframes tb-liquid-glass-enter-fade {
    from { opacity: 0; transform: none; }
    to { opacity: 1; transform: none; }
  }
  .home-key-wow:not([hidden]) .home-key-wow-backdrop,
  #house-key-sheet:not([hidden]) .house-sheet-backdrop,
  .home-key-wow.is-exiting .home-key-wow-backdrop,
  #house-key-sheet.is-exiting .house-sheet-backdrop {
    animation: none;
  }
}

/* 20260930-events-season — THIS SEASON stage (Events header · CSS-first) */
.season-stage {
  position: relative;
  margin: 4px 0 14px;
  padding: 10px 4px 6px;
  overflow: hidden;
}
.season-stage-title {
  margin: 0 0 12px;
  text-align: center;
  font-family: "Bebas Neue", Impact, "Arial Narrow", sans-serif;
  font-size: clamp(18px, 5vw, 22px);
  letter-spacing: 0.16em;
  color: var(--gold, #F2C94C);
  font-weight: 400;
}
.season-path {
  position: relative;
  min-height: 112px;
  padding: 0 6px 4px;
}
.season-bolt {
  position: absolute;
  left: 18%;
  right: 18%;
  top: 38px;
  height: 28px;
  pointer-events: none;
  z-index: 0;
}
/* Quiet full rail (meeting→following stays thin/dim — no gold fill) */
.season-bolt-line--quiet {
  display: block;
  position: absolute;
  left: 0;
  right: 0;
  top: 50%;
  height: 1.5px;
  transform: translateY(-50%);
  background:
    linear-gradient(90deg,
      transparent 0%,
      rgba(242, 201, 76, 0.12) 8%,
      rgba(242, 201, 76, 0.22) 50%,
      rgba(242, 201, 76, 0.14) 92%,
      transparent 100%);
  box-shadow: none;
  opacity: 0.38;
  clip-path: polygon(
    0% 45%, 8% 40%, 14% 55%, 22% 35%, 30% 60%, 38% 42%,
    48% 58%, 56% 38%, 64% 55%, 72% 40%, 80% 58%, 88% 42%, 100% 50%,
    100% 55%, 88% 47%, 80% 63%, 72% 45%, 64% 60%, 56% 43%, 48% 63%,
    38% 47%, 30% 65%, 22% 40%, 14% 60%, 8% 45%, 0% 50%
  );
}
.season-bolt-hot {
  position: absolute;
  left: 0;
  top: 0;
  bottom: 0;
  width: var(--path-hot-end, 50%);
  overflow: hidden;
  pointer-events: none;
  z-index: 1;
}
.season-bolt-line--hot {
  display: block;
  position: absolute;
  left: 0;
  right: 0;
  top: 50%;
  height: 9px; /* FIRE2 — obvious gold PATH, not hairline */
  transform: translateY(-50%);
  background-image:
    linear-gradient(90deg,
      transparent 0%,
      rgba(242, 201, 76, 0.25) 8%,
      rgba(242, 201, 76, 0.85) 28%,
      rgba(255, 248, 220, 1) 42%,
      rgba(242, 201, 76, 0.9) 58%,
      rgba(242, 201, 76, 0.45) 78%,
      transparent 100%);
  background-size: 220% 100%;
  background-position: 0% 50%;
  box-shadow:
    0 0 14px rgba(242, 201, 76, 0.55),
    0 0 28px rgba(242, 201, 76, 0.32),
    0 0 44px rgba(242, 201, 76, 0.16);
  opacity: 1;
  -webkit-mask-image: linear-gradient(90deg, #000 0%, #000 var(--path-fill, 40%), transparent var(--path-fill, 40%));
  mask-image: linear-gradient(90deg, #000 0%, #000 var(--path-fill, 40%), transparent var(--path-fill, 40%));
  clip-path: polygon(
    0% 45%, 10% 40%, 18% 55%, 28% 35%, 38% 60%, 48% 42%,
    58% 58%, 68% 38%, 78% 55%, 88% 40%, 100% 50%,
    100% 55%, 88% 45%, 78% 60%, 68% 43%, 58% 63%, 48% 47%,
    38% 65%, 28% 40%, 18% 60%, 10% 45%, 0% 50%
  );
}
.season-bolt-line {
  display: block;
  position: absolute;
  left: 0;
  right: 0;
  top: 50%;
  height: 2px;
  transform: translateY(-50%);
}
.season-flash {
  position: absolute;
  inset: -8px -4%;
  border-radius: 40%;
  background: radial-gradient(ellipse at center, rgba(255, 248, 220, 0.28) 0%, transparent 68%);
  opacity: 0;
  pointer-events: none;
}
.season-mote {
  position: absolute;
  top: 50%;
  left: calc(6% + var(--i) * 18%);
  width: 5px;
  height: 5px;
  margin-top: -2.5px;
  border-radius: 50%;
  background: #fff8dc;
  box-shadow: 0 0 8px rgba(242, 201, 76, 0.75), 0 0 14px rgba(242, 201, 76, 0.35);
  opacity: 0;
  transform: translateY(0) scale(0.4);
}
.season-bolt-hot .season-mote--live {
  left: calc(10% + var(--i) * 55%);
}
.season-nodes {
  position: relative;
  z-index: 1;
  /* 20261007-season-plane-glow-hold — widen TODAY→meeting; far FOLLOWING sits small at end */
  display: grid;
  grid-template-columns: minmax(70px, 0.9fr) minmax(96px, 1.55fr) minmax(56px, 0.7fr);
  align-items: start;
  gap: 4px;
  padding: 0 1%;
}
.season-node--today { justify-self: start; }
.season-node--live { justify-self: end; } /* sit near hot-end (~64%) */
.season-node--next { justify-self: end; }
.season-node {
  position: relative;
  flex: 1 1 0;
  width: auto;
  max-width: 120px;
  display: flex;
  flex-direction: column;
  align-items: center;
  text-align: center;
  gap: 4px;
  cursor: pointer;
  min-height: 44px;
  -webkit-tap-highlight-color: transparent;
}
/* 20261007-season-holding-flight — SIZE LADDER: TODAY biggest hero */
.season-node--today {
  opacity: 1;
}
.season-node--today .season-ring {
  width: 28px;
  height: 28px;
  border-width: 2.5px;
  border-color: rgba(242, 201, 76, 1);
  box-shadow:
    0 0 14px rgba(242, 201, 76, 0.55),
    0 0 28px rgba(242, 201, 76, 0.22);
}
.season-node--today .season-date {
  font-size: clamp(24px, 6.8vw, 32px);
  font-weight: 700;
  color: #fff8dc;
  text-shadow: 0 0 14px rgba(242, 201, 76, 0.55);
}
.season-node--today .season-ring::after {
  inset: -9px;
  opacity: 0.7;
  border-color: rgba(242, 201, 76, 0.55);
}
.season-node--today .season-chip--today {
  border-color: rgba(242, 201, 76, 0.9);
  background: rgba(242, 201, 76, 0.22);
  color: #fff8dc;
  font-size: 10px;
  letter-spacing: 0.16em;
}
/* 20261007-season-holding-flight — far NEXT UP smallest tertiary (KEEP scale 0.78) */
.season-node--next {
  transform: scale(0.78);
  transform-origin: center top;
}
.season-node--next .season-ring {
  width: 12px;
  height: 12px;
  border-width: 1.25px;
  background: radial-gradient(circle at 40% 35%, #fff8dc 0%, #c9a52e 50%, #6a5410 100%);
  box-shadow: 0 0 4px rgba(242, 201, 76, 0.18);
}
.season-node--next .season-date {
  font-size: clamp(11px, 3.2vw, 15px);
}
.season-node--next .season-chip--next {
  font-size: 8px;
  letter-spacing: 0.12em;
  padding: 2px 6px;
}
.season-node--next .season-ring::after {
  inset: -4px;
  opacity: 0.28;
}
/* 20261007-season-ladder-nov-shrink — NEXT MEETING clear step below TODAY (size alone) */
.season-node--live .season-ring {
  width: 15px;
  height: 15px;
  border-width: 1.75px;
}
.season-node--live .season-date {
  font-size: clamp(14px, 4vw, 18px);
}
.season-node--live .season-ring::after {
  inset: -5px;
}
.season-node--live .season-quiet {
  font-size: 10px;
  opacity: 0.85;
}
.season-chip--today {
  border-color: rgba(242, 201, 76, 0.75);
  background: rgba(242, 201, 76, 0.16);
  color: #fff8dc;
}
.season-chip--today-wear {
  border-color: rgba(242, 201, 76, 0.8);
  background: rgba(242, 201, 76, 0.2);
  color: #fff8dc;
  margin-bottom: -2px;
}
.season-chip--today-wear[hidden] { display: none !important; }
.season-node[hidden] { display: none !important; }
.season-stage--marks-day .season-nodes {
  justify-content: space-around;
}
.season-stage--marks-day .season-node--live {
  max-width: 140px;
}
.season-month {
  font-size: 10px;
  letter-spacing: 0.18em;
  color: var(--muted, #9a9a9a);
  font-weight: 600;
}
.season-ring {
  position: relative;
  width: 22px;
  height: 22px;
  margin: 2px 0 2px;
  border-radius: 50%;
  border: 2px solid rgba(242, 201, 76, 0.55);
  background: radial-gradient(circle at 40% 35%, #fff8dc 0%, #F2C94C 45%, #8a6a12 100%);
  box-shadow: 0 0 8px rgba(242, 201, 76, 0.22);
}
.season-ring::after {
  content: "";
  position: absolute;
  inset: -7px;
  border-radius: 50%;
  border: 1.5px solid rgba(242, 201, 76, 0.35);
  opacity: 0.55;
  pointer-events: none;
}
.season-date {
  font-family: "Bebas Neue", Impact, "Arial Narrow", sans-serif;
  font-size: clamp(22px, 6.2vw, 28px);
  letter-spacing: 0.04em;
  color: #f4f4f4;
  line-height: 1;
}
.season-quiet {
  font-size: 11px;
  color: var(--muted, #9a9a9a);
  letter-spacing: 0.02em;
}
.season-chip {
  margin-top: 2px;
  font-size: 9px;
  letter-spacing: 0.14em;
  font-weight: 700;
  padding: 3px 8px;
  border-radius: 999px;
  border: 1px solid rgba(242, 201, 76, 0.4);
  color: var(--gold, #F2C94C);
  background: rgba(242, 201, 76, 0.08);
}
.season-node--live {
  opacity: 1;
}
.season-node--live .season-date {
  color: #fff;
  text-shadow: 0 0 12px rgba(242, 201, 76, 0.35);
}
.season-node--live .season-ring {
  border-color: rgba(242, 201, 76, 0.95);
  box-shadow: 0 0 12px rgba(242, 201, 76, 0.4);
}
.season-node--live .season-ring::after {
  /* mid/week: calm halo — electro ONLY via .season-node--heartbeat (day-of/<24h · finite) */
  opacity: 0.55;
}
.season-node--live.season-node--day .season-ring {
  /* day-of resting presence (after heartbeat sleeps) */
  border-color: rgba(242, 201, 76, 1);
  box-shadow:
    0 0 16px rgba(242, 201, 76, 0.55),
    0 0 32px rgba(242, 201, 76, 0.22);
}
.season-node--live.season-node--day .season-ring::after {
  opacity: 0.72;
  border-color: rgba(242, 201, 76, 0.55);
}
/* Soft gold electro heartbeat — day-of / <24h ONLY · short cycle · sleeps after paint */
.season-node--live.season-node--heartbeat .season-ring::after {
  animation: season-live-heartbeat 1.2s ease-in-out 4 both;
  animation-delay: 0s;
}
.season-node--live.season-node--heartbeat .season-ring {
  animation: season-live-heartbeat-core 1.2s ease-in-out 4 both;
  animation-delay: 0s;
}
.season-chip--live {
  border-color: rgba(242, 201, 76, 0.7);
  background: rgba(242, 201, 76, 0.14);
  color: #fff8dc;
}
.season-node--next.season-node--dim {
  opacity: 0.48;
  filter: saturate(0.75);
}
.season-node--next.season-node--dim .season-date {
  color: #c8c8c8;
  text-shadow: none;
}
.season-node--next.season-node--near {
  opacity: 0.92;
  filter: none;
}
.season-node--next.season-node--near .season-date {
  color: #fff;
  text-shadow: 0 0 10px rgba(242, 201, 76, 0.28);
}
.season-node--next.season-node--near .season-ring {
  border-color: rgba(242, 201, 76, 0.8);
  box-shadow: 0 0 10px rgba(242, 201, 76, 0.32);
}
.season-chip--next {
  opacity: 0.9;
}

/* Soft gold micro electro · LIVE ring only · 4 beats then sleep */
@keyframes season-live-heartbeat {
  0%, 100% {
    transform: scale(1);
    opacity: 0.5;
    border-color: rgba(242, 201, 76, 0.35);
  }
  18% {
    transform: scale(1.28);
    opacity: 0.88;
    border-color: rgba(242, 201, 76, 0.75);
    box-shadow: 0 0 12px rgba(242, 201, 76, 0.4);
  }
  36% {
    transform: scale(1.06);
    opacity: 0.58;
  }
  52% {
    transform: scale(1.22);
    opacity: 0.8;
    border-color: rgba(242, 201, 76, 0.68);
  }
  70% {
    transform: scale(1);
    opacity: 0.55;
  }
}
@keyframes season-live-heartbeat-core {
  0%, 100% {
    filter: brightness(1);
    box-shadow:
      0 0 14px rgba(242, 201, 76, 0.42),
      0 0 26px rgba(242, 201, 76, 0.16);
  }
  18% {
    filter: brightness(1.18);
    box-shadow:
      0 0 18px rgba(242, 201, 76, 0.62),
      0 0 34px rgba(242, 201, 76, 0.28);
  }
  36% {
    filter: brightness(1.04);
  }
  52% {
    filter: brightness(1.14);
    box-shadow:
      0 0 16px rgba(242, 201, 76, 0.55),
      0 0 30px rgba(242, 201, 76, 0.22);
  }
  70% {
    filter: brightness(1);
  }
}

/* One-time season strike — path travel + motes + soft flash */
.season-stage--strike .season-bolt-line--hot {
  animation: season-path-travel 1.15s cubic-bezier(0.22, 0.61, 0.2, 1) both;
}
.season-stage--strike .season-flash {
  animation: season-soft-flash 0.9s ease-out both;
}
.season-stage--strike .season-mote {
  animation: season-mote-ride 1.05s ease-out both;
  animation-delay: calc(var(--i) * 55ms);
}

@keyframes season-path-travel {
  0% {
    clip-path: inset(0 100% 0 0);
    opacity: 0.2;
    filter: brightness(1.4);
  }
  35% {
    opacity: 1;
    filter: brightness(1.55);
  }
  100% {
    clip-path: inset(0 0 0 0);
    opacity: 0.85;
    filter: brightness(1);
  }
}
@keyframes season-soft-flash {
  0% { opacity: 0; }
  25% { opacity: 0.55; }
  100% { opacity: 0; }
}
@keyframes season-mote-ride {
  0% {
    opacity: 0;
    transform: translate(0, 6px) scale(0.3);
  }
  25% {
    opacity: 0.95;
    transform: translate(4px, -4px) scale(1);
  }
  100% {
    opacity: 0;
    transform: translate(18px, -10px) scale(0.2);
  }
}

@media (prefers-reduced-motion: reduce) {
  .season-node--live .season-ring::after,
  .season-node--live.season-node--day .season-ring::after,
  .season-node--live.season-node--heartbeat .season-ring::after,
  .season-node--live.season-node--heartbeat .season-ring {
    animation: none !important;
    opacity: 0.55;
    filter: none;
  }
  .season-stage--strike .season-bolt-line--hot,
  .season-stage--strike .season-flash,
  .season-stage--strike .season-mote {
    animation: none !important;
  }
  .season-mote { display: none; }
  .season-flash { display: none; }
  .season-bolt-line--hot {
    opacity: 0.75;
    box-shadow: 0 0 6px rgba(242, 201, 76, 0.22);
  }
  .season-bolt-line--quiet {
    opacity: 0.32;
  }
}

/* 20260930-path-breath — gold bolt intensity · soft line · whisper · sleep after paint */
.season-soft-line {
  margin: 10px 0 0;
  text-align: center;
  font-size: 10px;
  letter-spacing: 0.16em;
  font-weight: 600;
  color: rgba(242, 201, 76, 0.72);
  text-transform: uppercase;
  line-height: 1.35;
  pointer-events: none;
}
.season-whisper {
  display: block;
  margin: 4px auto 0;
  text-align: center;
  font-size: 10px;
  letter-spacing: 0.08em;
  font-weight: 500;
  color: rgba(242, 201, 76, 0.42);
  line-height: 1.2;
  pointer-events: none;
  user-select: none;
}
.season-whisper[hidden] { display: none !important; }

/* Resting motes — sparse along path; denser/brighter toward LIVE (low --i) */
.season-mote--rest {
  opacity: calc(0.42 - (var(--i) * 0.045));
  transform: translateY(0) scale(calc(0.85 - (var(--i) * 0.05)));
  box-shadow: 0 0 calc(3px + (7 - var(--i)) * 0.35px) rgba(242, 201, 76, calc(0.5 - var(--i) * 0.04));
}
.season-mote--live {
  left: calc(6% + var(--i) * 9%);
  width: 3.5px;
  height: 3.5px;
  margin-top: -1.75px;
  opacity: 0.55;
  transform: translateY(0) scale(1);
  background: #fff8dc;
  box-shadow:
    0 0 5px rgba(242, 201, 76, 0.65),
    0 0 10px rgba(242, 201, 76, 0.28);
}

/* Path brightens as night nears (one-shot class · same spirit as --near) */
.season-stage--path-near .season-bolt-line--hot {
  opacity: 1;
  background:
    linear-gradient(90deg,
      transparent 0%,
      rgba(242, 201, 76, 0.28) 6%,
      rgba(242, 201, 76, 0.95) 22%,
      rgba(255, 248, 220, 1) 38%,
      rgba(242, 201, 76, 0.85) 55%,
      rgba(242, 201, 76, 1) 72%,
      rgba(242, 201, 76, 0.35) 90%,
      transparent 100%);
  box-shadow:
    0 0 10px rgba(242, 201, 76, 0.45),
    0 0 22px rgba(242, 201, 76, 0.28),
    0 0 36px rgba(242, 201, 76, 0.12);
  filter: brightness(1.18);
}
.season-stage--path-near .season-mote--rest {
  opacity: calc(0.55 - (var(--i) * 0.04));
  box-shadow: 0 0 calc(4px + (7 - var(--i)) * 0.45px) rgba(242, 201, 76, calc(0.62 - var(--i) * 0.04));
}
.season-stage--path-near .season-mote--live {
  opacity: 0.78;
  box-shadow:
    0 0 7px rgba(242, 201, 76, 0.78),
    0 0 14px rgba(242, 201, 76, 0.35);
}
.season-stage--path-near .season-soft-line {
  color: rgba(242, 201, 76, 0.88);
}

/* One-shot breath paint — settles; no forever loop */
.season-stage--breath-paint .season-bolt-line--hot {
  animation: season-path-breath-in 1.2s ease-out both;
}
.season-stage--breath-paint .season-mote--live {
  animation: season-mote-gather 1.05s ease-out both;
  animation-delay: calc(var(--i) * 40ms);
}
@keyframes season-path-breath-in {
  0% {
    opacity: 0.45;
    filter: brightness(0.92);
  }
  35% {
    opacity: 1;
    filter: brightness(1.4);
  }
  100% {
    opacity: 0.92;
    filter: brightness(1.12);
  }
}
@keyframes season-mote-gather {
  0% {
    opacity: 0.15;
    transform: translate(8px, 2px) scale(0.4);
  }
  40% {
    opacity: 0.9;
    transform: translate(0, 0) scale(1.15);
  }
  100% {
    opacity: 0.65;
    transform: translate(0, 0) scale(1);
  }
}

@media (prefers-reduced-motion: reduce) {
  .season-stage--breath-paint .season-bolt-line--hot,
  .season-stage--breath-paint .season-mote--live {
    animation: none !important;
  }
  .season-mote--rest,
  .season-mote--live {
    display: none;
  }
  .season-stage--path-near .season-bolt-line--hot {
    opacity: 0.92;
    filter: none;
    box-shadow:
      0 0 8px rgba(242, 201, 76, 0.32),
      0 0 14px rgba(242, 201, 76, 0.18);
  }
  .season-soft-line {
    color: rgba(242, 201, 76, 0.78);
  }
}

/* 20261002-events-hot-loud — translating gold PATH on hot segment ONLY. Mid = soft presence (not siren). Nov quiet. */
.season-bolt-hot .season-bolt-line--hot {
  animation: season-hot-sweep calc(var(--pulse) * 2) linear infinite;
  animation-delay: 0s;
}
@keyframes season-hot-sweep {
  /* highlight TRAVELS along bolt via background-position — not brightness flicker */
  0% { background-position: 100% 50%; }
  100% { background-position: -20% 50%; }
}
.season-bolt-hot .season-mote--live {
  animation: season-mote-loop calc(var(--pulse) * 2) ease-in-out infinite;
  animation-delay: 0s;
  width: 7px;
  height: 7px;
  margin-top: -3.5px;
  opacity: 0.85;
  box-shadow:
    0 0 10px rgba(242, 201, 76, 0.95),
    0 0 20px rgba(242, 201, 76, 0.5),
    0 0 32px rgba(242, 201, 76, 0.22);
}
.season-bolt-hot .season-mote--rest {
  animation: season-mote-loop-soft calc(var(--pulse) * 3) ease-in-out infinite;
  animation-delay: 0s;
  width: 4px;
  height: 4px;
  margin-top: -2px;
}
@keyframes season-mote-loop {
  0% {
    transform: translateX(0) translateY(2px) scale(0.7);
    opacity: 0.25;
  }
  30% {
    transform: translateX(14px) translateY(-3px) scale(1.35);
    opacity: 1;
  }
  65% {
    transform: translateX(28px) translateY(1px) scale(1.05);
    opacity: 0.8;
  }
  100% {
    transform: translateX(42px) translateY(0) scale(0.7);
    opacity: 0.15;
  }
}
@keyframes season-mote-loop-soft {
  0%, 100% { opacity: 0.2; transform: translateX(0) scale(0.8); }
  50% { opacity: 0.55; transform: translateX(12px) scale(1.1); }
}
/* Mid-week: soft gold presence — thicker path + motes, slower quieter sweep (not anxiety siren) */
.season-stage--ramp-mid .season-bolt-hot .season-bolt-line--hot {
  animation-duration: calc(var(--pulse) * 4);
  opacity: 0.78;
  filter: brightness(0.98);
  box-shadow:
    0 0 10px rgba(242, 201, 76, 0.32),
    0 0 20px rgba(242, 201, 76, 0.14);
}
.season-stage--ramp-mid .season-bolt-hot .season-mote--live {
  animation-duration: calc(var(--pulse) * 3);
  width: 5px;
  height: 5px;
  margin-top: -2.5px;
  opacity: 0.45;
  box-shadow: 0 0 8px rgba(242, 201, 76, 0.55);
}
.season-stage--ramp-week .season-bolt-hot .season-bolt-line--hot {
  animation-duration: calc(var(--pulse) * 2);
}
.season-stage--ramp-day .season-bolt-hot .season-bolt-line--hot {
  animation-duration: calc(var(--pulse) * 2);
}
/* 20261005-house-ribbons-heavy — mid-week infinite hot-sweep SLEEP. Path sits still (week/day ramp KEEP).
   Breath/strike one-shots below still play once. */
.season-stage--ramp-mid:not(.season-stage--breath-paint):not(.season-stage--strike) .season-bolt-hot .season-bolt-line--hot {
  animation: none;
  background-position: 40% 50%;
}
.season-stage--ramp-mid:not(.season-stage--breath-paint):not(.season-stage--strike) .season-bolt-hot .season-mote--live,
.season-stage--ramp-mid:not(.season-stage--breath-paint):not(.season-stage--strike) .season-bolt-hot .season-mote--rest {
  animation: none;
}
/* Breath/strike one-shots still override while class present; loop resumes after */
.season-stage--breath-paint .season-bolt-hot .season-bolt-line--hot,
.season-stage--strike .season-bolt-hot .season-bolt-line--hot {
  animation: season-path-breath-in 1.2s ease-out both;
}
.season-stage--breath-paint .season-bolt-hot .season-mote--live,
.season-stage--strike .season-bolt-hot .season-mote--live {
  animation: season-mote-gather 1.05s ease-out both;
  animation-delay: calc(var(--i) * 40ms);
}
@media (prefers-reduced-motion: reduce) {
  .season-bolt-hot .season-bolt-line--hot {
    animation: none !important;
    filter: none !important;
    background-position: 40% 50% !important;
    opacity: 0.95;
    height: 9px;
    box-shadow:
      0 0 14px rgba(242, 201, 76, 0.45),
      0 0 26px rgba(242, 201, 76, 0.24);
  }
  .season-bolt-hot .season-mote--live,
  .season-bolt-hot .season-mote--rest {
    animation: none !important;
    display: none;
  }
}

/* 20261002-events-path-three-marks — proximity stages · electro day-of/<24h only */
.season-stage--ramp-mid .season-bolt-line--hot {
  opacity: 0.72;
  filter: brightness(0.95);
  box-shadow:
    0 0 5px rgba(242, 201, 76, 0.2),
    0 0 10px rgba(242, 201, 76, 0.1);
}
.season-stage--ramp-mid .season-node--live .season-ring {
  box-shadow: 0 0 8px rgba(242, 201, 76, 0.22);
}
.season-stage--ramp-mid .season-mote--live {
  opacity: 0.28;
}

/* 20261002-events-path-three-marks — week presence amp (fill+halo+motes · NO continuous electro) */
.season-stage--ramp-week .season-bolt-line--hot {
  opacity: 1;
  filter: brightness(1.22);
  box-shadow:
    0 0 12px rgba(242, 201, 76, 0.48),
    0 0 26px rgba(242, 201, 76, 0.26),
    0 0 40px rgba(242, 201, 76, 0.1);
}
.season-stage--ramp-week .season-node--live .season-ring {
  border-color: rgba(242, 201, 76, 1);
  box-shadow:
    0 0 16px rgba(242, 201, 76, 0.52),
    0 0 30px rgba(242, 201, 76, 0.24),
    0 0 44px rgba(242, 201, 76, 0.1);
}
.season-stage--ramp-week .season-node--live .season-ring::after {
  opacity: 0.72;
  border-color: rgba(242, 201, 76, 0.55);
  /* static halo only — no animation mid/week */
  animation: none;
}
.season-stage--ramp-week .season-node--live .season-date {
  text-shadow: 0 0 18px rgba(242, 201, 76, 0.55);
}
/* denser / brighter particles near LIVE only (low --i) */
.season-stage--ramp-week .season-mote--live {
  opacity: calc(0.92 - (var(--i) * 0.16));
  width: 4px;
  height: 4px;
  margin-top: -2px;
  box-shadow:
    0 0 9px rgba(242, 201, 76, 0.92),
    0 0 18px rgba(242, 201, 76, 0.45),
    0 0 28px rgba(242, 201, 76, 0.18);
}
.season-stage--ramp-week .season-mote--rest {
  opacity: calc(0.32 - (var(--i) * 0.025));
  box-shadow: 0 0 calc(4px + (7 - var(--i)) * 0.5px) rgba(242, 201, 76, calc(0.55 - var(--i) * 0.04));
}

.season-stage--ramp-day .season-bolt-line--hot {
  opacity: 1;
  filter: brightness(1.32);
  box-shadow:
    0 0 14px rgba(242, 201, 76, 0.58),
    0 0 32px rgba(242, 201, 76, 0.34),
    0 0 48px rgba(242, 201, 76, 0.14);
}
.season-stage--ramp-day .season-mote--live {
  opacity: calc(0.95 - (var(--i) * 0.1));
  width: 4.5px;
  height: 4.5px;
  margin-top: -2.25px;
  box-shadow:
    0 0 10px rgba(242, 201, 76, 0.95),
    0 0 20px rgba(242, 201, 76, 0.5);
}
.season-stage--ramp-day .season-node--live .season-quiet {
  color: #fff8dc;
  letter-spacing: 0.06em;
  font-weight: 600;
}

.season-dayof-strip {
  display: flex;
  align-items: center;
  justify-content: center;
  margin: 10px 8px 0;
  padding: 8px 14px;
  border-radius: 999px;
  font-size: 12px;
  font-weight: 800;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: #0a0a0a;
  background: linear-gradient(90deg, rgba(242, 201, 76, 0.95) 0%, rgba(242, 201, 76, 0.55) 55%, rgba(20, 20, 20, 0.85) 100%);
  border: 1px solid rgba(242, 201, 76, 0.65);
  box-shadow: 0 0 14px rgba(242, 201, 76, 0.22);
  pointer-events: none;
  user-select: none;
}
.season-dayof-strip[hidden] { display: none !important; }

.season-node--cooled {
  opacity: 0.55;
  filter: saturate(0.7);
}
.season-node--cooled .season-chip--live {
  opacity: 0.7;
}
.season-node--cooled .season-ring::after {
  animation: none !important;
  opacity: 0.35;
}
.season-stage--ramp-cool .season-node--next.season-node--near {
  opacity: 0.9;
}

@media (prefers-reduced-motion: reduce) {
  .season-bolt-line {
    -webkit-mask-image: none;
    mask-image: none;
    opacity: 0.85;
  }
  .season-dayof-strip {
    box-shadow: none;
  }
}

/* 20260930-skill-lend — Host Skill coverage + quiet nudge toast */
.skill-coverage {
  margin: 16px 0 18px;
  padding: 14px 14px 12px;
  border: 1px solid rgba(255,255,255,0.22);
  border-radius: 16px;
  background: rgba(0,0,0,0.35);
}
.skill-coverage[hidden] { display: none !important; }
.skill-coverage-title {
  margin: 0 0 10px;
  font-family: "LPF Bebas", "Bebas Neue", Impact, sans-serif;
  letter-spacing: 0.06em;
  font-size: 22px;
}
.skill-coverage-kicker {
  margin: 10px 0 6px;
  font-family: "LPF Bebas", "Bebas Neue", Impact, sans-serif;
  color: var(--gold, #F4E409);
  letter-spacing: 0.08em;
  font-size: 14px;
}
.skill-coverage-list {
  list-style: none;
  margin: 0;
  padding: 0;
  display: grid;
  gap: 4px;
}
.skill-coverage-list li {
  font-size: 14px;
  opacity: 0.92;
}
.skill-lend-toast {
  position: fixed;
  left: 50%;
  bottom: 96px;
  transform: translateX(-50%) translateY(8px);
  z-index: 80;
  width: min(360px, calc(100vw - 28px));
  padding: 14px 40px 14px 16px;
  border-radius: 16px;
  border: 1px solid rgba(255,255,255,0.35);
  background: rgba(0,0,0,0.92);
  color: #fff;
  box-shadow: 0 12px 40px rgba(0,0,0,0.45);
  cursor: pointer;
}
.skill-lend-toast.ask-quiet-visible {
  transform: translateX(-50%) translateY(0);
  opacity: 1;
}
.skill-lend-toast-kicker {
  display: block;
  font-family: "LPF Bebas", "Bebas Neue", Impact, sans-serif;
  color: var(--gold, #F4E409);
  letter-spacing: 0.08em;
  font-size: 12px;
  margin-bottom: 4px;
}
.skill-lend-toast-q {
  display: block;
  font-size: 15px;
  font-weight: 600;
  line-height: 1.3;
}
.skill-lend-toast-x {
  position: absolute;
  top: 8px;
  right: 8px;
  appearance: none;
  border: 0;
  background: transparent;
  color: rgba(255,255,255,0.7);
  font-size: 14px;
  padding: 6px 8px;
}


/* 20261002-events-path-three-marks · 20261007-season-plane-glow-hold stretch hot-end */
.season-stage {
  --path-fill: 40%;
  --path-hot-end: 64%;
}
.season-node--wears-today .season-date {
  color: #fff8dc;
  text-shadow: 0 0 14px rgba(242, 201, 76, 0.5);
}
.season-stage--ramp-week .season-node--next.season-node--dim .season-ring,
.season-stage--ramp-mid .season-node--next.season-node--dim .season-ring,
.season-stage--ramp-day .season-node--next.season-node--dim .season-ring {
  box-shadow: none;
  border-color: rgba(242, 201, 76, 0.28);
}
@media (prefers-reduced-motion: reduce) {
  .season-bolt-line--hot {
    opacity: 0.85;
    filter: none;
  }
  .season-bolt-line--quiet {
    opacity: 0.32;
  }
}



/* 20261003-thunder-name — one-shot bolt brighten. tbBoltFloat stays calc(var(--pulse) * 3). */
/* 20261006-fab-motion-safe — also one-shot arrive sheen (boot bindFabArriveSheen); pulse-OFF only; no new idle loop. */
#fab.tb-bolt-bright img {
  animation: tbBoltBright var(--pulse) ease-in-out 1;
}
@keyframes tbBoltBright {
  0% { filter: drop-shadow(0 10px 14px rgba(0,0,0,0.4)) brightness(1); }
  45% { filter: drop-shadow(0 0 16px rgba(242, 201, 76, 0.95)) brightness(1.85); }
  100% { filter: drop-shadow(0 10px 14px rgba(0,0,0,0.4)) brightness(1); }
}
.tb-spoken-card {
  align-self: flex-start;
  max-width: 92%;
  margin: 0;
  padding: 12px 14px;
  border: 1px solid rgba(242, 201, 76, 0.45);
  border-radius: 12px;
  background: #141414;
  color: #fff;
}
.tb-spoken-line {
  margin: 0;
  font-size: 16px;
  line-height: 1.3;
  font-weight: 700;
}
.tb-spoken-next {
  margin: 8px 0 0;
  font-size: 14px;
  line-height: 1.35;
  color: #F2C94C;
}
.tb-spoken-man {
  margin: 8px 0 0;
  font-size: 13px;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  color: #fff;
}
#thunder-ask-mic {
  flex: none;
  height: 48px;
  padding: 0 12px;
  border: 1px solid #333;
  border-radius: 16px;
  background: #111;
  color: #F2C94C;
  font-size: 12px;
  font-weight: 800;
  letter-spacing: 0.06em;
  text-transform: uppercase;
}
#thunder-ask-mic[hidden] { display: none; }
#thunder-ask-mic.is-on {
  border-color: #F2C94C;
  filter: brightness(1.4);
}

/* 20261008-fab-ask-line — #tb-ahead ("You left this open…") and #tb-expect ("Still here.") DELETED with their code. */

/* 20261003-thunder-name → 20261008-fab-ask-line — his one line after a tap: "Ask." (first-ever open: "Ask me anything", once). */
#tb-need {
  margin: 0;
  padding: 0;
  border: 0;
  background: none;
  box-shadow: none;
  color: #fff;
  font-size: 18px;
  line-height: 1.3;
  font-weight: 700;
}

#profile-edit label.edit-alerts {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-top: 4px;
  color: #fff;
  font-weight: 800;
  letter-spacing: 0.08em;
}
#profile-edit label.edit-alerts input {
  width: 48px;
  height: 28px;
  margin: 0;
  padding: 0;
  accent-color: #c9a227;
}

/* 20261004-between-night — dark clubhouse. Electricity is one shot, then still. */
#view-between {
  background: #070708;
}
#view-between.active {
  min-height: calc(100dvh - var(--dock));
  padding-bottom: 24px;
}
#view-between.room-settle {
  animation: none;
}
html.tb-between-room #fab,
html:has(#view-between.active) #fab {
  animation: none;
}
html:has(#view-between.active) #fab-say {
  display: none !important;
}
/* 20261008-fab-ask-line — he never covers TAKE YOUR SEAT, I'M IN or a card. He never moves: while a guarded
   button sits under him he steps out (fab-arms.js yield guard sets html.fab-yield); while a Brothers card is open he is
   out entirely. */
html.fab-yield #fab,
html.fab-yield #fab-say {
  visibility: hidden !important;
  pointer-events: none !important;
}
body.tb-bb-open #fab,
body.tb-bb-open #fab-say {
  display: none !important;
}
/* 20261008-fab-body-poses — slow settle into each pose (transition, not a loop). Point faces the pictures (mirrored
   one-arm point). Reduced motion = static pose, no settle. */
#fab img {
  translate: 0 0;
  rotate: 0deg;
  transition: translate 700ms cubic-bezier(0.2, 0.8, 0.2, 1), rotate 700ms cubic-bezier(0.2, 0.8, 0.2, 1);
}
#fab img.fab-settle-from {
  translate: 0 4px;
  rotate: -6deg;
  transition: none;
}
#fab[data-pose="point"] img {
  transform: scaleX(-1);
}
@media (prefers-reduced-motion: reduce) {
  #fab img,
  #fab img.fab-settle-from {
    translate: none;
    rotate: none;
    transition: none;
  }
}
/* 20261012-seat-trim — one gentle bob per pose (data-pose), all ease-in-out, amplitude 5–8px:
   rest slow + small · point a touch quicker · think slowest + smallest · celebrate only slightly bigger. Point eases in/out
   through the img settle above. The Meet Thunder pulse no longer re-times this (meet-thunder.css). */
@keyframes tbBobRest { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-5px); } }
@keyframes tbBobPoint { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-6px); } }
@keyframes tbBobThink { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-4px); } }
@keyframes tbBobCele { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-8px); } }
#fab[data-pose="rest"] { animation: tbBobRest 5.6s ease-in-out infinite; }
#fab[data-pose="point"] { animation: tbBobPoint 4.4s ease-in-out infinite; }
#fab[data-pose="think"] { animation: tbBobThink 6.8s ease-in-out infinite; }
#fab[data-pose="celebrate"] { animation: tbBobCele 4.8s ease-in-out infinite; }
#fab[data-pose="point"] img { transition-duration: 900ms; }
html.tb-between-room #fab[data-pose],
html:has(#view-between.active) #fab[data-pose] { animation: none; }
html.fab-yield #fab, html.fab-yield #fab-say { transition: visibility 0s linear 0s; }
@media (prefers-reduced-motion: reduce) { #fab[data-pose] { animation: none; } }
/* 20261006-fab-motion-safe — #4 formalize hide-on-Ask; Between hide KEPT above. Float owner tbBoltFloat unchanged. */
html:has(#thunder-backstage:not([hidden])) #fab,
html:has(#thunder-backstage:not([hidden])) #fab-say {
  display: none !important;
}

#view-between .between-night { margin: 0 0 6px; }
#view-between .between-bolt {
  display: block;
  height: 1px;
  width: 0;
  margin: 0 0 10px;
  background: #F2C94C;
  opacity: 0;
}
#view-between .between-title {
  margin: 0;
  font-family: "Bebas Neue", Impact, "Arial Narrow", sans-serif;
  font-size: 42px;
  letter-spacing: 0.06em;
  font-weight: 400;
  color: #f4f4f4;
  line-height: 0.95;
  -webkit-text-stroke: 1.5px #E30600;
  paint-order: stroke fill;
}
#view-between .between-title-wipe {
  display: inline-block;
  clip-path: inset(0 100% 0 0);
}
#view-between .between-sub {
  margin: 6px 0 0;
  color: #9a9a9a;
  font-size: 12px;
  letter-spacing: 0.14em;
  font-weight: 700;
  opacity: 0;
}
#view-between.between-arrive .between-bolt {
  animation: between-bolt 1000ms linear 1 both;
}
#view-between.between-arrive .between-title-wipe {
  animation: between-wipe 1000ms linear 1 both;
}
#view-between.between-arrive .between-sub {
  animation: between-sub 1000ms linear 1 both;
}
#view-between.between-arrive #between-list:not(:empty)::before {
  animation: between-down 1000ms linear 1 both;
}
@keyframes between-bolt {
  0% { width: 0; opacity: 1; }
  18% { width: 100%; opacity: 1; }
  32% { opacity: 0; }
  100% { width: 100%; opacity: 0; }
}
@keyframes between-wipe {
  0%, 12% { clip-path: inset(0 100% 0 0); }
  55%, 100% { clip-path: inset(0 0 0 0); }
}
@keyframes between-sub {
  0%, 40% { opacity: 0; }
  62%, 100% { opacity: 1; }
}
@keyframes between-down {
  0%, 55% { height: 0; opacity: 0; }
  62% { height: 0; opacity: 1; }
  90% { height: 100%; opacity: 1; }
  100% { height: 100%; opacity: 0; }
}

#view-between .between-fab {
  margin: 0;
  display: none;
}
#view-between #between-happening,
#view-between #between-look,
#view-between .between-happening,
#view-between .between-look {
  display: none !important;
}
#view-between .between-happening {
  display: flex;
  flex-direction: column;
  gap: 4px;
  width: 100%;
  margin: 0;
  padding: 6px 0;
  border: 0;
  background: transparent;
  color: #f4f4f4;
  font: inherit;
  font-weight: 700;
  text-align: left;
  letter-spacing: 0.01em;
}
#view-between .between-hap-name {
  display: block;
  color: #F2C94C;
  font-size: 12px;
  font-weight: 700;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  line-height: 1.2;
}
#view-between .between-hap-text {
  display: block;
  color: #f4f4f4;
  font-size: 16px;
  font-weight: 700;
  letter-spacing: 0.01em;
  line-height: 1.35;
}
#view-between .between-look {
  margin: 10px 0 0;
  color: #F6F3EC;
  font-size: 15px;
  line-height: 1.35;
}

#view-between .between-picks { display: flex; flex-direction: column; gap: 8px; margin: 0 0 16px; }
#view-between #between-write {
  position: relative;
  z-index: 2;
  margin: 0;
  padding-bottom: 0;
}
#view-between #between-write:empty {
  display: none;
  margin: 0;
  padding: 0;
}
#view-between .between-door-write {
  display: flex;
  flex-direction: column;
  gap: 10px;
  margin: 0 0 4px;
  padding: 0 6px 8px;
}
#view-between .between-door-write #between-say {
  display: block;
  width: 100%;
  min-height: 88px;
  box-sizing: border-box;
  background: #070708;
  color: #f4f4f4;
  border: 1px solid #333;
  border-radius: 8px;
  padding: 12px;
  font: inherit;
  resize: vertical;
}
#view-between .between-door-write #between-send {
  margin-top: 0;
  color: #F2C94C;
  border-color: #F2C94C;
}
#view-between #between-put {
  appearance: none;
  background: transparent;
  border: none;
  padding: 0;
  text-align: left;
  color: #F2C94C;
}
#view-between #between-put .between-put-label {
  display: block;
  letter-spacing: 0.14em;
  font-size: 11px;
  font-weight: 700;
  color: #F2C94C;
}
#view-between .between-put-line {
  display: block;
  font-style: normal;
  font-weight: 500;
  letter-spacing: 0;
  color: #f4f4f4;
  font-size: 15px;
  line-height: 1.4;
}
#view-between #between-drop {
  display: flex;
  flex-direction: column;
  gap: 10px;
  margin-top: 6px;
}
#view-between #between-drop[hidden] { display: none !important; }
#view-between #between-drop textarea {
  width: 100%;
  box-sizing: border-box;
  min-height: 88px;
  margin: 0;
  padding: 12px;
  background: #141414;
  color: #f3f1ea;
  border: none;
  border-radius: 10px;
  font: inherit;
  font-size: 16px;
  resize: vertical;
}
#view-between .between-picks button,
#view-between #between-seat,
#view-between #between-send {
  appearance: none; background: transparent; color: #f4f4f4;
  border: 1px solid #333; border-radius: 8px;
  font-weight: 700; letter-spacing: 0.08em; text-align: left;
  padding: 12px 14px;
}
#view-between .between-cat {
  margin: 0 0 6px; font-size: 11px; letter-spacing: 0.16em;
  color: #F6F3EC; font-weight: 700;
}
#view-between .between-name { margin: 0; font-size: 18px; font-weight: 700; }
#view-between .between-time { margin: 2px 0 10px; color: #9a9a9a; font-size: 13px; }
#view-between #between-say {
  display: block; width: 100%; min-height: 96px; box-sizing: border-box;
  background: #070708; color: #f4f4f4; border: 1px solid #333; border-radius: 8px;
  padding: 12px; font: inherit; resize: vertical;
}
#view-between .between-hold { margin: 8px 0 0; color: #9a9a9a; font-size: 14px; }
#view-between #between-nudge { margin-top: 4px; }
#view-between #between-glass { margin-top: 18px; }
#view-between #between-log { margin-top: 18px; }
#view-between .between-log-title { margin: 0 0 8px; color: #9a9a9a; font-size: 11px; letter-spacing: 0.16em; font-weight: 700; }
#view-between .between-glass-row {
  margin: 0 0 12px;
  padding: 12px;
  background: #141414;
  color: #f2f2f2;
}
#view-between .between-glass-row .between-words { margin: 6px 0; }
#view-between .between-glass-block,
#view-between .between-glass-who { margin: 2px 0 0; color: #9a9a9a; font-size: 13px; }
#view-between #between-send { margin-top: 10px; color: #F2C94C; border-color: #F2C94C; }
#view-between #between-send:disabled { opacity: 0.35; }
#view-between .between-fail { color: #E30600; font-size: 13px; }
#view-between .between-flag {
  appearance: none;
  background: transparent;
  color: #f4f4f4;
  border: 1px solid #333;
  width: auto;
  justify-self: start;
  align-self: center;
  padding: 2px 8px;
  font-size: 10px;
  font-weight: 700;
  letter-spacing: 0.06em;
  border-radius: 6px;
  text-align: left;
  line-height: 1.2;
  flex: 0 0 auto;
}

#view-between #between-list {
  position: relative;
  display: flex;
  flex-direction: column;
  gap: 6px;
  margin-top: 8px;
  padding: 8px;
  background: #1A1714;
  border-radius: 12px;
}
#view-between #between-list:empty {
  display: none;
  padding: 0;
  margin: 0;
  background: transparent;
}
#view-between #between-list::before {
  content: '';
  position: absolute;
  left: 50%;
  top: 8px;
  bottom: auto;
  width: 1px;
  height: 0;
  background: #F2C94C;
  opacity: 0;
  pointer-events: none;
}
#view-between .between-card {
  margin: 0;
  min-height: 96px;
  border: 0;
  border-radius: 10px;
  padding: 16px 14px;
  background: #3E6299;
  box-shadow: none;
  display: grid;
  grid-template-columns: 72px 1fr;
  grid-column-gap: 12px;
  align-items: center;
  color: #F6F3EC;
  transition: transform 180ms ease, box-shadow 180ms ease;
}
#view-between .between-card.between-space--help { background: #2C6E73; }
#view-between .between-card.between-space--sale { background: #3E6299; }
#view-between .between-card.between-space--meet { background: #2F7A52; }
#view-between .between-card.between-space--look { background: #F2C94C; }
#view-between .between-card.between-space--look .between-cat,
#view-between .between-card.between-space--look .between-name,
#view-between .between-card.between-space--look .between-words,
#view-between .between-card.between-space--look .between-time,
#view-between .between-card.between-space--look .between-flag,
#view-between .between-card.between-space--look .between-reply,
#view-between .between-card.between-space--look .between-reply-name,
#view-between .between-card.between-space--look .between-reply-line button {
  color: #14120c;
}
#view-between .between-card.between-space--look .between-flag {
  border-color: rgba(20, 18, 12, 0.4);
}
#view-between .between-card.between-space--look .between-icon {
  background: transparent;
  color: #14120c;
}
#view-between .between-card.between-space--look .between-icon svg {
  stroke: #14120c;
}

#view-between .between-card.between-press {
  transform: scale(0.975);
  box-shadow: inset 0 0 0 1.5px #F2C94C;
}
#view-between .between-card.between-is-lane {
  transform: none;
  box-shadow: inset 0 0 0 1.5px #F2C94C;
}
#view-between .between-card.between-sig-edge {
  box-shadow: inset 0 0 0 1.5px #F2C94C;
}
#view-between .between-card.between-sig-drop {
  animation: between-drop 420ms ease-out 1 both;
}
@keyframes between-drop {
  from { transform: translateY(-12px); }
  to { transform: none; }
}
#view-between .between-tick {
  display: block;
  width: 1px;
  height: 10px;
  margin-top: 6px;
  background: #F2C94C;
  grid-column: 2;
  opacity: 1;
}
#view-between .between-sig-tick .between-tick {
  animation: between-tick 1000ms linear 1 both;
}
@keyframes between-tick {
  0% { opacity: 0; }
  40%, 100% { opacity: 1; }
}
#view-between .between-icon {
  width: 72px;
  height: 72px;
  margin: 0;
  border-radius: 50%;
  background: #1A1714;
  display: grid;
  place-items: center;
  color: #F2C94C;
  grid-row: 1 / span 4;
}
#view-between .between-icon svg {
  width: 48px;
  height: 48px;
  display: block;
  stroke: #F2C94C;
  fill: none;
  stroke-width: 1.8;
  stroke-linecap: round;
  stroke-linejoin: round;
}
#view-between .between-card .between-cat {
  margin: 0;
  grid-column: 2;
  color: #F6F3EC;
}
#view-between .between-card .between-name {
  margin: 0;
  grid-column: 2;
  font-family: "Bebas Neue", Impact, "Arial Narrow", sans-serif;
  font-size: 22px;
  text-align: left;
  font-weight: 400;
  color: #F6F3EC;
}
#view-between .between-card .between-words {
  margin: 4px 0 0;
  padding: 0;
  grid-column: 2;
  color: #F6F3EC;
  font-size: 15px;
  line-height: 1.35;
}
#view-between .between-card .between-meta {
  display: flex;
  flex-direction: row;
  flex-wrap: wrap;
  align-items: center;
  gap: 8px;
  margin: 4px 0 0;
  grid-column: 2;
}
#view-between .between-card .between-time {
  margin: 0;
  grid-column: auto;
  color: #F6F3EC;
  font-size: 13px;
}

#view-between .between-replies {
  grid-column: 1 / -1;
  grid-row: 5;
  margin-top: 12px;
  display: flex;
  flex-direction: column;
  gap: 8px;
}
#view-between .between-reply {
  margin: 0;
  font-size: 14px;
  line-height: 1.35;
  color: #F6F3EC;
}
#view-between .between-reply-name {
  font-weight: 700;
  color: #F2C94C;
}
#view-between .between-reply-line {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 6px;
}
#view-between .between-reply-say {
  display: block;
  width: 100%;
  box-sizing: border-box;
  min-height: 44px;
  border: 0;
  border-radius: 8px;
  background: #1A1714;
  color: #F6F3EC;
  font: inherit;
  font-size: 15px;
  padding: 8px 10px;
  resize: none;
}
#view-between .between-reply-line button {
  appearance: none;
  border: 0;
  background: transparent;
  color: #F2C94C;
  font-weight: 700;
  letter-spacing: 0.06em;
  font-size: 12px;
  padding: 0;
}
#view-between .between-reply-line button:disabled { opacity: 0.35; }
#view-between .between-reply-hold {
  margin: 0;
  color: #F6F3EC;
  font-size: 13px;
}


#view-between .between-example {
  margin: 0;
  padding: 16px 14px;
  border: none;
  border-radius: 10px;
  background: transparent;
  display: grid;
  grid-template-columns: 72px 1fr;
  grid-column-gap: 12px;
  align-items: center;
  width: 100%;
  font: inherit;
  color: inherit;
  text-align: left;
  cursor: pointer;
  appearance: none;
  -webkit-appearance: none;
}
#view-between .between-example .between-cat {
  margin: 0 0 6px;
  color: #F6F3EC;
  grid-column: 2;
}
#view-between .between-example-line {
  margin: 0;
  grid-column: 2;
  color: #8a8a8a;
  font-style: italic;
  font-size: 15px;
  line-height: 1.35;
  text-shadow: none;
}
#view-between .between-example-tag {
  font-size: 10px;
  color: #8a8a8a;
  font-style: normal;
  font-weight: 400;
  letter-spacing: 0.02em;
}
#view-between .between-example-note {
  margin: 6px 0 0;
  grid-column: 2;
  color: #9a9a9a;
  font-size: 12px;
  line-height: 1.3;
  text-shadow: none;
}
#view-between .between-hybrid .between-goldline {
  display: block;
  grid-column: 2;
  height: 2px;
  width: 100%;
  margin: 2px 0 8px;
  background: #F2C94C;
  border-radius: 1px;
}
#view-between .between-hybrid .between-icon {
  opacity: 1;
  transform: none;
}
#view-between.between-arrive .between-hybrid .between-icon {
  animation: between-hybrid-icon 420ms ease-out 1000ms 1 both;
}
#view-between.between-arrive .between-hybrid .between-goldline {
  animation: between-hybrid-line 500ms ease-out 1000ms 1 both;
}
#view-between.between-arrive .between-hybrid .between-example-line {
  animation: between-hybrid-words 700ms ease-out 1000ms 1 both;
}
@keyframes between-hybrid-icon {
  from { opacity: 0; transform: scale(0.82); }
  to { opacity: 1; transform: none; }
}
@keyframes between-hybrid-line {
  from { width: 0; }
  to { width: 100%; }
}
@keyframes between-hybrid-words {
  from { color: #8a8a8a; text-shadow: none; opacity: 0.35; }
  to { color: #8a8a8a; text-shadow: none; opacity: 1; }
}
@keyframes between-hit-flash {
  0% { box-shadow: inset 0 0 0 0 rgba(242, 201, 76, 0); }
  35% { box-shadow: inset 0 0 0 2px #F2C94C, 0 0 18px 2px rgba(242, 201, 76, 0.55); }
  100% { box-shadow: inset 0 0 0 0 rgba(242, 201, 76, 0); }
}
#view-between.between-hit,
#view-between .between-hit {
  animation: between-hit-flash 480ms ease-out 1 both;
}

@media (prefers-reduced-motion: reduce) {
  #view-between .between-title-wipe {
    clip-path: none;
    animation: none;
  }
  #view-between .between-sub {
    opacity: 1;
    animation: none;
  }
  #view-between .between-bolt,
  #view-between #between-list::before,
  #view-between .between-card.between-sig-drop,
  #view-between .between-sig-tick .between-tick {
    animation: none;
  }
  #view-between .between-bolt,
  #view-between #between-list::before {
    opacity: 0;
    width: 0;
    height: 0;
  }
  #view-between .between-card {
    transition: none;
  }
  #view-between .between-sig-tick .between-tick {
    opacity: 1;
  }
  #view-between .between-example-line,
  #view-between .between-hybrid .between-icon,
  #view-between .between-hybrid .between-goldline,
  #view-between .between-hybrid .between-example-line,
  #view-between.between-arrive .between-hybrid .between-icon,
  #view-between.between-arrive .between-hybrid .between-goldline,
  #view-between.between-arrive .between-hybrid .between-example-line {
    animation: none;
  }
  #view-between .between-example-line,
  #view-between .between-hybrid .between-example-line {
    color: #8a8a8a;
    font-style: italic;
    text-shadow: none;
  }
  #view-between .between-hybrid .between-icon {
    opacity: 1;
    transform: none;
  }
  #view-between .between-hybrid .between-goldline {
    width: 100%;
    opacity: 1;
  }
  #view-between .between-example-note,
  #view-between .between-hybrid .between-example-note {
    opacity: 1;
    animation: none;
    color: #9a9a9a;
    text-shadow: none;
  }
  #view-between.between-hit,
  #view-between .between-hit {
    animation: none;
  }
}

/* 20261004-fist-pop — one entrance over the page, then still. Not I'm in. */
#fist-bump[hidden] { display: none !important; }
#fist-bump {
  position: fixed;
  inset: 0;
  z-index: 4000;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 18px;
  margin: 0;
  padding: 32px 22px;
  background: rgba(0, 0, 0, 0.88);
  text-align: center;
}
#fist-bump .fist-bump-title {
  margin: 0;
  color: #F2C94C;
  font-weight: 800;
  font-size: clamp(42px, 11vw, 76px);
  line-height: 0.95;
  letter-spacing: 0.02em;
}
#fist-bump .fist-bump-row {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 14px;
  margin: 8px 0 0;
  color: #F2C94C;
  font-weight: 800;
  font-size: clamp(20px, 5vw, 28px);
}
#fist-bump .fist-bump-switch-label { line-height: 1.2; }
#fist-bump input[type="checkbox"] {
  width: 28px;
  height: 28px;
  accent-color: #F2C94C;
}
#fist-bump .fist-bump-line {
  margin: 0;
  max-width: 22rem;
  color: #F2C94C;
  font-size: clamp(16px, 4vw, 20px);
  line-height: 1.35;
  font-weight: 700;
}
@keyframes fist-bump-pop {
  from { opacity: 0; transform: scale(0.86); }
  to { opacity: 1; transform: scale(1); }
}
#fist-bump.fist-bump-in {
  animation: fist-bump-pop 380ms ease-out 1 both;
}
@media (prefers-reduced-motion: reduce) {
  #fist-bump,
  #fist-bump.fist-bump-in { animation: none; }
}

/* 20261004-share-huge — huge mark just above #dock, huge arrow tip on the mark. Neither is a button.
   Mark bottom calc(var(--dock) + 16px), 112px tall. Arrow bottom calc(var(--dock) + 16px + 112px - 20px), 120px tall.
   Tip overlaps the mark top by 20px. Both bottoms are greater than var(--dock), so neither box intersects #dock. */
#home-share-mark {
  position: fixed;
  left: 50%;
  bottom: calc(var(--dock) + 16px);
  z-index: 35;
  width: 112px;
  height: 112px;
  margin: 0;
  pointer-events: none;
  transform: translate(-50%, 0);
}
#home-share-mark svg { display: block; width: 112px; height: 112px; }
#home-cursor {
  position: fixed;
  left: 50%;
  bottom: calc(var(--dock) + 16px + 112px - 20px);
  z-index: 35;
  width: 72px;
  height: 120px;
  margin: 0;
  pointer-events: none;
  transform: translate(-50%, 0);
}
#home-cursor svg { display: block; width: 72px; height: 120px; }
@keyframes home-cursor-travel {
  0% { transform: translate(-50%, -42vh); opacity: 0; }
  70% { transform: translate(-50%, 20px); opacity: 1; }
  100% { transform: translate(-50%, 0); opacity: 1; }
}
#home-cursor.home-cursor-in {
  animation: home-cursor-travel 860ms ease-out 1 both;
}
@media (prefers-reduced-motion: reduce) {
  #home-cursor,
  #home-cursor.home-cursor-in {
    animation: none;
    transform: translate(-50%, 0);
  }
}

/* 20261005-locked-glass — smaller plate, real glass, kill the stripe */
#rsvp-btn.is-in {
  padding: 11px 16px 10px;
  border-radius: 22px;
  background:
    linear-gradient(180deg, rgba(255,255,255,0.55) 0%, rgba(255,255,255,0.12) 22%, rgba(255,255,255,0) 42%),
    linear-gradient(180deg, #FFE58A 0%, #FFD24A 55%, #F0B429 100%);
  box-shadow:
    inset 0 1px 0 rgba(255,255,255,0.75),
    inset 0 -10px 16px rgba(140, 80, 0, 0.12),
    0 8px 22px rgba(255, 196, 40, 0.28);
  animation: none;
}
#rsvp-btn.is-in::after {
  display: none;
  animation: none;
  content: none;
}
#rsvp-btn.is-in .rsvp-lock {
  font-size: 16px;
  letter-spacing: 0.14em;
}
#rsvp-btn.is-in .rsvp-keep { margin-top: 1px; }
#rsvp-btn.is-in .rsvp-keep-line { font-size: 13px; }
#rsvp-btn.is-in .fist-bump-row {
  margin-top: 6px;
  font-size: 12px;
  gap: 8px;
}
#rsvp-btn.is-in .fist-bump-row input[type="checkbox"] {
  width: 16px;
  height: 16px;
}
@media (prefers-reduced-motion: reduce) {
  #rsvp-btn.is-in,
  #rsvp-btn.is-in.rsvp-aftermath,
  #rsvp-btn.is-in.rsvp-mash {
    animation: none;
    padding: 11px 16px 10px;
    border-radius: 22px;
    background:
      linear-gradient(180deg, rgba(255,255,255,0.55) 0%, rgba(255,255,255,0.12) 22%, rgba(255,255,255,0) 42%),
      linear-gradient(180deg, #FFE58A 0%, #FFD24A 55%, #F0B429 100%);
    box-shadow:
      inset 0 1px 0 rgba(255,255,255,0.75),
      inset 0 -10px 16px rgba(140, 80, 0, 0.12),
      0 8px 22px rgba(255, 196, 40, 0.28);
  }
  #rsvp-btn.is-in::after { display: none; content: none; }
}

/* 20261005-locked-words — text inside a capsule, not a square, no stripe */
#rsvp-btn.is-in {
  padding: 14px 18px 12px;
  border-radius: 28px;
  color: #1a0505;
  overflow: hidden;
  background:
    linear-gradient(180deg, rgba(255,255,255,0.42) 0%, rgba(255,255,255,0) 16%),
    #FFD84A;
  box-shadow:
    inset 0 1px 0 rgba(255,255,255,0.7),
    0 10px 24px rgba(255, 196, 40, 0.22);
  animation: none;
}
#rsvp-btn.is-in::after { display: none; animation: none; content: none; }
#rsvp-btn.is-in .rsvp-lock {
  color: #1a0505;
  font-size: 18px;
  font-weight: 800;
  letter-spacing: 0.08em;
  line-height: 1.15;
}
#rsvp-btn.is-in .rsvp-keep { margin-top: 4px; }
#rsvp-btn.is-in .rsvp-keep-line {
  color: #8C0500;
  font-size: 14px;
  font-weight: 800;
}
#rsvp-btn.is-in .fist-bump-row {
  margin-top: 8px;
  color: #1a0505;
  font-size: 13px;
  font-weight: 700;
}
#rsvp-btn.is-in .fist-bump-row input[type="checkbox"] {
  width: 18px;
  height: 18px;
}
@media (prefers-reduced-motion: reduce) {
  #rsvp-btn.is-in,
  #rsvp-btn.is-in.rsvp-aftermath,
  #rsvp-btn.is-in.rsvp-mash {
    animation: none;
    padding: 14px 18px 12px;
    border-radius: 28px;
    color: #1a0505;
    background:
      linear-gradient(180deg, rgba(255,255,255,0.42) 0%, rgba(255,255,255,0) 16%),
      #FFD84A;
    box-shadow:
      inset 0 1px 0 rgba(255,255,255,0.7),
      0 10px 24px rgba(255, 196, 40, 0.22);
  }
  #rsvp-btn.is-in::after { display: none; content: none; }
}

/* 20261005-when-up — time and place sit under the date, above the gold pill */
#gather-place { margin-bottom: 8px; }
#rsvp-soft-banner { margin: 0 0 4px; }

/* 20261005-date-hard — × makes the date the hard place */
#gather-place.is-hard {
  border-color: rgba(255, 255, 255, 0.92);
  background: #141414;
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.55),
    0 0 0 1px rgba(255, 255, 255, 0.28),
    0 8px 18px rgba(0, 0, 0, 0.35);
}
#gather-place.is-hard #gather-date {
  color: #fff;
}
#gather-place.date-go-hard {
  animation: date-go-hard 520ms cubic-bezier(0.16, 0.84, 0.18, 1) 1 both;
}
@keyframes date-go-hard {
  0% { transform: scale(1); box-shadow: 0 0 0 0 rgba(255, 216, 74, 0.0); }
  40% { transform: scale(1.06); box-shadow: 0 0 0 3px rgba(255, 216, 74, 0.85); }
  100% { transform: scale(1); box-shadow: inset 0 1px 0 rgba(255,255,255,0.55), 0 0 0 1px rgba(255,255,255,0.28), 0 8px 18px rgba(0,0,0,0.35); }
}
@media (prefers-reduced-motion: reduce) {
  #gather-place.date-go-hard { animation: none; }
}

/* 20261005-date-glow — date holds a hard gold glow after the × */
#gather-place.is-hard {
  border-color: rgba(255, 216, 74, 0.95);
  background: #1c1406;
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.4),
    0 0 0 1px rgba(255, 216, 74, 0.7),
    0 0 18px rgba(255, 196, 40, 0.72),
    0 0 36px rgba(255, 196, 40, 0.28);
}
#gather-place.is-hard #gather-date {
  color: #fff;
  text-shadow: 0 0 10px rgba(255, 216, 74, 0.55);
}
@keyframes date-go-hard {
  0% { transform: scale(1); }
  40% { transform: scale(1.06); }
  100% { transform: scale(1); }
}

/* 20261005-date-more — no patio line; the date says tap for more */
#gather-place.is-hard {
  border-color: rgba(255, 255, 255, 0.22);
  background:
    linear-gradient(180deg, rgba(255, 255, 255, 0.16), rgba(255, 255, 255, 0.04) 46%, rgba(0, 0, 0, 0.22));
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.38),
    inset 0 -10px 16px rgba(0, 0, 0, 0.18),
    0 8px 18px rgba(0, 0, 0, 0.28);
}
#gather-place.is-hard #gather-date {
  color: rgba(255, 255, 255, 0.86);
  text-shadow: none;
}
#gather-place.date-go-hard { animation: none; }
#gather-place::after {
  content: "Tap for more";
  display: block;
  margin-top: 3px;
  font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
  font-size: 10px;
  font-weight: 700;
  letter-spacing: 0.16em;
  line-height: 1;
  text-transform: uppercase;
  color: rgba(255, 216, 74, 0.92);
}

/* 20261005-date-silver-glow — soft white/silver halo on hard date */
#gather-place.is-hard #gather-date {
  color: rgba(255, 255, 255, 0.94);
  text-shadow:
    0 0 6px rgba(255, 255, 255, 0.42),
    0 0 14px rgba(214, 224, 236, 0.28);
  animation: date-silver-breathe 5.2s ease-in-out infinite alternate;
}
@keyframes date-silver-breathe {
  0% { text-shadow: 0 0 5px rgba(255, 255, 255, 0.32), 0 0 12px rgba(214, 224, 236, 0.2); }
  100% { text-shadow: 0 0 8px rgba(255, 255, 255, 0.5), 0 0 18px rgba(214, 224, 236, 0.34); }
}
@media (prefers-reduced-motion: reduce) {
  #gather-place.is-hard #gather-date { animation: none; }
}

/* 20261007-season-path-plane — kill mote trail · month labels · THIS SEASON · soft-line; bold en-route plane */
.season-mote,
.season-mote--rest,
.season-mote--live {
  display: none !important;
  animation: none !important;
  opacity: 0 !important;
}
.season-month {
  display: none !important;
}
.season-stage-title {
  display: none !important;
}
.season-soft-line,
.season-whisper {
  display: none !important;
}
/* 20261008-plane-wind-chips — TWO LAYERS NEVER MERGE
   Outer wrap = date-driven PROGRESS POSITION only (never animated along journey).
   Inner plane = ONE smooth slow glide: sine bob ±1.5px + slight bank ±1°, 7s loop,
   easeInOutSine between the two extremes (continuous, no surge / ease-back / jitter, no random).
   Wind = 3 thin faint gold-white streaks drifting right→left BEHIND the plane, fading out. */
.season-plane-wrap {
  position: absolute;
  top: 50%;
  left: min(var(--path-fill, 40%), 88%);
  width: 40px;
  height: 40px;
  margin-top: -20px;
  margin-left: -20px;
  z-index: 3;
  pointer-events: none;
  /* progress seat only — no translate animation on this wrapper */
}
.season-plane {
  position: relative;
  z-index: 2;
  display: block;
  width: 100%;
  height: 100%;
  /* plain plane — never a plate/border/capsule · soft glow, steady */
  filter:
    drop-shadow(0 0 7px rgba(242, 201, 76, 0.7))
    drop-shadow(-2px 1px 3px rgba(242, 201, 76, 0.25));
  transform: translateY(-1.5px) rotate(-1deg);
  animation: season-glide 3.5s cubic-bezier(0.37, 0, 0.63, 1) infinite alternate;
  will-change: transform;
}
.season-plane-svg {
  display: block;
  width: 100%;
  height: 100%;
  transform: rotate(90deg); /* nose toward NEXT (right) */
  transform-origin: 50% 50%;
  animation: none;
}
/* old surge contrail retired — wind streaks replace it */
.season-plane-contrail {
  display: none !important;
  animation: none !important;
}
/* half-loop 3.5s each way (alternate) = full 7s sine: top/bank-left ↔ bottom/bank-right */
@keyframes season-glide {
  from { transform: translateY(-1.5px) rotate(-1deg); }
  to   { transform: translateY(1.5px) rotate(1deg); }
}
/* 20261008-plane-wind-visible — flight UNCHANGED (7s sine glide ±1.5px, 1° bank; path/progress untouched).
   NO BOX: the hot segment used to clip on both axes (overflow: hidden, 28px tall), which cut the plane's glow and the
   hot line's glow into a faint lighter rectangle. It now clips only sideways (gold still never runs past the hot end);
   vertically everything fades out softly. Older engines without overflow: clip keep the old clip (no regression).
   WIND: 7 thin gold-white speed lines at different heights across ~2× the plane's height (80px band), streaming
   right → left past and behind the plane, fading in/out at both ends, peak ≈0.7, loops of 7s/2 or 7s/3 so the field
   repeats once per glide. The field (no background) is sized by events.js fitSeasonWind to keep ≥6px from every
   text/chip (OCT 8, TODAY, NOV 2 …) at any width; ResizeObserver, no loop. */
.season-bolt-hot {
  overflow: hidden;
  overflow-x: clip;
  overflow-y: visible;
}
.season-wind-field {
  position: absolute;
  z-index: 1;
  left: calc(50% - var(--wind-l, 0px));
  top: calc(50% - var(--wind-t, 0px));
  width: calc(var(--wind-l, 0px) + var(--wind-r, 0px));
  height: calc(var(--wind-t, 0px) + var(--wind-b, 0px));
  overflow: hidden;
  pointer-events: none;
  background: none;
  -webkit-mask-image: linear-gradient(90deg, transparent 0%, #000 22%, #000 78%, transparent 100%);
  mask-image: linear-gradient(90deg, transparent 0%, #000 22%, #000 78%, transparent 100%);
}
/* 20261008-qa-reds-fab-plane — each speed line is a full-width strip of the measured field; only its streak (a
   background gradient of the old line length) travels right → left inside it. So a line's box never leaves the
   field, and the field keeps ≥6px from every text box (QA measures element boxes). Same 7 lines, same heights,
   same loops (7s/2, 7s/3), same fade, peak 0.7. */
.season-wind {
  position: absolute;
  z-index: 1;
  left: 0;
  width: 100%;
  height: 1px;
  border-radius: 1px;
  --streak: 48px;
  background-image: linear-gradient(90deg, rgba(255, 250, 232, 0) 0%, rgba(255, 250, 232, 0.95) 22%, rgba(255, 244, 205, 0.85) 55%, rgba(242, 201, 76, 0.35) 82%, rgba(242, 201, 76, 0) 100%);
  background-repeat: no-repeat;
  background-size: var(--streak) 100%;
  background-position: var(--wind-span, 0px) 0;
  opacity: 0;
  pointer-events: none;
  animation: season-wind-stream 3.5s linear infinite;
}
.season-wind--1 { top: 9%;  --streak: 44px; animation-duration: 3.5s;    animation-delay: -0.3s; }
.season-wind--2 { top: 21%; --streak: 58px; animation-duration: 2.3333s; animation-delay: -1.4s; }
.season-wind--3 { top: 34%; --streak: 40px; animation-duration: 3.5s;    animation-delay: -2.2s; height: 1.5px; }
.season-wind--4 { top: 48%; --streak: 64px; animation-duration: 2.3333s; animation-delay: -0.6s; }
.season-wind--5 { top: 62%; --streak: 46px; animation-duration: 3.5s;    animation-delay: -1.1s; height: 1.5px; }
.season-wind--6 { top: 76%; --streak: 54px; animation-duration: 2.3333s; animation-delay: -1.9s; }
.season-wind--7 { top: 89%; --streak: 38px; animation-duration: 3.5s;    animation-delay: -2.9s; }
@keyframes season-wind-stream {
  0%   { opacity: 0;   background-position: var(--wind-span, 0px) 0; }
  18%  { opacity: 0.7; }
  78%  { opacity: 0.7; }
  100% { opacity: 0;   background-position: calc(-1 * var(--streak, 48px)) 0; }
}
.season-plane-wrap { margin-left: calc(-20px + var(--plane-nudge, 0px)); }
@media (prefers-reduced-motion: reduce) {
  .season-plane {
    animation: none !important;
    filter: drop-shadow(0 0 7px rgba(242, 201, 76, 0.7));
    transform: none !important;
  }
  .season-plane-svg {
    animation: none !important;
    transform: rotate(90deg) !important;
  }
  .season-plane-contrail {
    animation: none !important;
    opacity: 0 !important;
  }
  /* reduced motion: lines stay still at low opacity, parked mid-field */
  .season-wind {
    animation: none !important;
    opacity: 0.2 !important;
    background-position: 50% 0 !important;
  }
}
/* LIVE chip/mark killed — means nothing; TODAY + NEXT UP KEEP */
.season-chip--live {
  display: none !important;
}
/* Breath/strike: do not re-show motes */
.season-stage--strike .season-mote,
.season-stage--breath-paint .season-mote,
.season-stage--path-near .season-mote,
.season-bolt-hot .season-mote--live,
.season-bolt-hot .season-mote--rest {
  display: none !important;
  animation: none !important;
}

/* 20261007-see-all-cinema — packed cinema mosaic (uniform rows + dense) + FROM THE ROOM */
#night-gallery {
  position: fixed;
  inset: 0;
  z-index: 48;
  background: #000;
  display: flex;
  flex-direction: column;
  overflow: hidden;
}
#night-gallery[hidden] { display: none !important; }
#night-gallery-x {
  position: absolute;
  right: 14px;
  top: calc(var(--island) - 8px);
  background: transparent;
  border: 0;
  color: #fff;
  font-size: 22px;
  z-index: 49;
  cursor: pointer;
  -webkit-tap-highlight-color: transparent;
}
#night-gallery-title {
  position: absolute;
  left: 16px;
  right: 56px;
  top: calc(var(--island) - 4px);
  margin: 0;
  z-index: 49;
  font-size: 11px;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: rgba(242, 201, 76, 0.72);
  font-weight: 500;
  pointer-events: none;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
#night-gallery-grid {
  flex: 1;
  overflow-y: auto;
  -webkit-overflow-scrolling: touch;
  padding: calc(var(--island) + 36px) 6px calc(24px + env(safe-area-inset-bottom, 0px));
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  grid-auto-flow: dense;
  gap: 5px;
  align-content: start;
  /* grid-auto-rows set by sizeGalleryGrid() — uniform square tracks */
}
@media (min-width: 480px) {
  #night-gallery-grid {
    grid-template-columns: repeat(4, 1fr);
  }
}
.night-gallery-tile {
  position: relative;
  display: block;
  width: 100%;
  height: 100%;
  min-height: 0;
  padding: 0;
  margin: 0;
  overflow: hidden;
  background: #111;
  border: 1px solid #F2C94C;
  border-radius: 4px;
  cursor: pointer;
  -webkit-tap-highlight-color: transparent;
  appearance: none;
  -webkit-appearance: none;
}
.night-gallery-tile.is-hero {
  /* 2×2 cinema hero on uniform tracks — packs with dense flow, no void */
  grid-column: span 2;
  grid-row: span 2;
}
.night-gallery-tile > .night-shot-img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
  pointer-events: none;
}
/* night chapter hairline — no copy; full row so it does not orphan cells */
.night-gallery-chapter {
  grid-column: 1 / -1;
  height: 0;
  margin: 6px 0;
  border: 0;
  border-top: 1px solid rgba(242, 201, 76, 0.45);
  pointer-events: none;
}
/* 20261007-events-wall-living-grid — peel-in cascade (one-shot then SLEEP) */
/* 20261007-events-grid-latch — is-painted forces opaque mosaic; only waiting peel tiles are opacity 0 */
.night-gallery-tile.is-painted {
  opacity: 1 !important;
  transform: none !important;
  animation: none !important;
}
.night-gallery-tile.is-cascade:not(.is-in) {
  opacity: 0;
  transform: translateY(8px) scale(0.94);
}
.night-gallery-tile.is-cascade.is-in {
  animation: night-tile-peel 480ms cubic-bezier(0.22, 1.05, 0.36, 1) forwards;
}
@keyframes night-tile-peel {
  0%   { opacity: 0; transform: translateY(8px) scale(0.94); }
  55%  { opacity: 1; transform: translateY(-2px) scale(1.03); }
  100% { opacity: 1; transform: translateY(0) scale(1); }
}
/* soft settle glow — hero only · class strip after · idle DEAD */
.night-gallery-tile.is-settle-glow {
  animation: night-hero-settle-glow 600ms ease-out both;
  z-index: 2;
}
@keyframes night-hero-settle-glow {
  /* ~200ms in · ~400ms out — hairline gold ambient, no milk on photo */
  0%   { box-shadow: 0 0 0 1px #F2C94C, 0 0 0 0 rgba(242, 201, 76, 0); }
  33%  { box-shadow: 0 0 0 2px rgba(242, 201, 76, 0.95), 0 0 22px rgba(242, 201, 76, 0.42); }
  100% { box-shadow: 0 0 0 1px #F2C94C, 0 0 0 0 rgba(242, 201, 76, 0); }
}
/* HARD: no continuous KB / breath / sheen on mosaic thumbs */
.night-gallery-tile > .night-shot-img {
  /* keep cover still — motion is tile chrome only */
  transform: none;
}

/* 20261007-dopamine-hybrid-core — #3 FROM THE ROOM track-in · #5 tile→glass */
#night-gallery-title.is-track-in {
  animation: night-title-track-in 280ms ease-out both, night-title-gold-pulse 420ms ease-out 200ms both;
}
@keyframes night-title-track-in {
  0% { opacity: 0; letter-spacing: 0.28em; }
  100% { opacity: 1; letter-spacing: 0.18em; }
}
@keyframes night-title-gold-pulse {
  0% { color: rgba(242, 201, 76, 0.72); }
  40% { color: rgba(254, 241, 5, 0.95); }
  100% { color: rgba(242, 201, 76, 0.72); }
}
.night-gallery-tile.is-tap-spring,
.night-gallery-tile.tb-hit-tile,
.night-gallery-tile.tb-hit-rim {
  animation: night-tile-hit 360ms cubic-bezier(0.22, 1.15, 0.36, 1) both;
}
@keyframes night-tile-hit {
  0% { transform: scale(1); box-shadow: 0 0 0 0 rgba(242, 201, 76, 0); }
  35% { transform: scale(0.97); box-shadow: 0 0 0 3px rgba(242, 201, 76, 0.95), 0 0 18px rgba(242, 201, 76, 0.4); }
  65% { transform: scale(1.02); box-shadow: 0 0 0 2px rgba(242, 201, 76, 0.75); }
  100% { transform: scale(1); box-shadow: 0 0 0 1px #F2C94C; }
}
#night-view-pic.is-glass-settle,
#night-view-stagecv.is-glass-settle {
  animation: night-glass-settle 220ms cubic-bezier(0.22, 1.15, 0.36, 1) both;
}
@keyframes night-glass-settle {
  0% { transform: scale(0.94); opacity: 0.85; }
  55% { transform: scale(1.02); opacity: 1; }
  100% { transform: scale(1); opacity: 1; }
}
/* one-shot soft Ken-Burns on glass only — never mosaic thumbs */
#night-view-pic.is-glass-kb,
#night-view-stagecv.is-glass-kb {
  animation: night-glass-kb 500ms ease-out both;
  transform-origin: 50% 45%;
}
@keyframes night-glass-kb {
  0%   { transform: scale(1); }
  45%  { transform: scale(1.03); }
  100% { transform: scale(1.01); }
}
@media (prefers-reduced-motion: reduce) {
  .night-gallery-tile.is-cascade,
  .night-gallery-tile.is-cascade.is-in,
  .night-gallery-tile.is-cascade:not(.is-in),
  .night-gallery-tile.is-painted {
    opacity: 1 !important;
    transform: none !important;
    animation: none !important;
    transition: none !important;
  }
  .night-gallery-tile.is-settle-glow,
  #night-gallery-title.is-track-in,
  .night-gallery-tile.is-tap-spring,
  .night-gallery-tile.tb-hit-tile,
  .night-gallery-tile.tb-hit-rim,
  #night-view-pic.is-glass-settle,
  #night-view-pic.is-glass-kb,
  #night-view-stagecv.is-glass-settle,
  #night-view-stagecv.is-glass-kb {
    animation: none !important;
    opacity: 1 !important;
    transform: none !important;
    box-shadow: none;
  }
}

/* 20261007-events-column-frame — Events room only: heading + gold rule, season path, DROP A PIC share the
 * same 680px centered column as #night-hero/#night-row (same max-width + auto margins). Phone (<680) unchanged. */
#view-events > .room-title,
#view-events > #season-stage,
#view-events > #drop-pic {
  max-width: 680px;
  margin-left: auto;
  margin-right: auto;
}
/* DROP A PIC is a <button> (inline-block): auto margins can't center it, so the same centering is spelled
 * out — (column − 680) / 2 each side, floored at 0 → identical to auto on desktop, 0 (unchanged) on phone. */
#view-events > #drop-pic {
  margin-left: max(0px, calc((100% - 680px) / 2));
  margin-right: max(0px, calc((100% - 680px) / 2));
}

/* 20261007-thumbs-fast — Events wall = ONE continuous grid of small square thumbs (tap → full photo uncropped in the
 * viewer). 3 across on phone, 5 across inside the 680px frame (≥716px viewport), 4px gap, every photo the same size.
 * Center-weighted crop with an upper bias so faces stay in. No hero, no captions on the wall (the viewer shows them). */
#night-row {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 4px;
}
@media (min-width: 716px) {
  #night-row { grid-template-columns: repeat(5, minmax(0, 1fr)); }
}
#night-row > .night-tile {
  aspect-ratio: 1 / 1;
  overflow: hidden;
  border-radius: 6px;
  background: #161616;
  cursor: pointer;
}
#night-row > .night-tile > .night-shot-img {
  width: 100%;
  height: 100%;
  aspect-ratio: 1 / 1;
  object-fit: cover;
  object-position: center 30%;
  border: 0;
  border-radius: 6px;
  filter: none;
  background: #161616;
}
#night-row > .night-tile > .night-caption,
#night-row > .night-tile > .night-credit { display: none; }
#night-row > .night-tile::after { aspect-ratio: 1 / 1; border-radius: 6px; }
/* dark placeholder slots while the list loads (never the empty state); not tappable */
#night-row > .night-tile--ph { pointer-events: none; cursor: default; }
/* 20261008-qa-soft-sweep — the FAB (fixed: right 6px, 60px wide → its left edge sits 66px from the viewport's right edge;
 * untouched) never covers a photo tile. Right gutter = the smallest that clears it: 66px − (the room's 18px side padding
 * + the column's own right margin when the 680px frame is centered). Phone = 48px; 5-across desktop shrinks it to 0 by
 * ~812px. Tiles narrow, the column count stays (3 phone / 5 desktop), 4px gap + square thumbs unchanged. Bottom padding:
 * at the end of the scroll the last row ends above the FAB too (60px + 7px float + 4px lift − the room's 24px). */
#night-row {
  padding-bottom: 48px;   /* 20261015-heavy-walk1 — right gutter removed; bottom clearance kept */
}
/* 20261007-events-slow-load — season dates ship blank until painted from today (never a stale OCT 2 / OCT 5) */
#season-stage:not([data-season-painted]) [data-season-date],
#season-stage:not([data-season-painted]) [data-season-month] { visibility: hidden; }

/* 20261008-last-moved-row — seated Home: MEETING ROW + LAST MOVED. Guests see neither (both [hidden]). */
#meet-row[hidden], #last-moved[hidden], #last-moved [hidden], #profile-edit label.edit-last-moved[hidden] { display: none !important; }
body.tb-meet-row #gather-place { display: none; }
body.tb-meet-row #rsvp-btn:not(.is-in) { display: none; }
/* 20261008-phone-privacy fold A — MAYBE under the meeting row's I'M IN (same 12px grey; box = I'M IN width, right edges flush) */
body.tb-meet-row #meet-row + #rsvp-maybe-btn {
  margin: -10px 11px 8px auto;
  min-width: 96px;
  text-align: center;
  box-sizing: border-box;
}
#meet-row {
  display: flex;
  align-items: center;
  gap: 10px;
  margin: 4px 0 12px;
  padding: 10px 10px 10px 14px;
  min-height: 64px;
  box-sizing: border-box;
  border: 1px solid rgba(255, 255, 255, 0.18);
  border-radius: 14px;
  background: linear-gradient(180deg, rgba(255, 255, 255, 0.07), rgba(255, 255, 255, 0.02)), #0c0c0c;
  cursor: pointer;
  -webkit-tap-highlight-color: transparent;
}
#meet-row .meet-row-date {
  flex: 0 0 auto;
  font-family: "Bebas Neue", Impact, "Arial Narrow", sans-serif;
  font-size: 22px;
  line-height: 1;
  letter-spacing: 0.05em;
  color: rgba(255, 255, 255, 0.9);
  white-space: nowrap;
}
#meet-row .meet-row-guest {
  flex: 1 1 auto;
  min-width: 0;
  display: flex;
  align-items: center;
  gap: 7px;
}
#meet-row .meet-row-face, #last-moved .last-moved-face {
  flex: 0 0 auto;
  width: 30px;
  height: 30px;
  border-radius: 50%;
  overflow: hidden;
  border: 1.5px solid #F2C94C;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  color: #F2C94C;
  font-weight: 800;
  font-size: 13px;
  background: #151515;
}
#meet-row .meet-row-face img, #last-moved .last-moved-face img { width: 100%; height: 100%; object-fit: cover; object-position: center 20%; display: block; }
#meet-row .meet-row-name {
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  font-family: "Bebas Neue", Impact, "Arial Narrow", sans-serif;
  font-size: 19px;
  letter-spacing: 0.05em;
  color: #fff;
}
#meet-row .meet-row-guest[hidden] + .meet-row-in { margin-left: auto; }
#meet-row .meet-row-in {
  flex: 0 0 auto;
  margin-left: auto;
  min-width: 96px;
  min-height: 44px;
  padding: 0 14px;
  border: 0;
  border-radius: 12px;
  background: var(--red);
  color: #fff;
  font-weight: 800;
  font-size: 15px;
  letter-spacing: 0.1em;
  box-shadow: 0 0 14px rgba(227, 6, 0, 0.4), 0 4px 0 #7a0300;
  -webkit-tap-highlight-color: transparent;
}
#meet-row .meet-row-in.is-in {
  background: transparent;
  color: #F2C94C;
  box-shadow: inset 0 0 0 1.5px rgba(242, 201, 76, 0.7);
}
#last-moved {
  margin: 0 0 12px;
  padding: 10px 14px 12px;
  border: 1px solid #2a2418;
  border-radius: 14px;
  background: #0c0c0c;
  cursor: default;
}
#last-moved .last-moved-title {
  margin: 0 0 8px;
  font-size: 11px;
  letter-spacing: 0.16em;
  color: #F2C94C;
  font-weight: 800;
}
#last-moved .last-moved-body {
  display: grid;
  grid-template-columns: 30px 1fr auto;
  column-gap: 9px;
  align-items: center;
}
#last-moved .last-moved-line { margin: 0; min-width: 0; color: rgba(255, 255, 255, 0.86); font-size: 14px; line-height: 1.3; }
#last-moved .last-moved-who { color: #fff; font-weight: 800; }
#last-moved .last-moved-thumb { width: 40px; height: 40px; border-radius: 8px; overflow: hidden; background: #151515; }
#last-moved .last-moved-thumb img { width: 100%; height: 100%; object-fit: cover; display: block; }
#last-moved .last-moved-caption {
  grid-column: 2 / 4;
  margin: 4px 0 0;
  color: rgba(255, 255, 255, 0.6);
  font-size: 13px;
  line-height: 1.35;
  overflow: hidden;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
}
#last-moved .last-moved-quiet { margin: 0; color: rgba(255, 255, 255, 0.5); font-size: 14px; }

/* 20261008-qa-reds-fab-plane
   (2) The page never widens. Cause: the Meet Thunder glass sweep (.mt-bubble::before, translateX 80%) on the right-hand
   bubbles ran ~90px past the viewport each cycle; mobile Chrome then grew the layout viewport (390 → 477–500, 320 → 398–404),
   and the fixed Ask panel / FAB followed it off-screen. Clip sideways at the page and at the stage; clamp the Ask panel. */
html, body { overflow-x: clip; }
#meet-thunder .mt-stage { overflow-x: clip; overflow-y: visible; }
#thunder-backstage { left: 0; right: 0; width: 100%; max-width: 100vw; overflow-x: hidden; }
#thunder-backstage > * { max-width: 100%; min-width: 0; }
#thunder-ask-q { min-width: 0; width: 0; }
#thunder-ask-chips .tb-ask-chip { max-width: 100%; }
/* (4) FAB above the Archive / speaker sheets (z 60 / 62), under their X (61 / 63 sit top-right, FAB bottom-right) and
   under Ask (75). The yield rule (html.fab-yield hides him over I'M IN / TAKE YOUR SEAT / an open card) still wins. */
html:not(.tb-stage-docent):has(#voices-archive:not([hidden])) #fab,
html:not(.tb-stage-docent):has(#speaker-profile:not([hidden])) #fab { z-index: 64; }
html:not(.tb-stage-docent):has(#voices-archive:not([hidden])) #fab-say,
html:not(.tb-stage-docent):has(#speaker-profile:not([hidden])) #fab-say { z-index: 65; }

/* 20261008-text-optin — ONE text opt-in (CDLM6JI). Quiet card; the box line reads first. */
.tb-optin[hidden] { display: none !important; }
.tb-optin {
  margin: 0 0 12px;
  padding: 10px 12px 10px;
  border: 1px solid rgba(255, 255, 255, 0.12);
  border-radius: 12px;
  background: rgba(255, 255, 255, 0.03);
  color: rgba(245, 240, 232, 0.72);
  font-size: 12px;
  line-height: 1.4;
  text-align: left;
  box-sizing: border-box;
}
.tb-optin .tb-optin-box {
  display: flex;
  align-items: center;
  gap: 10px;
  min-height: 44px;
  margin: 0;
  color: #fff;
  font-size: 15px;
  font-weight: 700;
  letter-spacing: 0;
  text-transform: none;
  cursor: pointer;
}
.tb-optin .tb-optin-check {
  flex: 0 0 auto;
  width: 22px;
  height: 22px;
  margin: 0;
  accent-color: #F2C94C;
}
.tb-optin p { margin: 4px 0 0; }
.tb-optin a { color: #F2C94C; text-decoration: underline; text-underline-offset: 2px; }
.tb-optin .tb-optin-share { color: rgba(245, 240, 232, 0.5); font-size: 11px; }
.tb-optin .tb-optin-status { color: #F2C94C; font-weight: 700; }
#profile-edit .tb-optin { margin: 14px 0 6px; }
#profile-edit .tb-optin label.tb-optin-box { display: flex; margin: 0; color: #fff; font-size: 15px; }
#profile-edit .tb-optin input.tb-optin-check {
  display: block; width: 22px; height: 22px; margin: 0; padding: 0;
  border-radius: 4px; box-shadow: none; background: none; border: 0;
}

/* 20261008-push-path — Alerts one-tap (seated) + iPhone line */
.tb-alerts-tap[hidden] { display: none !important; }
.tb-alerts-tap { margin: 0 0 12px; text-align: left; }
.tb-alerts-tap .tb-alerts-btn[hidden] { display: none !important; }
.tb-alerts-tap .tb-alerts-btn {
  display: block; width: 100%; min-height: 44px; margin: 0;
  border: 1px solid rgba(242, 201, 76, 0.55); border-radius: 12px;
  background: transparent; color: #F2C94C;
  font-weight: 800; font-size: 14px; letter-spacing: 0.08em; cursor: pointer;
}
.tb-alerts-tap .tb-alerts-btn:disabled { opacity: 0.6; }
.tb-alerts-tap p { margin: 6px 2px 0; font-size: 11.5px; line-height: 1.35; color: rgba(245, 240, 232, 0.55); }
.tb-alerts-tap .tb-alerts-status { color: #F2C94C; font-weight: 700; font-size: 12px; }
#profile-edit .edit-alerts-note { margin: -6px 0 12px; font-size: 11.5px; color: var(--muted); }

/* 20261008-home-frictionless — seated Home: meeting row → MAYBE → [one quiet texts line] → [small alerts tap] → Last Moved */
.tb-optin-nudge[hidden] { display: none !important; }
.tb-optin-nudge {
  display: block;
  margin: -6px 11px 6px auto;
  min-height: 36px;
  padding: 0 4px;
  border: 0;
  background: transparent;
  color: rgba(245, 240, 232, 0.5);
  font-size: 12px;
  font-weight: 600;
  letter-spacing: 0;
  text-transform: none;
  text-align: right;
  -webkit-tap-highlight-color: transparent;
  cursor: pointer;
}
.tb-alerts-tap { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 10px; margin: 0 0 10px; }
.tb-alerts-tap .tb-alerts-btn {
  display: inline-flex; align-items: center; justify-content: center;
  flex: 0 0 auto; width: auto; min-height: 36px; padding: 0 14px;
  border-radius: 999px; font-size: 11.5px; letter-spacing: 0.1em;
}
.tb-alerts-tap p { flex: 1 1 96px; margin: 0; font-size: 11px; line-height: 1.3; }
.tb-alerts-tap p[hidden] { display: none !important; }
.tb-alerts-tap .tb-alerts-status { flex-basis: 100%; }
/* small to the eye, 44px to the thumb */
.tb-optin-nudge, .tb-alerts-tap .tb-alerts-btn { position: relative; }
.tb-optin-nudge::after, .tb-alerts-tap .tb-alerts-btn::after { content: ""; position: absolute; left: 0; right: 0; top: -4px; bottom: -4px; }
/* 20261008-home-frictionless — the same opt-in card inside TAKE YOUR SEAT, under the alerts box (door input/label rules undone) */
#seat-door .tb-optin { margin: 0 0 12px; }
#seat-door .tb-optin label.tb-optin-box { display: flex; margin: 0; color: #fff; font-size: 15px; }
#seat-door .tb-optin input.tb-optin-check {
  display: block; width: 22px; height: 22px; margin: 0; padding: 0;
  border-radius: 4px; box-shadow: none; background: none; border: 0;
}
#seat-door { max-height: calc(100dvh - var(--island) - 16px); overflow-y: auto; overscroll-behavior: contain; -webkit-overflow-scrolling: touch; box-sizing: border-box; }

/* 20261008-founder-contact-pick — founder-only ADD CONTACTS, sits just above the build stamp */
.founder-contacts[hidden], .founder-contacts [hidden] { display: none !important; }
.founder-contacts { margin: 24px auto 0; max-width: 320px; text-align: center; }
.founder-contacts-btn {
  min-height: 44px; padding: 0 22px; border: 1px solid rgba(242, 201, 76, 0.55); border-radius: 999px;
  background: transparent; color: #F2C94C; font-weight: 800; font-size: 13px; letter-spacing: 0.1em; cursor: pointer;
}
.founder-contacts-btn:disabled { opacity: 0.6; }
.founder-contacts-status { margin: 8px 0 0; color: #F2C94C; font-size: 12px; font-weight: 700; }
.founder-contacts-fallback { margin: 8px 0 0; color: rgba(245, 240, 232, 0.6); font-size: 11.5px; line-height: 1.4; }

/* export-for-sendhype — founder only, under ADD CONTACTS */
.founder-export { margin: 18px 0 0; }
.founder-export-skip { display: flex; align-items: center; justify-content: center; gap: 8px; min-height: 44px; margin: 6px 0 0; color: rgba(245, 240, 232, 0.75); font-size: 12px; }
.founder-export-skip input { width: 18px; height: 18px; accent-color: #F2C94C; }
.founder-export-save { display: inline-flex; align-items: center; justify-content: center; margin: 8px 0 0; text-decoration: none; }
.founder-export-save[hidden] { display: none !important; }

/* 20261008-birthday-heads-up — Home small line (same voice as #since-left). Static. */
#bday-line { margin: 10px 18px 0; text-align: center; }
#bday-line[hidden], #bday-line .bday-row[hidden] { display: none !important; }
#bday-line .bday-row { margin: 0; color: #F2C94C; font-size: 15px; line-height: 1.35; }
#bday-line .bday-row + .bday-row { margin-top: 4px; }
#bday-line .bday-name {
  appearance: none; -webkit-appearance: none; background: none; border: 0; padding: 0; margin: 0;
  font: inherit; color: inherit; cursor: pointer;
  text-decoration: underline; text-decoration-thickness: 1px; text-underline-offset: 3px;
  min-height: 24px;
}

/* 20261008-birthday-motion (a) — brothers' line: paints static gold; +600ms one highlight sweep (background-clip:text) 1200ms;
   ~1.6s the bolt sparks (.6 → 1.08 → 1, 420ms, one overshoot). Beat ≤ 2.2s, then the class comes off: still, no glow, no pulse.
   Transform / opacity / background-position only. The bolt is always inline-block so the beat never moves layout. */
#bday-line .bday-bolt { display: inline-block; transform-origin: 50% 60%; }
#bday-line .bday-name { text-decoration-color: #F2C94C; }
#bday-line .bday-row.is-shimmer .bday-txt {
  color: transparent;
  background-image: linear-gradient(100deg, #F2C94C 0%, #F2C94C 40%, #FFF3C4 50%, #F2C94C 60%, #F2C94C 100%);
  background-size: 300% 100%;
  background-position: 100% 0;
  -webkit-background-clip: text;
  background-clip: text;
  animation: bday-sweep 1200ms cubic-bezier(.4, 0, .2, 1) 600ms 1 both;
}
#bday-line .bday-row.is-shimmer .bday-name { color: transparent; }
#bday-line .bday-row.is-shimmer .bday-bolt { animation: bday-spark 420ms cubic-bezier(.34, 1.56, .64, 1) 1600ms 1 both; }
@keyframes bday-sweep {
  0% { background-position: 100% 0; text-shadow: 0 0 0 rgba(242, 201, 76, 0); }
  50% { text-shadow: 0 0 12px rgba(242, 201, 76, .35); }
  100% { background-position: 0% 0; text-shadow: 0 0 0 rgba(242, 201, 76, 0); }
}
@keyframes bday-spark {
  0% { opacity: 0; transform: scale(.6); }
  65% { opacity: 1; transform: scale(1.08); }
  100% { opacity: 1; transform: scale(1); }
}
@media (prefers-reduced-motion: reduce) {
  #bday-line .bday-row.is-shimmer .bday-txt, #bday-line .bday-row.is-shimmer .bday-bolt { animation: none; color: #F2C94C; background: none; }
}

/* 20261008-terry-up-plane-bank — the plane visibly BANKS left ↔ right at 390 (WebKit-safe: one element, one 2D+3D
   transform list with its own perspective(), no preserve-3d, same functions at both ends so it interpolates per function).
   Nose stays right (inner svg rotate(90deg) untouched). Bank left = climb a hair, yaw nose-up 6°, roll 44° (top wing
   recedes, bottom wing nears); bank right mirrors it; level in the middle. Same 3.5s alternate sine = 7s loop as the
   wind field, so the streaks stay in step. Wind untouched. Reduced motion: the block above (animation none, transform
   none !important) still wins → static, level plane. */
.season-plane {
  transform: perspective(100px) translateY(-2px) rotate(-6deg) rotateX(44deg);
  animation-name: season-bank;
  backface-visibility: visible;
}
@keyframes season-bank {
  from { transform: perspective(100px) translateY(-2px) rotate(-6deg) rotateX(44deg); }
  to   { transform: perspective(100px) translateY(2px) rotate(6deg) rotateX(-44deg); }
}

/* 20261009-birthday-everyone — Brothers card: small gold "Birthday today ⚡" pinned bottom-right inside his card (his day only, ET).
   His card keeps its height (no other card moves: Gabriel 0); his bio line ends before the tag. Static. */
.bro-row.bro-row--bday { position: relative; }
.bro-row--bday .bro-bday-tag {
  position: absolute; right: 12px; bottom: 10px; box-sizing: border-box; height: 18px; padding: 0 7px;
  border: 1px solid rgba(242, 201, 76, 0.7); border-radius: 999px; background: rgba(242, 201, 76, 0.12);
  color: #F2C94C; font-size: 10px; font-weight: 700; letter-spacing: 0.04em; line-height: 16px; white-space: nowrap; pointer-events: none;
}
.bro-row--bday .bro-bio-line { padding-right: 112px; }

/* 20261009-plane-bank-big — the bank is OBVIOUS at 390 (WebKit): roll ±60° (was ±44°), yaw ±8°, a clear side-to-side sway
   (±7px, a plain 2D shift outside the perspective so it never skews the bank), slower readable cycle (5s each way = 10s loop, was 3.5s/7s). Same single-element 2D+3D transform list with its own
   perspective() (WebKit-safe, no preserve-3d), same functions at both ends. Labels: events.js keeps the plane clear of every
   text/chip box (PLANE_BANK/PLANE_BOB widened for the bigger sweep). Reduced motion: the earlier block (animation none,
   transform none !important) still wins → static, level plane. Wind field untouched. */
.season-plane {
  transform: translateX(-7px) perspective(100px) translateY(-2px) rotate(-8deg) rotateX(60deg);
  animation-name: season-bank-big;
  animation-duration: 5s;
}
@keyframes season-bank-big {
  from { transform: translateX(-7px) perspective(100px) translateY(-2px) rotate(-8deg) rotateX(60deg); }
  to   { transform: translateX(7px) perspective(100px) translateY(2px) rotate(8deg) rotateX(-60deg); }
}

/* 20261009-fab-clear-terry-320 — narrow + short screens (320x568, 360x640 …) put the fixed FAB over the NEXT GUEST card's right
   edge/arrow before any scroll. There the card ends 56px earlier (FAB 60px at right:6px + 8px air → card right = viewport − 74px,
   past the page's own 18px gutter). The FAB itself is untouched. ≥390px wide or ≥720px tall: no change (390 stays 0 px). */
@media (max-width: 389.98px) and (max-height: 719.98px) {
  #home-announce { margin-right: 56px; }
}

/* 20261009-plane-tilt-real — QA: the ±60° rotateX read as flattening, not a bank. Now the plane TILTS: rotateZ ±25° (left wing
   dips while it sways left, then the right wing while it sways right), rotateX only ±12° for a hint of depth, same 5s-each-way
   readable cycle. Sway 7px; 3px under 360px wide so the TODAY chip keeps ≥8px (events.js planeBank() matches). WebKit-safe:
   one element, same function list at both ends. Reduced motion: the earlier !important block still wins → static, level plane. */
.season-plane {
  transform: translateX(-7px) perspective(100px) translateY(-2px) rotate(-25deg) rotateX(12deg);
  animation-name: season-tilt-real;
  animation-duration: 5s;
}
@keyframes season-tilt-real {
  from { transform: translateX(-7px) perspective(100px) translateY(-2px) rotate(-25deg) rotateX(12deg); }
  to   { transform: translateX(7px) perspective(100px) translateY(2px) rotate(25deg) rotateX(-12deg); }
}
@media (max-width: 359.98px) {
  .season-plane {
    transform: translateX(-3px) perspective(100px) translateY(-2px) rotate(-25deg) rotateX(12deg);
    animation-name: season-tilt-real-narrow;
  }
}
@keyframes season-tilt-real-narrow {
  from { transform: translateX(-3px) perspective(100px) translateY(-2px) rotate(-25deg) rotateX(12deg); }
  to   { transform: translateX(3px) perspective(100px) translateY(2px) rotate(25deg) rotateX(-12deg); }
}

/* 20261009-herbert-fix-plane-320 (plane-room-320) — Chief: at 320 the plane's rotated box at its leftmost tilt touched the TODAY chip (−0.7px) when the
   room between TODAY and the meeting label is tight. Under 360px wide only: the same ±25° tilt / ±12° depth / ±3px sway, drawn at
   0.86 scale, so the rotated box sweeps ≈7px less; events.js splits a too-tight room evenly. 360/390 untouched. Reduced motion:
   the earlier !important block still wins → static, level plane. */
@media (max-width: 359.98px) {
  .season-plane {
    transform: translateX(-3px) perspective(100px) translateY(-2px) rotate(-25deg) rotateX(12deg) scale(0.86);
    animation-name: season-tilt-room-narrow;
  }
}
@keyframes season-tilt-room-narrow {
  from { transform: translateX(-3px) perspective(100px) translateY(-2px) rotate(-25deg) rotateX(12deg) scale(0.86); }
  to   { transform: translateX(3px) perspective(100px) translateY(2px) rotate(25deg) rotateX(-12deg) scale(0.86); }
}


/* 20261010-center-6 — cruise bank ±6°, one pill, alerts switch, last-moved toast, no TODAY chip.
   rotate/translate are separate from transform so a reduced-motion "transform: none !important" cannot freeze the bank. */
.season-chip--today,
.season-chip--today-wear { display: none !important; }
.season-plane {
  transform: none !important;
  animation: season-cruise 5s ease-in-out infinite alternate !important;
  transform-origin: 50% 50%;
}
@keyframes season-cruise {
  from { translate: -7px -2px; rotate: -6deg; }
  to   { translate: 7px 2px; rotate: 6deg; }
}
@media (prefers-reduced-motion: reduce) {
  .season-plane {
    transform: none !important;
    animation: season-cruise 5s ease-in-out infinite alternate !important;
  }
}
@media (max-width: 359.98px) {
  .season-plane { animation: season-cruise 5s ease-in-out infinite alternate !important; }
}
.meet-row-in { display: none !important; }
#rsvp-btn { position: relative; padding-right: 64px; } /* #rsvp-bar #rsvp-btn below widens this for the Alerts label */
#next-meeting { position: relative; }
/* 20261012-seat-trim — the switch lives in #rsvp-bar with the bar (same box), pinned to its right end by CSS from
   first paint. Was position:fixed + JS top/right from the bar's rect: it painted over Terry's card, then jumped. Absolute =
   out of flow, so showing it shifts nothing. #rsvp-bar has no padding/border: the bar's margins collapse through it, so its
   box is exactly the bar's box. */
#rsvp-bar { position: relative; display: block; }
#rsvp-bar > #alerts-tap.tb-alerts-tap {
  position: absolute; z-index: 2; top: 0; bottom: 0; right: 14px; left: auto; width: auto; height: auto; margin: 0; padding: 0;
  background: none; border: 0; display: flex; flex-wrap: nowrap; align-items: center; gap: 6px; pointer-events: none;
}
#rsvp-bar > #alerts-tap .tb-alerts-switch { pointer-events: auto; flex: 0 0 auto; }
#rsvp-bar > #alerts-tap .tb-alerts-label {
  pointer-events: none; font-family: inherit; font-size: 11px; font-weight: 700; line-height: 1; letter-spacing: .04em; text-transform: none;
  color: #1a0505; opacity: .82; white-space: nowrap; text-align: right; line-height: 1.1; letter-spacing: .02em;
}
#rsvp-bar.has-switch #rsvp-btn { padding-right: 112px; }
#optin-home { margin: 10px 0 0; }
/* 20261012-seat-trim — the Home texts card replaces the 'turn on in My Profile' pointer line */
#optin-nudge { display: none !important; }
.tb-alerts-line { margin: 6px 4px 0; font-size: 11px; line-height: 1.35; color: rgba(245,240,232,.72); text-align: right; }
.tb-alerts-line[hidden], .tb-alerts-line [hidden] { display: none !important; }
.tb-alerts-line .tb-alerts-said { color: #FFD84A; font-weight: 700; }
.tb-alerts-line a { color: inherit; text-decoration: underline; }
#alerts-tap.tb-alerts-tap[hidden] { display: none !important; }
.tb-alerts-btn, .tb-alerts-ios, .tb-alerts-status { display: none !important; }
.tb-alerts-switch {
  display: block; width: 46px; height: 28px; padding: 0; border: 0; border-radius: 999px;
  background: #1c1c1c; position: relative; cursor: pointer;
  box-shadow: 0 1px 3px rgba(0,0,0,.45), inset 0 0 0 1px rgba(255,255,255,.5);
  -webkit-tap-highlight-color: transparent;
}
.tb-alerts-switch::after {
  content: ""; position: absolute; top: 3px; left: 3px; width: 22px; height: 22px;
  border-radius: 50%; background: #fff; box-shadow: 0 1px 2px rgba(0,0,0,.35);
  transition: transform .2s ease;
}
.tb-alerts-switch[aria-checked="true"] { background: #111; }
.tb-alerts-switch[aria-checked="true"]::after { transform: translateX(18px); }
body.tb-meet-row #rsvp-btn:not(.is-in) { display: block !important; }
#last-moved { display: none !important; }
#last-moved-toast {
  position: fixed !important;
  top: calc(env(safe-area-inset-top, 0px) + 8px) !important;
  left: 0 !important;
  right: 0 !important;
  bottom: auto !important;
  z-index: 90 !important;
  display: flex !important;
  align-items: center;
  gap: 8px;
  width: max-content;
  max-width: calc(100vw - 24px);
  margin: 0 auto !important;
  padding: 8px 12px 8px 8px;
  border-radius: 999px;
  background: rgba(12,12,12,.94);
  color: #fff;
  font: 600 13px/1.2 -apple-system, system-ui, sans-serif;
  pointer-events: none;
  transform: none !important;
}
#last-moved-toast p { margin: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
#last-moved-toast img, .last-moved-toast-face {
  width: 28px; height: 28px; border-radius: 50%; object-fit: cover; flex: none;
  display: inline-flex; align-items: center; justify-content: center; overflow: hidden;
  background: #333; font-size: 12px;
}
#last-moved-toast img { display: block; }

/* House was starting under the clock. */
#view-more.view {
  padding-top: calc(env(safe-area-inset-top, 0px) + 12px) !important;
}


/* 20261010-center-6 — date + Terry sit in the middle of the meeting pill. Bank is ±6°. */
#meet-row {
  justify-content: center !important;
  padding: 10px 18px !important;
}
#meet-row .meet-row-guest {
  flex: 0 1 auto !important;
}

/* Guest sheet is the speaker. The House voice rail does not sit under him. */
#week-guest-voices { display: none !important; }

/* 20261011-plane-clear-pill — Obie OK (mock): the plane's flight zone rides a little higher, well clear of the red DROP A PIC
   pill, and the bank is a gentle ±5° roll (was the ±6° cruise / ±25° tilt). Sway ±7px kept. The lift moves the WRAP (its
   seat), so events.js fitSeasonPlane/fitSeasonWind measure the raised box and keep every label ≥8px away. Reduced motion: static, level. */
.season-plane-wrap { --plane-lift: 8px; margin-top: calc(-20px - var(--plane-lift)); }
@keyframes season-roll-5 {
  from { translate: -7px -2px; rotate: -5deg; }
  to   { translate: 7px 2px; rotate: 5deg; }
}
.season-plane { animation: season-roll-5 5s ease-in-out infinite alternate !important; }
@media (max-width: 359.98px) {
  .season-plane { animation: season-roll-5 5s ease-in-out infinite alternate !important; }
}
@media (prefers-reduced-motion: reduce) {
  .season-plane { animation: none !important; translate: none !important; rotate: none !important; transform: none !important; }
}

/* 20261011-plane-clear-pill (motion fold) — the plane's SVG carries a calm flight on its own (pure CSS, no timers/observers),
   composed with the ±5° bank + ±7px sway on .season-plane: altitude bob ±2.5px (6.25s per bob), nose pitch ±1.5° timed with it
   (nose up on the climb, down on the descent), and one 300ms 1px turbulence shudder at the end of each 25s cycle, then calm.
   Uses the individual translate/rotate properties, so the SVG's own rotate(90deg) nose-right transform is untouched.
   Reduced motion: static (the earlier !important blocks + below). */
@keyframes season-flight-25 {
  0% { translate: 0 -2.5px; rotate: 0deg; animation-timing-function: cubic-bezier(0.12,0,0.39,0); }
  6.25% { translate: 0 0; rotate: 1.5deg; animation-timing-function: cubic-bezier(0.61,1,0.88,1); }
  12.5% { translate: 0 2.5px; rotate: 0deg; animation-timing-function: cubic-bezier(0.12,0,0.39,0); }
  18.75% { translate: 0 0; rotate: -1.5deg; animation-timing-function: cubic-bezier(0.61,1,0.88,1); }
  25% { translate: 0 -2.5px; rotate: 0deg; animation-timing-function: cubic-bezier(0.12,0,0.39,0); }
  31.25% { translate: 0 0; rotate: 1.5deg; animation-timing-function: cubic-bezier(0.61,1,0.88,1); }
  37.5% { translate: 0 2.5px; rotate: 0deg; animation-timing-function: cubic-bezier(0.12,0,0.39,0); }
  43.75% { translate: 0 0; rotate: -1.5deg; animation-timing-function: cubic-bezier(0.61,1,0.88,1); }
  50% { translate: 0 -2.5px; rotate: 0deg; animation-timing-function: cubic-bezier(0.12,0,0.39,0); }
  56.25% { translate: 0 0; rotate: 1.5deg; animation-timing-function: cubic-bezier(0.61,1,0.88,1); }
  62.5% { translate: 0 2.5px; rotate: 0deg; animation-timing-function: cubic-bezier(0.12,0,0.39,0); }
  68.75% { translate: 0 0; rotate: -1.5deg; animation-timing-function: cubic-bezier(0.61,1,0.88,1); }
  75% { translate: 0 -2.5px; rotate: 0deg; animation-timing-function: cubic-bezier(0.12,0,0.39,0); }
  81.25% { translate: 0 0; rotate: 1.5deg; animation-timing-function: cubic-bezier(0.61,1,0.88,1); }
  87.5% { translate: 0 2.5px; rotate: 0deg; animation-timing-function: cubic-bezier(0.12,0,0.39,0); }
  93.75% { translate: 0 0; rotate: -1.5deg; animation-timing-function: cubic-bezier(0.61,1,0.88,1); }
  98.8% { translate: 0 -2.5px; rotate: 0deg; animation-timing-function: linear; }
  99.1% { translate: 0.5px -1.5px; rotate: 0.4deg; }
  99.4% { translate: -0.5px -3.5px; rotate: -0.4deg; }
  99.7% { translate: 0 -2px; rotate: 0.2deg; }
  100% { translate: 0 -2.5px; rotate: 0deg; }
}
.season-plane-svg { animation: season-flight-25 25s infinite; }
@media (prefers-reduced-motion: reduce) {
  .season-plane-svg { animation: none !important; translate: none !important; rotate: none !important; }
}

/* 20261012-seat-trim — one quiet Home card, same skin as the Home cards (.tb-optin): dark glass, thin line, 12px radius. */
.tb-ask-card { position: relative; margin: 12px 0; padding: 14px 44px 14px 14px; border: 1px solid rgba(255,255,255,.12); border-radius: 12px; background: rgba(255,255,255,.03); color: rgba(245,240,232,.78); }
.tb-ask-card[hidden] { display: none !important; }
.tb-ask-card-title { margin: 0 0 6px; color: #fff; font-size: 17px; font-weight: 800; letter-spacing: .01em; text-transform: none; }
.tb-ask-card-body { margin: 0 0 12px; font-size: 13px; line-height: 1.45; }
.tb-ask-card-go { display: inline-block; padding: 9px 16px; border: 0; border-radius: 999px; background: #FFD84A; color: #1a0505; font-size: 13px; font-weight: 800; letter-spacing: .04em; cursor: pointer; }
.tb-ask-card-x { position: absolute; top: 6px; right: 6px; width: 32px; height: 32px; border: 0; background: none; color: rgba(245,240,232,.6); font-size: 22px; line-height: 1; cursor: pointer; }

/* 20261012-fab-roam — LAB ONLY. Stroll = vertical translate in the right margin (x never changes); the float keeps its
   own transform. Bubble sits beside him at his stroll height, tail still at the bolt. One shot each; no loop. */
html.fab-roam #fab { translate: 0 var(--roam-dy, 0px); transition: translate 900ms cubic-bezier(0.45, 0, 0.25, 1); }
html.fab-roam-up #fab-say { top: var(--roam-say-top); bottom: auto; translate: 0 -50%; max-width: min(240px, calc(100vw - 84px)); }
html.fab-roam:has(#view-between.active) #fab-say { display: block !important; }
#fab.fab-excite img { animation: fabExcite 520ms ease-out 1; }
@keyframes fabExcite { 0% { filter: brightness(1); } 35% { filter: brightness(1.45) drop-shadow(0 0 8px rgba(255,255,255,.7)); } 100% { filter: brightness(1); } }
.fab-roam-circle {
  position: absolute; left: 50%; top: 50%; width: min(330px, 92%); aspect-ratio: 1; translate: -50% -50%;
  border: 3px solid #E0201B; border-radius: 50%; pointer-events: none; z-index: 2;
  box-shadow: 0 0 10px rgba(224, 32, 27, .45);
  animation: fabRoamCircle 2400ms ease-out 1 forwards;
}
.fab-roam-circle.still { animation: fabRoamCircleStill 2400ms linear 1 forwards; }
@keyframes fabRoamCircle { 0% { opacity: 0; scale: .82; } 18% { opacity: 1; scale: 1.03; } 28% { scale: 1; } 80% { opacity: 1; } 100% { opacity: 0; scale: 1; } }
@keyframes fabRoamCircleStill { 0%, 85% { opacity: 1; } 100% { opacity: 0; } }
#fab.fab-roam-pass, html.fab-roam:has(#view-between.active) #fab.fab-roam-pass { animation: fabRoamPass 900ms linear 1; }
@keyframes fabRoamPass { 0% { opacity: 1; } 18%, 82% { opacity: 0; } 100% { opacity: 1; } }
@media (prefers-reduced-motion: reduce) { html.fab-roam #fab { translate: none; transition: none; } #fab.fab-roam-pass { animation: none; } }

@font-face { font-family: "TB Door Script"; src: url("/assets/fonts/kaushan-door.ttf") format("truetype"); font-display: swap; }
/* 20261012-between-doors-v2 — three photo doors on Between. Live text in the dark lower area; sized with clamp() + cqi so each full phrase sits inside the gold border. */
#view-between .between-doors {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 8px;
  margin: 0 0 14px;
}
#view-between .between-door {
  appearance: none;
  -webkit-appearance: none;
  position: relative;
  display: block;
  width: 100%;
  aspect-ratio: 540 / 960;
  padding: 0;
  margin: 0;
  overflow: hidden;
  border-radius: 14px;
  border: 1.5px solid rgba(242, 201, 76, 0.85);
  background: #0b0909;
  container-type: inline-size;
  cursor: pointer;
}
/* 20261013-doors-fill — photo fills the gold door; no baked dark gap. */
#view-between .between-door img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: center center;
  display: block;
}
#view-between .between-door::before {
  content: "";
  position: absolute;
  left: 0; right: 0; bottom: 0;
  height: 48%;
  pointer-events: none;
  z-index: 1;
  background: linear-gradient(to top, rgba(0,0,0,0.88) 0%, rgba(0,0,0,0.62) 42%, rgba(0,0,0,0) 100%);
}
#view-between .between-door-say,
#view-between .between-door-brush { z-index: 2; }
#view-between .between-door-say {
  position: absolute;
  left: 9cqi;
  right: 9cqi;
  bottom: 22cqi;
  display: block;
  text-align: center;
  font-family: "Bebas Neue", Impact, sans-serif;
  font-size: clamp(11px, 16cqi, 30px);
  line-height: 1.02;
  letter-spacing: 0.03em;
  color: #FFFFFF;
  white-space: normal;
  overflow-wrap: normal;
  word-break: keep-all;
  hyphens: none;
  text-shadow: 0 1px 3px rgba(0, 0, 0, 0.7);
}
#view-between .between-door-w,
#view-between .between-door-g { display: inline; white-space: nowrap; }
#view-between .between-door-w { color: #FFFFFF; }
#view-between .between-door-g { color: #F2C94C; }
#view-between .between-door-script {
  display: block;
  white-space: nowrap;
  font-family: "TB Door Script", "Snell Roundhand", cursive;
  font-style: normal;
  font-weight: 400;
  font-size: clamp(9px, 13.5cqi, 25px);
  letter-spacing: 0;
  margin-top: 1cqi;
}
#view-between .between-door-brush {
  position: absolute;
  left: 18cqi;
  right: 18cqi;
  bottom: 13cqi;
  height: clamp(3px, 3.4cqi, 7px);
  border-radius: 50% 40% 60% 45% / 60% 50% 50% 40%;
  background: linear-gradient(90deg, rgba(242,201,76,0) 0%, #F2C94C 14%, #E8B93A 60%, rgba(242,201,76,.55) 88%, rgba(242,201,76,0) 100%);
  transform: rotate(-1.5deg);
}

/* 20261012-between-doors-v2 MOTION — Between only. transform/opacity only. Reduced motion: none of it. */
#view-between .between-door img { animation: bd-drift 26s ease-in-out infinite alternate both; will-change: transform; transform-origin: 50% 30%; }
#view-between .between-door:nth-child(2) img { animation-delay: -8s; transform-origin: 40% 25%; }
#view-between .between-door:nth-child(3) img { animation-delay: -16s; transform-origin: 60% 35%; }
@keyframes bd-drift { from { transform: scale(1) translate(0, 0); } to { transform: scale(1.06) translate(-1.5%, -1%); } }
#view-between .between-door::after {
  content: ""; position: absolute; inset: -1px; border-radius: inherit; pointer-events: none;
  background: linear-gradient(115deg, transparent 40%, rgba(255, 228, 140, .55) 50%, transparent 60%);
  -webkit-mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0); -webkit-mask-composite: xor; mask-composite: exclude; padding: 2px;
  opacity: 0; animation: bd-shimmer 14s ease-in-out infinite;
}
#view-between .between-door:nth-child(2)::after { animation-delay: 1.2s; }
#view-between .between-door:nth-child(3)::after { animation-delay: 2.4s; }
@keyframes bd-shimmer { 0%, 88%, 100% { opacity: 0; } 92% { opacity: 1; } 96% { opacity: 0; } }
#view-between .between-door { transition: transform 420ms cubic-bezier(.34, 1.56, .64, 1); -webkit-tap-highlight-color: transparent; }
#view-between .between-door:active { transform: scale(.955); transition-duration: 120ms; }
#view-between .between-doors--armed .between-door-say,
#view-between .between-doors--armed .between-door-brush { opacity: 0; transform: translateY(10px); }
#view-between .between-doors--armed .between-door-brush { transform: translateY(10px) rotate(-1.5deg); }
#view-between .between-doors--armed.is-in .between-door-say { opacity: 1; transform: none; transition: opacity 600ms ease-out, transform 700ms cubic-bezier(.22, 1, .36, 1); }
#view-between .between-doors--armed.is-in .between-door-brush { opacity: 1; transform: rotate(-1.5deg); transition: opacity 600ms ease-out 180ms, transform 700ms cubic-bezier(.22, 1, .36, 1) 180ms; }
#view-between .between-doors--armed.is-in .between-door:nth-child(2) .between-door-say { transition-delay: 120ms; }
#view-between .between-doors--armed.is-in .between-door:nth-child(3) .between-door-say { transition-delay: 240ms; }
#view-between .between-card-enter { animation: bd-card-in 520ms cubic-bezier(.22, 1, .36, 1) 1 both; }
@keyframes bd-card-in { from { opacity: 0; transform: translateY(14px); } to { opacity: 1; transform: none; } }
#view-between .between-card-enter-1 { animation-delay: 70ms; } #view-between .between-card-enter-2 { animation-delay: 140ms; }
#view-between .between-card-enter-3 { animation-delay: 210ms; } #view-between .between-card-enter-4 { animation-delay: 280ms; }
#view-between .between-card-enter-5 { animation-delay: 350ms; } #view-between .between-card-enter-6 { animation-delay: 420ms; }
#view-between .between-card-enter-7 { animation-delay: 490ms; }
@media (prefers-reduced-motion: reduce) {
  #view-between .between-door img, #view-between .between-door::after, #view-between .between-card-enter { animation: none !important; }
  #view-between .between-door::after { opacity: 0; }
  #view-between .between-door, #view-between .between-door:active { transition: none; transform: none; }
  #view-between .between-doors--armed .between-door-say, #view-between .between-doors--armed .between-door-brush { opacity: 1; transform: none; transition: none; }
  #view-between .between-doors--armed .between-door-brush { transform: rotate(-1.5deg); }
}

/* 20261013-between-gold-entry — one gold entry on Between before posts; opens vault sheet. Mirrored from wip/thunder-drop-vault-proof-20261013. House untouched. */
#view-between .td-entry {
  appearance: none; -webkit-appearance: none;
  display: block; width: 100%; box-sizing: border-box; text-align: left;
  position: relative; margin: 14px 0 16px; padding: 16px 16px 14px 70px;
  border-radius: 18px;
  background: radial-gradient(120% 140% at 0% 0%, rgba(242,201,76,.28), rgba(0,0,0,0) 55%), linear-gradient(160deg, #141008, #000 70%);
  border: 2px solid #F2C94C;
  box-shadow: 0 0 0 1px rgba(242,201,76,.35), 0 0 22px rgba(242,201,76,.55), 0 0 46px rgba(227,6,0,.25), inset 0 0 18px rgba(242,201,76,.18);
  overflow: hidden; cursor: pointer; color: inherit; font: inherit;
}
#view-between .td-entry::after {
  content: ""; position: absolute; inset: 0; pointer-events: none;
  background: linear-gradient(105deg, transparent 35%, rgba(255,240,180,.35) 48%, transparent 60%);
  transform: translateX(-120%);
  animation: td-sweep 4.8s ease-in-out infinite;
}
@keyframes td-sweep {
  0%, 70%, 100% { transform: translateX(-120%); opacity: 0; }
  78% { opacity: 1; }
  92% { transform: translateX(120%); opacity: 0; }
}
#view-between .td-bolt {
  position: absolute; left: 14px; top: 50%; transform: translateY(-50%);
  width: 44px; height: 44px; color: #F2C94C;
  filter: drop-shadow(0 0 8px #F2C94C) drop-shadow(0 0 16px rgba(227,6,0,.6));
}
#view-between .td-bolt svg { display: block; width: 100%; height: 100%; }
#view-between .td-kick { font-size: 10px; letter-spacing: .2em; font-weight: 800; color: #F2C94C; margin: 0 0 2px; }
#view-between .td-title {
  font-family: "Bebas Neue", Impact, sans-serif; font-size: 34px; line-height: .95; letter-spacing: .05em;
  color: #fff; margin: 0; -webkit-text-stroke: 1px #E30600; paint-order: stroke fill;
  text-shadow: 0 0 12px rgba(242,201,76,.6);
}
#view-between .td-sub { color: #f4f4f4; font-size: 13px; margin: 4px 0 10px; }
#view-between .td-open {
  display: inline-block; background: #F2C94C; color: #000; font-weight: 800; font-size: 13px;
  letter-spacing: .08em; padding: 8px 14px; border-radius: 999px; box-shadow: 0 0 14px rgba(242,201,76,.7);
}
#td-scrim { position: fixed; inset: 0; background: rgba(0,0,0,.6); z-index: 9000; border: 0; padding: 0; cursor: pointer; }
#td-sheet {
  position: fixed; left: 0; right: 0; bottom: var(--dock);
  height: min(74%, calc(100dvh - var(--dock) - var(--island, 0px)));
  z-index: 9001; background: #0b0b0b; border-top: 2px solid #F2C94C;
  border-radius: 22px 22px 0 0; box-shadow: 0 -10px 40px rgba(242,201,76,.35);
  padding: 10px 16px 16px; overflow: auto; overscroll-behavior: contain;
  font-family: Inter, system-ui, sans-serif;
}
#td-sheet .td-grab { width: 40px; height: 4px; background: #444; border-radius: 4px; margin: 0 auto 10px; }
#td-sheet .td-sh-title {
  font-family: "Bebas Neue", Impact, sans-serif; font-size: 30px; color: #fff; letter-spacing: .05em; margin: 0;
  -webkit-text-stroke: 1px #E30600; paint-order: stroke fill;
}
#td-sheet .td-sh-title b { color: #F2C94C; font-weight: 400; -webkit-text-stroke: 0; }
#td-sheet .td-sh-sub { color: #9a9a9a; font-size: 11px; letter-spacing: .14em; font-weight: 700; margin: 2px 0 12px; }
#td-sheet .td-grid { display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 8px; }
#td-sheet .td-card {
  border: 1px solid rgba(242,201,76,.55); border-radius: 14px; background: #000; padding: 8px;
  box-shadow: 0 0 10px rgba(242,201,76,.18);
}
#td-sheet .td-card:last-child { grid-column: 2; }
#td-sheet .td-lane { color: #F2C94C; font: 800 9px Inter, sans-serif; letter-spacing: .14em; }
#td-sheet .td-ct {
  font-family: "Bebas Neue", Impact, sans-serif; font-size: 16px; line-height: 1; margin: 2px 0 6px; min-height: 32px;
  background: linear-gradient(90deg, #fff 40%, #F2C94C 55%, #fff 70%);
  -webkit-background-clip: text; background-clip: text; color: transparent;
}
#td-sheet .td-clip {
  aspect-ratio: 9/16; height: 92px; margin: 0 auto; border: 1px dashed #666; border-radius: 8px;
  display: flex; align-items: center; justify-content: center; text-align: center; color: #9a9a9a;
  font: 600 10px Inter, sans-serif;
  background: repeating-linear-gradient(45deg, #111 0 8px, #161616 8px 16px);
}
#td-sheet .td-verse {
  margin-top: 6px; border-left: 2px solid #E30600; padding: 4px 6px; color: #9a9a9a;
  font: italic 600 10px Inter, sans-serif;
}
@media (prefers-reduced-motion: reduce) {
  #view-between .td-entry::after { animation: none !important; opacity: 0; transform: none; }
}

/* 20261013-between-lane-kill — original baked doors (words+gold border in art): contain, no CSS labels/gradient/border; drift ≤1.03. */
#view-between .between-door { border: 0; background: transparent; border-radius: 0; overflow: hidden; }
#view-between .between-door img { object-fit: contain; object-position: center; }
#view-between .between-door::before { content: none; display: none; }
#view-between .between-door-say, #view-between .between-door-brush { display: none; }
#view-between .between-door img { transform-origin: 50% 50% !important; }
#view-between .between-door::after { display: none; }
@keyframes bd-drift { from { transform: scale(1); } to { transform: scale(1.03); } }

/* Thunder Drop card motion — transform/opacity only; nothing blocks taps. */
#view-between .td-entry { isolation: isolate; transition: transform 380ms cubic-bezier(.34,1.56,.64,1); -webkit-tap-highlight-color: transparent; }
#view-between .td-entry > * { position: relative; z-index: 2; }
#view-between .td-entry .td-bolt { position: absolute; z-index: 2; }
#view-between .td-entry::before {
  content: ""; position: absolute; inset: 0; border-radius: inherit; padding: 2px; pointer-events: none; z-index: 3;
  background: linear-gradient(90deg, transparent 0 40%, rgba(255,240,180,.95) 50%, transparent 60% 100%) 0 0 / 300% 100%;
  -webkit-mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0); -webkit-mask-composite: xor; mask-composite: exclude;
  opacity: .85; animation: td-orbit 7s ease-in-out infinite;
}
@keyframes td-orbit { 0% { background-position: 100% 0; } 60%, 100% { background-position: 0% 0; } }
@supports not (mask-composite: exclude) { #view-between .td-entry::before { display: none; } }
#view-between .td-crackle {
  position: absolute !important; inset: 0; z-index: 0 !important; pointer-events: none; opacity: .0;
  background:
    radial-gradient(1px 1px at 22% 30%, rgba(255,240,180,.9), transparent 60%),
    radial-gradient(1px 1px at 68% 18%, rgba(255,240,180,.8), transparent 60%),
    radial-gradient(1.5px 1.5px at 84% 72%, rgba(255,240,180,.8), transparent 60%),
    radial-gradient(1px 1px at 40% 82%, rgba(255,240,180,.7), transparent 60%),
    linear-gradient(120deg, transparent 47%, rgba(242,201,76,.25) 48%, transparent 49%);
  animation: td-crackle 5.5s steps(1, end) infinite;
}
@keyframes td-crackle { 0%, 100% { opacity: .08; } 31% { opacity: .22; } 33% { opacity: .06; } 62% { opacity: .16; } 64% { opacity: .08; } }
#view-between .td-armed .td-title { opacity: 0; transform: scale(1.35) translateY(-6px); }
#view-between .td-armed .td-bolt svg { opacity: 0; transform: translateY(-14px) scale(.7); }
#view-between .td-armed.td-in .td-title { opacity: 1; transform: none; transition: opacity 180ms ease-out 120ms, transform 420ms cubic-bezier(.2,1.6,.4,1) 120ms; }
#view-between .td-armed.td-in .td-bolt svg { opacity: 1; transform: none; animation: td-strike 700ms ease-out both; }
@keyframes td-strike { 0% { opacity: 0; transform: translateY(-14px) scale(.7); } 30% { opacity: 1; transform: none; } 40% { opacity: .3; } 50% { opacity: 1; } 60% { opacity: .5; } 100% { opacity: 1; transform: none; } }
#view-between .td-open { animation: td-pulse 6s ease-in-out 2s infinite; transition: transform 320ms cubic-bezier(.34,1.8,.64,1); }
@keyframes td-pulse { 0%, 82%, 100% { transform: scale(1); } 88% { transform: scale(1.06); } 94% { transform: scale(.99); } }
#view-between .td-entry:active { transform: scale(.975); transition-duration: 110ms; }
#view-between .td-entry:active .td-open { animation: none; transform: scale(.92); transition-duration: 100ms; }
@media (prefers-reduced-motion: reduce) {
  #view-between .between-door img { animation: none !important; transform: none !important; }
  #view-between .td-entry::before, #view-between .td-crackle, #view-between .td-open, #view-between .td-bolt svg { animation: none !important; }
  #view-between .td-crackle { opacity: .1; }
  #view-between .td-armed .td-title, #view-between .td-armed .td-bolt svg { opacity: 1; transform: none; transition: none; }
  #view-between .td-entry, #view-between .td-entry:active, #view-between .td-entry:active .td-open { transition: none; transform: none; }
}
/* 20261013-between-lane-kill — doors are thumb tiles (≈80px, 9:16), one compact centered row; no drift. */
#view-between .between-doors { display: flex !important; justify-content: center; gap: 12px; grid-template-columns: none; }
#view-between .between-door { width: 80px !important; flex: 0 0 80px; aspect-ratio: 176 / 313; transition: transform 380ms cubic-bezier(.34,1.56,.64,1); }
#view-between .between-door img { animation: none !important; transform: none !important; will-change: auto; }
@media (hover: hover) { #view-between .between-door:hover { transform: translateY(-3px); } }
#view-between .between-door:active { transform: scale(.94); transition-duration: 110ms; }
@media (prefers-reduced-motion: reduce) { #view-between .between-door:hover, #view-between .between-door:active { transform: none; } }

/* 20261013-say-it-slim — Between composer: single-line box at rest (44px) that grows to ~4 lines (JS input handler, max 112px),
   compact gold SEND IT inline right; ≤340px it drops below as a 40px full-width button. Tighter padding (~half height). */
#view-between .between-door-write { gap: 6px; padding: 0 6px 4px; }
#view-between .between-say-row { display: flex; align-items: flex-end; gap: 8px; }
#view-between .between-door-write .between-say-row #between-say {
  flex: 1 1 auto; min-width: 0; width: auto; min-height: 44px; height: 44px; max-height: 112px;
  padding: 11px 12px; line-height: 20px; font-size: 16px; resize: none; overflow-y: hidden;
}
#view-between .between-door-write .between-say-row #between-send {
  flex: 0 0 auto; height: 44px; margin: 0; padding: 0 14px; border-radius: 8px;
  background: #F2C94C; color: #0b0b0b; border: 1px solid #F2C94C; font-size: 13px; letter-spacing: 0.08em; text-align: center; white-space: nowrap;
}
#view-between .between-door-write .between-say-row #between-send:disabled { opacity: 0.35; }
#view-between .between-door-write .between-hold { margin: 2px 0 0; }
@media (max-width: 340px) {
  #view-between .between-say-row { flex-direction: column; align-items: stretch; gap: 6px; }
  #view-between .between-door-write .between-say-row #between-send { width: 100%; height: 40px; }
}

/* 20261013-bubble-legible-react — legible bubble: system font, 15px/600, #111 on white, ≤2 lines, shrink-to-fit ≤240px.
   In: scale+fade 250ms with slight overshoot. Out: existing shrink-back (now a softer fade). Name: one gold shimmer.
   Reduced motion: no motion. */
#fab-say {
  font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
  font-size: 15px; font-weight: 600; font-style: normal; color: #111; line-height: 1.3; letter-spacing: 0.01em;
  text-transform: none; width: max-content; max-width: min(240px, calc(100vw - 96px)); box-sizing: border-box;
  overflow: visible; overflow-wrap: break-word;
}
#fab-say:not([hidden]) {
  display: block; /* 20261013-bubble-pointer — soft limit (no clamp/clip) so the pointer shows; lines verified ≤2 lines */
  animation: fab-say-pop 250ms cubic-bezier(0.34, 1.56, 0.64, 1) 1 both;
}
@keyframes fab-say-pop { 0% { opacity: 0; transform: scale(0.82); } 100% { opacity: 1; transform: scale(1); } }
@keyframes fab-say-fade { 0% { opacity: 1; transform: scale(1); } 100% { opacity: 0; transform: scale(0.96); } }
#fab-say.fab-say-out:not([hidden]) { animation: fab-say-fade 280ms ease-out 1 both; }
#fab-say .fab-say-name {
  background: linear-gradient(100deg, #111 0%, #111 38%, #D4A017 50%, #111 62%, #111 100%);
  background-size: 260% 100%; background-position: 100% 0;
  -webkit-background-clip: text; background-clip: text; -webkit-text-fill-color: transparent; color: #111;
  animation: fab-say-name-shine 900ms ease-out 260ms 1 both;
}
@keyframes fab-say-name-shine { 0% { background-position: 100% 0; } 100% { background-position: 0% 0; } }
@media (prefers-reduced-motion: reduce) {
  #fab-say:not([hidden]), #fab-say.fab-say-out:not([hidden]), #fab-say .fab-say-name { animation: none; }
  #fab-say .fab-say-name { background: none; -webkit-text-fill-color: #111; }
}
/* 20261013-bubble-two-beat + 20261013-bubble-experience — name burst, edge crackle, letter drop, shimmer, corner spark;
   line morph + type-on + float; puff exit + rising sparks. Settled text ≥15px. pointer-events none. Reduced motion: none. */
@property --fab-crackle { syntax: '<angle>'; inherits: false; initial-value: 0deg; }
#fab-say { text-align: center; text-wrap: balance; }
#fab-say.fab-say-beat1 { font-size: 17px; font-weight: 800; letter-spacing: 0.05em; }
#fab-say .fab-say-name { text-transform: uppercase; }
#fab-say.fab-say-burst:not([hidden]) { animation: fab-say-burst 620ms cubic-bezier(0.3, 1.4, 0.5, 1) 1 both; transform-origin: right center; }
@keyframes fab-say-burst {
  0% { transform: scale(0); opacity: 0; } 45% { transform: scale(1.15) rotate(-3deg); opacity: 1; }
  65% { transform: scale(0.97) rotate(2deg); } 82% { transform: scale(1.02) rotate(-1deg); } 100% { transform: scale(1) rotate(0); opacity: 1; }
}
#fab-say.fab-say-burst::before {
  content: ""; position: absolute; inset: -2px; border-radius: 16px; padding: 2px; pointer-events: none;
  background: conic-gradient(from var(--fab-crackle), transparent 0deg, transparent 250deg, #FFE27A 300deg, #F2C94C 330deg, #fff 345deg, transparent 360deg);
  -webkit-mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0); -webkit-mask-composite: xor;
  mask: linear-gradient(#000 0 0) content-box exclude, linear-gradient(#000 0 0);
  animation: fab-crackle 700ms linear 300ms 1 both;
}
@keyframes fab-crackle { 0% { --fab-crackle: 0deg; opacity: 1; } 90% { opacity: 1; } 100% { --fab-crackle: 360deg; opacity: 0; } }
#fab-say .fab-say-ch { display: inline-block; -webkit-text-fill-color: #111; animation: fab-ch-drop 360ms cubic-bezier(0.3, 1.5, 0.5, 1) calc(220ms + var(--i) * 55ms) 1 both; }
@keyframes fab-ch-drop { 0% { transform: translateY(-14px); opacity: 0; } 100% { transform: translateY(0); opacity: 1; } }
#fab-say.fab-say-burst .fab-say-name { animation-delay: 900ms; }
#fab-say .fab-say-spark {
  position: absolute; left: -6px; top: -10px; font-size: 16px; line-height: 1; pointer-events: none;
  animation: fab-spark-pop 700ms ease-out 520ms 1 both;
}
@keyframes fab-spark-pop { 0% { transform: scale(0) rotate(-30deg); opacity: 0; } 40% { transform: scale(1.3) rotate(10deg); opacity: 1; } 100% { transform: translate(-6px, -10px) scale(0.8) rotate(0); opacity: 0; } }
#fab-say.fab-say-morph { transition: width 340ms cubic-bezier(0.3, 1.2, 0.5, 1), height 340ms cubic-bezier(0.3, 1.2, 0.5, 1); overflow: visible; }
#fab-say.fab-say-line:not([hidden]):not(.fab-say-out) { animation: fab-say-float 2.6s ease-in-out 1 both; }
@keyframes fab-say-float { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-3px); } }
#fab-say .fab-say-rest { visibility: hidden; }
#fab-say.fab-say-line.fab-say-out:not([hidden]) { animation: fab-say-puff 280ms ease-out 1 both; }
@keyframes fab-say-puff { 0% { transform: scale(1); opacity: 1; } 100% { transform: scale(1.14); opacity: 0; } }
.fab-spark-up {
  position: fixed; z-index: 32; width: 5px; height: 5px; border-radius: 50%; pointer-events: none;
  background: #FFD84A; box-shadow: 0 0 6px #F2C94C; animation: fab-spark-up 1000ms ease-out 1 both;
}
@keyframes fab-spark-up { 0% { transform: translateY(0) scale(1); opacity: 1; } 100% { transform: translateY(-34px) scale(0.3); opacity: 0; } }
@media (prefers-reduced-motion: reduce) {
  #fab-say.fab-say-burst:not([hidden]), #fab-say.fab-say-burst::before, #fab-say .fab-say-ch, #fab-say .fab-say-spark,
  #fab-say.fab-say-line:not([hidden]), #fab-say.fab-say-line.fab-say-out:not([hidden]), .fab-spark-up { animation: none; }
  #fab-say.fab-say-burst::before, #fab-say .fab-say-spark, .fab-spark-up { display: none; }
  #fab-say.fab-say-morph { transition: none; }
}

/* 20261013-drop-vault-live — vault card ahead of the doors + Drop cards in the existing #td-sheet. Gold #F5C518 on black, white support. */
#view-between .td-entry { margin: 0 0 14px; }
#td-sheet .td-close { position: absolute; right: 12px; top: 10px; width: 36px; height: 36px; border-radius: 50%; border: 1px solid #F5C518; background: #000; color: #F5C518; font-size: 16px; line-height: 1; }
#td-sheet .td-close:focus-visible, #td-sheet .tdv-btn:focus-visible { outline: 2px solid #fff; outline-offset: 2px; }
#td-sheet .tdv-list { display: flex; flex-direction: column; gap: 16px; padding-bottom: 8px; }
#td-sheet .tdv-card { position: relative; background: #000; border: 1px solid rgba(245,197,24,.6); border-radius: 16px; padding: 14px 16px 16px; color: #fff; box-shadow: 0 0 14px rgba(245,197,24,.18); }
#td-sheet .tdv-top { display: flex; align-items: center; gap: 6px; }
#td-sheet .tdv-logo { height: 30px; width: auto; display: block; }
#td-sheet .tdv-bolt { width: 14px; height: 14px; color: #F5C518; display: inline-block; }
#td-sheet .tdv-bolt svg { width: 100%; height: 100%; display: block; }
#td-sheet .tdv-num { margin-left: auto; color: #F5C518; font: 800 10px Inter, system-ui, sans-serif; letter-spacing: .16em; }
#td-sheet .tdv-rule { border: 0; height: 1px; background: #F5C518; margin: 10px 0; opacity: .8; }
#td-sheet .tdv-lane { margin: 0; color: #F5C518; font: 800 11px Inter, system-ui, sans-serif; letter-spacing: .18em; }
#td-sheet .tdv-title { margin: 2px 0 10px; color: #F5C518; font-family: "Bebas Neue", Impact, sans-serif; font-weight: 400; font-size: 40px; line-height: .95; letter-spacing: .02em; }
#td-sheet .tdv-hero { width: 100%; aspect-ratio: 1 / 1; max-height: 300px; border-radius: 12px; overflow: hidden; background: #0b0b0b; }
#td-sheet .tdv-hero-img { width: 100%; height: 100%; object-fit: cover; display: block; }
#td-sheet .tdv-hero-gap { width: 100%; height: 100%; box-sizing: border-box; border: 2px dashed #F5C518; border-radius: 12px; display: flex; flex-direction: column; align-items: center; justify-content: center; color: #F5C518; font: 800 14px Inter, system-ui, sans-serif; letter-spacing: .16em; text-align: center; }
#td-sheet .tdv-hero-gap small { margin-top: 6px; color: #fff; font: 600 12px Inter, system-ui, sans-serif; letter-spacing: 0; opacity: .8; }
#td-sheet .tdv-thunder { display: block; width: 56px; height: 56px; margin: 10px auto 4px; pointer-events: none; }
#td-sheet .tdv-hook { margin: 4px 0 8px; color: #fff; font: 700 17px/1.3 Inter, system-ui, sans-serif; text-align: center; }
#td-sheet .tdv-verse { margin: 0 0 10px; color: #fff; font: 500 14px/1.45 Inter, system-ui, sans-serif; text-align: center; opacity: .92; }
#td-sheet .tdv-verse cite { display: block; margin-top: 3px; color: #F5C518; font: 800 11px Inter, system-ui, sans-serif; letter-spacing: .12em; font-style: normal; text-transform: uppercase; }
#td-sheet .tdv-safety { margin: 0 0 4px; color: #fff; font: 600 12px/1.35 Inter, system-ui, sans-serif; text-align: center; opacity: .8; }
#td-sheet .tdv-credit { margin: 0 0 10px; color: #bdbdbd; font: 600 11px Inter, system-ui, sans-serif; text-align: center; }
#td-sheet .tdv-btn { display: block; text-align: center; padding: 13px 14px; border-radius: 10px; background: #F5C518; color: #000; font: 800 14px Inter, system-ui, sans-serif; letter-spacing: .12em; text-decoration: none; }
#td-sheet .tdv-hero:has(.tdv-hero-img) { aspect-ratio: auto; max-height: none; }
#td-sheet .tdv-hero-img { height: auto; }
#td-sheet .tdv-hero + .tdv-hook { margin-top: 12px; }

/* 20261013-vault-player — full-screen in-app player over the vault sheet. */
#tdv-player { position: fixed; inset: 0; z-index: 9100; background: rgba(0,0,0,.94); display: flex; align-items: center; justify-content: center; padding: calc(var(--sat, 0px) + 56px) 12px calc(var(--sab, 0px) + 16px); }
#tdv-player .tdv-pl-frame { width: min(100%, calc((100dvh - 96px) * 9 / 16)); aspect-ratio: 9 / 16; border: 1px solid #F5C518; border-radius: 14px; overflow: hidden; background: #000; box-shadow: 0 0 24px rgba(245,197,24,.3); }
#tdv-player iframe { width: 100%; height: 100%; border: 0; display: block; }
#tdv-player .tdv-pl-close { position: absolute; top: calc(var(--sat, 0px) + 10px); right: 12px; width: 40px; height: 40px; border-radius: 50%; border: 1px solid #F5C518; background: #000; color: #F5C518; font-size: 18px; }
#tdv-player .tdv-pl-close:focus-visible { outline: 2px solid #fff; outline-offset: 2px; }
#td-sheet button.tdv-btn { width: 100%; border: 0; cursor: pointer; }

/* 20261013-drop-routes — quiet held-drop line, desktop wide vault layout + phone line. */
#td-sheet .tdv-soon { margin: 0 0 12px; padding: 10px 12px; border: 1px dashed rgba(245,197,24,.55); border-radius: 10px; color: #fff; font: 600 13px Inter, system-ui, sans-serif; text-align: center; }
#td-sheet .tdv-phone { margin: 0 0 12px; color: #bdbdbd; font: 500 12px Inter, system-ui, sans-serif; }
#td-sheet.tdv-wide { left: 50%; right: auto; bottom: auto; top: 50%; transform: translate(-50%, -50%); width: min(880px, calc(100vw - 64px)); height: min(86vh, 900px); border: 2px solid #F2C94C; border-radius: 22px; padding: 18px 28px 24px; }
#td-sheet.tdv-wide .tdv-list { display: grid; grid-template-columns: repeat(auto-fill, minmax(360px, 1fr)); gap: 20px; }
/* 20261013-imin-center — I'M IN label dead-center. The right padding (64/112px) was reserving room for the Alerts switch
   (absolutely placed, pointer-events only on the switch) and pushed the label ~25px left. Symmetric padding + flex centering;
   +1px on the left balances the 2px trailing letter-spacing. Height / behavior unchanged; the switch still sits at the right. */
#rsvp-btn:not(.is-in), #rsvp-bar.has-switch #rsvp-btn:not(.is-in) {
  display: flex; align-items: center; justify-content: center; text-align: center; padding-left: 15px; padding-right: 14px;
}
/* 20261014-readiness-cand — Unified I'M IN (CANDIDATE, not live). One shell: red bar on top, consent card fused below
   (shared radius + red perimeter). Label stays geometric center (symmetric padding from imin-center). Alerts switch is its
   own hit target; ≤374px the "Alerts" word folds (switch keeps aria-label "Alerts") so the label never meets the switch.
   Motion: press 150ms .98; switch 190ms; no idle animation; reduced-motion = instant. */
/* joined shell (v2): when the texts card shows under the bar, the button's lower corners square off and its 8px drop edge
   goes, so button + card read as one rounded shell (shared 16px outer radius, shared red perimeter). Visual only. */
#rsvp-bar:has(~ #optin-home:not([hidden]) .tb-optin-check:checked) #rsvp-btn { border-radius: 16px 16px 0 0; margin-bottom: 0; }
#rsvp-bar:has(~ #optin-home:not([hidden]) .tb-optin-check:checked) #rsvp-btn:not(.is-in) { box-shadow: 0 0 24px rgba(227,6,0,.45), inset 0 -1px 0 rgba(0,0,0,.25); }
#rsvp-bar:has(~ #optin-home:not([hidden]) .tb-optin-check:checked) ~ #optin-home.tb-imin-unified { margin-top: 0; border: 1px solid rgba(227,6,0,.6); border-top: 0; box-shadow: 0 10px 24px rgba(227,6,0,.18); }
#optin-home.tb-imin-unified { margin: 0 0 12px; border-top: 0; border-radius: 0 0 16px 16px; border-color: rgba(200,16,46,.55); background: linear-gradient(#141416,#0b0b0c); padding: 12px 14px; }
#optin-home .tb-optin-rules { font-size: 12px; line-height: 1.4; }
#rsvp-btn:not(.is-in) { transition: transform 150ms cubic-bezier(.3,.7,.4,1), filter 150ms; }
#rsvp-btn:not(.is-in):active { transform: scale(.98); filter: brightness(.92); }
#rsvp-bar > #alerts-tap .tb-alerts-switch { transition: background-color 190ms ease; }
@media (max-width: 374px) { #rsvp-bar > #alerts-tap .tb-alerts-label { display: none; } #rsvp-bar > #alerts-tap.tb-alerts-tap { right: 10px; } }
@media (prefers-reduced-motion: reduce) { #rsvp-btn:not(.is-in), #rsvp-bar > #alerts-tap .tb-alerts-switch { transition: none; } #rsvp-btn:not(.is-in):active { transform: none; } }
/* 20261014-readiness-a3 — a11y: Alerts word white (AA on red), switch hit area ≥44×44 (invisible ::before, visual unchanged),
   text box row already ≥44px tall and the whole label is tappable; tighter spacing ≤359px. CSS only. */
#rsvp-bar > #alerts-tap .tb-alerts-label { color: #fff; opacity: 1; font-size: 12px; font-weight: 800; }
#rsvp-bar > #alerts-tap .tb-alerts-switch::before { content: ""; position: absolute; left: -6px; right: -6px; top: -8px; bottom: -8px; }
#rsvp-bar > #alerts-tap .tb-alerts-switch:focus-visible { outline: 3px solid #F2C94C; outline-offset: 3px; }
#optin-home .tb-optin-check:focus-visible { outline: 3px solid #F2C94C; outline-offset: 2px; }
@media (max-width: 359px) { #optin-home.tb-imin-unified { padding: 10px 12px; } #optin-home .tb-optin-box { font-size: 14px; gap: 8px; } }

/* 20261014-r1-atrim — Home after seated: the big "Text me" box is gone. Not opted in → nothing here (seat sheet + My Profile
   keep the full unchecked box with the filed fine print; the quiet #optin-nudge still points to My Profile).
   Opted in → one small "Texts on" line fused under the bar. CSS only: text-optin.js, alerts-tap.js, sms_consents path untouched. */
#optin-home .tb-optin-on { display: none; }
#optin-home.tb-imin-unified:not(:has(.tb-optin-check:checked)) { display: none !important; }
#optin-home.tb-imin-unified:has(.tb-optin-check:checked) { padding: 6px 14px; }
#optin-home:has(.tb-optin-check:checked) .tb-optin-box,
#optin-home:has(.tb-optin-check:checked) .tb-optin-rules,
#optin-home:has(.tb-optin-check:checked) .tb-optin-status { display: none !important; }
#optin-home:has(.tb-optin-check:checked) .tb-optin-on { display: block; margin: 0; font-size: 12px; font-weight: 700; color: #F5F0E8; letter-spacing: .5px; text-align: center; }

/* 20261014-r2-home — Home layout repairs (CSS + one inline-script line). I'M IN, birthday data source, Between: untouched.
   1. Ask card no longer self-dismisses on pagehide (it vanished after a tab switch and left a gap); × or Ask Thunder still dismiss it.
   2. One Ask surface at a time: while the Ask card shows, the Meet Thunder suggestion block stays out; it returns once the card is dismissed. #fab unchanged.
   3. Last-moved toast ("… put a pic on the wall") no longer lands on the logo: low-left above the dock, clear of #fab.
   4. Birthday sweep rendering: the tappable name is its own box, so the line's background-clip:text could not paint it and it went blank. Name stays solid gold during the beat. */
#view-home:has(#ask-card:not([hidden])) #meet-thunder { display: none !important; }
#last-moved-toast { top: auto !important; bottom: calc(env(safe-area-inset-bottom, 0px) + 76px) !important; left: 12px !important; right: auto !important; margin: 0 !important; max-width: calc(100vw - 100px) !important; }
#bday-line .bday-row.is-shimmer .bday-name { color: #F2C94C !important; -webkit-text-fill-color: #F2C94C; }

/* 20261014-r2b-terry-chip — Obie 6:21: remove ONLY Terry's small face+name chip from the seated Home date row. The row keeps
   its date, its tap (opens Events / Time & Place) and its aria-label; the full Terry card below is untouched. last-moved.js
   still fills the chip (no logic/data change); it just never shows. Row is centered flex, so the date re-centers (no gap). */
#meet-row .meet-row-guest { display: none !important; }

/* 20261014-r3q-dropmove — R3p's 3 CSS order rules removed: reading order is now fixed in the DOM by src/between-order.js
   (the CSS order also tore the LOOKING FOR write form ~460px away from its card for seated members). */

/* 20261014-r3s-events-tight — Events only, CSS only.
   (1) DROP A PIC pulled up into the season stage's empty bottom band (stage is a fixed 128px; dates/plane end ~34px above
       its bottom at every width). The button still clears the plane's glide + bank and the wind band (measured in R3s report).
   (2) Photo grid uses the full column width: the 48px FAB gutter is removed. The FAB floats over at most part of one
       right-column tile at a time, and the wall scrolls, so no tile stays untappable. The bottom padding (last row ends
       above the FAB) is kept. One #fab, Gabriel untouched, thumbnails unchanged (3 across, 4px gap, small squares). */
#view-events > #season-stage { margin-bottom: -26px; }   /* DROP A PIC is inline-block: pull via the stage's bottom margin */
#view-events > #drop-pic { position: relative; z-index: 4; }
#night-row { padding-right: 0; }
/* 20261014-r3t-slimgutter — Events photo grid ONLY: slim right gutter beside Thunder. Season stage / plane / DROP A PIC untouched. */
/* 20261015-heavy-walk1 — slim 20px gutter removed too: photos fill the column edge to edge. */

/* 20261014-r3w-centered — Obie: Terry + educational Thunder = one centered piece. Terry's type block is centered on the
   card's axis (symmetric 40px side padding, centered tag/name/underline/tease); card box and photo unchanged. */
#home-announce.announce--poster .announce-main { padding-left: 40px; padding-right: 40px; align-items: center; text-align: center; }
#home-announce.announce--poster #announce-tag { margin-left: auto; margin-right: auto; }
#home-announce.announce--poster #announce-title::after { margin-left: auto; margin-right: auto; }
#home-announce.announce--poster #announce-photo { object-position: center 28%; }
/* 20261014-r3w-centered — Thunder block: 3 chips (top pair + one centered below him) + centered education line. */
#meet-thunder { flex-direction: column; }
#meet-thunder .mt-bubble--ll { left: 50%; right: auto; transform: translateX(-50%); text-align: center; max-width: 70%; white-space: nowrap; }
#meet-thunder .mt-bubble--ll::after { left: 50%; right: auto; margin-left: -5px; }
#meet-thunder .mt-edu-line { margin: 14px auto 0; padding: 0 24px; max-width: 340px; text-align: center; font-size: 14px; line-height: 1.45; color: rgba(245,240,232,.78); cursor: pointer; }
#meet-thunder .mt-edu-line strong { display: block; margin-bottom: 2px; color: #fff; font-size: 17px; font-weight: 800; }
/* 20261014-r3x-phdfx — education line one-shot FX. Static & readable unless JS arms it (.fx-arm) and plays it (.fx-go). */
#meet-thunder .mt-edu-line .fx-head { position: relative; overflow: hidden; }
#meet-thunder .mt-edu-line .fx-t, #meet-thunder .mt-edu-line .fx-tail { display: inline-block; }
#meet-thunder .mt-edu-line .fx-phd { position: relative; display: inline-block; color: #FFD84A; font-weight: 800; }
#meet-thunder .mt-edu-line .fx-phd::after { content: ""; position: absolute; left: -1px; right: -1px; bottom: -1px; height: 2px; border-radius: 2px;
  background: linear-gradient(90deg, #F2C94C, #FFE89A, #F2C94C); transform-origin: left center; }
#meet-thunder .mt-edu-line .fx-phd::before { content: ""; position: absolute; right: -9px; top: -8px; width: 14px; height: 14px; pointer-events: none;
  background: radial-gradient(circle, #fff 0 12%, rgba(255,232,154,.9) 22%, rgba(242,201,76,0) 60%),
              linear-gradient(0deg, transparent 45%, rgba(255,240,190,.95) 48% 52%, transparent 55%),
              linear-gradient(90deg, transparent 45%, rgba(255,240,190,.95) 48% 52%, transparent 55%);
  opacity: 0; transform: scale(0); }
#meet-thunder .mt-edu-line .fx-head::after { content: ""; position: absolute; top: 0; bottom: 0; left: 0; width: 45%; pointer-events: none;
  background: linear-gradient(105deg, rgba(255,216,74,0) 0%, rgba(255,226,120,.55) 50%, rgba(255,216,74,0) 100%); transform: translateX(-120%); opacity: 0; }
/* armed: pieces wait */
#meet-thunder .mt-edu-line.fx-arm .fx-head, #meet-thunder .mt-edu-line.fx-arm .fx-t, #meet-thunder .mt-edu-line.fx-arm .fx-tail { opacity: 0; }
#meet-thunder .mt-edu-line.fx-arm .fx-phd::after { transform: scaleX(0); }
/* play */
#meet-thunder .mt-edu-line.fx-go .fx-head { animation: fx-rise 560ms cubic-bezier(.22,1,.36,1) both; }
#meet-thunder .mt-edu-line.fx-go .fx-head::after { animation: fx-sweep 1000ms cubic-bezier(.55,0,.45,1) 380ms both; }
#meet-thunder .mt-edu-line.fx-go .fx-t { animation: fx-pop 420ms cubic-bezier(.34,1.56,.64,1) both; animation-delay: calc(700ms + var(--i) * 120ms); }
#meet-thunder .mt-edu-line.fx-go .fx-tail { animation: fx-rise 520ms cubic-bezier(.22,1,.36,1) 1380ms both; }
#meet-thunder .mt-edu-line.fx-go .fx-phd::after { animation: fx-draw 460ms cubic-bezier(.65,0,.35,1) 1800ms both; }
#meet-thunder .mt-edu-line.fx-go .fx-phd::before { animation: fx-glint 700ms cubic-bezier(.22,1,.36,1) 2150ms both, fx-glint 700ms cubic-bezier(.22,1,.36,1) 32000ms both; }
@keyframes fx-rise { from { opacity: 0; transform: translateY(7px); } to { opacity: 1; transform: none; } }
@keyframes fx-pop { 0% { opacity: 0; transform: translateY(5px) scale(.82); } 70% { opacity: 1; } 100% { opacity: 1; transform: none; } }
@keyframes fx-sweep { 0% { opacity: 0; transform: translateX(-120%); } 15% { opacity: 1; } 85% { opacity: 1; } 100% { opacity: 0; transform: translateX(240%); } }
@keyframes fx-draw { from { transform: scaleX(0); } to { transform: scaleX(1); } }
@keyframes fx-glint { 0% { opacity: 0; transform: scale(0) rotate(0deg); } 35% { opacity: 1; transform: scale(1.25) rotate(45deg); } 100% { opacity: 0; transform: scale(.6) rotate(90deg); } }
@media (prefers-reduced-motion: reduce) {
  #meet-thunder .mt-edu-line .fx-head, #meet-thunder .mt-edu-line .fx-t, #meet-thunder .mt-edu-line .fx-tail { opacity: 1 !important; transform: none !important; animation: none !important; }
  #meet-thunder .mt-edu-line .fx-head::after, #meet-thunder .mt-edu-line .fx-phd::before { animation: none !important; opacity: 0 !important; }
  #meet-thunder .mt-edu-line .fx-phd::after { animation: none !important; transform: none !important; }
}
/* 20261014-r3y-phdrest — Obie 8:22 PM: entrance ~2x slower + a lasting resting effect on PhD (shimmer glide every 7 s +
   soft breathing underline glow). Opacity/transform only; paused off-screen (.fx-off); reduced motion = static. */
#meet-thunder .mt-edu-line.fx-go .fx-head { animation: fx-rise 900ms cubic-bezier(.22,1,.36,1) both; }
#meet-thunder .mt-edu-line.fx-go .fx-head::after { animation: fx-sweep 2500ms cubic-bezier(.45,0,.55,1) 600ms both; }
#meet-thunder .mt-edu-line.fx-go .fx-t { animation: fx-pop 640ms cubic-bezier(.34,1.56,.64,1) both; animation-delay: calc(1600ms + var(--i) * 250ms); }
#meet-thunder .mt-edu-line.fx-go .fx-tail { animation: fx-rise 900ms cubic-bezier(.22,1,.36,1) 3900ms both; }
#meet-thunder .mt-edu-line .fx-phd::after { box-shadow: 0 0 6px rgba(255,216,74,.55); }
#meet-thunder .mt-edu-line.fx-go .fx-phd::after { animation: fx-draw 900ms cubic-bezier(.65,0,.35,1) 4800ms both, fx-breathe 3600ms ease-in-out 5700ms infinite; }
#meet-thunder .mt-edu-line .fx-phd::before { right: -15px; top: -14px; width: 24px; height: 24px; }
#meet-thunder .mt-edu-line.fx-go .fx-phd::before { animation: fx-glint 1000ms cubic-bezier(.22,1,.36,1) 5700ms both; }
#meet-thunder .mt-edu-line .fx-shine-wrap { position: absolute; inset: -2px -3px; overflow: hidden; pointer-events: none; border-radius: 3px; }
#meet-thunder .mt-edu-line .fx-shine { position: absolute; top: 0; bottom: 0; left: 0; width: 60%; opacity: 0; transform: translateX(-120%) skewX(-18deg);
  background: linear-gradient(90deg, rgba(255,255,255,0) 0%, rgba(255,250,225,.85) 50%, rgba(255,255,255,0) 100%); }
#meet-thunder .mt-edu-line.fx-go .fx-shine { animation: fx-glide 7000ms cubic-bezier(.45,0,.55,1) 7000ms infinite; }
#meet-thunder .mt-edu-line.fx-off .fx-shine, #meet-thunder .mt-edu-line.fx-off .fx-phd::after { animation-play-state: paused; }
@keyframes fx-breathe { 0%, 100% { opacity: .55; } 50% { opacity: 1; } }
@keyframes fx-glide { 0% { opacity: 0; transform: translateX(-120%) skewX(-18deg); } 4% { opacity: 1; } 22% { opacity: 1; } 26%, 100% { opacity: 0; transform: translateX(260%) skewX(-18deg); } }
@media (prefers-reduced-motion: reduce) {
  #meet-thunder .mt-edu-line .fx-shine { animation: none !important; opacity: 0 !important; }
  #meet-thunder .mt-edu-line .fx-phd::after { animation: none !important; transform: none !important; opacity: 1 !important; }
}

/* 20261014-between-doors-chat — doors → one smaller yellow chat box → Thunder Drop. House keyframes only. */
#view-between .between-door { position: relative; border-radius: 10px; }
#view-between .between-door.is-open { box-shadow: 0 0 0 2px #F2C94C, 0 0 14px rgba(242,201,76,.55); }
#view-between .between-door-n {
  position: absolute; top: 4px; right: 4px; z-index: 3; min-width: 22px; height: 22px; padding: 0 6px; box-sizing: border-box;
  border-radius: 11px; background: #F2C94C; color: #000; font: 800 13px/22px system-ui, sans-serif; text-align: center;
  box-shadow: 0 0 8px rgba(242,201,76,.7);
}
#view-between .between-chat {
  position: relative; overflow: hidden; margin: 14px auto 0; max-width: 320px; box-sizing: border-box;
  padding: 10px 10px 8px; border: 2px solid #F2C94C; border-radius: 14px;
  background: linear-gradient(160deg, rgba(242,201,76,.14), rgba(0,0,0,.6) 70%);
}
#view-between .between-chat::after {
  content: ""; position: absolute; inset: 0; pointer-events: none; opacity: 0;
  background: linear-gradient(105deg, transparent 35%, rgba(255,240,180,.35) 48%, transparent 60%);
  transform: translateX(-120%);
}
#view-between .between-chat-name { margin: 0 0 8px; color: #F2C94C; font-size: 13px; letter-spacing: .14em; font-weight: 800; text-align: center; }
#view-between .between-chat-thread { display: flex; flex-direction: column; gap: 8px; max-height: 260px; overflow-y: auto; margin: 0 0 8px; }
#view-between .between-msg { background: rgba(0,0,0,.55); border-radius: 10px; padding: 8px 10px; }
#view-between .between-msg-head { margin: 0 0 2px; font-size: 12px; color: #9a9a9a; }
#view-between .between-msg .between-name { color: #F2C94C; font-weight: 800; font-size: 13px; margin: 0; }
#view-between .between-msg .between-words { margin: 0; color: #f4f4f4; font-size: 15px; }
#view-between .between-msg .between-time { display: inline; margin: 0; font-size: 11px; }
#view-between .between-chat .between-door-write { padding: 0; margin: 0; }
#view-between .between-chat #between-say { min-height: 40px; }
#view-between .between-chat #between-seat { white-space: nowrap; color: #F2C94C; border: 1px solid #F2C94C; background: transparent; border-radius: 8px; padding: 0 10px; font-weight: 700; }
#view-between #between-list > .td-entry { margin-top: 16px; }
/* the sequence: title wipe (existing .between-arrive) → doors drop → gold number tick → open-door rim flash → box strike, sweep → Drop strike, crackle, pulse, title gold */
#view-between #between-list.bdc-seq .between-doors { animation: between-drop 420ms ease-out 550ms 1 both; }
#view-between #between-list.bdc-seq .between-door-n { animation: whos-count-tick 700ms cubic-bezier(0.22, 0.61, 0.2, 1) 1000ms 1 both; }
#view-between #between-list.bdc-seq .between-door.is-open { animation: tb-hit-rim-flash 900ms cubic-bezier(0.22, 0.61, 0.2, 1) 1300ms 1 both; }
#view-between #between-list.bdc-seq .between-chat { animation: td-strike 700ms ease-out 1900ms 1 both; }
#view-between #between-list.bdc-seq .between-chat::after { animation: td-sweep 1400ms ease-in-out 2600ms 1 both; }
#view-between #between-list.bdc-seq .td-entry .td-bolt svg { opacity: 1; transform: none; animation: td-strike 700ms ease-out 3300ms 1 both; }
#view-between #between-list.bdc-seq .td-crackle { animation: td-crackle 1100ms steps(1, end) 3900ms 1 both; }
#view-between #between-list.bdc-seq .td-open { animation: td-pulse 900ms ease-in-out 4500ms 1 both; }
#view-between #between-list.bdc-seq .td-title { animation: night-title-gold-pulse 700ms ease-out 4900ms 1 both; }
@media (prefers-reduced-motion: reduce) {
  #view-between #between-list .between-doors, #view-between #between-list .between-door-n, #view-between #between-list .between-door.is-open,
  #view-between #between-list .between-chat, #view-between #between-list .between-chat::after, #view-between #between-list .td-title { animation: none !important; }
}

/* 20261015-between-still2 — "Texts on" removed from the render; opted-in strip collapses (no gap). Consent/SMS logic untouched. */
#optin-home.tb-imin-unified:has(.tb-optin-check:checked) { display: none !important; }
/* 20261015-between-still2 — Obie: NEXT GUEST card spans the page's full content width on every phone (same 18px gutters, centered). Undoes the short-screen 56px right inset. */
@media (max-width: 389.98px) and (max-height: 719.98px) { #home-announce { margin-right: 0; } }

/* 20261015-fire — dramatic bubble ON/OFF (Obie). ~420ms in with overshoot from Thunder's tail;
   words reveal in sequence; ~360ms out (words then collapse). Reduced motion = plain fade.
   Settles to 0 running animations. Brothers zone uses bottom-right origin (tail → Thunder). */
@keyframes fab-say-drama-in {
  0% { opacity: 0; transform: scale(0.18); }
  58% { opacity: 1; transform: scale(1.1); }
  78% { transform: scale(0.97); }
  100% { opacity: 1; transform: scale(1); }
}
@keyframes fab-say-drama-out {
  0% { opacity: 1; transform: scale(1); }
  35% { opacity: 1; transform: scale(1.04); }
  100% { opacity: 0; transform: scale(0.18); }
}
@keyframes fab-say-w-in {
  0% { opacity: 0; transform: translateY(6px); }
  100% { opacity: 1; transform: none; }
}
@keyframes fab-say-w-out {
  0% { opacity: 1; transform: none; }
  100% { opacity: 0; transform: translateY(-4px); }
}
@keyframes fab-say-plain-in { from { opacity: 0; } to { opacity: 1; } }
@keyframes fab-say-plain-out { from { opacity: 1; } to { opacity: 0; } }
#fab-say.fab-say-drama-in:not([hidden]) {
  animation: fab-say-drama-in 420ms cubic-bezier(0.22, 1.35, 0.36, 1) 1 both !important;
  transform-origin: right center;
}
#fab-say.fab-say-drama-in .fab-say-w {
  display: inline-block;
  opacity: 0;
  animation: fab-say-w-in 220ms ease-out calc(70ms + var(--w, 0) * 45ms) 1 both;
}
#fab-say.fab-say-out:not([hidden]) {
  animation: fab-say-drama-out 360ms cubic-bezier(0.4, 0, 0.7, 0.2) 1 both !important;
  transform-origin: right center;
}
#fab-say.fab-say-out .fab-say-w {
  display: inline-block;
  animation: fab-say-w-out 140ms ease-in calc(var(--w, 0) * 28ms) 1 both;
}
html.fab-bros-say #fab-say.fab-say-drama-in:not([hidden]),
html.fab-bros-say #fab-say.fab-say-out:not([hidden]) {
  transform-origin: right bottom !important;
}
@media (prefers-reduced-motion: reduce) {
  #fab-say.fab-say-drama-in:not([hidden]) { animation: fab-say-plain-in 200ms ease-out 1 both !important; }
  #fab-say.fab-say-out:not([hidden]) { animation: fab-say-plain-out 200ms ease-out 1 both !important; }
  #fab-say .fab-say-w { animation: none !important; opacity: 1 !important; transform: none !important; }
}

/* 20261015-fire — piece 5: room under photos + OPEN THE VAULT so #fab never covers a tap.
   Bolt position/style untouched. Extra bottom padding only. */
#view-between.active {
  padding-bottom: calc(24px + 72px + env(safe-area-inset-bottom, 0px));
}
#view-between #between-list > .td-entry {
  margin-bottom: calc(14px + 8px);
  scroll-margin-bottom: calc(var(--dock) + 72px);
}
#view-events #night-row {
  padding-bottom: calc(8px + 68px);
}
#view-events #night-row > .night-tile {
  scroll-margin-bottom: calc(var(--dock) + 72px);
}

/* 20261015-fire — piece 6: scripture block + Hide the Words + room voice */
#td-sheet .tdv-scripture {
  margin: 0 0 12px;
  padding: 12px 12px 10px;
  border-radius: 12px;
  background: linear-gradient(160deg, rgba(242,201,76,.12), rgba(0,0,0,0) 70%), #0b0b0b;
  border: 1px solid rgba(245,197,24,.45);
  text-align: center;
}
#td-sheet .tdv-scripture .tdv-verse-words {
  margin: 0;
  color: #fff;
  font: 500 14px/1.45 Inter, system-ui, sans-serif;
  opacity: .94;
}
#td-sheet .tdv-scripture.is-hidden-words .tdv-verse-words { visibility: hidden; }
#td-sheet .tdv-scripture cite {
  display: block;
  margin-top: 6px;
  color: #F5C518;
  font: 800 11px Inter, system-ui, sans-serif;
  letter-spacing: .12em;
  font-style: normal;
  text-transform: uppercase;
}
#td-sheet .tdv-hide-words {
  display: block;
  margin: 8px auto 0;
  padding: 6px 12px;
  border-radius: 999px;
  border: 1px solid rgba(245,197,24,.55);
  background: transparent;
  color: #F5C518;
  font: 700 11px Inter, system-ui, sans-serif;
  letter-spacing: .1em;
  text-transform: uppercase;
  cursor: pointer;
}
#td-sheet .tdv-voice {
  display: flex;
  align-items: center;
  gap: 10px;
  margin: 12px 0 0;
  padding: 10px;
  border-radius: 12px;
  border: 1px solid rgba(255,255,255,.12);
  background: #0a0a0a;
  color: inherit;
  font: inherit;
  width: 100%;
  box-sizing: border-box;
  text-align: left;
  cursor: pointer;
}
#td-sheet .tdv-voice-face {
  width: 44px; height: 44px; border-radius: 50%;
  object-fit: cover; flex: 0 0 auto;
  border: 1px solid rgba(245,197,24,.5);
}
#td-sheet .tdv-voice-meta { min-width: 0; flex: 1 1 auto; }
#td-sheet .tdv-voice-name {
  margin: 0;
  color: #fff;
  font: 800 13px/1.2 Inter, system-ui, sans-serif;
  letter-spacing: .02em;
}
#td-sheet .tdv-voice-kin {
  margin: 3px 0 0;
  color: #bdbdbd;
  font: 500 11px/1.3 Inter, system-ui, sans-serif;
}
#td-sheet .tdv-howto { margin-top: 10px; }
#tdv-player video { width: 100%; height: 100%; object-fit: contain; background: #000; display: block; }
