/* 清花祭2026 v538 (統合ファイル名は従来のまま) — 会場マップ表示補正の統合版
 * 読み込み順: unified.css -> day-ui-v417.css -> map-v424.css -> このファイル
 * 旧 parking-v420.css は現在のSVGのID構成と矛盾するため読み込まない。
 * 以前の map-v522 / 523 / 525 / 526 は重ねて読み込まず、ここで置き換える。
 */

/* 1. グラウンド：薄いトラック。中心は背景が透ける。 */
.festival-map-svg #ground {
  fill:#E6CBB2;
  fill-opacity:.52;
  fill-rule:evenodd;
  stroke:none;
  stroke-width:0;
}
.festival-map-svg #ground-field {
  display:none !important;
  fill:none !important;
  stroke:none !important;
}

/* 2. 駐車場: 全体表示は P1〜P7 と bike を同じグレーに統一。
 * pathごとに明示して、SVG自身の fill と古いモード別設定に依存しない。
 */
.festival-map-svg:not(.is-mainstreet-overview):not(.is-food-mode):not(.is-parking-overview):not(.is-exhibition-overview) #parking {
  opacity:.82 !important;
}
.festival-map-svg:not(.is-mainstreet-overview):not(.is-food-mode):not(.is-parking-overview):not(.is-exhibition-overview) #parking > path {
  fill:#C5CDCA !important;
  stroke:#899A93 !important;
  stroke-width:1.3px;
  stroke-opacity:.92 !important;
  filter:none !important;
  opacity:1 !important;
  animation:none !important;
}

/* 3. 駐車場表示: 状態不明は水色、P1〜P7の状態があれば色分け。
 * 最新の data-parking-status が更新されても同じルールが効く。
 */
.festival-map-svg.is-parking-overview #parking {
  opacity:1 !important;
}
.festival-map-svg.is-parking-overview #parking > path {
  fill:#9CCFEB !important;
  stroke:#648173 !important;
  opacity:1 !important;
}
.festival-map-svg.is-parking-overview #parking > path[data-parking-status="available"] {
  fill:#69AD89 !important;
  stroke:#478067 !important;
}
.festival-map-svg.is-parking-overview #parking > path[data-parking-status="crowded"] {
  fill:#D8AA58 !important;
  stroke:#9C742F !important;
}
.festival-map-svg.is-parking-overview #parking > path[data-parking-status="full"] {
  fill:#D87570 !important;
  stroke:#984D49 !important;
}
.festival-map-svg.is-parking-overview #parking > path[data-parking-status="closed"] {
  fill:#7E8984 !important;
  stroke:#555F5B !important;
}

/* 4. 施設表示: 既存の視認性の調整だけ維持（旧v420から移管）。 */
body .festival-map-svg.is-exhibition-overview #parking {
  opacity:.52 !important;
}
body .festival-map-svg.is-exhibition-overview #parking > path.map-dim {
  opacity:1 !important;
}

/* 5. 駐車場表示のラベル: モード切替中も文字サイズを変化させない。
 * 古い unified.css の opacity/visibility transition 中に
 * 28px -> 19px に戻る一瞬のチラつきを防ぐため、非表示時も固定する。
 */
.festival-map-svg #parking-status-overlay {
  transition:none !important;
}

.festival-map-svg #parking-status-overlay .parking-status-name {
  font-size:28px !important;
  font-weight:900 !important;
  letter-spacing:-.02em;
}
.festival-map-svg #parking-status-overlay .parking-status-value {
  font-size:25px !important;
  font-weight:900 !important;
}
.festival-map-svg #parking-status-overlay .parking-number-only .parking-status-name {
  fill:#28618C;
  font-size:29px !important;
}
.festival-map-svg .parking-number-only .parking-status-bg {
  fill:rgba(255,255,255,.96);
  stroke:#5E91B2;
  stroke-width:1.3px;
}
/* 駐輪場: 独立した自転車ピクトを区画から少し右上に表示。 */
.festival-map-svg .parking-bike-bg {
  fill:#FFF;
  stroke:#5E91B2;
  stroke-width:1.5;
}
.festival-map-svg .parking-bike-symbol {
  fill:none;
  stroke:#28618C;
  stroke-width:2.8;
  stroke-linecap:round;
  stroke-linejoin:round;
}

/* 6. 案内サイン: 駐車場表示時のみ穏やかに明滅。 */
.festival-map-svg #sign {
  display:none !important;
  pointer-events:none !important;
}
.festival-map-svg.is-parking-overview #sign {
  display:inline !important;
  animation:kiyokasai-parking-sign-flash 2.2s ease-in-out infinite;
}
@keyframes kiyokasai-parking-sign-flash {
  0%,100% { opacity:.52; }
  50% { opacity:.92; }
}

/* v564: 道路に沿うやわらかな赤いハイライト。
 * 太めの淡赤色ハローに細い赤いラインを重ね、白い発光を作らない。
 * 速度・経路・一方通行の表示設定は既存のまま。 */
