/* ======================================================================
   秋川流域花火大会 — styles.css
   ----------------------------------------------------------------------
   The bulk of this file mirrors the original WordPress → static migration.
   Sections labeled "Round 16-45" at the bottom are the design / a11y /
   performance polish added during the 2026-05 improvement sprint. Each
   round's commit is documented in docs/BACKLOG.md for traceability.

   Maintenance tips:
   - Site uses CSS variables defined in :root for colors / lines / shadow.
     Override via @media (prefers-color-scheme: dark) for theme switching.
   - Critical CSS for index.html is inlined in <head> (see index.html).
     Critical CSS for sub-pages is inlined via generate.ps1 template.
   - Cache-bust on every meaningful CSS change: bump ?v= suffix in
     HTML <link> tags and the CACHE_VERSION in sw.js together.
   ====================================================================== */

:root {
  --ink: #172026;
  --muted: #62707a;
  --paper: #fffdf7;
  --cream: #f7efe2;
  --gold: #d7a947;
  /* AA-compliant darker gold for text on light backgrounds (≈5:1 vs white).
     Use --gold for backgrounds/borders/decoration; use --gold-text only when
     gold-colored TEXT sits on a light surface. */
  --gold-text: #8e6a1f;
  --red: #b83f37;
  --teal: #0f6868;
  --night: #10182a;
  --line: rgba(23, 32, 38, 0.13);
  --shadow: 0 22px 70px rgba(11, 19, 31, 0.18);
}

* {
  box-sizing: border-box;
}

html {
  scroll-behavior: smooth;
  scroll-padding-top: 80px;
}

/* Scroll-to-top button */
.scroll-top {
  position: fixed;
  z-index: 17;
  right: 18px;
  bottom: 84px;
  width: 44px;
  height: 44px;
  display: grid;
  place-items: center;
  border: 0;
  border-radius: 50%;
  background: rgba(10, 16, 28, 0.85);
  color: #fff;
  cursor: pointer;
  box-shadow: 0 6px 20px rgba(11, 19, 31, 0.28);
  opacity: 0;
  transform: translateY(8px);
  transition: opacity 0.25s ease, transform 0.25s ease;
  backdrop-filter: blur(8px);
}

.scroll-top.is-visible {
  opacity: 1;
  transform: translateY(0);
}

.scroll-top:hover {
  background: var(--gold);
  color: var(--night);
}

@media (min-width: 921px) {
  .scroll-top {
    right: 24px;
    bottom: 24px;
  }
}

/* Mobile sticky CTA */
.mobile-sticky-cta {
  display: none;
  position: fixed;
  z-index: 18;
  left: 50%;
  bottom: 16px;
  transform: translateX(-50%);
  align-items: center;
  gap: 8px;
  padding: 14px 26px;
  border-radius: 999px;
  background: linear-gradient(135deg, #ffe8a6, var(--gold));
  color: var(--night);
  font-weight: 800;
  font-size: 0.95rem;
  text-decoration: none;
  box-shadow: 0 8px 28px rgba(11, 19, 31, 0.32);
}

.mobile-sticky-cta svg {
  display: block;
}

@media (max-width: 920px) {
  .mobile-sticky-cta {
    display: inline-flex;
  }
  body {
    padding-bottom: 76px;
  }
  .scroll-top {
    bottom: 88px;
  }
}

/* Scroll fade-in (only applied via JS when prefers-reduced-motion is not set) */
.fade-target {
  opacity: 0;
  transform: translateY(18px);
  transition: opacity 0.7s ease, transform 0.7s ease;
}

.fade-target.is-visible {
  opacity: 1;
  transform: translateY(0);
}

@media (prefers-reduced-motion: reduce) {
  .fade-target {
    opacity: 1;
    transform: none;
    transition: none;
  }
}

body {
  margin: 0;
  color: var(--ink);
  background:
    radial-gradient(circle at 88% 16%, rgba(215, 169, 71, 0.06), transparent 38%),
    radial-gradient(circle at 8% 78%, rgba(184, 63, 55, 0.04), transparent 40%),
    var(--paper);
  background-attachment: fixed;
  font-family: "Noto Sans JP", system-ui, sans-serif;
  line-height: 1.7;
}

a {
  color: inherit;
  text-decoration: none;
}

/* Print styles - clean output for paper / PDF export */
@media print {
  body {
    color: #000;
    background: #fff;
    font-size: 11pt;
    padding-bottom: 0;
  }
  .site-header,
  .mobile-sticky-cta,
  .scroll-top,
  .hero-scroll-hint,
  .nav-toggle,
  .nav,
  .skip-link,
  .header-cta,
  .program-card-thumb,
  .stats-thumb,
  .past-tile img,
  .footer-social,
  .button,
  .button-text,
  .ticket-more,
  .program-more,
  .past-more,
  .sponsor-more,
  .access-more,
  .faq-more,
  .contact-actions,
  iframe {
    display: none !important;
  }
  .hero {
    min-height: auto;
    padding: 20pt 0;
    background: #fff;
    color: #000;
  }
  .hero h1,
  .hero-lead,
  .event-panel,
  .event-panel-meta {
    color: #000;
  }
  /* Sub-page banner: drop the dark gradient + dot pattern for print */
  .page-hero {
    background: #fff !important;
    color: #000 !important;
    padding: 12pt 0 !important;
    animation: none !important;
  }
  .page-hero::before,
  .page-hero::after {
    display: none !important;
  }
  .page-hero h1,
  .page-hero .tag,
  .page-hero-pill,
  .page-hero .page-back {
    color: #000 !important;
    background: none !important;
    border-color: #999 !important;
    text-shadow: none !important;
    -webkit-text-fill-color: #000 !important;
  }
  /* Hide ticket sale pending CTAs in print (they're interactive only) */
  .ticket-sale-pending {
    background: #fff !important;
    border: 1px solid #999 !important;
  }
  .ticket-sale-pending-cta {
    display: none !important;
  }
  /* Hide SW update toast in print */
  .sw-update-toast { display: none !important; }
  .event-panel {
    position: static;
    border: 1px solid #999;
    background: #fff;
    width: auto;
    margin-top: 12pt;
  }
  .section,
  .notice {
    padding: 12pt 0;
    page-break-inside: avoid;
  }
  .footer {
    background: #fff;
    color: #000;
    padding: 12pt 0;
    border-top: 1px solid #999;
  }
  .footer-grid,
  .footer-base {
    color: #000;
  }
  .footer-grid a,
  .footer-base a {
    color: #000;
    text-decoration: underline;
  }
  a {
    color: #000;
  }
  a[href^="http"]:after {
    content: " (" attr(href) ")";
    font-size: 9pt;
    color: #555;
  }
  .timeline::before,
  .timeline > li::before {
    background: #999 !important;
    border-color: #999 !important;
  }
}

/* Skip-to-content link for keyboard / screen-reader users */
.skip-link {
  position: absolute;
  left: 12px;
  top: 12px;
  z-index: 100;
  padding: 10px 16px;
  background: var(--ink);
  color: #fff;
  font-weight: 700;
  text-decoration: none;
  border-radius: 6px;
  transform: translateY(-200%);
  transition: transform 0.2s ease;
}

.skip-link:focus-visible {
  transform: translateY(0);
}

/* Keyboard focus styles (visible only for keyboard users) */
:focus-visible {
  outline: 2px solid var(--gold);
  outline-offset: 3px;
  border-radius: 4px;
}

button:focus-visible,
a.button:focus-visible,
.header-cta:focus-visible {
  outline-offset: 4px;
}

img {
  max-width: 100%;
}

.site-header {
  position: fixed;
  z-index: 20;
  top: 0;
  left: 0;
  right: 0;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 24px;
  min-height: 72px;
  padding: 14px clamp(18px, 4vw, 54px);
  color: #fff;
  background: rgba(10, 16, 28, 0.94);
  backdrop-filter: blur(12px);
  transition: background 0.25s ease, box-shadow 0.25s ease;
}

.site-header.is-scrolled {
  background: rgba(10, 16, 28, 0.98);
  box-shadow: 0 6px 24px rgba(0, 0, 0, 0.18);
}

.scroll-progress {
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  height: 3px;
  background: linear-gradient(90deg, var(--gold), var(--red));
  transform-origin: left;
  transform: scaleX(0);
  transition: transform 0.1s linear;
  z-index: 25;
  pointer-events: none;
}

.nav-toggle {
  display: none;
  width: 44px;
  height: 44px;
  padding: 0;
  border: 0;
  background: transparent;
  cursor: pointer;
  align-items: center;
  justify-content: center;
  flex-direction: column;
  gap: 6px;
  z-index: 30;
}

.nav-toggle span {
  display: block;
  width: 24px;
  height: 2px;
  background: #fff;
  border-radius: 2px;
  transition: transform 0.25s ease, opacity 0.2s ease;
}

.nav-toggle[aria-expanded="true"] span:nth-child(1) {
  transform: translateY(8px) rotate(45deg);
}

.nav-toggle[aria-expanded="true"] span:nth-child(2) {
  opacity: 0;
}

.nav-toggle[aria-expanded="true"] span:nth-child(3) {
  transform: translateY(-8px) rotate(-45deg);
}

.brand,
.nav,
.hero-actions,
.support-actions {
  display: flex;
  align-items: center;
}

.brand {
  gap: 12px;
  font-weight: 900;
  white-space: nowrap;
  font-size: 1.02rem;
  letter-spacing: 0.04em;
}

.brand > span:last-child {
  font-family: "Zen Old Mincho", serif;
  font-weight: 900;
}

.brand-mark {
  display: block;
  height: 40px;
  width: auto;
  filter: invert(1) grayscale(1);
  mix-blend-mode: difference;
  opacity: 0.95;
  transition: opacity 0.25s ease, transform 0.25s ease;
}

.brand:hover .brand-mark {
  opacity: 1;
  transform: scale(1.04);
}

.nav {
  gap: clamp(14px, 2vw, 30px);
  font-size: 0.91rem;
  font-weight: 700;
}

.nav a {
  opacity: 0.88;
  position: relative;
  transition: opacity 0.2s ease, color 0.2s ease;
}

.nav a::after {
  content: "";
  position: absolute;
  left: 50%;
  right: 50%;
  bottom: -6px;
  height: 2px;
  background: var(--gold);
  border-radius: 2px;
  transition: left 0.25s ease, right 0.25s ease;
}

.nav a:hover {
  opacity: 1;
  color: var(--gold);
}

.nav a:hover::after {
  left: 0;
  right: 0;
}

.nav a.is-active {
  opacity: 1;
  color: var(--gold);
}

.nav a.is-active::after {
  left: 0;
  right: 0;
}

.footer-nav a.is-active {
  color: var(--gold);
}

.header-cta,
.button {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-height: 44px;
  padding: 0 18px;
  border-radius: 999px;
  font-weight: 800;
  white-space: nowrap;
  transition: transform 0.2s ease, box-shadow 0.2s ease, background 0.2s ease, color 0.2s ease, border-color 0.2s ease;
}

.button:hover {
  transform: translateY(-2px);
}

.button.primary:hover {
  box-shadow: 0 16px 42px rgba(215, 169, 71, 0.42);
}

.button.secondary:hover {
  background: rgba(255, 255, 255, 0.2);
  border-color: rgba(255, 255, 255, 0.78);
}

.button:active {
  transform: translateY(0);
}

.header-cta {
  color: var(--night);
  background: #fff;
  transition: transform 0.2s ease, box-shadow 0.2s ease;
}

.header-cta:hover {
  transform: translateY(-2px);
  box-shadow: 0 8px 24px rgba(0, 0, 0, 0.2);
}

.hero {
  position: relative;
  display: grid;
  align-items: end;
  min-height: 92vh;
  padding: 136px clamp(22px, 6vw, 84px) 7vh;
  color: #fff;
  /* Mobile-first: serve the 800w variant (≈86KB vs 491KB for 1920w) to small
     viewports for a meaningful LCP win. Larger viewports get progressively
     bigger images to keep fidelity. */
  background:
    linear-gradient(90deg, rgba(8, 13, 25, 0.85) 0%, rgba(8, 13, 25, 0.55) 45%, rgba(8, 13, 25, 0.05) 100%),
    linear-gradient(180deg, rgba(8, 13, 25, 0.02) 58%, rgba(8, 13, 25, 0.88) 100%),
    url("assets/hero-fireworks-real-800.webp") center / cover;
  isolation: isolate;
}

@media (min-width: 801px) {
  .hero {
    background-image:
      linear-gradient(90deg, rgba(8, 13, 25, 0.85) 0%, rgba(8, 13, 25, 0.55) 45%, rgba(8, 13, 25, 0.05) 100%),
      linear-gradient(180deg, rgba(8, 13, 25, 0.02) 58%, rgba(8, 13, 25, 0.88) 100%),
      url("assets/hero-fireworks-real-1280.webp");
  }
}

@media (min-width: 1281px) {
  .hero {
    background-image:
      linear-gradient(90deg, rgba(8, 13, 25, 0.85) 0%, rgba(8, 13, 25, 0.55) 45%, rgba(8, 13, 25, 0.05) 100%),
      linear-gradient(180deg, rgba(8, 13, 25, 0.02) 58%, rgba(8, 13, 25, 0.88) 100%),
      url("assets/hero-fireworks-real.webp");
  }
}

.hero::after {
  content: "";
  position: absolute;
  inset: auto 0 0;
  height: 90px;
  background: linear-gradient(180deg, transparent, var(--paper));
  z-index: -1;
}

.hero-scroll-hint {
  position: absolute;
  left: 50%;
  bottom: 28px;
  transform: translateX(-50%);
  display: inline-flex;
  flex-direction: column;
  align-items: center;
  gap: 8px;
  padding: 6px 10px;
  color: rgba(255, 255, 255, 0.78);
  font-size: 0.72rem;
  font-weight: 700;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  text-decoration: none;
  animation: scroll-hint 2.4s ease-in-out infinite;
  z-index: 5;
  transition: opacity 0.4s ease, color 0.25s ease;
  pointer-events: auto;
}

.hero-scroll-hint.is-hidden {
  opacity: 0;
  pointer-events: none;
}

.hero-scroll-hint:hover {
  color: var(--gold);
}

@keyframes scroll-hint {
  0%, 100% { transform: translateX(-50%) translateY(0); opacity: 0.7; }
  50% { transform: translateX(-50%) translateY(6px); opacity: 1; }
}

@media (prefers-reduced-motion: reduce) {
  .hero-scroll-hint {
    animation: none;
  }
}

@media (max-width: 920px) {
  .hero-scroll-hint {
    display: none;
  }
}

.hero-content {
  max-width: 760px;
  animation: hero-fade 0.9s ease-out 0.05s both;
}

/* Hero badge: prominent "next edition" pill, clickable to #signup */
.hero-badge {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  margin-bottom: 18px;
  padding: 9px 18px 9px 14px;
  background: linear-gradient(135deg, rgba(215, 169, 71, 0.20), rgba(184, 63, 55, 0.18));
  border: 1px solid rgba(215, 169, 71, 0.5);
  border-radius: 999px;
  color: #fff;
  font-size: 0.86rem;
  font-weight: 800;
  letter-spacing: 0.02em;
  text-decoration: none;
  white-space: nowrap;
  backdrop-filter: blur(10px);
  transition: transform 0.25s ease, background 0.25s ease, border-color 0.25s ease;
}

.hero-badge:hover,
.hero-badge:focus-visible {
  transform: translateY(-2px);
  background: linear-gradient(135deg, rgba(215, 169, 71, 0.35), rgba(184, 63, 55, 0.28));
  border-color: var(--gold);
  color: #fff;
}

.hero-badge-pulse {
  position: relative;
  display: inline-block;
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: var(--gold);
}

.hero-badge-pulse::before {
  content: "";
  position: absolute;
  inset: -3px;
  border-radius: 50%;
  border: 2px solid var(--gold);
  opacity: 0;
  animation: hero-badge-pulse 2s ease-out infinite;
}

@keyframes hero-badge-pulse {
  0% { transform: scale(0.8); opacity: 0.8; }
  100% { transform: scale(1.9); opacity: 0; }
}

@media (prefers-reduced-motion: reduce) {
  .hero-badge-pulse::before { animation: none; }
}

.hero-badge-text {
  display: inline-flex;
  align-items: baseline;
  gap: 8px;
}

.hero-badge-text strong {
  color: var(--gold);
  font-weight: 900;
  letter-spacing: 0.04em;
}

.hero-badge-text > span {
  color: rgba(255, 255, 255, 0.95);
  font-weight: 700;
  letter-spacing: 0.05em;
}

.hero-badge-arrow {
  font-size: 0.95rem;
  color: var(--gold);
  transition: transform 0.25s ease;
}

.hero-badge:hover .hero-badge-arrow {
  transform: translateX(3px);
}

@media (max-width: 620px) {
  .hero-badge {
    font-size: 0.78rem;
    padding: 8px 14px 8px 12px;
    gap: 8px;
  }
  .hero-badge-text {
    flex-direction: column;
    align-items: flex-start;
    gap: 1px;
    line-height: 1.4;
  }
  .hero-badge-text > span {
    font-size: 0.74rem;
  }
}

.event-panel {
  animation: hero-fade 0.9s ease-out 0.25s both;
}

@keyframes hero-fade {
  from {
    opacity: 0;
    transform: translateY(16px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

@media (prefers-reduced-motion: reduce) {
  .hero-content,
  .event-panel {
    animation: none;
  }
}

.eyebrow,
.tag {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  /* Default: text on a light surface. Dark-bg sections override below. */
  color: var(--gold-text);
  font-size: 0.78rem;
  font-weight: 900;
  letter-spacing: 0.12em;
  text-transform: uppercase;
}

/* Decorative line + dot stay bright gold for the festival vibe — they don't
   need to meet text contrast since they're not text. */
.eyebrow::before,
.tag::before {
  content: "";
  width: 38px;
  height: 2px;
  background: linear-gradient(90deg, transparent, var(--gold));
  border-radius: 2px;
}

.eyebrow::after,
.tag::after {
  content: "";
  width: 4px;
  height: 4px;
  border-radius: 50%;
  background: var(--gold);
  box-shadow: 0 0 8px var(--gold);
}

/* Dark-context overrides: keep bright gold where the background is dark
   (these have plenty of contrast already). */
.hero .eyebrow,
.hero .tag,
.page-hero .tag,
.signup-card .tag,
.support-band .tag,
.subpage-signup-cta-text .tag,
.event-panel .tag,
.urgent-banner .tag,
.footer .tag,
.footer .eyebrow {
  color: var(--gold);
}

h1,
h2,
h3,
p {
  margin-top: 0;
}

h1,
h2 {
  font-family: "Zen Old Mincho", serif;
  line-height: 1.18;
}

h1 {
  max-width: 720px;
  margin-bottom: 20px;
  font-size: clamp(2.4rem, 7vw, 5.4rem);
  font-weight: 900;
  line-break: strict;
  word-break: keep-all;
}

.hero h1 {
  text-shadow:
    0 2px 24px rgba(0, 0, 0, 0.45),
    0 1px 2px rgba(0, 0, 0, 0.6);
}

h1 span,
h2 span,
.hero-lead span {
  display: inline-block;
  line-break: strict;
  word-break: keep-all;
}

.hero-lead {
  max-width: 650px;
  margin-bottom: 32px;
  color: rgba(255, 255, 255, 0.86);
  font-size: clamp(1.05rem, 2.2vw, 1.35rem);
  font-weight: 500;
  text-shadow: 0 1px 12px rgba(0, 0, 0, 0.4);
}

.hero-actions {
  flex-wrap: wrap;
  gap: 14px;
}

.button.primary {
  position: relative;
  color: #141414;
  background: linear-gradient(135deg, #ffe8a6 0%, var(--gold) 60%, #c79636 100%);
  box-shadow: 0 12px 35px rgba(215, 169, 71, 0.32), inset 0 1px 0 rgba(255, 255, 255, 0.5);
  overflow: hidden;
}

.button.primary::before {
  content: "";
  position: absolute;
  top: 0;
  left: -100%;
  width: 60%;
  height: 100%;
  background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.45), transparent);
  transition: left 0.7s ease;
  pointer-events: none;
}

.button.primary:hover::before {
  left: 140%;
}

.button.secondary {
  color: #fff;
  border: 1px solid rgba(255, 255, 255, 0.52);
  background: rgba(255, 255, 255, 0.11);
}

.event-panel {
  position: absolute;
  right: clamp(22px, 5vw, 70px);
  bottom: 7vh;
  width: min(330px, calc(100vw - 44px));
  padding: 22px 24px;
  border: 1px solid rgba(255, 255, 255, 0.28);
  border-radius: 10px;
  background: rgba(10, 18, 31, 0.58);
  backdrop-filter: blur(16px);
  box-shadow: var(--shadow);
  overflow: hidden;
}

.event-panel::before {
  content: "";
  position: absolute;
  inset: 0;
  background: linear-gradient(135deg, rgba(215, 169, 71, 0.18) 0%, transparent 40%);
  pointer-events: none;
}

.event-panel::after {
  content: "";
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 2px;
  background: linear-gradient(90deg, transparent, var(--gold), transparent);
}

.event-panel > * {
  position: relative;
}

.event-panel p,
.event-panel span {
  color: rgba(255, 255, 255, 0.74);
}

.event-panel strong {
  display: block;
  margin: 4px 0 8px;
  color: #fff;
  font-size: 1.55rem;
}

.event-panel-time {
  display: block;
  margin-top: 4px;
  color: rgba(255, 255, 255, 0.92);
  font-weight: 600;
  font-size: 0.96rem;
}

.event-panel-meta {
  display: block;
  margin-top: 8px;
  padding-top: 10px;
  border-top: 1px solid rgba(255, 255, 255, 0.18);
  color: var(--gold);
  font-weight: 700;
  letter-spacing: 0.04em;
}

.event-panel-calendar {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  margin-top: 14px;
  padding: 9px 16px;
  background: rgba(255, 255, 255, 0.12);
  border: 1px solid rgba(255, 255, 255, 0.32);
  border-radius: 999px;
  color: #fff;
  font-size: 0.85rem;
  font-weight: 700;
  letter-spacing: 0.02em;
  text-decoration: none;
  transition: background 0.25s ease, border-color 0.25s ease, transform 0.25s ease;
}

.event-panel-calendar:hover,
.event-panel-calendar:focus-visible {
  background: rgba(215, 169, 71, 0.22);
  border-color: var(--gold);
  transform: translateY(-1px);
  color: #fff;
}

.event-panel-calendar svg {
  flex-shrink: 0;
}

/* Round 64 で追加した .event-panel-calendar-options / -secondary は
   Round 66 で削除(.ics ボタン廃止、Google カレンダー単一ボタンへ回帰) */

.notice,
.section {
  width: min(1120px, calc(100% - 40px));
  margin-inline: auto;
}

.notice {
  position: relative;
  display: grid;
  grid-template-columns: 0.85fr 1.15fr;
  gap: 30px;
  align-items: center;
  margin-top: 38px;
  padding: 32px clamp(20px, 3vw, 36px);
  border-radius: 10px;
  background: linear-gradient(135deg, rgba(215, 169, 71, 0.06), rgba(184, 63, 55, 0.04));
  border: 1px solid rgba(215, 169, 71, 0.22);
  box-shadow: 0 8px 28px rgba(28, 35, 42, 0.04);
}

.notice::before {
  content: "";
  position: absolute;
  top: 0;
  left: 24px;
  width: 60px;
  height: 3px;
  background: linear-gradient(90deg, var(--gold), var(--red));
  border-radius: 2px;
  transform: translateY(-50%);
}

.notice h2 {
  margin-bottom: 0;
  font-size: clamp(1.4rem, 3vw, 2rem);
}

.notice-countdown {
  display: inline-flex;
  align-items: baseline;
  gap: 8px;
  margin: 10px 0 0;
  padding: 6px 14px 6px 12px;
  background: linear-gradient(135deg, rgba(215, 169, 71, 0.18), rgba(184, 63, 55, 0.10));
  border: 1px solid rgba(215, 169, 71, 0.42);
  border-radius: 999px;
  font-size: 0.92rem;
  font-weight: 700;
  color: var(--ink);
}

.notice-countdown-label {
  font-size: 0.8rem;
  font-weight: 700;
  color: var(--muted);
  letter-spacing: 0.04em;
}

.notice-countdown-value strong {
  font-family: "Zen Old Mincho", serif;
  font-size: 1.35rem;
  color: var(--red);
  font-weight: 900;
  margin: 0 2px;
}

.notice-countdown.is-soon {
  background: linear-gradient(135deg, rgba(215, 169, 71, 0.30), rgba(184, 63, 55, 0.18));
  border-color: var(--gold);
}

.notice-countdown.is-urgent {
  background: linear-gradient(135deg, rgba(184, 63, 55, 0.20), rgba(184, 63, 55, 0.10));
  border-color: var(--red);
  animation: countdown-pulse 1.8s ease-in-out infinite;
}

.notice-countdown.is-urgent .notice-countdown-value strong {
  color: var(--red);
}

.notice-countdown.is-today {
  background: linear-gradient(135deg, var(--gold), var(--red));
  border-color: transparent;
  color: #fff;
}

.notice-countdown.is-today .notice-countdown-label,
.notice-countdown.is-today .notice-countdown-value strong {
  color: #fff;
}

/* < 24h until showtime — stronger than .is-urgent, hints at fireworks-burst */
.notice-countdown.is-imminent {
  background: linear-gradient(135deg, rgba(215, 169, 71, 0.32), rgba(184, 63, 55, 0.28));
  border-color: var(--red);
  animation: countdown-imminent 1.4s ease-in-out infinite;
}

.notice-countdown.is-imminent .notice-countdown-label {
  color: var(--red);
}

.notice-countdown.is-imminent .notice-countdown-value strong {
  color: var(--red);
}

@keyframes countdown-pulse {
  0%, 100% { box-shadow: 0 0 0 0 rgba(184, 63, 55, 0.30); }
  50% { box-shadow: 0 0 0 6px rgba(184, 63, 55, 0); }
}

@keyframes countdown-imminent {
  0%, 100% { box-shadow: 0 0 0 0 rgba(184, 63, 55, 0.45); }
  50%      { box-shadow: 0 0 0 10px rgba(184, 63, 55, 0); }
}

@media (prefers-reduced-motion: reduce) {
  .notice-countdown.is-urgent,
  .notice-countdown.is-imminent { animation: none; }
}

.notice p {
  margin-bottom: 0;
  color: var(--muted);
}

.notice-body {
  display: flex;
  flex-direction: column;
  gap: 16px;
}

.notice-actions {
  display: flex;
  flex-wrap: wrap;
  gap: 14px;
  align-items: center;
}

.notice-actions .button.secondary {
  color: var(--ink);
  border: 1px solid var(--line);
  background: #fff;
  min-height: 40px;
}

.notice-actions .button.secondary:hover {
  border-color: var(--gold);
  color: var(--gold-text);
}

/* ===== Press releases (CMS-driven on pr.html) ===== */
.prose .press-section {
  margin: 0 0 2.4em;
}

.prose .press-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
  gap: 16px;
}

.prose .press-card {
  padding: 18px 20px;
  border: 1px solid var(--line);
  border-radius: 10px;
  background: #fff;
  box-shadow: 0 6px 22px rgba(28, 35, 42, 0.05);
  display: flex;
  flex-direction: column;
  gap: 10px;
  transition: transform 0.25s ease, box-shadow 0.25s ease;
}

.prose .press-card:hover {
  transform: translateY(-3px);
  box-shadow: 0 16px 38px rgba(28, 35, 42, 0.1);
}

.prose .press-card-meta {
  display: flex;
  align-items: center;
  gap: 10px;
}

.prose .press-card-logo {
  width: 40px;
  height: 40px;
  border-radius: 6px;
  object-fit: contain;
  background: var(--cream);
}

.prose .press-card-outlet {
  margin: 0;
  font-size: 0.88rem;
  color: var(--ink);
  font-weight: 700;
}

.prose .press-card-date {
  display: block;
  font-size: 0.78rem;
  color: var(--muted);
}

.prose .press-card-title {
  font-size: 1rem;
  font-weight: 800;
  color: var(--ink);
  line-height: 1.5;
  text-decoration: none;
}

a.press-card-title {
  text-decoration: underline;
  text-underline-offset: 3px;
  text-decoration-color: rgba(15, 104, 104, 0.35);
}

a.press-card-title:hover {
  text-decoration-color: var(--red);
  color: var(--red);
}

.prose .press-card-summary {
  margin: 0;
  font-size: 0.9rem;
  color: var(--muted);
  line-height: 1.7;
}

/* ===== Dynamic FAQ (CMS-driven on qa.html) ===== */
.prose .faq-dynamic-section {
  margin: 0 0 3em;
}

.prose .faq-item-dynamic {
  padding: 16px 22px;
  border: 1px solid var(--line);
  border-radius: 8px;
  background: #fff;
  box-shadow: 0 4px 16px rgba(28, 35, 42, 0.04);
  margin-bottom: 10px;
  transition: border-color 0.2s ease, box-shadow 0.2s ease;
}

.prose .faq-item-dynamic:hover {
  border-color: rgba(215, 169, 71, 0.4);
}

.prose .faq-item-dynamic[open] {
  border-color: rgba(215, 169, 71, 0.55);
  box-shadow: 0 8px 22px rgba(28, 35, 42, 0.08);
}

.prose .faq-item-dynamic summary {
  display: flex;
  align-items: center;
  gap: 10px;
  cursor: pointer;
  list-style: none;
  font-weight: 800;
  font-size: 1rem;
  line-height: 1.5;
}

.prose .faq-item-dynamic summary::-webkit-details-marker {
  display: none;
}

.prose .faq-item-cat {
  padding: 2px 8px;
  border-radius: 4px;
  background: rgba(215, 169, 71, 0.18);
  color: var(--gold);
  font-size: 0.74rem;
  font-weight: 900;
  letter-spacing: 0.04em;
}

.prose .faq-item-q {
  flex: 1;
}

.prose .faq-item-dynamic p {
  margin: 14px 0 0;
  color: var(--muted);
  line-height: 1.8;
}

/* ===== Testimonials section (来場者の声) ===== */
.testimonial-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
  gap: 18px;
}

.testimonial-card {
  position: relative;
  padding: 28px 24px 22px;
  border-radius: 12px;
  background: #fff;
  border: 1px solid var(--line);
  box-shadow: 0 10px 30px rgba(28, 35, 42, 0.06);
  display: flex;
  flex-direction: column;
  gap: 18px;
}

.testimonial-card::before {
  content: "\201C";
  position: absolute;
  top: 8px;
  right: 18px;
  font-family: "Zen Old Mincho", serif;
  font-size: 4.2rem;
  line-height: 1;
  color: rgba(215, 169, 71, 0.32);
  font-weight: 900;
  pointer-events: none;
}

.testimonial-quote {
  margin: 0;
  position: relative;
  font-size: 0.98rem;
  line-height: 1.85;
  color: var(--ink);
  flex: 1;
}

.testimonial-footer {
  display: flex;
  align-items: center;
  gap: 12px;
  padding-top: 14px;
  border-top: 1px solid var(--line);
}

.testimonial-avatar {
  flex: 0 0 auto;
  width: 42px;
  height: 42px;
  border-radius: 50%;
  object-fit: cover;
  background: var(--cream);
}

.testimonial-avatar-placeholder {
  background: linear-gradient(135deg, var(--gold), var(--red));
}

.testimonial-name {
  margin: 0;
  font-weight: 800;
  color: var(--ink);
  font-size: 0.95rem;
}

.testimonial-meta {
  margin: 2px 0 0;
  color: var(--muted);
  font-size: 0.82rem;
}

/* ===== Next-edition signup section ===== */
.section.signup {
  padding-top: clamp(36px, 6vw, 72px);
}

.signup-card {
  position: relative;
  border-radius: 16px;
  overflow: hidden;
  background:
    radial-gradient(circle at 88% 12%, rgba(215, 169, 71, 0.32), transparent 55%),
    radial-gradient(circle at 12% 90%, rgba(184, 63, 55, 0.18), transparent 50%),
    linear-gradient(135deg, #10182a 0%, #173a51 70%, #0f3939 100%);
  color: #fff;
  box-shadow: 0 24px 70px rgba(11, 19, 31, 0.22);
}

.signup-card::before {
  content: "";
  position: absolute;
  inset: 0;
  background-image: radial-gradient(rgba(255, 255, 255, 0.06) 1px, transparent 1px);
  background-size: 32px 32px;
  pointer-events: none;
  opacity: 0.55;
}

.signup-card::after {
  content: "";
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 2px;
  background: linear-gradient(90deg, transparent, var(--gold), transparent);
}

.signup-card-inner {
  position: relative;
  padding: clamp(40px, 6vw, 64px) clamp(24px, 5vw, 56px);
  max-width: 920px;
  margin: 0 auto;
}

.signup-card .tag {
  color: var(--gold);
}

.signup-card h2 {
  margin: 12px 0 18px;
  font-size: clamp(1.8rem, 4.4vw, 2.8rem);
  font-weight: 900;
  color: #fff;
  line-height: 1.3;
}

.signup-lead {
  margin: 0 0 32px;
  color: rgba(255, 255, 255, 0.85);
  line-height: 1.8;
  font-size: 1rem;
}

.signup-options {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
  gap: 14px;
}

.signup-option {
  display: flex;
  align-items: center;
  gap: 14px;
  padding: 18px 20px;
  border-radius: 12px;
  background: rgba(255, 255, 255, 0.07);
  border: 1px solid rgba(255, 255, 255, 0.16);
  color: #fff;
  text-decoration: none;
  transition: transform 0.25s ease, background 0.25s ease, border-color 0.25s ease;
}

.signup-option:hover {
  transform: translateY(-2px);
  background: rgba(255, 255, 255, 0.13);
  border-color: rgba(215, 169, 71, 0.55);
  color: #fff;
}

.signup-option[aria-disabled="true"] {
  pointer-events: none;
  opacity: 0.55;
}

.signup-option-icon {
  flex: 0 0 auto;
  display: grid;
  place-items: center;
  width: 44px;
  height: 44px;
  border-radius: 50%;
  background: rgba(215, 169, 71, 0.18);
  color: var(--gold);
}

.signup-option-body {
  display: flex;
  flex-direction: column;
  gap: 2px;
  line-height: 1.4;
}

.signup-option-body strong {
  font-weight: 800;
  font-size: 0.98rem;
  color: #fff;
}

.signup-option-body span {
  font-size: 0.82rem;
  color: rgba(255, 255, 255, 0.7);
}

@media (max-width: 620px) {
  .signup-options {
    grid-template-columns: 1fr;
  }
  .signup-card h2 br {
    display: none;
  }
}

.button-text {
  display: inline-flex;
  align-items: center;
  color: var(--teal);
  font-weight: 700;
  font-size: 0.92rem;
  text-decoration: underline;
  text-underline-offset: 4px;
  text-decoration-color: rgba(15, 104, 104, 0.35);
  text-decoration-thickness: 1px;
  transition: color 0.2s ease, text-decoration-color 0.2s ease, text-decoration-thickness 0.2s ease, transform 0.2s ease, gap 0.2s ease;
  gap: 4px;
}

.button-text:hover {
  color: var(--red);
  text-decoration-color: currentColor;
  text-decoration-thickness: 2px;
  gap: 8px;
}

.section {
  padding: clamp(58px, 9vw, 104px) 0;
}

.section-heading {
  position: relative;
  max-width: 760px;
  margin-bottom: 38px;
  padding-bottom: 4px;
}

.section-heading h2,
.support-band h2 {
  margin: 10px 0 14px;
  font-size: clamp(1.9rem, 4vw, 3.4rem);
  word-break: keep-all;
  line-break: strict;
}

.section-heading p,
.support-band p {
  color: var(--muted);
  font-size: 1.03rem;
  word-break: keep-all;
  line-break: strict;
  overflow-wrap: break-word;
}

/* Split layout has a narrow first column; allow normal wrapping there */
.split .section-heading h2,
.split .section-heading p {
  word-break: normal;
  line-break: auto;
}

.intro-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: clamp(22px, 5vw, 70px);
}

.intro-grid p {
  margin-bottom: 0;
  font-size: 1.08rem;
}

.intro-body {
  max-width: 820px;
  margin: 0;
}

.intro-body p {
  margin: 0 0 1.1em;
  font-size: 1.06rem;
  line-height: 1.95;
  color: var(--muted);
}

.intro-body p:last-child {
  margin-bottom: 0;
}

.intro-body .intro-lead {
  color: var(--ink);
  font-size: clamp(1.1rem, 1.6vw, 1.22rem);
  font-weight: 600;
  line-height: 1.85;
  /* Round 73: カタカナ語(イベント等)が途中で折り返されないように。
     keep-all は CJK 文字間の改行を抑制し、句読点でのみ改行する */
  word-break: keep-all;
  line-break: strict;
  overflow-wrap: anywhere;
}

/* イントロ本文も同様の処理(カタカナ語の途中改行防止) */
.intro-body p {
  word-break: keep-all;
  line-break: strict;
  overflow-wrap: anywhere;
}

.stats {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 18px;
  padding-top: 0;
}

.stats article,
.ticket-card,
.info-card {
  border: 1px solid var(--line);
  border-radius: 8px;
  background: #fff;
  box-shadow: 0 12px 38px rgba(28, 35, 42, 0.07);
}

.stats article {
  display: flex;
  flex-direction: column;
  padding: 0;
  overflow: hidden;
  transition: transform 0.3s ease, box-shadow 0.3s ease;
}

.stats article:hover {
  transform: translateY(-4px);
  box-shadow: 0 20px 50px rgba(28, 35, 42, 0.14);
}

.stats-thumb {
  position: relative;
  width: 100%;
  aspect-ratio: 16 / 10;
  overflow: hidden;
  background: var(--cream);
}

.stats-thumb::after {
  content: "";
  position: absolute;
  inset: 0;
  background: linear-gradient(180deg, transparent 60%, rgba(8, 13, 25, 0.18));
  pointer-events: none;
}

.stats-thumb img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
  transition: transform 0.5s ease;
}

