/**
 * Public Accommodation calendar status colours and customer-facing key.
 *
 * Colour is deliberately secondary to text, disabled state, line-through
 * markers and aria labels. These rules do not change availability logic.
 */
.pxab-ui {
  --pxab-calendar-available-color: #15803d;
  --pxab-calendar-selected-color: #2563eb;
  --pxab-calendar-selected-text-color: #fff;
  --pxab-calendar-checkout-only-color: #d97706;
  --pxab-calendar-minimum-stay-color: #7c3aed;
  --pxab-calendar-unavailable-color: #dc2626;
}

.pxab-public-calendar-key {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: .45rem .85rem;
  width: 100%;
  margin: .8rem 0 0;
  color: var(--pxab-single-muted, #475569);
  font-size: .78rem;
  font-weight: 650;
  line-height: 1.25;
}

.pxab-public-calendar-key__item {
  display: inline-flex;
  align-items: center;
  gap: .38rem;
  min-width: 0;
}

.pxab-public-calendar-key__swatch {
  position: relative;
  display: inline-block;
  flex: 0 0 14px;
  width: 14px;
  height: 14px;
  border: 1px solid currentColor;
  border-radius: 4px;
  background: #fff;
}

.pxab-public-calendar-key__swatch.is-available {
  color: var(--pxab-calendar-available-color, #15803d);
  background: #f0fdf4;
  background: color-mix(in srgb, var(--pxab-calendar-available-color, #15803d) 10%, #fff);
}

.pxab-public-calendar-key__swatch.is-selected {
  color: var(--pxab-calendar-selected-color, #2563eb);
  background: var(--pxab-calendar-selected-color, #2563eb);
  border-radius: 999px;
}

.pxab-public-calendar-key__swatch.is-checkout-only {
  color: var(--pxab-calendar-checkout-only-color, #d97706);
  background: #fffbeb;
  background: color-mix(in srgb, var(--pxab-calendar-checkout-only-color, #d97706) 10%, #fff);
}

.pxab-public-calendar-key__swatch.is-checkout-only::after {
  content: "";
  position: absolute;
  right: 2px;
  bottom: 2px;
  width: 4px;
  height: 4px;
  border-radius: 999px;
  background: currentColor;
}

.pxab-public-calendar-key__swatch.is-minimum-stay {
  color: var(--pxab-calendar-minimum-stay-color, #7c3aed);
  background: #f5f3ff;
  background: color-mix(in srgb, var(--pxab-calendar-minimum-stay-color, #7c3aed) 9%, #fff);
  border-style: dashed;
}

.pxab-public-calendar-key__swatch.is-minimum-stay::after {
  content: "";
  position: absolute;
  left: 3px;
  right: 3px;
  top: 50%;
  height: 2px;
  border-radius: 999px;
  background: currentColor;
  transform: translateY(-50%);
}

.pxab-public-calendar-key__swatch.is-unavailable {
  color: var(--pxab-calendar-unavailable-color, #dc2626);
  background: #fef2f2;
  background: color-mix(in srgb, var(--pxab-calendar-unavailable-color, #dc2626) 8%, #fff);
}

.pxab-public-calendar-key__swatch.is-unavailable::after {
  content: "";
  position: absolute;
  left: 1px;
  right: 1px;
  top: 50%;
  height: 1px;
  background: currentColor;
  transform: translateY(-50%) rotate(-12deg);
}

.pxab-public-calendar-key--compact {
  margin-top: .65rem;
  font-size: .74rem;
}

/* Available: a restrained green cue, excluding dates carrying a stay-rule warning. */
.pxab-ui :where(.pxab-calendar-day, .pxab-quote-calendar-day).is-available:not(.is-selected):not(.is-in-range):not([data-pxab-checkout-only="1"]):not([data-pxab-rule-message]) {
  background: #f0fdf4 !important;
  background: color-mix(in srgb, var(--pxab-calendar-available-color, #15803d) 7%, #fff) !important;
  color: var(--pxab-single-text, #111827) !important;
  box-shadow: inset 0 0 0 1px rgba(21, 128, 61, .28) !important;
  box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--pxab-calendar-available-color, #15803d) 28%, transparent) !important;
}

.pxab-ui :where(.pxab-calendar-day, .pxab-quote-calendar-day).is-available:not(.is-selected):not(.is-in-range):not([data-pxab-checkout-only="1"]):not([data-pxab-rule-message]):hover,
.pxab-ui :where(.pxab-calendar-day, .pxab-quote-calendar-day).is-available:not(.is-selected):not(.is-in-range):not([data-pxab-checkout-only="1"]):not([data-pxab-rule-message]):focus-visible {
  background: #ecfdf5 !important;
  background: color-mix(in srgb, var(--pxab-calendar-available-color, #15803d) 12%, #fff) !important;
  box-shadow: inset 0 0 0 2px rgba(21, 128, 61, .62) !important;
  box-shadow: inset 0 0 0 2px color-mix(in srgb, var(--pxab-calendar-available-color, #15803d) 62%, transparent) !important;
}

/* The selected arrival/departure and the nights between them use one blue stay state. */
.pxab-ui :where(.pxab-calendar-day, .pxab-quote-calendar-day).is-in-range:not(.is-selected) {
  background: #eff6ff !important;
  background: color-mix(in srgb, var(--pxab-calendar-selected-color, #2563eb) 10%, #fff) !important;
  color: var(--pxab-single-text, #111827) !important;
  box-shadow: inset 0 1px 0 rgba(37, 99, 235, .22), inset 0 -1px 0 rgba(37, 99, 235, .22) !important;
  box-shadow: inset 0 1px 0 color-mix(in srgb, var(--pxab-calendar-selected-color, #2563eb) 22%, transparent), inset 0 -1px 0 color-mix(in srgb, var(--pxab-calendar-selected-color, #2563eb) 22%, transparent) !important;
}

.pxab-ui :where(.pxab-calendar-day, .pxab-quote-calendar-day).is-selected,
.pxab-ui :where(.pxab-calendar-day, .pxab-quote-calendar-day).is-selected:hover,
.pxab-ui :where(.pxab-calendar-day, .pxab-quote-calendar-day).is-selected:focus-visible {
  background: var(--pxab-calendar-selected-color, #2563eb) !important;
  border-color: var(--pxab-calendar-selected-color, #2563eb) !important;
  color: var(--pxab-calendar-selected-text-color, #fff) !important;
  box-shadow: none !important;
}

/* Checkout-only is orange and retains its dot even when that boundary is selected. */
.pxab-ui :where(.pxab-calendar-day, .pxab-quote-calendar-day)[data-pxab-checkout-only="1"]:not(.is-selected) {
  background: #fffbeb !important;
  background: color-mix(in srgb, var(--pxab-calendar-checkout-only-color, #d97706) 9%, #fff) !important;
  color: var(--pxab-single-text, #111827) !important;
  box-shadow: inset 0 0 0 1px rgba(217, 119, 6, .58) !important;
  box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--pxab-calendar-checkout-only-color, #d97706) 58%, transparent) !important;
}

.pxab-ui :where(.pxab-calendar-day, .pxab-quote-calendar-day)[data-pxab-checkout-only="1"]:not(.is-selected):hover,
.pxab-ui :where(.pxab-calendar-day, .pxab-quote-calendar-day)[data-pxab-checkout-only="1"]:not(.is-selected):focus-visible {
  background: #fef3c7 !important;
  background: color-mix(in srgb, var(--pxab-calendar-checkout-only-color, #d97706) 15%, #fff) !important;
  box-shadow: inset 0 0 0 2px rgba(217, 119, 6, .72) !important;
  box-shadow: inset 0 0 0 2px color-mix(in srgb, var(--pxab-calendar-checkout-only-color, #d97706) 72%, transparent) !important;
}

.pxab-ui :where(.pxab-calendar-day, .pxab-quote-calendar-day)[data-pxab-checkout-only="1"]::before,
.pxab-ui :where(.pxab-calendar-day, .pxab-quote-calendar-day)[data-pxab-checkout-only="1"].is-selected::before {
  background: var(--pxab-calendar-checkout-only-color, #d97706) !important;
}

/* Public customers do not need the internal booked/held distinction: both are unavailable. */
.pxab-ui :where(.pxab-calendar-day, .pxab-quote-calendar-day):is(.is-blocked, .is-pending, .is-unselectable, .is-rule-blocked):not(.is-selected),
.pxab-ui :where(.pxab-calendar-day, .pxab-quote-calendar-day):disabled:not(.is-selected) {
  background: #fef2f2 !important;
  background: color-mix(in srgb, var(--pxab-calendar-unavailable-color, #dc2626) 7%, #fff) !important;
  color: #b91c1c !important;
  color: color-mix(in srgb, var(--pxab-calendar-unavailable-color, #dc2626) 72%, #64748b) !important;
  box-shadow: inset 0 0 0 1px rgba(220, 38, 38, .24) !important;
  box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--pxab-calendar-unavailable-color, #dc2626) 24%, transparent) !important;
}

/* Minimum-stay gap dates remain available nights, but cannot start a valid stay. */
.pxab-ui :where(.pxab-calendar-day, .pxab-quote-calendar-day).is-rule-warning-only:not(.is-selected) {
  background: #f5f3ff !important;
  background: color-mix(in srgb, var(--pxab-calendar-minimum-stay-color, #7c3aed) 8%, #fff) !important;
  color: #6d28d9 !important;
  color: color-mix(in srgb, var(--pxab-calendar-minimum-stay-color, #7c3aed) 72%, #334155) !important;
  box-shadow: inset 0 0 0 1px rgba(124, 58, 237, .4) !important;
  box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--pxab-calendar-minimum-stay-color, #7c3aed) 40%, transparent) !important;
}

/* Match the legend's purple hyphen on the real minimum-stay rule date. */
.pxab-ui :where(.pxab-calendar-day, .pxab-quote-calendar-day).is-rule-warning-only:not(.is-selected) .pxab-calendar-day__date::after {
  content: "";
  position: absolute;
  z-index: 1;
  left: -.08em;
  right: -.08em;
  top: 50%;
  height: 2px;
  border-radius: 999px;
  background: var(--pxab-calendar-minimum-stay-color, #7c3aed);
  opacity: .88;
  transform: translateY(-50%);
  pointer-events: none;
}

.pxab-ui :where(.pxab-calendar-day, .pxab-quote-calendar-day).is-rule-warning-only:not(.is-selected):hover,
.pxab-ui :where(.pxab-calendar-day, .pxab-quote-calendar-day).is-rule-warning-only:not(.is-selected):focus-visible {
  background: #ede9fe !important;
  background: color-mix(in srgb, var(--pxab-calendar-minimum-stay-color, #7c3aed) 14%, #fff) !important;
  box-shadow: inset 0 0 0 2px rgba(124, 58, 237, .62) !important;
  box-shadow: inset 0 0 0 2px color-mix(in srgb, var(--pxab-calendar-minimum-stay-color, #7c3aed) 62%, transparent) !important;
}

@media (max-width: 620px) {
  .pxab-public-calendar-key {
    gap: .4rem .7rem;
    font-size: .74rem;
  }
}

@media (prefers-contrast: more) {
  .pxab-public-calendar-key__swatch,
  .pxab-ui :where(.pxab-calendar-day, .pxab-quote-calendar-day).is-available:not(.is-selected):not([data-pxab-checkout-only="1"]),
  .pxab-ui :where(.pxab-calendar-day, .pxab-quote-calendar-day)[data-pxab-checkout-only="1"]:not(.is-selected) {
    border-width: 2px;
  }
}
