/* FESTIVAL-07 — public "축제" browse UI.
   Lives inside .site-festival-modal (site-conversation.js openFestival()),
   following the same modal-modifier pattern as .site-calendar-modal /
   .site-pet-modal: the shared .site-modal shell handles the backdrop/header,
   this file only sizes the panel and styles what mountFestivalManager()
   (site-festival-ui.js) renders into .site-modal-content. */

.site-modal.site-festival-modal {
  width: min(100%, 900px);
  max-height: min(88vh, 860px);
  display: flex;
  flex-direction: column;
  overflow: hidden;
}

.site-modal.site-festival-modal > .site-modal-header,
.site-modal.site-festival-modal > .site-modal-description {
  flex: 0 0 auto;
}

.site-modal.site-festival-modal > .site-modal-content {
  flex: 1 1 auto;
  min-height: 0;
  overflow-x: hidden;
  overflow-y: auto;
}

@media (max-width: 760px) {
  .site-modal.site-festival-modal {
    width: 100%;
    max-height: 92svh;
  }
}

.festival-manager {
  display: flex;
  flex-direction: column;
  gap: 16px;
}

/* ------------------------------------------------------------- filters -- */
.festival-filter-bar {
  display: flex;
  flex-direction: column;
  gap: 10px;
}

/* Chips always wrap, never a vertical list — required for the 17-region row
   to fit narrow Mobile Web widths (360–430px) without horizontal overflow. */
.festival-chip-row {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
}

.festival-chip {
  min-height: 44px;
  border: 1px solid var(--lotbi-border-default);
  border-radius: 999px;
  padding: 6px 14px;
  font-size: 13px;
  font-weight: 600;
  background: var(--lotbi-surface-primary);
  color: var(--lotbi-text-secondary);
  cursor: pointer;
  white-space: nowrap;
}

.festival-chip:hover {
  background: var(--lotbi-surface-hover);
}

.festival-chip[aria-pressed="true"] {
  background: var(--lotbi-brand-solid-bg);
  border-color: var(--lotbi-brand-solid-bg);
  color: var(--lotbi-brand-solid-text);
}

.festival-chip:focus-visible {
  outline: 2px solid var(--lotbi-focus-ring);
  outline-offset: 2px;
}

/* 〈 2026년 9월 〉 월별 탐색 -- independent of the quick filter chips above;
   is-active mirrors the MONTH filter being selected, and then the month
   reads as the selected filter (filled like a pressed chip). */
.festival-month-nav {
  display: flex;
  align-items: center;
  gap: 10px;
  align-self: flex-start;
}

.festival-month-nav-button {
  min-width: 44px;
  min-height: 44px;
  border: 1px solid var(--lotbi-border-default);
  border-radius: 999px;
  background: var(--lotbi-surface-primary);
  color: var(--lotbi-text-secondary);
  font-size: 14px;
  font-weight: 700;
  cursor: pointer;
}

.festival-month-nav-button:hover {
  background: var(--lotbi-surface-hover);
}

.festival-month-nav-button:focus-visible {
  outline: 2px solid var(--lotbi-focus-ring);
  outline-offset: 2px;
}

.festival-month-nav-label {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  box-sizing: border-box;
  min-width: 112px;
  min-height: 44px;
  padding: 6px 14px;
  border: 1px solid transparent;
  border-radius: 999px;
  text-align: center;
  font-size: 13px;
  font-weight: 700;
  color: var(--lotbi-text-primary);
  white-space: nowrap;
}

.festival-month-nav.is-active .festival-month-nav-label {
  background: var(--lotbi-brand-solid-bg);
  border-color: var(--lotbi-brand-solid-bg);
  color: var(--lotbi-brand-solid-text);
}

/* --------------------------------------------------- location banner ---- */
.festival-location-banner {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
  padding: 10px 12px;
  border-radius: 12px;
  background: var(--lotbi-surface-subtle);
}