.stats article:hover .stats-thumb img {
  transform: scale(1.05);
}

.stats-body {
  padding: 22px 24px 26px;
  flex: 1;
}

.stats span {
  display: inline-block;
  position: relative;
  font-family: "Zen Old Mincho", serif;
  font-size: 1.8rem;
  line-height: 1;
  color: var(--red);
  font-weight: 900;
  letter-spacing: 0.02em;
  transition: transform 0.3s ease, color 0.3s ease;
}

/* ===== Why-choose section (practical differentiation for comparing visitors) ===== */
.section.why-choose {
  background: linear-gradient(180deg, transparent 0%, rgba(215, 169, 71, 0.04) 100%);
}

.why-choose-grid {
  /* 5 枚を 4+1 (孤児発生) ではなく、十分な幅で 5 枚並べ、足りなければ
     3+2 / 2+2+1 などで中央寄せ折り返し。flex + justify-content: center
     で orphan を視覚的に整える。 */
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: 18px;
  margin-top: 36px;
}

.why-choose-grid > .why-choose-card {
  /* 5 枚並ぶ理想幅: (1120 - 4*18)/5 ≈ 209px。
     min 200 / max 260 でレスポンシブに伸縮。 */
  flex: 1 1 calc((100% - 72px) / 5);
  min-width: 200px;
  max-width: 280px;
}

@media (max-width: 960px) {
  .why-choose-grid > .why-choose-card {
    /* 3 列レイアウト時の幅 */
    flex: 1 1 calc((100% - 36px) / 3);
    min-width: 220px;
  }
}

@media (max-width: 620px) {
  .why-choose-grid > .why-choose-card {
    /* 2 列レイアウト時の幅 (orphan は中央寄せ) */
    flex: 1 1 calc((100% - 18px) / 2);
    min-width: 0;
  }
}

@media (max-width: 420px) {
  .why-choose-grid > .why-choose-card {
    /* 1 列 (極小デバイス) */
    flex: 1 1 100%;
  }
}

.why-choose-card {
  display: flex;
  flex-direction: column;
  gap: 14px;
  padding: 28px 24px 26px;
  border-radius: 12px;
  background: #fff;
  border: 1px solid var(--line);
  box-shadow: 0 8px 26px rgba(28, 35, 42, 0.06);
  transition: transform 0.3s ease, box-shadow 0.3s ease;
}

.why-choose-card:hover {
  transform: translateY(-4px);
  box-shadow: 0 16px 44px rgba(28, 35, 42, 0.12);
}

.why-choose-icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 52px;
  height: 52px;
  border-radius: 50%;
  background: linear-gradient(135deg, rgba(215, 169, 71, 0.16), rgba(184, 63, 55, 0.10));
  color: var(--red);
}

.why-choose-card h3 {
  margin: 4px 0 0;
  font-size: 1.05rem;
  font-weight: 800;
  line-height: 1.5;
  word-break: keep-all;
  line-break: strict;
}

.why-choose-card p {
  margin: 0;
  font-size: 0.92rem;
  line-height: 1.85;
  color: var(--muted);
}

.why-choose-card p strong {
  color: var(--ink);
  font-weight: 700;
}

/* ===== Achievements section (numeric social proof on homepage) ===== */
.section.achievements {
  padding-top: clamp(40px, 5vw, 64px);
  padding-bottom: clamp(40px, 5vw, 64px);
}

.achievements-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
  gap: 18px;
}

.achievements-card {
  display: flex;
  flex-direction: column;
  align-items: center;
  text-align: center;
  gap: 10px;
  padding: 30px 22px 28px;
  border-radius: 12px;
  background: #fff;
  border: 1px solid var(--line);
  box-shadow: 0 8px 26px rgba(28, 35, 42, 0.06);
  transition: transform 0.3s ease, box-shadow 0.3s ease;
}

.achievements-card:hover {
  transform: translateY(-3px);
  box-shadow: 0 14px 38px rgba(28, 35, 42, 0.10);
}

.achievements-num {
  display: inline-block;
  font-family: "Zen Old Mincho", serif;
  font-weight: 900;
  font-size: 1.4rem;
  color: var(--ink);
  letter-spacing: 0.02em;
  line-height: 1;
}

.achievements-num em {
  display: inline-block;
  font-style: normal;
  font-size: 2.6rem;
  color: var(--red);
  margin: 0 0.05em;
  line-height: 1;
}

.achievements-card p {
  margin: 0;
  font-size: 0.88rem;
  line-height: 1.7;
  color: var(--muted);
}

/* "Coming soon" achievement cards — visually de-emphasized so the
   placeholder doesn't read as a real metric. Swap to a real number +
   remove the .achievements-card-pending class when data is in. */
