/* =========================================================
   招待状（参加者側）専用デザインレイヤー — invite.css
   web.css の後に読み込み、招待状ページだけを洗練モダンUIへ。
   幹事Navi(organizer)・web.css には一切影響しません。
   4テーマ(clean/bloom/formal/night)はすべて維持します。
   ========================================================= */

:root {
  --ink: #12161d;
  --quiet: #5a6673;
  --faint: #8a95a2;
  --paper: #eef1f5;
  --surface: #ffffff;
  --raised: #f7f9fb;
  --line: rgba(18, 22, 29, 0.08);
  --line-strong: rgba(18, 22, 29, 0.14);
  --teal: #0a7d78;
  --radius: 16px;
  --r-lg: 22px;
  --r-sm: 12px;
  --r-pill: 999px;
  --shadow: 0 1px 2px rgba(18, 22, 29, 0.05), 0 18px 44px -24px rgba(18, 22, 29, 0.28);
  --shadow-sm: 0 1px 2px rgba(18, 22, 29, 0.05), 0 8px 20px -12px rgba(18, 22, 29, 0.20);
  --shadow-lg: 0 2px 4px rgba(18, 22, 29, 0.04), 0 40px 80px -32px rgba(18, 22, 29, 0.30);
  --ease: cubic-bezier(0.4, 0, 0.2, 1);
}

/* ---- 下地：ごく淡いグラデーションで奥行きを出す ---- */
body.app-shell {
  background:
    radial-gradient(1200px 620px at 80% -10%, rgba(10, 125, 120, 0.06), transparent 60%),
    radial-gradient(1000px 560px at -10% 8%, rgba(184, 134, 47, 0.05), transparent 58%),
    var(--paper);
  letter-spacing: 0.01em;
}

/* 数字はタブラー（等幅）で端正に揃える */
.invite-title, .hero-date-day, .hero-date-time, .hero-info strong,
.summary-tile .value, .day-overview-card strong, .bingo-cell,
.copy-code, .schedule-time, #party-size {
  font-feature-settings: "tnum" 1, "palt" 1;
}

/* =========================================================
   トップバー（ブランド）
   ========================================================= */