.festival-location-label {
  font-size: 13px;
  font-weight: 700;
  color: var(--lotbi-text-primary);
}

.festival-location-actions {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
}

.festival-location-busy {
  font-size: 12px;
  color: var(--lotbi-text-muted);
}

.festival-location-button {
  min-height: 36px;
  border: 1px solid var(--lotbi-border-default);
  border-radius: 999px;
  padding: 6px 14px;
  font-size: 13px;
  font-weight: 700;
  background: var(--lotbi-surface-primary);
  color: var(--lotbi-text-secondary);
  cursor: pointer;
}

.festival-location-button:hover {
  background: var(--lotbi-surface-hover);
}

.festival-location-button:focus-visible {
  outline: 2px solid var(--lotbi-focus-ring);
  outline-offset: 2px;
}

/* ------------------------------------------------------ region sheet ---- */
.festival-region-sheet {
  display: flex;
  flex-direction: column;
  gap: 14px;
}

.festival-region-sheet-title {
  margin: 0;
  font-size: 16px;
  font-weight: 800;
  color: var(--lotbi-text-primary);
}

.festival-region-list {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(120px, 1fr));
  gap: 8px;
}

.festival-region-option {
  min-height: 44px;
  border: 1px solid var(--lotbi-border-default);
  border-radius: 10px;
  padding: 8px 10px;
  font-size: 14px;
  font-weight: 600;
  background: var(--lotbi-surface-primary);
  color: var(--lotbi-text-secondary);
  cursor: pointer;
}

.festival-region-option:hover {
  background: var(--lotbi-surface-hover);
}

.festival-region-option.is-selected {
  background: var(--lotbi-brand-solid-bg);
  border-color: var(--lotbi-brand-solid-bg);
  color: var(--lotbi-brand-solid-text);
}

.festival-region-option:focus-visible {
  outline: 2px solid var(--lotbi-focus-ring);
  outline-offset: 2px;
}

.festival-region-current-button {
  align-self: flex-start;
  min-height: 44px;
  border: 1px solid var(--lotbi-border-strong);
  border-radius: 10px;
  padding: 10px 16px;
  font-size: 14px;
  font-weight: 700;
  background: var(--lotbi-surface-primary);
  color: var(--lotbi-link-primary);
  cursor: pointer;
}

.festival-region-current-button:hover {
  background: var(--lotbi-surface-hover);
}

.festival-region-current-button:focus-visible {
  outline: 2px solid var(--lotbi-focus-ring);
  outline-offset: 2px;
}

/* Desktop (INLINE) region sheet mount point, placed right where "지역 변경"
   itself is -- the sheet primitive's own default host (document.body) has no
   positioning for INLINE, so without this anchor a desktop click looked like
   it did nothing (see site-festival-ui.js's openRegionSheet). Empty when no
   sheet is open, so it never reserves layout space by itself. */
.festival-region-desktop-anchor:empty {
  display: none;
}

.festival-region-desktop-anchor {
  width: 100%;
  margin-top: 10px;
  border: 1px solid var(--lotbi-border-default);
  border-radius: 12px;
  padding: 14px;
  background: var(--lotbi-surface-primary);
}

/* Desktop (INLINE) [일정 등록] picker, opened right under the button inside
   the card (FESTIVAL-CALENDAR-SHEET-PC-01; same reason as the region anchor
   above). The sheet itself draws the box, so the anchor adds only spacing. */
.festival-calendar-add-desktop-anchor:empty {
  display: none;
}

.festival-calendar-add-desktop-anchor {
  width: 100%;
  margin-top: 8px;
}

/* A month grid as wide as the card would make 90px days; 420px keeps every
   day at least 48px without the picker filling the screen. */
.festival-calendar-add-desktop-anchor > .lotbi-sheet {
  max-width: 420px;
}

/* ---------------------------------------------------------- list state -- */
.festival-status,
.festival-error,
.festival-empty {
  margin: 0;
  font-size: 14px;
}