.achievements-card-pending {
  opacity: 0.78;
  background: linear-gradient(180deg, #fff, var(--cream));
}

.achievements-card-pending .achievements-num em {
  color: var(--muted);
  font-style: normal;
}

.achievements-pending-note {
  display: block;
  margin-top: 4px;
  font-size: 0.74rem;
  color: var(--muted);
  letter-spacing: 0.02em;
}

@media (prefers-color-scheme: dark) {
  .achievements-card-pending {
    background: linear-gradient(180deg, #1a2236, #131a28);
  }
}

/* ===== Ticket guide (席選びガイド) on ticket.html ===== */
.prose .ticket-guide {
  margin: 28px 0 36px;
  padding: 28px clamp(20px, 3.5vw, 32px) 30px;
  background: linear-gradient(180deg, rgba(215, 169, 71, 0.06), rgba(255, 255, 255, 0));
  border: 1px solid rgba(215, 169, 71, 0.18);
  border-radius: 14px;
}

.prose .ticket-guide-heading {
  margin: 0 0 8px;
  font-size: 1.25rem;
  font-weight: 900;
  color: var(--ink);
}

.prose .ticket-guide-lead {
  margin: 0 0 22px;
  color: var(--muted);
  font-size: 0.95rem;
}

.ticket-guide-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
  gap: 16px;
}

.ticket-guide-card {
  display: flex;
  flex-direction: column;
  gap: 10px;
  padding: 22px 22px 20px;
  border-radius: 12px;
  background: #fff;
  border: 1px solid var(--line);
  box-shadow: 0 6px 20px rgba(28, 35, 42, 0.05);
  text-decoration: none;
  color: var(--ink);
  transition: transform 0.3s ease, box-shadow 0.3s ease, border-color 0.3s ease;
}

.ticket-guide-card:hover {
  transform: translateY(-4px);
  box-shadow: 0 18px 44px rgba(28, 35, 42, 0.14);
  border-color: var(--gold);
}

.ticket-guide-card-tag {
  display: inline-block;
  align-self: flex-start;
  padding: 4px 10px;
  font-size: 0.74rem;
  font-weight: 700;
  letter-spacing: 0.06em;
  border-radius: 999px;
  background: rgba(184, 63, 55, 0.08);
  color: var(--red);
}

.ticket-guide-card h4 {
  margin: 2px 0 0;
  font-family: "Zen Old Mincho", serif;
  font-size: 1.45rem;
  font-weight: 900;
  color: var(--ink);
  line-height: 1.2;
}

.ticket-guide-price {
  margin: 0;
  font-size: 0.92rem;
  color: var(--muted);
}

.ticket-guide-price strong {
  color: var(--red);
  font-size: 1.15rem;
  font-weight: 900;
  margin: 0 2px;
}

.ticket-guide-price span {
  font-size: 0.86rem;
  margin-left: 4px;
}

.prose .ticket-guide-card ul {
  list-style: none;
  padding: 0;
  margin: 6px 0 0;
}

.prose .ticket-guide-card li {
  position: relative;
  padding-left: 18px;
  font-size: 0.88rem;
  line-height: 1.7;
  color: #555f6c;
  margin: 0 0 4px;
}

.prose .ticket-guide-card li::before {
  content: "✓";
  position: absolute;
  left: 0;
  top: 0;
  color: var(--gold);
  font-weight: 900;
}

.ticket-guide-cta {
  display: inline-block;
  margin-top: 8px;
  padding-top: 12px;
  border-top: 1px dashed var(--line);
  font-size: 0.86rem;
  font-weight: 700;
  color: var(--red);
  letter-spacing: 0.02em;
}

.ticket-guide-card:hover .ticket-guide-cta {
  color: var(--gold-text);
}

/* ===== Access summary table (主要駅からのアクセス) on access.html ===== */
.prose .access-summary {
  margin: 0 auto 36px;
  padding: 28px clamp(20px, 3.5vw, 32px) 30px;
  border-radius: 14px;
  background: linear-gradient(135deg, rgba(215, 169, 71, 0.06), rgba(184, 63, 55, 0.03));
  border: 1px solid rgba(215, 169, 71, 0.22);
}

.prose .access-summary-heading {
  margin: 0 0 6px;
  font-size: 1.2rem;
  font-weight: 900;
  color: var(--ink);
}

.prose .access-summary-lead {
  margin: 0 0 18px;
  color: var(--muted);
  font-size: 0.95rem;
}

.access-summary-table-wrap {
  overflow-x: auto;
  border-radius: 8px;
}

.prose .access-summary-table {
  width: 100%;
  border-collapse: collapse;
  background: #fff;
  border: 1px solid var(--line);
}

.prose .access-summary-table th,
.prose .access-summary-table td {
  padding: 12px 16px;
  text-align: center;
  font-size: 0.94rem;
  border-bottom: 1px solid var(--line);
}

.prose .access-summary-table thead th {
  background: rgba(215, 169, 71, 0.10);
  font-weight: 700;
  color: var(--ink);
  letter-spacing: 0.04em;
}

.prose .access-summary-table tbody th {
  text-align: left;
  background: rgba(28, 35, 42, 0.02);
  font-weight: 700;
  color: var(--ink);
  white-space: nowrap;
}

.prose .access-summary-table tbody tr:last-child th,
.prose .access-summary-table tbody tr:last-child td {
  border-bottom: 0;
}

.prose .access-summary-note {
  margin: 14px 0 0;
  font-size: 0.82rem;
  color: var(--muted);
}

/* ===== Share section (UGC/diffusion strategy) ===== */
.section.share-section {
  padding-top: clamp(40px, 5vw, 64px);
  padding-bottom: clamp(40px, 5vw, 64px);
}

.share-card {
  display: grid;
  grid-template-columns: 1.1fr 1fr;
  gap: clamp(24px, 4vw, 48px);
  align-items: center;
  padding: clamp(30px, 4.5vw, 48px) clamp(24px, 4vw, 44px);
  border-radius: 14px;
  background: linear-gradient(135deg, #fdf6ea 0%, #fff8ec 60%, #ffefe0 100%);
  border: 1px solid rgba(215, 169, 71, 0.30);
  box-shadow: 0 10px 30px rgba(28, 35, 42, 0.06);
}

.share-card-text h2 {
  margin: 8px 0 12px;
  font-size: clamp(1.4rem, 3vw, 1.9rem);
  color: var(--ink);
  font-weight: 900;
  line-height: 1.4;
}

.share-card-text p {
  margin: 0;
  font-size: 0.95rem;
  line-height: 1.85;
  color: #485363;
}

.share-card-text strong {
  color: var(--red);
  font-weight: 800;
}

.share-buttons {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 10px;
}

.share-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  padding: 12px 18px;
  border: 1px solid transparent;
  border-radius: 10px;
  font-size: 0.92rem;
  font-weight: 700;
  letter-spacing: 0.04em;
  text-decoration: none;
  cursor: pointer;
  transition: transform 0.25s ease, box-shadow 0.25s ease, background 0.25s ease;
}

.share-btn:hover {
  transform: translateY(-2px);
  box-shadow: 0 6px 18px rgba(28, 35, 42, 0.14);
}

.share-btn-x {
  background: #000;
  color: #fff;
}

.share-btn-line {
  background: #06c755;
  color: #fff;
}

.share-btn-fb {
  background: #1877f2;
  color: #fff;
}

.share-btn-copy {
  background: #fff;
  color: var(--ink);
  border-color: var(--line);
}

.share-btn-copy.is-copied {
  background: var(--gold);
  color: #fff;
  border-color: var(--gold);
}

@media (max-width: 760px) {
  .share-card {
    grid-template-columns: 1fr;
  }
}

/* ===== Urgent banner (開催当日・直前期の緊急告知) =====
   hidden 属性を外して有効化する運用想定。
   背景：赤系グラデーション、固定位置でヘッダー直下に貼り付ける */
.urgent-banner {
  position: sticky;
  top: 72px; /* ヘッダー高さ */
  z-index: 19;
  /* デフォルト = data-severity="urgent" と同等の赤グラデ */
  background: linear-gradient(135deg, var(--red), #d4604a);
  color: #fff;
  box-shadow: 0 8px 24px rgba(184, 63, 55, 0.32);
  animation: urgent-banner-in 0.45s ease-out both;
}

/* ---- Round 63 / Audit Vol.2 ⑥: severity 2 層化 ---- */
/* オオカミ少年化を防ぐため、severity に応じて視覚強度を変える */

/* info: 青系の控えめバナー(チケット販売開始など、通常告知) */
.urgent-banner[data-severity="info"] {
  background: linear-gradient(135deg, var(--teal), #1f8c8c);
  box-shadow: 0 6px 18px rgba(15, 104, 104, 0.24);
}

/* warning: 黄系のバナー(注意喚起、台風接近予報など) */
.urgent-banner[data-severity="warning"] {
  background: linear-gradient(135deg, #b8860b, var(--gold));
  color: #1a1300;
  box-shadow: 0 6px 18px rgba(184, 134, 11, 0.30);
}

.urgent-banner[data-severity="warning"] .urgent-banner-tag {
  background: rgba(0, 0, 0, 0.18);
  border-color: rgba(0, 0, 0, 0.30);
  color: #1a1300;
}

.urgent-banner[data-severity="warning"] .urgent-banner-action {
  background: rgba(0, 0, 0, 0.12);
  border-color: rgba(0, 0, 0, 0.42);
  color: #1a1300;
}

.urgent-banner[data-severity="warning"] .urgent-banner-action:hover {
  background: rgba(0, 0, 0, 0.22);
  color: #1a1300;
}

/* urgent: 赤系の強いバナー(中止・緊急変更、open default のまま) */
.urgent-banner[data-severity="urgent"] {
  background: linear-gradient(135deg, var(--red), #d4604a);
  box-shadow: 0 8px 24px rgba(184, 63, 55, 0.32);
}

.urgent-banner-inner {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 12px 18px;
  max-width: 1120px;
  margin-inline: auto;
  padding: 12px clamp(18px, 4vw, 36px);
}

.urgent-banner-tag {
  display: inline-block;
  padding: 2px 10px;
  background: rgba(255, 255, 255, 0.18);
  border: 1px solid rgba(255, 255, 255, 0.42);
  border-radius: 999px;
  font-size: 0.78rem;
  font-weight: 800;
  letter-spacing: 0.06em;
}

.urgent-banner-msg {
  flex: 1 1 280px;
  font-size: 1.02rem;
  line-height: 1.5;
}

.urgent-banner-action {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  padding: 6px 16px;
  background: rgba(255, 255, 255, 0.18);
  border: 1px solid rgba(255, 255, 255, 0.55);
  border-radius: 999px;
  font-size: 0.88rem;
  font-weight: 700;
  color: #fff;
  text-decoration: none;
  transition: background 0.2s ease, transform 0.2s ease;
}

.urgent-banner-action:hover {
  background: rgba(255, 255, 255, 0.3);
  transform: translateY(-1px);
  color: #fff;
}

@keyframes urgent-banner-in {
  from { transform: translateY(-100%); opacity: 0; }
  to   { transform: translateY(0); opacity: 1; }
}

@media (prefers-reduced-motion: reduce) {
  .urgent-banner { animation: none; }
}

@media (max-width: 620px) {
  .urgent-banner {
    top: 64px;
  }
  .urgent-banner-msg {
    font-size: 0.92rem;
  }
}

/* ===== Press Kit (pr.html: 報道関係者向け素材集) ===== */
.prose .press-kit {
  margin: 24px 0 48px;
  padding: clamp(28px, 4vw, 42px);
  background: linear-gradient(180deg, rgba(215, 169, 71, 0.06), rgba(255, 255, 255, 0) 60%);
  border: 1px solid rgba(215, 169, 71, 0.28);
  border-radius: 14px;
}

.prose .press-kit > h2 {
  margin-top: 0;
}

.prose .press-kit > p {
  margin-bottom: 20px;
  color: var(--muted);
}

.press-kit-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
  gap: 18px;
  margin-top: 20px;
}

.press-kit-card {
  padding: 22px 22px 20px;
  background: #fff;
  border: 1px solid var(--line);
  border-radius: 10px;
  box-shadow: 0 4px 18px rgba(28, 35, 42, 0.04);
}

.prose .press-kit-card h3 {
  margin: 0 0 12px;
  padding-bottom: 8px;
  border-bottom: 2px solid var(--gold);
  font-size: 1.02rem;
  font-weight: 800;
  color: var(--ink);
}

.prose .press-kit-facts {
  display: grid;
  grid-template-columns: max-content 1fr;
  gap: 6px 12px;
  margin: 0;
  font-size: 0.88rem;
  line-height: 1.7;
}

.prose .press-kit-facts dt {
  color: var(--muted);
  font-weight: 700;
  white-space: nowrap;
}

.prose .press-kit-facts dd {
  margin: 0;
  color: var(--ink);
}

.prose .press-kit-facts dd a {
  color: var(--teal);
  word-break: break-all;
  text-decoration: underline;
}

.prose .press-kit-downloads {
  list-style: none;
  padding: 0;
  margin: 0 0 14px;
  display: grid;
  gap: 8px;
}

.prose .press-kit-downloads li {
  margin: 0;
  padding: 0;
}

.prose .press-kit-downloads li::before {
  content: none;
}

.prose .press-kit-downloads a {
  display: flex;
  flex-direction: column;
  gap: 2px;
  padding: 10px 14px;
  background: rgba(28, 35, 42, 0.03);
  border: 1px solid var(--line);
  border-radius: 8px;
  font-size: 0.86rem;
  color: var(--ink);
  text-decoration: none;
  transition: background 0.2s ease, border-color 0.2s ease, transform 0.2s ease;
}

.prose .press-kit-downloads a:hover {
  background: rgba(215, 169, 71, 0.10);
  border-color: var(--gold);
  transform: translateX(2px);
}

.prose .press-kit-downloads a strong {
  display: block;
  font-weight: 700;
}

.prose .press-kit-downloads a span {
  font-size: 0.78rem;
  color: var(--muted);
}

.prose .press-kit-note {
  margin: 12px 0 0;
  font-size: 0.78rem;
  color: var(--muted);
  line-height: 1.6;
}

.prose .press-kit-card-contact p {
  margin: 0 0 14px;
  font-size: 0.92rem;
  line-height: 1.8;
}

.prose .press-kit-cta {
  margin: 14px 0;
}

.prose .press-kit-cta .button {
  background: var(--ink);
  color: #fff;
  padding: 10px 18px;
}

.prose .press-kit-cta .button:hover {
  background: var(--red);
}

.prose .press-kit-extras {
  list-style: none;
  margin: 14px 0 0;
  padding: 14px 0 0;
  border-top: 1px dashed var(--line);
  font-size: 0.86rem;
  color: var(--muted);
}

.prose .press-kit-extras li {
  margin: 4px 0;
  padding: 0;
  line-height: 1.7;
}

.prose .press-kit-extras li::before {
  content: none;
}

/* ===== Contact page: FAQ-first hint ===== */
.prose .contact-faq-hint {
  margin: 18px 0 26px;
  padding: 16px 22px;
  background: linear-gradient(135deg, rgba(215, 169, 71, 0.10), rgba(184, 63, 55, 0.04));
  border-left: 4px solid var(--gold);
  border-radius: 8px;
}

.prose .contact-faq-hint p {
  margin: 0;
  line-height: 1.75;
  font-size: 0.95rem;
}

.prose .contact-faq-hint p:first-child {
  margin-bottom: 4px;
  font-size: 0.86rem;
  font-weight: 800;
  color: var(--red);
  letter-spacing: 0.06em;
}

.prose .contact-faq-hint a {
  font-weight: 700;
  color: var(--teal);
  text-decoration: underline;
  text-underline-offset: 3px;
}

.prose .contact-faq-hint a:hover {
  color: var(--red);
}

/* ===== 404 page (visual cards) ===== */
.not-found-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
  gap: 16px;
  margin: 20px 0;
  max-width: 980px;
  margin-left: auto;
  margin-right: auto;
}

.not-found-card {
  position: relative;
  display: flex;
  flex-direction: column;
  gap: 8px;
  padding: 24px 22px;
  background: #fff;
  border: 1px solid var(--line);
  border-radius: 12px;
  text-decoration: none;
  color: var(--ink);
  box-shadow: 0 6px 22px rgba(28, 35, 42, 0.05);
  transition: transform 0.3s ease, box-shadow 0.3s ease, border-color 0.3s ease;
}

.not-found-card:hover {
  transform: translateY(-3px);
  box-shadow: 0 16px 40px rgba(28, 35, 42, 0.12);
  border-color: var(--gold);
}

.not-found-card-featured {
  grid-column: 1 / -1;
  flex-direction: row;
  align-items: center;
  gap: 18px;
  padding: 26px 28px;
  background: linear-gradient(135deg, rgba(215, 169, 71, 0.10), rgba(184, 63, 55, 0.06));
  border-color: rgba(215, 169, 71, 0.32);
}

.not-found-card-featured h3 {
  margin: 0;
}

.not-found-card-featured p {
  margin: 0;
}

.not-found-card-featured .not-found-card-icon {
  width: 56px;
  height: 56px;
}

.not-found-card-icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 44px;
  height: 44px;
  border-radius: 50%;
  background: rgba(215, 169, 71, 0.14);
  color: var(--red);
}

.not-found-card h3 {
  margin: 4px 0 0;
  font-size: 1.05rem;
  font-weight: 800;
  color: var(--ink);
}

.not-found-card p {
  margin: 0;
  font-size: 0.88rem;
  color: var(--muted);
  line-height: 1.7;
}

.not-found-card-arrow {
  position: absolute;
  top: 18px;
  right: 18px;
  font-size: 1.1rem;
  color: var(--gold);
  opacity: 0.7;
  transition: transform 0.25s ease, opacity 0.25s ease;
}

.not-found-card:hover .not-found-card-arrow {
  transform: translateX(4px);
  opacity: 1;
}

.not-found-note {
  margin: 24px auto 0;
  max-width: 980px;
  font-size: 0.88rem;
  color: var(--muted);
  line-height: 1.85;
  text-align: center;
}

@media (max-width: 620px) {
  .not-found-card-featured {
    flex-direction: column;
    text-align: center;
  }
}

/* ===== Support organisations list (company.html) ===== */
.prose .support-orgs {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
  gap: 24px;
  margin: 22px 0 18px;
}

.prose .support-orgs-group {
  padding: 22px 22px 18px;
  background: #fff;
  border: 1px solid var(--line);
  border-radius: 10px;
  box-shadow: 0 6px 22px rgba(28, 35, 42, 0.05);
}

.prose .support-orgs-title {
  margin: 0 0 12px;
  padding: 0 0 8px;
  border-bottom: 2px solid var(--gold);
  font-size: 1rem;
  font-weight: 800;
  color: var(--ink);
}

.prose .support-orgs-list {
  list-style: none;
  margin: 0;
  padding: 0;
}

.prose .support-orgs-list li {
  padding: 6px 0;
  font-size: 0.92rem;
  line-height: 1.6;
  color: #455463;
  border-bottom: 1px dashed rgba(28, 35, 42, 0.08);
}

.prose .support-orgs-list li:last-child {
  border-bottom: 0;
}

.prose .support-orgs-note {
  margin: 6px 0 0;
  font-size: 0.82rem;
  color: var(--muted);
}

/* ===== Subpage signup CTA banner (placed just before </main>) ===== */
.subpage-signup-cta {
  margin: clamp(40px, 6vw, 72px) auto clamp(48px, 7vw, 88px);
  padding: 0 clamp(16px, 4vw, 36px);
  max-width: 1180px;
}

.subpage-signup-cta-inner {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: clamp(24px, 4vw, 48px);
  align-items: center;
  padding: clamp(32px, 5vw, 56px) clamp(24px, 4vw, 48px);
  border-radius: 16px;
  background:
    radial-gradient(circle at 88% 12%, rgba(215, 169, 71, 0.32), transparent 55%),
    radial-gradient(circle at 12% 90%, rgba(184, 63, 55, 0.18), transparent 50%),
    linear-gradient(135deg, #10182a 0%, #173a51 70%, #0f3939 100%);
  color: #fff;
  box-shadow: 0 24px 70px rgba(11, 19, 31, 0.22);
}

.subpage-signup-cta-text .tag {
  color: var(--gold);
}

.subpage-signup-cta-text h2 {
  margin: 12px 0 14px;
  font-size: clamp(1.4rem, 3vw, 1.95rem);
  font-weight: 900;
  color: #fff;
  line-height: 1.45;
  word-break: keep-all;
  line-break: strict;
}

.subpage-signup-cta-text p {
  margin: 0;
  color: rgba(255, 255, 255, 0.85);
  line-height: 1.8;
  font-size: 0.95rem;
}

.subpage-signup-cta-actions {
  display: grid;
  grid-template-columns: 1fr;
  gap: 12px;
}

@media (max-width: 760px) {
  .subpage-signup-cta-inner {
    grid-template-columns: 1fr;
  }
}

/* Removed: .stats article:hover span color override.
   Reason: .stats span (Round 17) uses background-clip:text + color:transparent
   for a gradient number. Setting `color: var(--gold)` here was overridden by
   -webkit-text-fill-color:transparent in WebKit and caused a visual mismatch
   in Firefox. The card hover lift now comes from .stats article:hover
   (Round 16) and .stats article:hover .stats-body span (Round 17) — no
   color change needed on the number itself. */

.stats span::after {
  content: "";
  display: inline-block;
  margin-left: 6px;
  width: 28px;
  height: 2px;
  vertical-align: middle;
  background: linear-gradient(90deg, var(--gold), transparent);
  border-radius: 2px;
}

.stats h3,
.ticket-card h3,
.info-card h3 {
  margin: 12px 0 10px;
  font-size: 1.28rem;
}

.stats p,
.ticket-card p,
.info-card p {
  margin-bottom: 0;
  color: var(--muted);
}

.split {
  display: grid;
  grid-template-columns: minmax(0, 0.85fr) minmax(320px, 1.15fr);
  gap: clamp(28px, 5vw, 70px);
  align-items: start;
}

.ticket-list {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 16px;
}

.ticket-card {
  display: block;
  min-height: 190px;
  padding: 24px;
  color: inherit;
  text-decoration: none;
  transition: transform 0.3s ease, box-shadow 0.3s ease, border-color 0.3s ease;
}

a.ticket-card {
  cursor: pointer;
}

.ticket-card:hover {
  transform: translateY(-3px);
  box-shadow: 0 18px 46px rgba(28, 35, 42, 0.12);
  border-color: rgba(215, 169, 71, 0.5);
}

.ticket-card.accent:hover {
  border-color: transparent;
  box-shadow: 0 18px 46px rgba(15, 104, 104, 0.32);
}

.ticket-card::before {
  content: "";
  display: block;
  width: 46px;
  height: 46px;
  border-radius: 50%;
  background:
    radial-gradient(circle at 50% 50%, #fff 0 3px, transparent 4px),
    conic-gradient(var(--red), var(--gold), var(--teal), var(--red));
}

.ticket-card.accent {
  color: #fff;
  border-color: transparent;
  background: linear-gradient(135deg, var(--teal), #173a51);
}

.ticket-card.accent p {
  color: rgba(255, 255, 255, 0.82);
}

.ticket-status-note {
  margin: 14px 0 0;
  padding: 12px 16px;
  background: rgba(184, 63, 55, 0.08);
  border-left: 3px solid var(--red);
  border-radius: 4px;
  font-size: 0.92rem;
  color: var(--ink);
  line-height: 1.6;
}

.ticket-status-note strong {
  color: var(--red);
}

.ticket-price {
  margin: 6px 0 12px;
  padding: 10px 14px;
  border-radius: 6px;
  background: var(--cream);
  color: var(--ink);
  font-size: 0.9rem;
  font-weight: 500;
  line-height: 1.5;
}

.ticket-price strong {
  font-size: 1.2rem;
  font-weight: 900;
  color: var(--red);
  margin: 0 2px;
}

.ticket-price span {
  color: var(--muted);
  font-size: 0.84rem;
}

.ticket-card.accent .ticket-price {
  background: rgba(255, 255, 255, 0.08);
  color: rgba(255, 255, 255, 0.95);
}

.ticket-card.accent .ticket-price strong {
  color: #ffe8a6;
}

.ticket-card.accent .ticket-price span {
  color: rgba(255, 255, 255, 0.7);
}

.support-band {
  position: relative;
  display: grid;
  grid-template-columns: 1fr auto;
  gap: 32px;
  align-items: center;
  width: 100%;
  max-width: none;
  padding: clamp(58px, 8vw, 88px) max(22px, calc((100vw - 1120px) / 2));
  color: #fff;
  background: linear-gradient(135deg, rgba(16, 24, 42, 0.96), rgba(18, 104, 104, 0.9));
  overflow: hidden;
}

.support-band::before {
  content: "";
  position: absolute;
  inset: 0;
  background-image: radial-gradient(rgba(255, 255, 255, 0.06) 1px, transparent 1px);
  background-size: 32px 32px;
  background-position: 16px 16px;
  pointer-events: none;
  opacity: 0.5;
}

.support-band::after {
  content: "";
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 2px;
  background: linear-gradient(90deg, transparent, var(--gold), transparent);
}

.support-band > * {
  position: relative;
}

.support-band p {
  max-width: 720px;
  color: rgba(255, 255, 255, 0.8);
}

.support-actions {
  flex-wrap: wrap;
  gap: 14px;
  justify-content: flex-end;
}

.info-grid {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: 18px;
}

.info-grid > .info-card {
  flex: 1 1 280px;
  max-width: 360px;
}

.info-grid > .cms-status {
  flex: 1 1 100%;
}

.info-card {
  min-height: 214px;
  padding: 24px;
  overflow: hidden;
  transition: transform 0.25s ease, box-shadow 0.25s ease;
}

.info-card:hover {
  transform: translateY(-3px);
  box-shadow: 0 18px 42px rgba(28, 35, 42, 0.12);
}

.info-card.has-thumb {
  padding: 0;
  display: flex;
  flex-direction: column;
}

.info-card-thumb {
  width: 100%;
  aspect-ratio: 16 / 10;
  overflow: hidden;
  background: var(--cream);
}

.info-card-thumb img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
  transition: transform 0.5s ease;
}

.info-card:hover .info-card-thumb img {
  transform: scale(1.04);
}

.info-card-body {
  padding: 22px 24px 24px;
}

.info-card time {
  color: var(--teal);
  font-size: 0.88rem;
  font-weight: 900;
}

.info-card a {
  text-decoration: underline;
  text-decoration-color: rgba(15, 104, 104, 0.35);
  text-underline-offset: 4px;
}

.cms-status {
  grid-column: 1 / -1;
  margin: 0;
  padding: 24px;
  border: 1px solid var(--line);
  border-radius: 8px;
  color: var(--muted);
  background: #fff;
}

.cms-status-error {
  color: #8c2f28;
  border-color: rgba(184, 63, 55, 0.24);
  background: #fff8f4;
}

/* Status banner shown at top of sub-page bodies (e.g. 販売終了 / 応募締切) */
.page-status-banner {
  margin: 0 0 28px;
  padding: 18px 22px;
  border-left: 4px solid var(--red);
  border-radius: 6px;
  background: linear-gradient(135deg, #fff7f4 0%, #fff8ed 100%);
  box-shadow: 0 2px 12px rgba(184, 63, 55, 0.06);
}

.page-status-banner strong {
  display: block;
  margin-bottom: 6px;
  color: var(--red);
  font-size: 1.05rem;
  font-weight: 800;
}

.page-status-banner p {
  margin: 0;
  color: var(--muted);
  font-size: 0.95rem;
  line-height: 1.7;
}

.page-status-banner a {
  color: var(--ink);
  text-decoration: underline;
  text-underline-offset: 3px;
}

.page-status-banner a:hover {
  color: var(--gold-text);
}

.page-status-banner .page-status-actions {
  margin: 12px 0 0;
}

.page-status-banner .page-status-calendar {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 8px 16px;
  background: rgba(184, 63, 55, 0.08);
  border: 1px solid rgba(184, 63, 55, 0.28);
  border-radius: 999px;
  color: var(--red);
  font-size: 0.88rem;
  font-weight: 700;
  text-decoration: none;
  transition: background 0.25s ease, color 0.25s ease, border-color 0.25s ease;
}

.page-status-banner .page-status-calendar:hover {
  background: var(--red);
  color: #fff;
  border-color: var(--red);
}

/* Round 64 で追加した .page-status-calendar-options / -secondary は
   Round 66 で削除(.ics ボタン廃止、Google カレンダー単一ボタンへ回帰) */

/* Skeleton loaders for microCMS news list */
.info-card.is-skeleton {
  pointer-events: none;
}

.info-card.is-skeleton .info-card-body {
  display: flex;
  flex-direction: column;
  gap: 12px;
  padding: 20px;
}

.skeleton {
  display: block;
  background: linear-gradient(
    90deg,
    rgba(28, 35, 42, 0.06) 0%,
    rgba(28, 35, 42, 0.12) 50%,
    rgba(28, 35, 42, 0.06) 100%
  );
  background-size: 200% 100%;
  border-radius: 4px;
  animation: skeleton-shimmer 1.4s ease-in-out infinite;
}

.skeleton-line {
  height: 12px;
  width: 100%;
}

.skeleton-line-short {
  width: 32%;
  height: 10px;
}

.skeleton-line-title {
  height: 18px;
  width: 78%;
  margin-bottom: 4px;
}

@keyframes skeleton-shimmer {
  0% { background-position: 200% 0; }
  100% { background-position: -200% 0; }
}

@media (prefers-reduced-motion: reduce) {
  .skeleton { animation: none; }
}

.access-grid {
  display: grid;
  grid-template-columns: minmax(0, 1.2fr) minmax(300px, 0.8fr);
  gap: 18px;
  align-items: stretch;
}

.map-panel {
  min-height: 360px;
  border-radius: 8px;
  overflow: hidden;
  border: 1px solid var(--line);
  background: var(--cream);
  box-shadow: 0 12px 38px rgba(28, 35, 42, 0.08);
}

.map-panel iframe {
  display: block;
  width: 100%;
  height: 100%;
  min-height: 360px;
  border: 0;
}

.access-list {
  margin: 0;
  padding: 0;
}

.access-list div {
  padding: 22px 0;
  border-bottom: 1px solid var(--line);
}

.access-list dt {
  color: var(--red);
  font-weight: 900;
}

.access-list dd {
  margin: 4px 0 0;
  color: var(--muted);
}

.access-more {
  grid-column: 1 / -1;
  margin: 22px 0 0;
  text-align: right;
}

.faq-more,
.ticket-more,
.program-more,
.sponsor-more,
.past-more {
  margin: 22px 0 0;
  text-align: right;
}

/* When .ticket-more lives inside the .split grid, span both columns and right-align under the cards */
.split .ticket-more {
  grid-column: 1 / -1;
  margin-top: 28px;
  text-align: right;
}

/* ===== Schedule timeline ===== */
.timeline {
  list-style: none;
  margin: 0;
  padding: 0;
  display: grid;
  gap: 0;
  position: relative;
}

.timeline::before {
  content: "";
  position: absolute;
  left: 129px;
  top: 16px;
  bottom: 16px;
  width: 2px;
  background: linear-gradient(180deg, var(--gold), rgba(215, 169, 71, 0.2));
}

.timeline > li {
  position: relative;
  display: grid;
  grid-template-columns: 90px 1fr;
  gap: 80px;
  padding: 22px 0;
  align-items: center;
}

.timeline > li::before {
  content: "";
  position: absolute;
  left: 122px;
  top: 50%;
  transform: translateY(-50%);
  width: 16px;
  height: 16px;
  border-radius: 50%;
  background: #fff;
  border: 3px solid var(--gold);
  box-shadow: 0 0 0 4px var(--paper);
}

.timeline > li > div {
  max-width: 720px;
}

.timeline p {
  margin: 0;
  color: var(--muted);
  font-size: 0.98rem;
  line-height: 1.7;
}

.timeline > li.is-highlight::before {
  background: var(--gold);
  border-color: var(--red);
  box-shadow: 0 0 0 4px var(--paper), 0 0 0 6px rgba(184, 63, 55, 0.18);
  animation: highlight-pulse 2.5s ease-in-out infinite;
}

@keyframes highlight-pulse {
  0%, 100% {
    box-shadow: 0 0 0 4px var(--paper), 0 0 0 6px rgba(184, 63, 55, 0.18), 0 0 0 8px rgba(184, 63, 55, 0);
  }
  50% {
    box-shadow: 0 0 0 4px var(--paper), 0 0 0 8px rgba(184, 63, 55, 0.28), 0 0 0 14px rgba(184, 63, 55, 0.08);
  }
}

@media (prefers-reduced-motion: reduce) {
  .timeline > li.is-highlight::before {
    animation: none;
  }
}

.timeline time {
  font-family: "Zen Old Mincho", serif;
  font-size: clamp(1.4rem, 2.6vw, 1.8rem);
  font-weight: 900;
  color: var(--ink);
  text-align: right;
  line-height: 1;
}

.timeline > li.is-highlight time {
  color: var(--red);
}

.timeline h3 {
  margin: 0 0 6px;
  font-size: 1.15rem;
  font-weight: 800;
}

@media (max-width: 620px) {
  .timeline::before {
    left: 86px;
  }
  .timeline > li {
    grid-template-columns: 70px 1fr;
    gap: 34px;
    padding: 14px 0;
  }
  .timeline > li::before {
    left: 81px;
    width: 12px;
    height: 12px;
  }
  .timeline time {
    font-size: 1.2rem;
  }
}

/* ===== Sub-pages ===== */
.page-main {
  padding-top: 72px;
}

.page-hero {
  position: relative;
  padding: clamp(80px, 11vw, 140px) clamp(22px, 5vw, 70px) clamp(40px, 6vw, 80px);
  background:
    radial-gradient(circle at 12% 18%, rgba(215, 169, 71, 0.18), transparent 55%),
    radial-gradient(circle at 88% 22%, rgba(184, 63, 55, 0.12), transparent 50%),
    linear-gradient(180deg, #0f1828, #0f3939 70%, var(--cream));
  color: #fff;
  animation: hero-fade 0.7s ease-out both;
  overflow: hidden;
}

.page-hero::before {
  content: "";
  position: absolute;
  inset: 0;
  background-image: radial-gradient(rgba(255, 255, 255, 0.06) 1px, transparent 1px);
  background-size: 28px 28px;
  background-position: 12px 12px;
  pointer-events: none;
  opacity: 0.6;
}

.page-hero::after {
  content: "";
  position: absolute;
  bottom: 0;
  left: 50%;
  transform: translateX(-50%);
  width: min(1120px, calc(100% - 40px));
  height: 1px;
  background: linear-gradient(90deg, transparent 5%, rgba(215, 169, 71, 0.5) 50%, transparent 95%);
}

.page-hero-inner {
  position: relative;
  width: min(1120px, calc(100% - 40px));
  margin-inline: auto;
}

.page-hero .page-back {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  margin-bottom: 18px;
  padding: 8px 14px;
  border: 1px solid rgba(255, 255, 255, 0.32);
  border-radius: 999px;
  font-size: 0.86rem;
  font-weight: 700;
  color: rgba(255, 255, 255, 0.88);
  transition: background 0.2s ease, border-color 0.2s ease, transform 0.2s ease, gap 0.2s ease;
}

.page-hero .page-back:hover {
  background: rgba(255, 255, 255, 0.14);
  border-color: rgba(255, 255, 255, 0.5);
  transform: translateX(-2px);
  gap: 10px;
}

.page-hero-pill {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  margin: 0 0 16px;
  padding: 6px 14px 6px 10px;
  background: linear-gradient(135deg, rgba(215, 169, 71, 0.22), rgba(184, 63, 55, 0.18));
  border: 1px solid rgba(215, 169, 71, 0.5);
  border-radius: 999px;
  color: #fff;
  font-size: 0.78rem;
  font-weight: 800;
  letter-spacing: 0.02em;
  text-decoration: none;
  transition: background 0.2s ease, border-color 0.2s ease, transform 0.2s ease;
}

.page-hero-pill:hover,
.page-hero-pill:focus-visible {
  background: linear-gradient(135deg, rgba(215, 169, 71, 0.40), rgba(184, 63, 55, 0.28));
  border-color: var(--gold);
  transform: translateY(-1px);
  color: #fff;
}

.page-hero-pill-dot {
  display: inline-block;
  width: 7px;
  height: 7px;
  border-radius: 50%;
  background: var(--gold);
}

.page-hero-pill strong {
  color: var(--gold);
  font-weight: 900;
}

.page-hero-pill > span {
  color: rgba(255, 255, 255, 0.92);
}

.page-hero h1 {
  max-width: 920px;
  margin: 0;
  font-size: clamp(2rem, 5vw, 3.6rem);
  color: #fff;
  word-break: keep-all;
  line-break: strict;
  overflow-wrap: break-word;
}

.page-hero .tag {
  margin-bottom: 12px;
}

.page-body {
  padding: clamp(48px, 7vw, 96px) 0;
}

.prose {
  width: min(820px, calc(100% - 40px));
  margin-inline: auto;
  font-size: 1.02rem;
  line-height: 1.85;
}

.prose > * + * {
  margin-top: 1.2em;
}

.prose h2 {
  position: relative;
  margin-top: 1.6em;
  padding-bottom: 0.4em;
  font-size: clamp(1.5rem, 3vw, 2rem);
  word-break: keep-all;
  line-break: strict;
}

.prose h2::after {
  content: "";
  position: absolute;
  left: 0;
  bottom: 0;
  width: 100%;
  height: 2px;
  background: linear-gradient(90deg, var(--gold) 0%, var(--red) 60%, transparent 100%);
  border-radius: 2px;
}

.prose h3 {
  margin-top: 1.8em;
  font-size: clamp(1.2rem, 2.4vw, 1.4rem);
}

.prose h4 {
  margin-top: 1.6em;
  font-size: 1.1rem;
}

.prose p {
  margin: 0;
}

.prose a {
  color: var(--teal);
  text-decoration: underline;
  text-underline-offset: 4px;
}

.prose a:hover {
  color: var(--red);
}

/* Round 64: .prose a の underline がカード型アンカー全体に伝播するのを止める
   (ticket-guide-card / ticket-card は <a> 要素なので .prose a に巻き込まれる)
   ※ Round 65 で ticket-now-card は削除済み */
.prose a.ticket-guide-card,
.prose a.ticket-card {
  text-decoration: none;
  color: inherit;
}

.prose a.ticket-guide-card:hover,
.prose a.ticket-card:hover {
  color: inherit;
}

.prose ul,
.prose ol {
  padding-left: 1.4em;
}

.prose ul li,
.prose ol li {
  margin-bottom: 0.4em;
}

/* When a list item starts with <strong>title</strong><br>desc, surface the title */
.prose ol > li > strong:first-child,
.prose ul > li > strong:first-child {
  display: inline-block;
  color: var(--ink);
  font-size: 1.02em;
}

.prose ol > li,
.prose ul > li {
  line-height: 1.75;
}

.prose img {
  max-width: 100%;
  height: auto;
  border-radius: 6px;
}

/* Standalone images (not in columns/gallery): cap height for portrait-heavy assets like PDF previews */
.prose > .wp-block-image img,
.prose > p > .wp-block-image img,
.prose > div > .wp-block-image:not(.wp-block-columns .wp-block-image) img,
.prose .wp-block-image.is-resized img {
  max-height: 520px;
  width: auto;
  margin-inline: auto;
  display: block;
}

.prose figure {
  margin: 2em 0;
  text-align: center;
}

.prose figure figcaption {
  margin-top: 8px;
  color: var(--muted);
  font-size: 0.88rem;
}

.prose blockquote {
  margin: 1.6em 0;
  padding: 18px 24px;
  border-left: 4px solid var(--gold);
  background: var(--cream);
  color: var(--ink);
}

.prose hr {
  border: none;
  border-top: 1px solid var(--line);
  margin: 3em 0;
}

/* Tables - wrap in scroll container on narrow screens */
.prose .wp-block-table {
  overflow-x: auto;
  margin: 1.6em 0;
  -webkit-overflow-scrolling: touch;
}

.prose table {
  width: 100%;
  border-collapse: collapse;
  margin: 1.6em 0;
  font-size: 0.95rem;
}

.prose .wp-block-table table {
  margin: 0;
  min-width: 100%;
}

.prose table th,
.prose table td {
  padding: 12px 14px;
  border: 1px solid var(--line);
  text-align: left;
  vertical-align: middle;
  word-break: keep-all;
  overflow-wrap: anywhere;
  line-height: 1.5;
}

.prose table th {
  background: var(--cream);
  font-weight: 700;
}

.prose table tbody tr:nth-child(odd) {
  background: rgba(247, 239, 226, 0.4);
}

/* Sponsor-list tables (sponsor.html) use centered cells; remove horizontal scroll on wider screens */
.prose .has-fixed-layout {
  table-layout: fixed;
}

/* Smaller, more uniform cells for dense sponsor grids */
.prose .has-swl-pale-02-background-color td,
.prose .has-swl-pale-04-background-color td {
  font-size: 0.92rem;
}

/* Wide sponsor list section: ensure cells don't force horizontal scroll */
.prose .wp-block-table {
  margin: 1.2em 0;
}

/* Bus schedule table (access.html): more compact and readable */
.prose .wp-block-table table.has-fixed-layout:not(.has-background) td {
  text-align: center;
  font-variant-numeric: tabular-nums;
}

.prose .has-text-align-center {
  text-align: center;
}

.prose .has-text-align-right {
  text-align: right;
}

.prose .swell-block-button {
  margin: 1.4em 0;
  text-align: center;
}

.prose .swell-block-button__link {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-height: 48px;
  padding: 0 28px;
  border-radius: 999px;
  background: linear-gradient(135deg, #ffe8a6, var(--gold));
  color: var(--night) !important;
  font-weight: 800;
  text-decoration: none;
  box-shadow: 0 12px 35px rgba(215, 169, 71, 0.32);
}

.prose .swell-block-button.green_ .swell-block-button__link {
  background: linear-gradient(135deg, var(--teal), #0f3939);
  color: #fff !important;
}

.prose .wp-block-file {
  margin: 1.4em 0;
  padding: 18px 22px;
  border: 1px solid var(--line);
  border-radius: 8px;
  background: #fff;
}

.prose .wp-block-file__button {
  display: inline-block;
  margin-left: 12px;
  padding: 6px 16px;
  border-radius: 999px;
  background: var(--ink);
  color: #fff !important;
  font-size: 0.86rem;
  font-weight: 700;
  text-decoration: none !important;
}

.prose .swell-block-fullWide {
  margin: 2.6em 0;
  padding: clamp(28px, 4vw, 48px) clamp(20px, 4vw, 40px);
  border-radius: 12px;
  background: var(--cream);
  box-shadow: 0 6px 28px rgba(28, 35, 42, 0.06);
}

.prose .swell-block-fullWide__inner {
  width: 100%;
  margin: 0;
}

.prose .alignfull,
.prose .aligncenter {
  margin-inline: auto;
}

.prose iframe {
  max-width: 100%;
}

/* Section title block */
.prose .is-style-section_ttl {
  position: relative;
  margin-top: 0;
  margin-bottom: 1.2em;
  padding-bottom: 0.6em;
  text-align: center;
  font-family: "Zen Old Mincho", serif;
  border-bottom: none;
}

.prose .is-style-section_ttl::after {
  content: "";
  position: absolute;
  left: 50%;
  bottom: 0;
  transform: translateX(-50%);
  width: 56px;
  height: 3px;
  background: var(--gold);
  border-radius: 999px;
}

/* Columns layout */
.prose .wp-block-columns,
.prose .swell-block-columns,
.prose .swell-block-columns__inner {
  display: flex;
  flex-wrap: wrap;
  gap: clamp(16px, 3vw, 28px);
  margin: 1.6em 0;
  align-items: flex-start;
}

/* For iframe (Google Maps) columns: stretch so iframe fills column height */
.prose .wp-block-columns:has(iframe) {
  align-items: stretch;
}

/* For 2-column layouts with only short text (no headings, no figures), center for balance */
.prose .wp-block-columns:not(:has(figure)):not(:has(iframe)):not(:has(h2)):not(:has(h3)):not(:has(h4)):not(:has(ul)) {
  align-items: center;
}

/* When one column has just an image and the sibling has text, center vertically */
.prose .wp-block-columns:has(> .wp-block-column > figure.wp-block-image:only-child),
.prose .wp-block-columns:has(> .wp-block-column > .wp-block-columns > .wp-block-column > figure.wp-block-image) {
  align-items: center;
}

/* Hide empty placeholder columns (no children) */
.prose .wp-block-column:empty,
.prose .swell-block-column:empty {
  display: none;
}

.prose .wp-block-column,
.prose .swell-block-column {
  flex: 1 1 240px;
  min-width: 0;
  display: flex;
  flex-direction: column;
  gap: 8px;
}

/* Each column's children flow tightly together from the top */
.prose .wp-block-column > figure.wp-block-image,
.prose .swell-block-column > figure.wp-block-image {
  margin: 0;
}

.prose .wp-block-column > h3,
.prose .wp-block-column > h4,
.prose .swell-block-column > h3,
.prose .swell-block-column > h4 {
  margin: 4px 0 0;
}

.prose .wp-block-column > p,
.prose .swell-block-column > p {
  margin: 0;
}

/* Gallery */
.prose .wp-block-gallery {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
  gap: 12px;
  margin: 1.6em 0;
}

.prose .wp-block-gallery figure,
.prose .wp-block-gallery .wp-block-image {
  margin: 0;
}

.prose .wp-block-gallery img {
  width: 100%;
  aspect-ratio: 16 / 10;
  object-fit: cover;
  border-radius: 6px;
}

/* Spacer */
.prose .wp-block-spacer {
  height: 32px;
}

/* Margin utilities */
.prose .u-mb-0  { margin-bottom: 0 !important; }
.prose .u-mb-5  { margin-bottom: 0.4em !important; }
.prose .u-mb-10 { margin-bottom: 0.8em !important; }
.prose .u-mb-30 { margin-bottom: 1.6em !important; }

/* Font size utilities */
.prose .u-fz-xs { font-size: 0.78rem; }
.prose .u-fz-s  { font-size: 0.9rem; }
.prose .u-fz-l  { font-size: 1.15rem; }
.prose .u-fz-xl { font-size: 1.35rem; }
.prose .u-thin  { font-weight: 400; }

/* SWELL color helpers */
.prose .has-swl-pale-02-background-color {
  background-color: #fff7e9;
  padding: 14px 18px;
  border-radius: 8px;
}

.prose .has-swl-pale-04-background-color {
  background-color: #ecf6f4;
  padding: 14px 18px;
  border-radius: 8px;
}

.prose .has-swl-deep-01-color {
  color: var(--red);
}

/* YouTube / embeds */
.prose .wp-block-embed-youtube,
.prose .wp-block-embed.is-provider-youtube,
.prose .wp-has-aspect-ratio {
  margin: 1.8em 0;
}

.prose .wp-block-embed__wrapper {
  position: relative;
  width: 100%;
  aspect-ratio: 16 / 9;
}

.prose .wp-block-embed__wrapper iframe {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  border: 0;
  border-radius: 6px;
}

/* FAQ */
.prose .swell-block-faq {
  display: grid;
  gap: 14px;
  margin: 1em 0;
  padding: 0;
}

.prose .swell-block-faq__item {
  margin: 0;
  border: 1px solid var(--line);
  border-radius: 10px;
  overflow: hidden;
  background: #fff;
  box-shadow: 0 4px 16px rgba(28, 35, 42, 0.04);
}

.prose .faq_q {
  position: relative;
  margin: 0;
  padding: 18px 22px 18px 64px;
  background: var(--cream);
  font-weight: 700;
  font-size: 1.05rem;
  line-height: 1.5;
  color: var(--ink);
}

.prose .faq_q::before {
  content: "Q";
  position: absolute;
  left: 18px;
  top: 50%;
  transform: translateY(-50%);
  width: 30px;
  height: 30px;
  display: grid;
  place-items: center;
  border-radius: 50%;
  background: var(--gold);
  color: #fff;
  font-family: "Zen Old Mincho", serif;
  font-weight: 900;
  font-size: 0.95rem;
}

.prose .faq_q strong {
  font-weight: inherit;
}

.prose .faq_a {
  position: relative;
  margin: 0;
  padding: 18px 22px 18px 64px;
  color: var(--ink);
}

.prose .faq_a::before {
  content: "A";
  position: absolute;
  left: 18px;
  top: 22px;
  width: 30px;
  height: 30px;
  display: grid;
  place-items: center;
  border-radius: 50%;
  background: var(--teal);
  color: #fff;
  font-family: "Zen Old Mincho", serif;
  font-weight: 900;
  font-size: 0.95rem;
}

.prose .faq_a > p:first-child {
  margin-top: 0;
}

.prose .faq_a > p:last-child {
  margin-bottom: 0;
}

@media (max-width: 620px) {
  .prose .faq_q,
  .prose .faq_a {
    padding-left: 56px;
  }
  .prose .faq_q::before,
  .prose .faq_a::before {
    left: 14px;
    width: 28px;
    height: 28px;
    font-size: 0.88rem;
  }
}

/* Banner link cards (ticket info etc.) */
.prose .swell-block-bannerLink {
  display: block;
  margin: 0;
  height: 100%;
  border-radius: 12px;
  overflow: hidden;
  background: #fff;
  border: 1px solid var(--line);
  box-shadow: 0 8px 26px rgba(28, 35, 42, 0.07);
  transition: transform 0.25s ease, box-shadow 0.25s ease;
}

.prose .swell-block-bannerLink:hover {
  transform: translateY(-3px);
  box-shadow: 0 18px 42px rgba(28, 35, 42, 0.12);
}

.prose .swell-block-bannerLink .c-bannerLink {
  display: flex;
  flex-direction: column;
  height: 100%;
  text-decoration: none;
  color: inherit;
}

.prose .swell-block-bannerLink .c-bannerLink__figure {
  margin: 0;
  aspect-ratio: 16 / 10;
  overflow: hidden;
  background: var(--cream);
}

.prose .swell-block-bannerLink .c-bannerLink__img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
}

.prose .swell-block-bannerLink .c-bannerLink__text {
  padding: 18px 22px 22px;
  flex: 1;
  display: flex;
  flex-direction: column;
  gap: 8px;
}

.prose .swell-block-bannerLink .c-bannerLink__title {
  font-size: 1.15rem;
  font-weight: 800;
  color: var(--ink);
  line-height: 1.4;
}

.prose .swell-block-bannerLink .c-bannerLink__title strong {
  font-weight: 800;
}

.prose .swell-block-bannerLink .c-bannerLink__description {
  margin: 0;
  color: var(--muted);
  font-size: 0.92rem;
  line-height: 1.7;
  text-decoration: none;
}

.prose .swell-block-bannerLink img {
  display: block;
  width: 100%;
}

/* Image variants */
.prose .is-style-image__border img {
  border: 1px solid var(--line);
  border-radius: 6px;
  padding: 4px;
  background: #fff;
}

.prose .has-nested-images img {
  width: 100%;
}

/* Emanon premium blocks - keep readable */
.prose .wp-block-emanon-premium-blocks-background {
  margin: 1.6em 0;
  padding: clamp(20px, 3vw, 36px);
  border-radius: 10px;
  background: var(--cream);
}

.prose .wp-block-emanon-premium-blocks-advanced-headling {
  margin: 1.6em 0;
  text-align: center;
}

.prose .epb-advanced-headling__inner {
  display: inline-block;
  position: relative;
  padding: 0 12px;
}

.prose .epb-advanced-headling__inner.is-style-epb-headling-lines-on::before,
.prose .epb-advanced-headling__inner.is-style-epb-headling-lines-on::after {
  content: "";
  position: absolute;
  top: 50%;
  width: clamp(40px, 8vw, 100px);
  height: 2px;
  background: var(--gold);
}

.prose .epb-advanced-headling__inner.is-style-epb-headling-lines-on::before {
  right: 100%;
  margin-right: 14px;
}

.prose .epb-advanced-headling__inner.is-style-epb-headling-lines-on::after {
  left: 100%;
  margin-left: 14px;
}

.prose .epb-advanced-headling__text {
  margin: 0;
  font-size: clamp(1.4rem, 3.2vw, 2rem);
  font-weight: 900;
  border-bottom: none;
  padding: 0;
  font-family: "Zen Old Mincho", serif;
}

.prose .wp-block-emanon-premium-blocks-buttons,
.prose .wp-block-emanon-premium-blocks-button-template {
  margin: 1.4em 0;
  text-align: center;
}

.prose .epb-microcopy-top {
  font-size: 0.82rem;
  color: var(--muted);
  margin-bottom: 8px;
}

.prose .epb-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-height: 48px;
  padding: 10px 28px;
  border-radius: 999px;
  font-weight: 700;
  text-decoration: none;
  background: linear-gradient(135deg, #ffe8a6, var(--gold));
  color: var(--night) !important;
  box-shadow: 0 8px 24px rgba(215, 169, 71, 0.28);
  transition: transform 0.2s ease, box-shadow 0.2s ease;
}

.prose .epb-btn:hover {
  transform: translateY(-2px);
  box-shadow: 0 12px 30px rgba(215, 169, 71, 0.4);
}

.prose .epb-btn__outline {
  background: transparent;
  border: 2px solid var(--gold);
  color: var(--ink) !important;
  box-shadow: none;
}

.prose .epb-btn__outline:hover {
  background: rgba(215, 169, 71, 0.1);
  box-shadow: none;
}

.prose .epb-btn-size__lg {
  display: inline-block;
}

.prose .epb-btn-text {
  display: inline-block;
}

/* Button variants */
.prose .swell-block-button.is-style-btn_line .swell-block-button__link {
  background: transparent;
  border: 2px solid var(--gold);
  color: var(--ink) !important;
  box-shadow: none;
}

.prose .swell-block-button.is-style-btn_shiny .swell-block-button__link {
  background: linear-gradient(135deg, var(--red), #e07059);
  color: #fff !important;
}

.prose .swell-block-button.-size-l .swell-block-button__link {
  min-height: 56px;
  padding: 14px 36px;
  font-size: 1.04rem;
}

.prose .swell-block-button.blue_ .swell-block-button__link {
  background: linear-gradient(135deg, #2196f3, #1565c0);
  color: #fff !important;
}

.prose .swell-block-button.red_ .swell-block-button__link {
  background: linear-gradient(135deg, var(--red), #d96452);
  color: #fff !important;
}

.prose .swell-block-button.blue_.is-style-btn_line .swell-block-button__link {
  background: transparent;
  border: 2px solid #1565c0;
  color: #1565c0 !important;
}

.prose .swell-block-button.red_.is-style-btn_line .swell-block-button__link {
  background: linear-gradient(135deg, var(--red), #d96452);
  border: 0;
  color: #fff !important;
}

/* Tables: side-style — first column is a label, second is the value */
.prose .wp-block-table.is-style-table__side table {
  border: 1px solid var(--line);
  border-radius: 8px;
  overflow: hidden;
}

.prose .wp-block-table.is-style-table__side td {
  white-space: normal;
  vertical-align: top;
}

.prose .wp-block-table.is-style-table__side td:first-child {
  width: 28%;
  background: var(--cream);
  font-weight: 700;
  color: var(--ink);
  white-space: nowrap;
}

.prose .wp-block-table.is-style-table__side tbody tr:nth-child(odd) {
  background: transparent;
}

@media (max-width: 620px) {
  .prose .wp-block-table.is-style-table__side td:first-child {
    width: 35%;
  }
}

/* SWELL-theme inline marker (yellow highlight) */
.prose .swl-marker {
  background: linear-gradient(transparent 60%, rgba(215, 169, 71, 0.45) 60%);
  padding: 0 0.1em;
}

.prose .swl-marker.mark_yellow {
  background: linear-gradient(transparent 60%, rgba(255, 232, 166, 0.85) 60%);
}

.prose .swl-marker.mark_red {
  background: linear-gradient(transparent 60%, rgba(184, 63, 55, 0.32) 60%);
}

/* SWELL bordered paragraph */
.prose .has-border.-border01 {
  border: 1px solid var(--line);
  padding: 18px 22px;
  border-radius: 8px;
  background: #fff;
}

/* Make sponsor logos in sub-page columns sized consistently */
/* WP-style columns: cap image height so columns stay visually balanced */
.prose .wp-block-columns .wp-block-image {
  width: 100%;
  margin: 0;
  display: flex;
  align-items: center;
  justify-content: center;
}

.prose .wp-block-columns .wp-block-image img {
  display: block;
  max-width: 100%;
  max-height: 320px;
  width: auto;
  height: auto;
  object-fit: contain;
}

/* Access page: all maps (iframe + image variants) share the same visual treatment */
.prose .access-route-map,
.prose .access-map-wrap {
  display: block;
  width: 100%;
  max-width: 740px;
  margin: 1.4em auto 1.6em;
  border-radius: 10px;
  overflow: hidden;
  border: 1px solid var(--line);
  box-shadow: 0 8px 26px rgba(28, 35, 42, 0.08);
  background: #fff;
}

.prose .access-route-map img {
  display: block;
  width: 100%;
  max-height: 420px;
  height: auto;
  object-fit: contain;
  background: #fff;
  max-width: 100%;
}

/* Venue address (Japanese + English) — keep <address> non-italic, English subtle */
.prose .venue-address {
  font-style: normal;
  margin: 1em 0;
  line-height: 1.8;
}

.prose .venue-address-en {
  display: inline-block;
  margin-top: 4px;
  font-size: 0.88em;
  color: var(--muted);
  letter-spacing: 0.01em;
}

.prose .venue-actions {
  display: flex;
  flex-wrap: wrap;
  gap: 10px;
  margin: 14px 0 4px;
}

.venue-action-btn {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding: 10px 18px;
  border: 1px solid var(--line);
  border-radius: 999px;
  background: #fff;
  color: var(--ink);
  font-size: 0.92rem;
  font-weight: 700;
  letter-spacing: 0.02em;
  text-decoration: none;
  cursor: pointer;
  transition: background 0.25s ease, color 0.25s ease, border-color 0.25s ease, transform 0.25s ease;
}

.venue-action-btn:hover {
  background: var(--ink);
  color: #fff;
  border-color: var(--ink);
  transform: translateY(-2px);
}

.venue-action-btn.is-copied {
  background: var(--gold);
  color: #fff;
  border-color: var(--gold);
}

.prose .access-map-wrap {
  height: 380px;
}

.prose .access-map-wrap iframe {
  display: block;
  width: 100%;
  height: 100%;
  border: 0;
}

/* When a column contains a Google Maps iframe, stretch its sibling so heights match */
.prose .wp-block-columns:has(iframe) {
  align-items: stretch;
}

.prose .wp-block-columns:has(iframe) > .wp-block-column {
  display: flex;
  flex-direction: column;
  justify-content: center;
}

/* Iframes (Google Maps) inside columns: fill column height for visual balance */
.prose .wp-block-columns iframe {
  display: block;
  width: 100%;
  min-height: 320px;
  height: 100%;
  flex: 1;
  border: 0;
  border-radius: 8px;
}

/* ===== Donation/sponsor page (text-based, replaces PDF previews) ===== */
.prose .donation-section {
  margin: 2.4em 0 3em;
  padding: clamp(28px, 4vw, 48px) 0 0;
}

.prose .donation-section:not(:first-of-type) {
  border-top: 1px solid var(--line);
}

.prose .donation-h2 {
  position: relative;
  margin: 0 0 12px;
  padding: 0 0 0.4em;
  font-size: clamp(1.6rem, 3.5vw, 2.2rem);
  border: none;
}

.prose .donation-h2::after {
  content: "";
  position: absolute;
  left: 0;
  bottom: 0;
  width: 80px;
  height: 3px;
  background: linear-gradient(90deg, var(--gold), var(--red));
  border-radius: 2px;
}

.prose .donation-lead {
  margin: 0 0 28px;
  color: var(--muted);
  font-size: 1rem;
}

.prose .plan-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 18px;
  margin: 0 0 28px;
}

.prose .plan-grid.plan-grid-3 {
  grid-template-columns: repeat(3, minmax(0, 1fr));
}

@media (max-width: 720px) {
  .prose .plan-grid,
  .prose .plan-grid.plan-grid-3 {
    grid-template-columns: 1fr;
  }
}

.prose .plan-card {
  position: relative;
  padding: 22px 22px 24px;
  border: 1px solid var(--line);
  border-radius: 10px;
  background: #fff;
  box-shadow: 0 6px 22px rgba(28, 35, 42, 0.05);
  transition: transform 0.25s ease, box-shadow 0.25s ease;
}

.prose .plan-card:hover {
  transform: translateY(-3px);
  box-shadow: 0 18px 42px rgba(28, 35, 42, 0.1);
}

.prose .plan-card-highlight {
  border-color: rgba(215, 169, 71, 0.6);
  background: linear-gradient(180deg, #fffbf2, #fff);
}

.prose .plan-card-highlight::before {
  content: "おすすめ";
  position: absolute;
  top: 12px;
  right: 12px;
  padding: 3px 10px;
  border-radius: 999px;
  font-size: 0.72rem;
  font-weight: 900;
  background: var(--red);
  color: #fff;
  letter-spacing: 0.08em;
}

.prose .plan-tag {
  display: inline-block;
  margin: 0 0 8px;
  padding: 3px 10px;
  border-radius: 999px;
  background: rgba(184, 63, 55, 0.08);
  color: var(--red);
  font-size: 0.78rem;
  font-weight: 900;
  letter-spacing: 0.06em;
}

.prose .plan-price {
  margin: 0 0 4px;
  font-size: 0.8rem;
  color: var(--muted);
}

.prose .plan-price strong {
  font-family: "Zen Old Mincho", serif;
  font-size: clamp(1.6rem, 3vw, 2rem);
  color: var(--ink);
  font-weight: 900;
}

.prose .plan-name {
  margin: 6px 0 12px;
  padding: 0;
  font-size: 1.1rem;
  font-weight: 800;
  border: none;
}

.prose .plan-name::after {
  display: none;
}

.prose .plan-features {
  margin: 0 0 12px;
  padding: 0;
  list-style: none;
}

.prose .plan-features li {
  position: relative;
  padding-left: 18px;
  margin-bottom: 6px;
  color: var(--ink);
  font-size: 0.94rem;
  line-height: 1.6;
}

.prose .plan-features li::before {
  content: "";
  position: absolute;
  left: 4px;
  top: 0.65em;
  width: 6px;
  height: 6px;
  border-radius: 50%;
  background: var(--gold);
}

.prose .plan-note {
  margin: 8px 0 0;
  color: var(--muted);
  font-size: 0.82rem;
  line-height: 1.6;
}

.prose .donation-cta {
  margin: 2em 0 0;
  display: flex;
  flex-wrap: wrap;
  gap: 14px;
  justify-content: center;
  align-items: center;
}

.prose .donation-cta-button {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  padding: 16px 28px;
  min-height: 56px;
  font-size: 1rem;
  font-weight: 800;
}

.prose .donation-cta-button:hover {
  gap: 14px;
}

.prose .donation-cta-button svg {
  transition: transform 0.2s ease;
}

.prose .donation-cta-button:hover svg {
  transform: translateX(2px);
}

.prose .donation-pdf-button {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  padding: 16px 24px;
  min-height: 56px;
  border: 1px solid var(--line);
  background: #fff;
  color: var(--ink);
  font-size: 0.95rem;
  font-weight: 700;
}

.prose .donation-pdf-button:hover {
  border-color: var(--gold);
  color: var(--gold-text);
}

.prose .benefit-grid {
  margin: 2em 0 0;
  padding: 22px 24px;
  border-radius: 10px;
  background: var(--cream);
}

.prose .benefit-h3 {
  margin: 0 0 12px;
  padding: 0;
  font-size: 1.05rem;
  font-weight: 800;
  border: none;
}

.prose .benefit-h3::after {
  display: none;
}

.prose .benefit-list {
  margin: 0;
  display: grid;
  gap: 10px 24px;
  grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
}

.prose .benefit-list > div {
  padding: 0;
}

.prose .benefit-list dt {
  display: inline-block;
  margin-right: 8px;
  padding: 2px 8px;
  border-radius: 4px;
  background: rgba(215, 169, 71, 0.2);
  color: var(--ink);
  font-size: 0.85rem;
  font-weight: 800;
}

.prose .benefit-list dd {
  margin: 4px 0 0;
  color: var(--muted);
  font-size: 0.9rem;
  line-height: 1.6;
}

.prose .donation-method {
  padding: 28px 0 0;
}

.prose .donation-method-grid {
  display: grid;
  gap: clamp(20px, 4vw, 40px);
  grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
  margin-top: 16px;
}

.prose .contact-line {
  list-style: none;
  padding: 0;
  margin: 8px 0 0;
}

.prose .contact-line li {
  margin: 4px 0;
  padding-left: 0;
  font-size: 0.95rem;
}

.prose .bank-info {
  margin: 8px 0 12px;
  display: grid;
  gap: 6px;
}

.prose .bank-info > div {
  display: grid;
  grid-template-columns: 90px 1fr;
  gap: 12px;
}

.prose .bank-info dt {
  color: var(--muted);
  font-size: 0.88rem;
}

.prose .bank-info dd {
  margin: 0;
  color: var(--ink);
  font-weight: 700;
  font-size: 0.95rem;
}

/* ===== Music program (text-only, replaces the old image-based list) ===== */
.prose .music-program {
  margin: 2em 0;
  padding: clamp(28px, 4vw, 44px) clamp(22px, 4vw, 36px);
  border-radius: 14px;
  background:
    radial-gradient(circle at 92% 8%, rgba(215, 169, 71, 0.18), transparent 50%),
    linear-gradient(140deg, #10182a 0%, #12283f 60%, #0f3939 100%);
  color: #fff;
  box-shadow: 0 20px 60px rgba(11, 19, 31, 0.25);
  position: relative;
  overflow: hidden;
}

.prose .music-program::before {
  content: "";
  position: absolute;
  inset: 0;
  background-image: radial-gradient(rgba(255, 255, 255, 0.06) 1px, transparent 1px);
  background-size: 28px 28px;
  pointer-events: none;
  opacity: 0.5;
}

.prose .music-program > * {
  position: relative;
}

.prose .music-program-title {
  margin: 0 0 22px;
  padding: 0;
  font-family: "Zen Old Mincho", serif;
  font-size: clamp(1.6rem, 3.4vw, 2.2rem);
  font-weight: 900;
  letter-spacing: 0.08em;
  color: var(--gold);
  border: none;
}

.prose .music-program-title::after {
  display: none;
}

.prose .music-program-section {
  margin: 0 0 18px;
  padding: 14px 18px;
  border-left: 3px solid var(--gold);
  background: rgba(255, 255, 255, 0.04);
  border-radius: 0 8px 8px 0;
}

.prose .music-program-section + .music-program-section {
  margin-top: 12px;
}

.prose .music-program-label {
  margin: 0 0 4px;
  font-size: 0.78rem;
  letter-spacing: 0.18em;
  font-weight: 900;
  color: var(--gold);
  text-transform: uppercase;
}

.prose .music-program-headline {
  margin: 0 0 4px;
  font-family: "Zen Old Mincho", serif;
  font-size: clamp(1.2rem, 2.6vw, 1.6rem);
  font-weight: 900;
  color: #fff;
}

.prose .music-program-sub {
  margin: 0;
  font-size: 0.92rem;
  color: rgba(255, 255, 255, 0.78);
  line-height: 1.6;
}

.prose .music-program-list {
  list-style: none;
  margin: 24px 0 0;
  padding: 0;
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 8px 22px;
  counter-reset: track;
}

.prose .music-program-list li {
  display: grid;
  grid-template-columns: 36px 1fr;
  align-items: start;
  gap: 4px 12px;
  padding: 12px 0;
  border-bottom: 1px solid rgba(255, 255, 255, 0.1);
  font-size: 0.95rem;
}

.prose .music-program-list .track-no {
  grid-row: 1 / span 2;
  font-family: "Zen Old Mincho", serif;
  color: var(--gold);
  font-weight: 900;
  font-size: 1rem;
  letter-spacing: 0.04em;
  line-height: 1.3;
}

.prose .music-program-list .track-title {
  grid-column: 2;
  color: #fff;
  font-weight: 700;
  line-height: 1.4;
}

.prose .music-program-list .track-artist {
  grid-column: 2;
  color: rgba(255, 255, 255, 0.65);
  font-size: 0.82rem;
  line-height: 1.4;
  letter-spacing: 0.02em;
}

@media (max-width: 720px) {
  .prose .music-program-list {
    grid-template-columns: 1fr;
    gap: 0;
  }
}

/* Unified photo aspect ratio across food vendor / event / 2024-hanabi pages
   - Photos use 16:10 cover for consistency with homepage cards
   - Letterboxed images (with baked-in gray bars) get cropped via object-fit:cover */
.prose .wp-block-columns img[src*="飲食店画像"],
.prose .wp-block-columns img[src*="DSC_"],
.prose .swell-block-columns img[src*="飲食店画像"],
.prose .swell-block-columns img[src*="DSC_"] {
  display: block;
  width: 100%;
  aspect-ratio: 16 / 10;
  height: auto;
  max-height: none;
  object-fit: cover;
  border-radius: 8px;
}

.prose .wp-block-columns figure.wp-block-image:has(img[src*="飲食店画像"]),
.prose .wp-block-columns figure.wp-block-image:has(img[src*="DSC_"]),
.prose .swell-block-columns figure.wp-block-image:has(img[src*="飲食店画像"]),
.prose .swell-block-columns figure.wp-block-image:has(img[src*="DSC_"]) {
  width: 100%;
  margin: 0;
  background: transparent;
  border: 0;
}


/* Vendors without photos are extracted into a text-only list at the bottom of
   the food booth section (handled by ui.js). Each vendor renders as a tile card. */
.prose .vendor-text-list {
  margin: 2.4em 0 0;
  padding: 0;
}

.prose .vendor-text-list-title {
  margin: 0 0 14px;
  padding-left: 12px;
  border-left: 3px solid var(--gold);
  font-size: 0.95rem;
  color: var(--muted);
  letter-spacing: 0.04em;
  font-weight: 700;
}

.prose .vendor-text-list ul {
  margin: 0;
  padding: 0;
  list-style: none;
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
  gap: 12px;
}

.prose .vendor-text-list li {
  margin: 0;
  padding: 14px 16px;
  background: #fff;
  border: 1px solid var(--line);
  border-radius: 8px;
  box-shadow: 0 4px 14px rgba(28, 35, 42, 0.04);
  display: flex;
  flex-direction: column;
  gap: 6px;
  line-height: 1.55;
}

.prose .vendor-text-list li strong {
  display: block;
  color: var(--ink);
  font-weight: 800;
  font-size: 0.98rem;
}

.prose .vendor-text-list li span {
  display: block;
  color: var(--muted);
  font-size: 0.88rem;
  line-height: 1.6;
}

/* Sponsor logos: catch any image with "1024x341" suffix (standard sponsor logo size)
   plus PR_logo media coverage logos. Constrains them all to the same compact size. */
.prose .wp-block-columns img[src*="1024x341"],
.prose .wp-block-columns img[src*="PR_logo"],
.prose .wp-block-columns img[src*="kkday"],
.prose .wp-block-columns img[src*="image-1.webp"],
.prose .wp-block-columns figure.wp-block-image:has(img[src*="1024x341"]) {
  /* No-op fallback; specific rules below take over */
}

.prose .wp-block-columns img[src*="1024x341"],
.prose .wp-block-columns img[src*="PR_logo"] {
  display: block;
  width: 100%;
  height: 110px;
  max-height: 110px;
  object-fit: contain;
}

.prose .wp-block-columns figure.wp-block-image:has(img[src*="1024x341"]),
.prose .wp-block-columns figure.wp-block-image:has(img[src*="PR_logo"]) {
  width: 100%;
  padding: 10px 18px;
  background: #fff;
  border: 1px solid var(--line);
  border-radius: 10px;
  box-shadow: 0 4px 14px rgba(28, 35, 42, 0.05);
  transition: transform 0.25s ease, box-shadow 0.25s ease;
}

.prose .wp-block-columns figure.wp-block-image:has(img[src*="1024x341"]):hover,
.prose .wp-block-columns figure.wp-block-image:has(img[src*="PR_logo"]):hover {
  transform: translateY(-2px);
  box-shadow: 0 12px 28px rgba(28, 35, 42, 0.1);
}

/* Ticket seat photos (kyosan_ss / a / フリー席): consistent large display next to text */
.prose .wp-block-columns img[src*="kyosan_ss"],
.prose .wp-block-columns img[src*="/a.webp"],
.prose .wp-block-columns img[src*="フリー席"] {
  display: block;
  width: 100%;
  aspect-ratio: 16 / 10;
  height: auto;
  max-height: none;
  object-fit: cover;
  border-radius: 10px;
}

.prose .wp-block-columns figure.wp-block-image:has(img[src*="kyosan_ss"]),
.prose .wp-block-columns figure.wp-block-image:has(img[src*="/a.webp"]),
.prose .wp-block-columns figure.wp-block-image:has(img[src*="フリー席"]) {
  width: 100%;
  margin: 0;
}

/* Ticket purchase brand logos (KKday + asoview): pair them as uniform cards */
.prose .wp-block-columns figure.wp-block-image > a:has(img[src*="kkday"]),
.prose .wp-block-columns figure.wp-block-image > a:has(img[src*="image-1"]) {
  display: grid;
  place-items: center;
  width: 100%;
  height: 140px;
  padding: 18px 24px;
  border-radius: 12px;
  background: #fff;
  border: 1px solid var(--line);
  box-shadow: 0 4px 16px rgba(28, 35, 42, 0.05);
  transition: transform 0.25s ease, box-shadow 0.25s ease;
}

.prose .wp-block-columns figure.wp-block-image > a:has(img[src*="kkday"]):hover,
.prose .wp-block-columns figure.wp-block-image > a:has(img[src*="image-1"]):hover {
  transform: translateY(-2px);
  box-shadow: 0 12px 30px rgba(28, 35, 42, 0.12);
}

.prose .wp-block-columns figure.wp-block-image > a:has(img[src*="kkday"]) img,
.prose .wp-block-columns figure.wp-block-image > a:has(img[src*="image-1"]) img {
  max-height: 80px;
  width: auto;
  height: auto;
  object-fit: contain;
}

/* SWELL columns (typically photos): uniform aspect-ratio with cover */
.prose .swell-block-columns .wp-block-image,
.prose .swell-block-columns .swell-block-column figure {
  width: 100%;
  margin: 0;
}

.prose .swell-block-columns .wp-block-image img,
.prose .swell-block-columns figure img {
  display: block;
  width: 100%;
  aspect-ratio: 16 / 10;
  height: auto;
  object-fit: cover;
  border-radius: 6px;
}

/* SWELL post list (used on media coverage page) */
.prose .p-postList {
  list-style: none;
  margin: 1.6em 0;
  padding: 0;
  display: grid;
  gap: 18px;
  grid-template-columns: repeat(3, minmax(0, 1fr));
}

@media (max-width: 920px) {
  .prose .p-postList {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
}

@media (max-width: 620px) {
  .prose .p-postList {
    grid-template-columns: 1fr;
  }
}

.prose .p-postList__item {
  margin: 0;
  padding: 0;
}

.prose .p-postList__link {
  display: block;
  border: 1px solid var(--line);
  border-radius: 10px;
  overflow: hidden;
  background: #fff;
  text-decoration: none;
  color: inherit;
  box-shadow: 0 4px 16px rgba(28, 35, 42, 0.05);
  transition: transform 0.25s ease, box-shadow 0.25s ease;
}

.prose .p-postList__link:hover {
  transform: translateY(-3px);
  box-shadow: 0 14px 32px rgba(28, 35, 42, 0.12);
}

.prose .p-postList__thumb,
.prose .c-postThumb {
  position: relative;
  width: 100%;
  aspect-ratio: 16 / 10;
  overflow: hidden;
  background: var(--cream);
}

.prose .c-postThumb__figure {
  margin: 0;
  width: 100%;
  height: 100%;
}

.prose .c-postThumb__img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
  transition: transform 0.5s ease;
}

.prose .p-postList__link:hover .c-postThumb__img {
  transform: scale(1.04);
}

.prose .c-postThumb__cat {
  position: absolute;
  left: 12px;
  bottom: 12px;
  padding: 4px 10px;
  border-radius: 999px;
  background: rgba(10, 16, 28, 0.85);
  color: #fff;
  font-size: 0.78rem;
  font-weight: 700;
  letter-spacing: 0.04em;
}

.prose .p-postList__body {
  padding: 16px 18px 18px;
}

.prose .p-postList__title {
  margin: 0 0 10px;
  font-size: 1rem;
  line-height: 1.5;
  font-weight: 700;
  color: var(--ink);
  border-bottom: none;
  padding-bottom: 0;
}

.prose .p-postList__meta,
.prose .c-postTimes {
  font-size: 0.85rem;
  color: var(--muted);
}

.prose .c-postTimes__posted {
  font-weight: 700;
}

/* TBA placeholder (was 'Coming Soon' from stale WP authoring) */
.prose .placeholder-tba {
  color: var(--muted);
  font-style: italic;
  font-size: 0.92rem;
}

/* Borders */
.prose .has-border {
  border: 1px solid var(--line);
  padding: 14px 18px;
  border-radius: 8px;
}

/* Contact (Google Forms embed) */
.prose .contact-cta {
  margin: 2em 0;
  text-align: center;
}

.prose .contact-cta-button {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  padding: 18px 32px;
  min-height: 60px;
  font-size: 1.05rem;
  font-weight: 800;
}

.prose .contact-cta-button:hover {
  gap: 14px;
}

.prose .contact-cta-button svg {
  transition: transform 0.2s ease;
}

.prose .contact-cta-button:hover svg {
  transform: translateX(2px);
}

.prose .contact-cta-note {
  margin: 14px 0 0;
  color: var(--muted);
  font-size: 0.86rem;
}

.prose .contact-alt {
  margin-top: 3em;
  padding: 22px 26px;
  background: var(--cream);
  border-radius: 8px;
}

.prose .contact-alt h2 {
  margin: 0 0 12px;
  font-size: 1.2rem;
  border-bottom: none;
  padding-bottom: 0;
}

.prose .contact-alt ul {
  margin: 0;
  padding-left: 1.4em;
}

.prose .contact-alt li {
  margin-bottom: 6px;
}

/* ===== Program ===== */
.program-grid {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 18px;
}

.program-card {
  position: relative;
  display: flex;
  flex-direction: column;
  border: 1px solid var(--line);
  border-radius: 10px;
  background: #fff;
  box-shadow: 0 12px 38px rgba(28, 35, 42, 0.07);
  overflow: hidden;
  text-decoration: none;
  color: inherit;
  transition: transform 0.25s ease, box-shadow 0.25s ease;
}

.program-card:hover {
  transform: translateY(-4px);
  box-shadow: 0 18px 48px rgba(28, 35, 42, 0.12);
}

.program-card-thumb {
  position: relative;
  width: 100%;
  aspect-ratio: 16 / 10;
  overflow: hidden;
  background: var(--cream);
}

.program-card-thumb img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
  transition: transform 0.5s ease;
}

.program-card:hover .program-card-thumb img {
  transform: scale(1.05);
}

.program-card-body {
  padding: 22px 24px 26px;
  flex: 1;
  display: flex;
  flex-direction: column;
}

.program-card.feature {
  grid-column: span 2;
}

.program-card.feature .program-card-thumb {
  aspect-ratio: 16 / 7;
}

.program-card.feature .program-card-body {
  background:
    radial-gradient(circle at 85% 0%, rgba(215, 169, 71, 0.4), transparent 55%),
    linear-gradient(135deg, #14233a, #0f3939);
  color: #fff;
}

.program-card.feature p {
  color: rgba(255, 255, 255, 0.84);
}

.program-card.feature .program-num {
  background: rgba(255, 255, 255, 0.14);
  color: #ffe8a6;
}

.program-num {
  display: inline-block;
  padding: 4px 10px;
  border-radius: 999px;
  background: rgba(215, 169, 71, 0.15);
  color: var(--gold-text);
  font-size: 0.78rem;
  font-weight: 900;
  letter-spacing: 0.08em;
  text-transform: uppercase;
}

.program-card h3 {
  margin: 14px 0 10px;
  font-size: 1.28rem;
}

.program-card p {
  margin: 0;
  color: var(--muted);
}

/* ===== Past events ===== */
.past-grid {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: 14px;
}

.past-tile {
  position: relative;
  margin: 0;
  aspect-ratio: 4 / 5;
  overflow: hidden;
  border-radius: 8px;
  color: #fff;
  background: #1c2638;
  box-shadow: 0 12px 38px rgba(28, 35, 42, 0.12);
  cursor: zoom-in;
  transition: transform 0.3s ease, box-shadow 0.3s ease;
}

.past-tile:hover {
  transform: translateY(-3px);
  box-shadow: 0 18px 48px rgba(28, 35, 42, 0.22);
}

.past-tile .zoom-hint {
  position: absolute;
  top: 12px;
  right: 12px;
  z-index: 2;
  width: 32px;
  height: 32px;
  display: grid;
  place-items: center;
  border-radius: 50%;
  background: rgba(255, 255, 255, 0.18);
  color: #fff;
  backdrop-filter: blur(6px);
  opacity: 0;
  transform: scale(0.85);
  transition: opacity 0.25s ease, transform 0.25s ease;
  pointer-events: none;
}

.past-tile:hover .zoom-hint {
  opacity: 1;
  transform: scale(1);
}

.past-tile .zoom-hint::before {
  content: "+";
  font-size: 1.3rem;
  font-weight: 900;
  line-height: 1;
}

/* Lightbox dialog (used by ui.js for past-gallery enlarged view) */
dialog.lightbox {
  position: fixed;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  margin: 0;
  border: 0;
  padding: 0;
  background: transparent;
  max-width: 92vw;
  max-height: 92vh;
  width: auto;
  color: #fff;
  outline: none;
}

dialog.lightbox::backdrop {
  background: rgba(8, 13, 25, 0.86);
  backdrop-filter: blur(6px);
}

dialog.lightbox figure {
  margin: 0;
  position: relative;
  text-align: center;
}

dialog.lightbox img {
  display: block;
  max-width: 92vw;
  max-height: 80vh;
  width: auto;
  height: auto;
  border-radius: 6px;
  box-shadow: 0 20px 60px rgba(0, 0, 0, 0.5);
}

dialog.lightbox figcaption {
  margin-top: 14px;
  color: rgba(255, 255, 255, 0.92);
  font-size: 0.95rem;
  font-weight: 500;
  text-shadow: 0 2px 12px rgba(0, 0, 0, 0.5);
}

dialog.lightbox .lightbox-close {
  position: absolute;
  top: -52px;
  right: -8px;
  width: 44px;
  height: 44px;
  display: grid;
  place-items: center;
  border: 0;
  border-radius: 50%;
  background: rgba(255, 255, 255, 0.15);
  color: #fff;
  font-size: 1.6rem;
  line-height: 1;
  cursor: pointer;
  transition: background 0.2s ease;
}

dialog.lightbox .lightbox-close:hover {
  background: rgba(255, 255, 255, 0.28);
}

@media (max-width: 620px) {
  dialog.lightbox .lightbox-close {
    top: -48px;
    right: 0;
  }
}

.past-tile img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  transition: transform 0.6s ease;
}

.past-tile::after {
  content: "";
  position: absolute;
  inset: 0;
  background: linear-gradient(180deg, rgba(8, 13, 25, 0) 45%, rgba(8, 13, 25, 0.78) 100%);
  pointer-events: none;
}

.past-tile:hover img {
  transform: scale(1.05);
}

.past-tile figcaption {
  position: absolute;
  inset: auto 16px 16px;
  z-index: 1;
  font-weight: 700;
  font-size: 0.95rem;
  line-height: 1.45;
  text-shadow: 0 2px 14px rgba(0, 0, 0, 0.55);
}

/* ===== FAQ ===== */
.faq-list {
  display: grid;
  gap: 12px;
}

.faq-item {
  padding: 18px 22px;
  border: 1px solid var(--line);
  border-radius: 8px;
  background: #fff;
  box-shadow: 0 6px 22px rgba(28, 35, 42, 0.05);
  transition: border-color 0.25s ease, box-shadow 0.25s ease;
}

.faq-item:hover {
  border-color: rgba(215, 169, 71, 0.4);
}

.faq-item[open] {
  border-color: rgba(215, 169, 71, 0.5);
  box-shadow: 0 10px 28px rgba(28, 35, 42, 0.08);
}

.faq-item summary {
  position: relative;
  padding-right: 40px;
  font-weight: 800;
  font-size: 1.05rem;
  cursor: pointer;
  list-style: none;
}

.faq-item summary::-webkit-details-marker {
  display: none;
}

.faq-item summary::after {
  content: "+";
  position: absolute;
  right: 0;
  top: 50%;
  transform: translateY(-50%);
  width: 26px;
  height: 26px;
  display: grid;
  place-items: center;
  border-radius: 50%;
  background: var(--cream);
  color: var(--red);
  font-weight: 900;
  font-size: 1.05rem;
  transition: transform 0.3s ease, background 0.25s ease;
}

.faq-item[open] summary::after {
  content: "−";
  background: rgba(184, 63, 55, 0.12);
  transform: translateY(-50%) rotate(180deg);
}

.faq-item p {
  margin: 14px 0 0;
  color: var(--muted);
}

/* ===== Sponsors ===== */
.sponsor-grid {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: 14px;
}

.sponsor-tile {
  position: relative;
  display: grid;
  place-items: center;
  min-height: 120px;
  padding: 22px;
  border: 1px solid var(--line);
  border-radius: 8px;
  background: #fff;
  box-shadow: 0 4px 18px rgba(28, 35, 42, 0.05);
  transition: transform 0.3s ease, box-shadow 0.3s ease;
  overflow: hidden;
}

.sponsor-tile:hover {
  transform: translateY(-2px);
  box-shadow: 0 10px 28px rgba(28, 35, 42, 0.1);
}

.sponsor-tile img {
  max-width: 100%;
  max-height: 70px;
  width: auto;
  height: auto;
  object-fit: contain;
  transition: transform 0.3s ease;
}

.sponsor-tile:hover img {
  transform: scale(1.04);
}

.sponsor-tile a {
  display: grid;
  place-items: center;
  width: 100%;
  height: 100%;
}

/* Clickable sponsor logos in WP-migrated columns (sponsor.html) */
.prose .wp-block-columns figure.wp-block-image > a {
  display: block;
  transition: transform 0.25s ease, opacity 0.25s ease;
}

.prose .wp-block-columns figure.wp-block-image > a:hover {
  transform: translateY(-2px);
  opacity: 0.85;
}

.sponsor-note {
  margin-top: 18px;
  color: var(--muted);
  font-size: 0.88rem;
}

/* ===== Contact ===== */
.contact-card {
  position: relative;
  display: grid;
  grid-template-columns: 1.1fr 0.9fr;
  gap: clamp(28px, 5vw, 60px);
  align-items: center;
  padding: clamp(36px, 5vw, 64px);
  border-radius: 12px;
  color: #fff;
  background:
    radial-gradient(circle at 90% 10%, rgba(215, 169, 71, 0.45), transparent 55%),
    linear-gradient(135deg, #10182a, #173a51 70%, #0f6868);
  box-shadow: var(--shadow);
  overflow: hidden;
}

.contact-card::after {
  content: "";
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 2px;
  background: linear-gradient(90deg, transparent, var(--gold), transparent);
}

.contact-card::before {
  content: "";
  position: absolute;
  inset: 0;
  background-image: radial-gradient(rgba(255, 255, 255, 0.06) 1px, transparent 1px);
  background-size: 32px 32px;
  background-position: 16px 16px;
  pointer-events: none;
  opacity: 0.5;
}

.contact-card > * {
  position: relative;
}

.contact-card h2 {
  margin: 10px 0 14px;
  font-size: clamp(1.8rem, 4vw, 2.8rem);
}

.contact-card p {
  margin: 0;
  color: rgba(255, 255, 255, 0.82);
}

.contact-actions {
  display: flex;
  flex-direction: column;
  gap: 14px;
}

.contact-actions .button {
  width: 100%;
  padding: 16px 22px;
  min-height: 56px;
}

/* ===== Footer ===== */
.footer {
  padding: 50px clamp(22px, 5vw, 70px) 28px;
  color: #fff;
  background: var(--night);
}

.footer-grid {
  display: grid;
  grid-template-columns: 1.1fr 0.9fr 2fr;
  gap: clamp(28px, 4vw, 56px);
  padding-bottom: 32px;
  border-bottom: 1px solid rgba(255, 255, 255, 0.12);
}

.footer p,
.footer small {
  margin: 0;
}

.footer-title {
  font-family: "Zen Old Mincho", serif;
  font-size: 1.35rem;
  font-weight: 900;
}

.footer-lead {
  margin-top: 10px;
  color: rgba(255, 255, 255, 0.7);
  font-size: 0.92rem;
  line-height: 1.7;
}

.footer-social {
  display: flex;
  gap: 16px;
  margin-top: 18px;
}

.footer-social a {
  padding: 8px 14px;
  border: 1px solid rgba(255, 255, 255, 0.28);
  border-radius: 999px;
  font-weight: 700;
  font-size: 0.86rem;
  transition: background 0.2s ease, border-color 0.2s ease, transform 0.2s ease;
}

.footer-social a:hover {
  background: rgba(255, 255, 255, 0.08);
  border-color: rgba(255, 255, 255, 0.5);
  transform: translateY(-1px);
}

.footer-label {
  color: var(--gold);
  font-weight: 900;
  font-size: 0.78rem;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  margin-bottom: 8px;
}

.footer-label.spacer {
  margin-top: 18px;
}

.footer-org p {
  color: rgba(255, 255, 255, 0.85);
  font-size: 0.95rem;
  line-height: 1.7;
}

.footer-org-logo {
  display: block;
  height: 44px;
  width: auto;
  margin: 6px 0 14px;
  filter: invert(1) grayscale(1);
  mix-blend-mode: difference;
  opacity: 0.95;
}

.footer-sub {
  color: rgba(255, 255, 255, 0.6) !important;
  font-size: 0.85rem !important;
}

.footer-nav {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 24px clamp(14px, 2vw, 32px);
}

.footer-nav-group {
  display: grid;
  gap: 8px;
  align-content: start;
}

.footer-nav-group .footer-label {
  margin-bottom: 4px;
}

.footer-nav a {
  color: rgba(255, 255, 255, 0.78);
  font-size: 0.9rem;
  transition: color 0.2s ease, padding-left 0.2s ease;
}

.footer-nav a:hover {
  color: #fff;
  padding-left: 4px;
}

.footer-base {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 18px;
  padding-top: 20px;
}

.footer small {
  color: rgba(255, 255, 255, 0.62);
}

.footer-policy {
  color: rgba(255, 255, 255, 0.7);
  font-size: 0.86rem;
  text-decoration: underline;
  text-underline-offset: 4px;
}

@media (max-width: 920px) {
  .site-header {
    min-height: 66px;
  }

  .nav-toggle {
    display: inline-flex;
  }

  /* Mobile nav: simple display toggle. Bulletproof across all browsers. */
  .nav {
    display: none !important;
    position: fixed !important;
    top: 66px;
    left: 0;
    right: 0;
    bottom: 0;
    width: 100%;
    height: calc(100vh - 66px);
    height: calc(100dvh - 66px); /* iOS Safari のアドレスバー伸縮対策（dvh非対応は上行にフォールバック） */
    flex-direction: column;
    align-items: stretch;
    gap: 0;
    padding: 24px clamp(20px, 5vw, 32px) 32px;
    background: rgba(10, 16, 28, 0.97);
    backdrop-filter: blur(16px);
    overflow-y: auto;
    z-index: 30;
  }

  .nav.is-open {
    display: flex !important;
    animation: nav-slide-in 0.25s ease-out;
  }

  @keyframes nav-slide-in {
    from { transform: translateX(40%); opacity: 0; }
    to { transform: translateX(0); opacity: 1; }
  }

  @media (prefers-reduced-motion: reduce) {
    .nav.is-open { animation: none; }
  }

  .nav a {
    padding: 16px 8px;
    border-bottom: 1px solid rgba(255, 255, 255, 0.08);
    font-size: 1rem;
    opacity: 1;
  }

  .hero {
    min-height: 94vh;
    padding-top: 112px;
  }

  .event-panel {
    position: static;
    margin-top: 38px;
  }

  .notice,
  .intro-grid,
  .stats,
  .split,
  .support-band,
  .info-grid,
  .access-grid,
  .program-grid,
  .testimonial-grid,
  .contact-card,
  .footer-grid {
    grid-template-columns: 1fr;
  }

  .program-card.feature {
    grid-column: auto;
  }

  .past-grid {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }

  .sponsor-grid {
    grid-template-columns: repeat(3, minmax(0, 1fr));
  }

  .support-actions {
    justify-content: flex-start;
  }
}

@media (max-width: 620px) {
  .site-header {
    padding-inline: 14px;
    gap: 10px;
    min-height: 64px;
  }

  .brand {
    gap: 8px;
    font-size: 0.92rem;
  }

  .brand-mark {
    height: 30px;
    padding: 2px 4px;
  }

  .brand span:last-child {
    white-space: nowrap;
    line-height: 1.15;
    font-size: 0.86rem;
  }

  .header-cta {
    display: none;
  }

  .nav-toggle {
    width: 40px;
    height: 40px;
  }

  /* --- Hero --- */
  .hero {
    min-height: 92vh;
    padding: 100px 20px 7vh;
    background-position: 58% center;
    align-items: end;
  }

  .hero-content {
    max-width: 100%;
  }

  h1 {
    font-size: clamp(2rem, 9vw, 3rem);
    margin-bottom: 16px;
  }

  .eyebrow {
    font-size: 0.7rem;
    margin-bottom: 4px;
  }

  .hero-lead {
    font-size: 0.98rem;
    margin-bottom: 24px;
  }

  .hero-actions {
    flex-direction: column;
    width: 100%;
  }

  .hero-actions .button {
    width: 100%;
    justify-content: center;
  }

  .event-panel {
    position: static;
    width: 100%;
    margin-top: 28px;
    padding: 18px 20px;
  }

  /* --- Section spacing on mobile --- */
  .section {
    padding: 48px 0;
  }

  .section-heading {
    margin-bottom: 28px;
  }

  .section-heading h2,
  .support-band h2 {
    font-size: clamp(1.6rem, 6.5vw, 2rem);
  }

  /* --- Notice (event ended announcement) --- */
  .notice {
    grid-template-columns: 1fr;
    padding: 22px 18px;
    margin-top: 24px;
  }

  /* --- Tickets / Cards --- */
  .ticket-list {
    grid-template-columns: 1fr;
  }

  .stats article,
  .ticket-card,
  .info-card {
    min-height: auto;
  }

  /* --- Maps / iframes --- */
  .map-panel {
    min-height: 280px;
  }

  /* --- Past gallery: 2 cols looks better than 1 on phones --- */
  .past-grid {
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 10px;
  }

  /* --- Sponsors --- */
  .sponsor-grid {
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 10px;
  }

  .sponsor-tile {
    min-height: 88px;
    padding: 14px;
  }

  .sponsor-tile img {
    max-height: 56px;
  }

  /* --- Contact card --- */
  .contact-card {
    padding: 28px 22px;
    border-radius: 10px;
  }

  .contact-card h2 {
    font-size: clamp(1.5rem, 6vw, 2rem);
  }

  /* --- Support band (donation) --- */
  .support-band {
    padding: 44px 22px;
    text-align: left;
  }

  .support-actions {
    flex-direction: column;
    width: 100%;
    margin-top: 18px;
  }

  .support-actions .button {
    width: 100%;
    justify-content: center;
  }

  /* --- Footer --- */
  .footer {
    padding: 38px 16px 22px;
  }

  .footer-grid {
    gap: 28px;
  }

  .footer-base {
    flex-direction: column;
    align-items: flex-start;
    gap: 10px;
  }

  .footer-nav {
    grid-template-columns: 1fr;
    gap: 22px;
  }

  /* --- Mobile sticky CTA: ensure visible and not blocking content --- */
  .mobile-sticky-cta {
    bottom: 14px;
    right: 14px;
  }

  /* --- Past tile captions smaller --- */
  .past-tile figcaption {
    font-size: 0.82rem;
    inset: auto 10px 10px;
  }

  /* --- Scroll-top button --- */
  .scroll-top {
    right: 14px;
    bottom: 70px;
    width: 40px;
    height: 40px;
  }
}

/* Very small phones (< 380px): more aggressive */
@media (max-width: 380px) {
  h1 {
    font-size: clamp(1.7rem, 8vw, 2.4rem);
  }

  .section {
    padding: 36px 0;
  }

  .past-grid {
    grid-template-columns: 1fr;
  }
}

/* ======================================================================
   Round 16 — Design polish (2026-05-15)
   ----------------------------------------------------------------------
   Goal: lift the visual quality one notch — bring the "fireworks night"
   atmosphere into the hero, give cards a richer hover state, and tighten
   section hierarchy. No content changes; CSS / minimal markup only.
   All animations gated by prefers-reduced-motion.
   ====================================================================== */

/* --- Hero: stacking context for the new overlays --- */
.hero-content {
  position: relative;
  z-index: 3;
}

.event-panel {
  z-index: 3;
}

.hero-scroll-hint {
  z-index: 4;
}

/* Aurora warm glow drifting slowly over the night photograph.
   Sits between the hero background and the sparks layer. */
.hero::before {
  content: "";
  position: absolute;
  inset: 0;
  z-index: 1;
  pointer-events: none;
  background:
    radial-gradient(ellipse 55% 50% at 78% 22%, rgba(215, 169, 71, 0.22) 0%, transparent 65%),
    radial-gradient(ellipse 60% 50% at 12% 80%, rgba(184, 63, 55, 0.16) 0%, transparent 60%),
    radial-gradient(ellipse 40% 40% at 50% 48%, rgba(255, 255, 255, 0.04) 0%, transparent 70%);
  mix-blend-mode: screen;
  animation: hero-aurora 18s ease-in-out infinite alternate;
}

@keyframes hero-aurora {
  0%   { transform: translate3d(0, 0, 0) scale(1);    opacity: 0.85; }
  50%  { transform: translate3d(-14px, 6px, 0) scale(1.04); opacity: 1; }
  100% { transform: translate3d(10px, -8px, 0) scale(1.02); opacity: 0.9; }
}

/* Sparkle dots — twelve hand-placed warm pinpricks that twinkle in two
   offset cycles. Uses two pseudo-elements (six dots each) so the timing
   feels organic. */
.hero-sparks {
  position: absolute;
  inset: 0;
  z-index: 2;
  pointer-events: none;
  overflow: hidden;
}

.hero-sparks::before,
.hero-sparks::after {
  content: "";
  position: absolute;
  inset: 0;
  background-repeat: no-repeat;
  background-size: 100% 100%;
}

.hero-sparks::before {
  background-image:
    radial-gradient(circle at 11% 19%, rgba(255, 232, 178, 0.95) 0,  rgba(255, 232, 178, 0)  2.2px),
    radial-gradient(circle at 24% 36%, rgba(255, 222, 200, 0.85) 0,  rgba(255, 222, 200, 0)  1.6px),
    radial-gradient(circle at 38% 14%, rgba(255, 245, 215, 0.95) 0,  rgba(255, 245, 215, 0)  2.4px),
    radial-gradient(circle at 56% 28%, rgba(255, 215, 150, 0.9)  0,  rgba(255, 215, 150, 0)  2.0px),
    radial-gradient(circle at 72% 22%, rgba(255, 235, 200, 0.85) 0,  rgba(255, 235, 200, 0)  1.8px),
    radial-gradient(circle at 86% 40%, rgba(255, 220, 170, 0.95) 0,  rgba(255, 220, 170, 0)  2.2px);
  animation: hero-spark-twinkle 4.2s ease-in-out infinite;
}

.hero-sparks::after {
  background-image:
    radial-gradient(circle at 18% 62%, rgba(255, 200, 160, 0.78) 0,  rgba(255, 200, 160, 0)  1.8px),
    radial-gradient(circle at 30% 78%, rgba(255, 240, 200, 0.85) 0,  rgba(255, 240, 200, 0)  2.0px),
    radial-gradient(circle at 48% 56%, rgba(255, 220, 180, 0.9)  0,  rgba(255, 220, 180, 0)  2.2px),
    radial-gradient(circle at 64% 72%, rgba(255, 235, 195, 0.85) 0,  rgba(255, 235, 195, 0)  1.8px),
    radial-gradient(circle at 76% 58%, rgba(255, 225, 170, 0.95) 0,  rgba(255, 225, 170, 0)  2.2px),
    radial-gradient(circle at 88% 80%, rgba(255, 230, 185, 0.8)  0,  rgba(255, 230, 185, 0)  1.8px);
  animation: hero-spark-twinkle 5.6s ease-in-out infinite 1.2s;
}

@keyframes hero-spark-twinkle {
  0%, 100% { opacity: 0.4;  transform: translateY(0); }
  35%      { opacity: 1;    transform: translateY(-2px); }
  60%      { opacity: 0.55; transform: translateY(1px); }
  80%      { opacity: 0.95; transform: translateY(-1px); }
}

@media (prefers-reduced-motion: reduce) {
  .hero::before               { animation: none; }
  .hero-sparks::before,
  .hero-sparks::after         { animation: none; opacity: 0.7; }
}

/* Mobile: lower the sparkle density (CPU-cheaper) and dim aurora */
@media (max-width: 620px) {
  .hero::before {
    background:
      radial-gradient(ellipse 60% 45% at 80% 25%, rgba(215, 169, 71, 0.18) 0%, transparent 65%),
      radial-gradient(ellipse 60% 45% at 12% 82%, rgba(184, 63, 55, 0.13) 0%, transparent 60%);
  }
  .hero-sparks::before {
    background-image:
      radial-gradient(circle at 18% 22%, rgba(255, 232, 178, 0.95) 0,  rgba(255, 232, 178, 0)  2.2px),
      radial-gradient(circle at 42% 18%, rgba(255, 245, 215, 0.95) 0,  rgba(255, 245, 215, 0)  2.0px),
      radial-gradient(circle at 78% 28%, rgba(255, 220, 170, 0.9)  0,  rgba(255, 220, 170, 0)  2.0px);
  }
  .hero-sparks::after {
    background-image:
      radial-gradient(circle at 28% 70%, rgba(255, 235, 200, 0.85) 0,  rgba(255, 235, 200, 0)  1.8px),
      radial-gradient(circle at 60% 60%, rgba(255, 225, 175, 0.9)  0,  rgba(255, 225, 175, 0)  2.0px),
      radial-gradient(circle at 84% 76%, rgba(255, 230, 185, 0.8)  0,  rgba(255, 230, 185, 0)  1.8px);
  }
}

/* --- Section heading: gold→red accent stripe under h2 ------------------ */
.section-heading h2 {
  position: relative;
}

.section-heading h2::after {
  content: "";
  display: block;
  margin-top: 18px;
  width: 64px;
  height: 2px;
  background: linear-gradient(
    90deg,
    var(--gold) 0%,
    var(--red) 55%,
    rgba(184, 63, 55, 0) 100%
  );
  border-radius: 2px;
  box-shadow: 0 0 12px rgba(215, 169, 71, 0.35);
}

/* --- Card hover: unified richer lift + gold rim glow -------------------- */
.stats article,
.ticket-card,
.info-card,
.program-card,
.not-found-card {
  transition: transform 0.32s cubic-bezier(0.2, 0.8, 0.2, 1),
              box-shadow 0.32s ease,
              border-color 0.32s ease;
}

.stats article:hover,
.ticket-card:hover,
.info-card:hover,
.program-card:hover,
.not-found-card:hover {
  transform: translateY(-6px);
  border-color: rgba(215, 169, 71, 0.45);
  box-shadow:
    0 28px 64px rgba(28, 35, 42, 0.16),
    0 0 0 1px rgba(215, 169, 71, 0.28);
}

/* Testimonial cards already have ::before, so just enhance hover shadow */
.testimonial-card {
  transition: transform 0.32s cubic-bezier(0.2, 0.8, 0.2, 1),
              box-shadow 0.32s ease,
              border-color 0.32s ease;
}

.testimonial-card:hover {
  transform: translateY(-4px);
  border-color: rgba(215, 169, 71, 0.4);
  box-shadow:
    0 24px 56px rgba(28, 35, 42, 0.14),
    0 0 0 1px rgba(215, 169, 71, 0.22);
}

/* Sponsor tile: keep the existing scale, add a soft gold halo */
.sponsor-tile {
  transition: transform 0.3s ease, box-shadow 0.3s ease, border-color 0.3s ease;
}

.sponsor-tile:hover {
  border-color: rgba(215, 169, 71, 0.45);
  box-shadow:
    0 16px 40px rgba(28, 35, 42, 0.10),
    0 0 0 1px rgba(215, 169, 71, 0.22);
}

/* --- Primary button: enhanced glow on hover ---------------------------- */
.button.primary {
  transition: transform 0.25s ease, box-shadow 0.25s ease;
}

.button.primary:hover,
.button.primary:focus-visible {
  transform: translateY(-1px);
  box-shadow:
    0 18px 44px rgba(215, 169, 71, 0.45),
    0 0 0 1px rgba(255, 232, 166, 0.6),
    inset 0 1px 0 rgba(255, 255, 255, 0.6);
}

.button.secondary {
  transition: background 0.25s ease, border-color 0.25s ease, transform 0.25s ease;
}

.button.secondary:hover,
.button.secondary:focus-visible {
  transform: translateY(-1px);
  background: rgba(255, 255, 255, 0.18);
  border-color: rgba(215, 169, 71, 0.7);
}

/* --- Scroll progress: drop shadow + faint glow ------------------------- */
.scroll-progress {
  box-shadow: 0 0 12px rgba(215, 169, 71, 0.5);
}

/* --- Site header: gold underline emerges on scroll --------------------- */
.site-header {
  position: fixed;
}

.site-header::after {
  content: "";
  position: absolute;
  left: 0;
  right: 0;
  bottom: 0;
  height: 1px;
  background: linear-gradient(
    90deg,
    rgba(215, 169, 71, 0) 0%,
    rgba(215, 169, 71, 0.55) 50%,
    rgba(215, 169, 71, 0) 100%
  );
  opacity: 0;
  transition: opacity 0.4s ease;
  pointer-events: none;
}

.site-header.is-scrolled::after {
  opacity: 1;
}

/* --- Hero: improve mobile typography & breathing room ------------------ */
@media (max-width: 620px) {
  .hero {
    /* Slightly taller padding-top so the badge doesn't collide with the
       sticky header on smaller phones */
    padding-top: clamp(120px, 28vw, 156px);
  }

  .hero h1 {
    /* Slightly tighter leading for the larger mobile size */
    line-height: 1.22;
    text-shadow:
      0 2px 22px rgba(0, 0, 0, 0.55),
      0 1px 3px rgba(0, 0, 0, 0.7);
  }

  .hero-lead {
    /* Stronger contrast over the dimmer mobile hero image */
    color: rgba(255, 255, 255, 0.92);
    text-shadow: 0 1px 12px rgba(0, 0, 0, 0.55);
  }

  .hero-actions {
    /* Each CTA gets its own line for tappability on the narrowest phones */
    gap: 12px;
  }

  .hero-actions .button {
    /* Stretch full width when alone on a line */
    flex: 1 1 auto;
    min-width: 0;
    padding: 0 22px;
  }
}

/* --- Fade-in stagger: respected by ui.js by writing inline delays ----- */
/* (No CSS needed — see ui.js for the runtime calc.) */

/* ======================================================================
   Round 17 — Design polish, part 2 (2026-05-15)
   ----------------------------------------------------------------------
   Carries the "fireworks night" language across the rest of the site —
   sub-page heroes, stats numbers, footer, past-gallery captions, FAQ.
   ====================================================================== */

/* --- Sub-page hero (page-hero): add sparkles to the dot texture and a
       slow drift, so every sub-page feels alive without a photo. ------- */
.page-hero::before {
  background-image:
    radial-gradient(rgba(255, 255, 255, 0.06) 1px, transparent 1px),
    radial-gradient(circle at 8% 28%,  rgba(255, 230, 178, 0.85) 0, rgba(255, 230, 178, 0) 2.2px),
    radial-gradient(circle at 88% 32%, rgba(255, 220, 170, 0.9)  0, rgba(255, 220, 170, 0) 2.2px),
    radial-gradient(circle at 18% 76%, rgba(255, 245, 215, 0.85) 0, rgba(255, 245, 215, 0) 2.0px),
    radial-gradient(circle at 72% 68%, rgba(255, 215, 150, 0.95) 0, rgba(255, 215, 150, 0) 2.4px),
    radial-gradient(circle at 52% 22%, rgba(255, 235, 200, 0.75) 0, rgba(255, 235, 200, 0) 1.8px);
  background-size: 28px 28px, 100% 100%, 100% 100%, 100% 100%, 100% 100%, 100% 100%;
  background-position: 12px 12px, 0 0, 0 0, 0 0, 0 0, 0 0;
  background-repeat: repeat, no-repeat, no-repeat, no-repeat, no-repeat, no-repeat;
  animation: page-hero-twinkle 5.4s ease-in-out infinite;
}

@keyframes page-hero-twinkle {
  0%, 100% { opacity: 0.55; transform: translate3d(0, 0, 0); }
  50%      { opacity: 0.95; transform: translate3d(4px, -2px, 0); }
}

@media (prefers-reduced-motion: reduce) {
  .page-hero::before { animation: none; opacity: 0.7; transform: none; }
}

/* page-hero h1: refined gradient text + subtle radiance */
.page-hero h1 {
  background: linear-gradient(180deg, #fff 60%, rgba(255, 232, 178, 0.92) 100%);
  -webkit-background-clip: text;
          background-clip: text;
  color: transparent;
  -webkit-text-fill-color: transparent;
  text-shadow: 0 4px 32px rgba(215, 169, 71, 0.18);
}

/* --- Stats numbers (01/02/03): make them feel like fireworks bursts -- */
.stats span {
  position: relative;
  font-size: clamp(2.1rem, 4vw, 2.8rem);
  letter-spacing: 0.04em;
  background: linear-gradient(135deg, #ffe8a6 0%, var(--gold) 40%, var(--red) 100%);
  -webkit-background-clip: text;
          background-clip: text;
  color: transparent;
  -webkit-text-fill-color: transparent;
}

.stats span::after {
  content: "";
  display: block;
  width: 40px;
  height: 2px;
  margin-top: 8px;
  background: linear-gradient(90deg, var(--gold), rgba(184, 63, 55, 0));
  border-radius: 2px;
}

/* On hover the whole article elevates (Round 16). Give the number a hair
   of motion to match. */
.stats article:hover .stats-body span {
  transform: translateY(-1px);
  filter: drop-shadow(0 4px 14px rgba(215, 169, 71, 0.32));
}

/* --- Past-gallery tiles: cinematic caption reveal -------------------- */
.past-tile {
  isolation: isolate;
}

/* Stronger bottom gradient — already present, just deepen on hover */
.past-tile::after {
  transition: opacity 0.35s ease;
}

.past-tile:hover::after {
  background: linear-gradient(180deg, rgba(8, 13, 25, 0) 30%, rgba(8, 13, 25, 0.92) 100%);
}

.past-tile figcaption {
  transition: transform 0.4s cubic-bezier(0.2, 0.8, 0.2, 1),
              letter-spacing 0.4s ease;
}

.past-tile:hover figcaption {
  transform: translateY(-4px);
  letter-spacing: 0.02em;
}

/* Zoom hint becomes more prominent on hover */
.past-tile:hover .zoom-hint {
  background: rgba(215, 169, 71, 0.85);
}

/* --- FAQ: gold rim on hover, smoother summary plus button ----------- */
.faq-item {
  transition: transform 0.3s ease,
              border-color 0.25s ease,
              box-shadow 0.25s ease;
}

.faq-item:hover {
  transform: translateY(-1px);
  box-shadow: 0 14px 32px rgba(28, 35, 42, 0.08);
}

.faq-item summary {
  transition: color 0.25s ease;
}

.faq-item:hover summary {
  color: var(--red);
}

.faq-item summary::after {
  background: linear-gradient(135deg, #fff5e0, var(--cream));
  box-shadow: 0 4px 10px rgba(184, 63, 55, 0.18);
}

.faq-item[open] summary::after {
  background: linear-gradient(135deg, rgba(215, 169, 71, 0.18), rgba(184, 63, 55, 0.16));
  box-shadow: 0 4px 14px rgba(184, 63, 55, 0.22);
}

/* --- Footer: top accent stripe + starfield + richer social hover ---- */
.footer {
  position: relative;
  /* Add a very faint starfield using radial-gradient dots */
  background:
    radial-gradient(circle at 12% 22%,  rgba(255, 240, 200, 0.07) 0, transparent 1.5px),
    radial-gradient(circle at 82% 36%,  rgba(255, 240, 200, 0.08) 0, transparent 1.5px),
    radial-gradient(circle at 36% 78%,  rgba(255, 240, 200, 0.06) 0, transparent 1.5px),
    radial-gradient(circle at 68% 62%,  rgba(255, 240, 200, 0.07) 0, transparent 1.5px),
    radial-gradient(circle at 22% 58%,  rgba(255, 240, 200, 0.05) 0, transparent 1.5px),
    radial-gradient(circle at 92% 84%,  rgba(255, 240, 200, 0.06) 0, transparent 1.5px),
    var(--night);
}

.footer::before {
  content: "";
  position: absolute;
  top: 0;
  left: 50%;
  transform: translateX(-50%);
  width: min(1120px, calc(100% - 40px));
  height: 1px;
  background: linear-gradient(
    90deg,
    rgba(215, 169, 71, 0) 0%,
    rgba(215, 169, 71, 0.55) 50%,
    rgba(215, 169, 71, 0) 100%
  );
  box-shadow: 0 0 16px rgba(215, 169, 71, 0.3);
  pointer-events: none;
}

.footer-social a {
  position: relative;
  overflow: hidden;
  /* Shared transitions */
  transition: background 0.28s ease,
              border-color 0.28s ease,
              transform 0.28s ease,
              color 0.28s ease,
              box-shadow 0.28s ease;
}

.footer-social a:hover {
  background: rgba(215, 169, 71, 0.16);
  border-color: rgba(215, 169, 71, 0.7);
  color: #fff;
  transform: translateY(-2px);
  box-shadow: 0 8px 22px rgba(215, 169, 71, 0.22);
}

/* Footer nav links: subtle gold hover for hierarchy */
.footer-nav-group a {
  color: rgba(255, 255, 255, 0.78);
  transition: color 0.2s ease, transform 0.2s ease, letter-spacing 0.2s ease;
  display: inline-block;
}

.footer-nav-group a:hover {
  color: var(--gold);
  letter-spacing: 0.02em;
}

/* --- Event-panel calendar button: subtle gold glow on hover -------- */
.event-panel-calendar {
  position: relative;
  overflow: hidden;
}

.event-panel-calendar:hover,
.event-panel-calendar:focus-visible {
  box-shadow: 0 10px 28px rgba(215, 169, 71, 0.32);
}

/* ======================================================================
   Round 18 — Design polish, part 3 (2026-05-15)
   ----------------------------------------------------------------------
   Ambient touches — body drift, hero badge shimmer, gallery vignette,
   mobile sticky CTA prominence, hero scroll-hint elegance.
   ====================================================================== */

/* --- Body background: very slow drift so the page feels alive ------ */
body {
  background-size: 100% 100%, 100% 100%, 100% 100%;
  animation: body-bg-drift 42s ease-in-out infinite alternate;
}

@keyframes body-bg-drift {
  0%   { background-position: 88% 16%,  8% 78%,  0 0; }
  100% { background-position: 92% 12%,  4% 82%,  0 0; }
}

@media (prefers-reduced-motion: reduce) {
  body { animation: none; }
}

/* --- Hero badge: light sweep effect riding on top of the pulse ----- */
.hero-badge {
  overflow: hidden;
}

.hero-badge::after {
  content: "";
  position: absolute;
  top: 0;
  left: -120%;
  width: 60%;
  height: 100%;
  background: linear-gradient(
    100deg,
    transparent 0%,
    rgba(255, 245, 220, 0.32) 50%,
    transparent 100%
  );
  pointer-events: none;
  animation: hero-badge-sweep 5.6s ease-in-out infinite;
}

@keyframes hero-badge-sweep {
  0%, 70%, 100% { left: -120%; }
  85%           { left: 140%; }
}

@media (prefers-reduced-motion: reduce) {
  .hero-badge::after { animation: none; opacity: 0; }
}

/* --- Past-gallery tiles: subtle cinematic vignette ----------------- */
.past-tile {
  position: relative;
}

.past-tile::before {
  content: "";
  position: absolute;
  inset: 0;
  z-index: 1;
  pointer-events: none;
  /* Soft vignette that darkens the corners — adds depth to photos */
  background: radial-gradient(
    ellipse at center,
    transparent 50%,
    rgba(8, 13, 25, 0.32) 100%
  );
  opacity: 0.7;
  transition: opacity 0.4s ease;
}

.past-tile:hover::before {
  opacity: 0.45;
}

/* Caption already z-indexed at 1, push it above the vignette */
.past-tile figcaption {
  z-index: 2;
}

.past-tile .zoom-hint {
  z-index: 2;
}

/* --- Mobile sticky CTA: prominent gold-button with subtle pulse --- */
.mobile-sticky-cta {
  position: fixed;
  /* Animate a faint outer ring so it draws attention without annoyance */
  animation: mobile-cta-pulse 3.8s ease-in-out infinite;
}

@keyframes mobile-cta-pulse {
  0%, 100% {
    box-shadow:
      0 8px 28px rgba(11, 19, 31, 0.32),
      0 0 0 0 rgba(215, 169, 71, 0.45);
  }
  60% {
    box-shadow:
      0 8px 28px rgba(11, 19, 31, 0.32),
      0 0 0 10px rgba(215, 169, 71, 0);
  }
}

.mobile-sticky-cta:hover,
.mobile-sticky-cta:focus-visible {
  transform: translateX(-50%) translateY(-2px);
  box-shadow:
    0 14px 36px rgba(11, 19, 31, 0.4),
    0 0 0 1px rgba(255, 232, 166, 0.6);
}

@media (prefers-reduced-motion: reduce) {
  .mobile-sticky-cta { animation: none; }
}

/* --- Hero scroll-hint: trim to a slim mouse icon look ------------ */
.hero-scroll-hint {
  /* Restored: the existing pulse animation handles motion; here we
     just sharpen the visual cue */
  padding: 8px 12px;
  border: 1px solid rgba(255, 255, 255, 0.18);
  border-radius: 999px;
  background: rgba(8, 13, 25, 0.2);
  backdrop-filter: blur(4px);
  transition: background 0.3s ease, border-color 0.3s ease, color 0.25s ease;
}

.hero-scroll-hint:hover {
  background: rgba(215, 169, 71, 0.18);
  border-color: rgba(215, 169, 71, 0.7);
}

/* --- Notice (homepage): subtle accent on the corner ribbon ------- */
.notice {
  transition: box-shadow 0.3s ease, transform 0.3s ease;
}

.notice:hover {
  transform: translateY(-2px);
  box-shadow: 0 18px 44px rgba(28, 35, 42, 0.10);
}

/* ======================================================================
   Round 19 — Design polish, part 4 (2026-05-15)
   ----------------------------------------------------------------------
   Final unification pass — bring the remaining dark CTA sections
   (signup-card, support-band) and lighter cards (why-choose) up to the
   same design language. After this, design polish should be done.
   ====================================================================== */

/* --- why-choose-card: gold rim on hover, icon emboldens --------- */
.why-choose-card {
  transition: transform 0.32s cubic-bezier(0.2, 0.8, 0.2, 1),
              box-shadow 0.32s ease,
              border-color 0.32s ease;
}

.why-choose-card:hover {
  transform: translateY(-6px);
  border-color: rgba(215, 169, 71, 0.45);
  box-shadow:
    0 26px 56px rgba(28, 35, 42, 0.14),
    0 0 0 1px rgba(215, 169, 71, 0.28);
}

.why-choose-icon {
  transition: transform 0.35s cubic-bezier(0.2, 0.8, 0.2, 1),
              background 0.35s ease,
              color 0.35s ease;
}

.why-choose-card:hover .why-choose-icon {
  transform: scale(1.08) rotate(-3deg);
  background: linear-gradient(135deg, rgba(215, 169, 71, 0.35), rgba(184, 63, 55, 0.22));
  color: var(--red);
}

/* Removed: signup-card-aurora animation.
   Reason: the radial-gradient layers use internal positioning
   (`circle at 88% 12%`) with background-size:100% 100%. Animating
   background-position between 88%→84% has no visible effect because each
   layer already fills the element exactly — there is no extra room for
   the gradient to drift into. Removing eliminates the unused
   compositor work without changing the visual. */

/* --- signup-option: gold halo on hover + icon spring ------------- */
.signup-option {
  position: relative;
  overflow: hidden;
}

.signup-option::before {
  content: "";
  position: absolute;
  inset: 0;
  background: radial-gradient(
    circle at 0% 100%,
    rgba(215, 169, 71, 0.16),
    transparent 60%
  );
  opacity: 0;
  transition: opacity 0.35s ease;
  pointer-events: none;
}

.signup-option:hover::before {
  opacity: 1;
}

.signup-option > * {
  position: relative;
  z-index: 1;
}

.signup-option-icon {
  transition: transform 0.32s cubic-bezier(0.2, 0.8, 0.2, 1),
              background 0.32s ease,
              color 0.32s ease;
}

.signup-option:hover .signup-option-icon {
  transform: scale(1.1);
  background: rgba(215, 169, 71, 0.3);
  color: #ffe8a6;
}

/* --- support-band: twinkling dots + slow drift ------------------- */
.support-band::before {
  /* Replace the static dot grid with a richer twinkling layer */
  background-image:
    radial-gradient(rgba(255, 255, 255, 0.06) 1px, transparent 1px),
    radial-gradient(circle at 14% 26%, rgba(255, 230, 178, 0.5) 0, rgba(255, 230, 178, 0) 2px),
    radial-gradient(circle at 78% 42%, rgba(255, 220, 170, 0.55) 0, rgba(255, 220, 170, 0) 2px),
    radial-gradient(circle at 38% 72%, rgba(255, 245, 215, 0.45) 0, rgba(255, 245, 215, 0) 2px),
    radial-gradient(circle at 88% 86%, rgba(255, 215, 150, 0.55) 0, rgba(255, 215, 150, 0) 2px);
  background-size: 32px 32px, 100% 100%, 100% 100%, 100% 100%, 100% 100%;
  background-position: 16px 16px, 0 0, 0 0, 0 0, 0 0;
  background-repeat: repeat, no-repeat, no-repeat, no-repeat, no-repeat;
  animation: support-band-twinkle 6.2s ease-in-out infinite;
}

@keyframes support-band-twinkle {
  0%, 100% { opacity: 0.5;  }
  50%      { opacity: 0.85; }
}

@media (prefers-reduced-motion: reduce) {
  .support-band::before { animation: none; opacity: 0.6; }
}

/* support-band actions: a tiny lift on hover via the cascading button rule */

/* --- info-card (news): tighter hover language ------------------- */
.info-card-thumb {
  overflow: hidden;
}

.info-card-thumb img {
  transition: transform 0.55s cubic-bezier(0.2, 0.8, 0.2, 1);
}

.info-card:hover .info-card-thumb img {
  transform: scale(1.04);
}

/* --- Universal: gentle gold glow on focus-visible for keyboard --
   Subtle outline replaces the harsher default — only on focus-visible */
.button.primary:focus-visible,
.button.secondary:focus-visible,
.header-cta:focus-visible,
.signup-option:focus-visible,
.event-panel-calendar:focus-visible {
  outline: 2px solid var(--gold);
  outline-offset: 4px;
}

/* ======================================================================
   Round 20 / M5 — Unify sponsor.html with the homepage sponsor-grid
   ----------------------------------------------------------------------
   sponsor.html ships with the original WordPress block layout
   (`.wp-block-columns` + `.wp-block-column` + `.wp-block-image`). This
   block re-skins those WP blocks on the sponsor page only so each logo
   reads as a proper tile, matching the home page `.sponsor-tile` look.
   Body slug class (`page-sponsor`) is added by ui.js on load.
   ====================================================================== */

/* Tier-header h2 (特別協力 / ゴールドスポンサー / ...) — drop the WP
   yellow marker, replace with our gold-red gradient stripe. */
body.page-sponsor .prose h2.wp-block-heading.is-style-section_ttl {
  display: block;
  margin-top: 2.4em;
  padding-bottom: 12px;
  border-bottom: none;
  font-family: "Zen Old Mincho", serif;
  font-size: clamp(1.5rem, 3.2vw, 2rem);
}

body.page-sponsor .prose h2.wp-block-heading.is-style-section_ttl::after {
  /* Existing .prose h2::after rule applies — already gives a stripe.
     Just slightly fatten it for tier headers. */
  height: 3px;
}

body.page-sponsor .prose h2 .swl-marker {
  background: none !important;
  padding: 0 !important;
}

/* Treat every sponsor-row column figure as a tile. */
body.page-sponsor .prose .wp-block-columns {
  display: flex;
  flex-wrap: wrap;
  gap: 18px;
  margin: 0.8em 0 1.8em;
  align-items: stretch;
}

body.page-sponsor .prose .wp-block-column {
  flex: 1 1 calc(33.333% - 12px);
  min-width: 220px;
  /* Cancel the column-as-flex-container so figure fills naturally */
  display: block;
  padding: 0;
  gap: 0;
}

/* The figure becomes the visible tile */
body.page-sponsor .prose .wp-block-column > figure.wp-block-image {
  display: flex;
  align-items: center;
  justify-content: center;
  height: 100%;
  margin: 0;
  padding: 20px 24px;
  background: #fff;
  border: 1px solid var(--line);
  border-radius: 10px;
  box-shadow: 0 6px 22px rgba(28, 35, 42, 0.06);
  transition: transform 0.3s cubic-bezier(0.2, 0.8, 0.2, 1),
              box-shadow 0.3s ease,
              border-color 0.3s ease;
}

body.page-sponsor .prose .wp-block-column > figure.wp-block-image:hover {
  transform: translateY(-3px);
  border-color: rgba(215, 169, 71, 0.45);
  box-shadow:
    0 18px 40px rgba(28, 35, 42, 0.12),
    0 0 0 1px rgba(215, 169, 71, 0.22);
}

body.page-sponsor .prose .wp-block-column > figure.wp-block-image img {
  width: 100%;
  max-width: 320px;
  max-height: 84px;
  height: auto;
  object-fit: contain;
  display: block;
}

/* Responsive: 2-up on tablets, 1-up on phones */
@media (max-width: 760px) {
  body.page-sponsor .prose .wp-block-column {
    flex: 1 1 calc(50% - 9px);
  }
  body.page-sponsor .prose .wp-block-column > figure.wp-block-image {
    padding: 16px 18px;
  }
  body.page-sponsor .prose .wp-block-column > figure.wp-block-image img {
    max-height: 66px;
  }
}

@media (max-width: 460px) {
  body.page-sponsor .prose .wp-block-column {
    flex: 1 1 100%;
  }
}

/* "個人協賛" (individual sponsors) — these are p-tags listing names,
   not figures. Keep them readable but spaced. */
body.page-sponsor .prose .wp-block-columns:not(:has(figure)) .wp-block-column {
  background: linear-gradient(180deg, transparent, rgba(215, 169, 71, 0.04));
  padding: 14px 18px;
  border-radius: 8px;
  border: 1px solid rgba(215, 169, 71, 0.18);
}

body.page-sponsor .prose .wp-block-columns:not(:has(figure)) .wp-block-column p {
  margin: 0;
  font-weight: 600;
  line-height: 1.7;
}

/* Sponsor-name tables (lower tiers): make every cell a soft tile. */
body.page-sponsor .prose .wp-block-table {
  margin: 1em 0 1.8em;
}

body.page-sponsor .prose .wp-block-table table {
  border-collapse: separate;
  border-spacing: 10px;
  width: 100%;
  background: transparent;
  table-layout: fixed;
}

body.page-sponsor .prose .wp-block-table td {
  padding: 14px 12px;
  background: linear-gradient(180deg, #fff, var(--cream));
  border: 1px solid rgba(215, 169, 71, 0.20);
  border-radius: 8px;
  text-align: center;
  vertical-align: middle;
  font-weight: 600;
  line-height: 1.5;
  /* Override striped tbody background that .prose table applies */
  box-shadow: 0 4px 14px rgba(28, 35, 42, 0.04);
  transition: background 0.25s ease,
              border-color 0.25s ease,
              transform 0.25s ease;
}

body.page-sponsor .prose .wp-block-table tbody tr:nth-child(odd) {
  background: transparent;
}

body.page-sponsor .prose .wp-block-table td:hover {
  background: #fff;
  border-color: rgba(215, 169, 71, 0.55);
  transform: translateY(-1px);
}

/* Dim cells that are just an em-dash placeholder */
body.page-sponsor .prose .wp-block-table td:has(> span.swl-fz:only-child),
body.page-sponsor .prose .wp-block-table td:has(> strong > .swl-fz:only-child) {
  /* OK — keep them styled normally; the dash itself is short */
}

body.page-sponsor .prose .wp-block-table td .swl-marker {
  background: none !important;
  padding: 0 !important;
}

body.page-sponsor .prose .wp-block-table td strong {
  font-weight: 700;
}

@media (max-width: 720px) {
  body.page-sponsor .prose .wp-block-table table {
    border-spacing: 6px;
  }
  body.page-sponsor .prose .wp-block-table td {
    padding: 10px 8px;
    font-size: 0.86rem;
  }
}

/* ======================================================================
   Round 22 — Freshness guard: stale CTA replacements (2026-05-15)
   ----------------------------------------------------------------------
   ticket.html ships with the WP-imported KKday / アソビュー reservation
   buttons live, even though 第7回 sales have ended and 第8回 sales have
   not yet opened. The buttons were replaced in-place by `.ticket-sale-
   pending` notices that redirect to the index #signup flow. CSS below.
   ====================================================================== */

.ticket-sale-pending {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  align-items: center;
  gap: 22px;
  padding: 20px 24px;
  margin: 1.4em 0;
  background: linear-gradient(135deg, rgba(215, 169, 71, 0.10), rgba(184, 63, 55, 0.05));
  border: 1px solid rgba(215, 169, 71, 0.38);
  border-radius: 12px;
  box-shadow: 0 8px 24px rgba(28, 35, 42, 0.05);
}

.ticket-sale-pending-msg {
  display: flex;
  flex-direction: column;
  gap: 6px;
  min-width: 0;
}

.ticket-sale-pending-tag {
  display: inline-block;
  width: fit-content;
  padding: 3px 12px;
  background: linear-gradient(135deg, var(--gold), #b88e2c);
  color: #fff;
  border-radius: 999px;
  font-size: 0.74rem;
  font-weight: 800;
  letter-spacing: 0.08em;
  text-transform: uppercase;
}

.ticket-sale-pending-msg strong {
  font-size: 1.02rem;
  font-weight: 800;
  color: var(--ink);
  line-height: 1.45;
}

.ticket-sale-pending-sub {
  font-size: 0.86rem;
  color: var(--muted);
  font-weight: 600;
  line-height: 1.5;
}

.ticket-sale-pending-cta {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding: 11px 22px;
  background: linear-gradient(135deg, #ffe8a6 0%, var(--gold) 60%, #c79636 100%);
  color: var(--night);
  border-radius: 999px;
  font-weight: 800;
  font-size: 0.94rem;
  white-space: nowrap;
  text-decoration: none;
  box-shadow:
    0 8px 22px rgba(215, 169, 71, 0.28),
    inset 0 1px 0 rgba(255, 255, 255, 0.5);
  transition: transform 0.25s ease, box-shadow 0.25s ease;
}

.ticket-sale-pending-cta:hover,
.ticket-sale-pending-cta:focus-visible {
  transform: translateY(-2px);
  box-shadow:
    0 14px 32px rgba(215, 169, 71, 0.45),
    inset 0 1px 0 rgba(255, 255, 255, 0.6);
  color: var(--night);
}

.ticket-sale-pending-cta svg {
  flex-shrink: 0;
}

@media (max-width: 580px) {
  .ticket-sale-pending {
    grid-template-columns: 1fr;
    text-align: center;
    padding: 18px 20px;
  }
  .ticket-sale-pending-msg {
    align-items: center;
  }
  .ticket-sale-pending-cta {
    justify-content: center;
  }
}

/* access.html: disclaimer note under the legacy bus-stop timetable */
.prose .access-timetable-note {
  margin: 12px 0 0;
  padding: 12px 16px;
  border-left: 3px solid var(--gold);
  background: rgba(215, 169, 71, 0.06);
  border-radius: 0 8px 8px 0;
  font-size: 0.92rem;
  line-height: 1.65;
  color: var(--ink);
}

.prose .access-timetable-note strong {
  color: var(--red);
}

.prose .access-timetable-note a {
  color: var(--teal);
  text-decoration: underline;
  text-underline-offset: 3px;
}

.prose .access-timetable-note a:hover {
  color: var(--gold-text);
}

/* ======================================================================
   Round 27 — Dark mode (prefers-color-scheme: dark) — L5
   ----------------------------------------------------------------------
   Activates automatically when the OS / browser is set to dark mode.
   Approach: additive overrides — keep the light-mode CSS untouched and
   layer dark adjustments here. Variables flip first; specific card
   surfaces flip via explicit selectors below.
   ====================================================================== */

@media (prefers-color-scheme: dark) {
  :root {
    --ink: #f1eee5;
    --muted: #a4b1ba;
    --paper: #0c1320;
    --cream: #1a2236;
    --line: rgba(255, 255, 255, 0.10);
    --shadow: 0 22px 70px rgba(0, 0, 0, 0.45);
    /* In dark mode the contrast budget flips — brighter gold has plenty
       of contrast against the dark surface, so use --gold here. */
    --gold-text: #e0c478;
  }

  /* Body uses a darker base paper + dimmer ambient drift */
  body {
    background:
      radial-gradient(circle at 88% 16%, rgba(215, 169, 71, 0.10), transparent 38%),
      radial-gradient(circle at 8% 78%, rgba(184, 63, 55, 0.06), transparent 40%),
      var(--paper);
  }

  /* --- Card surfaces — flip white backgrounds to elevated dark surface */
  .info-card,
  .ticket-card,
  .stats article,
  .why-choose-card,
  .program-card,
  .testimonial-card,
  .faq-item,
  .sponsor-tile,
  .press-kit-card,
  .achievements-card,
  .ticket-guide-card,
  .not-found-card,
  .cms-status,
  .prose .press-card,
  .prose .faq-item-dynamic,
  .prose .access-summary-table,
  .prose .support-orgs-group,
  .prose .wp-block-file,
  .prose .swell-block-faq__item,
  .prose .swell-block-bannerLink,
  .prose .has-border.-border01,
  .notice-actions .button.secondary {
    background: #1a2236;
    border-color: rgba(255, 255, 255, 0.10);
    color: var(--ink);
  }

  /* Notice banner (homepage) */
  .notice {
    background: linear-gradient(135deg, rgba(215, 169, 71, 0.10), rgba(184, 63, 55, 0.06));
    border-color: rgba(215, 169, 71, 0.30);
  }

  /* Status banners */
  .page-status-banner {
    background: rgba(215, 169, 71, 0.08);
    border-color: rgba(215, 169, 71, 0.30);
    color: var(--ink);
  }
  .page-status-banner strong { color: var(--ink); }

  .ticket-sale-pending {
    background: linear-gradient(135deg, rgba(215, 169, 71, 0.10), rgba(184, 63, 55, 0.06));
  }
  .ticket-sale-pending-msg strong { color: var(--ink); }
  .ticket-sale-pending-sub { color: var(--muted); }

  .prose .access-timetable-note {
    background: rgba(215, 169, 71, 0.10);
    color: var(--ink);
  }

  /* Eyebrow/tag — bright gold reads cleanly on the dark surface, so use
     --gold directly (no need for the darker AA variant). */
  .eyebrow, .tag {
    color: var(--gold);
  }

  /* Prose links — teal becomes too dark; brighten it for contrast */
  .prose a {
    color: #6fc0c0;
  }
  .prose a:hover {
    color: var(--gold);
  }

  /* FAQ summary + button — translucent gold backdrop reads better than
     the original cream */
  .faq-item summary::after {
    background: linear-gradient(135deg, rgba(215, 169, 71, 0.20), rgba(184, 63, 55, 0.14));
    color: var(--gold);
  }
  .faq-item[open] summary::after {
    background: linear-gradient(135deg, rgba(215, 169, 71, 0.36), rgba(184, 63, 55, 0.28));
  }

  /* Table striping — keep zebra readable */
  .prose table tbody tr:nth-child(odd) {
    background: rgba(255, 255, 255, 0.03);
  }

  /* Timeline dot — match new page bg so the gold ring reads cleanly */
  .timeline > li::before {
    background: var(--paper);
  }

  /* page-sponsor: keep logo tiles dark too */
  body.page-sponsor .prose .wp-block-column > figure.wp-block-image {
    background: #1a2236;
    border-color: rgba(255, 255, 255, 0.10);
  }

  body.page-sponsor .prose .wp-block-table td {
    background: linear-gradient(180deg, #1c2438, #131a28);
    border-color: rgba(215, 169, 71, 0.22);
    color: var(--ink);
  }

  /* Site header gets a subtly deeper backdrop */
  .site-header {
    background: rgba(8, 13, 22, 0.94);
  }

  /* Card-hover gold rim becomes more visible against the dark surface */
  .stats article:hover,
  .ticket-card:hover,
  .info-card:hover,
  .program-card:hover,
  .not-found-card:hover {
    border-color: rgba(215, 169, 71, 0.55);
    box-shadow:
      0 28px 64px rgba(0, 0, 0, 0.5),
      0 0 0 1px rgba(215, 169, 71, 0.35);
  }

  /* Image styles inside prose — the white photo frame would glow on dark;
     dim it slightly to feel intentional */
  .prose .is-style-image__border img {
    background: #1a2236;
  }

  /* WP block file (PDF download) text contrast */
  .prose .wp-block-file a { color: var(--ink); }
}

/* ======================================================================
   Round 30 — Cross-document view transitions
   ----------------------------------------------------------------------
   Opt in to the View Transitions API on supported browsers (Chrome 126+).
   When users navigate between pages of this site, the browser blends
   the old and new documents with a quick crossfade instead of the
   default white flash. Falls back to instant nav on older browsers.
   ====================================================================== */
@view-transition {
  navigation: auto;
}

/* Respect reduced motion — disable the crossfade for users who opted out */
@media (prefers-reduced-motion: reduce) {
  ::view-transition-old(root),
  ::view-transition-new(root) {
    animation: none !important;
  }
}

/* ======================================================================
   Round 50 — iPhone notch / Android gesture-bar safe areas
   ----------------------------------------------------------------------
   With <meta viewport-fit=cover>, the page extends into the unsafe areas
   on notched devices. Use env(safe-area-inset-*) to keep interactive UI
   above/away from system overlays. env() returns 0 on devices without
   safe-area insets, so these calc()s are no-ops on regular displays.
   ====================================================================== */
.site-header {
  padding-top: calc(14px + env(safe-area-inset-top));
  padding-left: calc(clamp(18px, 4vw, 54px) + env(safe-area-inset-left));
  padding-right: calc(clamp(18px, 4vw, 54px) + env(safe-area-inset-right));
}

.footer {
  padding-bottom: calc(28px + env(safe-area-inset-bottom));
  padding-left: calc(clamp(22px, 5vw, 70px) + env(safe-area-inset-left));
  padding-right: calc(clamp(22px, 5vw, 70px) + env(safe-area-inset-right));
}

.mobile-sticky-cta {
  bottom: calc(16px + env(safe-area-inset-bottom));
}

.scroll-top {
  bottom: calc(84px + env(safe-area-inset-bottom));
}

@media (min-width: 921px) {
  .scroll-top {
    bottom: calc(24px + env(safe-area-inset-bottom));
  }
}

.sw-update-toast {
  bottom: calc(24px + env(safe-area-inset-bottom));
}

@media (max-width: 480px) {
  .sw-update-toast {
    bottom: calc(84px + env(safe-area-inset-bottom));
  }
}

/* ======================================================================
   Round 51 — High contrast mode (prefers-contrast: more)
   ----------------------------------------------------------------------
   For users with vision impairments who request higher contrast. Boosts
   borders, drops decorative gradients, and ensures focus indicators are
   thick and unambiguous. Active in: Safari, Firefox, recent Chrome.
   ====================================================================== */
@media (prefers-contrast: more) {
  :root {
    --line: rgba(23, 32, 38, 0.55);
    --muted: #2c333a;
  }

  /* Thicker borders on interactive cards so edges are unmistakable */
  .stats article,
  .ticket-card,
  .info-card,
  .program-card,
  .why-choose-card,
  .testimonial-card,
  .faq-item,
  .sponsor-tile,
  .press-kit-card,
  .achievements-card,
  .ticket-guide-card,
  .not-found-card,
  .signup-option {
    border-width: 2px;
  }

  /* Drop gradients that lower contrast on text */
  .button.primary {
    background: var(--gold);
    color: #000;
    text-shadow: none;
  }
  .ticket-sale-pending-cta {
    background: var(--gold);
    color: #000;
  }

  /* Section heading underline becomes a solid bar */
  .section-heading h2::after {
    background: var(--ink);
    height: 3px;
  }

  /* Focus indicator: extra thick gold outline */
  :focus-visible {
    outline-width: 3px;
    outline-offset: 4px;
  }
}

/* ======================================================================
   Round 51 — Windows High Contrast Mode (forced-colors)
   ----------------------------------------------------------------------
   Windows HC overrides colors via system tokens (Canvas, ButtonText,
   LinkText, etc). Make sure our gold buttons/cards survive by mapping
   to system tokens where it matters.
   ====================================================================== */
/* ======================================================================
   Round 55 — Hero タイトルの focus-in 演出
   ----------------------------------------------------------------------
   .hero h1 と .hero-lead は既に span で 2 フレーズに分割されている
   (line-break:strict + word-break:keep-all 用)。各 span に blur(8px) →
   blur(0) のアニメーションを stagger でかけると、各フレーズが順に
   ピントが合うような演出になる。
   既存の .hero-content の hero-fade とは並走する (transform は触らず
   filter + opacity のみ変えるので衝突しない)。
   ====================================================================== */
.hero h1 > span,
.hero-lead > span {
  animation: hero-word-focus 1.1s cubic-bezier(0.2, 0.8, 0.2, 1) both;
}

.hero h1 > span:nth-child(2) { animation-delay: 0.18s; }
.hero h1 > span:nth-child(3) { animation-delay: 0.36s; }
.hero-lead > span:nth-child(1) { animation-delay: 0.45s; }
.hero-lead > span:nth-child(2) { animation-delay: 0.62s; }

@keyframes hero-word-focus {
  from { filter: blur(8px); opacity: 0.5; }
  to   { filter: blur(0);   opacity: 1; }
}

@media (prefers-reduced-motion: reduce) {
  .hero h1 > span,
  .hero-lead > span {
    animation: none;
  }
}

@media (forced-colors: active) {
  .button.primary,
  .button.secondary,
  .header-cta,
  .ticket-sale-pending-cta,
  .mobile-sticky-cta,
  .signup-option,
  .sw-update-toast-btn {
    /* Use system Button tokens — Windows HC will set color/bg for us */
    border: 1px solid ButtonText;
    background: ButtonFace;
    color: ButtonText;
  }
  /* Ensure focus ring is visible against Canvas background */
  :focus-visible {
    outline: 2px solid Highlight;
    outline-offset: 3px;
  }
  /* Decorative-only elements should be hidden in forced colors */
  .hero::before,
  .hero-sparks,
  .page-hero::before {
    display: none;
  }
}

/* ======================================================================
   Round 45 — Service Worker update toast
   ----------------------------------------------------------------------
   Surfaces a reload prompt when ui.js detects that a fresh Service Worker
   version has installed silently in the background. Sticky bottom-center
   pill that doesn't block content.
   ====================================================================== */
.sw-update-toast {
  position: fixed;
  z-index: 30;
  left: 50%;
  bottom: 24px;
  transform: translateX(-50%);
  display: flex;
  align-items: center;
  gap: 12px;
  max-width: calc(100% - 32px);
  padding: 12px 14px 12px 20px;
  border-radius: 999px;
  background: rgba(10, 16, 28, 0.94);
  color: #fff;
  font-size: 0.9rem;
  font-weight: 600;
  box-shadow: 0 14px 36px rgba(11, 19, 31, 0.32);
  backdrop-filter: blur(10px);
  animation: sw-toast-in 0.4s ease-out both;
}

.sw-update-toast span {
  flex: 1 1 auto;
  min-width: 0;
  /* Round 86: テキストを1行に固定し、CJK が1文字ずつ折り返して
     トーストが縦長の円形に潰れるのを防ぐ */
  white-space: nowrap;
}

.sw-update-toast-btn {
  flex-shrink: 0;
  padding: 8px 16px;
  border: 0;
  border-radius: 999px;
  background: linear-gradient(135deg, #ffe8a6 0%, var(--gold) 60%, #c79636 100%);
  color: var(--night);
  font-weight: 800;
  font-size: 0.85rem;
  cursor: pointer;
  transition: transform 0.2s ease, box-shadow 0.2s ease;
}

.sw-update-toast-btn:hover {
  transform: translateY(-1px);
  box-shadow: 0 6px 16px rgba(215, 169, 71, 0.45);
}

.sw-update-toast-close {
  flex-shrink: 0;
  width: 28px;
  height: 28px;
  padding: 0;
  border: 0;
  border-radius: 50%;
  background: rgba(255, 255, 255, 0.10);
  color: rgba(255, 255, 255, 0.78);
  font-size: 1.1rem;
  line-height: 1;
  cursor: pointer;
  transition: background 0.2s ease;
}

.sw-update-toast-close:hover {
  background: rgba(255, 255, 255, 0.2);
  color: #fff;
}

@keyframes sw-toast-in {
  from { transform: translateX(-50%) translateY(20px); opacity: 0; }
  to   { transform: translateX(-50%) translateY(0); opacity: 1; }
}

@media (prefers-reduced-motion: reduce) {
  .sw-update-toast { animation: none; }
}

@media (max-width: 480px) {
  /* Round 86: モバイルでは left/right を固定して幅を確定させる。
     これをしないと position:fixed + display:flex が shrink-to-fit となり、
     トーストが縦長の円形に潰れる。アニメーションも translateX を使わない
     ものに差し替える(left/right 固定と translateX(-50%) は両立しない)。 */
  .sw-update-toast {
    left: 16px;
    right: 16px;
    transform: none;
    max-width: none;
    bottom: calc(84px + env(safe-area-inset-bottom)); /* avoid mobile sticky CTA */
    padding: 12px 14px;
    border-radius: 16px;
    font-size: 0.84rem;
    gap: 8px 10px;
    flex-wrap: wrap; /* 極小画面ではボタンが2行目に回る */
    animation: sw-toast-in-mobile 0.4s ease-out both;
  }
  .sw-update-toast span {
    flex: 1 1 100%; /* テキストは常に1行目を占有 */
  }
  .sw-update-toast-btn {
    flex: 1 1 auto;
    padding: 8px 12px;
    font-size: 0.82rem;
  }
  .sw-update-toast-close {
    flex: 0 0 auto;
  }
}

@keyframes sw-toast-in-mobile {
  from { transform: translateY(16px); opacity: 0; }
  to   { transform: translateY(0); opacity: 1; }
}

/* ======================================================================
   Round 57 — Hero エリア改善 (Audit ①②③)
   ----------------------------------------------------------------------
   ① ヒーロー写真クロスフェード (花火 ↔ 夜の賑わい)
   ② 実績数字を clamp(3.5rem, 8vw, 7rem) に拡大、ファースト印象のフック化
   ③ プライマリ CTA を 40% 拡大、セカンダリを下線テキスト化
   ====================================================================== */

/* ① Hero background cross-fade ----------------------------------------- */
.hero-bg-alt {
  position: absolute;
  inset: 0;
  z-index: 0;
  background: url("assets/hero-night-crowd-800.webp") center / cover;
  opacity: 0;
  animation: hero-bg-rotate 14s ease-in-out infinite;
  animation-delay: 4s;
  pointer-events: none;
}

@media (min-width: 801px) {
  .hero-bg-alt {
    background-image: url("assets/hero-night-crowd-1280.webp");
  }
}

@keyframes hero-bg-rotate {
  /* 14 秒周期で hero (花火) ↔ alt (夜の賑わい) をクロスフェード。
     0-30%: alt 非表示 (花火が見える)
     40-60%: alt フェードイン → 完全表示
     70-100%: alt フェードアウト → 花火に戻る
     つまり 1 周期で alt が 5-6 秒間ほど表示される。 */
  0%, 30%, 70%, 100% { opacity: 0; }
  40%, 60% { opacity: 1; }
}

@media (prefers-reduced-motion: reduce) {
  .hero-bg-alt { animation: none; opacity: 0; }
}

/* ② Achievements の数字を一気に大きく (HOTFIX in Round 60) -------------
   初版 clamp(3.5rem, 8vw, 7rem) は「5,000」(5 文字) がカード幅
   180-220px に収まらず横にはみ出していた。container query で
   カード幅に応じて自動縮小 + 最大値を保守的に下げる。 */
.achievements-grid {
  /* 180 → 210px で「5,000」が文字幅 100% でも収まる余裕を確保 */
  grid-template-columns: repeat(auto-fit, minmax(210px, 1fr));
}

.achievements-card {
  container-type: inline-size;
  padding-top: 32px;
  padding-bottom: 28px;
  gap: 10px;
}

.achievements-num {
  font-size: 1rem;
  letter-spacing: 0.02em;
  /* はみ出し防止: nowrap で 1 行固定、はみ出した分は隠す */
  white-space: nowrap;
  max-width: 100%;
  overflow: hidden;
  text-overflow: clip;
}

.achievements-num em {
  /* 保守的な clamp: 「5,000」が 5 文字 × ~0.6em で 3em 幅、
     カード 210px 想定で max ~62px (3.8rem) が安全 */
  font-size: clamp(2.4rem, 5vw, 3.8rem);
  line-height: 0.95;
  margin: 0 0.04em;
}

/* コンテナクエリでカード幅に応じてさらに縮小 (安全装置) */
@container (max-width: 240px) {
  .achievements-num em { font-size: clamp(2.2rem, 4.5vw, 3.4rem); }
}
@container (max-width: 200px) {
  .achievements-num em { font-size: clamp(2rem, 4vw, 2.8rem); }
}

/* "Coming soon" バリアントの数字は若干控えめだが同じスケール感 */
.achievements-card-pending .achievements-num em {
  font-size: clamp(2.2rem, 4.5vw, 3.4rem);
  color: var(--muted);
  background: none;
  -webkit-text-fill-color: var(--muted);
}

/* ③ Hero CTA の主従関係 ------------------------------------------------ */
.hero-actions {
  gap: 18px;
  align-items: center;
}

.hero-cta-primary {
  font-size: 1.05rem;
  padding: 0 28px;
  min-height: 52px;
  font-weight: 800;
  letter-spacing: 0.02em;
}

.hero-cta-secondary {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  padding: 8px 4px;
  color: rgba(255, 255, 255, 0.82);
  font-size: 0.92rem;
  font-weight: 700;
  text-decoration: underline;
  text-underline-offset: 5px;
  text-decoration-thickness: 1px;
  text-decoration-color: rgba(255, 255, 255, 0.4);
  transition: color 0.25s ease, text-decoration-color 0.25s ease, gap 0.25s ease;
}

.hero-cta-secondary::after {
  content: "→";
  font-size: 1em;
  transition: transform 0.25s ease;
}

.hero-cta-secondary:hover,
.hero-cta-secondary:focus-visible {
  color: var(--gold);
  text-decoration-color: var(--gold);
  gap: 8px;
}

.hero-cta-secondary:hover::after,
.hero-cta-secondary:focus-visible::after {
  transform: translateX(3px);
}

@media (max-width: 620px) {
  .hero-actions {
    flex-direction: column;
    align-items: stretch;
    gap: 14px;
  }
  .hero-cta-primary {
    width: 100%;
    padding: 0 22px;
  }
  .hero-cta-secondary {
    align-self: center;
    padding: 10px 14px;
  }
}

/* ======================================================================
   Round 58 — コンテンツ表現改善 (Audit ④⑥)
   ----------------------------------------------------------------------
   ④ 過去ギャラリーを「ヒーロー + 下段サムネ列」のマガジンレイアウトに
   ⑥ カードに 3 層階層を導入 (Hero / Info / Status の視覚的差別化)
   ====================================================================== */

/* ④ Past-gallery magazine layout ------------------------------------- */
/* 3 列グリッドに変更し、最初の写真を「ヒーロー」として全幅 + 16:9 で
   配置。残り (3-5 枚) は下段の正方形サムネ列に。
   - 静的 fallback: 4 枚 → ヒーロー + 3 サムネ
   - CMS: 6 枚 → ヒーロー + 3 (row2) + 2 (row3, 中央右寄せ) または
                  ヒーロー + 5 (row2-3 を auto-fit)
   - SP: 2 列に折り返し、ヒーローは全幅維持 */
.past-grid {
  grid-template-columns: repeat(3, minmax(0, 1fr));
}

.past-tile {
  aspect-ratio: 4 / 3;
}

.past-grid > .past-tile:first-child {
  grid-column: 1 / -1;
  aspect-ratio: 16 / 9;
}

@media (max-width: 620px) {
  .past-grid {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
  .past-grid > .past-tile:first-child {
    grid-column: 1 / -1;
    aspect-ratio: 16 / 10;
  }
}

/* ヒーロータイル: figcaption を少し大きく、より目立たせる */
.past-grid > .past-tile:first-child figcaption {
  font-size: 1.06rem;
  font-weight: 800;
  letter-spacing: 0.01em;
}

/* ⑥ Card 3-tier hierarchy --------------------------------------------- */
/* Tier 1 (Hero): .ticket-card.accent, .button.primary は既に金/teal の
   グラデで明確に区別済み。.accent に subtle scale を追加して "最も大切な
   選択肢" であることを強化。 */
.ticket-card.accent:hover {
  transform: translateY(-5px) scale(1.015);
}

/* Tier 3 (Status/placeholder): dashed border + 縮小 font で
   「仮表示」感を一段強める */
.achievements-card-pending {
  border-style: dashed;
  border-color: rgba(98, 112, 122, 0.45);
}

.achievements-card-pending p {
  font-size: 0.82rem;
}

.achievements-card-pending .achievements-pending-note {
  font-style: italic;
}

@media (prefers-color-scheme: dark) {
  .achievements-card-pending {
    border-color: rgba(255, 255, 255, 0.22);
  }
}

/* Round 62 の `.achievements-card-pending { display: none }` は
   Round 77 で撤去。`--%` カードを再び表示するように戻した(ユーザー判断)。
   上記の点線+itali化スタイルだけ残し、視覚的に "準備中" を示す。 */

/* CMS empty state (script.js が "公開中のお知らせはありません" を表示
   する p.cms-status も Tier 3 として統一) */
.cms-status {
  border-style: dashed !important;
  font-style: italic;
}

/* ======================================================================
   Round 59 — レイアウト改善 (Audit ⑤⑦)
   ----------------------------------------------------------------------
   ⑤ セクション縦リズムにメリハリ (重要 CTA セクション +40% / 情報 -20%)
   ⑦ モバイル下部 CTA を 2 ボタンバーに (チケット + アクセス、現在ページは自動非表示)
   ====================================================================== */

/* ⑤ Section padding variants ----------------------------------------- */
/* 既存の .section { padding: clamp(58px, 9vw, 104px) 0 } をベースに、
   重要度別の修飾子を導入。HTML 側で <section class="section signup is-prominent">
   のように付与する。 */

.section.is-prominent {
  padding-top: clamp(80px, 13vw, 160px);
  padding-bottom: clamp(80px, 13vw, 160px);
}

.section.is-quiet {
  padding-top: clamp(36px, 5vw, 64px);
  padding-bottom: clamp(36px, 5vw, 64px);
}

/* SP では極端な変化を避けて読みやすさ優先 (差は ~30% に圧縮) */
@media (max-width: 620px) {
  .section.is-prominent {
    padding-top: clamp(60px, 11vw, 110px);
    padding-bottom: clamp(60px, 11vw, 110px);
  }
  .section.is-quiet {
    padding-top: clamp(28px, 5vw, 44px);
    padding-bottom: clamp(28px, 5vw, 44px);
  }
}

/* ⑦ Mobile sticky bar (2-button) ------------------------------------- */
/* 旧 .mobile-sticky-cta は HTML から全削除済 (14 ファイル + generate.ps1)
   ですが、念のため CSS で hide オーバーライド。 */
.mobile-sticky-cta { display: none !important; }

.mobile-sticky-bar {
  display: none;
  position: fixed;
  z-index: 18;
  left: 12px;
  right: 12px;
  bottom: calc(12px + env(safe-area-inset-bottom));
  gap: 8px;
}

.mobile-sticky-btn {
  flex: 1;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 6px;
  padding: 12px 14px;
  min-height: 48px;
  border-radius: 999px;
  font-size: 0.92rem;
  font-weight: 800;
  white-space: nowrap;
  text-decoration: none;
  transition: transform 0.2s ease, box-shadow 0.2s ease;
}

.mobile-sticky-btn svg { flex-shrink: 0; display: block; }

.mobile-sticky-btn-primary {
  flex: 2;
  color: var(--night);
  background: linear-gradient(135deg, #ffe8a6, var(--gold));
  box-shadow:
    0 8px 22px rgba(11, 19, 31, 0.30),
    0 0 0 0 rgba(215, 169, 71, 0.4);
  animation: mobile-cta-pulse 3.8s ease-in-out infinite;
}

.mobile-sticky-btn-primary:hover,
.mobile-sticky-btn-primary:focus-visible {
  transform: translateY(-2px);
  box-shadow:
    0 14px 32px rgba(11, 19, 31, 0.42),
    0 0 0 1px rgba(255, 232, 166, 0.6);
}

.mobile-sticky-btn-secondary {
  color: var(--ink);
  background: rgba(255, 253, 247, 0.96);
  border: 1px solid var(--line);
  backdrop-filter: blur(8px);
  box-shadow: 0 6px 18px rgba(11, 19, 31, 0.18);
}

.mobile-sticky-btn-secondary:hover,
.mobile-sticky-btn-secondary:focus-visible {
  transform: translateY(-2px);
  background: #fff;
  border-color: rgba(215, 169, 71, 0.4);
}

@media (max-width: 920px) {
  .mobile-sticky-bar { display: flex; }
  /* sticky-bar(実高 ~72px)+ ノッチ系端末の safe-area を二重に確保し、
     フッター下端がバーに隠れないように */
  body { padding-bottom: calc(84px + env(safe-area-inset-bottom)); }
}

/* Hide the button that targets the current page (avoid self-link) */
body.page-ticket .mobile-sticky-btn[data-page-target="ticket"],
body.page-access .mobile-sticky-btn[data-page-target="access"] {
  display: none;
}
/* When one button is hidden, the remaining one fills the bar */
body.page-ticket .mobile-sticky-btn-secondary,
body.page-access .mobile-sticky-btn-primary { flex: 1; }

@media (prefers-reduced-motion: reduce) {
  .mobile-sticky-btn-primary { animation: none; }
}

@media (prefers-color-scheme: dark) {
  .mobile-sticky-btn-secondary {
    background: rgba(26, 34, 54, 0.94);
    color: var(--ink);
    border-color: rgba(255, 255, 255, 0.14);
  }
}

@media (forced-colors: active) {
  .mobile-sticky-btn-primary,
  .mobile-sticky-btn-secondary {
    background: ButtonFace;
    color: ButtonText;
    border: 1px solid ButtonText;
  }
}

/* ======================================================================
   Round 63 — ペルソナルータ (Audit Vol.2 / 提案⑦)
   ----------------------------------------------------------------------
   参加方法を「観客 / 個人支援 / 企業連携」の3つに整理し、各カードに
   単一CTAだけを提示。CTA過多による選択疲れを防ぎ、ユーザが「自分の役」
   を選びやすくする。GA4 で persona:visitor|donor|company を計測。
   ====================================================================== */
.section.persona-router {
  padding-top: clamp(56px, 8vw, 96px);
  padding-bottom: clamp(56px, 8vw, 96px);
}

.persona-router-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 20px;
  width: min(1080px, calc(100% - 40px));
  margin-inline: auto;
}

@media (max-width: 920px) {
  .persona-router-grid {
    grid-template-columns: 1fr;
    gap: 14px;
  }
}

.persona-card {
  display: flex;
  flex-direction: column;
  gap: 14px;
  padding: 28px 26px 26px;
  background: #fff;
  border: 1px solid var(--line);
  border-radius: 18px;
  color: var(--ink);
  text-decoration: none;
  position: relative;
  overflow: hidden;
  transition: transform 0.3s ease, box-shadow 0.3s ease, border-color 0.3s ease;
}

.persona-card::before {
  content: "";
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  height: 4px;
  background: linear-gradient(90deg, var(--gold), var(--red));
  opacity: 0;
  transition: opacity 0.3s ease;
}

.persona-card:hover,
.persona-card:focus-visible {
  transform: translateY(-6px);
  box-shadow: 0 24px 48px rgba(28, 35, 42, 0.10);
  border-color: rgba(215, 169, 71, 0.45);
}

.persona-card:hover::before,
.persona-card:focus-visible::before {
  opacity: 1;
}

.persona-card-icon {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 56px;
  height: 56px;
  border-radius: 14px;
  background: linear-gradient(135deg, rgba(215, 169, 71, 0.18), rgba(184, 63, 55, 0.10));
  color: var(--gold-text);
}

.persona-card-visitor .persona-card-icon {
  background: linear-gradient(135deg, rgba(215, 169, 71, 0.22), rgba(215, 169, 71, 0.08));
  color: var(--gold-text);
}

.persona-card-donor .persona-card-icon {
  background: linear-gradient(135deg, rgba(184, 63, 55, 0.18), rgba(184, 63, 55, 0.06));
  color: var(--red);
}

.persona-card-company .persona-card-icon {
  background: linear-gradient(135deg, rgba(15, 104, 104, 0.18), rgba(15, 104, 104, 0.06));
  color: var(--teal);
}

.persona-card h3 {
  margin: 0;
  font-family: "Zen Old Mincho", serif;
  font-size: 1.25rem;
  color: var(--ink);
  line-height: 1.35;
}

.persona-card p {
  margin: 0;
  flex: 1;
  color: var(--muted);
  font-size: 0.92rem;
  line-height: 1.7;
}

.persona-card-cta {
  display: inline-flex;
  align-items: center;
  margin-top: 4px;
  color: var(--gold-text);
  font-size: 0.92rem;
  font-weight: 800;
  letter-spacing: 0.02em;
  transition: gap 0.25s ease, transform 0.25s ease;
}

.persona-card-donor .persona-card-cta { color: var(--red); }
.persona-card-company .persona-card-cta { color: var(--teal); }

.persona-card:hover .persona-card-cta,
.persona-card:focus-visible .persona-card-cta {
  transform: translateX(4px);
}

@media (prefers-color-scheme: dark) {
  .persona-card {
    background: rgba(26, 34, 54, 0.65);
    border-color: rgba(255, 255, 255, 0.10);
  }
  .persona-card:hover,
  .persona-card:focus-visible {
    border-color: rgba(215, 169, 71, 0.45);
    box-shadow: 0 24px 48px rgba(0, 0, 0, 0.45);
  }
  .persona-card-visitor .persona-card-icon { color: var(--gold); }
}

@media (forced-colors: active) {
  .persona-card {
    border: 1px solid ButtonText;
  }
  .persona-card-icon {
    border: 1px solid ButtonText;
    background: ButtonFace;
    color: ButtonText;
  }
}

@media (prefers-reduced-motion: reduce) {
  .persona-card,
  .persona-card::before,
  .persona-card-cta {
    transition: none;
  }
  .persona-card:hover,
  .persona-card:focus-visible {
    transform: none;
  }
  .persona-card:hover .persona-card-cta,
  .persona-card:focus-visible .persona-card-cta {
    transform: none;
  }
}

/* ======================================================================
   Round 63 — 年表記の視覚的整理 (Audit Vol.2 / 提案⑤)
   ----------------------------------------------------------------------
   過去開催の写真・声・スポンサーが「いつのもの」か一目で分かるよう、
   セクション見出しに金色の年バッジを付与する。2024 / 2025 / 2026 が
   混在しているため、視認性を上げて混乱を防ぐ。

   使い方:
     <h2>
       <span class="year-badge year-badge-past">2024</span>
       第6回 開催の歩み
     </h2>
   ====================================================================== */
.year-badge {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  margin-right: 12px;
  padding: 4px 12px;
  border-radius: 6px;
  font-family: "Noto Sans JP", system-ui, sans-serif;
  font-size: 0.72rem;
  font-weight: 900;
  letter-spacing: 0.08em;
  line-height: 1.4;
  vertical-align: middle;
  white-space: nowrap;
}

.year-badge-past {
  background: linear-gradient(135deg, var(--gold), #b88e2c);
  color: #fff;
  box-shadow: 0 2px 8px rgba(215, 169, 71, 0.32);
}

.year-badge-next {
  background: linear-gradient(135deg, var(--red), #d4604a);
  color: #fff;
  box-shadow: 0 2px 8px rgba(184, 63, 55, 0.32);
}

@media (max-width: 620px) {
  .year-badge {
    font-size: 0.66rem;
    padding: 3px 10px;
    margin-right: 8px;
  }
}

@media (prefers-color-scheme: dark) {
  .year-badge-past {
    background: linear-gradient(135deg, var(--gold), #c79636);
    color: var(--night);
  }
}

@media (forced-colors: active) {
  .year-badge {
    border: 1px solid ButtonText;
    background: ButtonFace;
    color: ButtonText;
  }
}

/* Round 65: ticket-now-options セクションは削除(ユーザー判断で不要)。
   Round 62 で追加した「販売開始までに、できること」ブロックは、
   通常販売・ふるさと納税ともに準備中の現状では情報重複となるため撤去。
   ふるさと納税は #tickets セクションのカード(.ticket-card.accent)と
   ticket.html 本文の「チケット購入方法」記載で十分カバーされている。 */

/* ======================================================================
   Round 88 — donation.html 第8回対応（チラシ画像 + カード内CTA）
   ====================================================================== */
.donation-flyer {
  margin: 24px auto 32px;
  max-width: 400px;
  text-align: center;
}
.donation-flyer-link {
  display: block;
  border-radius: 12px;
  overflow: hidden;
  box-shadow: 0 14px 38px rgba(28, 35, 42, 0.14);
  transition: transform 0.3s ease, box-shadow 0.3s ease;
}
.donation-flyer-link:hover,
.donation-flyer-link:focus-visible {
  transform: translateY(-4px);
  box-shadow: 0 22px 50px rgba(28, 35, 42, 0.20);
}
.donation-flyer img {
  display: block;
  width: 100%;
  height: auto;
}
.donation-flyer-button {
  display: inline-flex;
  margin-top: 12px;
  min-height: 32px;
  font-size: 0.78rem;
  padding: 5px 14px;
  gap: 5px;
}
.donation-flyer-button svg {
  width: 13px;
  height: 13px;
}

/* 寄付は1カードのみ。2カラムグリッドの左半分にならないよう、中央に適度な幅で配置 */
.donation-section#01 .plan-grid {
  grid-template-columns: 1fr;
  max-width: 480px;
  margin-inline: auto;
}

/* PDF ボタンの統一スタイル（ビラ・寄付・協賛とも同じ見た目で常時はっきり表示）。
   薄い secondary だとホバーしないと見えにくいため、塗りと枠で常時視認できるように。 */
.button.donation-pdf-button,
.button.plan-action-pdf {
  background: var(--cream);
  border: 1.5px solid var(--gold);
  color: var(--gold-text);
  font-weight: 800;
}
.button.donation-pdf-button:hover,
.button.donation-pdf-button:focus-visible,
.button.plan-action-pdf:hover,
.button.plan-action-pdf:focus-visible {
  background: var(--gold);
  border-color: var(--gold);
  color: var(--night);
}

/* 協賛カード内の個別アクション（PDF + 申込フォーム） */
.plan-actions {
  display: flex;
  flex-direction: column;
  gap: 8px;
  margin-top: 16px;
}
.plan-actions .button {
  width: 100%;
  justify-content: center;
  font-size: 0.86rem;
  padding: 10px 14px;
  gap: 6px;
}
.plan-actions .button svg {
  flex-shrink: 0;
}

/* 金額の「〜」表示 */
.plan-price span {
  font-size: 0.9rem;
  font-weight: 600;
  color: var(--muted);
  margin-left: 1px;
}

@media (prefers-reduced-motion: reduce) {
  .donation-flyer-link {
    transition: none;
  }
  .donation-flyer-link:hover,
  .donation-flyer-link:focus-visible {
    transform: none;
  }
}