body.mode-live .festival-map-svg #parking-traffic-flow .parking-flow-halo {
  stroke:#E78088;
  stroke-width:6.4px;
  stroke-opacity:.27;
}
body.mode-live .festival-map-svg #parking-traffic-flow .parking-flow-trail {
  stroke:#DC5E68;
  stroke-width:2.35px;
  stroke-opacity:.81;
}
body.mode-live .festival-map-svg #parking-traffic-flow .parking-flow-head {
  stroke:#F08B91;
  stroke-width:2.2px;
  stroke-opacity:.92;
}
body.mode-live .festival-map-svg #parking-traffic-flow .parking-access-flow .parking-flow-halo {
  stroke-width:4.4px;
  stroke-opacity:.23;
}
body.mode-live .festival-map-svg #parking-traffic-flow .parking-access-flow .parking-flow-trail {
  stroke-width:1.75px;
  stroke-opacity:.78;
}
body.mode-live .festival-map-svg #parking-traffic-flow .parking-access-flow .parking-flow-head {
  stroke-width:1.9px;
  stroke-opacity:.89;
}

/* 8. 動きを減らす端末設定への対応。 */
@media (prefers-reduced-motion:reduce) {
  .festival-map-svg.is-parking-overview #sign {
    animation:none !important;
    opacity:.85;
  }
}

/* v533: TEST is an overlay only. Do not reserve space, draw a toolbar,
 * or move .live-page.day-app. Keep the live layout identical to production.
 * The outer /test page supplies this <details> widget.
 */
body.mode-live > details.test-preview-switcher {
  position: fixed !important;
  top: calc(43px + env(safe-area-inset-top, 0px)) !important;
  right: 10px !important;
  left: auto !important;
  bottom: auto !important;
  margin: 0 !important;
  width: max-content !important;
  max-width: calc(100vw - 20px) !important;
  transform: none !important;
  z-index: 2147483647 !important;
}

/* On narrow screens, the actual page heading is the top 34px row.
 * Shrink only the TEST widget, not the page heading or map.
 */
@media (max-width: 900px) {
  body.mode-live > details.test-preview-switcher {
    top: calc(5px + env(safe-area-inset-top, 0px)) !important;
    right: 7px !important;
    transform: scale(.77) !important;
    transform-origin: top right !important;
  }
}

/* Tablet-width header occupies two rows rather than the 34px phone row. */
@media (min-width: 721px) and (max-width: 900px) {
  body.mode-live > details.test-preview-switcher {
    top: calc(73px + env(safe-area-inset-top, 0px)) !important;
  }
}


/* v538: 駐車場外周の点滅色を各駐車場の状態に連動。
 * 色は #parking の data-parking-status と共通。
 * キーフレームでは stroke 色そのものは変えず、太さと不透明度を動かす。
 * これにより旧 unified.css のパルス色に引き戻されない。
 */
.festival-map-svg.is-parking-overview #parking > path {
  animation:none !important;
  stroke:#548AA8 !important; /* 状態不明＝水色 */
}
.festival-map-svg.is-parking-overview #parking > path[data-parking-status="available"] {
  stroke:#348659 !important;
}
.festival-map-svg.is-parking-overview #parking > path[data-parking-status="crowded"] {
  stroke:#AD7924 !important;
}
.festival-map-svg.is-parking-overview #parking > path[data-parking-status="full"] {
  stroke:#B84346 !important;
}
.festival-map-svg.is-parking-overview #parking > path[data-parking-status="closed"] {
  stroke:#59645E !important;
}

@media (prefers-reduced-motion:reduce) {
  .festival-map-svg.is-parking-overview #parking > path {
    animation:none !important;
    stroke-width:2.2px;
    stroke-opacity:.95;
  }
}

/* v543: マップ内の全エリアでタップ・ホバー・選択時の影をなくす。
 * 駐車場、駐輪場、展示施設、建物、メインストリートすべて対象。
 * モード別の色・透明度・駐車場外周の状況別パルスは保持する。
 */
body.mode-live .festival-map-svg .map-clickable:is(:hover, :active),
body.mode-live .festival-map-svg .map-active {
  filter:none !important;
}
body.mode-live .festival-map-svg,
body.mode-live .festival-map-svg .map-clickable {
  -webkit-tap-highlight-color:transparent;
}
/* 旧JavaScriptが一時的にキャッシュされた場合でも選択影を出さない。 */
body.mode-live .festival-map-svg #parking-selection-halo {
  display:none !important;
}


/* v544: Parking / facility views must NOT show the Main Street band.
 * Old unified.css deliberately left this red area faint; remove it entirely
 * while preserving the Main Street in the all view and its own mode.
 */
.festival-map-svg:is(.is-parking-overview, .is-exhibition-overview) #mainstreet,
.festival-map-svg:is(.is-parking-overview, .is-exhibition-overview) #mainstreet-label-overlay {
  display:none !important;
  visibility:hidden !important;
  opacity:0 !important;
  pointer-events:none !important;
  animation:none !important;
  transition:none !important;
}