.festival-error {
  color: var(--lotbi-error-text);
}

.festival-status[hidden],
.festival-error[hidden],
.festival-empty[hidden] {
  display: none;
}

.festival-retry-button {
  align-self: flex-start;
  min-height: 44px;
  border: 1px solid var(--lotbi-border-strong);
  border-radius: 10px;
  padding: 8px 16px;
  font-size: 13px;
  font-weight: 700;
  background: var(--lotbi-surface-primary);
  color: var(--lotbi-text-primary);
  cursor: pointer;
}

.festival-retry-button[hidden] {
  display: none;
}

.festival-retry-button:hover {
  background: var(--lotbi-surface-hover);
}

.festival-retry-button:focus-visible {
  outline: 2px solid var(--lotbi-focus-ring);
  outline-offset: 2px;
}

/* --------------------------------------------- representative-photo list */
/* Photo-first vertical slots, top-to-bottom scroll — mobile is always one
   column; desktop widens to two only when there is real room for it. */
.festival-card-grid {
  display: grid;
  gap: 16px;
  grid-template-columns: 1fr;
}

@media (min-width: 640px) {
  .festival-card-grid {
    grid-template-columns: repeat(2, 1fr);
  }
}

.festival-load-more {
  align-self: center;
  min-height: 44px;
  border: 1px solid var(--lotbi-border-default);
  border-radius: 999px;
  padding: 10px 22px;
  font-size: 14px;
  font-weight: 700;
  background: var(--lotbi-surface-primary);
  color: var(--lotbi-text-secondary);
  cursor: pointer;
}

.festival-load-more[hidden] {
  display: none;
}

.festival-load-more:hover {
  background: var(--lotbi-surface-hover);
}

.festival-load-more:focus-visible {
  outline: 2px solid var(--lotbi-focus-ring);
  outline-offset: 2px;
}

/* The poster/photo is shown whole (contain: a poster's title is never cut);
   the same picture, blurred, fills the rest of the 16:9 frame. */
.festival-hero {
  position: relative;
  overflow: hidden;
  aspect-ratio: 16 / 9;
  background: var(--lotbi-surface-subtle);
  display: flex;
  align-items: center;
  justify-content: center;
}

.festival-hero img {
  width: 100%;
  height: 100%;
  object-fit: contain;
  display: block;
}

.festival-hero .festival-hero-image {
  position: relative;
}

.festival-hero .festival-hero-backdrop {
  position: absolute;
  inset: 0;
  object-fit: cover;
  filter: blur(18px) saturate(1.1);
  opacity: 0.55;
  transform: scale(1.15);
  pointer-events: none;
}

.festival-hero-placeholder::before {
  content: "축제·행사";
  font-size: 14px;
  font-weight: 700;
  color: var(--lotbi-text-disabled);
}

.festival-card {
  border: 1px solid var(--lotbi-border-default);
  border-radius: 14px;
  overflow: hidden;
  background: var(--lotbi-surface-primary);
}

.festival-card-open {
  display: block;
  width: 100%;
  text-align: left;
  background: none;
  border: 0;
  padding: 0;
  cursor: pointer;
  color: inherit;
  font: inherit;
  text-decoration: none;
}

/* No homepage_url -> a plain, non-interactive container (never a dead click target). */
.festival-card-open:not(a) {
  cursor: default;
}

.festival-card-open:focus-visible {
  outline: 2px solid var(--lotbi-focus-ring);
  outline-offset: -2px;
}

/* ------------------------------------------------------ card action row -- */
.festival-card-action-row {
  display: flex;
  flex-wrap: wrap;
  /* Top-aligned: "일정을 등록했어요." under [일정 등록] must not push the
     map button down to the middle of the taller column. */
  align-items: flex-start;
  gap: 6px;
  padding: 0 14px 14px;
}

