/*
 * Travel itinerary UI
 * Structure: tokens, layout, navigation, itinerary, route summary,
 * choices, feedback, weather, modal, feature modules, responsive rules.
 */

.navbar { margin-bottom: 0;}

/* Design tokens */
.travel-page {
  --paper: #f4f5f7;
  --surface: #ffffff;
  --surface-soft: #f8f9fa;
  --ink: #18222c;
  --muted: #66727e;
  --line: #dfe3e8;
  --primary: #19355b;
  --primary-soft: #e8edf3;
  --warning: #946200;
  --warning-border: #ffe08a;
  --warning-soft: #fff8e6;
  --success: #2f624d;
  --success-border: #a9cfbb;
  --success-soft: #edf5f0;
  --danger: #8a3f3f;
  --danger-border: #e5b3b3;
  --danger-soft: #fbefef;
  --completed: #6d746e;
  --shadow-sm: 0 2px 8px rgba(24, 34, 44, 0.07);
  --shadow-lg: 0 22px 70px rgba(0, 0, 0, 0.28);
  --content-width: 1120px;
  --time-column: calc((min(var(--content-width), 100vw - 32px) - 2px) / 8);
  --layout-gap: 24px;
  --radius-sm: 8px;
  --radius-md: 12px;
  --route-card-height: 172px;
}

/* Base */
.travel-page * { box-sizing: border-box; }
.travel-page [hidden],
.travel-page .route-choice-modal[hidden],
.travel-page .route-leg-parking[hidden],
.travel-page .route-duration-stepper[hidden] { display: none; }
.travel-page {
  margin: 0;
  background: var(--paper);
  color: var(--ink);
  font: 15px/1.55 Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
}
.travel-page a { color: var(--primary); text-underline-offset: 3px; }
.travel-page h1,
.travel-page h2 { padding-top: 0; padding-bottom: 0;}
.travel-page h3,
.travel-page p { margin-top: 0; }
.travel-page h1 {
  margin-bottom: 0;
  font-size: clamp(2rem, 5vw, 3.5rem);
  font-weight: 300;
  line-height: 1;
  letter-spacing: -0.045em;
}
.travel-page h2 {
  margin: 0;
  font-size: clamp(1.6rem, 4vw, 2.35rem);
  font-weight: 300;
  line-height: 1.15;
  letter-spacing: -0.03em;
}

/* Page shell */
.travel-page .page {
  width: min(var(--content-width), calc(100% - 32px));
  margin: 0 auto;
  padding: 44px 0 64px;
}
.travel-page .page > header {
  display: flex;
  align-items: end;
  justify-content: space-between;
  gap: 24px;
  padding-bottom: 22px;
  border-bottom: 1px solid var(--line);
}
.travel-page .subtitle { margin: 10px 0 0; color: var(--muted); }
.travel-page .base { flex: 0 0 auto; color: var(--muted); font-size: 0.9rem; text-align: right; }