/* v546: six independent states, overriding all older parking colours/pulses. */
.festival-map-svg.is-parking-overview #parking > path[data-parking-status="hidden"],
.festival-map-svg.is-parking-overview #parking > path[data-parking-status="staff"] {
  fill:#DDE4E1 !important;
  stroke:#B7C2BC !important;
  stroke-width:1.25px !important;
  stroke-opacity:.70 !important;
  opacity:1 !important;
  animation:none !important;
  filter:none !important;
}
.festival-map-svg.is-parking-overview #parking > path[data-parking-status="visible"] {
  fill:#9CCFEB !important;
  stroke:#548AA8 !important;
  animation:none !important;
}
.festival-map-svg #parking-status-overlay .parking-staff-only .parking-status-name,
.festival-map-svg #parking-status-overlay .parking-staff-only.parking-number-only .parking-status-name {
  font-size:20px !important;
  font-weight:900 !important;
  letter-spacing:-.035em;
  fill:#697872 !important;
}
.festival-map-svg #parking-status-overlay .parking-staff-only .parking-status-bg {
  fill:#F2F5F3 !important;
  stroke:#B8C3BD !important;
}
/* Bike's symbol remains visible for all states except hidden; its border reflects state. */
.festival-map-svg #parking-status-overlay .parking-bike-only[data-status="available"] .parking-bike-bg { stroke:#348659 !important; }
.festival-map-svg #parking-status-overlay .parking-bike-only[data-status="crowded"] .parking-bike-bg { stroke:#AD7924 !important; }
.festival-map-svg #parking-status-overlay .parking-bike-only[data-status="full"] .parking-bike-bg { stroke:#B84346 !important; }
.festival-map-svg #parking-status-overlay .parking-bike-only[data-status="closed"] .parking-bike-bg { stroke:#59645E !important; }


/* v548: P番号・関係者駐車場は深緑のまま。
 * 「空・混・満・止」の文字だけ各ステータス色とのコントラストを確保。
 * 黄色チップのみ濃い緑、それ以外は白。位置・大きさ・背景・点滅色は変更しない。
 */
body.mode-live .festival-map-svg #parking-status-overlay .parking-status-pill .parking-status-name,
.festival-map-svg #parking-status-overlay .parking-status-pill.parking-staff-only .parking-status-name {
  fill:#214C3F !important;
}
body.mode-live .festival-map-svg #parking-status-overlay .parking-status-pill .parking-status-value {
  fill:#FFFFFF !important;
}
body.mode-live .festival-map-svg #parking-status-overlay .parking-status-pill[data-status="crowded"] .parking-status-value {
  fill:#234034 !important;
}


/* v549: 駐車場の個別拡大表示（施設の個別ズームと同じ操作）。 */
/* v555: Same as facility detail: fade the OTHER labels instead of display:none. */
.festival-map-svg.is-parking-overview.is-parking-detail #parking-status-overlay .parking-status-pill:not(.is-parking-selected-label) {
  opacity:0 !important;
  visibility:hidden !important;
  pointer-events:none !important;
}
.festival-map-svg.is-parking-overview.is-parking-detail #parking > path:not(.is-parking-selected) {
  opacity:.22 !important;
  animation:none !important;
}
.festival-map-svg.is-parking-overview.is-parking-detail #parking > path.is-parking-selected {
  opacity:1 !important;
}
/* v555: direction signs and route lights fade during detail changes, rather than pop. */
.festival-map-svg.is-parking-overview.is-parking-detail #sign,
body.mode-live .festival-map-svg.is-parking-overview.is-parking-detail #parking-traffic-flow {
  opacity:0 !important;
  visibility:hidden !important;
  pointer-events:none !important;
  animation:none !important;
}

/* バッジ自体もクリックできる。関係者駐車場のラベルは閲覧専用。 */
.festival-map-svg.is-parking-overview #parking-status-overlay .parking-status-pill:not(.parking-staff-only) {
  pointer-events:all !important;
  cursor:pointer;
}
.festival-map-svg.is-parking-overview #parking-status-overlay .parking-staff-only {
  pointer-events:none !important;
}


/* v550: uniform pointer hit areas for parking lots and their labels. */
.festival-map-svg #parking-hit-overlay { pointer-events:none !important; }
.festival-map-svg #parking-hit-overlay .parking-hit-zone {
  pointer-events:all !important;
  fill:transparent !important;
  stroke:none !important;
  cursor:pointer;
}
/* The hit layer is part of the parking overlay and is absent outside parking mode. */
.festival-map-svg:not(.is-parking-overview) #parking-hit-overlay { display:none !important; }
.festival-map-svg.is-parking-overview #parking-status-overlay .parking-staff-only {
  pointer-events:all !important;
  cursor:pointer;
}


/* v555: 施設ラベルと同じ 360ms / cubic-bezier(.22,.61,.36,1) に統一。
   上側のラベルは元の位置のまま、地図と一緒に移動する。 */
body.mode-live .festival-map-svg #parking-status-overlay .parking-status-pill {
  transition: transform .36s cubic-bezier(.22, .61, .36, 1),
              opacity .20s ease, visibility .20s ease !important;
  transform-box: view-box;
  transform-origin: 0 0;
}
@media (prefers-reduced-motion: reduce) {
  body.mode-live .festival-map-svg #parking-status-overlay .parking-status-pill {
    transition: none !important;
  }
}


/* v555: zoom-out and the label share the facility zoom easing and one requestAnimationFrame timeline.
   Disable the old independent CSS transition ONLY during a return. */
/* The selected label uses the same JS viewBox clock on return.
 * Keep the opacity transition for OTHER labels, so they fade back in. */
body.mode-live .festival-map-svg.is-parking-returning #parking-status-overlay .parking-status-pill.is-parking-selected-label {
  transition: none !important;
}


/* v555: facility-matched visibility and opacity on parking detail and return.
 * 460ms viewBox easing; 180ms area and 200ms label fade, identical to facilities.
 * Do not toggle display:none mid-animation. */