/* Every card action — [프로그램] [접수] [일정 등록] — is the same 44px
   button; only [프로그램]/[접수] are filled. The map app is an icon only
   (.ri-icon-action from site-life-card-actions.js, REGIONAL-INFO-DESIGN-02). */
.festival-card-icon-button {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 6px;
  box-sizing: border-box;
  min-height: 44px;
  border: 1px solid var(--lotbi-border-default);
  border-radius: 10px;
  padding: 8px 12px;
  font: inherit;
  font-size: 14px;
  font-weight: 700;
  line-height: 1.2;
  color: var(--lotbi-text-primary);
  background: var(--lotbi-surface-primary);
  text-decoration: none;
  cursor: pointer;
}

.festival-card-icon-button[hidden] {
  display: none;
}

/* The consumer design gives every festival <button> weight 500
   (site-consumer-detail.css); the map action is a link, so it follows. */
body.chat-home-page .festival-manager a.festival-card-icon-button {
  font-weight: 500;
}

.festival-card-icon-button:disabled {
  opacity: 0.5;
  cursor: default;
}

.festival-card-icon-button:hover {
  background: var(--lotbi-surface-hover);
}

.festival-card-icon-button:focus-visible {
  outline: 2px solid var(--lotbi-focus-ring);
  outline-offset: 2px;
}

.festival-card-action-program,
.festival-card-action-registration {
  background: var(--lotbi-brand-solid-bg);
  color: var(--lotbi-brand-solid-text);
  border-color: transparent;
}

.festival-card-action-program:hover,
.festival-card-action-registration:hover {
  filter: brightness(0.96);
}

.festival-calendar-add-feedback {
  margin: 4px 0 0;
  font-size: 13px;
  color: var(--lotbi-text-muted);
}

.festival-card-body {
  display: flex;
  flex-direction: column;
  gap: 6px;
  padding: 12px 14px 14px;
}

.festival-card-name {
  margin: 0;
  font-size: 16px;
  font-weight: 800;
  color: var(--lotbi-text-primary);
}

.festival-card-period,
.festival-card-location,
.festival-card-distance {
  margin: 0;
  font-size: 13px;
  color: var(--lotbi-text-muted);
}

.festival-status-badge {
  align-self: flex-start;
  border-radius: 999px;
  padding: 3px 10px;
  font-size: 12px;
  font-weight: 700;
}

.festival-status-ongoing { background: color-mix(in srgb, var(--lotbi-success-text) 18%, transparent); color: var(--lotbi-success-text); }
.festival-status-this_weekend { background: color-mix(in srgb, var(--lotbi-info-text) 18%, transparent); color: var(--lotbi-info-text); }
.festival-status-upcoming { background: var(--lotbi-surface-subtle); color: var(--lotbi-text-secondary); }
.festival-status-ended { background: var(--lotbi-surface-subtle); color: var(--lotbi-text-disabled); }
.festival-status-cancelled { background: color-mix(in srgb, var(--lotbi-error-text) 18%, transparent); color: var(--lotbi-error-text); }
.festival-status-always_open { background: color-mix(in srgb, var(--lotbi-brand-solid-bg) 18%, transparent); color: var(--lotbi-brand-solid-bg); }

/* ------------------------------------------------------------- detail --- */
.festival-detail-surface {
  display: flex;
  flex-direction: column;
  gap: 16px;
}

.festival-back-button {
  align-self: flex-start;
  border: 0;
  background: none;
  color: var(--lotbi-link-primary);
  font-size: 14px;
  font-weight: 700;
  cursor: pointer;
  padding: 4px 0;
}

.festival-back-button:hover {
  color: var(--lotbi-link-hover);
}

/* One back per screen: where the site shell drives in-panel steps
   (data-subview-back), the panel's own ← goes back one step by pressing this
   button, so it stays in the page but is not shown twice. An older shell
   without that marker keeps showing it. */
html[data-subview-back-shell] .festival-back-button[data-subview-back] {
  display: none;
}

