/*
 * ============================================================
 *  大成２丁目自治会 — 外部スタイルシート
 *  CSS設計方針: BEM (Block__Element--Modifier)
 *  作成: 2024
 * ============================================================
 *
 *  ■ BEM 命名規則
 *    Block       : .site-header
 *    Element     : .site-header__logo
 *    Modifier    : .site-header--fixed
 *
 *  ■ ファイル参照パス
 *    index.html      → css/style.css
 *    pages/*.html    → ../css/style.css
 *
 *  ■ INDEX（セクション番号）
 *    §0  CSS変数（カラー・タイポ・スペース）
 *    §1  リセット・ベース
 *    §2  タイポグラフィ
 *    §3  ユーティリティ
 *    §4  [B] site-header
 *    §5  [B] site-nav
 *    §6  [B] hamburger
 *    §7  [B] hero
 *    §8  [B] section（コンテナ色・グラデーション）
 *    §9  [B] page-header
 *    §10 [B] breadcrumb
 *    §11 [B] card
 *    §12 [B] news-list
 *    §13 [B] bulletin-board（回覧板）
 *    §14 [B] mail-broadcast（一斉配信）
 *    §15 [B] info-table
 *    §16 [B] event-table
 *    §17 [B] link-card
 *    §18 [B] contact-form
 *    §19 [B] officer-gate（役員セキュリティ）
 *    §20 [B] community-links
 *    §21 [B] adsense
 *    §22 [B] site-footer
 *    §23 [B] qr-code
 *    §24 レスポンシブ（ブレークポイント）
 * ============================================================
 */


/* ============================================================
   §0  CSS変数（カラー・タイポ・スペース）
   ─ ここを変更するだけでサイト全体の色・フォントが変わります ─
   ============================================================ */
:root {
  /* ── オレンジ系グラデーション（上→下 濃→淡） ──────────── */
  --c-grad-1:  #6E1A00;   /* ヘッダー（最濃）             */
  --c-grad-2:  #8B2500;   /* ヒーロー上部                 */
  --c-grad-3:  #B83808;   /* ヒーロー下部                 */
  --c-grad-4:  #D4541A;   /* section--lv1               */
  --c-grad-5:  #E8732C;   /* section--lv2               */
  --c-grad-6:  #F29044;   /* section--lv3               */
  --c-grad-7:  #FAC868;   /* section--lv4               */
  --c-grad-8:  #FDE8B8;   /* section--lv5               */
  --c-grad-9:  #FFF4E6;   /* ボディ背景（最淡）           */

  /* ── テキスト ─────────────────────────────────────────── */
  --c-text-dark:   #2C1200;
  --c-text-mid:    #5A3010;
  --c-text-light:  #FFFFFF;
  --c-text-muted:  #9A6840;

  /* ── アクセント・機能色 ────────────────────────────────── */
  --c-accent:      #B83808;
  --c-accent-dark: #6E1A00;
  --c-link:        #B83808;
  --c-link-hover:  #6E1A00;
  --c-border:      rgba(184,56,8,0.2);
  --c-border-dark: rgba(184,56,8,0.5);
  --c-success:     #1A7A4A;
  --c-error:       #C0392B;
  --c-warn:        #D68910;
  --c-info:        #1565C0;

  /* ── タイポグラフィ ────────────────────────────────────── */
  --ff-serif:  'Shippori Mincho', 'Noto Serif JP', serif;
  --ff-sans:   'Noto Sans JP', sans-serif;
  --fs-xs:   0.72rem;
  --fs-sm:   0.85rem;
  --fs-base: 1rem;
  --fs-md:   1.1rem;
  --fs-lg:   1.35rem;
  --fs-xl:   1.65rem;
  --fs-2xl:  2.1rem;
  --fs-3xl:  2.8rem;
  --fw-normal: 400;
  --fw-medium: 500;
  --fw-bold:   700;
  --lh-base:  1.75;
  --lh-tight: 1.3;
  --ls-wide:  0.06em;

  /* ── スペース・サイズ ──────────────────────────────────── */
  --sp-xs:   4px;
  --sp-sm:   8px;
  --sp-md:   16px;
  --sp-lg:   24px;
  --sp-xl:   40px;
  --sp-2xl:  64px;
  --sp-3xl:  96px;
  --max-w:   960px;
  --radius-s: 6px;
  --radius-m: 12px;
  --radius-l: 20px;

  /* ── シャドウ ──────────────────────────────────────────── */
  --shadow-s: 0 2px 8px rgba(110,26,0,0.12);
  --shadow-m: 0 4px 20px rgba(110,26,0,0.18);
  --shadow-l: 0 8px 40px rgba(110,26,0,0.24);

  /* ── トランジション ────────────────────────────────────── */
  --transition: 0.2s ease;
}


/* ============================================================
   §1  リセット・ベース
   ============================================================ */
*,
*::before,
*::after { box-sizing: border-box; margin: 0; padding: 0; }

html {
  scroll-behavior: smooth;
  font-size: 16px;
  -webkit-text-size-adjust: 100%;
}

body {
  font-family: var(--ff-sans);
  font-size: var(--fs-base);
  line-height: var(--lh-base);
  color: var(--c-text-dark);
  background-color: var(--c-grad-9);
  padding-top: 68px; /* sticky header の高さ分 */
}

img {
  display: block;
  max-width: 100%;
  height: auto;
}

a {
  color: var(--c-link);
  text-decoration: none;
  transition: color var(--transition);
}
a:hover { color: var(--c-link-hover); text-decoration: underline; }

ul, ol { list-style: none; }

button {
  font-family: var(--ff-sans);
  cursor: pointer;
  border: none;
  background: none;
}

input, select, textarea {
  font-family: var(--ff-sans);
  font-size: var(--fs-base);
}

table {
  border-collapse: collapse;
  width: 100%;
}


/* ============================================================
   §2  タイポグラフィ
   ============================================================ */
h1, h2, h3, h4 {
  font-family: var(--ff-serif);
  line-height: var(--lh-tight);
  font-weight: var(--fw-bold);
}

h1 { font-size: var(--fs-2xl); }
h2 { font-size: var(--fs-xl); }
h3 { font-size: var(--fs-lg); }
h4 { font-size: var(--fs-md); }
p  { margin-bottom: var(--sp-md); }
p:last-child { margin-bottom: 0; }


/* ============================================================
   §3  ユーティリティ
   ─ .btn  : 汎用ボタン
   ─ .tag  : ラベルタグ
   ─ .visually-hidden : アクセシビリティ用非表示
   ============================================================ */

/* ── ボタン ──────────────────────────────────────────────── */
.btn {
  display: inline-flex;
  align-items: center;
  gap: var(--sp-sm);
  padding: 10px 24px;
  border-radius: var(--radius-m);
  font-weight: var(--fw-medium);
  font-size: var(--fs-sm);
  letter-spacing: var(--ls-wide);
  transition: all var(--transition);
  text-decoration: none;
  line-height: 1.4;
  cursor: pointer;
}

/* .btn--primary : メインCTA ボタン */
.btn--primary {
  background-color: var(--c-accent);
  color: var(--c-text-light);
  border: 2px solid transparent;
}
.btn--primary:hover {
  background-color: var(--c-accent-dark);
  color: var(--c-text-light);
  text-decoration: none;
  transform: translateY(-1px);
  box-shadow: var(--shadow-m);
}

/* .btn--outline : アウトライン ボタン */
.btn--outline {
  background-color: transparent;
  color: var(--c-accent);
  border: 2px solid var(--c-accent);
}
.btn--outline:hover {
  background-color: var(--c-accent);
  color: var(--c-text-light);
  text-decoration: none;
}

/* .btn--white : 白ボタン（濃い背景上で使用）*/
.btn--white {
  background-color: var(--c-text-light);
  color: var(--c-accent);
  border: 2px solid transparent;
}
.btn--white:hover {
  background-color: var(--c-grad-9);
  color: var(--c-accent-dark);
  text-decoration: none;
}