body.mode-live .festival-map-svg.is-parking-overview #parking > path {
  transition: opacity .18s ease !important;
}
body.mode-live .festival-map-svg.is-parking-overview.is-parking-detail.is-parking-returning
#parking > path:not(.is-parking-selected) {
  opacity:1 !important;
}
body.mode-live .festival-map-svg.is-parking-overview.is-parking-detail.is-parking-returning
#parking-status-overlay .parking-status-pill:not(.is-parking-selected-label) {
  opacity:1 !important;
  visibility:visible !important;
  pointer-events:none !important;
}
/* Background arrows keep their gentle flicker in overview.
 * Fade the enclosing group independently of the blinking children. */
.festival-map-svg.is-parking-overview #sign {
  opacity:1;
  transition:opacity .20s ease, visibility .20s ease !important;
  animation:none !important;
}
.festival-map-svg.is-parking-overview #sign > g {
  animation:kiyokasai-parking-sign-flash 2.2s ease-in-out infinite;
}
.festival-map-svg.is-parking-overview.is-parking-detail.is-parking-returning #sign {
  opacity:1 !important;
  visibility:visible !important;
}
body.mode-live .festival-map-svg.is-parking-overview #parking-traffic-flow {
  transition:opacity .20s ease, visibility .20s ease !important;
  opacity:1;
}
body.mode-live .festival-map-svg.is-parking-overview.is-parking-detail.is-parking-returning #parking-traffic-flow {
  opacity:1 !important;
  visibility:visible !important;
}
@media (prefers-reduced-motion:reduce) {
  body.mode-live .festival-map-svg.is-parking-overview #parking > path,
  body.mode-live .festival-map-svg #parking-status-overlay .parking-status-pill,
  body.mode-live .festival-map-svg.is-parking-overview #parking-traffic-flow,
  .festival-map-svg.is-parking-overview #sign {
    transition:none !important;
  }
  .festival-map-svg.is-parking-overview #sign > g {
    animation:none !important;
  }
}


/* v556: 個別ズームでは可変のstroke-widthが拡大時の輪郭ずれに見える。
 * 枠そのもの（元のSVGパス）に、固定線幅の透明度パルスだけを適用。
 * non-scaling-strokeでズーム中・ズーム後の見かけの線幅も維持する。
 * 非表示/関係者駐車場の「点滅なし」はそのまま守る。
 */
body.mode-live .festival-map-svg.is-parking-overview.is-parking-detail
#parking > path.is-parking-selected:not([data-parking-status="hidden"]):not([data-parking-status="staff"]) {
  animation:none !important;
  vector-effect:non-scaling-stroke !important;
  stroke-width:1.3px !important;
  stroke-linejoin:round;
}

@media (prefers-reduced-motion:reduce) {
  body.mode-live .festival-map-svg.is-parking-overview.is-parking-detail
  #parking > path.is-parking-selected {
    animation:none !important;
    stroke-width:1.3px !important;
    stroke-opacity:.95 !important;
  }
}

/* v562: 本部スタッフの一方通行表示設定。駐車場の色や点滅とは独立。 */
body.kiyo-traffic-signs-off .festival-map-svg #sign,
body.kiyo-traffic-signs-off .festival-map-svg.is-parking-overview #sign {
  display:none !important;
  visibility:hidden !important;
  animation:none !important;
}
body.mode-live.kiyo-traffic-lights-off .festival-map-svg #parking-traffic-flow,
body.mode-live.kiyo-traffic-lights-off .festival-map-svg.is-parking-overview #parking-traffic-flow {
  display:none !important;
  visibility:hidden !important;
}


/* v565: 情報欄の INFO 表示をなくし、駐車場の個別ズームは状況と名称を横並びに。 */
.festival-map-info-card.is-parking-info-detail .festival-map-card-head,
.festival-map-info-card.is-parking-info-detail .festival-map-info-text,
.festival-map-info-card.is-parking-info-detail .festival-map-info-note {
  display:none !important;
}
.festival-map-info-card .festival-parking-detail-info[hidden] { display:none !important; }
.festival-map-info-card .festival-parking-detail-info {
  padding-top:17px;
}
.festival-parking-detail-row {
  display:flex;
  align-items:center;
  justify-content:flex-start;
  gap:14px;
  min-width:0;
}
.festival-parking-detail-state {
  flex:none;
  color:#214C3F;
  font-size:clamp(26px,3.3vw,37px);
  line-height:1.1;
  font-weight:900;
}
.festival-parking-detail-name {
  min-width:0;
  color:#214C3F;
  font-size:clamp(13px,1.7vw,18px);
  font-weight:800;
  line-height:1.45;
  overflow-wrap:anywhere;
}
.festival-parking-detail-info.has-no-parking-condition .festival-parking-detail-state { display:none; }
.festival-parking-detail-updated {
  display:block;
  margin-top:7px;
  color:#6F8178;
  font-size:11px;
  line-height:1.4;
  font-weight:600;
}
.festival-parking-detail-updated[hidden] { display:none !important; }
@media (max-width: 440px) {
  .festival-map-info-card .festival-parking-detail-info { padding-top:9px; }
  .festival-parking-detail-row { gap:8px; }
  .festival-parking-detail-state { font-size:28px; }
  .festival-parking-detail-name { font-size:12px; }
  .festival-parking-detail-updated { margin-top:5px; font-size:10px; }
}