.festival-back-button:focus-visible {
  outline: 2px solid var(--lotbi-focus-ring);
  outline-offset: 2px;
}

.festival-detail-header {
  display: flex;
  flex-direction: column;
  gap: 6px;
}

.festival-detail-name {
  margin: 0;
  font-size: 20px;
  font-weight: 800;
  color: var(--lotbi-text-primary);
}

.festival-detail-period,
.festival-detail-location {
  margin: 0;
  font-size: 14px;
  color: var(--lotbi-text-muted);
}

.festival-detail-summary {
  margin: 4px 0 0;
  font-size: 14px;
  color: var(--lotbi-text-secondary);
  line-height: 1.5;
}

.festival-hero-detail {
  border-radius: 14px;
}

.festival-empty-note {
  margin: 0;
  font-size: 13px;
  color: var(--lotbi-text-muted);
}

/* --------------------------------------------------------------- CTAs --- */
/* At most two primary actions — [접수] and [프로그램] — never more. */
.festival-cta-row {
  display: flex;
  flex-wrap: wrap;
  gap: 10px;
}

.festival-cta-button {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border-radius: 12px;
  padding: 12px 18px;
  font-size: 14px;
  font-weight: 800;
  cursor: pointer;
  text-decoration: none;
  min-height: 44px; /* touch target */
  border: 1px solid transparent;
}

.festival-cta-program {
  background: var(--lotbi-brand-solid-bg);
  color: var(--lotbi-brand-solid-text);
}

.festival-cta-program:hover {
  filter: brightness(0.96);
}

.festival-cta-registration {
  background: var(--lotbi-surface-primary);
  color: var(--lotbi-text-primary);
  border-color: var(--lotbi-border-strong);
}

.festival-cta-registration:hover {
  background: var(--lotbi-surface-hover);
}

.festival-cta-button:focus-visible {
  outline: 2px solid var(--lotbi-focus-ring);
  outline-offset: 2px;
}

/* ------------------------------------------------- [접수] programs sheet -- */
.festival-registration-sheet {
  display: flex;
  flex-direction: column;
  gap: 14px;
}

.festival-registration-sheet-title {
  margin: 0;
  font-size: 16px;
  font-weight: 800;
  color: var(--lotbi-text-primary);
}

.festival-registration-list {
  display: flex;
  flex-direction: column;
  gap: 8px;
  margin: 0;
  padding: 0;
  list-style: none;
}

.festival-registration-link {
  display: flex;
  flex-direction: column;
  gap: 2px;
  min-height: 44px;
  border: 1px solid var(--lotbi-border-default);
  border-radius: 10px;
  padding: 10px 12px;
  text-decoration: none;
}

.festival-registration-link:hover {
  background: var(--lotbi-surface-hover);
}

.festival-registration-link:focus-visible {
  outline: 2px solid var(--lotbi-focus-ring);
  outline-offset: 2px;
}

.festival-registration-program-title {
  font-size: 14px;
  font-weight: 700;
  color: var(--lotbi-text-primary);
}

.festival-registration-program-time,
.festival-registration-program-venue {
  font-size: 13px;
  color: var(--lotbi-text-muted);
}

/* --------------------------------------------------- [일정 등록] sheet -- */
.festival-schedule-sheet {
  display: flex;
  flex-direction: column;
  gap: 10px;
}

.festival-schedule-sheet-title {
  margin: 0;
  font-size: 16px;
  font-weight: 800;
  color: var(--lotbi-text-primary);
}

.festival-schedule-sheet-name {
  margin: 0;
  font-size: 14px;
  font-weight: 700;
  color: var(--lotbi-text-primary);
}

.festival-schedule-sheet-period {
  margin: 0 0 4px;
  font-size: 13px;
  color: var(--lotbi-text-muted);
}

.festival-schedule-nav {
  display: flex;
  align-items: center;
  justify-content: space-between;
}