.app-topbar {
  background: rgba(255, 255, 255, 0.72);
  -webkit-backdrop-filter: saturate(1.6) blur(16px);
  backdrop-filter: saturate(1.6) blur(16px);
  border-bottom: 1px solid var(--line);
  position: sticky;
}
.topbar-inner { min-height: 64px; }
.brand-mark {
  border-radius: 11px;
  background: linear-gradient(155deg, #0f8d86, #0a716b);
  color: #fff;
  letter-spacing: 0.02em;
  box-shadow: 0 8px 18px -8px rgba(10, 125, 120, 0.55), inset 0 1px 0 rgba(255,255,255,0.25);
}
.brand-copy > span:first-child { font-size: 16px; letter-spacing: 0.01em; }
.brand-copy small { color: var(--faint); letter-spacing: 0.22em; font-size: 10px; }

.app-main { padding-top: 26px; }

/* =========================================================
   パネル共通（招待状側だけ角丸・影・余白を格上げ）
   ========================================================= */
.panel {
  border-radius: var(--r-lg);
  border: 1px solid var(--line);
  box-shadow: var(--shadow);
}
.panel-body { padding: 22px; }
.stack { gap: 16px; }
.participant-grid { gap: 22px; }

.section-title { font-size: 18px; font-weight: 900; letter-spacing: 0.005em; }
.section-subtitle { color: var(--quiet); font-size: 13px; font-weight: 600; line-height: 1.5; }

/* =========================================================
   ヒーロー（招待状の顔）
   ========================================================= */
.invite-hero {
  border-radius: 26px;
  padding: 34px 34px 28px;
  border: 1px solid var(--hero-border, rgba(18,22,29,0.10));
  box-shadow: var(--shadow-lg);
}
.invite-hero::after { height: 6px; opacity: 0.95; }
.invite-hero::before { border-radius: 20px; }
.invite-hero-content { gap: 22px; }

/* 上段：種別チップ ＋ カウントダウン */
.hero-top {
  display: flex;
  align-items: center;
  gap: 10px;
  flex-wrap: wrap;
}
.hero-chip {
  min-height: 30px;
  padding: 6px 14px;
  border-radius: var(--r-pill);
  font-size: 12px;
  font-weight: 900;
  letter-spacing: 0.08em;
  box-shadow: none;
  background: var(--hero-soft, rgba(10,125,120,0.10));
  border-color: var(--hero-border, rgba(10,125,120,0.20));
  color: var(--hero-accent, var(--teal));
}
.hero-countdown {
  margin-left: auto;
  display: inline-flex;
  align-items: center;
  gap: 6px;
  min-height: 30px;
  padding: 6px 13px;
  border-radius: var(--r-pill);
  border: 1px solid var(--hero-border, rgba(10,125,120,0.20));
  background: rgba(255, 255, 255, 0.55);
  color: var(--hero-accent, var(--teal));
  font-size: 12px;
  font-weight: 900;
  letter-spacing: 0.02em;
  -webkit-backdrop-filter: blur(6px);
  backdrop-filter: blur(6px);
}
.hero-countdown b { font-size: 15px; font-weight: 950; margin: 0 1px; }
.hero-countdown .cd-l { font-size: 11px; font-weight: 800; opacity: 0.82; letter-spacing: 0.04em; }
.hero-countdown .cd-n {
  font-size: 16px; font-weight: 950; letter-spacing: 0;
  font-feature-settings: "tnum" 1;
  margin: 0 1px;
}
.hero-countdown .cd-u { font-size: 11px; font-weight: 800; opacity: 0.82; }
.hero-countdown .cd-today { font-size: 12px; font-weight: 900; letter-spacing: 0.04em; }

/* 数字＋単位（例：5,000円 / 148名）— 数字を主役に、単位は控えめに */
.qty { display: inline-flex; align-items: baseline; }
.qty-n { font-feature-settings: "tnum" 1; letter-spacing: 0; }
.qty-u {
  margin-left: 2px;
  font-size: 0.62em;
  font-weight: 800;
  opacity: 0.62;
  letter-spacing: 0.02em;
}

/* 日本語の文字組み（カーニング・自然な折り返し・行分割） */
.invite-title, .entry-copy h1 {
  font-feature-settings: "palt" 1;
  word-break: auto-phrase;
  line-break: strict;
}
.invite-for, .invite-purpose, .section-subtitle,
.section-title, .hero-date-day, .answer-copy small, .extra-copy small {
  font-feature-settings: "palt" 1;
}
.invite-purpose, .section-subtitle { line-break: strict; }
.section-subtitle { line-height: 1.6; }
.invite-for { letter-spacing: 0.06em; }
.guest-pass { letter-spacing: 0.08em; }
.hero-date-day { letter-spacing: 0.01em; }

/* 見出し */
.invite-heading { gap: 9px; }
.invite-for {
  display: inline-flex;
  align-items: center;
  gap: 9px;
  font-size: 13px;
  font-weight: 850;
  letter-spacing: 0.04em;
  color: var(--hero-accent, var(--teal));
}
.invite-for::before {
  content: "";
  width: 22px;
  height: 1.5px;
  border-radius: 2px;
  background: currentColor;
  opacity: 0.5;
}
.invite-title {
  font-size: clamp(32px, 4.6vw, 50px);
  line-height: 1.1;
  font-weight: 950;
  letter-spacing: -0.01em;
}
.invite-purpose { font-size: 14px; opacity: 0.66; font-weight: 650; }

/* 日時を主役に：大きな日付バー */
.hero-datebar {
  display: flex;
  align-items: center;
  gap: 18px;
  padding: 18px 20px;
  border-radius: var(--r-lg);
  border: 1px solid var(--hero-border, rgba(18,22,29,0.08));
  background:
    linear-gradient(180deg, rgba(255,255,255,0.95), rgba(255,255,255,0.72));
  box-shadow: inset 0 1px 0 rgba(255,255,255,0.7), 0 16px 34px -22px rgba(18,22,29,0.4);
  -webkit-backdrop-filter: blur(8px);
  backdrop-filter: blur(8px);
}
.invite-hero.night .hero-datebar {
  background: rgba(255, 255, 255, 0.07);
  border-color: rgba(224, 179, 91, 0.22);
  box-shadow: none;
}
.hero-date-cal {
  flex: none;
  width: 62px;
  text-align: center;
  border-radius: 14px;
  overflow: hidden;
  border: 1px solid var(--hero-border, rgba(18,22,29,0.10));
  background: #fff;
  box-shadow: 0 10px 22px -12px rgba(18,22,29,0.4);
}
.invite-hero.night .hero-date-cal { background: rgba(255,255,255,0.10); }
.hero-date-cal .m {
  display: block;
  padding: 4px 0;
  font-size: 10px;
  font-weight: 950;
  letter-spacing: 0.12em;
  color: #fff;
  background: linear-gradient(180deg, var(--hero-accent, #0f8d86), var(--hero-accent-2, #0a716b));
}
.hero-date-cal .d {
  display: block;
  padding: 6px 0 7px;
  font-size: 26px;
  line-height: 1;
  font-weight: 950;
  color: var(--ink);
}
.invite-hero.night .hero-date-cal .d { color: #fff; }
.hero-date-body { min-width: 0; }
.hero-date-day {
  display: block;
  font-size: clamp(17px, 2.2vw, 21px);
  font-weight: 950;
  line-height: 1.2;
  letter-spacing: 0.01em;
}
.hero-date-time {
  display: inline-flex;
  align-items: center;
  gap: 7px;
  margin-top: 4px;
  font-size: 13px;
  font-weight: 800;
  color: currentColor;
  opacity: 0.7;
}
.hero-date-time::before {
  content: "";
  width: 6px; height: 6px;
  border-radius: 50%;
  background: var(--hero-accent, var(--teal));
}

/* 情報タイル（会場・会費） */
.hero-info-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 14px; }
.hero-info {
  min-height: 0;
  padding: 16px 18px;
  border-radius: var(--r-lg);
  border: 1px solid var(--hero-border, rgba(18,22,29,0.07));
  background: linear-gradient(180deg, rgba(255,255,255,0.92), rgba(255,255,255,0.7));
  box-shadow: 0 16px 32px -24px rgba(18,22,29,0.4), inset 0 1px 0 rgba(255,255,255,0.7);
}
.hero-info::before { height: 3px; opacity: 0.9; }
.hero-info .icon { font-size: 11px; letter-spacing: 0.1em; opacity: 0.9; }
.hero-info strong { margin: 7px 0 3px; font-size: clamp(17px, 1.9vw, 21px); }
.hero-info span { font-size: 12px; opacity: 0.6; }

/* ゲストパス（下段） */
.guest-pass {
  margin-top: 2px;
  padding-top: 18px;
  border-top: 1px dashed var(--hero-border, rgba(18,22,29,0.16));
  font-size: 12px;
  letter-spacing: 0.02em;
  opacity: 0.9;
}
.guest-pass span:last-child {
  min-height: 28px;
  padding: 5px 12px;
  letter-spacing: 0.06em;
}

/* =========================================================
   招待状の確認（サマリー）
   ========================================================= */
.invite-summary-panel .panel-body,
.rich-answer-panel .panel-body {
  background:
    radial-gradient(circle at 96% 0%, rgba(10,125,120,0.07), transparent 34%),
    linear-gradient(180deg, #ffffff, #fbfdfc);
}
.summary-badge, .answer-current-pill, .inline-section-heading span {
  border-radius: var(--r-pill);
  font-weight: 900;
  letter-spacing: 0.02em;
}
.invite-summary-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; }
.summary-tile {
  min-height: 0;
  padding: 15px 16px;
  border-radius: var(--radius);
  border: 1px solid var(--line);
  background: #fff;
  box-shadow: 0 12px 26px -20px rgba(18,22,29,0.35);
}
.summary-tile::before { height: 3px; opacity: 0.9; }
.summary-tile .label {
  font-size: 11px;
  font-weight: 850;
  letter-spacing: 0.06em;
  color: var(--faint);
  text-transform: none;
}
.summary-tile .value { margin-top: 6px; font-size: 18px; font-weight: 900; line-height: 1.2; }

/* 「当日の流れ」ボタン：横長（全幅）＋開閉トグル */
.day-button {
  width: 100%;
  min-height: 56px;
  border-radius: var(--radius);
  font-size: 15px;
  letter-spacing: 0.02em;
}
.day-button::after { transition: transform 0.22s var(--ease); }
.day-button.is-open::after { transform: rotate(180deg); }
.day-button .button-row,
.button-row:has(> .day-button) { width: 100%; }

/* =========================================================
   出欠回答パネル
   ========================================================= */
.answer-panel { top: 84px; }
.answer-intro .section-title { font-size: 19px; }

.answer-options { gap: 11px; }
.answer-option {
  min-height: 76px;
  grid-template-columns: 46px minmax(0, 1fr) 22px;
  border-radius: var(--radius);
  border: 1.5px solid var(--line);
  background: #fff;
  box-shadow: 0 10px 24px -18px rgba(18,22,29,0.32);
  padding: 14px 16px;
}
.answer-option::after {
  content: "";
  width: 22px; height: 22px;
  align-self: center;
  border-radius: 50%;
  border: 2px solid var(--line-strong);
  background: transparent;
  transition: border-color 0.18s var(--ease), background 0.18s var(--ease);
}
.answer-option[aria-pressed="true"]::after {
  border-color: rgba(255,255,255,0.85);
  background:
    radial-gradient(circle at center, #fff 0 4.5px, transparent 5px),
    transparent;
}
.answer-option[aria-pressed="true"] {
  box-shadow: 0 16px 34px -16px rgba(18,22,29,0.4), inset 0 1px 0 rgba(255,255,255,0.2);
  transform: translateY(-1px);
}
.answer-mark {
  width: 46px; height: 46px;
  border-radius: 14px;
  font-size: 20px;
}
.answer-copy strong { font-size: 17px; }
.answer-copy small { font-size: 12px; font-weight: 750; }

.answer-form-card {
  border-radius: var(--radius);
  border: 1px solid var(--line);
  background: var(--raised);
  box-shadow: inset 0 1px 0 rgba(255,255,255,0.6);
}
.answer-form-card .field label {
  font-size: 12px; font-weight: 850; letter-spacing: 0.02em; color: var(--quiet);
}
.answer-form-card .input, .answer-form-card .textarea {
  border-radius: var(--r-sm);
  border-color: var(--line);
  background: #fff;
}
#party-size { font-size: 17px; font-weight: 800; }

.submit-answer-button {
  min-height: 56px;
  border-radius: var(--radius);
  font-size: 16px;
  letter-spacing: 0.04em;
  background: linear-gradient(180deg, #12928a, #0a7d78);
  box-shadow: 0 20px 38px -18px rgba(10,125,120,0.6), inset 0 1px 0 rgba(255,255,255,0.24);
}

.response-tools {
  border-radius: var(--radius);
  border: 1px solid var(--line);
  background: var(--raised);
}
.response-tools summary { font-weight: 850; letter-spacing: 0.02em; }
.copy-code { border-radius: var(--r-sm); background: #fff; }

/* =========================================================
   入力（token/group）画面
   ========================================================= */
.entry-grid { gap: 22px; }
.entry-card {
  border-radius: var(--r-lg);
  box-shadow: var(--shadow-lg);
}
.entry-copy h1 { letter-spacing: -0.01em; }
.entry-mark {
  border-radius: 15px;
  background: linear-gradient(155deg, #0f8d86, #0a716b);
  color: #fff;
  box-shadow: 0 14px 30px -14px rgba(10,125,120,0.6), inset 0 1px 0 rgba(255,255,255,0.25);
}
.entry-eyebrow { letter-spacing: 0.16em; color: var(--teal); }
.entry-token-input, .group-name-input { border-radius: var(--r-sm); }
.entry-note {
  border-radius: var(--r-sm);
  background: rgba(255,255,255,0.8);
  border-color: var(--line);
}
.candidate-button { border-radius: var(--radius); }
.list-row { border-radius: var(--r-sm); }
.row-icon { border-radius: 10px; }

/* =========================================================
   当日ビュー（スケジュール・ビンゴ）
   ========================================================= */
.inline-day-panel .panel-body {
  background:
    radial-gradient(circle at 92% 0%, rgba(10,125,120,0.08), transparent 32%),
    linear-gradient(180deg, #ffffff, #fbfdfc);
}
.inline-day-icon { border-radius: 15px; }
.day-overview-card, .inline-day-section {
  border-radius: var(--radius);
  border: 1px solid var(--line);
}
.day-overview-card::before, .inline-day-section::before { height: 3px; }
.inline-day-section .schedule-item { border-radius: var(--r-sm); }
.bingo-cell { border-radius: 11px; }
.bingo-banner {
  border-radius: var(--radius);
  letter-spacing: 0.06em;
}

/* =========================================================
   マイクロインタラクション（洗練された触感）
   ========================================================= */
.answer-option, .list-row, .candidate-button, .day-button,
.hero-info, .summary-tile {
  transition: transform 0.16s var(--ease), box-shadow 0.2s var(--ease),
    border-color 0.2s var(--ease), background-color 0.2s var(--ease);
}
.answer-option:not([aria-pressed="true"]):hover {
  border-color: var(--line-strong);
  transform: translateY(-1px);
  box-shadow: 0 16px 30px -18px rgba(18,22,29,0.4);
}
.day-button:hover { transform: translateY(-1px); }
.submit-answer-button:hover { box-shadow: 0 24px 42px -16px rgba(10,125,120,0.66); }

/* 入場アニメーション（控えめ・モーション低減で無効化） */
@keyframes inv-rise {
  from { opacity: 0; transform: translateY(10px); }
  to   { opacity: 1; transform: translateY(0); }
}
.invite-hero, .invite-summary-panel, .rich-answer-panel,
.entry-card, .entry-recent-panel {
  animation: inv-rise 0.5s var(--ease) both;
}
.invite-summary-panel { animation-delay: 0.06s; }
.rich-answer-panel { animation-delay: 0.12s; }
@media (prefers-reduced-motion: reduce) {
  .invite-hero, .invite-summary-panel, .rich-answer-panel,
  .entry-card, .entry-recent-panel { animation: none; }
}

/* =========================================================
   ダークテーマ調整（システム連動）
   ========================================================= */
:root[data-theme="dark"], :root:not([data-theme="light"]) {
}
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) {
    --ink: #eef1f6;
    --quiet: #9aa6b4;
    --faint: #7a8593;
    --paper: #0d1117;
    --surface: #161b22;
    --raised: #1c222b;
    --line: rgba(255,255,255,0.10);
    --line-strong: rgba(255,255,255,0.20);
    --shadow: 0 1px 2px rgba(0,0,0,0.4), 0 24px 56px -28px rgba(0,0,0,0.7);
    --shadow-sm: 0 1px 2px rgba(0,0,0,0.4), 0 10px 24px -14px rgba(0,0,0,0.6);
    --shadow-lg: 0 2px 4px rgba(0,0,0,0.4), 0 44px 88px -36px rgba(0,0,0,0.75);
  }
  body.app-shell {
    background:
      radial-gradient(1200px 620px at 80% -10%, rgba(46,196,188,0.08), transparent 60%),
      var(--paper);
  }
  .app-topbar { background: rgba(13,17,23,0.72); }
  .hero-date-cal, .summary-tile { background: var(--surface); }
  .answer-form-card .input, .answer-form-card .textarea,
  .copy-code, .answer-option { background: var(--raised); }
}

/* =========================================================
   レスポンシブ調整
   ========================================================= */
@media (max-width: 980px) {
  .answer-panel { top: 0; }
}
@media (max-width: 720px) {
  .invite-hero { padding: 24px 20px 22px; border-radius: 22px; }
  .invite-title { font-size: clamp(28px, 8.5vw, 38px); }
  .hero-datebar { gap: 14px; padding: 16px; }
  .hero-date-cal { width: 56px; }
  .hero-info-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .hero-info:first-child { grid-column: auto; }
  .invite-summary-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .panel-body { padding: 18px; }
  .hero-countdown { margin-left: auto; }
}
@media (max-width: 380px) {
  .invite-summary-grid { grid-template-columns: 1fr; }
}

/* =========================================================
   ★ PREMIUM LAYER — 高級感の底上げ ＋ 4テーマの作り込み
   ========================================================= */
:root {
  --serif: "Hiragino Mincho ProN", "Hiragino Mincho Pro", "YuMincho",
    "Yu Mincho", "Noto Serif JP", "Times New Roman", serif;
  --gold: #b8862f;
  --gold-soft: rgba(184, 134, 47, 0.12);
  --foil: linear-gradient(100deg,
    #9c7a2a 0%, #d8b45f 20%, #f6e6b0 38%, #ffffff 47%,
    #f6e6b0 56%, #d8b45f 74%, #9c7a2a 100%);
}

/* ヒーロー：一段深い陰影と内枠 */
.invite-hero {
  box-shadow:
    0 2px 4px rgba(18, 22, 29, 0.05),
    0 44px 90px -34px rgba(18, 22, 29, 0.42),
    inset 0 1px 0 rgba(255, 255, 255, 0.6);
}
.invite-title { text-wrap: balance; }

/* ---------- clean（端正・モダン teal） ---------- */
.invite-hero.clean {
  background:
    radial-gradient(120% 92% at 92% -12%, rgba(15, 141, 134, 0.15), transparent 42%),
    radial-gradient(120% 82% at -10% 112%, rgba(184, 134, 47, 0.10), transparent 46%),
    linear-gradient(160deg, #ffffff 0%, #f4fbfa 55%, #edf6f2 100%);
}
.invite-hero.clean::after {
  height: 5px;
  background: linear-gradient(90deg, #0f8d86, #3fae9f 45%, #c9a24a 75%, #b8862f);
}

/* ---------- bloom（祝宴・暖色） ---------- */
.invite-hero.bloom {
  background:
    radial-gradient(120% 92% at 90% -12%, rgba(201, 79, 67, 0.17), transparent 44%),
    radial-gradient(120% 85% at -8% 112%, rgba(199, 148, 66, 0.17), transparent 48%),
    linear-gradient(158deg, #fffaf6 0%, #fff1e8 52%, #fdf5ec 100%);
}
.invite-hero.bloom::after {
  height: 5px;
  background: linear-gradient(90deg, #d8574a, #e08a4e 48%, #e8c877 80%, #c99442);
}
.invite-hero.bloom .hero-datebar {
  background: linear-gradient(180deg, rgba(255, 255, 255, 0.96), rgba(255, 249, 244, 0.8));
}

/* ---------- formal（格式・明朝体＋金箔） ---------- */
.invite-hero.formal {
  background:
    radial-gradient(120% 92% at 90% -12%, rgba(78, 49, 95, 0.16), transparent 44%),
    radial-gradient(120% 85% at -8% 112%, rgba(181, 138, 53, 0.17), transparent 48%),
    linear-gradient(160deg, #fffdf8 0%, #faf5ee 55%, #f3ecf5 100%);
}
.invite-hero.formal::before {
  border-color: rgba(181, 138, 53, 0.4);
  box-shadow: inset 0 0 0 1px rgba(181, 138, 53, 0.18);
}
.invite-hero.formal::after { height: 5px; background: var(--foil); }
.invite-hero.formal .invite-title,
.invite-hero.formal .invite-for {
  font-family: var(--serif);
  font-weight: 800;
  letter-spacing: 0.03em;
}
.invite-hero.formal .invite-title { line-height: 1.24; }
.invite-hero.formal .hero-date-day { font-family: var(--serif); font-weight: 800; }

/* ---------- night（夜会・ダーク＋金の輝き） ---------- */
.invite-hero.night {
  background:
    radial-gradient(120% 92% at 88% -10%, rgba(224, 179, 91, 0.22), transparent 40%),
    radial-gradient(120% 80% at -6% 112%, rgba(113, 137, 184, 0.22), transparent 46%),
    linear-gradient(155deg, #0d1420 0%, #141d2e 46%, #241b31 100%);
  box-shadow:
    0 2px 4px rgba(0, 0, 0, 0.4),
    0 48px 96px -34px rgba(0, 0, 0, 0.75),
    inset 0 1px 0 rgba(255, 255, 255, 0.08);
}
.invite-hero.night::before {
  border-color: rgba(224, 179, 91, 0.28);
  background: rgba(255, 255, 255, 0.03);
  box-shadow: inset 0 0 0 1px rgba(224, 179, 91, 0.1);
}
.invite-hero.night::after {
  height: 5px;
  background: var(--foil);
  background-size: 200% 100%;
  box-shadow: 0 0 22px rgba(224, 179, 91, 0.4);
  animation: foil-sheen 6s linear infinite;
}
@keyframes foil-sheen { to { background-position: -200% 0; } }
.invite-hero.night .invite-title,
.invite-hero.night .invite-for { font-family: var(--serif); }
.invite-hero.night .invite-title {
  font-weight: 800;
  letter-spacing: 0.02em;
  text-shadow: 0 1px 30px rgba(224, 179, 91, 0.24);
}
.invite-hero.night .hero-date-day { font-family: var(--serif); font-weight: 800; }
.invite-hero.night .hero-countdown {
  background: rgba(224, 179, 91, 0.12);
  border-color: rgba(224, 179, 91, 0.32);
  color: #ecc877;
}
@media (prefers-reduced-motion: reduce) {
  .invite-hero.night::after { animation: none; }
}

/* =========================================================
   予定とアクセス（カレンダー・地図・会場情報）
   ========================================================= */
.extras-panel .panel-body {
  background:
    radial-gradient(circle at 96% 0%, rgba(10, 125, 120, 0.06), transparent 34%),
    linear-gradient(180deg, #ffffff, #fbfdfc);
}
.extras-heading .section-title { font-size: 18px; }
.extras-actions {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 12px;
}
.extra-button {
  display: grid;
  grid-template-columns: 46px minmax(0, 1fr);
  gap: 13px;
  align-items: center;
  text-align: left;
  min-height: 68px;
  padding: 13px 15px;
  border-radius: var(--radius);
  border: 1px solid var(--line);
  background: #fff;
  color: var(--ink);
  box-shadow: 0 12px 26px -20px rgba(18, 22, 29, 0.4);
}
.extra-ic {
  width: 46px;
  height: 46px;
  display: grid;
  place-items: center;
  border-radius: 13px;
  font-size: 20px;
  background: var(--teal-soft, rgba(10, 125, 120, 0.1));
}
.map-button .extra-ic { background: var(--gold-soft); }
.extra-copy { min-width: 0; display: grid; gap: 2px; }
.extra-copy strong { font-size: 15px; font-weight: 900; }
.extra-copy small {
  color: var(--quiet);
  font-size: 12px;
  font-weight: 700;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.extra-button:hover {
  transform: translateY(-1px);
  border-color: var(--line-strong);
  box-shadow: 0 18px 34px -18px rgba(18, 22, 29, 0.44);
}
.extra-button:active { transform: translateY(0); }
.extra-button, .ghost-mini, .gcal-link {
  transition: transform 0.16s var(--ease), box-shadow 0.2s var(--ease),
    border-color 0.2s var(--ease), background-color 0.2s var(--ease);
}

.extras-foot {
  display: flex;
  align-items: center;
  gap: 12px;
  flex-wrap: wrap;
}
.gcal-link {
  color: var(--teal);
  font-size: 13px;
  font-weight: 850;
  cursor: pointer;
  text-underline-offset: 3px;
}
.gcal-link:hover { text-decoration: underline; }
.ghost-mini {
  margin-left: auto;
  min-height: 34px;
  padding: 6px 13px;
  border-radius: var(--r-pill);
  border: 1px solid var(--line);
  background: var(--raised);
  color: var(--quiet);
  font-size: 12px;
  font-weight: 850;
}
.ghost-mini:hover { border-color: var(--line-strong); color: var(--ink); }

.extras-meta {
  display: grid;
  gap: 1px;
  border-radius: var(--r-sm);
  overflow: hidden;
  border: 1px solid var(--line);
  background: var(--line);
}
.meta-row {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 14px;
  padding: 12px 14px;
  background: #fff;
}
.meta-row span {
  flex: none;
  color: var(--faint);
  font-size: 12px;
  font-weight: 850;
  letter-spacing: 0.04em;
}
.meta-row strong {
  min-width: 0;
  text-align: right;
  color: var(--ink);
  font-size: 14px;
  font-weight: 850;
  overflow-wrap: anywhere;
}
.meta-row.responded strong { color: #1f9a5a; }

/* =========================================================
   出席確定の紙吹雪
   ========================================================= */
.celebrate-canvas {
  position: fixed;
  inset: 0;
  z-index: 60;
  pointer-events: none;
}

@media (max-width: 720px) {
  .extras-actions { grid-template-columns: 1fr; }
}

/* =========================================================
   ★★ FULL-PAGE THEME SYSTEM — ページ全体を1つの招待状として統一
   web.css のデザイントークンをテーマ単位で上書きし、
   背景・パネル・入力・ボタン・バッジまで一括で色づけする。
   ========================================================= */
body {
  --accent: #0a7d78;
  --accent-2: #12928a;
  --accent-ink: #ffffff;
}

/* アクセント駆動のコンポーネント（全テーマ共通の骨格） */
.primary-button,
.submit-answer-button {
  background: linear-gradient(180deg, var(--accent-2), var(--accent));
  color: var(--accent-ink);
  box-shadow: 0 20px 38px -18px color-mix(in srgb, var(--accent) 62%, transparent),
    inset 0 1px 0 rgba(255, 255, 255, 0.22);
}
.primary-button:hover,
.submit-answer-button:hover {
  box-shadow: 0 24px 44px -16px color-mix(in srgb, var(--accent) 70%, transparent);
}
.brand-mark {
  background: linear-gradient(155deg, var(--accent-2), var(--accent));
  color: var(--accent-ink);
}
.summary-badge,
.answer-current-pill,
.inline-section-heading span {
  background: var(--teal-soft);
  color: var(--teal);
  border-color: var(--teal-border);
}
.answer-mark {
  background: var(--teal-soft);
  color: var(--teal);
}
.day-button {
  border-color: var(--teal-border);
  background: linear-gradient(180deg, color-mix(in srgb, var(--surface) 92%, transparent), var(--teal-soft));
  color: var(--teal);
}
.summary-tile::before,
.day-overview-card::before,
.inline-day-section::before {
  background: linear-gradient(90deg, var(--accent), var(--gold));
}
.summary-tile,
.answer-option,
.extra-button,
.hero-date-cal,
.answer-form-card .input,
.answer-form-card .textarea,
.copy-code {
  background: var(--surface);
}
.meta-row { background: var(--surface); }
.extras-meta { background: var(--line); }
.answer-form-card {
  background: color-mix(in srgb, var(--surface) 82%, var(--paper));
}

/* 当日ビューの面もトークン化（全テーマで整合、nightは自動でダーク） */
.day-overview-card,
.inline-day-section {
  background: linear-gradient(180deg, var(--surface), color-mix(in srgb, var(--surface) 86%, var(--paper)));
}
.inline-day-section .schedule-item {
  background: color-mix(in srgb, var(--surface) 84%, var(--paper));
}
.inline-day-section .schedule-time { background: var(--teal-soft); color: var(--teal); }
.inline-day-icon {
  background: linear-gradient(180deg, var(--teal-soft), var(--gold-soft));
  color: var(--teal);
}
.bingo-head span { color: var(--teal); }
.bingo-cell.free { background: var(--gold-soft); color: var(--gold); }
.bingo-cell.marked { background: var(--accent); color: var(--accent-ink); border-color: var(--accent); }

/* ページ下地はテーマの淡いグラデーション */
body.app-shell { transition: background-color 0.3s var(--ease); }

/* ---------- clean（既定・teal / 明るく端正） ---------- */
body.theme-clean {
  --accent: #0a7d78; --accent-2: #12928a; --accent-ink: #fff;
  background:
    radial-gradient(1100px 560px at 82% -8%, rgba(10, 125, 120, 0.07), transparent 60%),
    radial-gradient(900px 520px at -8% 10%, rgba(184, 134, 47, 0.05), transparent 58%),
    #eef2f4;
}

/* ---------- bloom（祝宴・暖色で通す） ---------- */
body.theme-bloom {
  --paper: #fdf5ef; --surface: #fffaf5; --raised: #fdf1e8;
  --ink: #2a1c17; --quiet: #7c6455; --faint: #a08b7c;
  --line: rgba(120, 70, 45, 0.10); --line-strong: rgba(120, 70, 45, 0.18);
  --teal: #c24436; --teal-soft: rgba(194, 68, 54, 0.10); --teal-border: rgba(194, 68, 54, 0.24);
  --gold: #bf8a2e;
  --accent: #c24436; --accent-2: #d8574a; --accent-ink: #fff;
  background:
    radial-gradient(1100px 560px at 84% -8%, rgba(201, 79, 67, 0.10), transparent 58%),
    radial-gradient(900px 520px at -8% 12%, rgba(199, 148, 66, 0.10), transparent 56%),
    #fbf1e9;
}

/* ---------- formal（格式・クリーム＋紫金＋明朝） ---------- */
body.theme-formal {
  --paper: #f8f4ee; --surface: #fffdf9; --raised: #f7f1ea;
  --ink: #241a2b; --quiet: #6a5c72; --faint: #948aa0;
  --line: rgba(60, 40, 75, 0.10); --line-strong: rgba(60, 40, 75, 0.18);
  --teal: #5a3b6e; --teal-soft: rgba(90, 59, 110, 0.10); --teal-border: rgba(90, 59, 110, 0.24);
  --gold: #b58a35;
  --accent: #5a3b6e; --accent-2: #6f4a86; --accent-ink: #fff;
  background:
    radial-gradient(1100px 560px at 84% -8%, rgba(78, 49, 95, 0.09), transparent 58%),
    radial-gradient(900px 520px at -8% 12%, rgba(181, 138, 53, 0.10), transparent 56%),
    #f5efe6;
}
body.theme-formal .section-title,
body.theme-formal .inline-section-heading h3,
body.theme-formal .empty-state strong,
body.theme-formal .extras-heading .section-title {
  font-family: var(--serif);
  font-weight: 800;
  letter-spacing: 0.02em;
}
body.theme-formal .summary-tile::before,
body.theme-formal .day-overview-card::before,
body.theme-formal .inline-day-section::before {
  background: var(--foil);
}

/* ---------- night（夜会・全面ダーク＋金） ---------- */
body.theme-night {
  --paper: #0b111b; --surface: #151d2b; --raised: #1c2637;
  --ink: #eef2f7; --quiet: #a9b4c4; --faint: #7e8ba0;
  --line: rgba(255, 255, 255, 0.10); --line-strong: rgba(255, 255, 255, 0.22);
  --teal: #e6c06a; --teal-soft: rgba(224, 179, 91, 0.14); --teal-border: rgba(224, 179, 91, 0.32);
  --gold: #e0b35b;
  --accent: #d3ac52; --accent-2: #e8c26a; --accent-ink: #17202f;
  --shadow: 0 1px 2px rgba(0, 0, 0, 0.4), 0 30px 64px -30px rgba(0, 0, 0, 0.72);
  color-scheme: dark;
  background:
    radial-gradient(1100px 600px at 84% -10%, rgba(224, 179, 91, 0.10), transparent 56%),
    radial-gradient(950px 560px at -8% 12%, rgba(113, 137, 184, 0.12), transparent 56%),
    #0b111b;
}
body.theme-night .app-topbar {
  background: rgba(11, 17, 27, 0.72);
  border-bottom-color: rgba(255, 255, 255, 0.08);
}
body.theme-night .brand-copy small { color: var(--faint); }
/* 白ベタ面をダーク面へ */
body.theme-night .invite-summary-panel .panel-body,
body.theme-night .rich-answer-panel .panel-body,
body.theme-night .extras-panel .panel-body,
body.theme-night .inline-day-panel .panel-body {
  background: linear-gradient(180deg, var(--surface), #121a27);
}
body.theme-night .answer-form-card {
  background: rgba(255, 255, 255, 0.04);
  border-color: rgba(255, 255, 255, 0.09);
}
body.theme-night .response-tools { background: rgba(255, 255, 255, 0.03); }
body.theme-night .primary-button,
body.theme-night .submit-answer-button {
  box-shadow: 0 22px 40px -18px rgba(224, 179, 91, 0.4), inset 0 1px 0 rgba(255, 255, 255, 0.3);
}
/* 出欠の選択色はダーク上でも視認できるよう据え置き（意味色） */
body.theme-night .answer-option:not([aria-pressed="true"]) { background: var(--raised); }

@media (prefers-reduced-motion: reduce) {
  body.app-shell { transition: none; }
}

/* =========================================================
   ★ 当日の流れ：スリム＆スマート化（ぼってり解消）
   概要=細い3分割ミニ / スケジュール=上品なタイムライン
   ========================================================= */
.inline-day-panel .panel-body { gap: 13px; }
.inline-day-title { grid-template-columns: 38px minmax(0, 1fr); gap: 11px; align-items: center; }
.inline-day-icon { width: 38px; height: 38px; border-radius: 11px; font-size: 12px; }
.inline-day-head .section-subtitle { display: none; }
.inline-day-actions .compact-button { min-height: 32px; padding: 5px 12px; font-size: 12px; }

/* 概要：大きな縦積みカード → 常に3分割のスリムなミニ */
.day-overview-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 8px; }
.day-overview-card { min-height: 0; padding: 10px 11px; border-radius: 12px; box-shadow: none; }
.day-overview-card::before { height: 2px; }
.day-overview-card span { font-size: 10px; letter-spacing: 0.03em; }
.day-overview-card strong { margin-top: 3px; font-size: 15px; font-feature-settings: "tnum" 1; }

/* セクション枠を軽く */
.inline-day-section { padding: 15px 16px; gap: 11px; border-radius: 16px; box-shadow: 0 10px 24px -20px rgba(18, 22, 29, 0.32); }
.inline-day-section::before { height: 2px; }
.inline-section-heading h3 { font-size: 16px; }

/* スケジュール：カード群 → タイムライン（細い区切り線） */
.inline-day-section .schedule-list { gap: 0; }
.inline-day-section .schedule-item {
  grid-template-columns: 52px minmax(0, 1fr);
  gap: 13px;
  align-items: baseline;
  padding: 11px 2px;
  border: 0;
  border-bottom: 1px solid var(--line);
  border-radius: 0;
  background: transparent;
  box-shadow: none;
}
.inline-day-section .schedule-item:last-child { border-bottom: 0; padding-bottom: 2px; }
.inline-day-section .schedule-time {
  min-height: 0;
  padding: 0;
  background: transparent;
  justify-content: flex-start;
  color: var(--teal);
  font-size: 13px;
  font-weight: 900;
  font-feature-settings: "tnum" 1;
}
.inline-day-section .schedule-title { font-size: 14px; line-height: 1.4; }
.inline-day-section .schedule-memo { font-size: 12px; }
