/* ============================================================
   GMS 2026 LP — Design System (KV-driven)
   ============================================================ */

:root {
  /* Brand palette pulled directly from the KV */
  --c-teal:        #20c89e;   /* dominant KV background */
  --c-teal-dark:   #168d6e;
  --c-teal-deep:   #0f6e57;
  --c-yellow:      #f6d23d;
  --c-yellow-2:    #f0a124;
  --c-pink:        #f174a3;
  --c-orange:      #ff7a3c;
  --c-green:       #58e0a0;
  --c-purple:      #9086f1;
  --c-blue:        #1eb1ea;
  --c-link:        #1583bf;   /* readable link tone on cream */
  --c-ink:         #1a2244;   /* near-black with navy tint, mirrors KV outline */
  --c-ink-soft:    #2b3563;
  --c-paper:       #eef8f3;   /* mint-tinted neutral (fills/callouts) */
  --c-paper-2:     #f0faf5;   /* mint-tinted neutral (thumbs/placeholders) */
  --c-bg-white:    #f4fbf8;   /* block bg — mint mist (light) */
  --c-bg-grey:     #e3f3ec;   /* block bg — mint mist (deeper) */
  --c-line:        #1a2244;

  --shadow-stamp:  6px 6px 0 var(--c-ink);
  --shadow-stamp-sm: 4px 4px 0 var(--c-ink);

  --r-card: 22px;
  --r-pill: 999px;

  --container: 1180px;

  --font-display: "M PLUS 1p", system-ui, sans-serif;
  --font-latin:   "din-2014", "Barlow", system-ui, sans-serif;
  --font-latin-narrow: "din-2014-narrow", "din-2014", "Barlow Semi Condensed", system-ui, sans-serif;
  --font-body:    "Noto Sans JP", "Hiragino Kaku Gothic ProN", system-ui, sans-serif;
}

* { box-sizing: border-box; }
html { scroll-behavior: smooth; scrollbar-gutter: stable; }
body {
  margin: 0;
  font-family: var(--font-body);
  font-weight: 500;
  color: var(--c-ink);
  background: var(--c-bg-white);
  line-height: 1.7;
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
}
img { display: block; max-width: 100%; }
a { color: inherit; text-decoration: none; }
button { font: inherit; cursor: pointer; }

.container {
  width: 100%;
  max-width: var(--container);
  margin-inline: auto;
  padding-inline: clamp(20px, 4vw, 36px);
}

/* ============================================================
   Rainbow strip (used as header/footer border + section dividers)
   ============================================================ */
.rainbow-strip {
  height: 6px;
  background:
    linear-gradient(90deg,
      var(--c-pink)   0%,
      var(--c-orange) 20%,
      var(--c-yellow) 40%,
      var(--c-green)  60%,
      var(--c-blue)   80%,
      var(--c-purple) 100%);
}

/* ============================================================
   Header
   ============================================================ */
.site-header {
  position: fixed;
  inset: 0 0 auto 0;
  z-index: 60;
  transition: background-color .25s ease, box-shadow .25s ease;
  background: transparent;
}
.site-header.is-scrolled {
  background: rgba(255,255,255,.94);
  backdrop-filter: blur(8px);
  border-bottom: 2px solid var(--c-ink);
}
.site-header .strip { opacity: 0; transition: opacity .25s; }
.site-header.is-scrolled .strip { opacity: 1; }

.header-inner {
  display: flex;
  align-items: center;
  justify-content: flex-end;
  gap: 24px;
  padding: 14px 0;
}

/* Back-to-top floating button */
.to-top {
  position: fixed;
  right: clamp(16px, 3vw, 32px);
  bottom: clamp(16px, 3vw, 32px);
  z-index: 90;
  width: 54px;
  height: 54px;
  display: grid;
  place-items: center;
  background: var(--c-yellow);
  color: var(--c-ink);
  border: 2.5px solid var(--c-ink);
  border-radius: 50%;
  box-shadow: var(--shadow-stamp-sm);
  cursor: pointer;
  opacity: 0;
  visibility: hidden;
  transform: translateY(12px);
  transition: opacity .25s ease, transform .25s cubic-bezier(.34,1.56,.64,1), box-shadow .18s, visibility .25s;
}
.to-top.is-visible {
  opacity: 1;
  visibility: visible;
  transform: translateY(0);
}
/* Keep the back-to-top button behind the menu overlay when it's open */
.mobile-menu.open ~ .to-top {
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
}
.to-top:hover { transform: translate(-1px,-1px); box-shadow: 6px 6px 0 var(--c-ink); }
.to-top:active { transform: translate(2px,2px); box-shadow: 1px 1px 0 var(--c-ink); }
.to-top svg { width: 26px; height: 26px; display: block; }
.brand-mark {
  display: inline-flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 1px;
  color: var(--c-ink);
  text-decoration: none;
  transition: opacity .25s ease;
}
/* TOP label — shown only when scrolled */
.bm-top {
  font-family: var(--font-latin);
  font-weight: 700;
  font-size: 18px;
  letter-spacing: .12em;
  color: var(--c-ink);
  line-height: 1;
}
.site-header:not(.is-scrolled) .brand-mark {
  opacity: 0;
  pointer-events: none;
}