.festival-schedule-nav-button {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 44px;
  min-height: 44px;
  border: 1px solid var(--lotbi-border-default);
  border-radius: 10px;
  background: var(--lotbi-surface-primary);
  color: var(--lotbi-text-primary);
  font-size: 16px;
  cursor: pointer;
}

.festival-schedule-nav-button:disabled {
  opacity: 0.4;
  cursor: default;
}

.festival-schedule-nav-button:not(:disabled):hover {
  background: var(--lotbi-surface-hover);
}

.festival-schedule-month-label {
  font-size: 14px;
  font-weight: 800;
  color: var(--lotbi-text-primary);
}

.festival-schedule-weekday-row,
.festival-schedule-grid {
  display: grid;
  grid-template-columns: repeat(7, 1fr);
  /* 2px keeps a 390px phone's days at 48px or more. */
  gap: 2px;
}

.festival-schedule-weekday {
  text-align: center;
  font-size: 12px;
  font-weight: 700;
  color: var(--lotbi-text-muted);
}

.festival-schedule-date-cell {
  aspect-ratio: 1;
  display: flex;
  align-items: center;
  justify-content: center;
  border: 1px solid transparent;
  border-radius: 10px;
  background: none;
  font-size: 13px;
  font-weight: 600;
  color: var(--lotbi-text-primary);
  cursor: pointer;
}

.festival-schedule-date-cell:disabled {
  color: var(--lotbi-text-disabled);
  cursor: default;
}

.festival-schedule-date-cell.festival-schedule-date-outside-month:not(:disabled) {
  color: var(--lotbi-text-muted);
}

.festival-schedule-date-cell:not(:disabled):hover {
  background: var(--lotbi-surface-hover);
}

.festival-schedule-date-cell.is-selected {
  background: var(--lotbi-brand-solid-bg);
  color: var(--lotbi-brand-solid-text);
  border-color: transparent;
}

.festival-schedule-date-cell:focus-visible {
  outline: 2px solid var(--lotbi-focus-ring);
  outline-offset: 2px;
}

.festival-schedule-confirm {
  min-height: 44px;
  border: 0;
  border-radius: 12px;
  background: var(--lotbi-brand-solid-bg);
  color: var(--lotbi-brand-solid-text);
  font-size: 14px;
  font-weight: 800;
  cursor: pointer;
}

.festival-schedule-confirm:disabled {
  opacity: 0.5;
  cursor: default;
}

/* --------------------------------------------------------- program view -- */
.festival-program-surface {
  display: flex;
  flex-direction: column;
  gap: 16px;
}

.festival-program-body {
  display: flex;
  flex-direction: column;
  gap: 14px;
}

/* One row, or a safe horizontal scroll on narrow viewports — the page itself
   never gains horizontal overflow from this, only this inner strip. */
.festival-date-tabs {
  display: flex;
  gap: 8px;
  overflow-x: auto;
  padding-bottom: 2px;
  -webkit-overflow-scrolling: touch;
}

.festival-date-tab {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  flex: 0 0 auto;
  border: 1px solid var(--lotbi-border-default);
  border-radius: 999px;
  padding: 8px 14px;
  min-height: 40px;
  font-size: 13px;
  font-weight: 700;
  background: var(--lotbi-surface-primary);
  color: var(--lotbi-text-secondary);
  cursor: pointer;
  white-space: nowrap;
}

.festival-date-tab[aria-selected="true"] {
  background: var(--lotbi-brand-solid-bg);
  border-color: var(--lotbi-brand-solid-bg);
  color: var(--lotbi-brand-solid-text);
}

.festival-date-tab:focus-visible {
  outline: 2px solid var(--lotbi-focus-ring);
  outline-offset: 2px;
}

/* FESTIVAL-EVENT-09: venue-coordinate program-date weather badge, reused
   from the original flat program-list placement (site-calendar-weather.js
   icon/temperature helpers) and folded into each date tab instead. */
.festival-program-weather {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  font-size: 12px;
  font-weight: 600;
  white-space: nowrap;
}