/* v567: ズーム解除中は枠の点滅だけ止める。細い実線は消さない。
 * 線幅を変えず、元のSVGパスに沿った静止した輪郭を維持する。 */
body.mode-live .festival-map-svg.is-parking-overview.is-parking-detail.is-parking-returning #parking > path,
body.mode-live .festival-map-svg.is-parking-overview.is-parking-detail.is-parking-returning #parking > path.is-parking-selected:not([data-parking-status="hidden"]):not([data-parking-status="staff"]) {
  animation:none !important;
  stroke-width:1.3px !important;
  stroke-opacity:.72 !important;
  vector-effect:non-scaling-stroke !important;
  transition:stroke-opacity .12s ease !important;
}


/* v566: 駐車場案内の文面・見出し・状況バッジ（地図上の状態色と統一） */
.festival-map-info-card .festival-map-info-note[hidden] {
  display:none !important;
}
.festival-map-info-card.is-parking-info-detail .festival-parking-detail-row {
  gap:12px;
  align-items:center;
}
.festival-map-info-card.is-parking-info-detail .festival-parking-detail-state,
.festival-map-info-card.is-parking-info-detail .festival-parking-detail-name {
  font-size:25px;
  font-weight:800;
  line-height:1.2;
  letter-spacing:0;
}
.festival-map-info-card.is-parking-info-detail .festival-parking-detail-state {
  display:inline-flex;
  flex:none;
  min-width:1.65em;
  min-height:1.65em;
  padding:0 .22em;
  border-radius:6px;
  align-items:center;
  justify-content:center;
  box-sizing:border-box;
  color:#fff;
  background:#7E8984;
  font-weight:900;
}
.festival-map-info-card.is-parking-info-detail .festival-parking-detail-state[data-status="available"] {
  background:#69AD89;
  color:#fff;
}
.festival-map-info-card.is-parking-info-detail .festival-parking-detail-state[data-status="crowded"] {
  background:#D8AA58;
  color:#214C3F;
}
.festival-map-info-card.is-parking-info-detail .festival-parking-detail-state[data-status="full"] {
  background:#D87570;
  color:#fff;
}
.festival-map-info-card.is-parking-info-detail .festival-parking-detail-state[data-status="closed"] {
  background:#7E8984;
  color:#fff;
}
.festival-map-info-card.is-parking-info-detail .festival-parking-detail-name {
  margin:0;
  min-width:0;
  color:#214C3F;
  overflow-wrap:anywhere;
}
.festival-map-info-card.is-parking-info-detail .festival-parking-detail-description {
  display:block;
  margin:14px 0 0;
  color:var(--muted,#59766C);
  font-size:14px;
  line-height:1.8;
}
.festival-map-info-card.is-parking-info-detail .festival-parking-detail-updated {
  margin-top:7px;
}
@media (max-width:900px) {
  .festival-map-info-card.is-parking-info-detail .festival-parking-detail-description {font-size:12px; margin-top:12px; line-height:1.7;}
}
/* 他の情報見出しと同じ：PC 25px、スマホ（720px以下）14px。 */
@media (max-width:720px) {
  .festival-map-info-card.is-parking-info-detail .festival-parking-detail-row {gap:8px;}
  .festival-map-info-card.is-parking-info-detail .festival-parking-detail-state,
  .festival-map-info-card.is-parking-info-detail .festival-parking-detail-name {font-size:14px;}
  .festival-map-info-card.is-parking-info-detail .festival-parking-detail-description {font-size:10px; margin-top:9px; line-height:1.55;}
}


/* v567: 駐車場個別情報の見出し・本文を通常の案内欄と同サイズに揃える。
 * スマホ側の既存 .festival-map-info-text (!important) と等しいサイズを使う。 */
body.mode-live .day-map-screen .festival-map-info-card.is-parking-info-detail .festival-parking-detail-info {
  display:flex;
  flex-direction:column;
  padding-top:0;
  min-width:0;
}
body.mode-live .day-map-screen .festival-map-info-card.is-parking-info-detail .festival-parking-detail-row {
  gap:9px;
  align-items:center;
  min-width:0;
}
body.mode-live .day-map-screen .festival-map-info-card.is-parking-info-detail :is(.festival-parking-detail-name,.festival-parking-detail-state) {
  font-size:clamp(18px,1.75vw,23px);
  line-height:1.25;
  font-weight:850;
}
body.mode-live .day-map-screen .festival-map-info-card.is-parking-info-detail .festival-parking-detail-state {
  min-width:1.5em;
  min-height:1.5em;
  padding:0 .19em;
  border-radius:5px;
}
body.mode-live .day-map-screen .festival-map-info-card.is-parking-info-detail .festival-parking-detail-description {
  margin:11px 0 0;
  font-size:12px;
  line-height:1.6;
  color:var(--muted,#59766C);
}
body.mode-live .day-map-screen .festival-map-info-card.is-parking-info-detail .festival-parking-detail-updated:not([hidden]) {
  display:block;
  align-self:flex-end;
  margin:6px 0 0 auto;
  text-align:right;
  font-size:10px;
  line-height:1.3;
}
/* 関係者駐車場・駐輪場は状況バッジを描画しない。 */
body.mode-live .day-map-screen .festival-map-info-card.is-parking-info-detail
.festival-parking-detail-info.has-no-parking-condition .festival-parking-detail-state {
  display:none !important;
}
@media (max-width:900px) {
  body.mode-live .day-map-screen .festival-map-info-card.is-parking-info-detail :is(.festival-parking-detail-name,.festival-parking-detail-state) {
    font-size:clamp(16px,4.6vw,20px);
  }
  body.mode-live .day-map-screen .festival-map-info-card.is-parking-info-detail .festival-parking-detail-description {
    font-size:clamp(12px,3.25vw,14px);
    line-height:1.5;
    margin-top:7px;
  }
}

/* v567: the information card also appears outside .day-map-screen
 * (desktop/previews). These selectors must not depend on a wrapper. */
body.mode-live .festival-map-info-card.is-parking-info-detail .festival-parking-detail-info {
  display:flex;
  flex-direction:column;
  padding-top:0;
  min-width:0;
}
body.mode-live .festival-map-info-card.is-parking-info-detail .festival-parking-detail-row {
  align-items:center;
  gap:9px;
}
body.mode-live .festival-map-info-card.is-parking-info-detail .festival-parking-detail-description {
  margin:11px 0 0;
  line-height:1.6;
  color:var(--muted,#59766C);
}
body.mode-live .festival-map-info-card.is-parking-info-detail .festival-parking-detail-updated:not([hidden]) {
  display:block;
  align-self:flex-end;
  width:max-content;
  max-width:100%;
  margin:7px 0 0 auto;
  text-align:right;
  font-size:10px;
  line-height:1.3;
}
body.mode-live .festival-map-info-card.is-parking-info-detail
.festival-parking-detail-info.has-no-parking-condition .festival-parking-detail-state {
  display:none !important;
}
@media (max-width:900px) {
  body.mode-live .festival-map-info-card.is-parking-info-detail .festival-parking-detail-description {
    margin-top:7px;
    line-height:1.5;
  }
}


/* v568: 関係者駐車場は「停止」と同じグレーで固定。点滅なし。 */
body.mode-live .festival-map-svg.is-parking-overview #parking > path[data-parking-status="staff"] {
  fill:#7E8984 !important;
  stroke:#555F5B !important;
  stroke-width:1.3px !important;
  stroke-opacity:.92 !important;
  animation:none !important;
  filter:none !important;
}
/* ズーム解除中も色を保ち、細い枠線の位置を変えず点滅は停止。 */
body.mode-live .festival-map-svg.is-parking-overview.is-parking-detail.is-parking-returning
#parking > path[data-parking-status="staff"] {
  fill:#7E8984 !important;
  stroke:#555F5B !important;
  stroke-width:1.3px !important;
  stroke-opacity:.92 !important;
  animation:none !important;
}


/* v569: 全駐車場（駐輪場を含む）の外周点滅を完全に停止。
 * 旧 unified.css / map-v424.css および個別拡大用の強いセレクタより後で適用。
 * 状態別の塗り色・輪郭色は触れず、細い線を一定の太さで保持する。
 */
body.mode-live .festival-map-svg #parking > path,
body.mode-live .festival-map-svg.is-parking-overview #parking > path,
body.mode-live .festival-map-svg.is-parking-overview.is-parking-detail #parking > path.is-parking-selected:not([data-parking-status="hidden"]):not([data-parking-status="staff"]),
body.mode-live .festival-map-svg.is-parking-overview.is-parking-detail.is-parking-returning #parking > path {
  animation:none !important;
  stroke-width:1.3px !important;
  vector-effect:non-scaling-stroke !important;
}