/* Day navigation */
.travel-page .week {
  display: grid;
  grid-template-columns: repeat(8, minmax(0, 1fr));
  margin: 28px 0 34px;
  padding: 0;
  overflow: hidden;
  border: 1px solid var(--line);
  border-radius: var(--radius-sm);
  background: var(--surface);
  box-shadow: var(--shadow-sm);
}
.travel-page .day-tab {
  position: relative;
  appearance: none;
  padding: 15px 10px;
  border: 0;
  border-right: 1px solid var(--line);
  background: transparent;
  color: var(--muted);
  text-align: left;
  cursor: pointer;
}
.travel-page .day-tab:last-child { border-right: 0; }
.travel-page .day-tab strong { display: block; color: var(--ink); font-size: 1.2rem; font-weight: 600; }
.travel-page .day-tab span {
  display: block;
  margin-top: 3px;
  overflow: hidden;
  font-size: 0.78rem;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.travel-page .day-tab:hover { background: var(--surface-soft); }
.travel-page .day-tab.active { background: var(--primary-soft); box-shadow: inset 0 -3px 0 var(--primary); }
.travel-page .day-tab:focus-visible { z-index: 1; outline: 2px solid var(--primary); outline-offset: -2px; }

/* Day heading */
.travel-page .day { display: none; }
.travel-page .day.active { display: block; }
.travel-page .day-head {
  display: grid;
  grid-template-columns: 12.5% minmax(0, 1fr) auto;
  align-items: start;
  gap: 0;
  margin-bottom: 24px;
}
.travel-page .day-head > .date { width: 100%; min-width: 0; padding-right: 16px; }
.travel-page .day-head > .date + div { min-width: 0; }
.travel-page .day-head > .day-weather { margin-left: 24px; }
.travel-page .date {
  color: var(--primary);
  font-size: 0.82rem;
  font-weight: 750;
  letter-spacing: 0.09em;
  text-transform: uppercase;
}
.travel-page .day-title-row { display: flex; align-items: center; justify-content: space-between; gap: 16px; }
.travel-page .lead { max-width: 740px; margin: 8px 0 0; color: var(--muted); }

/* Shared buttons and links */
.travel-page .inline-links,
.travel-page .event-link-footer,
.travel-page .nav-actions,
.travel-page .route-choice-actions,
.travel-page .parking-card-actions,
.travel-page .festival-resource-links {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
}
.travel-page .inline-links { margin-top: 9px; column-gap: 16px; }
.travel-page .event-link-footer { margin-top: 14px; }
.travel-page .nav-actions { flex: 0 0 auto; gap: 7px; }
.travel-page .route-choice-actions {
  justify-content: flex-end;
  margin-top: 18px;
  gap: 12px;
}
.travel-page .route-choice-actions .nav-button {
  min-height: 42px;
  padding: 10px 16px;
  border-radius: 10px;
  font-size: 0.9rem;
  font-weight: 750;
}
.travel-page .nav-button,
.travel-page .parking-button,
.travel-page .parking-close,
.travel-page .step-route-button {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border: 1px solid var(--primary);
  border-radius: 7px;
  background: var(--surface);
  color: var(--primary);
  font: inherit;
  font-size: 0.78rem;
  font-weight: 650;
  line-height: 1;
  text-decoration: none;
  white-space: nowrap;
  cursor: pointer;
  box-shadow: var(--shadow-sm);
}
.travel-page .nav-button { padding: 6px 9px; }
.travel-page .parking-button { padding: 7px 12px; font-size: 0.84rem; font-weight: 700; }
.travel-page .nav-button:hover,
.travel-page .parking-button:hover,
.travel-page .parking-close:hover,
.travel-page .step-route-button:hover { background: var(--primary-soft); color: var(--primary); }
.travel-page .nav-button:focus-visible,
.travel-page .parking-button:focus-visible,
.travel-page .parking-close:focus-visible,
.travel-page .step-route-button:focus-visible {
  outline: 2px solid var(--primary);
  outline-offset: 2px;
}
.travel-page .reserved-button {
  border-color: var(--warning-border);
  background: var(--warning-soft);
  color: var(--warning);
}
.travel-page .ticket-placeholder-button { cursor: pointer; }

/* Details */
.travel-page details { border-bottom: 1px solid var(--line); }
.travel-page summary {
  padding: 16px 0;
  color: var(--primary);
  font-weight: 600;
  list-style: none;
  cursor: pointer;
}
.travel-page summary::-webkit-details-marker { display: none; }
.travel-page summary::after { content: "+"; float: right; color: var(--muted); font-weight: 400; }
.travel-page details[open] summary::after { content: "-"; }
.travel-page .detail-body { padding: 0 0 18px calc(var(--time-column) + var(--layout-gap)); color: var(--muted); }
.travel-page .detail-body p { margin: 0 0 10px; }
.travel-page .detail-body ul { margin: 4px 0 0; padding-left: 18px; }
.travel-page .slot details { margin-top: 8px; border-bottom: 0; }
.travel-page .slot details summary { padding: 7px 0; font-size: 0.9rem; }
.travel-page .slot details .detail-body,
.travel-page .event-read-more .detail-body,
.travel-page .shuttle-guide .detail-body,
.travel-page .choice-details .detail-body,
.travel-page .choice-day-event-details .detail-body { padding: 0 0 14px; }
.travel-page .event-read-more,
.travel-page .shuttle-guide { margin-top: 12px; border-top: 1px solid var(--line); border-bottom: 1px solid var(--line); }
.travel-page .event-read-more summary,
.travel-page .shuttle-guide summary { padding: 11px 0; font-weight: 600; }
.travel-page .event-read-more ul { margin: 10px 0; padding-left: 20px; color: var(--muted); }
.travel-page .choice-details { margin-top: 10px; }
.travel-page .choice-details details { background: transparent; }
.travel-page .event-considerations {
  margin-top: 12px;
  border-top: 1px solid var(--line);
  border-bottom: 1px solid var(--line);
}
.travel-page .event-considerations summary { padding: 11px 0; font-weight: 600; }
.travel-page .event-considerations .detail-body { padding: 0 0 12px; }
.travel-page .event-considerations-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 10px;
}
.travel-page .event-consideration {
  display: grid;
  grid-template-columns: 22px minmax(0, 1fr);
  gap: 8px;
  align-items: start;
  padding: 11px 12px;
  border-radius: var(--radius-sm);
}
.travel-page .event-consideration p { margin: 1px 0 0; }
.travel-page .event-consideration-icon {
  display: grid;
  width: 22px;
  height: 22px;
  place-items: center;
  padding: 0 0 2px;
  border-radius: 50%;
  color: #fff;
  font: 800 1rem/1 Arial, sans-serif;
}
.travel-page .event-consideration-pro { background: #edf5f0; }
.travel-page .event-consideration-pro .event-consideration-icon { background: #2f624d; }
.travel-page .event-consideration-con { background: #fbf1ee; }
.travel-page .event-consideration-con .event-consideration-icon { background: #8a4a3b; }

/* Schedule building blocks */
.travel-page .schedule { border-top: 1px solid var(--line); }
.travel-page .schedule > .slot {
  position: relative;
  display: grid;
  grid-template-columns: var(--time-column) minmax(0, 1fr);
  align-items: start;
  gap: var(--layout-gap);
  padding: 10px 0 12px;
}

.travel-page .schedule > .slot > :last-child { grid-column: 2; min-width: 0; }
.travel-page .schedule > .slot:not(:first-child) > .time { display: none; }
.travel-page .schedule > .slot:first-child > .time { display: block; }
.travel-page .slot h3,
.travel-page .choice-day-card-copy h3 {
  margin: 0 0 4px;
  font-size: 1rem;
  font-weight: 600;
  line-height: 1.25;
}
.travel-page .slot p { margin: 0; color: var(--muted); font-size: 0.94rem; line-height: 1.45; }
.travel-page .schedule > .slot > :last-child { position: relative; }
.travel-page .slot-title-row {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 14px;
  padding-right: 210px;
}
.travel-page .slot-title-row + p { padding-right: 210px; }
.travel-page .slot-weather-tools {
  position: absolute;
  top: 0;
  right: 0;
  display: grid;
  grid-template-columns: auto;
  gap: 6px;
  justify-items: end;
}
.travel-page .location-weather-pill {
  display: inline-flex;
  min-height: 22px;
  align-items: center;
  justify-content: flex-end;
  gap: 6px;
  color: var(--primary);
  font-size: 0.68rem;
  font-variant-numeric: tabular-nums;
  line-height: 1;
  white-space: nowrap;
}
.travel-page .location-weather-place {
  max-width: 150px;
  overflow: hidden;
  color: var(--muted);
  font-size: 0.58rem;
  font-weight: 750;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.travel-page .location-weather-high { font-weight: 850; }
.travel-page .location-weather-low { color: var(--muted); }
.travel-page .location-weather-rain { color: #4d7294; }
.travel-page .location-weather-unavailable { color: var(--muted); font-weight: 650; }
.travel-page .slot-title-row h3,
.travel-page .choice-day-card-copy h3 { display: flex; align-items: center; gap: 10px; flex: 1 1 auto; }
.travel-page .time { color: var(--primary); font-variant-numeric: tabular-nums; }
.travel-page .itinerary-control-stack.itinerary-capsule {
  display: flex;
  width: var(--time-column);
  flex-direction: column;
  padding: 8px 10px;
  border-radius: var(--radius-md);
  background: var(--primary-soft);
}
.travel-page .itinerary-capsule .itinerary-control-block {
  display: flex;
  min-height: 24px;
  align-items: center;
  justify-content: center;
  padding: 2px 0;
  border: 0;
  background: transparent;
  color: var(--primary);
  font-size: 0.72rem;
  font-weight: 750;
  line-height: 1.15;
  text-align: center;
}
.travel-page .itinerary-capsule .itinerary-route-block,
.travel-page .itinerary-control-block .fixed-departure-time,
.travel-page .schedule > .slot .itinerary-depart-block { display: none; }
.travel-page .arrival-time,
.travel-page .travel-info,
.travel-page .travel-leave-time { display: block; color: inherit; font: inherit; }
.travel-page .slot.route-final-slot .itinerary-depart-block { display: none; }

/* Travel leg */
.travel-page .itinerary-leg-separator {
  position: relative;
  display: grid;
  grid-template-columns: var(--time-column) minmax(0, 1fr);
  gap: var(--layout-gap);
  min-height: 118px;
}
.travel-page .itinerary-leg-separator::after {
  content: "";
  grid-column: 2;
  grid-row: 1;
  align-self: center;
  width: 100%;
  height: 1px;
  background: var(--line);
  pointer-events: none;
}
.travel-page .itinerary-travel-leg-panel {
  display: grid;
  grid-template-columns: 14px 43px 46px;
  grid-template-rows: 25px 42px 25px;
  column-gap: 7px;
  align-items: center;
  width: 100%;
  max-width: 100%;
  min-height: 104px;
  padding: 6px 10px;
  border-radius: var(--radius-md);
  background: var(--primary-soft);
  color: var(--primary);
}
.travel-page .itinerary-leg-depart,
.travel-page .itinerary-leg-arrive {
  position: relative;
  z-index: 2;
  grid-column: 1 / 3;
  display: grid;
  grid-template-columns: 14px minmax(0, 1fr);
  gap: 7px;
  align-items: center;
  min-width: 0;
  color: var(--primary);
  line-height: 1;
}
.travel-page .itinerary-leg-depart { grid-row: 1; }
.travel-page .itinerary-leg-arrive { grid-row: 3; }
.travel-page .itinerary-leg-depart::before,
.travel-page .itinerary-leg-arrive::before {
  content: "";
  display: block;
  width: 11px;
  height: 11px;
  justify-self: center;
  border: 2px solid var(--primary);
  border-radius: 50%;
  background: var(--surface);
}
.travel-page .itinerary-leg-moment {
  display: flex;
  min-width: 0;
  align-items: center;
  white-space: nowrap;
}
.travel-page .itinerary-leg-time {
  color: var(--primary);
  font-size: 0.62rem;
  font-weight: 800;
  line-height: 11px;
  font-variant-numeric: tabular-nums;
}
.travel-page .itinerary-leg-label { display: none; }
.travel-page .itinerary-leg-divider { display: contents; }
.travel-page .itinerary-leg-line { display: none; }
.travel-page .itinerary-leg-divider::before {
  content: "";
  grid-column: 1;
  grid-row: 2;
  align-self: stretch;
  justify-self: center;
  width: 2px;
  background: #aab7c8;
}
.travel-page .itinerary-leg-duration {
  position: relative;
  z-index: 2;
  grid-column: 2;
  grid-row: 2;
  align-self: center;
  justify-self: start;
  color: var(--primary);
  font-size: 0.55rem;
  font-weight: 800;
  line-height: 1;
  white-space: nowrap;
}
.travel-page .itinerary-leg-divider .itinerary-route-block {
  grid-column: 3;
  grid-row: 1 / 4;
  align-self: stretch;
  display: flex;
  width: 46px;
  min-width: 46px;
  align-items: stretch;
  justify-content: stretch;
  border: 1px solid var(--primary);
  border-radius: 12px;
  background: var(--surface);
  color: var(--primary);
  cursor: pointer;
  overflow: hidden;
}
.travel-page .itinerary-leg-divider .itinerary-route-marker { display: none; }
.travel-page .itinerary-leg-divider .step-route-button {
  display: grid;
  width: 100%;
  min-width: 0;
  height: 100%;
  grid-template-rows: 1fr auto 1fr;
  place-items: center;
  padding: 8px 4px;
  border: 0;
  background: transparent;
  box-shadow: none;
  color: var(--primary);
  line-height: 1;
}
.travel-page .itinerary-leg-route-letter {
  font-size: 0.78rem;
  font-weight: 700;
}
.travel-page .itinerary-leg-route-arrow {
  color: var(--primary);
  font-size: 0.72rem;
  font-weight: 800;
}
.travel-page .schedule > .itinerary-leg-separator + .slot,
.travel-page .schedule > .itinerary-leg-separator + .choice-day-optional-slot { margin-top: -42px; padding-top: 0; }
.travel-page .itinerary-leg-separator.plan-completed-leg .itinerary-route-block { pointer-events: none; cursor: default; }

/* Route overview */
.travel-page .day > .global-route { margin: 22px 0 26px; }
.travel-page .route-wrap { border-top: 1px solid var(--line); }
.travel-page .route-head { display: flex; align-items: baseline; justify-content: space-between; gap: 16px; padding: 16px 0 12px; }
.travel-page .route-head h3 { margin: 0; font-size: 1rem; font-weight: 600; }
.travel-page .route-head span { color: var(--muted); font-size: 0.82rem; }
.travel-page .route-map { height: 360px; border: 1px solid var(--line); background: #f1f3f5; }
.travel-page .day > .global-route #globalRouteLinks { margin-top: 14px; }
.travel-page .route-timeline {
  display: grid;
  grid-template-columns: repeat(var(--route-stop-count, 1), minmax(0, 1fr));
  width: 100%;
  margin: 14px 0 10px;
  padding: 0;
  list-style: none;
}
.travel-page .route-timeline-stop {
  position: relative;
  display: grid;
  grid-template-rows: 28px auto;
  min-width: 0;
  justify-items: center;
  color: var(--muted);
}
.travel-page .route-timeline-stop::before,
.travel-page .route-timeline-stop::after {
  content: "";
  position: absolute;
  top: 13px;
  z-index: 0;
  width: 50%;
  height: 2px;
  background: var(--line);
}
.travel-page .route-timeline-stop::before { left: 0; }
.travel-page .route-timeline-stop::after { right: 0; }
.travel-page .route-timeline-stop:first-child::before,
.travel-page .route-timeline-stop:last-child::after { display: none; }
.travel-page .route-timeline-dot,
.travel-page .route-stop-marker,
.travel-page .slot-stop-marker {
  display: inline-grid;
  flex: 0 0 28px;
  width: 28px;
  height: 28px;
  place-items: center;
  padding: 1px 0 0;
  border: 0;
  border-radius: 50%;
  background: var(--primary);
  color: #fff;
  font-size: 0.72rem;
  font-weight: 800;
  line-height: 1;
  cursor: pointer;
}
.travel-page .route-timeline-dot {
  position: relative;
  z-index: 1;
  border: 2px solid var(--primary);
  background: var(--surface);
  color: var(--primary);
}
.travel-page .route-timeline-stop.is-visible .route-timeline-dot { background: var(--primary); color: #fff; box-shadow: 0 0 0 4px rgba(25, 53, 91, 0.14); }
.travel-page .route-timeline-arrival {
  max-width: 100%;
  margin-top: 6px;
  overflow: hidden;
  color: var(--primary);
  font-size: clamp(0.58rem, 1.2vw, 0.78rem);
  font-weight: 760;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.travel-page .route-stops {
  display: flex;
  align-items: stretch;
  gap: 10px;
  width: 100%;
  margin: 12px 0;
  padding: 0 0 10px;
  overflow-x: auto;
  overflow-y: hidden;
  list-style: none;
  scroll-snap-type: x mandatory;
}
.travel-page .route-stop {
  position: relative;
  display: flex;
  width: calc((100% - 20px) / 3);
  min-width: calc((100% - 20px) / 3);
  max-width: calc((100% - 20px) / 3);
  height: var(--route-card-height);
  flex: 0 0 calc((100% - 20px) / 3);
  flex-direction: column;
  padding: 12px;
  overflow: hidden;
  border: 1px solid var(--line);
  background: var(--surface);
  color: var(--ink);
  box-shadow: var(--shadow-sm);
  scroll-snap-align: start;
}
.travel-page .route-stop-head { display: flex; min-width: 0; align-items: flex-start; gap: 10px; }
.travel-page .route-stop-copy { min-width: 0; flex: 1 1 auto; overflow: hidden; }
.travel-page .route-stop-copy-inner { display: block; width: 100%; }
.travel-page .route-stop-name,
.travel-page .route-stop-location {
  display: -webkit-box;
  width: 100%;
  overflow: hidden;
  overflow-wrap: anywhere;
  white-space: normal;
  -webkit-box-orient: vertical;
}
.travel-page .route-stop-name { max-height: 2.4em; font-size: 0.92rem; font-weight: 600; line-height: 1.2; -webkit-line-clamp: 2; }
.travel-page .route-stop-location { max-height: 2.5em; margin-top: 5px; color: var(--muted); font-size: 0.78rem; line-height: 1.25; -webkit-line-clamp: 2; }
.travel-page .route-stop-times {
  display: none;
  min-height: 72px;
  margin: auto 0 0;
  padding: 12px 0 5px;
  border-top: 1px solid var(--line);
}
.travel-page .route-stop-times.has-both {
  position: relative;
  display: grid;
  grid-template-columns: auto minmax(28px, 1fr) auto minmax(28px, 1fr) auto;
  align-items: end;
  column-gap: 12px;
}
.travel-page .route-stop-times.has-arrival-only,
.travel-page .route-stop-times.has-departure-only { display: grid; grid-template-columns: minmax(0, 1fr); align-items: end; }
.travel-page .route-stop-arrive { justify-self: start; text-align: left; }
.travel-page .route-stop-depart { justify-self: end; text-align: right; }
.travel-page .route-stop-times.has-both .route-stop-arrive { grid-column: 1; }
.travel-page .route-stop-times.has-both .route-stop-depart { grid-column: 5; }
.travel-page .route-stop-times.has-arrival-only .route-stop-arrive,
.travel-page .route-stop-times.has-departure-only .route-stop-depart { grid-column: 1; }
.travel-page .route-stop-times:not(.has-both) .route-stop-time-line,
.travel-page .route-stop-times:not(.has-both) .route-stop-duration,
.travel-page .route-stop-times:not(.has-arrival-only):not(.has-both) .route-stop-arrive,
.travel-page .route-stop-times:not(.has-departure-only):not(.has-both) .route-stop-depart { display: none; }
.travel-page .route-stop-time-line { width: 100%; height: 1px; margin-bottom: 6px; background: var(--line); }
.travel-page .route-stop-time-line-left { grid-column: 2; }
.travel-page .route-stop-time-line-right { grid-column: 4; }
.travel-page .route-stop-duration {
  position: absolute;
  left: 50%;
  bottom: 5px;
  z-index: 1;
  padding: 0 10px;
  transform: translateX(-50%);
  background: var(--surface);
  color: var(--muted);
  font-size: 0.78rem;
  font-weight: 400;
  line-height: 1;
  text-align: center;
  white-space: nowrap;
}
.travel-page .route-time-copy { position: relative; display: block; min-width: 0; }
.travel-page .route-time-main { display: block; width: max-content; max-width: 100%; }
.travel-page .route-stop-depart .route-time-main { margin-left: auto; }
.travel-page .route-time-icon,
.travel-page .route-stop-time-label,
.travel-page .route-stop-adjustment,
.travel-page .route-stop-depart .route-time-copy::after { display: none; }
.travel-page .route-stop-time-value {
  color: var(--primary);
  font-size: 1rem;
  font-weight: 500;
  line-height: 1;
  font-variant-numeric: tabular-nums;
  white-space: nowrap;
}
.travel-page .route-stop-calculated-time {
  position: absolute;
  left: 50%;
  bottom: calc(100% + 6px);
  display: block;
  transform: translateX(-50%);
  color: var(--muted);
  font-size: 0.68rem;
  font-weight: 400;
  line-height: 1;
  text-decoration: line-through;
  text-decoration-thickness: 1px;
  white-space: nowrap;
  pointer-events: none;
}
.travel-page .route-stop-depart .route-stop-calculated-time { display: none; }

/* Completion state */
.travel-page .slot-stop-marker:hover,
.travel-page .route-stop-marker:hover { box-shadow: 0 0 0 4px rgba(25, 53, 91, 0.14); }
.travel-page .slot-stop-marker:focus-visible,
.travel-page .route-stop-marker:focus-visible,
.travel-page .route-timeline-dot:focus-visible { outline: 2px solid var(--primary); outline-offset: 2px; }
.travel-page .slot-stop-marker.is-completed,
.travel-page .route-stop-marker.is-completed,
.travel-page .route-timeline-dot.is-completed,
.travel-page .route-timeline-stop.is-visible .route-timeline-dot.is-completed {
  border-color: var(--completed);
  background: var(--completed);
  color: #fff;
}
.travel-page .slot.plan-completed-item,
.travel-page .route-stop.plan-completed-item { opacity: 1; }
.travel-page .slot > :last-child {
  position: relative;
  isolation: isolate;
}
.travel-page .slot-completion-overlay { display: none; }
.travel-page .slot .slot-stop-marker { position: relative; z-index: 2; }
.travel-page .route-stop.plan-completed-item .route-stop-marker {
  position: relative;
  z-index: 2;
  background: var(--completed);
}
.travel-page .event-controls { display: none; }

.travel-page .event-rating {
  display: inline-flex;
  grid-row: 3;
  flex: 0 0 auto;
  gap: 2px;
  margin-left: auto;
}
.travel-page .event-rating button {
  padding: 0;
  border: 0;
  background: transparent;
  color: var(--primary);
  font: inherit;
  font-size: 1rem;
  line-height: 1;
  cursor: pointer;
}
.travel-page .event-rating button:disabled { cursor: default; }

/* Duration stepper */
.travel-page .route-duration-stepper {
  grid-row: 2;
  display: grid;
  grid-template-columns: 28px auto 28px;
  min-height: 30px;
  flex: 0 0 auto;
  margin-left: auto;
  overflow: hidden;
  border-radius: var(--radius-sm);
  background: var(--primary-soft);
  white-space: nowrap;
}
.travel-page .route-duration-stepper button {
  display: grid;
  width: 28px;
  height: 30px;
  place-items: center;
  padding: 0;
  border: 0;
  background: transparent;
  color: var(--primary);
  font: 700 1rem/1 system-ui, sans-serif;
  cursor: pointer;
}
.travel-page .route-duration-stepper button:hover { background: rgba(25, 53, 91, 0.1); }
.travel-page .route-duration-stepper button:focus-visible { outline: 2px solid var(--primary); outline-offset: -2px; }
.travel-page .route-duration-value {
  display: grid;
  min-width: 52px;
  place-items: center;
  padding: 0 8px;
  color: var(--primary);
  font-size: 0.74rem;
  font-weight: 800;
  font-variant-numeric: tabular-nums;
}

/* Choice cards */
.travel-page .choice {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 14px;
  margin-top: 18px;
}
.travel-page .choice > label {
  position: relative;
  display: block;
  padding: 18px 18px 18px 50px;
  border: 1px solid var(--line);
  background: var(--surface);
  box-shadow: var(--shadow-sm);
  cursor: pointer;
}
.travel-page .choice > label:hover { border-color: #aeb8c2; }
.travel-page .choice > label:has(> input:checked) { border-color: var(--primary); background: var(--primary-soft); }
.travel-page .choice > label > input { position: absolute; left: 18px; top: 20px; width: 18px; height: 18px; accent-color: var(--primary); }
.travel-page .choice strong { display: block; font-weight: 600; }
.travel-page .choice small { display: block; margin-top: 5px; color: var(--muted); }
.travel-page .route-choice-options > label > input { opacity: 0; pointer-events: none; }
.travel-page .route-choice-options .choice-order {
  position: absolute;
  left: 14px;
  top: 15px;
  display: grid;
  width: 28px;
  height: 28px;
  place-items: center;
  border: 2px solid var(--primary);
  border-radius: 50%;
  background: var(--surface);
  color: transparent;
  font-size: 0.72rem;
  font-weight: 800;
}
.travel-page .route-choice-options label:has(> input:checked) .choice-order { background: var(--primary); color: #fff; }
.travel-page .option-route-time { display: none; }
.travel-page .option-itinerary-row {
  display: grid;
  grid-template-columns: var(--time-column) minmax(0, 1fr);
  gap: var(--layout-gap);
  align-items: start;
  margin-top: 18px;
  padding: 10px 0 12px;
  border-top: 1px solid var(--line);
  border-bottom: 1px solid var(--line);
}
.travel-page .option-itinerary-row .choice { margin: 0; }
.travel-page .option-itinerary-time {
  padding: 8px 10px;
  border-radius: var(--radius-md);
  background: var(--primary-soft);
  color: var(--primary);
  font-size: 0.72rem;
  font-weight: 750;
}
.travel-page .choice-day-source-hidden { display: none; }
.travel-page .choice-day-schedule { margin-top: 18px; }
.travel-page .choice-day-card-copy { min-width: 0; }
.travel-page .choice-day-card-copy p { margin: 0; color: var(--muted); font-size: 0.94rem; line-height: 1.45; }
.travel-page .choice-day-selection-card .choice { margin: 0; }
.travel-page .choice-day-event-details { margin-top: 12px; }
.travel-page .choice-day-optional-slot {
  display: grid;
  grid-template-columns: var(--time-column) minmax(0, 1fr);
  gap: var(--layout-gap);
  padding: 10px 0 18px;
}
.travel-page .choice-day-optional-slot > .choice-day-card-copy { grid-column: 2; min-width: 0; }
.travel-page .choice-day-optional-slot .choice {
  margin: 14px 0 0;
  padding-bottom: 14px;
}
.travel-page [data-choice-panel][hidden],
.travel-page [data-dali-panel][hidden],
.travel-page .route-choice-modal[hidden],
.travel-page .route-leg-parking[hidden],
.travel-page .route-duration-stepper[hidden] { display: none; }
.travel-page .option-panel { padding: 16px 0; border-bottom: 1px solid var(--line); }
.travel-page .option-panel h3 { margin: 0 0 8px; font-size: 1rem; font-weight: 600; }
.travel-page .tour-description { color: var(--muted); font-size: 0.9rem; }
.travel-page #sun .slot ol,
.travel-page .choice-details ul { margin: 10px 0 0; padding-left: 22px; color: var(--muted); }


.travel-page .schedule.choice-day-schedule > .slot.choice-day-selection-card > .time {
  display: block;
}
.travel-page .schedule.choice-day-schedule > .slot.choice-day-selection-card .itinerary-control-stack.itinerary-capsule {
  display: flex;
}
.travel-page .schedule.choice-day-schedule > .slot.choice-day-selection-card .itinerary-depart-block {
  display: flex;
}
.travel-page .schedule.choice-day-schedule > .slot.choice-day-selection-card .fixed-departure-time {
  display: block;
}
.travel-page .schedule.choice-day-schedule > .slot.choice-day-selection-card .travel-info:empty {
  display: none;
}
.travel-page .schedule.choice-day-schedule > .choice-day-optional-slot .choice {
  margin-top: 14px;
}
.travel-page .schedule.choice-day-schedule > .choice-day-optional-slot .choice-day-selection-target:empty {
  display: none;
}

/* Feedback panels */
.travel-page .primary-box,
.travel-page .warning-box,
.travel-page .success-box,
.travel-page .danger-box,
.travel-page .note {
  border-left: 4px solid;
  color: var(--ink);
}
.travel-page .primary-box {
  border-left-color: var(--primary);
  background: var(--primary-soft);
}
.travel-page .primary-box strong { color: var(--primary); }
.travel-page .primary-box-label {
  display: block;
  margin-bottom: 2px;
  color: var(--primary);
  font-size: 0.72rem;
  font-weight: 800;
  letter-spacing: 0.06em;
  text-transform: uppercase;
}
.travel-page .primary-box-body {
  display: block;
  color: var(--ink);
  font-size: 0.96rem;
  font-weight: 400;
  line-height: 1.45;
}
.travel-page .slot p.primary-box,
.travel-page .slot div.primary-box {
  border-left-color: var(--primary);
  background: var(--primary-soft);
  color: var(--ink);
}
.travel-page .warning-box,
.travel-page .note {
  border-left-color: var(--warning-border);
  background: var(--warning-soft);
}
.travel-page .warning-box strong,
.travel-page .note strong {
  display: block;
  margin-bottom: 2px;
  color: var(--warning);
  font-size: 0.96rem;
  font-weight: 600;
  line-height: 1.25;
}
.travel-page .success-box {
  border-left-color: var(--success-border);
  background: var(--success-soft);
}
.travel-page .success-box strong { color: var(--success); }
.travel-page .danger-box {
  border-left-color: var(--danger-border);
  background: var(--danger-soft);
}
.travel-page .danger-box strong { color: var(--danger); }
.travel-page .event-notice {
  display: grid;
  grid-template-columns: auto minmax(0, 1fr);
  gap: 10px;
  align-items: center;
  margin: 10px 0 0;
  padding: 11px 13px;
  border-left: 4px solid var(--event-notice-border);
  background: var(--event-notice-background);
  color: var(--ink);
  font-size: 0.96rem;
  font-weight: 400;
  line-height: 1.45;
}
.travel-page .event-notice-warning {
  --event-notice-color: var(--warning);
  --event-notice-border: var(--warning-border);
  --event-notice-background: var(--warning-soft);
}
.travel-page .event-notice-primary {
  --event-notice-color: var(--primary);
  --event-notice-border: var(--primary);
  --event-notice-background: var(--primary-soft);
}
.travel-page .event-notice-primary {
  grid-template-columns: minmax(0, 1fr);
}
.travel-page .event-notice-primary .event-notice-icon {
  display: none;
}
.travel-page .event-notice-success {
  --event-notice-color: var(--success);
  --event-notice-border: var(--success-border);
  --event-notice-background: var(--success-soft);
}
.travel-page .event-notice-estimated {
  --event-notice-color: #58715f;
  --event-notice-border: #bfd3c5;
  --event-notice-background: #f2f7f3;
}
.travel-page .event-notice-danger {
  --event-notice-color: var(--danger);
  --event-notice-border: var(--danger-border);
  --event-notice-background: var(--danger-soft);
}
.travel-page .event-notice-icon {
  display: inline-grid;
  width: 24px;
  height: 24px;
  place-items: center;
  padding: 1px 0 0;
  border-radius: 50%;
  background: var(--event-notice-border);
  color: var(--event-notice-color);
  font-weight: 800;
}
.travel-page .event-notice-content { min-width: 0; }
.travel-page .event-notice-heading {
  display: block;
  margin: 0 0 2px;
  color: var(--event-notice-color);
  font: inherit;
  font-size: 0.96rem;
  font-weight: 600;
  line-height: 1.25;
}
.travel-page .event-notice-body { display: block; }
.travel-page .alert.alert-primary {
  --bs-alert-color: var(--ink);
  --bs-alert-bg: var(--primary-soft);
  --bs-alert-border-color: var(--primary);
  margin: 10px 0 0;
  padding: 12px 14px;
  border: 0;
  border-left: 3px solid var(--primary);
  border-radius: 0;
  background-color: var(--primary-soft);
  color: var(--ink);
}
.travel-page .alert.alert-primary .alert-heading {
  display: block;
  margin: 0 0 2px;
  color: var(--primary);
  font-size: 0.72rem;
  font-weight: 800;
  letter-spacing: 0.06em;
  line-height: 1.2;
  text-transform: uppercase;
}
.travel-page .alert.alert-primary .alert-body {
  display: block;
  margin: 0;
  color: var(--ink);
  font-size: 0.96rem;
  font-weight: 400;
  line-height: 1.45;
}
.travel-page .primary-box,
.travel-page .warning-box,
.travel-page .success-box,
.travel-page .danger-box { margin: 10px 0 0; padding: 11px 13px; }
.travel-page .note { margin-top: 20px; padding: 14px 16px; }
.travel-page .quote {
  margin: 12px 0 0;
  padding: 12px 14px;
  border-left: 3px solid var(--primary);
  background: var(--primary-soft);
  color: var(--ink);
  font-size: 0.96rem;
}
.travel-page .quote-label {
  display: block;
  margin-bottom: 2px;
  color: var(--primary);
  font-size: 0.72rem;
  font-weight: 800;
  letter-spacing: 0.06em;
  text-transform: uppercase;
}
.travel-page .slot .alert.alert-primary,
.travel-page .slot .primary-box,
.travel-page .slot .warning-box,
.travel-page .slot .success-box,
.travel-page .slot .danger-box,
.travel-page .slot .quote { margin-top: 18px; }
.travel-page .shuttle-steps { display: grid; gap: 10px; margin: 0; padding: 0; list-style: none; }
.travel-page .shuttle-steps li { display: grid; grid-template-columns: 28px minmax(0, 1fr); gap: 10px; align-items: start; color: var(--muted); }
.travel-page .shuttle-step-number {
  display: inline-grid;
  width: 28px;
  height: 28px;
  place-items: center;
  border-radius: 50%;
  background: var(--primary-soft);
  color: var(--primary);
  font-size: 0.75rem;
  font-weight: 800;
}
.travel-page .shuttle-address {
  display: block;
  margin-top: 14px;
  padding: 12px 14px;
  border-left-width: 3px;
}
.travel-page .shuttle-address-label {
  display: block;
  margin-bottom: 2px;
  color: var(--primary);
  font-size: 0.72rem;
  font-weight: 800;
  letter-spacing: 0.06em;
  text-transform: uppercase;
}
.travel-page .shuttle-address strong {
  display: block;
  color: var(--ink);
  font-size: 0.96rem;
  font-weight: 400;
  line-height: 1.45;
}

/* Festival module */
.travel-page .festival-stand-list { display: grid; gap: 0; margin: 0; padding: 0; list-style: none; }
.travel-page .festival-stand-list li {
  display: grid;
  grid-template-columns: 40px minmax(0, 1fr);
  gap: 10px;
  align-items: start;
  padding: 12px 0;
  border-top: 1px solid var(--line);
  color: var(--muted);
}
.travel-page .festival-stand-list li:first-child { border-top: 0; }
.travel-page .festival-stand-number {
  color: var(--primary);
  font-size: 0.82rem;
  font-weight: 800;
  font-variant-numeric: tabular-nums;
}
.travel-page .festival-stand-heading { display: flex; flex-wrap: wrap; align-items: baseline; gap: 7px; min-height: 0; }
.travel-page .festival-stand-name { color: var(--ink); font-weight: 600; }
.travel-page .festival-stand-category { color: var(--muted); font-size: 0.75rem; font-weight: 650; }
.travel-page .festival-stand-description { display: block; margin-top: 3px; }
.travel-page .festival-stand-advice { display: block; margin-top: 5px; color: var(--primary); font-size: 0.88rem; }
.travel-page .festival-category-list { display: grid; gap: 8px; margin-top: 14px; }
.travel-page .festival-category {
  padding: 11px 13px;
  border-left: 3px solid var(--primary);
  background: var(--primary-soft);
}
.travel-page .festival-category strong { display: block; color: var(--primary); }
.travel-page .festival-category p { margin: 2px 0 0; color: var(--muted); font-size: 0.88rem; }
/* Weather */
.travel-page .day-weather { margin-top: 0; color: var(--ink); letter-spacing: normal; text-transform: none; }
.travel-page .day-weather-card {
  position: relative;
  min-width: 0;
  min-height: 58px;
  padding: 12px 52px 13px 12px;
  border: 2px solid #e0e4e8;
  border-radius: 16px;
  background: var(--surface);
  box-shadow: 0 8px 22px rgba(24, 34, 44, 0.08);
}
.travel-page .day-weather-card-date { display: block; color: var(--ink); font-size: 0.62rem; font-weight: 800; line-height: 1.2; }
.travel-page .day-weather-card-condition { display: block; margin-top: 8px; color: var(--ink); font-size: 0.76rem; font-weight: 500; line-height: 1.2; }
.travel-page .day-weather-card-high { display: block; margin-top: 12px; color: var(--ink); font-size: 2.7rem; font-weight: 400; letter-spacing: -0.07em; line-height: 0.86; }
.travel-page .day-weather-card-values { display: flex; align-items: baseline; gap: 5px; margin-top: 14px; color: var(--ink); font-size: 0.82rem; font-weight: 500; line-height: 1; white-space: nowrap; }
.travel-page .day-weather-card-rain { color: var(--ink); font-weight: 500; }
.travel-page .day-weather-card-head { display: block; }
.travel-page .day-weather-refresh-button {
  position: absolute;
  right: 10px;
  bottom: 10px;
  z-index: 1;
  display: inline-grid;
  width: 30px;
  height: 30px;
  flex: 0 0 30px;
  place-items: center;
  padding: 0;
  border-color: var(--line);
  border-radius: 9px;
  background: var(--surface);
  color: var(--muted);
  box-shadow: var(--shadow-sm);
}
.travel-page .day-weather-refresh-button:hover { border-color: #aeb8c2; background: var(--surface-soft); color: var(--primary); }
.travel-page .day-weather-refresh-button:focus-visible { outline: 2px solid var(--primary); outline-offset: 2px; }
.travel-page .day-weather-refresh-button:disabled { opacity: 0.65; }
.travel-page .day-weather-refresh-button.is-refreshing i { animation: weather-refresh-spin 0.9s linear infinite; }
.travel-page .day-weather-card-message { display: block; margin-top: 8px; color: var(--muted); font-size: 0.68rem; line-height: 1.25; }
@keyframes weather-refresh-spin  { to { transform: rotate(360deg); } }

/* Route modal and parking */
.travel-page .route-choice-modal {
  position: fixed;
  inset: 0;
  z-index: 1100;
  display: grid;
  place-items: center;
  padding: 20px;
  background: rgba(25, 31, 27, 0.46);
}
.travel-page .route-choice-dialog {
  width: min(980px, 100%);
  max-height: min(88vh, 820px);
  overflow: auto;
  padding: 22px;
  border: 1px solid rgba(25, 53, 91, 0.12);
  border-radius: 22px;
  background: var(--surface);
  box-shadow: var(--shadow-lg);
}
.travel-page .parking-dialog-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 18px; padding-bottom: 16px; border-bottom: 1px solid var(--line); }
.travel-page .parking-close {
  width: 40px;
  height: 40px;
  padding: 0 0 2px;
  border-color: var(--line);
  border-radius: 12px;
  background: var(--surface-soft);
  color: var(--primary);
  font-size: 1.35rem;
  font-weight: 500;
  box-shadow: none;
}
.travel-page .parking-close:hover { border-color: #aeb8c2; background: var(--primary-soft); }
.travel-page .route-choice-content {
  display: block;
  margin-top: 16px;
}
.travel-page .route-choice-content > .route-leg-parking,
.travel-page .route-leg-parking { display: grid; gap: 10px; margin-top: 16px; }
.travel-page .route-leg-parking-title { margin: 0; font-size: 0.86rem; font-weight: 600; }
.travel-page .route-parking-master-detail {
  display: grid;
  grid-template-columns: minmax(260px, 0.78fr) minmax(0, 1.22fr);
  min-height: 360px;
  overflow: hidden;
  border: 1px solid var(--line);
  border-radius: var(--radius-md);
  background: var(--surface);
}
.travel-page .route-parking-master {
  padding: 16px;
  border-right: 1px solid var(--line);
  background: var(--surface-soft);
}
.travel-page .route-leg-parking-option {
  position: relative;
  display: grid;
  grid-template-columns: 22px minmax(0, 1fr);
  gap: 12px;
  align-items: start;
  width: 100%;
  padding: 16px;
  border: 1px solid transparent;
  border-radius: var(--radius-md);
  background: transparent;
  cursor: pointer;
}
.travel-page .route-leg-parking-option + .route-leg-parking-option { margin-top: 8px; }
.travel-page .route-leg-parking-option:hover { background: #eef2f6; }
.travel-page .route-leg-parking-option.is-selected,
.travel-page .route-leg-parking-option:has(input:checked) {
  border-color: #9eafc4;
  background: var(--surface);
  box-shadow: var(--shadow-sm);
}
.travel-page .route-leg-parking-option[data-used="true"] { border-left: 3px solid var(--primary); }
.travel-page .route-leg-parking-option input {
  width: 20px;
  height: 20px;
  margin: 1px 0 0;
  accent-color: var(--primary);
}
.travel-page .route-parking-option-copy { min-width: 0; }
.travel-page .route-leg-parking-option strong,
.travel-page .route-leg-parking-option small { display: block; }
.travel-page .route-leg-parking-option strong { color: var(--ink); line-height: 1.3; }
.travel-page .route-leg-parking-option small { margin-top: 4px; color: var(--muted); font-size: 0.78rem; line-height: 1.35; }
.travel-page .route-parking-detail {
  min-width: 0;
  padding: 24px 28px 28px;
}
.travel-page .route-parking-tabs {
  display: flex;
  gap: 4px;
  margin-bottom: 18px;
  border-bottom: 1px solid var(--line);
}
.travel-page .route-parking-tab {
  padding: 8px 4px 10px;
  border: 0;
  border-bottom: 2px solid transparent;
  margin-right: 14px;
  background: none;
  color: var(--muted);
  font: inherit;
  font-size: 0.82rem;
  font-weight: 700;
  cursor: pointer;
}
.travel-page .route-parking-tab:hover { color: var(--ink); }
.travel-page .route-parking-tab.active { border-bottom-color: var(--primary); color: var(--primary); }
.travel-page .route-parking-tab-panel { animation: route-parking-tab-fade 0.15s ease; }
@keyframes route-parking-tab-fade { from { opacity: 0; } to { opacity: 1; } }
.travel-page .route-parking-detail-heading { margin-bottom: 8px; }
.travel-page .route-parking-detail-kicker { display: none; }
.travel-page .route-parking-detail-heading h3 { margin: 0; font-size: 1.3rem; font-weight: 650; line-height: 1.25; }
.travel-page .route-parking-detail-info { margin: 0; color: var(--muted); line-height: 1.55; }
.travel-page .route-parking-detail-list {
  display: grid;
  gap: 8px;
  margin: 14px 0 0;
  padding: 0;
  color: var(--muted);
  list-style: none;
}
.travel-page .route-parking-detail-list li {
  position: relative;
  padding-left: 18px;
  line-height: 1.45;
}
.travel-page .route-parking-detail-list li::before {
  content: "";
  position: absolute;
  left: 1px;
  top: 0.62em;
  width: 6px;
  height: 6px;
  border-radius: 50%;
  background: var(--primary);
}
.travel-page .route-parking-payment {
  margin-top: 20px;
  padding: 15px 17px;
  border-left: 4px solid var(--primary);
  background: var(--primary-soft);
}
.travel-page .route-parking-payment strong { display: block; color: var(--primary); }
.travel-page .route-parking-payment p { margin: 4px 0 12px; color: var(--muted); font-size: 0.84rem; }
.travel-page .route-parking-detail-links { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 18px; }

.travel-page .route-parking-guide-intro {
  margin: 0 0 12px;
  padding: 11px 12px;
  border-left: 3px solid var(--primary);
  background: var(--surface-soft);
  color: var(--ink);
  font-size: 0.82rem;
}
.travel-page .route-parking-zone-grid,
.travel-page .route-parking-guide-grid,
.travel-page .route-parking-price-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 8px;
}
.travel-page .route-parking-zone,
.travel-page .route-parking-guide-grid > section {
  padding: 10px;
  border: 1px solid var(--line);
  background: var(--surface);
}
.travel-page .route-parking-zone-heading { display: flex; align-items: center; gap: 7px; font-size: 0.82rem; font-weight: 750; }
.travel-page .route-parking-zone p,
.travel-page .route-parking-guide-grid p,
.travel-page .route-parking-guide-grid ol,
.travel-page .route-parking-guide-grid ul { margin: 5px 0 0; color: var(--muted); font-size: 0.76rem; line-height: 1.4; }
.travel-page .route-parking-guide-grid { margin-top: 8px; }
.travel-page .route-parking-guide-grid > section { background: var(--surface-soft); }
.travel-page .route-parking-guide-grid h3,
.travel-page .route-parking-price-grid h3 { margin: 0; font-size: 0.78rem; font-weight: 750; }
.travel-page .route-parking-guide-grid ol,
.travel-page .route-parking-guide-grid ul { padding-left: 16px; }
.travel-page .route-parking-zone-swatch { width: 11px; height: 11px; flex: 0 0 11px; border-radius: 50%; }
.travel-page .route-parking-zone-swatch-blue { background: #2567c8; }
.travel-page .route-parking-zone-swatch-green { background: #2f8053; }
.travel-page .route-parking-zone-swatch-white { border: 1px solid #9aa4b2; background: var(--surface); }
.travel-page .route-parking-zone-swatch-yellow { background: #e7b232; }
.travel-page .route-parking-prices { margin-top: 8px; padding: 10px; border: 1px solid var(--line); border-radius: var(--radius-sm); }
.travel-page .route-parking-price-grid { padding: 10px 0 0; }
.travel-page .route-parking-price-row { display: grid; grid-template-columns: 1fr auto auto; gap: 7px; padding: 4px 0; border-bottom: 1px solid #edf0f4; color: var(--muted); font-size: 0.72rem; }
.travel-page .route-parking-price-row span:not(:first-child) { color: var(--ink); font-variant-numeric: tabular-nums; }
.travel-page .route-parking-vehicle-rate {
  margin: 0 10px 8px;
  padding: 8px 10px;
  background: var(--primary-soft);
  color: var(--primary);
  font-size: 0.76rem;
  font-weight: 750;
}
.travel-page .route-parking-price-row.is-vehicle-rate {
  margin-inline: -6px;
  padding-inline: 6px;
  border-left: 3px solid var(--primary);
  background: var(--primary-soft);
  color: var(--primary);
  font-weight: 750;
}
.travel-page .route-parking-price-row.is-vehicle-rate span:not(:first-child) { color: var(--primary); }
.travel-page .route-parking-decision { margin: 8px 0 0; padding: 10px 11px; border-left: 3px solid var(--warning); background: var(--warning-soft); font-size: 0.78rem; }
.travel-page .route-parking-decision strong,
.travel-page .route-parking-decision span { display: block; }
.travel-page .route-parking-decision span { margin-top: 2px; color: var(--muted); }
/* Sources */
.travel-page .day-sources { margin-top: 24px; color: var(--muted); font-size: 0.84rem; }
.travel-page .day-sources .detail-body { padding-left: calc(var(--time-column) + var(--layout-gap)); }

/* Responsive */
@media (max-width: 760px)  {
  .travel-page {
    --time-column: calc((100vw - 24px) / 3);
    --layout-gap: 16px;
  }
  .travel-page .page { width: min(100% - 22px, var(--content-width)); padding-top: 26px; }
  .travel-page .page > header { display: block; }
  .travel-page .base { margin-top: 12px; text-align: left; }
  .travel-page .week { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  .travel-page .day-tab { border-bottom: 1px solid var(--line); }
  .travel-page .day-head { grid-template-columns: 25% minmax(0, 1fr); }
  .travel-page .day-head > .date { padding-right: 12px; }
  .travel-page .day-head > .day-weather { grid-column: 2; margin: 14px 0 0; }
  .travel-page .detail-body,
.travel-page .day-sources .detail-body { padding-left: calc(var(--time-column) + var(--layout-gap)); }
  .travel-page .choice { grid-template-columns: 1fr; }
  .travel-page .route-choice-dialog { width: min(560px, 100%); }
  .travel-page .route-parking-master-detail { grid-template-columns: 1fr; }
  .travel-page .route-parking-master { border-right: 0; border-bottom: 1px solid var(--line); }
  .travel-page .route-parking-detail { padding: 22px 18px 24px; }
  .travel-page .route-parking-zone-grid,
  .travel-page .route-parking-guide-grid,
  .travel-page .route-parking-price-grid { grid-template-columns: 1fr; }
  .travel-page .event-considerations-grid { grid-template-columns: 1fr; }
  .travel-page .event-link-footer,
  .travel-page .inline-links {
    width: 100%;
    min-width: 0;
    max-width: 100%;
    align-items: stretch;
    overflow: hidden;
  }
  .travel-page .event-link-footer .nav-button,
  .travel-page .inline-links .nav-button {
    display: flex;
    width: 100%;
    min-width: 0;
    max-width: 100%;
    flex: 0 1 100%;
    padding: 7px 8px;
    overflow: hidden;
    font-size: 0.64rem;
    line-height: 1.2;
    text-align: center;
    white-space: normal;
    overflow-wrap: anywhere;
    word-break: break-word;
  }
  .travel-page .slot h3,
.travel-page .choice-day-card-copy h3 { font-size: 0.94rem; }
  .travel-page .slot p,
.travel-page .choice-day-card-copy p { font-size: 0.86rem; }
  .travel-page .slot-title-row {
    width: 100%;
    min-width: 0;
    padding-right: 0;
    flex-wrap: wrap;
  }
  .travel-page .slot-title-row h3,
  .travel-page .choice-day-card-copy h3 {
    min-width: 0;
    flex: 1 1 140px;
    overflow-wrap: anywhere;
  }
  .travel-page .slot-title-row + p { padding-right: 0; }
  .travel-page .slot-weather-tools {
    position: static;
    display: flex;
    width: 100%;
    min-width: 0;
    flex-wrap: wrap;
    align-items: center;
    justify-content: flex-end;
    gap: 6px;
  }
  .travel-page .location-weather-pill {
    min-width: 0;
    max-width: 100%;
  }
  .travel-page .location-weather-place { max-width: min(120px, 40vw); }
  .travel-page .event-rating {
    max-width: 100%;
    margin-left: 0;
  }
  .travel-page .route-duration-stepper {
    max-width: 100%;
    margin-left: 0;
    grid-template-columns: 28px minmax(44px, auto) 28px;
  }
  .travel-page .route-duration-value {
    min-width: 44px;
    padding-inline: 6px;
  }
  .travel-page .itinerary-leg-divider { width: calc(100vw - 32px); }
  .travel-page .route-map { height: 300px; }
  .travel-page .route-timeline-stop { grid-template-rows: 22px auto; }
  .travel-page .route-timeline-stop::before,
.travel-page .route-timeline-stop::after { top: 10px; }
  .travel-page .route-timeline-dot { width: 22px; height: 22px; flex-basis: 22px; font-size: 0.58rem; }
  .travel-page .route-timeline-arrival { margin-top: 4px; font-size: clamp(0.5rem, 2.2vw, 0.64rem); }
  .travel-page .route-stop { width: 78vw; min-width: 78vw; max-width: 78vw; flex-basis: 78vw; height: 164px; }
  .travel-page .route-stop-times.has-both { column-gap: 6px; }
  .travel-page .route-stop-time-value { font-size: 0.9rem; }
  .travel-page .route-stop-duration { bottom: 4px; padding-inline: 8px; font-size: 0.7rem; }
  .travel-page .route-stop-time-line { margin-bottom: 5px; }
  .travel-page .route-stop-calculated-time { bottom: calc(100% + 5px); font-size: 0.62rem; }
  .travel-page .day-weather-card { min-height: 54px; padding: 10px 48px 11px 10px; border-radius: 14px; }
  .travel-page .day-weather-card-date { font-size: 0.56rem; }
  .travel-page .day-weather-card-condition { font-size: 0.68rem; }
  .travel-page .day-weather-card-high { font-size: 2.25rem; }
  .travel-page .day-weather-card-values { gap: 4px; font-size: 0.72rem; }
}
/* Location parking explorer */
.travel-page .parking-explorer{display:grid;grid-template-columns:minmax(180px,.58fr) minmax(0,1.42fr);margin-top:16px;overflow:hidden;border:1px solid var(--line);border-radius:var(--radius-md);background:var(--surface)}
.travel-page .parking-explorer-tabs{padding:14px;border-right:1px solid var(--line);background:var(--surface-soft)}
.travel-page .parking-explorer-tabs button{width:100%;padding:12px;border:0;border-radius:9px;background:transparent;color:var(--ink);font:inherit;font-weight:650;text-align:left;cursor:pointer}
.travel-page .parking-explorer-tabs button.active{background:var(--surface);color:var(--primary);box-shadow:var(--shadow-sm)}
.travel-page .parking-explorer-content{min-width:0;padding:24px}
.travel-page .parking-explorer-head{display:flex;align-items:flex-start;justify-content:space-between;gap:16px}
.travel-page .parking-explorer-head h3{margin:2px 0 0;font-size:1.35rem}.travel-page .parking-explorer-kicker{color:var(--muted);font-size:.72rem;font-weight:800;letter-spacing:.07em;text-transform:uppercase}
.travel-page .parking-status{padding:7px 10px;border-radius:999px;font-size:.76rem;font-weight:800;white-space:nowrap}.travel-page .parking-status-free{background:var(--success-soft);color:var(--success)}.travel-page .parking-status-paid{background:var(--primary-soft);color:var(--primary)}.travel-page .parking-status-uncertain{background:var(--warning-soft);color:var(--warning)}
.travel-page .parking-explorer-summary{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;margin:18px 0}.travel-page .parking-explorer-summary>div{padding:12px;background:var(--surface-soft)}.travel-page .parking-explorer-summary span,.travel-page .parking-explorer-summary strong{display:block}.travel-page .parking-explorer-summary span{color:var(--muted);font-size:.72rem}.travel-page .parking-explorer-table-wrap{overflow:auto}.travel-page .parking-explorer-table{width:100%;border-collapse:collapse}.travel-page .parking-explorer-table th,.travel-page .parking-explorer-table td{padding:11px;border-bottom:1px solid var(--line);text-align:left}.travel-page .parking-explorer-table th{color:var(--muted);font-size:.72rem;text-transform:uppercase}
@media(max-width:760px){.travel-page .parking-explorer{grid-template-columns:1fr}.travel-page .parking-explorer-tabs{display:flex;overflow:auto;border-right:0;border-bottom:1px solid var(--line)}.travel-page .parking-explorer-tabs button{width:auto;min-width:max-content}.travel-page .parking-explorer-content{padding:18px}.travel-page .parking-explorer-head{display:block}.travel-page .parking-status{display:inline-block;margin-top:10px}.travel-page .parking-explorer-summary{grid-template-columns:1fr}}

.travel-page .costs-day{padding-bottom:48px}
.travel-page .costs-day-head{margin-bottom:24px}
.travel-page .cost-filters{margin:0 0 20px;border:1px solid var(--line);background:var(--surface);box-shadow:var(--shadow-sm)}
.travel-page .cost-filter-section{display:grid;grid-template-columns:140px minmax(0,1fr);border-bottom:1px solid var(--line)}
.travel-page .cost-filter-section:last-child{border-bottom:0}
.travel-page .cost-filter-label{padding:16px;background:var(--surface-soft);color:var(--primary);font-weight:700}
.travel-page .cost-filter-control{padding:12px 14px}
.travel-page .cost-filter-group-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:8px;color:var(--ink);font-weight:700}
.travel-page .cost-group-actions{display:flex;border:1px solid var(--line)}
.travel-page .cost-group-button{min-height:30px;padding:5px 10px;border-left:0;border-right:1px solid var(--line);font-size:.78rem}
.travel-page .cost-group-button:last-child{border-right:0}
.travel-page .cost-checks{display:flex;flex-wrap:wrap}
.travel-page .cost-check{display:inline-flex;align-items:center;gap:7px;min-height:36px;padding:7px 12px;border:1px solid var(--line);margin:-1px 0 0 -1px;background:var(--surface);cursor:pointer}
.travel-page .cost-check:has(input:checked){background:var(--primary-soft);box-shadow:inset 0 -3px 0 var(--primary)}
.travel-page .cost-check input{margin:0;accent-color:var(--primary)}
.travel-page .cost-search{width:100%;min-height:42px;padding:9px 11px;border:1px solid var(--line);border-radius:0;background:var(--surface);color:var(--ink);font:inherit}
.travel-page .cost-search:focus{outline:2px solid var(--primary);outline-offset:0}
.travel-page .cost-filter-button{border:0;border-radius:0;background:var(--surface);color:var(--primary);font:inherit;font-weight:700;cursor:pointer}
.travel-page .cost-filter-button:hover{background:var(--primary-soft)}
.travel-page .cost-active-description{margin:0 0 10px;color:var(--muted);font-size:.84rem}
.travel-page .cost-summary{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));border:1px solid var(--line);border-bottom:0;background:var(--surface);box-shadow:none}
.travel-page .cost-composition-section{margin-top:28px;padding-top:0;border-top:0;background:var(--surface);box-shadow:var(--shadow-sm)}
.travel-page .cost-composition-section .cost-summary{margin:0}
.travel-page .cost-composition-section .cost-treemap{margin:0;border-top:1px solid var(--line);box-shadow:none}
.travel-page .cost-summary>div{padding:17px;border-right:1px solid var(--line)}
.travel-page .cost-summary>div:last-child{border-right:0}
.travel-page .cost-summary span,.travel-page .cost-summary strong{display:block}
.travel-page .cost-summary span{color:var(--muted);font-size:.77rem}
.travel-page .cost-summary strong{color:var(--primary);font-size:1.4rem;font-variant-numeric:tabular-nums}
.travel-page .cost-section{margin-top:28px;border-top:1px solid var(--line);padding-top:16px}
.travel-page .cost-section-head{display:flex;align-items:baseline;justify-content:space-between;gap:12px;margin-bottom:12px}
.travel-page .cost-section-head h3{margin:0}
.travel-page .cost-section-head span{color:var(--muted);font-size:.82rem}
.travel-page .cost-treemap{position:relative;height:560px;background:var(--surface);border:1px solid var(--line);box-shadow:var(--shadow-sm);overflow:hidden}
.travel-page .cost-treemap-block{position:absolute;transition:left .28s ease,top .28s ease,width .28s ease,height .28s ease,filter .2s ease,box-shadow .2s ease;display:flex;flex-direction:column;justify-content:flex-end;padding:28px 32px;border:6px solid var(--surface);border-radius:28px;background:#1f416d;color:#fff;overflow:hidden}
.travel-page .cost-treemap-block:focus{outline:3px solid #fff;outline-offset:-8px}.travel-page .cost-treemap-block.is-expanded{z-index:4;filter:saturate(1.08);box-shadow:0 12px 30px rgba(10,27,49,.24)}
.travel-page .cost-treemap-block:nth-child(2){background:#3f8068}.travel-page .cost-treemap-block:nth-child(3){background:#ad702a}.travel-page .cost-treemap-block:nth-child(4){background:#7359ad}.travel-page .cost-treemap-block:nth-child(5){background:#527da2}.travel-page .cost-treemap-block:nth-child(6){background:#9a5757}.travel-page .cost-treemap-block:nth-child(7){background:#64785d}
.travel-page .cost-treemap-block small,.travel-page .cost-treemap-block strong,.travel-page .cost-treemap-block span{display:block;color:#fff}
.travel-page .cost-treemap-block small{font-size:1.05rem}.travel-page .cost-treemap-block strong{font-size:2rem;line-height:1.2}.travel-page .cost-treemap-block span{font-size:1rem;font-weight:600;opacity:.86}
.travel-page .cost-treemap-block.cost-treemap-compact{padding:12px 14px;border-radius:18px}
.travel-page .cost-treemap-block.cost-treemap-compact small{font-size:.78rem}
.travel-page .cost-treemap-block.cost-treemap-compact strong{font-size:1.2rem}
.travel-page .cost-treemap-block.cost-treemap-compact span{font-size:.75rem}
.travel-page .cost-treemap-block.cost-treemap-tiny{justify-content:center;padding:6px 10px;border-width:4px;border-radius:14px}
.travel-page .cost-treemap-block.cost-treemap-tiny small,.travel-page .cost-treemap-block.cost-treemap-tiny strong,.travel-page .cost-treemap-block.cost-treemap-tiny span{display:block;color:#fff;line-height:1.05;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.travel-page .cost-treemap-block.cost-treemap-tiny small{font-size:clamp(.62rem,.72vw,.76rem);font-weight:800}
.travel-page .cost-treemap-block.cost-treemap-tiny strong{font-size:clamp(.72rem,.9vw,.95rem)}
.travel-page .cost-treemap-block.cost-treemap-tiny span{font-size:clamp(.58rem,.66vw,.7rem);font-weight:700;opacity:.9}
.travel-page .cost-treemap-block.cost-treemap-narrow{justify-content:center;display:grid;grid-template-columns:minmax(0,1fr) auto auto;align-content:center;align-items:center;column-gap:6px;padding:5px 9px;border-width:4px;border-radius:12px}
.travel-page .cost-treemap-block.cost-treemap-narrow small,.travel-page .cost-treemap-block.cost-treemap-narrow strong,.travel-page .cost-treemap-block.cost-treemap-narrow span{display:block;color:#fff;min-width:0;line-height:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.travel-page .cost-treemap-block.cost-treemap-narrow small{font-size:clamp(.6rem,.68vw,.72rem);font-weight:800}
.travel-page .cost-treemap-block.cost-treemap-narrow strong{font-size:clamp(.65rem,.78vw,.82rem)}
.travel-page .cost-treemap-block.cost-treemap-narrow span{font-size:clamp(.56rem,.62vw,.66rem);font-weight:700;opacity:.9}

.travel-page .cost-treemap-parent{display:block;padding:0;border-color:var(--surface);background:var(--primary);overflow:hidden}
.travel-page .cost-parent-label{position:absolute;z-index:3;left:12px;top:12px;display:flex;align-items:baseline;gap:7px;max-width:calc(100% - 24px);padding:5px 8px;border-radius:8px;background:rgba(10,27,49,.78);color:#fff;pointer-events:none}
.travel-page .cost-parent-label small,.travel-page .cost-parent-label strong,.travel-page .cost-parent-label span{display:block;color:#fff;white-space:nowrap}.travel-page .cost-parent-label strong{font-size:.88rem}.travel-page .cost-parent-label small,.travel-page .cost-parent-label span{font-size:.7rem}
.travel-page .cost-subcategory-map{position:absolute;inset:0}
.travel-page .cost-subcategory-block{position:absolute;display:flex;flex-direction:column;justify-content:flex-end;padding:14px;border:3px solid rgba(255,255,255,.9);background:rgba(255,255,255,.10);color:#fff;overflow:hidden}
.travel-page .cost-subcategory-block:nth-child(even){background:rgba(255,255,255,.19)}
.travel-page .cost-subcategory-block small,.travel-page .cost-subcategory-block strong,.travel-page .cost-subcategory-block span{display:block;color:#fff;line-height:1.12;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.travel-page .cost-subcategory-block small{font-size:.78rem;font-weight:800}.travel-page .cost-subcategory-block strong{font-size:1rem}.travel-page .cost-subcategory-block span{font-size:.68rem;font-weight:700;opacity:.9}
.travel-page .cost-treemap-parent.is-expanded .cost-subcategory-block{display:grid;grid-template-columns:minmax(0,1fr) auto auto;align-items:center;justify-content:stretch;gap:8px;padding:2px 10px}.travel-page .cost-treemap-parent.is-expanded .cost-subcategory-block small,.travel-page .cost-treemap-parent.is-expanded .cost-subcategory-block strong,.travel-page .cost-treemap-parent.is-expanded .cost-subcategory-block span{display:block;min-width:0;margin:0;line-height:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.travel-page .cost-treemap-parent.is-expanded .cost-subcategory-block small{font-size:.7rem}.travel-page .cost-treemap-parent.is-expanded .cost-subcategory-block strong{font-size:.78rem}.travel-page .cost-treemap-parent.is-expanded .cost-subcategory-block span{font-size:.56rem}
.travel-page .cost-subcategory-block-small{padding:0}
.travel-page .cost-subcategory-block-small small,.travel-page .cost-subcategory-block-small strong,.travel-page .cost-subcategory-block-small span{display:none}
.travel-page .cost-subcategory-legend[hidden]{display:none}
.travel-page .cost-subcategory-legend{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;padding:14px;background:var(--paper);border-top:1px solid var(--line)}
.travel-page .cost-subcategory-legend-card{min-width:0;border:1px solid var(--line);background:var(--surface);box-shadow:var(--shadow-sm)}
.travel-page .cost-subcategory-legend-card>header{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:11px 13px;background:#1f416d;color:#fff}
.travel-page .cost-subcategory-legend-card:nth-child(2)>header{background:#3f8068}.travel-page .cost-subcategory-legend-card:nth-child(3)>header{background:#ad702a}.travel-page .cost-subcategory-legend-card:nth-child(4)>header{background:#7359ad}.travel-page .cost-subcategory-legend-card:nth-child(5)>header{background:#527da2}.travel-page .cost-subcategory-legend-card:nth-child(6)>header{background:#9a5757}.travel-page .cost-subcategory-legend-card:nth-child(7)>header{background:#64785d}
.travel-page .cost-subcategory-legend-card>header>div{display:flex;min-width:0;flex-direction:column}.travel-page .cost-subcategory-legend-card>header strong{font-size:.86rem}.travel-page .cost-subcategory-legend-card>header span{font-size:.65rem;font-weight:750;opacity:.9}.travel-page .cost-subcategory-legend-card>header>strong{white-space:nowrap}
.travel-page .cost-subcategory-legend-rows{padding:5px 11px 8px}
.travel-page .cost-subcategory-legend-row{display:grid;grid-template-columns:minmax(90px,1fr) minmax(55px,1.4fr) auto auto;gap:8px;align-items:center;padding:7px 0;border-bottom:1px solid var(--line);font-size:.72rem}
.travel-page .cost-subcategory-legend-row:last-child{border-bottom:0}.travel-page .cost-subcategory-legend-row>span:first-child{min-width:0;font-weight:750;overflow-wrap:anywhere}.travel-page .cost-subcategory-legend-row>strong{font-size:.72rem;white-space:nowrap}.travel-page .cost-subcategory-legend-row>small{min-width:38px;color:var(--muted);font-size:.64rem;font-weight:750;text-align:right}
.travel-page .cost-subcategory-legend-track{height:9px;background:var(--surface-soft);overflow:hidden}.travel-page .cost-subcategory-legend-track>span{display:block;height:100%;background:#1f416d}
.travel-page .cost-subcategory-legend-card:nth-child(2) .cost-subcategory-legend-track>span{background:#3f8068}.travel-page .cost-subcategory-legend-card:nth-child(3) .cost-subcategory-legend-track>span{background:#ad702a}.travel-page .cost-subcategory-legend-card:nth-child(4) .cost-subcategory-legend-track>span{background:#7359ad}.travel-page .cost-subcategory-legend-card:nth-child(5) .cost-subcategory-legend-track>span{background:#527da2}.travel-page .cost-subcategory-legend-card:nth-child(6) .cost-subcategory-legend-track>span{background:#9a5757}.travel-page .cost-subcategory-legend-card:nth-child(7) .cost-subcategory-legend-track>span{background:#64785d}
@media(max-width:1100px){.travel-page .cost-subcategory-legend{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:760px){.travel-page .cost-subcategory-legend{grid-template-columns:1fr}.travel-page .cost-subcategory-legend-row{grid-template-columns:minmax(90px,1fr) minmax(55px,1.4fr) auto auto}}
.travel-page .cost-ledger-wrap{overflow:auto;border:1px solid var(--line);box-shadow:var(--shadow-sm)}
.travel-page .cost-ledger{width:100%;border-collapse:collapse;background:var(--surface)}
.travel-page .cost-ledger th,.travel-page .cost-ledger td{padding:12px;border-bottom:1px solid var(--line);text-align:left;white-space:nowrap}
.travel-page .cost-ledger th{position:sticky;top:0;background:var(--surface-soft);color:var(--muted);font-size:.72rem;text-transform:uppercase;letter-spacing:.04em}
.travel-page .cost-ledger th:last-child,.travel-page .cost-ledger td:last-child{text-align:right}
.travel-page .cost-ledger .cost-event-title{min-width:270px;white-space:normal}
.travel-page .cost-ledger .cost-missing-row td{background:var(--warning-soft)}
.travel-page .cost-ledger .cost-day-total-row td{background:var(--surface-soft);border-top:2px solid var(--line);font-weight:700}
.travel-page .cost-warning{display:grid;grid-template-columns:26px minmax(0,1fr) auto;gap:10px;align-items:center;padding:12px;border-bottom:1px solid var(--line);border-left:4px solid var(--warning-border);background:var(--warning-soft)}
.travel-page .cost-warning:first-child{border-top:1px solid var(--line)}
.travel-page .cost-warning-icon{display:grid;width:24px;height:24px;place-items:center;border-radius:50%;background:var(--warning-border);color:var(--warning);font-weight:800}
.travel-page .cost-warning strong{display:block;color:var(--warning)}
.travel-page .cost-warning small{color:var(--muted)}
.travel-page .cost-empty{padding:34px;border:1px solid var(--line);background:var(--surface);color:var(--muted);text-align:center}
@media(max-width:760px){.travel-page .cost-filter-section{grid-template-columns:1fr}.travel-page .cost-filter-label{padding:9px 13px}.travel-page .cost-summary{grid-template-columns:1fr 1fr}.travel-page .cost-summary>div{border-bottom:1px solid var(--line)}.travel-page .cost-summary>div:nth-child(2){border-right:0}.travel-page .cost-section-head{display:block}.travel-page .cost-warning{grid-template-columns:26px 1fr}.travel-page .cost-warning small{grid-column:2}.travel-page .cost-treemap{height:480px}.travel-page .cost-treemap-block{padding:16px 18px;border-width:4px;border-radius:20px}.travel-page .cost-treemap-block strong{font-size:1.35rem}.travel-page .cost-treemap-block small,.travel-page .cost-treemap-block span{font-size:.78rem}}
@media(max-width:500px){.travel-page .cost-summary{grid-template-columns:1fr}.travel-page .cost-summary>div{border-right:0}.travel-page .cost-filter-group-head{align-items:flex-start;flex-direction:column}.travel-page .cost-group-button{min-height:34px}}

.travel-page .costs-modal{position:fixed;inset:0;z-index:1600;display:grid;place-items:center;padding:22px;background:rgba(10,22,38,.66);backdrop-filter:blur(4px)}
.travel-page .costs-modal[hidden]{display:none}
.travel-page .costs-dialog{display:flex;flex-direction:column;width:min(1500px,calc(100vw - 44px));max-height:calc(100vh - 44px);overflow:hidden;border:1px solid var(--line);border-radius:18px;background:var(--paper);box-shadow:0 24px 80px rgba(9,20,35,.35)}
.travel-page .costs-dialog-head{display:flex;align-items:center;justify-content:space-between;gap:18px;padding:18px 22px;border-bottom:1px solid var(--line);background:var(--surface)}
.travel-page .costs-dialog-head h2,.travel-page .costs-dialog-head p{margin:0}
.travel-page .costs-dialog-scroll{overflow:auto;padding:20px 22px 28px}
.travel-page .costs-dialog-body>.costs-day-head{display:none}
.travel-page .cost-filter-control{display:flex;align-items:center;gap:12px;min-width:0}
.travel-page .cost-filter-group-head{order:2;flex:0 0 auto;margin:0}
.travel-page .cost-checks{order:1;flex:1 1 auto;min-width:0}
.travel-page .cost-search{order:1;flex:1 1 auto;min-width:0}
.travel-page .cost-filter-control:has(.cost-search) .cost-filter-group-head{order:2}
body:has(.travel-page .costs-modal:not([hidden])){overflow:hidden}
@media(max-width:760px){.travel-page .costs-modal{padding:0}.travel-page .costs-dialog{width:100vw;max-height:100vh;height:100vh;border:0}.travel-page .costs-dialog-scroll{padding:14px}.travel-page .cost-filter-control{align-items:stretch;flex-direction:column}.travel-page .cost-filter-group-head,.travel-page .cost-checks,.travel-page .cost-search{order:initial;width:100%}}
.travel-page .cost-subcategory-section .cost-filter-label{align-items:flex-start;gap:10px}.travel-page .cost-subcategory-toggle{display:flex;align-items:center;gap:7px;color:var(--muted);font-size:.72rem;font-weight:750;cursor:pointer}.travel-page .cost-subcategory-toggle input{position:absolute;opacity:0;pointer-events:none}.travel-page .cost-toggle-track{position:relative;width:38px;height:22px;border-radius:999px;background:#cbd4dd;box-shadow:inset 0 0 0 1px rgba(23,59,102,.08);transition:background .18s ease}.travel-page .cost-toggle-track::after{content:"";position:absolute;top:3px;left:3px;width:16px;height:16px;border-radius:50%;background:#fff;box-shadow:0 1px 4px rgba(12,29,49,.3);transition:transform .18s ease}.travel-page .cost-subcategory-toggle input:checked+.cost-toggle-track{background:var(--primary)}.travel-page .cost-subcategory-toggle input:checked+.cost-toggle-track::after{transform:translateX(16px)}.travel-page .cost-subcategory-section .cost-filter-control{display:none}.travel-page .cost-subcategory-section.is-visible .cost-filter-control{display:flex}.travel-page #costSubcategoryFilters{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;padding:10px;background:var(--paper)}.travel-page .cost-subcategory-card{min-width:0;margin:0;padding:0 10px 10px;border:1px solid var(--line);border-radius:10px;background:var(--surface);overflow:hidden}.travel-page .cost-subcategory-card legend{max-width:calc(100% - 14px);padding:8px 5px 6px;color:var(--primary);font-size:.76rem;font-weight:850;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.travel-page .cost-subcategory-card-checks{display:flex;flex-wrap:wrap;gap:6px}.travel-page .cost-subcategory-card .cost-check{border:1px solid var(--line);border-radius:7px;background:var(--paper)}.travel-page .cost-subcategory-card .cost-check:has(input:checked){background:var(--primary-soft)}@media(max-width:760px){.travel-page #costSubcategoryFilters{grid-template-columns:1fr}}
.travel-page .cost-category-section .cost-filter-control{display:flex;align-items:flex-start;gap:12px}
.travel-page .cost-category-section .cost-filter-group-head{position:sticky;top:0;z-index:2;order:2;display:flex;flex:0 0 auto;align-self:flex-start;align-items:stretch;flex-direction:column;gap:6px;margin:0;background:var(--surface)}
.travel-page .cost-category-section .cost-group-actions{display:flex;align-items:stretch;border:1px solid var(--line)}
.travel-page .cost-category-section .cost-subcategory-toggle{display:inline-flex;min-height:30px;align-items:center;justify-content:space-between;gap:8px;padding:5px 10px;border:1px solid var(--line);background:var(--surface);color:var(--primary);font-size:.78rem;font-weight:700;line-height:1;white-space:nowrap;cursor:pointer}
.travel-page .cost-category-section .cost-subcategory-toggle:hover{background:var(--primary-soft)}
.travel-page .cost-category-section .cost-subcategory-toggle input{position:absolute;opacity:0;pointer-events:none}
.travel-page .cost-category-section .cost-toggle-track{display:inline-block;position:relative;width:34px;height:20px;flex:0 0 auto;border-radius:999px;background:#cbd4dd;box-shadow:inset 0 0 0 1px rgba(23,59,102,.08);transition:background .18s ease}
.travel-page .cost-category-section .cost-toggle-track::after{content:"";position:absolute;top:3px;left:3px;width:14px;height:14px;border-radius:50%;background:#fff;box-shadow:0 1px 4px rgba(12,29,49,.3);transition:transform .18s ease}
.travel-page .cost-category-section .cost-subcategory-toggle input:checked+.cost-toggle-track{background:var(--primary)}
.travel-page .cost-category-section .cost-subcategory-toggle input:checked+.cost-toggle-track::after{transform:translateX(14px)}
.travel-page .cost-category-cards{order:1;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;flex:1 1 auto;min-width:0;padding:10px;background:var(--paper)}
.travel-page .cost-category-group{display:block;min-width:0;border:1px solid var(--line);background:var(--surface)}
.travel-page .cost-category-parent{display:block}
.travel-page .cost-category-parent>.cost-check,.travel-page .cost-category-children>.cost-check{display:inline-flex;min-height:36px;align-items:center;gap:7px;margin:-1px 0 0 -1px;padding:7px 12px;border:1px solid var(--line);border-radius:0;background:var(--surface);color:var(--ink);font:inherit;font-weight:400;cursor:pointer}
.travel-page .cost-category-parent>.cost-check{display:flex;width:100%;margin:0;border:0;border-radius:0}
.travel-page .cost-category-parent>.cost-check:has(input:checked),.travel-page .cost-category-children>.cost-check:has(input:checked){background:var(--primary-soft);box-shadow:inset 0 -3px 0 var(--primary)}
.travel-page .cost-category-children{display:none}
.travel-page .cost-category-section.show-subcategories .cost-category-children{display:flex;flex-wrap:wrap;padding:10px;border-top:1px solid var(--line);background:var(--surface)}
@media(max-width:760px){.travel-page .cost-category-section .cost-filter-control{align-items:stretch;flex-direction:column}.travel-page .cost-category-section .cost-filter-group-head{position:static;order:1;align-self:flex-end}.travel-page .cost-category-cards{order:2;width:100%}.travel-page .cost-category-section.show-subcategories .cost-category-cards{grid-template-columns:1fr}}

/* Event shopping checklist */
.travel-page .event-shopping-list { margin-top: 12px; }
.travel-page .event-shopping-list > summary { display: flex; align-items: center; gap: 7px; cursor: pointer; }
.travel-page .event-shopping-count { display: inline-grid; min-width: 20px; height: 20px; place-items: center; padding: 0 6px; border-radius: 999px; background: var(--primary-soft); color: var(--primary); font-size: .68rem; font-weight: 800; }
.travel-page .event-shopping-items { display: grid; gap: 7px; margin: 0; padding: 10px 0 2px; list-style: none; }
.travel-page .event-shopping-item { border: 1px solid var(--line); border-radius: 9px; background: var(--surface); transition: border-color .16s ease, background .16s ease, opacity .16s ease; }
.travel-page .event-shopping-label { display: grid; grid-template-columns: 22px minmax(0,1fr); gap: 10px; align-items: center; padding: 9px 11px; cursor: pointer; }
.travel-page .event-shopping-checkbox { position: absolute; width: 1px; height: 1px; opacity: 0; pointer-events: none; }
.travel-page .event-shopping-control { position: relative; display: grid; width: 20px; height: 20px; place-items: center; border: 2px solid #8b99aa; border-radius: 6px; background: #fff; transition: border-color .16s ease, background .16s ease, transform .16s ease; }
.travel-page .event-shopping-checkbox:checked + .event-shopping-control { border-color: var(--completed); background: var(--completed); }
.travel-page .event-shopping-checkbox:checked + .event-shopping-control::after { content: "Ã¢Å“â€œ"; color: #fff; font-size: 13px; font-weight: 900; line-height: 1; }
.travel-page .event-shopping-checkbox:focus-visible + .event-shopping-control { outline: 2px solid var(--primary); outline-offset: 2px; }
.travel-page .event-shopping-copy { display: flex; min-width: 0; flex-wrap: wrap; align-items: baseline; gap: 3px 7px; }
.travel-page .event-shopping-title { color: var(--ink); font-size: .78rem; }
.travel-page .event-shopping-quantity { color: var(--muted); font-size: .74rem; }
.travel-page .event-shopping-checkbox:checked ~ .event-shopping-copy .event-shopping-title { color: var(--muted); text-decoration: line-through; }
.travel-page .event-shopping-item:has(.event-shopping-checkbox:checked) { border-color: #bad9c7; background: #f2f8f4; }
.travel-page .event-shopping-item.is-saving { opacity: .58; }
.travel-page .event-shopping-item.is-saving .event-shopping-control { animation: shopping-save-pulse .8s ease-in-out infinite alternate; }
.travel-page .event-shopping-item.has-save-error { border-color: #d27b7b; background: #fff5f5; }
@keyframes shopping-save-pulse { to { transform: scale(.86); } }
@media(max-width:760px){.travel-page .event-shopping-label{padding:10px}.travel-page .event-shopping-copy{display:grid;gap:2px}.travel-page .event-shopping-title{font-size:.8rem}}