.nav {
  display: flex;
  align-items: center;
  gap: 17px;
}
.nav a {
  font-size: 14px;
  font-weight: 700;
  color: var(--c-ink);
  position: relative;
  padding: 4px 0;
}
.nav a::after {
  content: "";
  position: absolute;
  left: 0; right: 0; bottom: -2px;
  height: 3px;
  background: var(--c-yellow);
  transform: scaleX(0);
  transform-origin: left center;
  transition: transform .2s;
  border-radius: 2px;
}
.nav a.btn-buy::after { content: none; }
.nav a:hover::after { transform: scaleX(1); }
.site-header:not(.is-scrolled) .nav a:not(.btn-buy) { color: #fff; }
.site-header:not(.is-scrolled) .nav a:not(.btn-buy)::after { background: var(--c-yellow); }

.menu-btn {
  display: none;
  background: transparent;
  border: 0;
  color: #fff;
  padding: 6px;
}
.site-header.is-scrolled .menu-btn { color: var(--c-ink); }

/* Button */
.btn {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  font-family: var(--font-display);
  font-weight: 900;
  font-size: 15px;
  padding: 12px 22px;
  border-radius: 14px;
  border: 2.5px solid var(--c-ink);
  background: var(--c-yellow);
  color: var(--c-ink);
  box-shadow: var(--shadow-stamp-sm);
  transition: transform .18s cubic-bezier(.34,1.56,.64,1), box-shadow .18s;
  white-space: nowrap;
  max-width: 100%;
  line-break: strict;
  overflow-wrap: anywhere;
}
.btn:hover { transform: translate(-1px,-1px); box-shadow: 6px 6px 0 var(--c-ink); }
.btn:active { transform: translate(2px,2px); box-shadow: 1px 1px 0 var(--c-ink); }
.btn.btn-lg {
  font-size: 18px;
  padding: 16px 32px;
  border-radius: 18px;
  box-shadow: var(--shadow-stamp);
}
.btn.btn-lg:hover { transform: translate(-1px,-1px); box-shadow: 8px 8px 0 var(--c-ink); }
.hero-ctas .btn.btn-lg {
  font-size: 24px;
  padding: 22px 48px;
  border-radius: 22px;
}
.btn.btn-pink { background: var(--c-pink); color: #fff; }
.btn.btn-ghost {
  background: #fff;
  color: var(--c-ink);
}
.btn.btn-buy {
  background: var(--c-yellow);
  color: var(--c-ink);
  border-color: var(--c-ink);
  padding-left: 28px;
  padding-right: 28px;
}
.btn.btn-buy:hover { box-shadow: 6px 6px 0 var(--c-ink); }
.btn.btn-buy .arrow { background: var(--c-ink); color: #fff; }
.btn .arrow {
  display: inline-flex;
  align-items: center; justify-content: center;
  width: 22px; height: 22px;
  background: var(--c-ink);
  color: #fff;
  border-radius: 50%;
  font-size: 12px;
}

/* ============================================================
   Hero
   ============================================================ */
.hero {
  position: relative;
  background: var(--c-teal);
  color: #fff;
  overflow: hidden;
  isolation: isolate;
  padding-top: clamp(84px, 11vh, 116px);
  padding-bottom: clamp(56px, 9vh, 104px);
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: clamp(24px, 4vw, 56px);
}
/* ---- Hero foot: logo + date + CTA on the page background ---- */
.hero-foot {
  position: relative;
  padding: clamp(28px, 4vw, 56px) 0 clamp(36px, 6vh, 72px);
  background: transparent;
}
.hero-foot .hero-stack--foot {
  margin-top: 0;
  color: var(--c-ink);
}
.hero-stack--foot .hero-logo-center { margin-top: 0; }
/* date colours flipped to dark ink so they read on the light page bg */
.hero-foot .hero-date .hd-main,
.hero-foot .hero-date .hd-year,
.hero-foot .hero-date .hd-day,
.hero-foot .hero-date .hd-day .hd-dot,
.hero-foot .hero-date .hd-venue {
  color: var(--c-ink);
  text-shadow: none;
}
.hero-foot .hero-date .hd-place,
.hero-foot .hero-date .hd-time {
  color: rgba(26, 34, 68, .8);
}
.hero::before {
  /* low-contrast diamond/triangle texture, matches KV background */
  content: "";
  position: absolute; inset: 0;
  background:
    linear-gradient(135deg, rgba(255,255,255,.05) 25%, transparent 25%) 0 0/40px 40px,
    linear-gradient(225deg, rgba(0,0,0,.05) 25%, transparent 25%) 0 0/40px 40px;
  z-index: -1;
  pointer-events: none;
}
/* Gradient fade at the bottom: the green hero melts smoothly into
   the cream (--c-paper) of the following section instead of a hard cut. */
.hero::after {
  content: "";
  position: absolute;
  left: 0; right: 0; bottom: 0;
  height: clamp(48px, 8vh, 96px);
  background: linear-gradient(
    to bottom,
    rgba(255, 255, 255, 0) 0%,
    rgba(255, 255, 255, .55) 65%,
    var(--c-bg-white) 100%);
  z-index: 0;
  pointer-events: none;
}
.hero-grid {
  display: grid;
  grid-template-columns: 1.05fr 1fr;
  align-items: center;
  gap: clamp(24px, 4vw, 60px);
}
.hero-copy { position: relative; z-index: 2; }

/* ---- Hero stack: logo + catchphrase as paired hero ---- */
.hero-stack {
  position: relative;
  z-index: 2;
  margin-top: clamp(-72px, -6vw, -28px); /* close the gap & slightly overlap the KV */
  display: grid;
  grid-template-columns: minmax(0, 1fr); /* keep track at container width so items center on the viewport */
  gap: clamp(14px, 1.6vw, 22px);
  justify-items: center;
  text-align: center;
  width: 100%;
}
.hero-stack .hero-tag { justify-self: center; }
.hero-stack .hero-sub {
  max-width: min(62ch, 100%);
  margin: 0;
  text-align: center;
  font-size: clamp(14px, 1.2vw, 16px);
  overflow-wrap: anywhere;
  line-break: strict;
}
.hero-stack .hero-sub strong {
  background: linear-gradient(transparent 60%, rgba(246,210,61,.55) 60%);
  color: #fff;
  padding: 0 4px;
  font-weight: 800;
}
.hero-stack .hero-ctas { justify-content: center; margin-top: 4px; }
.hero-stack .hero-meta { margin: 0; max-width: 640px; width: 100%; }

/* ---- Hero KV at top, with the logo overlapping its lower edge ---- */
.hero-showcase { display: contents; }

/* ---- Date + venue: floating on the hero bg, no box ---- */
.hero-date {
  position: relative;
  z-index: 3;
  width: 100%;
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
  column-gap: clamp(14px, 2.4vw, 36px);
  align-items: center;
  color: #fff;
  padding: clamp(4px, 1vw, 10px) 0;
}
.hero-date .hd-when,
.hero-date .hd-where {
  min-width: 0;
  display: flex;
  flex-direction: row;
  align-items: flex-end;
  flex-wrap: nowrap;
  white-space: nowrap;
  gap: clamp(8px, 1vw, 14px);
}
.hero-date .hd-when { flex-direction: column; align-items: flex-end; justify-content: flex-end; gap: clamp(4px, .6vw, 8px); }
.hero-date .hd-where { justify-content: flex-start; }
/* dashed divider between date and venue */
.hero-date .hd-where {
  position: relative;
  padding-left: clamp(18px, 3vw, 44px);
}
.hero-date .hd-where::before {
  content: none;
}
@media (max-width: 560px) {
  /* single centred column (the element is a grid, so flex-direction won't stack it) */
  .hero-date {
    grid-template-columns: 1fr;
    row-gap: 0;
    justify-items: center;
    text-align: center;
  }
  .hero-date .hd-when,
  .hero-date .hd-where {
    align-items: center;
    justify-content: center;
    flex-wrap: wrap;
    white-space: normal;
    width: 100%;
  }
  .hero-date .hd-where {
    padding-left: 0;
    padding-top: clamp(8px, 2.4vw, 12px);
    margin-top: clamp(8px, 2.4vw, 12px);
  }
  /* venue is a left-aligned flex column by default — centre it when stacked
     (extra ancestor raises specificity above the base .hd-venue rule below) */
  .hero-date .hd-where .hd-venue {
    align-items: center;
    text-align: center;
  }
  .hero-date .hd-where::before {
    left: 8%; right: 8%; top: 0; bottom: auto;
    width: auto; height: 3px;
    background: repeating-linear-gradient(90deg, rgba(255,255,255,.85) 0 6px, transparent 6px 12px);
  }
}
/* ---- vertical stack variant ---- */
.hero-date--stack {
  flex-direction: column;
  align-items: center;
  text-align: center;
}
.hero-date--stack .hd-where {
  padding-left: 0;
  padding-top: clamp(8px, 1.4vw, 14px);
}
.hero-date--stack .hd-where::before {
  left: 10%; right: 10%; top: 0; bottom: auto;
  width: auto; height: 3px;
  background: repeating-linear-gradient(90deg, rgba(255,255,255,.85) 0 6px, transparent 6px 12px);
}
.hero-date--stack .hd-main { justify-content: center; }
.hero-date .hd-eyebrow {
  font-family: var(--font-display);
  font-weight: 900;
  font-size: clamp(10px, 1vw, 13px);
  letter-spacing: .2em;
  color: #fff;
  background: var(--c-blue);
  border: 2px solid var(--c-ink);
  border-radius: var(--r-pill);
  padding: 3px 14px;
}
.hero-date .hd-eyebrow.pink { background: var(--c-pink); }
.hero-date .hd-main {
  display: flex;
  align-items: baseline;
  justify-content: center;
  flex-wrap: nowrap;
  gap: clamp(6px, 1.2vw, 14px);
  font-family: var(--font-latin-narrow);
  font-weight: 800;
  line-height: .9;
  color: #fff;
}
.hero-date .hd-year {
  font-size: clamp(22px, 3vw, 40px);
  letter-spacing: .02em;
  align-self: baseline;
  text-shadow: 2px 2px 0 var(--c-ink);
}
.hero-date .hd-day {
  font-size: clamp(52px, 6.6vw, 88px);
  color: #fff;
  text-shadow: 2px 2px 0 var(--c-ink);
}
.hero-date .hd-day .hd-dot { color: #fff; }
.hero-date .hd-dow {
  font-size: clamp(18px, 2.1vw, 30px);
  color: #fff;
  background: rgb(255, 38, 15);
  border-radius: 12px;
  padding: 3px 11px;
  align-self: baseline;
}
.hero-date .hd-time {
  font-family: var(--font-latin-narrow);
  font-weight: 800;
  font-size: clamp(20px, 2.3vw, 32px);
  line-height: 1;
  color: #fff;
  letter-spacing: .02em;
}
.hero-date .hd-venue {
  font-family: var(--font-display);
  font-weight: 900;
  font-size: clamp(20px, 2.6vw, 32px);
  line-height: 1.12;
  text-align: left;
  color: #fff;
  text-shadow: 2px 2px 0 var(--c-ink);
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: .02em;
}
.hero-date .hd-venue-line { display: block; }
.hero-date .hd-place {
  font-family: var(--font-display);
  font-weight: 700;
  font-size: clamp(12px, 1.2vw, 15px);
  color: rgba(255,255,255,.92);
  letter-spacing: .04em;
}

/* ---- Hero logo overlay — top-left, overlaps fixed header ---- */
.hero-logo-main {
  position: absolute;
  top: clamp(6px, 1vh, 16px);
  left: clamp(40px, 11vw, 220px);
  width: clamp(200px, 22vw, 360px);
  z-index: 50;
  display: block;
  text-decoration: none;
  pointer-events: auto;
}
.hero-logo-main img {
  width: 100%;
  height: auto;
  display: block;
  filter: drop-shadow(0 2px 12px rgba(0,0,0,.18));
}

/* ---- Hero logo — centered between the catchphrase and the date ---- */
.hero-logo-center {
  display: block;
  width: clamp(320px, 64vw, 620px);
  margin: clamp(20px, 3.2vw, 44px) auto clamp(-14px, -1vw, -4px);
  text-decoration: none;
}
.hero-logo-center img {
  width: 100%;
  height: auto;
  display: block;
  filter: drop-shadow(0 2px 12px rgba(0,0,0,.18));
}

/* ---- Hero KV showcase (the relaid-out key visual) ---- */
.hero-kv {
  position: relative;
  width: 100%;
  max-width: var(--container);
  padding-inline: clamp(20px, 4vw, 36px);
  margin-inline: auto;
  z-index: 2;
}
.hero-kv img {
  width: 100%;
  height: auto;
  display: block;
}
.hero-kv--legacy {
  max-width: 1020px;
  margin: clamp(40px, 6vw, 70px) auto clamp(6px, 1.4vw, 18px); /* top room for the overhanging logo */
  display: flex;
  justify-content: center;
}
.hero-kv .kv-frame {
  width: 100%;
  transform: rotate(-1deg);
  box-shadow: 12px 12px 0 var(--c-ink);
}
.hero-kv .kv-frame:hover { transform: rotate(0deg) scale(1.012); }
.hero-kv .kv-frame img { border-radius: 14px; }

/* date stamp badge over the KV */
.hero-kv .kv-badge {
  top: -26px;
  right: -22px;
  left: auto;
  width: 124px; height: 124px;
  font-size: 15px;
  line-height: 1;
  transform: rotate(10deg);
  display: grid;
  place-items: center;
  gap: 2px;
  align-content: center;
}
.hero-kv .kv-badge { animation: wobble-r 6s ease-in-out infinite; }
@keyframes wobble-r {
  0%,100% { transform: rotate(10deg) translateY(0); }
  50%     { transform: rotate(6deg) translateY(-6px); }
}
.hero-kv .kv-badge small {
  display: block;
  font-size: .60em;
  letter-spacing: .16em;
  margin-top: 2px;
  opacity: .85;
}
.hero-kv .kv-badge .kv-badge-yr {
  font-size: .72em;
  letter-spacing: .08em;
}
.hero-kv .kv-badge .kv-badge-day {
  font-size: 1.7em;
  line-height: .92;
  font-family: var(--font-latin-narrow);
  font-weight: 800;
}

/* confetti-square pins on the frame corners */
.kv-tape {
  position: absolute;
  width: 26px; height: 26px;
  border: 2.5px solid var(--c-ink);
  z-index: 3;
}
.kv-tape-1 { top: -12px; left: 8%; background: var(--c-pink); transform: rotate(-14deg); }
.kv-tape-2 { bottom: -12px; right: 14%; background: var(--c-blue); transform: rotate(12deg); }

/* Logo overlapping the top-left corner of the key visual */
.hero-logo {
  position: absolute;
  top: 0;
  left: 0;
  transform: translate(-4%, -30%) rotate(-3deg);
  width: min(460px, 54%);
  margin: 0;
  z-index: 4;
  filter: drop-shadow(5px 6px 0 rgba(26,34,68,.32));
}
.hero-logo img { width: 100%; height: auto; display: block; }

/* The catchphrase — punchy two-liner, no strikethrough */
.hero-hook {
  position: relative;
  font-family: var(--font-display);
  font-weight: 900;
  color: #fff;
  margin: 0;
  line-height: 1.12;
  letter-spacing: .005em;
  font-size: clamp(26px, 4.2vw, 56px);
  text-shadow:
    3px 3px 0 var(--c-ink),
    6px 6px 0 rgba(26,34,68,.18);
  display: grid;
  gap: clamp(2px, .4vw, 8px);
  z-index: 1;
  max-width: 100%;
  padding: 0 .15em;
  overflow-wrap: anywhere;
  line-break: strict;
}
.hero-hook .hook-line { min-width: 0; }
.hero-hook .hook-line {
  display: block;
  white-space: normal;        /* allow wrapping only at segment boundaries */
}
.hero-hook .hook-seg {
  display: inline-block;
  white-space: nowrap;        /* each clause stays intact; break can only land at the 、 */
}
/* when wrapped to two lines, each clause is its own centred, full-width line */
.hero-hook.is-wrapped {
  text-align: center;
  letter-spacing: 0;
}
.hero-hook.is-wrapped .hook-seg {
  display: block;
}
.hero-hook .hook-em {
  display: inline-block;
  position: relative;
  padding: 0 .06em;
}
.hero-hook .hook-em.yellow {
  color: var(--c-yellow);
}
.hero-hook .hook-em.orange {
  color: var(--c-orange);
}
.hero-hook .hook-em.white {
  color: #fff;
}
.hero-hook .hook-em.pink {
  color: var(--c-pink);
  font-size: 1.45em;
  text-shadow:
    4px 4px 0 var(--c-ink),
    8px 8px 0 rgba(26,34,68,.18);
}
.hero-hook .hook-em.pink::after {
  content: none;
}
.hero-hook .hook-bang {
  display: inline-block;
  color: #fff;
  font-size: 1.15em;
  margin-left: .04em;
  vertical-align: baseline;
  transform: translateY(.09em);
}

.br-pc { display: inline; }

.hero-tag {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  font-family: var(--font-display);
  font-weight: 900;
  font-size: 14px;
  background: #fff;
  color: var(--c-ink);
  padding: 8px 14px;
  border-radius: var(--r-pill);
  border: 2px solid var(--c-ink);
  box-shadow: var(--shadow-stamp-sm);
}
.hero-tag .pulse {
  width: 10px; height: 10px;
  background: var(--c-pink);
  border-radius: 50%;
  box-shadow: 0 0 0 0 rgba(241,116,163,.7);
  animation: pulse 1.6s infinite;
}
@keyframes pulse {
  0% { box-shadow: 0 0 0 0 rgba(241,116,163,.7); }
  70% { box-shadow: 0 0 0 12px rgba(241,116,163,0); }
  100% { box-shadow: 0 0 0 0 rgba(241,116,163,0); }
}
.hero-title {
  font-family: var(--font-display);
  font-weight: 900;
  font-size: clamp(28px, 4.5vw, 52px);
  line-height: 1.25;
  margin: 22px 0 14px;
  text-shadow: 3px 3px 0 var(--c-ink);
  letter-spacing: .01em;
}
.hero-sub {
  font-size: clamp(15px, 1.4vw, 18px);
  line-height: 1.8;
  margin-bottom: 30px;
  max-width: 36ch;
  font-weight: 600;
  opacity: .96;
}
.hero-meta {
  display: grid;
  gap: 12px;
  grid-template-columns: repeat(2, minmax(0,1fr));
  max-width: 520px;
  margin-bottom: 28px;
}
.meta-card {
  background: #fff;
  border: 2.5px solid var(--c-ink);
  border-radius: 16px;
  padding: 14px 16px;
  color: var(--c-ink);
  box-shadow: var(--shadow-stamp-sm);
  display: flex;
  align-items: center;
  gap: 12px;
}
.meta-card .meta-icon {
  width: 38px; height: 38px;
  border-radius: 10px;
  display: grid; place-items: center;
  border: 2px solid var(--c-ink);
  background: var(--c-yellow);
  flex-shrink: 0;
  font-family: var(--font-display);
  font-weight: 900;
  font-size: 12px;
}
.meta-card.pink .meta-icon { background: var(--c-pink); color: #fff; }
.meta-card .meta-label {
  font-size: 11px;
  font-weight: 700;
  color: var(--c-ink-soft);
}
.meta-card .meta-value {
  font-family: var(--font-display);
  font-weight: 900;
  font-size: 17px;
  line-height: 1.2;
  min-width: 0;
  line-break: strict;
  overflow-wrap: anywhere;
}
.meta-card > div:last-child { min-width: 0; flex: 1; }
.meta-card .meta-value small {
  font-family: var(--font-body);
  font-weight: 600;
  font-size: 11px;
  display: block;
  color: var(--c-ink-soft);
  margin-top: 2px;
}

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

.hero-visual {
  position: relative;
  z-index: 1;
}
.kv-frame {
  position: relative;
  background: #fff;
  border: 3px solid var(--c-ink);
  border-radius: 24px;
  padding: 10px;
  box-shadow: 10px 10px 0 var(--c-ink);
  transform: rotate(1.5deg);
  transition: transform .4s ease;
}
.kv-frame:hover { transform: rotate(0deg) scale(1.02); }
.kv-frame img {
  border-radius: 16px;
  width: 100%;
  display: block;
}
.kv-frame .kv-badge {
  position: absolute;
  top: -22px;
  left: -22px;
  width: 110px; height: 110px;
  border-radius: 50%;
  background: var(--c-yellow);
  border: 3px solid var(--c-ink);
  display: grid;
  place-items: center;
  text-align: center;
  font-family: var(--font-display);
  font-weight: 900;
  font-size: 13px;
  line-height: 1.25;
  color: var(--c-ink);
  transform: rotate(-12deg);
  box-shadow: 4px 4px 0 var(--c-ink);
  animation: wobble 6s ease-in-out infinite;
}
@keyframes wobble {
  0%,100% { transform: rotate(-12deg) translateY(0); }
  50%     { transform: rotate(-8deg) translateY(-6px); }
}

/* Pixel-confetti decorations */
.confetti {
  position: absolute;
  pointer-events: none;
  inset: 0;
  z-index: 0;
}
.confetti span {
  position: absolute;
  width: 16px; height: 16px;
  border: 2px solid var(--c-ink);
  animation: float 7s ease-in-out infinite;
}
.confetti span.c1 { top: 8%;  left: 5%;  background: var(--c-yellow);  transform: rotate(15deg); }
.confetti span.c2 { top: 22%; left: 38%; background: var(--c-pink);    width:12px; height:12px; }
.confetti span.c3 { top: 70%; left: 8%;  background: var(--c-purple);  width:22px; height:22px; transform: rotate(-12deg); animation-delay: -2s;}
.confetti span.c4 { top: 84%; left: 45%; background: var(--c-orange);  width:14px; height:14px; animation-delay: -1s; }
.confetti span.c5 { top: 12%; right: 8%; background: var(--c-blue);    width:18px; height:18px; animation-delay: -3s; }
.confetti span.c6 { top: 60%; right: 4%; background: var(--c-green);   width:20px; height:20px; transform: rotate(20deg); animation-delay: -4s;}
.confetti span.c7 { top: 38%; left: 20%; background: var(--c-pink);    width:10px; height:10px; animation-delay: -2.5s;}
.confetti span.c8 { top: 78%; right: 32%;background: var(--c-yellow);  width:14px; height:14px; transform: rotate(-8deg); animation-delay: -5s;}
@keyframes float {
  0%,100% { translate: 0 0;     rotate: var(--r,0deg); }
  50%     { translate: 0 -18px; rotate: var(--r,8deg); }
}

/* Scroll cue */
.scroll-cue {
  position: absolute;
  bottom: 18px;
  left: 50%;
  transform: translateX(-50%);
  z-index: 1;
  font-family: var(--font-display);
  font-weight: 900;
  font-size: 12px;
  color: var(--c-ink);
  display: grid;
  place-items: center;
  gap: 6px;
  letter-spacing: .15em;
}
.scroll-cue .bar {
  width: 2px; height: 28px;
  background: var(--c-ink);
  animation: drop 1.6s ease-in-out infinite;
  border-radius: 2px;
}
@keyframes drop {
  0%   { transform: scaleY(0); transform-origin: top; }
  50%  { transform: scaleY(1); transform-origin: top; }
  51%  { transform: scaleY(1); transform-origin: bottom; }
  100% { transform: scaleY(0); transform-origin: bottom; }
}

/* ============================================================
   Section framing
   ============================================================ */
.section {
  position: relative;
  padding: clamp(32px, 4.5vw, 60px) 0;
  /* Block backgrounds alternate white / grey (see per-id rules below). */
  background: var(--c-bg-white);
}
/* Block background rhythm: green(hero) → white → grey → white → grey … */
.hero-foot            { background: var(--c-bg-white); }
#message              { background: var(--c-bg-grey); }
#timetable            { background: var(--c-bg-white); }
#workshop             { background: var(--c-bg-grey); }
#soudan               { background: var(--c-bg-white); }
#goods                { background: var(--c-bg-grey); }
#contents             { background: var(--c-bg-white); }
#tickets              { background: var(--c-bg-grey); }
#faq                  { background: var(--c-bg-white); }
#sponsors             { background: var(--c-bg-grey); }
/* Legacy hue variants now collapse to white. */
.section.cream,
.section.paper,
.section.mint { background: var(--c-bg-white); }

/* Dotted sections: the dot texture lives on a real, absolutely-positioned
   layer. To get a STEEP diagonal seam that DISSOLVES (rather than a hard
   clipped line), the layer holds several stacked dot "tiers", each clipped to
   a slightly different diagonal slant. Where all tiers overlap (the middle)
   the dots are fullest; toward the seam, tiers drop out one by one, so the
   dots thin out gradually along the slant. Built with clip-path only — which
   rasterises reliably — so the diagonal is guaranteed on every renderer.
   Tiers are injected by JS (see the dots-stack builder script). */
.section.dots > .dots-layer {
  display: none;
  position: absolute;
  inset: 0;
  z-index: 0;
  pointer-events: none;
}
.section.dots > .dots-layer .dots-tier {
  position: absolute;
  inset: 0;
  /* Warm taupe pulled toward the cream background tone (not the cool navy ink),
     at low per-tier alpha so the stacked dots read as a soft texture rather
     than strong dots. Tune blend via --dot-color. */
  --dot-color: rgba(32, 150, 120, .06);
  background-image:
    radial-gradient(var(--dot-color) 1.8px, transparent 1.8px);
  background-size: 22px 22px;
  background-position: 0 0;
  /* --slant is set per-tier by the builder; bigger = pulled further from edge */
  clip-path: polygon(
    0 var(--slant),
    100% 0,
    100% calc(100% - var(--slant)),
    0 100%);
}
/* Keep section content above the dot layer. */
.section > .container { position: relative; z-index: 1; }
.section-head {
  display: flex;
  align-items: stretch;
  gap: 18px;
  margin-bottom: clamp(28px, 4vw, 52px);
  flex-wrap: nowrap;
}
.section-num {
  align-self: stretch;
  width: 10px;
  /* font-size is 0 here, so an em-based min-height collapses to 0 and the bar
     vanishes when the title wraps to its own line — use an absolute floor */
  min-height: clamp(30px, 3.4vw, 44px);
  border-radius: 999px;
  background: var(--c-green);
  border: none;
  box-shadow: none;
  transform: none;
  flex-shrink: 0;
  font-size: 0;
  color: transparent;
}
/* All section markers use the same green bar */
.section-num.green,
.section-num.yellow,
.section-num.purple,
.section-num.pink,
.section-num.orange,
.section-num.blue { background: var(--c-green); color: transparent; }
.section-title {
  font-family: var(--font-display);
  font-weight: 900;
  font-size: clamp(26px, 3.4vw, 40px);
  line-height: 1.2;
  margin: 0;
  letter-spacing: .01em;
  flex: 1 1 auto;
  min-width: 0; /* let the title wrap its own text instead of pushing onto a new line */
  align-self: center;
}
.section-title small {
  display: block;
  font-family: var(--font-latin);
  font-weight: 400;
  font-size: 13px;
  letter-spacing: .12em;
  color: var(--c-ink-soft);
  margin-bottom: 6px;
}

/* ============================================================
   02 — Message
   ============================================================ */
.message-card {
  background: #fff;
  border: 3px solid var(--c-ink);
  border-radius: 28px;
  padding: clamp(28px, 4vw, 48px);
  box-shadow: 8px 8px 0 var(--c-ink);
  position: relative;
}
.message-card .quote-mark {
  position: absolute;
  top: -28px; left: 36px;
  font-family: var(--font-latin);
  font-size: 64px;
  color: var(--c-pink);
  -webkit-text-stroke: 3px var(--c-ink);
  text-shadow: 4px 4px 0 var(--c-ink);
  line-height: 1;
}
.message-card h3 {
  font-family: var(--font-display);
  font-weight: 900;
  font-size: clamp(20px, 2.4vw, 28px);
  margin: 0 0 18px;
  line-height: 1.5;
  line-break: strict;
  overflow-wrap: anywhere;
}
.message-card h3 mark {
  background: linear-gradient(transparent 65%, var(--c-yellow) 65%);
  color: inherit;
  padding: 0 2px;
}
.msg-lead mark {
  background: transparent;
  color: inherit;
  text-decoration: underline;
  text-decoration-color: var(--c-yellow);
  text-decoration-thickness: 5px;
  text-underline-offset: 3px;
  text-decoration-skip-ink: none;
}
.message-card p { margin: 0 0 14px; }
.msg-hashtag {
  margin: 18px 0 0 !important;
}
.hashtag-chip {
  display: inline-flex;
  align-items: stretch;
  border: 2.5px solid var(--c-ink);
  border-radius: 12px;
  overflow: hidden;
  box-shadow: var(--shadow-stamp-sm);
  transition: box-shadow .15s, transform .15s;
}
.hashtag-chip:hover {
  box-shadow: 6px 6px 0 var(--c-ink);
  transform: translate(-1px, -1px);
}
.hashtag-chip .ico {
  background: var(--c-ink);
  color: #fff;
  display: grid;
  place-items: center;
  padding: 0 12px;
}
.hashtag-chip .ico svg { width: 16px; height: 16px; }
.hashtag-chip .txt {
  font-family: var(--font-display);
  font-weight: 900;
  font-size: 15px;
  background: var(--c-yellow);
  color: var(--c-ink);
  padding: 9px 16px;
  display: flex;
  align-items: center;
  letter-spacing: .01em;
}
.news-card { margin-top: clamp(24px, 3vw, 40px); padding-top: clamp(18px, 2.2vw, 26px); padding-bottom: clamp(18px, 2.2vw, 26px); }
.news-card-title {
  font-family: var(--font-display);
  font-weight: 900;
  font-size: clamp(18px, 2vw, 22px);
  margin: 0 0 8px;
  padding-bottom: 14px;
  border-bottom: 2px solid var(--c-ink);
  display: flex;
  align-items: center;
  gap: 10px;
}
.news-card-title::before {
  content: "";
  width: 14px; height: 14px;
  border-radius: 50%;
  background: var(--c-green, #31d7a0);
}
.message-grid {
  display: grid;
  gap: 18px;
  grid-template-columns: repeat(3, 1fr);
  margin-top: 32px;
}
.msg-layout {
  display: grid;
  grid-template-columns: minmax(0, 1fr);
  gap: clamp(20px, 2.4vw, 36px);
  align-items: start;
}
.msg-layout .message-col { min-width: 0; }
.x-feed {
  position: sticky;
  top: 96px;
  background: #fff;
  border: 3px solid var(--c-ink);
  border-radius: 18px;
  box-shadow: 5px 5px 0 var(--c-ink);
  overflow: hidden;
  align-self: start;
}
.x-feed-head {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 10px;
  flex-wrap: wrap;
  padding: 14px 16px;
  border-bottom: 3px solid var(--c-ink);
  background: var(--c-yellow);
}
.x-feed-tag {
  font-family: var(--font-display);
  font-weight: 900;
  font-size: 15px;
  color: var(--c-ink);
  line-height: 1.3;
  overflow-wrap: anywhere;
}
.x-feed-sub {
  font-size: 11px;
  font-weight: 700;
  letter-spacing: .04em;
  color: var(--c-ink);
  opacity: .7;
  white-space: nowrap;
}
.x-feed-body {
  max-height: 760px;
  min-height: 240px;
  overflow-y: auto;
  padding: 4px;
}
.x-feed-fallback {
  display: flex;
  flex-direction: column;
  gap: 12px;
  align-items: center;
  text-align: center;
  padding: 32px 22px;
}
.x-feed-fallback-text {
  font-size: 13px;
  font-weight: 700;
  line-height: 1.7;
  color: var(--c-ink);
  opacity: .75;
  margin: 0;
}
.x-feed-fallback-btn {
  display: inline-block;
  width: 100%;
  box-sizing: border-box;
  padding: 12px 18px;
  font-family: var(--font-display);
  font-weight: 800;
  font-size: 14px;
  text-decoration: none;
  color: #fff;
  background: var(--c-ink);
  border: 2.5px solid var(--c-ink);
  border-radius: 12px;
  box-shadow: 3px 3px 0 var(--c-ink);
  transition: transform .12s ease, box-shadow .12s ease;
}
.x-feed-fallback-btn.ghost {
  color: var(--c-ink);
  background: var(--c-yellow);
}
.x-feed-fallback-btn:hover {
  transform: translate(-2px, -2px);
  box-shadow: 5px 5px 0 var(--c-ink);
}
.pillar {
  background: var(--c-paper-2);
  border: 2.5px solid var(--c-ink);
  border-radius: 18px;
  padding: 20px;
  box-shadow: 4px 4px 0 var(--c-ink);
}
.pillar .pillar-icon {
  width: 48px; height: 48px;
  border-radius: 12px;
  border: 2px solid var(--c-ink);
  display: grid; place-items: center;
  font-family: var(--font-display);
  font-weight: 900;
  font-size: 20px;
  margin-bottom: 14px;
}
.pillar.one   .pillar-icon { background: var(--c-pink);   color: #fff; }
.pillar.two   .pillar-icon { background: var(--c-yellow); color: var(--c-ink); }
.pillar.three .pillar-icon { background: var(--c-purple); color: #fff; }
.pillar h4 {
  font-family: var(--font-display);
  font-weight: 900;
  font-size: 18px;
  margin: 0 0 8px;
}
.pillar p { margin: 0; font-size: 14px; line-height: 1.7; }

/* ============================================================
   03 — News
   ============================================================ */
.news-list {
  list-style: none;
  padding: 0;
  margin: 0;
}
.news-row {
  display: flex;
  align-items: baseline;
  gap: 20px;
  padding: 5px 2px;
  border-bottom: 1px solid rgba(26,34,68,.12);
  line-height: 1.45;
}
.news-row:first-child { border-top: none; }
.news-row:last-child { border-bottom: none; }
.news-date {
  font-family: var(--font-latin);
  font-size: 13px;
  color: var(--c-ink-soft);
  flex-shrink: 0;
  min-width: 76px;
  letter-spacing: .04em;
}
.news-text {
  font-weight: 700;
  font-size: 15px;
  line-height: 1.45;
  color: var(--c-ink);
  line-break: strict;
  overflow-wrap: anywhere;
}
.news-text a {
  color: var(--c-link);
  text-decoration: underline;
  text-decoration-color: rgba(21,131,191,.4);
  text-underline-offset: 3px;
  transition: text-decoration-color .15s, color .15s;
}
.news-text a:hover {
  color: var(--c-pink);
  text-decoration-color: currentColor;
}

/* ============================================================
   04 — Timetable
   ============================================================ */
.track-filter {
  display: flex;
  flex-wrap: wrap;
  gap: 10px;
  margin-bottom: 32px;
}
.chip {
  background: #fff;
  border: 2.5px solid var(--c-ink);
  border-radius: var(--r-pill);
  padding: 8px 18px;
  font-family: var(--font-display);
  font-weight: 900;
  font-size: 13px;
  box-shadow: 3px 3px 0 var(--c-ink);
  transition: transform .15s, box-shadow .15s;
  color: var(--c-ink);
}
.chip.active { background: var(--c-ink); color: #fff; }
.chip:hover { transform: translate(-1px,-1px); box-shadow: 4px 4px 0 var(--c-ink); }
.chip .dot {
  display: inline-block;
  width: 10px; height: 10px;
  border-radius: 50%;
  margin-right: 6px;
  vertical-align: middle;
  border: 1.5px solid var(--c-ink);
}

.time-slot { margin-bottom: 36px; }
.time-slot-label {
  font-family: var(--font-latin);
  font-size: 15px;
  margin: 0 0 12px;
  display: inline-block;
  padding: 6px 16px;
  background: var(--c-ink);
  color: #fff;
  border-radius: 999px;
  letter-spacing: .04em;
}
.session-grid {
  display: grid;
  gap: 14px;
  display: flex;
  flex-direction: column;
  gap: 4px;
}
.session-card {
  background: #fff;
  border: 2px solid var(--c-ink);
  border-radius: 12px;
  padding: 14px 16px;
  box-shadow: 3px 3px 0 var(--c-ink);
  transition: transform .15s, box-shadow .15s;
  cursor: pointer;
  position: relative;
  display: grid;
  grid-template-columns: clamp(140px, 22%, 220px) 1fr;
  grid-template-rows: auto auto auto;
  gap: 0 16px;
  align-items: start;
}
.session-card:hover { transform: translate(-2px,-2px); box-shadow: 5px 5px 0 var(--c-ink); }

/* "Coming Soon" ghost cards at the end of the session list — same frame as a real
   card, with the thumbnail and title areas both reading "Coming Soon" */
.session-ghost { cursor: default; align-items: center; }
.session-ghost:hover { transform: none; box-shadow: 3px 3px 0 var(--c-ink); }
.session-ghost .ghost-thumb {
  grid-row: 1 / 4;
  aspect-ratio: 16 / 10;
  display: flex;
  align-items: center;
  justify-content: center;
  background: repeating-linear-gradient(135deg, var(--c-paper-2) 0 12px, #fff 12px 24px);
}
.session-ghost .ghost-thumb span {
  font-family: var(--font-display);
  font-weight: 900;
  font-size: 12px;
  letter-spacing: .08em;
  text-transform: uppercase;
  color: var(--c-ink-soft);
  background: #fff;
  border: 1.5px solid var(--c-ink);
  border-radius: var(--r-pill);
  padding: 4px 12px;
}
.session-ghost .ghost-title {
  grid-column: 2;
  grid-row: 1 / 4;
  align-self: center;
  font-family: var(--font-display);
  font-weight: 900;
  font-size: 22px;
  letter-spacing: .12em;
  text-transform: uppercase;
  color: var(--c-ink);
  margin: 0;
}
.session-dots {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 12px;
  padding: 16px 0;
}
.session-dots i {
  width: 12px;
  height: 12px;
  border-radius: 50%;
  background: var(--c-ink);
  opacity: .55;
}
/* Trailing ghost card fades out downward — suggests the list continues */
.session-ghost.is-fade {
  -webkit-mask-image: linear-gradient(to bottom, #000 15%, transparent 98%);
          mask-image: linear-gradient(to bottom, #000 15%, transparent 98%);
}
/* Thumbnail — left column, spans all 3 rows */
.session-thumb {
  display: block;
  grid-column: 1;
  grid-row: 1 / 4;
  align-self: center;
  width: 100%;
  border: 1.5px solid rgba(26,34,68,.18);
  border-radius: 8px;
  overflow: hidden;
  background: var(--c-paper-2);
}
.session-thumb img {
  width: 100%; height: auto;
  object-fit: contain; display: block;
}
.session-card .meta {
  grid-column: 2;
  grid-row: 1;
  display: flex;
  flex-direction: row;
  flex-wrap: wrap;
  gap: 6px;
  align-items: center;
  font-size: 12px;
  margin-bottom: 0;
  padding-top: 2px;
}
.session-card .meta time { display: none; }
.session-card .meta .hall { display: none; }
.session-card .meta .tag { display: none; }
.session-card .meta .level {
  font-family: var(--font-display);
  font-weight: 900;
  font-size: 11px;
  padding: 3px 10px;
  border-radius: 999px;
  background: var(--c-paper-2);
  border: 1.5px solid var(--c-ink);
}
.session-card .meta .level.easy   { background: #31D7A0; color: #fff; border-color: #31D7A0; }
.session-card .meta .level.normal { background: #F58E44; color: #fff; border-color: #F58E44; }
.session-card .meta .level.hard   { background: #F174A3; color: #fff; border-color: #F174A3; }
/* left-border accent by level */

.session-card h4 {
  grid-column: 2;
  grid-row: 2;
  font-family: var(--font-display);
  font-weight: 900;
  font-size: 22px;
  line-height: 1.45;
  margin: 6px 0 4px;
  line-break: strict;
  overflow-wrap: anywhere;
}
.session-card .speakers {
  grid-column: 2;
  grid-row: 3;
  font-size: 15px;
  line-height: 1.6;
  color: var(--c-ink-soft);
  margin: 0 0 2px;
  /* Reserve space for up to 2 speaker lines so 1–2 名 cards share the same
     height. 3 名以上 overflows this min and stretches the card vertically. */
  min-height: calc(2 * 1.6em);
}
.session-card .speakers .sp-line { display: block; }
.session-card .speakers .sp-line + .sp-line { margin-top: 7px; }
.session-detail-btn {
  position: absolute;
  right: 16px;
  bottom: 14px;
  display: inline-flex;
  align-items: center;
  gap: 4px;
  font-family: var(--font-display);
  font-weight: 900;
  font-size: 13px;
  color: var(--c-ink);
  background-color: rgb(247, 212, 64);
  border: 2px solid var(--c-ink);
  border-radius: 999px;
  padding: 7px 16px;
  box-shadow: 2px 2px 0 var(--c-ink);
  transition: transform .12s, box-shadow .12s;
}
.session-card:hover .session-detail-btn {
  transform: translate(-1px,-1px);
  box-shadow: 3px 3px 0 var(--c-ink);
}
.session-detail-btn .arrow { font-size: 16px; line-height: 1; }
/* Logo placeholder for modal */
.thumb-logo {
  width: 100%;
  height: 100%;
  display: flex;
  align-items: center;
  justify-content: center;
  background: var(--c-paper-2);
}
.thumb-logo .thumb-logo-img {
  width: 55%;
  max-width: 220px;
  height: auto;
  max-height: 70%;
  object-fit: contain;
  opacity: .55;
}
/* Legacy striped placeholder (kept for safety) */
.thumb-ph {
  width: 100%;
  height: 100%;
  min-height: 160px;
  display: flex;
  align-items: center;
  justify-content: center;
  background: var(--c-paper-2);
}

/* ============================================================
   05 — Contents (会場コンテンツ)
   ============================================================ */
.contents-intro {
  font-size: clamp(14px, 1.4vw, 16px);
  font-weight: 600;
  color: var(--c-ink-soft);
  max-width: 64ch;
  margin: -8px 0 28px;
  line-height: 1.8;
}
.contents-intro strong {
  background: linear-gradient(transparent 62%, var(--c-yellow) 62%);
  color: var(--c-ink);
  font-weight: 800;
  padding: 0 2px;
}

/* Featured content card (なんでも相談所) */
.content-feature {
  display: grid;
  grid-template-columns: 1.05fr 1fr;
  gap: 0;
  background: #fff;
  border: 3px solid var(--c-ink);
  border-radius: 26px;
  box-shadow: 8px 8px 0 var(--c-ink);
  overflow: hidden;
  margin-bottom: 22px;
}
.content-feature .cf-media {
  position: relative;
  border-right: 3px solid var(--c-ink);
  min-height: 240px;
}
.content-feature .cf-media .thumb-ph { position: absolute; inset: 0; }
.content-feature .cf-flag {
  position: absolute;
  top: 16px; left: 16px;
  z-index: 2;
  font-family: var(--font-latin);
  font-weight: 700;
  font-size: 12px;
  letter-spacing: .1em;
  background: var(--c-ink);
  color: #fff;
  border: 2px solid var(--c-ink);
  border-radius: 999px;
  padding: 5px 14px;
  transform: rotate(-3deg);
  box-shadow: 3px 3px 0 var(--c-yellow);
}
.content-feature .cf-body {
  padding: clamp(24px, 3vw, 40px);
  display: flex;
  flex-direction: column;
  gap: 12px;
  justify-content: center;
}
.content-feature .cf-head {
  display: flex;
  align-items: center;
  gap: 14px;
}
.content-feature .cf-icon {
  width: 58px; height: 58px;
  flex-shrink: 0;
  border-radius: 16px;
  border: 2.5px solid var(--c-ink);
  background: var(--c-pink);
  color: #fff;
  display: grid; place-items: center;
  font-family: var(--font-display);
  font-weight: 900;
  font-size: 28px;
  box-shadow: 3px 3px 0 var(--c-ink);
  transform: rotate(-5deg);
}
.content-feature .cf-en {
  font-family: var(--font-latin);
  font-weight: 700;
  font-size: 11px;
  letter-spacing: .14em;
  color: var(--c-ink-soft);
  margin: 0;
}
.content-feature h3 {
  font-family: var(--font-display);
  font-weight: 900;
  font-size: clamp(20px, 2.4vw, 28px);
  line-height: 1.3;
  margin: 0;
  line-break: strict;
  overflow-wrap: anywhere;
}
.content-feature .cf-desc {
  font-size: 14px;
  line-height: 1.8;
  color: var(--c-ink-soft);
  margin: 0;
}
.content-feature .cf-tags {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  margin-top: 2px;
}
.cc-tag {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  font-family: var(--font-display);
  font-weight: 900;
  font-size: 11px;
  letter-spacing: .03em;
  padding: 4px 11px;
  border-radius: 999px;
  border: 2px solid var(--c-ink);
  background: var(--c-yellow);
  color: var(--c-ink);
}
.cc-tag.pink  { background: var(--c-pink);   color: #fff; }
.cc-tag.blue  { background: var(--c-blue);   color: #fff; }
.cc-tag.green { background: var(--c-green); }
.cc-tag.purple{ background: var(--c-purple); color: #fff; }
.cc-tag.ghost {
  background: #fff;
  border-style: dashed;
}

/* Content card grid */
.content-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 18px;
}
.content-card {
  background: #fff;
  border: 2.5px solid var(--c-ink);
  border-radius: 20px;
  overflow: hidden;
  display: flex;
  flex-direction: column;
  cursor: default;
}
.content-card:focus-visible {
  outline: 3px solid var(--c-ink);
  outline-offset: 3px;
}
.content-card .cc-head {
  display: flex;
  align-items: center;
  gap: 13px;
  margin-bottom: 2px;
}
.content-card .cc-chip {
  width: 48px; height: 48px;
  flex-shrink: 0;
  border-radius: 13px;
  border: 2.5px solid var(--c-ink);
  display: grid; place-items: center;
  box-shadow: 3px 3px 0 var(--c-ink);
}
.content-card .cc-chip svg {
  width: 26px; height: 26px;
  stroke-width: 2; fill: none;
}
/* イベントコンテンツ 配色（確定パレット・並び順に依存しない明示指定）*/
.content-grid .content-card .cc-chip.cc-c-blue   { background: #5cc9f5; }
.content-grid .content-card .cc-chip.cc-c-amber  { background: #ffbd52; }
.content-grid .content-card .cc-chip.cc-c-green  { background: #5ee7bd; }
.content-grid .content-card .cc-chip.cc-c-pink   { background: #ff9bc0; }
.content-grid .content-card .cc-chip.cc-c-purple { background: #b0a8fa; }
.content-grid .content-card .cc-chip.cc-c-red    { background: #ff7c74; }
.content-grid .content-card .cc-chip.cc-c-lime   { background: #a6db6a; }
.content-grid .content-card .cc-chip.cc-c-yellow { background: #ffdd6e; }
.content-grid .content-card .cc-chip.cc-c-violet { background: #d488ef; }
/* 講演/ハンズオン/相談所/グッズショップ ジャンプカード */
.content-card.cc-link {
  cursor: pointer;
  text-decoration: none;
  color: inherit;
  transition: transform .12s, box-shadow .12s;
}
.content-card.cc-link:hover { transform: translate(-2px,-2px); box-shadow: 8px 8px 0 #000; }
.content-card.cc-link:active { transform: translate(2px,2px); box-shadow: 3px 3px 0 #000; }
/* 線・アイコンはすべて黒 */
.content-grid .content-card { border-color: #000; box-shadow: 6px 6px 0 #000; }
.content-grid .content-card .cc-chip { border-color: #000; box-shadow: 3px 3px 0 #000; color: #000; }
.content-card .cc-head h4 { flex: 1; }
.content-card .cc-body {
  padding: 18px 20px 20px;
  display: flex;
  flex-direction: column;
  gap: 9px;
  flex: 1;
}
.content-card { box-shadow: 6px 6px 0 var(--c-ink); }
.content-card .cc-top {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
}
.content-card .cc-icon {
  width: 50px; height: 50px;
  flex-shrink: 0;
  border-radius: 14px;
  border: 2.5px solid var(--c-ink);
  display: grid; place-items: center;
  font-family: var(--font-display);
  font-weight: 900;
  font-size: 24px;
  box-shadow: 3px 3px 0 var(--c-ink);
}
.content-card:nth-child(1) .cc-icon { background: var(--c-blue);   color: #fff; }
.content-card:nth-child(2) .cc-icon { background: var(--c-orange); color: #fff; }
.content-card:nth-child(3) .cc-icon { background: var(--c-purple); color: #fff; }
.content-card:nth-child(4) .cc-icon { background: var(--c-green);  color: var(--c-ink); }
.content-card:nth-child(5) .cc-icon { background: var(--c-yellow); color: var(--c-ink); }
.content-card:nth-child(6) .cc-icon { background: var(--c-pink);   color: #fff; }
.content-card .cc-en {
  font-family: var(--font-latin);
  font-weight: 700;
  font-size: 10px;
  letter-spacing: .12em;
  color: var(--c-ink-soft);
  margin: 4px 0 0;
}
.content-card h4 {
  font-family: var(--font-display);
  font-weight: 900;
  font-size: 18px;
  line-height: 1.4;
  margin: 0;
  line-break: strict;
  overflow-wrap: anywhere;
}
.content-card .cc-time {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  align-self: flex-start;
  margin: 0 0 7px;
  padding: 0;
  font-family: var(--font-display);
  font-weight: 900;
  font-size: 13px;
  letter-spacing: .01em;
  color: var(--c-pink);
  white-space: nowrap;
}
.content-card .cc-time svg {
  width: 14px;
  height: 14px;
  flex-shrink: 0;
}
.content-card .cc-desc {
  font-size: 13px;
  line-height: 1.75;
  color: var(--c-ink-soft);
  margin: 0;
  flex: 1;
}
.content-card .cc-more {
  align-self: flex-end;
  margin-top: 12px;
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  gap: 4px;
  font-family: var(--font-display);
  font-weight: 900;
  font-size: 13px;
  color: var(--c-ink);
  background-color: rgb(247, 212, 64);
  border: 2px solid var(--c-ink);
  border-radius: 999px;
  padding: 7px 16px;
  box-shadow: 2px 2px 0 var(--c-ink);
  transition: transform .12s, box-shadow .12s;
}
.content-card .cc-more .arrow { font-size: 16px; line-height: 1; }
.content-card .cc-more:hover { transform: translate(-1px,-1px); box-shadow: 3px 3px 0 var(--c-ink); }
.content-card .cc-head .cc-more-inline {
  align-self: center;
  margin-top: 0;
  flex-shrink: 0;
}

.contents-note {
  margin-top: 22px;
  font-size: 12.5px;
  color: var(--c-ink-soft);
  display: flex;
  align-items: center;
  gap: 8px;
  line-height: 1.6;
}
.contents-note::before {
  content: "✦";
  color: var(--c-pink);
  font-size: 14px;
  flex-shrink: 0;
}

/* ============================================================
   05a — Goods Shop (グッズショップ)
   ============================================================ */
.goods-soon {
  position: relative;
  border: 2.5px solid var(--c-ink);
  border-radius: 22px;
  box-shadow: 6px 6px 0 var(--c-ink);
  background: repeating-linear-gradient(135deg, var(--c-paper-2) 0 16px, #fff 16px 32px);
  padding: clamp(44px, 7vw, 92px) 24px;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 24px;
  text-align: center;
}
.goods-soon-stamp {
  font-family: var(--font-latin);
  font-weight: 800;
  font-size: 14px;
  letter-spacing: .12em;
  text-transform: uppercase;
  color: #fff;
  background: var(--c-pink);
  border: 2.5px solid var(--c-ink);
  border-radius: 999px;
  padding: 7px 20px;
  box-shadow: 3px 3px 0 var(--c-ink);
  line-height: 1.05;
}
.goods-soon-text {
  margin: 0;
  font-weight: 700;
  font-size: clamp(14px, 1.5vw, 17px);
  color: var(--c-ink-soft);
  line-height: 1.85;
}

/* Standalone feature sections (ワークショップ / なんでも相談所) */
.content-feature.is-purple { box-shadow: 8px 8px 0 var(--c-ink); }
.content-feature.is-purple .cf-icon { background: var(--c-purple); }
.content-feature.is-purple .cf-flag { box-shadow: 3px 3px 0 var(--c-ink); }
.content-feature.is-flip .cf-media {
  order: 2;
  border-right: 0;
  border-left: 3px solid var(--c-ink);
}
.cf-media img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}
.cf-info {
  margin-top: 8px;
  padding-top: 18px;
  border-top: 2px dashed rgba(26, 34, 68, .28);
}
.cf-media .thumb-ph {
  flex-direction: column;
  gap: 10px;
  background: repeating-linear-gradient(135deg, var(--c-paper-2) 0 14px, #fff 14px 28px);
}
.cf-media .ph-tag {
  font-family: var(--font-display);
  font-weight: 900;
  font-size: 14px;
  letter-spacing: .12em;
  color: var(--c-ink);
  background: #fff;
  border: 2px solid var(--c-ink);
  border-radius: 999px;
  padding: 5px 14px;
}
.cf-media .ph-note {
  font-family: var(--font-latin);
  font-size: 11px;
  letter-spacing: .1em;
  color: var(--c-ink-soft);
}

/* Coming Soon panel — used where details aren't ready yet (ハンズオン) */
.coming-soon {
  position: relative;
  background: repeating-linear-gradient(135deg, var(--c-paper-2) 0 16px, #fff 16px 32px);
  border: 3px solid var(--c-ink);
  border-radius: var(--r-card);
  box-shadow: 8px 8px 0 var(--c-ink);
  padding: clamp(40px, 6vw, 72px) clamp(24px, 4vw, 48px);
  text-align: center;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 14px;
}
.coming-soon .cs-badge {
  font-family: var(--font-display);
  font-weight: 900;
  font-size: 14px;
  letter-spacing: .12em;
  color: #fff;
  background: var(--c-purple);
  border: 2.5px solid var(--c-ink);
  border-radius: var(--r-pill);
  box-shadow: 3px 3px 0 var(--c-ink);
  padding: 7px 20px;
}
.coming-soon h3 {
  font-family: var(--font-display);
  font-weight: 900;
  font-size: clamp(22px, 3vw, 32px);
  line-height: 1.4;
  margin: 4px 0 0;
  overflow-wrap: anywhere;
}
.coming-soon p {
  font-size: 15px;
  line-height: 1.8;
  color: var(--c-ink-soft);
  max-width: 640px;
  margin: 0;
}

@media (max-width: 860px) {
  .content-feature { grid-template-columns: 1fr; }
  .content-feature .cf-media {
    border-right: 0;
    border-bottom: 3px solid var(--c-ink);
    min-height: 200px;
  }
  .content-feature.is-flip .cf-media { order: 0; border-left: 0; }
  .content-grid { grid-template-columns: repeat(2, 1fr); }
  .content-card:nth-child(3n+1),
  .content-card:nth-child(3n+2),
  .content-card:nth-child(3n+3) { box-shadow: 6px 6px 0 var(--c-ink); }
}
@media (max-width: 540px) {
  .content-grid { grid-template-columns: 1fr; }
}

/* Content modal — 開催概要 definition list */
.modal-info {
  display: grid;
  grid-template-columns: max-content 1fr;
  gap: 10px 18px;
  margin: 0;
}
.modal-info dt {
  font-family: var(--font-display);
  font-weight: 900;
  font-size: 13px;
  color: var(--c-ink);
  white-space: nowrap;
}
.modal-info dd {
  margin: 0;
  font-size: 13.5px;
  line-height: 1.7;
  color: var(--c-ink-soft);
}

/* ============================================================
   06 — Speakers
   ============================================================ */
.speaker-grid {
  display: grid;
  gap: 22px;
  grid-template-columns: repeat(3, 1fr);
}
.speaker-card {
  background: #fff;
  border: 3px solid var(--c-ink);
  border-radius: 22px;
  padding: 24px;
  text-align: center;
  position: relative;
  transition: transform .2s;
}
.speaker-card { box-shadow: 6px 6px 0 var(--c-ink); }
.speaker-card:hover { transform: translate(-3px,-3px); }
.speaker-photo {
  width: 140px; height: 140px;
  border-radius: 50%;
  border: 4px solid var(--c-ink);
  margin: 0 auto 16px;
  overflow: hidden;
  position: relative;
  background: var(--c-paper-2);
  display: grid; place-items: center;
}
.speaker-photo svg { width: 100%; height: 100%; }
.speaker-card:nth-child(6n+1) .speaker-photo { background: var(--c-pink); }
.speaker-card:nth-child(6n+2) .speaker-photo { background: var(--c-yellow); }
.speaker-card:nth-child(6n+3) .speaker-photo { background: var(--c-purple); }
.speaker-card:nth-child(6n+4) .speaker-photo { background: var(--c-blue); }
.speaker-card:nth-child(6n+5) .speaker-photo { background: var(--c-orange); }
.speaker-card:nth-child(6n+6) .speaker-photo { background: var(--c-green); }
.speaker-card h4 {
  font-family: var(--font-display);
  font-weight: 900;
  font-size: 18px;
  margin: 0 0 2px;
}
.speaker-card .name-en {
  font-family: var(--font-latin);
  font-size: 11px;
  color: var(--c-ink-soft);
  letter-spacing: .04em;
  margin-bottom: 8px;
}
.speaker-card .role {
  font-size: 13px;
  color: var(--c-ink-soft);
  line-height: 1.5;
}
.speaker-card .role strong { color: var(--c-ink); display:block; }
.speaker-card { overflow: hidden; }
.speaker-card .ribbon {
  position: absolute;
  top: 14px; right: 0;
  background: var(--c-ink);
  color: #fff;
  font-family: var(--font-display);
  font-weight: 900;
  font-size: 10px;
  padding: 4px 10px;
  border-radius: 4px 0 0 4px;
  letter-spacing: .08em;
}

/* ============================================================
   Footer zone — Venue band (acts as footer prelude)
   ============================================================ */
.venue-footer {
  background: var(--c-ink);
  color: #fff;
  padding: clamp(48px, 7vw, 88px) 0 clamp(40px, 5vw, 64px);
}
.venue-footer-inner {
  display: grid;
  grid-template-columns: 1.15fr 1fr;
  gap: clamp(28px, 4vw, 52px);
  align-items: center;
}
.vf-map {
  border: 3px solid #fff;
  border-radius: 20px;
  overflow: hidden;
  box-shadow: 8px 8px 0 rgba(0,0,0,.4);
  aspect-ratio: 16 / 10;
  background: #0d1530;
}
.vf-map iframe {
  width: 100%; height: 100%;
  border: 0; display: block;
}
.vf-info .vf-eyebrow {
  display: inline-block;
  font-family: var(--font-latin);
  font-weight: 700;
  font-size: 12px;
  letter-spacing: .14em;
  color: var(--c-green);
  margin-bottom: 8px;
}
.vf-info h3 {
  font-family: var(--font-display);
  font-weight: 900;
  font-size: clamp(22px, 3vw, 30px);
  margin: 0 0 8px;
  color: #fff;
}
.vf-info .vf-addr {
  color: rgba(255,255,255,.66);
  font-size: 14px;
  margin: 0 0 20px;
}
.vf-access {
  list-style: none;
  padding: 0; margin: 0 0 20px;
  display: grid; gap: 10px;
}
.vf-access li {
  display: flex; gap: 11px;
  align-items: flex-start;
  font-size: 14px;
  color: rgba(255,255,255,.88);
}
.vf-access .marker {
  flex-shrink: 0;
  width: 28px; height: 28px;
  border-radius: 8px;
  background: var(--c-yellow);
  border: 2px solid #0d1530;
  color: var(--c-ink);
  display: grid; place-items: center;
  font-family: var(--font-display);
  font-weight: 900;
  font-size: 11px;
}
.vf-access .marker.train { background: var(--c-green); }
.vf-access .marker.bus   { background: var(--c-blue); color: #fff; }
.vf-access .marker.car   { background: var(--c-orange); color: #fff; }
.vf-note {
  font-size: 12.5px;
  line-height: 1.7;
  color: rgba(255,255,255,.58);
  border-left: 3px solid var(--c-orange);
  padding-left: 13px;
  margin: 0;
}
@media (max-width: 860px) {
  .venue-footer-inner { grid-template-columns: 1fr; }
}

/* ============================================================
   07 — Sponsors
   ============================================================ */
.sponsor-tier { margin-bottom: 44px; text-align: center; }
.tier-label {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 10px;
  font-family: var(--font-display);
  font-weight: 900;
  font-size: 20px;
  background: none;
  color: var(--c-ink);
  padding: 0;
  border-radius: 0;
  margin: 0 auto 20px;
  letter-spacing: .04em;
}
.tier-label .tier-dot {
  width: 12px; height: 12px;
  border-radius: 50%;
}
.tier-label.platinum .tier-dot { background: #e6e6e6; }
.tier-label.gold     .tier-dot { background: var(--c-yellow); }
.tier-label.silver   .tier-dot { background: #c8d0d8; }
.tier-label.bronze   .tier-dot { background: #d18a4a; }
.tier-label.media    .tier-dot { background: var(--c-purple); }
.tier-label.kizai    .tier-dot { background: #14b8a6; }
.tier-label.partner  .tier-dot { background: var(--c-blue, #2a6fdb); }
.tier-label.thanks   .tier-dot { background: var(--c-pink); }
.tier-label .tier-note {
  font-family: var(--font-body);
  font-weight: 700;
  font-size: 11px;
  opacity: .8;
  margin-left: 4px;
}
.tier-label.thanks {
  max-width: 100%;
  border-radius: 0;
  line-height: 1.5;
  text-align: center;
  align-items: center;
  justify-content: center;
  flex-wrap: wrap;
  row-gap: 2px;
}
.tier-label .tier-note {
  font-size: 13px;
  opacity: .65;
}

/* Special Thanks chips */
.thanks-card {
  background: #fff;
  border: 2.5px solid var(--c-ink);
  border-radius: 22px;
  padding: clamp(20px, 2.6vw, 30px);
  box-shadow: 6px 6px 0 var(--c-ink);
  position: relative;
  text-align: left;
  max-width: 860px;
  margin: 0 auto;
}
.thanks-card .thanks-lead {
  font-size: 13px;
  line-height: 1.75;
  color: var(--c-ink-soft);
  margin: 0 0 18px;
  text-align: center;
}
.thanks-grid {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: 8px;
}
.thanks-chip {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  background: var(--c-yellow);
  border: 2px solid var(--c-ink);
  border-radius: 999px;
  padding: 7px 14px 7px 12px;
  font-size: 13px;
  font-weight: 700;
  color: var(--c-ink);
  box-shadow: 2px 2px 0 var(--c-ink);
  transition: transform .12s, box-shadow .12s, background .12s;
  text-decoration: none;
}
.thanks-chip:hover {
  transform: translate(-1px,-1px);
  box-shadow: 3px 3px 0 var(--c-ink);
  filter: brightness(.95);
}
.thanks-chip .heart {
  display: inline-grid;
  place-items: center;
  width: 18px; height: 18px;
  border-radius: 50%;
  background: var(--c-pink);
  color: #fff;
  font-size: 10px;
  flex-shrink: 0;
}
.thanks-chip .ext {
  font-size: 11px;
  opacity: .5;
  margin-left: 2px;
}
.thanks-chip.no-link {
  background: #fff;
  box-shadow: 2px 2px 0 var(--c-ink);
  cursor: default;
}
.thanks-chip.no-link:hover {
  transform: none;
  box-shadow: 2px 2px 0 var(--c-ink);
  filter: none;
}
.thanks-footnote {
  margin-top: 18px;
  font-size: 12px;
  color: var(--c-ink-soft);
  display: flex;
  align-items: center;
  gap: 8px;
}
.thanks-footnote::before {
  content: "✦";
  color: var(--c-pink);
  font-size: 14px;
}

.sponsor-grid {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: 12px;
}
/* max-width は balanceSponsorGrids() が動的に設定（各段の数が均等になるよう ceil(N/段数) 列に制限） */
.sponsor-grid { margin-inline: auto; }
.sponsor-logo { flex: 0 0 auto; width: 150px; max-width: 100%; }
.sponsor-grid.tier-platinum .sponsor-logo { width: 400px; }
.sponsor-grid.tier-gold     .sponsor-logo { width: 300px; }
.sponsor-grid.tier-silver   .sponsor-logo { width: 258px; }
.sponsor-grid.tier-bronze   .sponsor-logo { width: 225px; }
.sponsor-grid.tier-kizai    .sponsor-logo { width: 225px; }
.sponsor-grid.tier-media    .sponsor-logo { width: 225px; }
.sponsor-grid.tier-partner  .sponsor-logo { width: 225px; }
.sponsor-logo {
  background: #fff;
  border: 2.5px solid var(--c-ink);
  border-radius: 16px;
  aspect-ratio: 16/9;
  display: grid;
  place-items: center;
  padding: 16px;
  box-shadow: 4px 4px 0 var(--c-ink);
  transition: transform .15s;
  text-align: center;
}
.sponsor-logo:hover { transform: translate(-2px,-2px); box-shadow: 6px 6px 0 var(--c-ink);}
.sponsor-logo { text-decoration: none; cursor: pointer; }
.sponsor-logo img {
  max-width: 100%;
  max-height: 100%;
  width: auto;
  height: auto;
  object-fit: contain;
  display: block;
}
.sponsor-logo .label {
  font-family: var(--font-display);
  font-weight: 900;
  font-size: 22px;
  color: var(--c-ink);
  letter-spacing: .03em;
}
.sponsor-grid.tier-silver .label { font-size: 18px; }
.sponsor-grid.tier-bronze .label,
.sponsor-grid.tier-media  .label { font-size: 16px; }

/* ============================================================
   08 — Tickets
   ============================================================ */
.ticket-head {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 16px;
  background: var(--c-ink);
  color: #fff;
  border: 2.5px solid var(--c-ink);
  border-radius: 18px;
  padding: 16px 22px;
  margin-bottom: 28px;
  box-shadow: 6px 6px 0 var(--c-ink);
}
.ticket-head .head-stamp {
  font-family: var(--font-display);
  font-weight: 900;
  font-size: 13px;
  letter-spacing: .12em;
  color: var(--c-ink);
  background: var(--c-yellow);
  border: 2px solid var(--c-yellow);
  border-radius: 6px;
  padding: 4px 10px;
  transform: rotate(-2deg);
}
.ticket-head .head-text {
  font-family: var(--font-display);
  font-weight: 800;
  font-size: 17px;
  line-height: 1.5;
}
.ticket-head .head-text b {
  color: var(--c-yellow);
  font-weight: 900;
  letter-spacing: .02em;
}
.ticket-head .head-deadline {
  margin-left: auto;
  font-family: var(--font-display);
  font-weight: 700;
  font-size: 13px;
  letter-spacing: .08em;
  color: rgba(255,255,255,.7);
  border-left: 1px solid rgba(255,255,255,.25);
  padding-left: 16px;
}
.ticket-head .head-deadline b {
  display: block;
  color: #fff;
  font-size: 18px;
  margin-top: 2px;
  letter-spacing: .02em;
}

.ticket-grid {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 18px;
}
.ticket-card {
  position: relative;
  background: #fff;
  border: 2.5px solid var(--c-ink);
  border-radius: 22px;
  padding: 24px 22px 22px;
  display: flex;
  flex-direction: column;
  gap: 14px;
  cursor: default;
}
.ticket-card { box-shadow: 6px 6px 0 var(--c-ink); }

.ticket-card.is-premier {
  background: linear-gradient(180deg, #fffbe9 0%, #fff 60%);
}
.ticket-card .premier-flag {
  position: absolute;
  top: -14px;
  right: 18px;
  background: var(--c-pink);
  color: #fff;
  border: 2px solid var(--c-ink);
  border-radius: 999px;
  padding: 5px 12px;
  font-family: var(--font-latin);
  font-weight: 700;
  font-size: 11px;
  letter-spacing: .1em;
  box-shadow: 2px 2px 0 var(--c-ink);
  transform: rotate(4deg);
}

.ticket-card .t-tier {
  display: flex;
  align-items: center;
  gap: 10px;
  min-height: 30px;
}
.ticket-card .t-dot {
  width: 14px; height: 14px;
  border-radius: 50%;
  border: 2px solid var(--c-ink);
}
.ticket-card:nth-child(1) .t-dot { background: var(--c-green); }
.ticket-card:nth-child(2) .t-dot { background: var(--c-pink); }
.ticket-card:nth-child(3) .t-dot { background: var(--c-blue); }
.ticket-card:nth-child(4) .t-dot { background: var(--c-purple); }
.ticket-card .t-name {
  font-family: var(--font-display);
  font-weight: 900;
  font-size: 22px;
  color: var(--c-ink);
  letter-spacing: .02em;
  min-width: 0;
  line-break: strict;
  overflow-wrap: anywhere;
}
.ticket-card .t-en {
  margin-left: auto;
  font-family: var(--font-latin);
  font-weight: 700;
  font-size: 10px;
  letter-spacing: .12em;
  color: var(--c-ink-soft);
  opacity: .7;
}

.ticket-card .t-price-row {
  display: grid;
  grid-template-rows: 28px 44px 16px;
  align-items: center;
  justify-items: start;
  gap: 5px;
  padding: 14px 0;
  border-top: 1.5px dashed rgba(26,34,68,.18);
  border-bottom: 1.5px dashed rgba(26,34,68,.18);
}
.ticket-card .t-price-was { grid-row: 1; align-self: end; }
.ticket-card .t-price:not(.t-price-was) { grid-row: 2; }
.ticket-card .t-price-label { grid-row: 3; align-self: start; }
/* single-price cards (学生 / 懇親会): center the price vertically between the dashed lines */
.ticket-card .t-price-row:has(.t-price:only-child) .t-price {
  grid-row: 1 / -1;
  align-self: center;
}
.ticket-card .t-price-label {
  font-family: var(--font-display);
  font-weight: 800;
  font-size: 11px;
  letter-spacing: .06em;
  color: var(--c-ink-soft);
}
.ticket-card .t-price {
  font-family: var(--font-latin-narrow);
  font-weight: 800;
  font-size: 36px;
  line-height: 1;
  color: var(--c-ink);
  letter-spacing: -.01em;
}
.ticket-card .t-price .yen {
  font-size: 22px;
  vertical-align: top;
  margin-right: 2px;
}
.ticket-card .t-price-was {
  font-size: 26px;
  color: var(--c-ink-soft);
  text-decoration: line-through;
  text-decoration-thickness: 2px;
  opacity: .7;
}
.ticket-card .t-price-was .yen {
  font-size: 16px;
}
.ticket-card .t-price .tax {
  font-family: var(--font-body);
  font-weight: 700;
  font-size: 11px;
  margin-left: 4px;
  color: var(--c-ink-soft);
  letter-spacing: .04em;
}
.ticket-card .t-strike {
  font-family: var(--font-body);
  font-weight: 700;
  font-size: 12px;
  color: var(--c-ink-soft);
}
.ticket-card .t-strike s { text-decoration: line-through; opacity: .85; }
.ticket-card .t-strike.is-muted { font-style: normal; }
.ticket-card .t-early-tag {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  font-family: var(--font-display);
  font-weight: 800;
  font-size: 11px;
  color: var(--c-ink);
  background: var(--c-yellow);
  border: 1.5px solid var(--c-ink);
  border-radius: 4px;
  padding: 2px 6px;
  letter-spacing: .04em;
}

.ticket-card .t-feats {
  list-style: none;
  margin: 0;
  padding: 0;
  display: grid;
  gap: 8px;
  font-size: 13px;
  line-height: 1.55;
  color: var(--c-ink);
  flex: 1;
}
.ticket-card .t-feats li {
  display: grid;
  grid-template-columns: 18px 1fr;
  gap: 6px;
  align-items: start;
}
.ticket-card .t-feats li::before {
  content: "✓";
  font-family: var(--font-latin);
  font-weight: 700;
  color: var(--c-ink);
  width: 16px;
  display: inline-block;
  font-size: 14px;
  margin-top: 1px;
}
.ticket-card .t-feats li.is-bonus::before {
  content: "✓";
  color: var(--c-ink);
}

.ticket-notes {
  margin-top: 24px;
  display: grid;
  grid-template-columns: 1.4fr 1fr;
  gap: 18px;
  align-items: stretch;
}
.ticket-notes .notes-card {
  background: #fff;
  border: 2.5px solid var(--c-ink);
  border-radius: 18px;
  padding: 18px 20px;
  box-shadow: 5px 5px 0 var(--c-ink-soft);
}
.ticket-notes .notes-card h4 {
  font-family: var(--font-display);
  font-weight: 900;
  font-size: 15px;
  margin: 0 0 10px;
  display: flex;
  align-items: center;
  gap: 8px;
  color: var(--c-ink);
}
.ticket-notes .notes-card h4::before {
  content: "i";
  width: 22px; height: 22px;
  border-radius: 50%;
  background: var(--c-ink);
  color: #fff;
  display: grid; place-items: center;
  font-family: var(--font-latin);
  font-style: italic;
  font-size: 13px;
  font-weight: 700;
}
.ticket-notes .notes-card ul {
  margin: 0;
  padding: 0 0 0 0;
  list-style: none;
  font-size: 13px;
  line-height: 1.7;
  color: var(--c-ink);
}
.ticket-notes .notes-card li {
  padding-left: 14px;
  position: relative;
}
.ticket-notes .notes-card li::before {
  content: "—";
  position: absolute;
  left: 0;
  color: var(--c-ink-soft);
}
.ticket-cta {
  background: var(--c-paper-2);
  border: 2.5px solid var(--c-ink);
  border-radius: 18px;
  padding: 20px 22px;
  box-shadow: 5px 5px 0 var(--c-ink);
  display: flex;
  flex-direction: column;
  justify-content: center;
  gap: 12px;
}
.ticket-cta .cta-eyebrow {
  font-family: var(--font-latin);
  font-weight: 700;
  font-size: 11px;
  letter-spacing: .14em;
  color: var(--c-pink);
}
.ticket-cta .cta-line {
  font-family: var(--font-display);
  font-weight: 900;
  font-size: 18px;
  line-height: 1.45;
  color: var(--c-ink);
}
.ticket-cta .btn { align-self: flex-start; }
.ticket-cta .cta-sub {
  font-size: 11px;
  color: var(--c-ink-soft);
  letter-spacing: .04em;
}

.pin-callout {
  margin-top: 24px;
  display: grid;
  grid-template-columns: 300px 1fr;
  gap: 26px;
  align-items: center;
  background: #fff;
  border-radius: 22px;
  padding: 24px;
  box-shadow: 0 10px 28px rgba(26,34,68,.09);
}
.pin-callout .pin-figure {
  background: var(--c-paper-2);
  border-radius: 16px;
  padding: 16px;
  display: grid;
  place-items: center;
}
.pin-callout .pin-figure img {
  width: 100%;
  height: auto;
  display: block;
}
.pin-callout .pin-eyebrow {
  display: inline-block;
  font-family: var(--font-display);
  font-weight: 800;
  font-size: 11px;
  letter-spacing: .08em;
  color: var(--c-pink);
  margin-bottom: 8px;
}
.pin-callout .pin-title {
  font-family: var(--font-display);
  font-weight: 900;
  font-size: 22px;
  color: var(--c-ink);
  margin: 0 0 10px;
}
.pin-callout .pin-text {
  font-size: 14px;
  line-height: 1.7;
  color: var(--c-ink);
  margin: 0 0 8px;
}
.pin-callout .pin-note {
  font-size: 11px;
  color: var(--c-ink-soft);
  margin: 0;
}
.ticket-buy {
  margin-top: 32px;
  display: flex;
  justify-content: center;
}
.ticket-buy .btn-lg {
  font-size: 20px;
  padding: 18px 44px;
}

@media (max-width: 1024px) {
  .ticket-grid { grid-template-columns: repeat(2, 1fr); }
}
@media (max-width: 720px) {
  .ticket-head { flex-direction: column; align-items: flex-start; }
  .ticket-head .head-deadline { margin-left: 0; border-left: 0; padding-left: 0; border-top: 1px solid rgba(255,255,255,.2); padding-top: 10px; width: 100%; }
  .ticket-notes { grid-template-columns: 1fr; }
  .pin-callout { grid-template-columns: 1fr; }
}
@media (max-width: 520px) {
  .ticket-grid { grid-template-columns: 1fr; }
}

/* ============================================================
   09 — FAQ
   ============================================================ */
.faq-list { display: grid; gap: 12px; }
.faq-item {
  background: #fff;
  border: 2.5px solid var(--c-ink);
  border-radius: 18px;
  overflow: hidden;
  box-shadow: 5px 5px 0 var(--c-ink);
}
.faq-q {
  width: 100%;
  text-align: left;
  background: transparent;
  border: 0;
  padding: 18px 22px;
  display: flex;
  align-items: center;
  gap: 14px;
  font-family: var(--font-display);
  font-weight: 900;
  font-size: 15px;
  color: var(--c-ink);
}
.faq-q .q-mark {
  width: 38px; height: 38px;
  border-radius: 50%;
  background: var(--c-pink);
  color: #fff;
  border: 3px solid var(--c-ink);
  display: grid; place-items: center;
  font-family: var(--font-latin);
  font-weight: 700;
  font-size: 20px;
  line-height: 1;
  flex-shrink: 0;
  box-shadow: 2px 2px 0 var(--c-ink);
}
.faq-q .q-text {
  flex: 1;
  min-width: 0;
  line-break: strict;
  overflow-wrap: anywhere;
  white-space: normal;
}
.faq-q .chev {
  width: 28px; height: 28px;
  display: grid; place-items: center;
  border: 2px solid var(--c-ink);
  border-radius: 50%;
  background: var(--c-yellow);
  transition: transform .25s;
  flex-shrink: 0;
}
.faq-item[data-open="true"] .faq-q .chev { transform: rotate(180deg); }
.faq-a {
  max-height: 0;
  overflow: hidden;
  transition: max-height .35s ease;
}
.faq-a-inner {
  padding: 0 22px 22px 68px;
  font-size: 14px;
  line-height: 1.8;
  color: var(--c-ink-soft);
}

/* ============================================================
   Session Detail Modal
   ============================================================ */
.modal-root {
  position: fixed;
  inset: 0;
  z-index: 100;
  display: none;
  align-items: center;
  justify-content: center;
  padding: 16px;
}
.modal-root.open { display: flex; }
.modal-overlay {
  position: absolute;
  inset: 0;
  background: rgba(26, 34, 68, .45);
  backdrop-filter: blur(4px);
  opacity: 0;
  transition: opacity .2s ease;
  border: 0;
  cursor: pointer;
}
.modal-root.visible .modal-overlay { opacity: 1; }
.modal-card {
  position: relative;
  z-index: 1;
  width: 100%;
  max-width: 720px;
  max-height: 85vh;
  overflow: hidden;
  background: #fff;
  border: 3px solid var(--c-ink);
  border-radius: 22px;
  box-shadow: 8px 8px 0 var(--c-ink);
  transform: scale(.88);  opacity: 0;
  transition: transform .28s cubic-bezier(.34,1.56,.64,1), opacity .2s;
}
.modal-root.visible .modal-card { transform: scale(1); opacity: 1; }
.modal-body {
  max-height: 85vh;
  overflow-y: auto;
  scrollbar-width: none;
  -ms-overflow-style: none;
  padding: clamp(22px, 3.5vw, 36px);
}
.modal-body::-webkit-scrollbar { display: none; }

/* Scroll affordance: bottom fade, hides when scrolled to end */
.modal-scroll-fade {
  position: absolute;
  left: 0; right: 0; bottom: 0;
  height: 56px;
  border-radius: 0 0 19px 19px;
  background: linear-gradient(to bottom, rgba(255,255,255,0), rgba(255,255,255,.95));
  pointer-events: none;
  opacity: 0;
  transition: opacity .25s ease;
}
.modal-card.is-scrollable:not(.at-bottom) .modal-scroll-fade { opacity: 1; }
.modal-close {
  position: absolute;
  top: 16px; right: 18px;
  width: 40px; height: 40px;
  padding: 0;
  border: none;
  background: none;
  color: var(--c-ink);
  display: grid; place-items: center;
  box-shadow: none;
  opacity: .6;
  transition: opacity .15s, transform .15s;
}
.modal-close:hover { opacity: 1; transform: scale(1.12); box-shadow: none; }
.modal-close:active { opacity: 1; transform: scale(.95); box-shadow: none; }
/* Session image in modal (detail view) */
.modal-thumb {
  width: 100%;
  border: 2.5px solid var(--c-ink);
  border-radius: 14px;
  overflow: hidden;
  margin: 30px 0 20px;
  background: var(--c-paper-2);
}
.modal-thumb img {
  width: 100%;
  height: auto;
  object-fit: cover;
  display: block;
}
.modal-meta {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  align-items: center;
  margin-bottom: 12px;
}
.modal-meta .tag,
.modal-meta .level,
.modal-meta .hall,
.modal-meta time {
  font-family: var(--font-display);
  font-weight: 900;
  font-size: 12px;
  padding: 4px 12px;
  border-radius: 999px;
}
.modal-meta time {
  background: var(--c-ink);
  color: #fff;
  letter-spacing: .04em;
}
.modal-meta .tag { color: #fff; }
.modal-meta .level {
  background: var(--c-paper-2);
  border: 2px solid var(--c-ink);
  color: var(--c-ink);
}
.modal-meta .level.easy   { background: #31D7A0; color: #fff; border-color: #31D7A0; }
.modal-meta .level.normal { background: #F58E44; color: #fff; border-color: #F58E44; }
.modal-meta .level.hard   { background: #F174A3; color: #fff; border-color: #F174A3; }
.modal-share-btn {
  margin-left: auto;
  display: inline-flex;
  align-items: center;
  gap: 6px;
  font-family: var(--font-display);
  font-weight: 900;
  font-size: 12px;
  letter-spacing: .04em;
  padding: 4px 14px 4px 12px;
  border-radius: 999px;
  background: var(--c-ink);
  border: 2px solid var(--c-ink);
  color: #fff;
  text-decoration: none;
  cursor: pointer;
  transition: transform .12s ease, opacity .12s ease;
}
.modal-share-btn svg { width: 14px; height: 14px; fill: currentColor; }
.modal-share-btn:hover { transform: translateY(-1px); opacity: .88; }
.modal-meta .hall {
  background: var(--c-blue);
  color: #fff;
  border: 2px solid var(--c-blue);
}
.modal-card h2 {
  font-family: var(--font-display);
  font-weight: 900;
  font-size: clamp(20px, 2.4vw, 26px);
  line-height: 1.4;
  margin: 8px 0 18px;
  padding-right: 40px;
}
.modal-tags {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
  margin-bottom: 18px;
}
.modal-tags span {
  background: var(--c-paper-2);
  border: 1.5px solid var(--c-ink);
  border-radius: 6px;
  padding: 3px 10px;
  font-size: 11px;
  font-weight: 700;
  color: var(--c-ink-soft);
}
.modal-desc {
  font-size: 14px;
  line-height: 1.85;
  color: var(--c-ink-soft);
  margin-bottom: 24px;
}
.modal-desc p { margin: 0 0 12px; }
.modal-desc p:last-child { margin-bottom: 0; }
.modal-recommend {
  margin-top: 18px;
}
.modal-recommend .rec-head {
  font-family: var(--font-display);
  font-weight: 900;
  font-size: 13px;
  color: var(--c-ink);
  margin: 0 0 8px;
  letter-spacing: .02em;
}
.modal-recommend ul {
  list-style: none;
  margin: 0;
  padding: 0;
}
.modal-recommend li {
  position: relative;
  padding-left: 1.1em;
  font-size: 13px;
  line-height: 1.7;
  color: var(--c-ink-soft);
}
.modal-recommend li::before {
  content: "・";
  position: absolute;
  left: 0;
}
.modal-divider {
  border: 0;
  height: 2px;
  background: repeating-linear-gradient(90deg, var(--c-ink) 0 8px, transparent 8px 14px);
  margin: 22px 0;
  opacity: .5;
}
.modal-speakers-label {
  font-family: var(--font-display);
  font-weight: 900;
  font-size: 13px;
  letter-spacing: .04em;
  color: var(--c-ink-soft);
  margin-bottom: 14px;
  display: inline-flex;
  align-items: center;
  gap: 8px;
}
.modal-speakers-label::before {
  content: "";
  width: 24px;
  height: 3px;
  background: var(--c-pink);
  border-radius: 3px;
}
.modal-speaker {
  display: flex;
  flex-direction: column;
  gap: 12px;
  margin-bottom: 18px;
}
.modal-speaker:last-child { margin-bottom: 0; }
.modal-speaker .sp-head {
  display: flex;
  gap: 16px;
  align-items: center;
}
.modal-speaker .avatar {
  width: 100px; height: 100px;
  border-radius: 0;
  border: 0;
  background: var(--c-paper-2);
  display: grid; place-items: center;
  font-family: var(--font-latin);
  font-size: 30px;
  color: var(--c-ink);
  flex-shrink: 0;
  overflow: hidden;
}
.modal-speaker .avatar img {
  width: 100%; height: 100%;
  object-fit: cover; display: block;
}
.modal-speaker .avatar.has-photo { background: transparent; }
.modal-speaker .avatar.pink { background: var(--c-pink); color: #fff; }
.modal-speaker .avatar.yellow { background: var(--c-yellow); }
.modal-speaker .avatar.purple { background: var(--c-purple); color: #fff; }
.modal-speaker .avatar.blue { background: var(--c-blue); color: #fff; }
.modal-speaker .avatar.orange { background: var(--c-orange); color: #fff; }
.modal-speaker .avatar.green { background: var(--c-green); }
.modal-speaker .sp-name {
  font-family: var(--font-display);
  font-weight: 900;
  font-size: 15px;
}
.modal-speaker .sp-role {
  font-size: 12px;
  color: var(--c-ink-soft);
  margin: 2px 0 6px;
}
.modal-speaker .sp-bio {
  font-size: 12px;
  line-height: 1.75;
  color: var(--c-ink-soft);
}

body.modal-locked { overflow: hidden; }

/* ============================================================
   CTA banner before footer
   ============================================================ */
.cta-banner {
  background: var(--c-teal);
  color: #fff;
  position: relative;
  overflow: hidden;
}
.cta-banner-inner {
  display: grid;
  justify-content: center;
  gap: 32px;
  align-items: center;
  padding: 64px 0;
}
.cta-banner h2 {
  font-family: var(--font-display);
  font-weight: 900;
  font-size: clamp(22px, 2.8vw, 34px);
  margin: 0 0 14px;
  text-shadow: 3px 3px 0 var(--c-ink);
  line-height: 1.4;
  line-break: strict;
  overflow-wrap: anywhere;
}
.cta-banner p { font-size: 15px; margin: 0 0 22px; }
.cta-banner .countdown {
  background: #fff;
  border: 3px solid var(--c-ink);
  border-radius: 22px;
  padding: 22px;
  color: var(--c-ink);
  text-align: center;
  box-shadow: 8px 8px 0 var(--c-ink);
  transform: rotate(-2deg);
}
.cta-banner .countdown .cd-label {
  font-family: var(--font-display);
  font-weight: 900;
  font-size: 13px;
  margin-bottom: 12px;
}
.cta-banner .countdown .cd-grid {
  display: grid;
  grid-template-columns: repeat(4,1fr);
  gap: 8px;
}
.cta-banner .countdown .cd-cell {
  background: var(--c-paper-2);
  border: 2.5px solid var(--c-ink);
  border-radius: 10px;
  padding: 10px 4px;
}
.cta-banner .countdown .cd-num {
  font-family: var(--font-latin-narrow);
  font-weight: 800;
  font-size: 22px;
}
.cta-banner .countdown .cd-unit {
  font-size: 10px;
  color: var(--c-ink-soft);
}

/* ============================================================
   Footer
   ============================================================ */
.site-footer {
  background: var(--c-ink);
  color: rgba(255,255,255,.66);
  padding: 26px 0 34px;
  border-top: 1px solid rgba(255,255,255,.14);
}
.footer-inner {
  display: flex;
  flex-wrap: wrap;
  justify-content: space-between;
  align-items: center;
  gap: 16px;
  font-size: 13px;
  color: rgba(255,255,255,.66);
}
.footer-inner a { color: rgba(255,255,255,.66); }
.footer-inner a:hover { text-decoration: underline; color: #fff; }
.footer-inner .links {
  display: flex; gap: 18px; flex-wrap: wrap;
  align-items: center;
}
.footer-inner .sns {
  width: 36px; height: 36px;
  display: grid; place-items: center;
  border: 2px solid rgba(255,255,255,.4);
  border-radius: 50%;
  background: transparent;
  color: #fff;
  box-shadow: 2px 2px 0 rgba(0,0,0,.4);
  transition: transform .15s;
}
.footer-inner .sns:hover { transform: translate(-1px,-1px); box-shadow: 3px 3px 0 rgba(0,0,0,.4); border-color:#fff; }

/* ============================================================
   Mobile menu
   ============================================================ */
.mobile-menu {
  position: fixed;
  inset: 0;
  background: var(--c-teal);
  z-index: 80;
  padding: 24px;
  display: flex;
  flex-direction: column;
  color: #fff;
  /* animated open/close */
  visibility: hidden;
  opacity: 0;
  transform: translateY(-14px) scale(.99);
  transform-origin: top center;
  transition: opacity .26s ease,
              transform .34s cubic-bezier(.16,1,.3,1),
              visibility 0s linear .34s;
}
.mobile-menu.open {
  visibility: visible;
  opacity: 1;
  transform: translateY(0) scale(1);
  transition: opacity .26s ease,
              transform .4s cubic-bezier(.16,1,.3,1),
              visibility 0s;
}
.mobile-menu .top {
  display: flex;
  justify-content: space-between;
  align-items: center;
  margin-bottom: 32px;
}
.mobile-menu .brand-mark--menu {
  display: block;
  line-height: 0;
}
.mobile-menu .brand-mark--menu img {
  width: clamp(150px, 42vw, 200px);
  height: auto;
  display: block;
}
.mobile-menu #menuClose {
  /* Pinned to the exact same box/coords as the floating hamburger FAB
     so the × lands precisely where the icon was. (.mobile-menu is inset:0,
     so fixed offsets resolve to the same viewport position.) */
  position: fixed;
  top: clamp(12px, 3vw, 18px);
  right: clamp(12px, 3vw, 18px);
  width: 48px;
  height: 48px;
  display: flex;
  align-items: center;
  justify-content: center;
  background: transparent;
  border: none;
  box-shadow: none;
  padding: 0;
  color: #fff;
  font-size: 40px;
  line-height: 1;
  font-weight: 400;
  cursor: pointer;
  transition: transform .3s cubic-bezier(.16,1,.3,1);
}
.mobile-menu.open #menuClose { transform: rotate(90deg); }
.mobile-menu nav { display: grid; gap: 14px; }
.mobile-menu nav a {
  font-family: var(--font-display);
  font-weight: 900;
  font-size: 22px;
  color: #fff;
  border-bottom: 2px solid rgba(255,255,255,.25);
  padding: 10px 0;
  /* staggered entrance */
  opacity: 0;
  transform: translateY(12px);
  transition: opacity .3s ease, transform .4s cubic-bezier(.16,1,.3,1);
}
.mobile-menu.open nav a {
  opacity: 1;
  transform: translateY(0);
}
.mobile-menu.open nav a:nth-child(1) { transition-delay: .08s; }
.mobile-menu.open nav a:nth-child(2) { transition-delay: .12s; }
.mobile-menu.open nav a:nth-child(3) { transition-delay: .16s; }
.mobile-menu.open nav a:nth-child(4) { transition-delay: .20s; }
.mobile-menu.open nav a:nth-child(5) { transition-delay: .24s; }
.mobile-menu.open nav a:nth-child(6) { transition-delay: .28s; }
.mobile-menu.open nav a:nth-child(7) { transition-delay: .32s; }
@media (prefers-reduced-motion: reduce) {
  .mobile-menu,
  .mobile-menu nav a,
  .mobile-menu #menuClose { transition: none; transform: none; }
}

/* ============================================================
   Responsive
   ============================================================ */
@media (max-width: 980px) {
  .hero { padding-top: clamp(36px, 6vh, 60px); min-height: auto; }
  .hero-grid { grid-template-columns: 1fr; }
  .hero-meta { grid-template-columns: 1fr 1fr; max-width: none; }
  .kv-frame { transform: rotate(0); }
  .hero-logo { width: min(380px, 60%); transform: translate(-3%, -26%) rotate(-3deg); }
  .hero-hook { font-size: clamp(28px, 7vw, 48px); }
  .br-pc { display: none; }
  .scroll-cue { display: none; }
  .message-grid { grid-template-columns: 1fr; }
  .msg-layout { grid-template-columns: 1fr; }
  .x-feed { position: static; }
  .session-grid { grid-template-columns: repeat(2, 1fr); }
  .speaker-grid { grid-template-columns: repeat(2, 1fr); }
  .venue-grid { grid-template-columns: 1fr; }
  .cta-banner-inner { grid-template-columns: 1fr; }
  .sponsor-grid.tier-gold     { grid-template-columns: repeat(2, 1fr); }
  .sponsor-grid.tier-silver   { grid-template-columns: repeat(3, 1fr); }
  .sponsor-grid.tier-bronze   { grid-template-columns: repeat(3, 1fr); }
  .sponsor-grid.tier-media    { grid-template-columns: repeat(3, 1fr); }
  .sponsor-grid.tier-partner  { grid-template-columns: repeat(3, 1fr); }
}
@media (max-width: 640px) {
  .nav { display: none; }
  /* Header no longer needs to be a full bar just to hold one button —
     drop its scrolled background/border so the hamburger stands alone. */
  .site-header { pointer-events: none; }
  .site-header.is-scrolled {
    background: transparent;
    backdrop-filter: none;
    border-bottom: 0;
  }
  .site-header .strip { display: none; }
  .header-inner { padding: 0; }
  /* Standalone floating hamburger FAB, matching the back-to-top button */
  .menu-btn {
    pointer-events: auto;
    display: inline-flex;
    position: fixed;
    top: clamp(12px, 3vw, 18px);
    right: clamp(12px, 3vw, 18px);
    z-index: 70;
    width: 48px;
    height: 48px;
    padding: 0;
    align-items: center;
    justify-content: center;
    color: var(--c-ink);
    background: var(--c-yellow);
    border: 2.5px solid var(--c-ink);
    border-radius: 50%;
    box-shadow: var(--shadow-stamp-sm);
    transition: transform .18s cubic-bezier(.34,1.56,.64,1), box-shadow .18s;
  }
  .site-header.is-scrolled .menu-btn { color: var(--c-ink); }
  .menu-btn:active { transform: translate(2px,2px); box-shadow: 1px 1px 0 var(--c-ink); }
  .menu-btn svg { width: 24px; height: 24px; }
  .hero-meta { grid-template-columns: 1fr; }
  /* header is now a floating FAB — no bar to clear, so pull the KV right up */
  .hero { padding-top: clamp(18px, 4vh, 32px); gap: clamp(18px, 4vw, 32px); }
  /* tighten the gap between the catchphrase and the logo to ~2/3 */
  .hero { padding-bottom: clamp(34px, 5.5vh, 60px); }
  .hero-foot { padding-top: clamp(18px, 2.6vw, 34px); }
  .session-card { grid-template-columns: 1fr; gap: 0; padding: 14px 16px; }
  .session-card .session-thumb { display: none; }
  .session-card .meta { grid-column: 1; padding-top: 0; margin-bottom: 8px; }
  .session-card h4 { grid-column: 1; font-size: 17px; line-height: 1.4; margin: 0 0 6px; }
  .session-card .speakers { grid-column: 1; font-size: 13px; line-height: 1.5; min-height: 0; margin: 0 0 12px; }
  /* button flows into its own row, right-aligned, so it never overlaps text */
  .session-detail-btn {
    position: static;
    grid-column: 1;
    grid-row: 4;
    justify-self: end;
    font-size: 12px;
    padding: 6px 14px;
  }
  /* Ghost "Coming Soon" cards: drop the striped thumb, center the label,
     and give it generous vertical breathing room */
  .session-ghost { padding: 0; }
  .session-ghost .ghost-thumb { display: none; }
  .session-ghost .ghost-title {
    grid-column: 1;
    grid-row: 1;
    justify-self: center;
    text-align: center;
    padding: 40px 16px;
    font-size: 18px;
  }
  .speaker-grid { grid-template-columns: 1fr; }
  .news-row { flex-wrap: wrap; gap: 8px; }
  .sponsor-grid.tier-platinum { grid-template-columns: 1fr; }
  .sponsor-grid.tier-gold     { grid-template-columns: repeat(2, 1fr); }
  .sponsor-grid.tier-silver   { grid-template-columns: repeat(2, 1fr); }
  .sponsor-grid.tier-bronze   { grid-template-columns: repeat(2, 1fr); }
  .sponsor-grid.tier-media    { grid-template-columns: repeat(2, 1fr); }
  .sponsor-grid.tier-partner  { grid-template-columns: repeat(2, 1fr); }
  .kv-frame .kv-badge { width: 80px; height: 80px; font-size: 10px; top:-14px; left:-14px;}
  .section-num { width: 8px; height: auto; font-size: 0; }
  /* tighten the price block — no need to reserve equal-height rows when stacked */
  .ticket-card .t-price-row { grid-template-rows: auto auto auto; gap: 2px; padding: 10px 0; }
  .hero-title { font-size: 28px; }
  .hero-hook { font-size: 28px; gap: 4px; }
  .hero-hook .hook-em.pink { font-size: 1.1em; }
  .bm-text { font-size: 10px; } .bm-year { font-size: 16px; }
}

/* ============================================================
   News article pages
   ============================================================ */
.article {
  background: var(--c-paper-2);
  padding: 140px 0 80px;
  min-height: 60vh;
  position: relative;
}
.article::before {
  content: "";
  position: absolute;
  inset: 0;
  background-image: radial-gradient(var(--c-ink) 1.2px, transparent 1.4px);
  background-size: 22px 22px;
  opacity: .05;
  pointer-events: none;
}
.article-wrap {
  position: relative;
  max-width: 780px;
  margin: 0 auto;
  padding: 0 24px;
}
.article-breadcrumb {
  font-family: var(--font-latin);
  font-size: 12px;
  font-weight: 700;
  letter-spacing: .12em;
  text-transform: uppercase;
  color: var(--c-ink-soft);
  display: flex;
  align-items: center;
  gap: 10px;
  margin-bottom: 22px;
  flex-wrap: wrap;
}
.article-breadcrumb a {
  color: var(--c-ink);
  border-bottom: 2px solid transparent;
  transition: border-color .15s;
}
.article-breadcrumb a:hover { border-bottom-color: var(--c-yellow); }
.article-breadcrumb .sep { opacity: .5; }
.article-head {
  background: #fff;
  border: 3px solid var(--c-ink);
  border-radius: var(--r-card);
  box-shadow: var(--shadow-stamp);
  padding: 36px 36px 30px;
  margin-bottom: 28px;
  position: relative;
}
.article-head .meta-row {
  display: flex;
  align-items: center;
  gap: 14px;
  flex-wrap: wrap;
  margin-bottom: 18px;
}
.article-head .date {
  font-family: var(--font-latin);
  font-size: 14px;
  font-weight: 700;
  letter-spacing: .04em;
  color: var(--c-ink);
}
.article-head .badge {
  font-family: var(--font-display);
  font-weight: 900;
  font-size: 12px;
  letter-spacing: .08em;
  padding: 5px 12px;
  border-radius: 999px;
  border: 2px solid var(--c-ink);
}
.article-head .badge.event   { background: var(--c-yellow); }
.article-head .badge.session { background: var(--c-pink); color: #fff; }
.article-head .badge.sponsor { background: var(--c-blue); color: #fff; }
.article-head h1 {
  font-family: var(--font-display);
  font-weight: 900;
  font-size: clamp(24px, 3.4vw, 32px);
  line-height: 1.4;
  letter-spacing: .01em;
  color: var(--c-ink);
  margin: 0;
  line-break: strict;
  overflow-wrap: anywhere;
  padding-right: 70px; /* leave room for stamp */
}
.article-head .stamp {
  position: absolute;
  top: -18px;
  right: -16px;
  width: 84px;
  height: 84px;
  border-radius: 50%;
  background: var(--c-yellow);
  border: 3px solid var(--c-ink);
  box-shadow: 4px 4px 0 var(--c-ink);
  display: grid;
  place-items: center;
  font-family: var(--font-display);
  font-weight: 900;
  font-size: 11px;
  line-height: 1.25;
  color: var(--c-ink);
  text-align: center;
  transform: rotate(-10deg);
}
.article-body {
  background: #fff;
  border: 3px solid var(--c-ink);
  border-radius: var(--r-card);
  box-shadow: var(--shadow-stamp);
  padding: 38px 40px;
  font-size: 16px;
  line-height: 1.95;
  color: var(--c-ink);
}
.article-body > * + * { margin-top: 1.2em; }
.article-body h2 {
  font-family: var(--font-display);
  font-weight: 900;
  font-size: 22px;
  line-height: 1.45;
  padding-bottom: 10px;
  border-bottom: 3px solid var(--c-ink);
  margin-top: 2em;
}
.article-body h2::before {
  content: "";
  display: inline-block;
  width: 12px; height: 12px;
  background: var(--c-yellow);
  border: 2px solid var(--c-ink);
  margin-right: 10px;
  transform: translateY(-2px) rotate(-8deg);
}
.article-body h3 {
  font-family: var(--font-display);
  font-weight: 800;
  font-size: 17px;
  margin-top: 1.5em;
  color: var(--c-ink);
}
.article-body p { margin: 0; }
.article-body strong { background: linear-gradient(transparent 60%, var(--c-yellow) 60%); padding: 0 2px; }
.article-body ul, .article-body ol { padding-left: 1.2em; }
.article-body li { margin-bottom: .3em; }
.article-body a {
  color: var(--c-ink);
  border-bottom: 2px solid var(--c-pink);
  font-weight: 700;
}
.article-body a:hover { background: var(--c-yellow); }
.article-body .callout {
  background: var(--c-paper);
  border: 2.5px solid var(--c-ink);
  border-radius: 14px;
  padding: 18px 20px;
  box-shadow: 4px 4px 0 var(--c-ink);
  font-size: 15px;
  font-weight: 700;
  display: flex;
  gap: 14px;
  align-items: flex-start;
  line-height: 1.7;
}
.article-body .callout .ico {
  font-family: var(--font-display);
  font-weight: 900;
  background: var(--c-pink);
  color: #fff;
  width: 32px; height: 32px;
  border-radius: 50%;
  display: grid; place-items: center;
  border: 2px solid var(--c-ink);
  flex-shrink: 0;
  font-size: 14px;
}
.article-body .info-grid {
  display: grid;
  grid-template-columns: 130px 1fr;
  gap: 10px 18px;
  border: 2px dashed var(--c-ink);
  border-radius: 12px;
  padding: 18px 22px;
  background: var(--c-paper);
  font-size: 14.5px;
}
.article-body .info-grid dt {
  font-family: var(--font-display);
  font-weight: 900;
  font-size: 12px;
  letter-spacing: .06em;
  color: var(--c-ink-soft);
  padding-top: 4px;
}
.article-body .info-grid dd { margin: 0; font-weight: 700; }

.article-nav {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 14px;
  margin-top: 32px;
}
.article-nav a {
  background: #fff;
  border: 2.5px solid var(--c-ink);
  border-radius: 14px;
  box-shadow: var(--shadow-stamp-sm);
  padding: 14px 18px;
  color: var(--c-ink);
  transition: transform .15s, box-shadow .15s;
  display: block;
}
.article-nav a:hover { transform: translate(-2px,-2px); box-shadow: 6px 6px 0 var(--c-yellow); }
.article-nav .dir {
  font-family: var(--font-latin);
  font-size: 11px;
  font-weight: 700;
  letter-spacing: .15em;
  color: var(--c-ink-soft);
}
.article-nav .ttl {
  font-weight: 700;
  font-size: 13.5px;
  line-height: 1.5;
  margin-top: 4px;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
}
.article-nav .next { text-align: right; }
.article-nav .disabled { opacity: .35; pointer-events: none; }

.article-back {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  margin-top: 36px;
  padding: 12px 22px;
  background: var(--c-ink);
  color: #fff;
  border: 2.5px solid var(--c-ink);
  border-radius: 999px;
  box-shadow: 4px 4px 0 var(--c-yellow);
  font-weight: 700;
  font-size: 14px;
  transition: transform .15s, box-shadow .15s;
}
.article-back:hover { transform: translate(-2px,-2px); box-shadow: 6px 6px 0 var(--c-yellow); }

.news-more {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  margin-top: 22px;
  font-family: var(--font-display);
  font-weight: 900;
  font-size: 14px;
  color: var(--c-ink);
  border-bottom: 3px solid var(--c-yellow);
  padding-bottom: 2px;
}
.news-more:hover { border-bottom-color: var(--c-pink); }

@media (max-width: 640px) {
  .article { padding: 110px 0 60px; }
  .article-body { padding: 26px 22px; }
  .article-head { padding: 24px 22px 22px; }
  .article-head .stamp { width: 68px; height: 68px; font-size: 10px; right: -8px; top: -14px; }
  .article-nav { grid-template-columns: 1fr; }
  .article-body .info-grid { grid-template-columns: 1fr; gap: 4px 0; }
  .article-body .info-grid dt { padding-top: 8px; }
}