/* 個別ズーム中は一覧用の説明テキストを描画させない。
 * JS側でも hidden 指定とテキスト消去を行う二重の保護。
 */
body.mode-live .festival-map-info-card.is-parking-info-detail .festival-map-info-text,
body.mode-live .festival-map-info-card.is-parking-info-detail .festival-map-info-note,
body.mode-live .festival-map-info-card .festival-map-info-text[hidden] {
  display:none !important;
}


/* v570: メインストリートでは主要施設以外の建物を表示しない。
   既存の配置調整は主要施設のみに引き続き適用する。 */
body.mode-live .festival-map-svg.is-food-mode #building #another,
body.mode-live .festival-map-svg.is-food-mode #building #another path {
  display:none !important;
  visibility:hidden !important;
  pointer-events:none !important;
}

/* ステージ名は地図内で選択できる。動かさずにタップ可能領域を保つ。 */
body.mode-live .festival-map-svg.is-food-mode #mainstreet-stage-overlay,
body.mode-live .festival-map-svg.is-food-mode #mainstreet-stage-overlay .mainstreet-stage-label {
  pointer-events:all !important;
}
body.mode-live .festival-map-svg #mainstreet-stage-overlay .mainstreet-stage-label {
  cursor:pointer;
  outline:none;
}
body.mode-live .festival-map-svg #mainstreet-stage-overlay .mainstreet-stage-label.is-selected .mainstreet-stage-bg,
body.mode-live .festival-map-svg #mainstreet-stage-overlay .mainstreet-stage-label:focus-visible .mainstreet-stage-bg {
  stroke:#39775c !important;
  stroke-width:1.65px !important;
}


/* v573 | Map info readability: 全体/メインストリート/施設/駐車場に共通。
   他画面の文字サイズには影響させず、狭い画面でも読み取れる濃さに。 */