.festival-program-weather-text {
  white-space: nowrap;
}

.festival-weather-attribution {
  margin: 0;
  font-size: 11px;
  color: var(--lotbi-text-muted);
}

.festival-program-day-panel {
  display: flex;
  flex-direction: column;
  gap: 10px;
}

.festival-program-list {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  flex-direction: column;
  gap: 8px;
}

.festival-program-item {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: 8px;
  font-size: 13px;
  color: var(--lotbi-text-secondary);
  padding: 8px 10px;
  border-radius: 10px;
  background: var(--lotbi-surface-subtle);
}

.festival-program-time {
  font-weight: 700;
  color: var(--lotbi-text-primary);
}

.festival-program-category {
  border-radius: 999px;
  padding: 1px 8px;
  font-size: 11px;
  font-weight: 700;
  background: var(--lotbi-surface-hover);
  color: var(--lotbi-text-secondary);
}

.festival-program-title {
  font-weight: 700;
  color: var(--lotbi-text-primary);
}

.festival-program-venue,
.festival-program-price {
  color: var(--lotbi-text-muted);
}

.festival-program-note {
  flex-basis: 100%;
  margin: 4px 0 0;
  font-size: 12px;
  color: var(--lotbi-text-muted);
}


@media (prefers-reduced-motion: reduce) {
  .festival-chip,
  .festival-card-open,
  .festival-cta-button,
  .festival-date-tab {
    transition: none;
  }
}

/* REGIONAL-INFO-DESIGN-02 (owner 2026-10-15/16) — inside 지역정보: every control
   at least 48px, Korean words kept whole, the map app icon at the end of the
   card's action row. The 시·도 sheet sits outside 지역정보 on a phone (the sheet
   is a body-level overlay), so its options are sized through the sheet itself. */
.consumer-workspace[data-workspace="life"]:not(#ri) .festival-manager {
  word-break: keep-all;
}

.consumer-workspace[data-workspace="life"]:not(#ri) :is(.festival-location-button, .festival-card-icon-button, .festival-calendar-add-trigger, .festival-month-nav-button, .festival-load-more, .festival-retry-button, .festival-back-button, .festival-date-tab) {
  min-height: 48px;
}

.consumer-workspace[data-workspace="life"]:not(#ri) .festival-month-nav-button {
  min-width: 48px;
}

/* the place line reads as 지역정보's shared region card: 📍 place, then the buttons */
.consumer-workspace[data-workspace="life"]:not(#ri) .festival-location-banner {
  min-height: 72px;
  box-sizing: border-box;
  padding: 12px 12px 12px 16px;
  border: 1px solid var(--ri-line);
  border-radius: var(--ri-radius-card);
  background: var(--ri-surface);
}

.consumer-workspace[data-workspace="life"]:not(#ri) .festival-location-label {
  color: var(--ri-text);
  font-size: 17px;
  font-weight: 800;
}

.consumer-workspace[data-workspace="life"]:not(#ri) .festival-location-button {
  display: inline-flex;
  align-items: center;
  padding: 0 16px;
  border: 1px solid var(--ri-line-strong);
  border-radius: var(--ri-radius-control);
  background: var(--ri-surface);
  color: var(--ri-text);
  font-size: 15px;
  font-weight: 700;
  text-decoration: none;
}

.consumer-workspace[data-workspace="life"]:not(#ri) .festival-location-button:hover {
  background: var(--ri-sub);
}

.consumer-workspace[data-workspace="life"]:not(#ri) .festival-card-action-row .festival-card-map {
  margin-left: auto;
}

.lotbi-sheet .festival-region-sheet :is(.festival-region-option, .festival-region-current-button) {
  min-height: 48px;
}

/* 7번 실사용 점검 10-29: a 장기 운영 card says its dates and where the schedule is. */
.festival-card-note { margin: 2px 0 0; color: var(--ri3-text3); font-size: 13px; line-height: 19px; }
