    .schedule-layout {
      display: grid;
      grid-template-columns: 1fr 280px;
      gap: 14px;
      align-items: start;
    }
    @media (max-width: 768px) {
      .schedule-layout { grid-template-columns: 1fr; }
    }

    /* v6.16.30-hotfix.6: PC コントロールバーで「ボタン群=左、名前=右」配置（週間予定表 syukan と視覚言語統一）。
       HTML 構造は無変更（DOM 順序: 名前 → ボタン群）、CSS の order で視覚的に入れ替え。
       子 div はクラス未付与のため :nth-child で指定（最小 HTML 変更方針、class 追加は親 .ctrl-bar 1 つのみ）。 */
    .ctrl-bar > div:nth-child(1) {  /* 名前 div を右へ */
      order: 2;
      margin-left: auto;
    }
    .ctrl-bar > div:nth-child(2) {  /* ボタン群 div を左へ */
      order: 1;
    }

    /* カレンダーヘッダ */
    .cal-head {
      display: grid;
      grid-template-columns: repeat(7, 1fr);
      background: var(--color-surface-2);
      border-bottom: 1px solid var(--color-border);
    }
    .cal-day-label {
      padding: 8px 0;
      text-align: center;
      font-size: 11px;
      font-weight: 500;
      color: var(--color-text-muted);
    }
    .cal-day-label.sat { color: #1a73e8; }
    .cal-day-label.sun { color: #c5221f; }

    /* カレンダー本体 */
    .cal-body {
      display: grid;
      grid-template-columns: repeat(7, 1fr);
    }
    .cal-cell {
      /* v6.16.30-hotfix.1: Grid item デフォルト min-width: auto はコンテンツ幅最小値となり、
         white-space: nowrap な .cell-chip が縮まずに 7 列カレンダーが画面幅を超える原因。
         min-width: 0 で「子の text-overflow を効かせるための縮小可能化」（CSS の鉄板ハマりポイント）。
         syukan.css の 4 箇所 min-width: 0 と並列定義（設計知見 #92）。 */
      min-width: 0;
      min-height: 64px;
      padding: 7px 6px 4px;
      border-right: 0.5px solid var(--color-divider);
      border-bottom: 0.5px solid var(--color-divider);
      cursor: pointer;
      transition: background 180ms;
      display: flex; flex-direction: column; gap: 3px;
    }
    .cal-cell:hover { background: var(--color-surface-3); }
    .cal-cell:nth-child(7n) { border-right: none; }
    .cal-cell.other-month { opacity: .3; cursor: default; background: transparent; }
    .cal-cell.other-month:hover { background: transparent; }
    .cal-cell.is-selected { background: rgba(26,115,232,.06); }
    .cal-cell.is-selected:hover { background: rgba(26,115,232,.10); }

    .date-num {
      font-size: 13px; font-weight: 500;
      width: 24px; height: 24px;
      display: flex; align-items: center; justify-content: center;
      color: var(--color-text);
    }
    .date-num.sat { color: #1a73e8; }
    .date-num.sun { color: #c5221f; }
    .cal-cell.is-today .date-num {
      background: #1a73e8;
      color: #fff;
      border-radius: 50%;
    }

    /* 種別ドット */
    .dot-row {
      display: flex; gap: 2px; flex-wrap: wrap; padding-left: 2px;
    }
    .site-dot {
      width: 7px; height: 7px; border-radius: 50%;
    }
    .site-dot.traffic  { background: #f59e0b; }
    .site-dot.control  { background: #8b5cf6; }
    .site-dot.event    { background: #10b981; }
    .site-dot.facility { background: #3b82f6; }
    .site-dot.unknown  { background: #9ca3af; }
    .cal-more {
      font-size: 10px; color: var(--color-text-muted); padding-left: 2px;
    }

    /* 凡例 */
    .cal-legend {
      display: flex; flex-wrap: wrap; gap: 10px;
      padding: 10px 14px;
      border-top: 1px solid var(--color-border);
      background: var(--color-surface-2);
    }
    .legend-item {
      display: flex; align-items: center; gap: 5px;
      font-size: 11px; color: var(--color-text-muted);
    }

    /* 詳細パネル: 案件カード */
    .ev-card {
      background: var(--color-surface-2);
      border: 1px solid var(--color-border);
      border-radius: 14px;
      padding: 12px;
      margin-bottom: 8px;
    }
    .ev-card-name { font-size: 13px; font-weight: 500; margin: 6px 0 2px; color: var(--color-text); }
    .ev-card-time {
      font-size: 12px; color: var(--color-text-muted);
      display: flex; align-items: center; gap: 4px;
      font-variant-numeric: tabular-nums;
    }
    .ev-card-sub { font-size: 11px; color: var(--color-text-faint); margin-top: 2px; }

    /* 日跨ぎバッジ */
    .overnight-badge {
      background: #fef3c7; color: #92400e;
      padding: 2px 8px; border-radius: 9999px;
      font-size: 11px; font-weight: 600; margin-left: 4px;
    }

    .detail-empty {
      color: var(--color-text-muted); text-align: center;
      padding: 20px 0; font-size: 13px;
    }

    .sum-tile {
      background: var(--color-surface-2);
      border-radius: 10px; padding: 10px;
    }
    .sum-tile .sum-label { font-size: 10px; color: var(--color-text-faint); margin-bottom: 3px; }
    .sum-tile .sum-value { font-size: 20px; font-weight: 500; color: var(--color-text); }
    .sum-tile .sum-unit  { font-size: 11px; color: var(--color-text-muted); }

    .sum-type-row {
      display: flex; align-items: center; justify-content: space-between;
      font-size: 12px; padding: 4px 8px;
      background: var(--color-surface-2); border-radius: 8px;
    }

/* ==========================================================================
   v6.16.27: 配置予定ページ UX 改善 4 件統合
   ① セル内チップ（案件 + 休み）
   ② 休みバッジ 3 色（公休/希望休/明休、有休/振休は未運用）
   ③ ポスト名表示
   ④ 配置スタッフ chip（haichi.css 並列定義、設計知見 #92）
   ========================================================================== */

/* セル内チップ群（旧ドット表示の置き換え） */
.cell-chips {
  display: flex;
  flex-direction: column;
  gap: 2px;
  margin-top: 2px;
  overflow: hidden;
  /* v6.16.30-hotfix.1: Flex 子要素として配置されることがあるため保険で min-width: 0
     （.cal-cell 側の min-width: 0 が主、ここは 2 段防御）。 */
  min-width: 0;
}
.cell-chip {
  font-size: 10px;
  line-height: 1.3;
  padding: 1px 5px;
  border-radius: 3px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  font-weight: 500;
  /* v6.16.30-hotfix.1: 親（.cell-chips）が flex column のため width: auto が効きにくい。
     max-width: 100% で親幅を上限として明示し、長い現場名（例: 「福岡国際空港」）が
     親より大きくならないようにする（text-overflow 4 点セット完備）。 */
  max-width: 100%;
}
.cell-chip.is-job {
  background: rgba(26, 115, 232, 0.12);
  color: #1558b0;
}
/* 休み 3 色（v6.16.27 実測 monthly_shifts shift_type、有休/振休は未運用） */
.cell-chip.is-rest-public    { background: rgba(117, 117, 117, 0.18); color: #424242; }
.cell-chip.is-rest-requested { background: rgba(242, 153, 0, 0.18);   color: #b06000; }
/* v6.16.29-hotfix.1: 明休を水色 → 薄紫に変更（現場名 chip = 薄水色 との色被り解消） */
.cell-chip.is-rest-next-day  { background: rgba(147, 52, 230, 0.15);  color: #5b21b6; }
.cell-more {
  font-size: 9.5px;
  color: #5f6368;
  padding: 1px 4px;
  font-weight: 600;
}

/* 詳細パネル: 休みカード */
/* v6.16.29-hotfix.1: 左端のオレンジ縦ライン（border-left: 3px solid #f59e0b）を削除（不要なアクセント） */
.ev-card.is-rest {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 10px 12px;
  background: var(--color-surface-2);
}
.rest-badge {
  display: inline-flex;
  align-items: center;
  padding: 3px 10px;
  border-radius: 9999px;
  font-size: 12px;
  font-weight: 600;
  flex-shrink: 0;
}
.rest-badge.rest-public    { background: rgba(117, 117, 117, 0.18); color: #424242; }
.rest-badge.rest-requested { background: rgba(242, 153, 0, 0.18);   color: #b06000; }
/* v6.16.29-hotfix.1: 明休 badge も薄紫に統一（カレンダー chip と詳細パネル badge の配色一致） */
.rest-badge.rest-next-day  { background: rgba(147, 52, 230, 0.15);  color: #5b21b6; }
.rest-note {
  font-size: 12px;
  color: var(--color-text-muted);
}

/* ==========================================================================
   v6.16.28: 案件カード UI 改善 5 件統合
   ① 現場ごと 1 カード集約（JS 側、業務担当者の認知単位を尊重）
   ② post-name-badge: 角丸 4px + 水色背景 + 青文字（syukan.css .post-label-named 並列定義、設計知見 #92）
   ③ ポスト間に薄い破線区切り（.post-block.is-after-first の border-top: 1px dashed）
   ④ staff-chip 白背景 + 薄グレー枠 + 黒文字（syukan.css .chip ベース並列定義、自分のみ濃い青）
   ⑤ 業務社員/アルバイトの自分のみ表示（既存 SQL `WHERE a.user_id = $1` で自然成立）

   v6.16.29 🚨 hotfix: 週間予定表と同じ slot 集約表示へ。slot-count バッジ（N/M名）追加。
     既存 .post-block / .post-header / .post-name-badge / .staff-chip / .staff-chip.is-self
     はすべて完全流用（CSS 設計知見「並列定義の蓄積」を実装層で活用）。
   ========================================================================== */

/* ポストブロック（同一現場内の各ポスト = post_type バッジ + 時間 + 配置スタッフ chip） */
.post-block {
  margin-top: 8px;
  padding-top: 8px;
}
/* v6.16.28 ③: 2 件目以降は薄い破線で区切り（先頭ポストには区切り線なし） */
.post-block.is-after-first {
  border-top: 1px dashed var(--color-border);
  margin-top: 10px;
  padding-top: 10px;
}

/* v6.16.28 ②: ポストヘッダ（バッジ + 時間を横並び） */
.post-header {
  display: flex;
  align-items: center;
  gap: 8px;
  flex-wrap: wrap;
}

/* v6.16.28 ②: post-name-badge（syukan.css .post-label-named 並列定義、設計知見 #92）
   角丸 4px + 水色背景 #DCEAF8 + 濃い青文字 #185FA5、ピル形ではなく角丸の四角 */
.post-name-badge {
  display: inline-block;
  padding: 2px 7px;
  border-radius: 4px;
  background: #DCEAF8;
  color: #185FA5;
  font-size: 11px;
  font-weight: 600;
  line-height: 1.4;
}

.post-time {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  font-size: 12px;
  color: var(--color-text-muted);
  font-variant-numeric: tabular-nums;
}

/* v6.16.29: slot count バッジ（syukan.css .job-slot-count 並列定義、設計知見 #92）
   N/M名 形式（例: 2/2名）、margin-left:auto で右端に配置。
   slot.assignees が存在する canViewAllStaff=true ユーザーにのみ表示。
   業務社員/アルバイトには出力しない（required_count = 自分の post 数のみで他人情報非露出）。 */
.slot-count {
  margin-left: auto;
  font-size: 11px;
  color: var(--color-text-muted);
  font-variant-numeric: tabular-nums;
  white-space: nowrap;
}

/* v6.16.28 ④: 配置スタッフ chip（syukan.css .chip ベース並列定義、設計知見 #92）
   ベース: 白背景 + 薄グレー枠 + 黒文字 / 自分: 濃い青（強調）
   取締役/正社員のみ表示、業務社員/アルバイト/NULL は API レスポンス自体に all_assignees 不含のため
   この CSS 要素は出力されない（DOM ノードごと非表示） */
.staff-chips {
  display: flex;
  flex-wrap: wrap;
  gap: 4px;
  margin-top: 6px;
}
.staff-chip {
  display: inline-flex;
  align-items: center;
  vertical-align: middle;
  padding: 3px 9px;
  border-radius: 9999px;
  background: var(--color-surface, #fff);
  color: var(--color-text, #202124);
  font-size: 11px;
  font-weight: 500;
  border: 1px solid var(--color-divider, #dadce0);
}
.staff-chip.is-self {
  background: var(--color-primary, #1a73e8);
  color: #fff;
  border-color: transparent;
  font-weight: 600;
}
.staff-chip-temp-badge {
  display: inline-block;
  background: #f59e0b;
  color: #fff;
  font-size: 9px;
  font-weight: 700;
  padding: 1px 5px;
  border-radius: 3px;
  margin-right: 4px;
  vertical-align: middle;
  line-height: 1.4;
}

/* ==========================================================================
   v6.16.30: スマホ最適化（max-width: 480px）
     既存 @media (max-width: 768px) で詳細パネル縦並びに切替済。
     480px 以下では「カレンダー画面幅収まり + チップ省略表示 + サイズ縮小」を追加。
     共通クラス（.gs-btn-pill / .gs-panel / .gs-card / .gs-page）は触らず、
     配置予定ページ専用クラス（.cal-* / .ev-* / .sum-* / .cell-chip / .post-* / .staff-chip / .rest-*）
     のみ調整 → 他ページ（配置表 / 管制ボード / OK 管理 / 週間予定表）への影響ゼロ。
     設計知見「ブレークポイントの 2 段戦略」: 768px でレイアウト切替 + 480px でサイズ最適化。
     設計知見 #92「水平展開は意図された複製」: syukan.css の 480px パターンを並列定義。
   ========================================================================== */
@media (max-width: 480px) {
  /* カレンダー: セル高さ + 日付 + チップを縮小して 7 列を画面幅に収める */
  .cal-day-label {
    padding: 5px 0;
    font-size: 10px;
  }
  .cal-cell {
    min-height: 70px;
    padding: 4px 3px 3px;
    gap: 2px;
  }
  .date-num {
    font-size: 11px;
    width: 20px;
    height: 20px;
  }
  .cell-chips {
    gap: 1px;
  }
  .cell-chip {
    font-size: 9px;
    padding: 1px 3px;
    line-height: 1.3;
    /* overflow / text-overflow / white-space はベース定義で既に効いている、ここでは追加不要 */
  }
  .cell-more {
    font-size: 9px;
    padding: 1px 2px;
  }

  /* 詳細パネル: 案件カード + 休みカード */
  .ev-card {
    border-radius: 10px;
    padding: 10px;
    margin-bottom: 6px;
  }
  .ev-card-name { font-size: 12px; }
  .ev-card-time { font-size: 11px; }
  .ev-card-sub  { font-size: 10px; }
  .ev-card.is-rest { padding: 8px 10px; }
  .rest-badge { padding: 2px 8px; font-size: 11px; }
  .rest-note { font-size: 11px; }

  /* ポスト = slot ブロック（v6.16.29 以降の構造） */
  .post-block { margin-top: 6px; padding-top: 6px; }
  .post-block.is-after-first { margin-top: 8px; padding-top: 8px; }
  .post-header { gap: 6px; }
  .post-name-badge { padding: 2px 6px; font-size: 10px; }
  .post-time { font-size: 11px; }
  .slot-count { font-size: 10px; }

  /* スタッフ chip + 仮バッジ */
  .staff-chips { gap: 3px; margin-top: 5px; }
  .staff-chip { padding: 2px 8px; font-size: 10px; }
  .staff-chip-temp-badge { font-size: 8px; padding: 1px 4px; margin-right: 3px; }

  /* 集計タイル */
  .sum-tile { padding: 8px; border-radius: 8px; }
  .sum-tile .sum-label { font-size: 9px; }
  .sum-tile .sum-value { font-size: 18px; }
  .sum-tile .sum-unit  { font-size: 10px; }
  .sum-type-row { font-size: 11px; padding: 3px 6px; }

  /* v6.16.30-hotfix.2: コントロールバー前月/次月ボタンをアイコン化（テキスト「前月」「次月」非表示）。
     共通クラス .gs-btn-pill は触らず id ベース指定で他ページ影響回避（設計知見「専用クラスのみ調整」）。
     ボタン幅縮小で親 inline-style の flex-wrap: wrap でも自然に 1 行収まり、「今月」折り返し解消。 */
  /* v6.16.30-hotfix.4: display: none を !important 化（.gs-btn-pill 系 !important 群と衝突しても確実に勝つため）。 */
  #btnPrev .btn-text,
  #btnNext .btn-text { display: none !important; }
  /* v6.16.30-hotfix.3: 1 文字 SVG chevron アイコンボタンを真円化（横長楕円 → 真円）。
     共通クラス .gs-btn-pill の border-radius:9999px を 50% で上書き、
     height:36px を明示して縦横比 1:1 を確実化。 */
  /* v6.16.30-hotfix.4 🚨 真因対応: 共通クラス .gs-btn-pill の 9 個の !important 指定群
     （height: 44px / padding: 0 18px / border-radius: 9999px / display: inline-flex 等）に
     全部負けて縦長 44px + padding はみ出しで SVG が画面外（信介氏 DevTools Computed タブ調査で確定）。
     全プロパティに !important 追加で CSS Specificity を勝負。 */
  /* v6.16.30-hotfix.5: 36×36 → 44×44 に拡大して「今月」ボタン（.gs-btn-pill height:44px）と視覚統一。
     Apple HIG / Material Design 推奨タップエリア 44×44px とも整合。 */
  #btnPrev,
  #btnNext {
    width: 44px !important;
    height: 44px !important;
    min-width: 44px !important;
    padding: 0 !important;
    border-radius: 50% !important;
    display: inline-flex !important;
    align-items: center !important;
    justify-content: center !important;
    flex-shrink: 0;
  }

  /* v6.16.30-hotfix.6: スマホ表示では PC 用 order 入れ替えをリセット（現状の縦並び「名前上、ボタン下」維持）。
     flex-wrap: wrap で折り返した時の HTML 順序（名前 → ボタン群）に戻すため order: 0 + margin-left: 0。 */
  .ctrl-bar > div:nth-child(1) {
    order: 0;
    margin-left: 0;
  }
  .ctrl-bar > div:nth-child(2) {
    order: 0;
  }
}