body.mode-live .day-map-screen .festival-map-info-card .festival-map-card-head .festival-map-info-title {
  font-size:clamp(24px,2.4vw,29px) !important;
  line-height:1.28 !important;
  color:#214c3f !important;
}
body.mode-live .day-map-screen .festival-map-info-card .festival-map-info-text {
  font-size:clamp(16px,1.5vw,18px) !important;
  line-height:1.6 !important;
  color:#293f37 !important;
  font-weight:500;
}
body.mode-live .day-map-screen .festival-map-info-card .festival-map-info-note {
  font-size:14px;
  color:#405a4e;
}
body.mode-live .day-map-screen .festival-map-info-card.is-parking-info-detail .festival-parking-detail-description,
body.mode-live .day-map-screen .festival-map-info-card.is-shop-info .festival-shop-detail-sales,
body.mode-live .day-map-screen .festival-map-info-card.is-shop-info .festival-shop-detail-description {
  color:#293f37 !important;
  font-weight:500;
  line-height:1.55;
}
body.mode-live .day-map-screen .festival-map-info-card.is-parking-info-detail .festival-parking-detail-name {
  color:#214c3f !important;
}
@media (max-width:900px) {
  body.mode-live .day-map-screen .festival-map-info-card .festival-map-card-head .festival-map-info-title {
    font-size:clamp(20px,5.15vw,24px) !important;
  }
  body.mode-live .day-map-screen .festival-map-info-card .festival-map-info-text {
    font-size:clamp(16px,4.15vw,18px) !important;
    line-height:1.55 !important;
  }
  /* 文字が増えても途中で切れないよう説明枠内だけスクロール可能にする。 */
  body.mode-live .day-map-screen .festival-map-info-card {
    overflow-x:hidden;
    overflow-y:auto;
    overscroll-behavior:contain;
  }
}


/* v575: 説明欄は内側をスクロールさせず、一覧への導線を右下に置く。 */
body.mode-live .day-map-screen .festival-map-info-card {
  display:flex;
  flex-direction:column;
  min-height:0;
  overflow:hidden !important;
  overscroll-behavior:none;
}
body.mode-live .day-map-screen .festival-map-shops-link {
  align-self:flex-end;
  flex:none;
  margin-top:auto;
  margin-left:auto;
  padding:8px 11px;
  border:1px solid #a2c9b7;
  border-radius:10px;
  background:#ecf7f1;
  color:#214e3c;
  font:inherit;
  font-size:clamp(11px,1.1vw,13px);
  line-height:1.35;
  font-weight:800;
  cursor:pointer;
  text-align:right;
  max-width:100%;
}
body.mode-live .day-map-screen .festival-map-shops-link[hidden] {display:none !important;}
body.mode-live .day-map-screen .festival-map-shops-link:hover {background:#d9efe3;}
body.mode-live .day-map-screen .festival-map-info-card.is-shop-info .festival-shop-detail {
  flex:none;
  margin-bottom:8px;
}
@media (max-width:900px) {
  body.mode-live .day-map-screen .festival-map-shops-link {
    font-size:clamp(10px,2.8vw,12px);
    padding:6px 9px;
  }
}

/* v579: 露店番号・ステージを選択しても面と文字は通常どおり。
   SVGグループ全体の opacity アニメーションは描画の残像/線状ノイズを
   起こすことがあるため使わず、個々の輪郭の stroke-opacity だけ明滅。 */
body.mode-live .festival-map-svg.is-food-mode .shop-map-marker.is-selected,
body.mode-live .festival-map-svg.is-food-mode #mainstreet-stage-overlay .mainstreet-stage-label.is-selected {
  animation:none !important;
  opacity:1 !important;
  filter:none !important;
}
/* 丸の直径は変えず、色と太さだけを変える。 */
body.mode-live .festival-map-svg.is-food-mode .shop-map-marker.is-selected .shop-map-marker-hit,
body.mode-live .festival-map-svg.is-food-mode .shop-map-marker.is-selected:focus-visible .shop-map-marker-hit {
  fill:#fffefa !important;
  fill-opacity:.97 !important;
  stroke:#c72b39 !important;
  stroke-width:2px !important;
  stroke-opacity:1;
  vector-effect:non-scaling-stroke !important;
  animation:kiyokasai-selected-outline-blink 1.8s ease-in-out infinite !important;
}
body.mode-live .festival-map-svg.is-food-mode .shop-map-marker.is-selected .shop-map-marker-number {
  fill:#244c3f !important;
  opacity:1 !important;
}
/* ステージは背景の白と文字の緑を保ち、四角い輪郭だけ赤く明滅。 */
body.mode-live .festival-map-svg.is-food-mode #mainstreet-stage-overlay .mainstreet-stage-label.is-selected .mainstreet-stage-bg,
body.mode-live .festival-map-svg.is-food-mode #mainstreet-stage-overlay .mainstreet-stage-label.is-selected:focus-visible .mainstreet-stage-bg {
  fill:#fffef8 !important;
  fill-opacity:1 !important;
  stroke:#c72b39 !important;
  stroke-width:2px !important;
  stroke-opacity:1;
  vector-effect:non-scaling-stroke !important;
  animation:kiyokasai-selected-outline-blink 1.8s ease-in-out infinite !important;
}
body.mode-live .festival-map-svg.is-food-mode #mainstreet-stage-overlay .mainstreet-stage-label.is-selected .mainstreet-stage-char {
  fill:#214e3d !important;
  opacity:1 !important;
}
@keyframes kiyokasai-selected-outline-blink {
  0%,100% {stroke-opacity:1;}
  50% {stroke-opacity:.18;}
}
@media (prefers-reduced-motion:reduce) {
  body.mode-live .festival-map-svg.is-food-mode .shop-map-marker.is-selected .shop-map-marker-hit,
  body.mode-live .festival-map-svg.is-food-mode #mainstreet-stage-overlay .mainstreet-stage-label.is-selected .mainstreet-stage-bg {
    animation:none !important;
    stroke-opacity:1 !important;
  }
}
/* 以前の赤いメインストリート帯と駐車場の交通線は、
   メインストリート詳細のレイヤーでは描画しない。32〜34番付近も対象。 */