/* .btn--sm : 小サイズ ボタン */
.btn--sm { padding: 6px 16px; font-size: var(--fs-xs); }
/* .btn--lg : 大サイズ ボタン */
.btn--lg { padding: 14px 36px; font-size: var(--fs-md); }

/* ── タグ ──────────────────────────────────────────────────  */
.tag {
  display: inline-block;
  padding: 2px 10px;
  border-radius: 100px;
  font-size: var(--fs-xs);
  font-weight: var(--fw-medium);
  letter-spacing: var(--ls-wide);
}
.tag--info       { background: #DBEAFE; color: #1E40AF; }
.tag--warn       { background: #FEF3C7; color: #92400E; }
.tag--urgent     { background: #FEE2E2; color: #991B1B; }
.tag--success    { background: #D1FAE5; color: #065F46; }
.tag--event      { background: #EDE9FE; color: #5B21B6; }

/* ── コンテナ共通 ────────────────────────────────────────── */
.container {
  max-width: var(--max-w);
  margin: 0 auto;
  padding: 0 var(--sp-xl);
}

/* ── アクセシビリティ ────────────────────────────────────── */
.visually-hidden {
  position: absolute;
  width: 1px; height: 1px;
  padding: 0; overflow: hidden;
  clip: rect(0,0,0,0);
  white-space: nowrap;
  border: 0;
}

/* ── 分割線 ─────────────────────────────────────────────── */
.divider {
  border: none;
  border-top: 1px solid var(--c-border);
  margin: var(--sp-lg) 0;
}

/* ── フェードインアニメーション ─────────────────────────── */
.fade-in {
  opacity: 0;
  transform: translateY(20px);
  transition: opacity 0.5s ease, transform 0.5s ease;
}
.fade-in.is-visible {
  opacity: 1;
  transform: translateY(0);
}


/* ============================================================
   §4  [B] site-header
   HTML: <header class="site-header"> in index.html / pages/*.html
   ─ site-header__inner   : 内側レイアウト
   ─ site-header__brand   : ロゴ・名称エリア
   ─ site-header__logo    : ロゴ画像
   ─ site-header__name    : 自治会名テキスト
   ─ site-header__actions : ヘッダー右アクションボタン
   ============================================================ */
.site-header {
  position: fixed;
  top: 0; left: 0; right: 0;
  z-index: 1000;
  background: linear-gradient(135deg, var(--c-grad-1) 0%, var(--c-grad-2) 100%);
  box-shadow: var(--shadow-m);
  height: 68px;
}

.site-header__inner {
  max-width: var(--max-w);
  margin: 0 auto;
  padding: 0 var(--sp-xl);
  height: 100%;
  display: flex;
  align-items: center;
  gap: var(--sp-lg);
}

.site-header__brand {
  display: flex;
  align-items: center;
  gap: var(--sp-sm);
  text-decoration: none;
  flex-shrink: 0;
  padding: 4px 10px 4px 4px;
  border-radius: var(--radius-s);
  transition: background var(--transition);
}
/* PC/タブレットでは brand がホームリンクを兼ねるためホバーを明示 */
.site-header__brand:hover {
  text-decoration: none;
  background: rgba(255,255,255,0.12);
}
.site-header__brand:hover .site-header__name {
  opacity: 1;
}

.site-header__logo {
  width: 40px;
  height: 40px;
  border-radius: 50%;
  object-fit: cover;
  border: 2px solid rgba(255,255,255,0.4);
}

/* ロゴ画像がない場合の代替テキストバッジ */
.site-header__logo-placeholder {
  width: 40px; height: 40px;
  border-radius: 50%;
  background: rgba(255,255,255,0.2);
  border: 2px solid rgba(255,255,255,0.5);
  display: flex; align-items: center; justify-content: center;
  font-size: var(--fs-sm);
  font-weight: var(--fw-bold);
  color: var(--c-text-light);
  font-family: var(--ff-serif);
  flex-shrink: 0;
}

.site-header__name {
  font-family: var(--ff-serif);
  font-size: var(--fs-md);
  font-weight: var(--fw-bold);
  color: var(--c-text-light);
  line-height: 1.2;
}

.site-header__name span {
  display: block;
  font-size: var(--fs-xs);
  font-family: var(--ff-sans);
  font-weight: var(--fw-normal);
  opacity: 0.8;
  letter-spacing: var(--ls-wide);
}

/* ヘッダー右側のアクションリンク（役員・コミュニティ）*/
.site-header__actions {
  margin-left: auto;
  display: flex;
  align-items: center;
  gap: var(--sp-sm);
}

/* .site-header__action-link : 役員/コミュニティリンク */
.site-header__action-link {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  padding: 6px 14px;
  border-radius: var(--radius-s);
  font-size: var(--fs-xs);
  font-weight: var(--fw-medium);
  letter-spacing: var(--ls-wide);
  color: rgba(255,255,255,0.9);
  border: 1px solid rgba(255,255,255,0.3);
  transition: all var(--transition);
  text-decoration: none;
}
.site-header__action-link:hover {
  background: rgba(255,255,255,0.15);
  color: #fff;
  text-decoration: none;
  border-color: rgba(255,255,255,0.6);
}

/* --locked : 鍵アイコン付き（役員専用ページ）*/
.site-header__action-link--locked {
  background: rgba(0,0,0,0.2);
}


/* ============================================================
   §5  [B] site-nav
   HTML: <nav class="site-nav"> 直下に <ul class="site-nav__list">
   ─ site-nav__list    : ナビゲーションリスト
   ─ site-nav__item    : 各ナビ項目 <li>
   ─ site-nav__link    : 各ナビリンク <a>
   ─ --is-active       : 現在ページ（JS で付与）
   ============================================================ */
.site-nav {
  flex: 1;
  display: flex;
  align-items: center;
}

.site-nav__list {
  display: flex;
  gap: 4px;
  align-items: center;
}

.site-nav__link {
  display: inline-block;
  padding: 8px 12px;
  border-radius: var(--radius-s);
  font-size: var(--fs-sm);
  font-weight: var(--fw-medium);
  color: rgba(255,255,255,0.9);
  letter-spacing: var(--ls-wide);
  transition: all var(--transition);
  text-decoration: none;
}
.site-nav__link:hover {
  background: rgba(255,255,255,0.15);
  color: #fff;
  text-decoration: none;
}
.site-nav__link.is-active {
  background: rgba(255,255,255,0.2);
  color: #fff;
}


/* ============================================================
   §6  [B] hamburger  （スマホ ハンバーガーメニュー）
   HTML: <button class="hamburger">
   ─ hamburger__line : 3本線 <span>
   ─ .is-open        : メニュー展開時（JS で付与）
   ─ モバイルナビ    : .mobile-nav
   ============================================================ */
.hamburger {
  display: none;
  flex-direction: column;
  gap: 5px;
  padding: 10px 8px;
  margin-left: auto;
  border-radius: var(--radius-s);
  transition: background var(--transition);
}
.hamburger:hover { background: rgba(255,255,255,0.15); }

.hamburger__line {
  display: block;
  width: 24px;
  height: 2px;
  background: #fff;
  border-radius: 2px;
  transition: transform var(--transition), opacity var(--transition);
}
.hamburger.is-open .hamburger__line:nth-child(1) { transform: translateY(7px) rotate(45deg); }
.hamburger.is-open .hamburger__line:nth-child(2) { opacity: 0; }
.hamburger.is-open .hamburger__line:nth-child(3) { transform: translateY(-7px) rotate(-45deg); }

/* モバイルナビ */
.mobile-nav {
  display: none;
  position: fixed;
  top: 68px; left: 0; right: 0;
  z-index: 999;
  background: var(--c-grad-1);
  padding: var(--sp-md);
  box-shadow: var(--shadow-l);
}
.mobile-nav.is-open { display: block; }

.mobile-nav__list { display: flex; flex-direction: column; gap: 2px; }

.mobile-nav__link {
  display: flex;
  align-items: center;
  gap: var(--sp-sm);
  padding: 12px var(--sp-md);
  border-radius: var(--radius-s);
  color: rgba(255,255,255,0.9);
  font-weight: var(--fw-medium);
  letter-spacing: var(--ls-wide);
  transition: all var(--transition);
  text-decoration: none;
}
.mobile-nav__link:hover {
  background: rgba(255,255,255,0.12);
  color: #fff;
  text-decoration: none;
}

.mobile-nav__divider {
  border-top: 1px solid rgba(255,255,255,0.1);
  margin: var(--sp-sm) 0;
}

.mobile-nav__action-links {
  display: flex;
  gap: var(--sp-sm);
  padding: var(--sp-sm) var(--sp-md);
  flex-wrap: wrap;
}


/* ============================================================
   §7  [B] hero
   HTML: <section class="hero"> in index.html
   ─ hero__inner      : コンテナ
   ─ hero__eyebrow    : キャッチ上部小文字
   ─ hero__title      : メインタイトル
   ─ hero__desc       : サブテキスト
   ─ hero__cta        : CTAボタンエリア
   ─ hero__bg         : 背景画像レイヤー
   ============================================================ */
.hero {
  position: relative;
  background: linear-gradient(160deg, var(--c-grad-2) 0%, var(--c-grad-4) 100%);
  padding: var(--sp-3xl) 0 var(--sp-2xl);
  overflow: hidden;
  color: var(--c-text-light);
}

/* テクスチャオーバーレイ */
.hero::before {
  content: '';
  position: absolute;
  inset: 0;
  background: url("data:image/svg+xml,%3Csvg width='60' height='60' viewBox='0 0 60 60' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cg fill='%23ffffff' fill-opacity='0.04'%3E%3Cpath d='M36 34v-4h-2v4h-4v2h4v4h2v-4h4v-2h-4zm0-30V0h-2v4h-4v2h4v4h2V6h4V4h-4zM6 34v-4H4v4H0v2h4v4h2v-4h4v-2H6zM6 4V0H4v4H0v2h4v4h2V6h4V4H6z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E");
}

.hero__inner {
  position: relative;
  max-width: var(--max-w);
  margin: 0 auto;
  padding: 0 var(--sp-xl);
}

.hero__eyebrow {
  display: inline-block;
  font-size: var(--fs-xs);
  letter-spacing: 0.15em;
  text-transform: uppercase;
  background: rgba(255,255,255,0.15);
  border: 1px solid rgba(255,255,255,0.3);
  padding: 4px 14px;
  border-radius: 100px;
  margin-bottom: var(--sp-lg);
  color: rgba(255,255,255,0.95);
}

.hero__title {
  font-size: clamp(var(--fs-xl), 4vw, var(--fs-3xl));
  color: #fff;
  margin-bottom: var(--sp-lg);
  text-shadow: 0 2px 8px rgba(0,0,0,0.2);
}

.hero__title span {
  display: block;
  font-size: var(--fs-md);
  font-family: var(--ff-sans);
  font-weight: var(--fw-normal);
  opacity: 0.85;
  margin-bottom: var(--sp-sm);
}

.hero__desc {
  font-size: var(--fs-md);
  opacity: 0.9;
  max-width: 600px;
  margin-bottom: var(--sp-xl);
  line-height: var(--lh-base);
}

.hero__cta {
  display: flex;
  gap: var(--sp-md);
  flex-wrap: wrap;
}

/* hero__inner--center : ヒーローをセンター揃えにする（index.html で使用）*/
.hero__inner--center {
  text-align: center;
}
.hero__inner--center .hero__title span { /* サブタイトルもセンター */
  text-align: center;
}
.hero__inner--center .hero__desc {
  margin-left: auto;
  margin-right: auto;
}

/* hero__cta--center : CTAボタンをセンタリング */
.hero__cta--center {
  justify-content: center;
}

.hero__bg {
  position: absolute;
  inset: 0;
  background-size: cover;
  background-position: center;
  opacity: 0.2;
  z-index: 0;
}


/* ============================================================
   §8  [B] section（コンテナ色・グラデーション）
   HTML: <section class="section section--lv{N}"> in *.html
   ─ section__inner  : max-width コンテナ
   ─ section__header : セクションタイトルエリア
   ─ section__eyebrow: セクション上部小文字
   ─ section__title  : セクションタイトル
   ─ section__grid   : グリッドレイアウト
   ─ Modifier:
       --lv1 : grad-4（最濃コンテンツセクション）
       --lv2 : grad-5
       --lv3 : grad-6
       --lv4 : grad-7
       --lv5 : grad-8
       --lv6 : grad-9（最淡）
       --dark : grad-1 + 白文字
   ============================================================ */
.section {
  padding: var(--sp-2xl) 0;
}

.section__inner {
  max-width: var(--max-w);
  margin: 0 auto;
  padding: 0 var(--sp-xl);
}

.section__header {
  text-align: center;
  margin-bottom: var(--sp-2xl);
}

.section__eyebrow {
  display: inline-block;
  font-size: var(--fs-xs);
  letter-spacing: 0.15em;
  text-transform: uppercase;
  color: var(--c-text-muted);
  margin-bottom: var(--sp-sm);
  font-weight: var(--fw-medium);
}

.section__title {
  font-size: var(--fs-xl);
  color: var(--c-text-dark);
  margin-bottom: var(--sp-sm);
}

.section__title::after {
  content: '';
  display: block;
  width: 48px;
  height: 3px;
  background: var(--c-accent);
  margin: var(--sp-md) auto 0;
  border-radius: 2px;
}

.section__desc {
  font-size: var(--fs-sm);
  color: var(--c-text-mid);
  margin-top: var(--sp-sm);
}

.section__grid {
  display: grid;
  gap: var(--sp-lg);
  grid-template-columns: repeat(3, 1fr);
}

.section__grid--2col { grid-template-columns: repeat(2, 1fr); }
.section__grid--1col { grid-template-columns: 1fr; }

/* ── カラーモディファイア ── */
.section--lv1 { background-color: var(--c-grad-4); }
.section--lv2 { background-color: var(--c-grad-5); }
.section--lv3 { background-color: var(--c-grad-6); }
.section--lv4 { background-color: var(--c-grad-7); }
.section--lv5 { background-color: var(--c-grad-8); }
.section--lv6 { background-color: var(--c-grad-9); }

/* 濃色セクション（白文字）*/
.section--dark {
  background: linear-gradient(135deg, var(--c-grad-1) 0%, var(--c-grad-2) 100%);
  color: var(--c-text-light);
}
.section--dark .section__eyebrow { color: rgba(255,255,255,0.6); }
.section--dark .section__title   { color: var(--c-text-light); }
.section--dark .section__title::after { background: rgba(255,255,255,0.5); }
.section--dark .section__desc    { color: rgba(255,255,255,0.8); }


/* ============================================================
   §9  [B] page-header（内部ページ上部）
   HTML: <div class="page-header"> in pages/*.html
   ─ page-header__eyebrow : 上部小文字
   ─ page-header__title   : ページタイトル
   ─ page-header__desc    : 概要テキスト
   ============================================================ */
.page-header {
  background: linear-gradient(160deg, var(--c-grad-2) 0%, var(--c-grad-4) 100%);
  padding: var(--sp-2xl) 0 var(--sp-xl);
  color: var(--c-text-light);
  text-align: center;
}

.page-header__inner {
  max-width: var(--max-w);
  margin: 0 auto;
  padding: 0 var(--sp-xl);
}

.page-header__eyebrow {
  font-size: var(--fs-xs);
  letter-spacing: 0.15em;
  text-transform: uppercase;
  opacity: 0.75;
  margin-bottom: var(--sp-sm);
}

.page-header__title {
  font-size: var(--fs-2xl);
  color: #fff;
  margin-bottom: var(--sp-sm);
}

.page-header__desc {
  font-size: var(--fs-sm);
  opacity: 0.85;
  max-width: 500px;
  margin: 0 auto;
}


/* ============================================================
   §10 [B] breadcrumb
   HTML: <nav class="breadcrumb" aria-label="パンくず">
   ─ breadcrumb__list  : <ol>
   ─ breadcrumb__item  : <li>
   ─ breadcrumb__link  : <a>
   ─ breadcrumb__sep   : 区切り文字
   ============================================================ */
.breadcrumb {
  background: var(--c-grad-9);
  padding: var(--sp-sm) 0;
  border-bottom: 1px solid var(--c-border);
  font-size: var(--fs-xs);
}

.breadcrumb__inner {
  max-width: var(--max-w);
  margin: 0 auto;
  padding: 0 var(--sp-xl);
}

.breadcrumb__list {
  display: flex;
  align-items: center;
  gap: var(--sp-sm);
  flex-wrap: wrap;
}

.breadcrumb__link {
  color: var(--c-text-muted);
  font-size: var(--fs-xs);
}
.breadcrumb__link:hover { color: var(--c-accent); }

.breadcrumb__sep {
  color: var(--c-text-muted);
  font-size: var(--fs-xs);
}

.breadcrumb__item--current { color: var(--c-text-dark); font-weight: var(--fw-medium); }


/* ============================================================
   §11 [B] card
   HTML: <article class="card">
   ─ card__img     : 画像エリア <div>
   ─ card__body    : 本文エリア
   ─ card__tag     : タグ
   ─ card__title   : カードタイトル
   ─ card__meta    : 日付・場所など
   ─ card__excerpt : 概要テキスト
   ─ card__footer  : 下部エリア
   ─ --featured    : 注目カード
   ============================================================ */
.card {
  background: #fff;
  border-radius: var(--radius-m);
  box-shadow: var(--shadow-s);
  overflow: hidden;
  transition: transform var(--transition), box-shadow var(--transition);
  display: flex;
  flex-direction: column;
}
.card:hover {
  transform: translateY(-3px);
  box-shadow: var(--shadow-m);
}

.card__img {
  background: linear-gradient(135deg, var(--c-grad-6) 0%, var(--c-grad-7) 100%);
  height: 160px;
  overflow: hidden;
  display: flex;
  align-items: center;
  justify-content: center;
}

.card__img img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}

.card__img-icon {
  font-size: 2.5rem;
  opacity: 0.6;
}

.card__body {
  padding: var(--sp-lg);
  flex: 1;
  display: flex;
  flex-direction: column;
  gap: var(--sp-sm);
}

.card__tag-row {
  display: flex;
  gap: var(--sp-sm);
  flex-wrap: wrap;
}

.card__title {
  font-family: var(--ff-serif);
  font-size: var(--fs-md);
  font-weight: var(--fw-bold);
  color: var(--c-text-dark);
  line-height: 1.4;
}

.card__meta {
  font-size: var(--fs-xs);
  color: var(--c-text-muted);
  display: flex;
  gap: var(--sp-md);
  flex-wrap: wrap;
}

.card__excerpt {
  font-size: var(--fs-sm);
  color: var(--c-text-mid);
  line-height: var(--lh-base);
  flex: 1;
}

.card__footer {
  padding: var(--sp-md) var(--sp-lg);
  border-top: 1px solid var(--c-border);
  display: flex;
  align-items: center;
  justify-content: space-between;
}

/* card--featured : 注目表示（左ボーダー付き）*/
.card--featured {
  border-left: 4px solid var(--c-accent);
}


/* ============================================================
   §12 [B] news-list
   HTML: <ul class="news-list">
   ─ news-list__item   : 各行 <li>
   ─ news-list__date   : 日付
   ─ news-list__tag    : カテゴリタグ
   ─ news-list__title  : タイトルリンク
   ─ news-list__arrow  : 矢印アイコン
   ============================================================ */
.news-list {
  background: #fff;
  border-radius: var(--radius-m);
  box-shadow: var(--shadow-s);
  overflow: hidden;
}

.news-list__item {
  display: flex;
  align-items: flex-start;
  gap: var(--sp-md);
  padding: var(--sp-md) var(--sp-lg);
  border-bottom: 1px solid var(--c-border);
  transition: background var(--transition);
  flex-wrap: wrap;
}
.news-list__item:last-child { border-bottom: none; }
.news-list__item:hover { background: var(--c-grad-9); }

.news-list__date {
  font-size: var(--fs-xs);
  color: var(--c-text-muted);
  white-space: nowrap;
  flex-shrink: 0;
  padding-top: 2px;
  min-width: 90px;
}

.news-list__tag { flex-shrink: 0; }

.news-list__title {
  flex: 1;
  font-size: var(--fs-sm);
  font-weight: var(--fw-medium);
  color: var(--c-text-dark);
  line-height: 1.5;
  min-width: 0;
}
.news-list__title:hover { color: var(--c-accent); }

.news-list__arrow {
  color: var(--c-text-muted);
  font-size: var(--fs-sm);
  flex-shrink: 0;
  transition: transform var(--transition);
}
.news-list__item:hover .news-list__arrow {
  transform: translateX(4px);
  color: var(--c-accent);
}


/* ============================================================
   §13 [B] bulletin-board（回覧板）
   HTML: <section class="section section--lv4" id="bulletin">
         <div class="bulletin-board">
   ─ bulletin-board__header  : タイトルと説明
   ─ bulletin-board__grid    : カードグリッド
   ─ bulletin-board__card    : 各回覧板アイテム
   ─ bulletin-board__card-icon : ファイルタイプアイコン
   ─ bulletin-board__card-body : カード本文
   ─ bulletin-board__card-title : タイトル
   ─ bulletin-board__card-meta : 日付・号数
   ─ bulletin-board__card-status: 配布状況バッジ
   ─ bulletin-board__card-link : ダウンロードリンク
   ============================================================ */
.bulletin-board {
  background: #fff;
  border-radius: var(--radius-l);
  box-shadow: var(--shadow-m);
  overflow: hidden;
}

.bulletin-board__bar {
  background: linear-gradient(90deg, var(--c-grad-2) 0%, var(--c-grad-3) 100%);
  padding: var(--sp-md) var(--sp-lg);
  display: flex;
  align-items: center;
  gap: var(--sp-sm);
}

.bulletin-board__bar-title {
  color: #fff;
  font-family: var(--ff-serif);
  font-size: var(--fs-md);
  font-weight: var(--fw-bold);
}

.bulletin-board__bar-badge {
  background: rgba(255,255,255,0.25);
  color: #fff;
  font-size: var(--fs-xs);
  padding: 2px 10px;
  border-radius: 100px;
  margin-left: auto;
}

.bulletin-board__list {
  divide: var(--c-border);
}

.bulletin-board__item {
  display: flex;
  align-items: center;
  gap: var(--sp-md);
  padding: var(--sp-md) var(--sp-lg);
  border-bottom: 1px solid var(--c-border);
  transition: background var(--transition);
}
.bulletin-board__item:last-child { border-bottom: none; }
.bulletin-board__item:hover { background: var(--c-grad-9); }

.bulletin-board__item-icon {
  width: 44px; height: 44px;
  background: linear-gradient(135deg, var(--c-grad-6), var(--c-grad-7));
  border-radius: var(--radius-s);
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 1.3rem;
  flex-shrink: 0;
}

.bulletin-board__item-body {
  flex: 1;
  min-width: 0;
}

.bulletin-board__item-title {
  font-size: var(--fs-sm);
  font-weight: var(--fw-medium);
  color: var(--c-text-dark);
  line-height: 1.4;
  margin-bottom: 2px;
}

.bulletin-board__item-meta {
  font-size: var(--fs-xs);
  color: var(--c-text-muted);
  display: flex;
  gap: var(--sp-md);
}

.bulletin-board__item-status {
  flex-shrink: 0;
  display: flex;
  align-items: center;
  gap: var(--sp-sm);
}

.bulletin-board__item-link {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  font-size: var(--fs-xs);
  color: var(--c-accent);
  font-weight: var(--fw-medium);
  padding: 4px 10px;
  border: 1px solid var(--c-border-dark);
  border-radius: var(--radius-s);
  transition: all var(--transition);
}
.bulletin-board__item-link:hover {
  background: var(--c-accent);
  color: #fff;
  text-decoration: none;
  border-color: var(--c-accent);
}

.bulletin-board__footer {
  padding: var(--sp-md) var(--sp-lg);
  background: var(--c-grad-9);
  text-align: center;
  border-top: 1px solid var(--c-border);
}


/* ============================================================
   §14 [B] mail-broadcast（一斉配信メールボックス）
   HTML: <section class="section section--lv5" id="mailbox">
         <div class="mail-broadcast">
   ─ mail-broadcast__intro     : 説明テキスト
   ─ mail-broadcast__tabs      : 「登録」「登録変更」タブ
   ─ mail-broadcast__tab       : 各タブボタン
   ─ mail-broadcast__pane      : タブコンテンツ
   ─ mail-broadcast__form      : 登録フォーム
   ─ mail-broadcast__admin-box : 管理者向け送信エリア（別ページ）
   ─ --is-active               : アクティブタブ（JS で付与）
   ============================================================ */
.mail-broadcast {
  background: #fff;
  border-radius: var(--radius-l);
  box-shadow: var(--shadow-m);
  overflow: hidden;
}

.mail-broadcast__bar {
  background: linear-gradient(90deg, var(--c-grad-1) 0%, var(--c-grad-2) 100%);
  padding: var(--sp-md) var(--sp-lg);
  display: flex;
  align-items: center;
  gap: var(--sp-sm);
}

.mail-broadcast__bar-title {
  color: #fff;
  font-family: var(--ff-serif);
  font-size: var(--fs-md);
  font-weight: var(--fw-bold);
}

.mail-broadcast__bar-icon {
  font-size: 1.3rem;
}

.mail-broadcast__tabs {
  display: flex;
  border-bottom: 2px solid var(--c-border);
}

.mail-broadcast__tab {
  flex: 1;
  padding: var(--sp-md) var(--sp-lg);
  font-size: var(--fs-sm);
  font-weight: var(--fw-medium);
  color: var(--c-text-muted);
  background: var(--c-grad-9);
  border-bottom: 3px solid transparent;
  transition: all var(--transition);
  letter-spacing: var(--ls-wide);
  cursor: pointer;
  border: none;
  display: block;
  width: 100%;
  text-align: center;
}
.mail-broadcast__tab:hover {
  background: var(--c-grad-8);
  color: var(--c-text-dark);
}
.mail-broadcast__tab.is-active {
  background: #fff;
  color: var(--c-accent);
  border-bottom-color: var(--c-accent);
  font-weight: var(--fw-bold);
}

.mail-broadcast__pane {
  display: none;
  padding: var(--sp-xl) var(--sp-lg);
}
.mail-broadcast__pane.is-active { display: block; }

.mail-broadcast__intro {
  background: linear-gradient(135deg, var(--c-grad-8), var(--c-grad-9));
  border-left: 4px solid var(--c-accent);
  border-radius: 0 var(--radius-s) var(--radius-s) 0;
  padding: var(--sp-md) var(--sp-lg);
  margin-bottom: var(--sp-xl);
  font-size: var(--fs-sm);
  color: var(--c-text-mid);
  line-height: var(--lh-base);
}

.mail-broadcast__intro strong {
  color: var(--c-text-dark);
  font-weight: var(--fw-bold);
}

.mail-broadcast__privacy {
  background: var(--c-grad-9);
  border-radius: var(--radius-s);
  padding: var(--sp-md);
  font-size: var(--fs-xs);
  color: var(--c-text-muted);
  margin-top: var(--sp-lg);
  line-height: var(--lh-base);
}

.mail-broadcast__success {
  display: none;
  text-align: center;
  padding: var(--sp-2xl) var(--sp-lg);
  color: var(--c-success);
}
.mail-broadcast__success.is-shown { display: block; }
.mail-broadcast__success-icon { font-size: 3rem; margin-bottom: var(--sp-md); }
.mail-broadcast__success-title { font-size: var(--fs-lg); font-family: var(--ff-serif); }


/* ============================================================
   §15 [B] info-table（情報テーブル）
   HTML: <div class="info-table">
         <table>
   ─ 標準テーブルデザイン
   ─ th : ヘッダーセル
   ─ td : データセル
   ============================================================ */
.info-table {
  background: #fff;
  border-radius: var(--radius-m);
  box-shadow: var(--shadow-s);
  overflow: hidden;
}

.info-table table {
  width: 100%;
  border-collapse: collapse;
}

.info-table th,
.info-table td {
  padding: var(--sp-md) var(--sp-lg);
  text-align: left;
  border-bottom: 1px solid var(--c-border);
  font-size: var(--fs-sm);
  vertical-align: top;
}

.info-table th {
  background: var(--c-grad-9);
  font-weight: var(--fw-medium);
  color: var(--c-text-mid);
  white-space: nowrap;
  width: 180px;
}

.info-table tr:last-child th,
.info-table tr:last-child td {
  border-bottom: none;
}


/* ============================================================
   §16 [B] event-table（年間行事カレンダー）
   ============================================================ */
.event-table {
  background: #fff;
  border-radius: var(--radius-m);
  box-shadow: var(--shadow-s);
  overflow: hidden;
}

.event-table table { width: 100%; }

.event-table th {
  background: linear-gradient(90deg, var(--c-grad-2), var(--c-grad-3));
  color: #fff;
  padding: var(--sp-md) var(--sp-lg);
  font-size: var(--fs-sm);
  font-weight: var(--fw-medium);
  text-align: left;
}

.event-table td {
  padding: var(--sp-md) var(--sp-lg);
  border-bottom: 1px solid var(--c-border);
  font-size: var(--fs-sm);
  vertical-align: top;
}

.event-table tr:last-child td { border-bottom: none; }
.event-table tr:hover td { background: var(--c-grad-9); }

.event-table td:first-child {
  font-weight: var(--fw-bold);
  color: var(--c-accent);
  white-space: nowrap;
  width: 80px;
}


/* ============================================================
   §17 [B] link-card（リンクコレクション）
   HTML: <a class="link-card" href="..." target="_blank">
   ─ link-card__icon   : アイコン
   ─ link-card__body   : テキストエリア
   ─ link-card__name   : リンク名称
   ─ link-card__desc   : 説明文
   ─ link-card__arrow  : 外部矢印
   ─ --gov             : 行政系（青緑）
   ─ --safe            : 防犯・防災系（赤）
   ─ --life            : 生活系（緑）
   ─ --comm            : コミュニティ系（紫）
   ============================================================ */
.link-card {
  display: flex;
  align-items: center;
  gap: var(--sp-md);
  padding: var(--sp-md) var(--sp-lg);
  background: #fff;
  border-radius: var(--radius-m);
  box-shadow: var(--shadow-s);
  border-left: 4px solid var(--c-border);
  text-decoration: none;
  transition: all var(--transition);
  color: var(--c-text-dark);
}
.link-card:hover {
  box-shadow: var(--shadow-m);
  transform: translateX(4px);
  text-decoration: none;
  color: var(--c-text-dark);
}

.link-card__icon {
  width: 44px; height: 44px;
  border-radius: var(--radius-s);
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 1.3rem;
  flex-shrink: 0;
}

.link-card__body { flex: 1; min-width: 0; }
.link-card__name { font-size: var(--fs-sm); font-weight: var(--fw-medium); }
.link-card__desc { font-size: var(--fs-xs); color: var(--c-text-muted); }
.link-card__arrow { color: var(--c-text-muted); font-size: var(--fs-sm); flex-shrink: 0; }

/* Modifier: カラーバリエーション */
.link-card--gov  { border-left-color: #0E7490; }
.link-card--gov  .link-card__icon { background: #ECFEFF; color: #0E7490; }
.link-card--safe { border-left-color: #DC2626; }
.link-card--safe .link-card__icon { background: #FEF2F2; color: #DC2626; }
.link-card--life { border-left-color: #15803D; }
.link-card--life .link-card__icon { background: #F0FDF4; color: #15803D; }
.link-card--comm { border-left-color: #7C3AED; }
.link-card--comm .link-card__icon { background: #F5F3FF; color: #7C3AED; }


/* ============================================================
   §18 [B] contact-form（お問い合わせフォーム）
   HTML: <form class="contact-form">
   ─ contact-form__group   : 各入力グループ
   ─ contact-form__label   : ラベル
   ─ contact-form__input   : テキスト入力
   ─ contact-form__select  : セレクト
   ─ contact-form__textarea: テキストエリア
   ─ contact-form__error   : エラーメッセージ
   ─ contact-form__required: 必須マーク
   ─ contact-form__submit  : 送信ボタンエリア
   ============================================================ */
.contact-form {
  background: #fff;
  border-radius: var(--radius-l);
  box-shadow: var(--shadow-m);
  padding: var(--sp-xl) var(--sp-lg);
  max-width: 680px;
  margin: 0 auto;
}

.contact-form__group {
  margin-bottom: var(--sp-lg);
}

.contact-form__label {
  display: block;
  font-size: var(--fs-sm);
  font-weight: var(--fw-medium);
  color: var(--c-text-dark);
  margin-bottom: var(--sp-sm);
}

.contact-form__required {
  color: var(--c-error);
  font-size: var(--fs-xs);
  margin-left: 4px;
  font-weight: var(--fw-bold);
}

.contact-form__input,
.contact-form__select,
.contact-form__textarea {
  width: 100%;
  padding: 10px var(--sp-md);
  border: 1.5px solid var(--c-border);
  border-radius: var(--radius-s);
  font-size: var(--fs-sm);
  color: var(--c-text-dark);
  transition: border-color var(--transition), box-shadow var(--transition);
  background: var(--c-grad-9);
}
.contact-form__input:focus,
.contact-form__select:focus,
.contact-form__textarea:focus {
  outline: none;
  border-color: var(--c-accent);
  box-shadow: 0 0 0 3px rgba(184,56,8,0.12);
  background: #fff;
}

.contact-form__input.is-error,
.contact-form__textarea.is-error {
  border-color: var(--c-error);
}

.contact-form__textarea { min-height: 160px; resize: vertical; }

.contact-form__error {
  display: none;
  font-size: var(--fs-xs);
  color: var(--c-error);
  margin-top: 4px;
}
.contact-form__error.is-shown { display: block; }

.contact-form__check-group {
  display: flex;
  align-items: flex-start;
  gap: var(--sp-sm);
}
.contact-form__check-group input[type="checkbox"] { margin-top: 3px; flex-shrink: 0; }

.contact-form__submit {
  text-align: center;
  margin-top: var(--sp-xl);
}

.contact-form__success {
  display: none;
  text-align: center;
  padding: var(--sp-2xl);
  color: var(--c-success);
}
.contact-form__success.is-shown { display: block; }


/* ============================================================
   §19 [B] officer-gate（役員専用ページ・セキュリティゲート）
   HTML: <div class="officer-gate" id="officer-gate">
   ─ officer-gate__card    : 認証カード
   ─ officer-gate__icon    : 鍵アイコン
   ─ officer-gate__title   : タイトル
   ─ officer-gate__desc    : 説明
   ─ officer-gate__input   : パスワード入力
   ─ officer-gate__error   : エラーメッセージ
   ─ officer-gate__content : 解錠後に表示するコンテンツ
   ─ --hidden              : JS で付与（非表示）
   ─ --shown               : JS で付与（表示）
   ============================================================ */
.officer-gate {
  min-height: 60vh;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: var(--sp-2xl) var(--sp-xl);
  background: linear-gradient(160deg, var(--c-grad-8) 0%, var(--c-grad-9) 100%);
}

.officer-gate__card {
  background: #fff;
  border-radius: var(--radius-l);
  box-shadow: var(--shadow-l);
  padding: var(--sp-2xl) var(--sp-xl);
  width: 100%;
  max-width: 440px;
  text-align: center;
}

.officer-gate__icon {
  font-size: 3rem;
  margin-bottom: var(--sp-lg);
  display: block;
}

.officer-gate__title {
  font-family: var(--ff-serif);
  font-size: var(--fs-lg);
  color: var(--c-text-dark);
  margin-bottom: var(--sp-sm);
}

.officer-gate__desc {
  font-size: var(--fs-sm);
  color: var(--c-text-muted);
  margin-bottom: var(--sp-xl);
  line-height: var(--lh-base);
}

.officer-gate__input-row {
  position: relative;
  margin-bottom: var(--sp-md);
}

.officer-gate__input {
  width: 100%;
  padding: 12px var(--sp-xl) 12px var(--sp-md);
  border: 2px solid var(--c-border);
  border-radius: var(--radius-m);
  font-size: var(--fs-base);
  text-align: center;
  letter-spacing: 0.2em;
  transition: border-color var(--transition);
}
.officer-gate__input:focus {
  outline: none;
  border-color: var(--c-accent);
  box-shadow: 0 0 0 3px rgba(184,56,8,0.12);
}
.officer-gate__input.is-error { border-color: var(--c-error); }

.officer-gate__toggle-pw {
  position: absolute;
  right: var(--sp-md);
  top: 50%;
  transform: translateY(-50%);
  background: none;
  border: none;
  color: var(--c-text-muted);
  cursor: pointer;
  font-size: var(--fs-base);
}

.officer-gate__error {
  display: none;
  color: var(--c-error);
  font-size: var(--fs-sm);
  margin-bottom: var(--sp-md);
}
.officer-gate__error.is-shown { display: block; }

.officer-gate__note {
  margin-top: var(--sp-lg);
  font-size: var(--fs-xs);
  color: var(--c-text-muted);
  line-height: var(--lh-base);
}

/* 解錠後コンテンツ */
.officer-content {
  display: none;
}
.officer-content.is-shown { display: block; }

.officer-content__welcome {
  background: linear-gradient(90deg, var(--c-grad-7), var(--c-grad-8));
  border-radius: var(--radius-m);
  padding: var(--sp-lg) var(--sp-xl);
  margin-bottom: var(--sp-xl);
  display: flex;
  align-items: center;
  gap: var(--sp-md);
}

.officer-content__welcome-icon { font-size: 1.8rem; }
.officer-content__welcome-text { font-size: var(--fs-sm); color: var(--c-text-mid); }
.officer-content__welcome-text strong { color: var(--c-text-dark); font-size: var(--fs-md); }

.officer-card {
  background: #fff;
  border-radius: var(--radius-m);
  box-shadow: var(--shadow-s);
  overflow: hidden;
  margin-bottom: var(--sp-lg);
}

.officer-card__header {
  background: linear-gradient(90deg, var(--c-grad-3), var(--c-grad-4));
  padding: var(--sp-md) var(--sp-lg);
  color: #fff;
  font-family: var(--ff-serif);
  font-size: var(--fs-md);
  font-weight: var(--fw-bold);
  display: flex;
  align-items: center;
  gap: var(--sp-sm);
}

.officer-card__body { padding: var(--sp-lg); }


/* ============================================================
   §20 [B] community-links（コミュニティリンクページ）
   HTML: pages/community.html
   ─ community-hero      : ヒーローエリア
   ─ community-category  : カテゴリブロック
   ─ community-category__title : カテゴリタイトル
   ─ community-category__grid  : リンクグリッド
   ============================================================ */
.community-hero {
  background: linear-gradient(160deg, var(--c-grad-1) 0%, var(--c-grad-3) 100%);
  padding: var(--sp-2xl) 0 var(--sp-xl);
  text-align: center;
  color: #fff;
}

.community-category {
  margin-bottom: var(--sp-2xl);
}

.community-category__title {
  font-family: var(--ff-serif);
  font-size: var(--fs-lg);
  color: var(--c-text-dark);
  margin-bottom: var(--sp-lg);
  padding-bottom: var(--sp-sm);
  border-bottom: 2px solid var(--c-border);
  display: flex;
  align-items: center;
  gap: var(--sp-sm);
}

.community-category__icon {
  font-size: 1.3rem;
}

.community-category__grid {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: var(--sp-md);
}


/* ============================================================
   §20.5 [B] hall-reservation（会員ホール予約ページ）
   HTML: pages/hall/hall{1-5}.html
   ─ hall-info         : ホール情報カード
   ─ hall-info__spec   : 仕様・設備リスト
   ─ hall-calendar     : 予約カレンダー
   ─ hall-calendar__month : 月表示
   ─ hall-calendar__grid  : カレンダーグリッド
   ─ hall-calendar__day   : 各日付セル
   ─ hall-calendar__day--available   : 予約可能
   ─ hall-calendar__day--reserved    : 予約済み
   ─ hall-calendar__day--unavailable : 利用不可
   ─ hall-form         : 予約フォーム
   ─ hall-notes        : 注意事項
   ============================================================ */
.hall-info {
  background: linear-gradient(135deg, #fff 0%, var(--c-grad-9) 100%);
  border-radius: var(--radius-l);
  box-shadow: var(--shadow-m);
  padding: var(--sp-xl);
  margin-bottom: var(--sp-xl);
}

.hall-info__name {
  font-family: var(--ff-serif);
  font-size: var(--fs-2xl);
  color: var(--c-accent);
  margin-bottom: var(--sp-md);
  display: flex;
  align-items: center;
  gap: var(--sp-sm);
}

.hall-info__desc {
  font-size: var(--fs-sm);
  color: var(--c-text-mid);
  margin-bottom: var(--sp-lg);
  line-height: var(--lh-base);
}

.hall-info__specs {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: var(--sp-lg);
  padding: var(--sp-lg);
  background: #fff;
  border-radius: var(--radius-m);
}

.hall-info__spec {
  text-align: center;
}

.hall-info__spec-icon {
  font-size: 2rem;
  margin-bottom: var(--sp-sm);
  display: block;
}

.hall-info__spec-label {
  font-size: var(--fs-xs);
  color: var(--c-text-muted);
  display: block;
  margin-bottom: 4px;
}

.hall-info__spec-value {
  font-size: var(--fs-md);
  font-weight: var(--fw-bold);
  color: var(--c-text-dark);
}

/* カレンダー */
.hall-calendar {
  background: #fff;
  border-radius: var(--radius-l);
  box-shadow: var(--shadow-m);
  padding: var(--sp-xl);
  margin-bottom: var(--sp-xl);
}

.hall-calendar__header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: var(--sp-lg);
}

.hall-calendar__month {
  font-family: var(--ff-serif);
  font-size: var(--fs-lg);
  font-weight: var(--fw-bold);
  color: var(--c-text-dark);
}

.hall-calendar__nav {
  display: flex;
  gap: var(--sp-sm);
}

.hall-calendar__nav-btn {
  padding: 6px 12px;
  border: 1px solid var(--c-border);
  border-radius: var(--radius-s);
  background: #fff;
  color: var(--c-text-dark);
  font-size: var(--fs-sm);
  cursor: pointer;
  transition: all var(--transition);
}
.hall-calendar__nav-btn:hover {
  background: var(--c-grad-9);
  border-color: var(--c-accent);
}

.hall-calendar__weekdays {
  display: grid;
  grid-template-columns: repeat(7, 1fr);
  gap: 4px;
  margin-bottom: var(--sp-sm);
}

.hall-calendar__weekday {
  text-align: center;
  font-size: var(--fs-xs);
  font-weight: var(--fw-medium);
  color: var(--c-text-muted);
  padding: var(--sp-sm);
}

.hall-calendar__grid {
  display: grid;
  grid-template-columns: repeat(7, 1fr);
  gap: 4px;
}

.hall-calendar__day {
  aspect-ratio: 1;
  display: flex;
  align-items: center;
  justify-content: center;
  border-radius: var(--radius-s);
  font-size: var(--fs-sm);
  cursor: pointer;
  transition: all var(--transition);
  border: 1px solid var(--c-border);
  background: var(--c-grad-9);
}

.hall-calendar__day--available {
  background: #E8F5E9;
  border-color: #4CAF50;
  color: #1B5E20;
}
.hall-calendar__day--available:hover {
  background: #C8E6C9;
  transform: scale(1.05);
}

.hall-calendar__day--reserved {
  background: #FFEBEE;
  border-color: #F44336;
  color: #B71C1C;
  cursor: not-allowed;
}

.hall-calendar__day--unavailable {
  background: #FAFAFA;
  border-color: #E0E0E0;
  color: #9E9E9E;
  cursor: not-allowed;
}

.hall-calendar__day--today {
  font-weight: var(--fw-bold);
  box-shadow: 0 0 0 2px var(--c-accent);
}

.hall-calendar__legend {
  display: flex;
  gap: var(--sp-lg);
  justify-content: center;
  margin-top: var(--sp-lg);
  flex-wrap: wrap;
}

.hall-calendar__legend-item {
  display: flex;
  align-items: center;
  gap: 6px;
  font-size: var(--fs-xs);
}

.hall-calendar__legend-box {
  width: 16px;
  height: 16px;
  border-radius: 3px;
  border: 1px solid;
}

.hall-calendar__legend-box--available {
  background: #E8F5E9;
  border-color: #4CAF50;
}
.hall-calendar__legend-box--reserved {
  background: #FFEBEE;
  border-color: #F44336;
}
.hall-calendar__legend-box--unavailable {
  background: #FAFAFA;
  border-color: #E0E0E0;
}

/* 予約フォーム */
.hall-form {
  background: #fff;
  border-radius: var(--radius-l);
  box-shadow: var(--shadow-m);
  padding: var(--sp-xl);
  margin-bottom: var(--sp-xl);
}

.hall-form__title {
  font-family: var(--ff-serif);
  font-size: var(--fs-lg);
  color: var(--c-text-dark);
  margin-bottom: var(--sp-lg);
  padding-bottom: var(--sp-md);
  border-bottom: 2px solid var(--c-border);
}

/* 注意事項 */
.hall-notes {
  background: linear-gradient(135deg, var(--c-grad-8), var(--c-grad-9));
  border-left: 4px solid var(--c-warn);
  border-radius: 0 var(--radius-m) var(--radius-m) 0;
  padding: var(--sp-lg);
  margin-bottom: var(--sp-xl);
}

.hall-notes__title {
  font-size: var(--fs-md);
  font-weight: var(--fw-bold);
  color: var(--c-text-dark);
  margin-bottom: var(--sp-md);
  display: flex;
  align-items: center;
  gap: var(--sp-sm);
}

.hall-notes__list {
  list-style: disc;
  padding-left: var(--sp-lg);
}

.hall-notes__list li {
  font-size: var(--fs-sm);
  color: var(--c-text-mid);
  margin-bottom: var(--sp-sm);
  line-height: var(--lh-base);
}

/* レスポンシブ対応 */
@media (max-width: 899px) {
  .hall-info__specs { grid-template-columns: repeat(2, 1fr); }
}

@media (max-width: 599px) {
  .hall-info__specs { grid-template-columns: 1fr; }
  .hall-calendar__weekday { font-size: 0.65rem; padding: 4px; }
  .hall-calendar__day { font-size: 0.7rem; }
  .hall-calendar__legend { gap: var(--sp-sm); }
}


/* ============================================================
   §21 [B] adsense（Google AdSense 広告エリア）
   HTML: <div class="adsense-section"> フッター直前に配置
   ─ adsense-section : セクション wrapper
   ─ adsense__inner  : max-width コンテナ
   ─ adsense__label  : 「スポンサー」ラベル
   ─ AdSense 設定方法:
       1. data-ad-client → AdSense パブリッシャー ID に変更
       2. data-ad-slot   → 広告ユニット スロットID に変更
       3. <head>内スクリプトの client も同じIDに変更
   ─ 注意: 審査完了前・ローカル(file://)では表示されません
   ============================================================ */
.adsense-section {
  background-color: var(--c-grad-9);
  padding: var(--sp-lg) 0;
  border-top: 1px solid var(--c-border);
}

.adsense__inner {
  max-width: var(--max-w);
  margin: 0 auto;
  padding: 0 var(--sp-xl);
  text-align: center;
}

.adsense__label {
  font-size: var(--fs-xs);
  color: var(--c-text-muted);
  letter-spacing: 0.1em;
  margin-bottom: var(--sp-sm);
  text-align: center;
}

.adsense__inner ins.adsbygoogle {
  display: block;
  min-height: 90px;
  background: rgba(184,56,8,0.03);
  border-radius: var(--radius-s);
}


/* ============================================================
   §22 [B] site-footer
   HTML: <footer class="site-footer">
   ─ site-footer__inner   : コンテナ
   ─ site-footer__grid    : 4カラムグリッド
   ─ site-footer__col     : 各カラム
   ─ site-footer__heading : カラム見出し
   ─ site-footer__nav     : フッターナビ
   ─ site-footer__nav-link: ナビリンク
   ─ site-footer__address : 住所情報
   ─ site-footer__copy    : コピーライト
   ============================================================ */
.site-footer {
  background: linear-gradient(180deg, var(--c-grad-1) 0%, #3A0D00 100%);
  color: rgba(255,255,255,0.8);
  padding: var(--sp-2xl) 0 var(--sp-xl);
}

.site-footer__inner {
  max-width: var(--max-w);
  margin: 0 auto;
  padding: 0 var(--sp-xl);
}

.site-footer__grid {
  display: grid;
  grid-template-columns: 2fr 1fr 1fr 1fr;
  gap: var(--sp-xl);
  margin-bottom: var(--sp-xl);
}

.site-footer__heading {
  font-family: var(--ff-serif);
  font-size: var(--fs-sm);
  font-weight: var(--fw-bold);
  color: rgba(255,255,255,0.95);
  margin-bottom: var(--sp-md);
  padding-bottom: var(--sp-sm);
  border-bottom: 1px solid rgba(255,255,255,0.15);
  letter-spacing: var(--ls-wide);
}

.site-footer__name {
  font-family: var(--ff-serif);
  font-size: var(--fs-md);
  font-weight: var(--fw-bold);
  color: #fff;
  margin-bottom: var(--sp-sm);
}

.site-footer__address {
  font-size: var(--fs-xs);
  line-height: 1.9;
  color: rgba(255,255,255,0.65);
}

.site-footer__nav { list-style: none; }
.site-footer__nav li { margin-bottom: 8px; }

.site-footer__nav-link {
  font-size: var(--fs-xs);
  color: rgba(255,255,255,0.65);
  transition: color var(--transition);
}
.site-footer__nav-link:hover {
  color: var(--c-grad-7);
  text-decoration: none;
}

.site-footer__copy {
  border-top: 1px solid rgba(255,255,255,0.1);
  padding-top: var(--sp-lg);
  text-align: center;
  font-size: var(--fs-xs);
  color: rgba(255,255,255,0.4);
}


/* ============================================================
   §23 [B] qr-code（フッターQRコード）
   HTML: <div class="qr-code">  in site-footer__grid
   ─ qr-code__img   : QR画像
   ─ qr-code__label : 説明テキスト
   ─ PC/タブレット（600px+）のみ表示
   ─ スマホでは display:none
   ─ QRコード差し替え方法:
       images/qr-site.svg を実際のQRコード画像に置き換える
       または <img src="..."> の src を変更する
   ============================================================ */
.qr-code {
  text-align: center;
}

.qr-code__img {
  width: 100px;
  height: 100px;
  border-radius: var(--radius-s);
  background: #fff;
  padding: 6px;
  margin: 0 auto var(--sp-sm);
}

.qr-code__label {
  font-size: var(--fs-xs);
  color: rgba(255,255,255,0.6);
  line-height: 1.5;
}


/* ============================================================
   §24  レスポンシブ（ブレークポイント）
   ─ Mobile  : max-width 599px
   ─ Tablet  : 600px – 899px
   ─ PC      : 900px+
   ============================================================ */

/* ── タブレット以下 ─────────────────────────────────────── */
@media (max-width: 899px) {
  .container { padding: 0 var(--sp-lg); }
  .section__inner { padding: 0 var(--sp-lg); }
  .hero__inner { padding: 0 var(--sp-lg); }

  .site-header__inner { padding: 0 var(--sp-lg); }
  .site-nav, .site-header__actions { display: none; }
  .hamburger { display: flex; }

  .site-footer__grid { grid-template-columns: 1fr 1fr; }

  .section__grid { grid-template-columns: repeat(2, 1fr); }
  .section__grid--1col { grid-template-columns: 1fr; }
  .community-category__grid { grid-template-columns: 1fr; }
}

/* ── モバイル ────────────────────────────────────────────── */
@media (max-width: 599px) {
  body { padding-top: 64px; }

  h1 { font-size: var(--fs-xl); }
  h2 { font-size: var(--fs-lg); }

  .section { padding: var(--sp-xl) 0; }
  .section__inner,
  .hero__inner,
  .site-header__inner { padding: 0 var(--sp-md); }

  .section__grid,
  .section__grid--2col { grid-template-columns: 1fr; }

  /* フッター */
  .site-footer__grid { grid-template-columns: 1fr; }

  /* QRコードはスマホ非表示 */
  .qr-code { display: none; }

  /* adsense */
  .adsense-section { padding: var(--sp-md) 0; }
  .adsense__inner { padding: 0 var(--sp-md); }

  /* news-list 改行対応 */
  .news-list__item { flex-wrap: wrap; gap: var(--sp-sm); }
  .news-list__date { min-width: 80px; }

  /* bulletin-board */
  .bulletin-board__item { flex-wrap: wrap; }
  .bulletin-board__item-status { width: 100%; justify-content: flex-end; }

  /* contact-form */
  .contact-form { padding: var(--sp-lg) var(--sp-md); }

  /* officer-gate */
  .officer-gate { padding: var(--sp-xl) var(--sp-md); }
  .officer-gate__card { padding: var(--sp-xl) var(--sp-md); }

  /* page-header */
  .page-header { padding: var(--sp-xl) 0 var(--sp-lg); }
  .page-header__inner { padding: 0 var(--sp-md); }

  /* breadcrumb */
  .breadcrumb__inner { padding: 0 var(--sp-md); }

  /* mail-broadcast */
  .mail-broadcast__pane { padding: var(--sp-lg) var(--sp-md); }

  /* btn */
  .btn--lg { padding: 12px 24px; }

  /* hero */
  .hero { padding: var(--sp-2xl) 0 var(--sp-xl); }
  .hero__cta { flex-direction: column; align-items: center; }
  .hero__cta--center { align-items: center; }
}