body.mode-live .festival-map-svg.is-food-mode #mainstreet,
body.mode-live .festival-map-svg.is-food-mode #parking-traffic-flow {
  display:none !important;
  visibility:hidden !important;
  pointer-events:none !important;
}


/* v582: 一覧ボタンは販売物の行数に依存させず、説明枠の右下に固定。 */
body.mode-live .day-map-screen .festival-map-info-card:has(> .festival-map-shops-link:not([hidden])) {
  position:relative;
  /* ボタンの高さを確実に確保し、販売物との重なりを防ぐ。 */
  padding-bottom:53px !important;
}
body.mode-live .day-map-screen .festival-map-info-card > .festival-map-shops-link:not([hidden]) {
  position:absolute;
  right:12px;
  bottom:10px;
  z-index:2;
  margin:0 !important;
  max-width:calc(100% - 24px);
}
body.mode-live .day-map-screen .festival-map-info-card.is-shop-info .festival-shop-detail {
  min-height:0;
  max-height:100%;
  overflow:hidden;
  margin-bottom:0;
}
body.mode-live .day-map-screen .festival-map-info-card.is-shop-info .festival-shop-detail-sales {
  /* 多品目でも販売物名の途中で折り返さない。文字サイズはJSで調整。 */
  line-height:1.42;
}
@media(max-width:720px) {
  body.mode-live .day-map-screen .festival-map-info-card:has(> .festival-map-shops-link:not([hidden])) {
    padding-bottom:48px !important;
  }
  body.mode-live .day-map-screen .festival-map-info-card > .festival-map-shops-link:not([hidden]) {
    right:12px;
    bottom:9px;
  }
}


/* v583: ステージ選択時の「タイムテーブルを見る」は、右下のまま大きなCTAにする。
   本部ではJSがボタンを非表示にするため、下部の余白も自動で解除される。 */
body.mode-live .day-map-screen .festival-map-shops-link[data-day-open="timetable"]:not([hidden]) {
  padding:11px 18px;
  min-height:44px;
  border:1px solid #286a51;
  border-radius:12px;
  background:#287355;
  color:#ffffff;
  font-size:clamp(14px,1.35vw,17px);
  font-weight:800;
  line-height:1.3;
  text-align:center;
  box-shadow:0 3px 12px rgba(22,75,53,.22);
}
body.mode-live .day-map-screen .festival-map-shops-link[data-day-open="timetable"]:not([hidden]):hover {
  background:#205e46;
}
body.mode-live .day-map-screen .festival-map-shops-link[data-day-open="timetable"]:focus-visible {
  outline:3px solid #9cd5b6;
  outline-offset:2px;
}
body.mode-live .day-map-screen .festival-map-info-card:has(> .festival-map-shops-link[data-day-open="timetable"]:not([hidden])) {
  padding-bottom:68px !important;
}
@media (max-width:720px) {
  body.mode-live .day-map-screen .festival-map-shops-link[data-day-open="timetable"]:not([hidden]) {
    padding:10px 15px;
    min-height:42px;
    font-size:clamp(14px,3.7vw,16px);
  }
  body.mode-live .day-map-screen .festival-map-info-card:has(> .festival-map-shops-link[data-day-open="timetable"]:not([hidden])) {
    padding-bottom:64px !important;
  }
}


/* v606: 施設表示の建物名だけを拡大。JS側の白い背景サイズと対応。 */
body.mode-live .festival-map-svg.is-exhibition-overview #facility-label-overlay .facility-name-text {
  font-size:14px !important;
  font-weight:900 !important;
  fill:#254f41;
  dominant-baseline:central;
}

/* 施設表示中の駐車場は青ではなく、全体表示と同系統のグレーに統一。
   駐車場モード中の空・混・満・停止の色分けには影響させない。 */
body.mode-live .festival-map-svg.is-exhibition-overview #parking > path {
  fill:#c5cdca !important;
  stroke:#899a93 !important;
  stroke-opacity:.92 !important;
  filter:none !important;
}

/* v608: 施設モードでは透明なメインストリート詳細レイヤーが建物の
   SVGパスへのタップを遮らないよう、レイヤーごと当たり判定を外す。 */
body.mode-live .festival-map-svg.is-exhibition-overview #mainstreetgroup,
body.mode-live .festival-map-svg.is-exhibition-overview #mainstreetgroup * {
  pointer-events:none !important;
}
