/* ──────────────────────────────────────────────
   Settlement type info bar
   ────────────────────────────────────────────── */
.aparts-settlement-info-bar {
  display: flex;
  align-items: flex-start;
  gap: 0.5rem;
  background: #e8f2fc;
  border: 1px solid #94B8EC;
  border-radius: 0.5rem;
  padding: 0.6rem 0.875rem;
  color: #1a3a6b;
  font-size: 0.8125rem;
  line-height: 1.45;
}

.aparts-settlement-info-bar--checkout {
  margin-bottom: 1.25rem;
  font-size: 0.875rem;
}

.aparts-settlement-info-icon {
  flex-shrink: 0;
  width: 1rem;
  height: 1rem;
  margin-top: 0.125rem;
  color: #2870d8;
}

.aparts-settlement-info-text {
  min-width: 0;
}

/* Kalendarz rezerwacji – modal (RWD od 320px) */
.aparts-calendar-modal {
  box-sizing: border-box;
}

.aparts-calendar-modal *,
.aparts-calendar-modal *::before,
.aparts-calendar-modal *::after {
  box-sizing: inherit;
}

.aparts-calendar-modal-box {
  min-width: 0;
  width: calc(100vw - 16px);
  max-width: min(100vw - 16px, 28rem);
}

@supports (width: min(100vw, 100dvw)) {
  .aparts-calendar-modal-box {
    width: min(100vw - 16px, 100dvw - 16px);
    max-width: min(100vw - 16px, 100dvw - 16px, 28rem);
  }
}

.aparts-calendar-modal-box-inner {
  padding-bottom: env(safe-area-inset-bottom, 0);
}


/* ──────────────────────────────────────────────
   Calendar grid
   ────────────────────────────────────────────── */
.aparts-calendar-modal .aparts-calendar-grid {
  display: grid;
  grid-template-columns: repeat(7, 1fr);
  gap: 2px;
  min-width: 0;
}

@media (min-width: 360px) {
  .aparts-calendar-modal .aparts-calendar-grid {
    gap: 4px;
  }
}

.aparts-calendar-cell-spacer {
  aspect-ratio: 1;
  min-height: 0;
  min-width: 0;
}

/* ──────────────────────────────────────────────
   Day cell base
   ────────────────────────────────────────────── */
.aparts-calendar-cell {
  aspect-ratio: 1;
  min-width: 0;
  min-height: 0;
  border-radius: 0.35rem;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  font-size: clamp(0.7rem, 2.8vw, 0.875rem);
  border: 1px solid transparent;
  cursor: pointer;
  padding: 1px;
  transition: background 0.15s, border-color 0.15s;
  user-select: none;
  -webkit-user-select: none;
}

@media (min-width: 360px) {
  .aparts-calendar-cell {
    border-radius: 0.5rem;
    padding: 2px;
  }
}

.aparts-calendar-cell .aparts-day-num {
  font-weight: 500;
  line-height: 1.2;
}

/* ──────────────────────────────────────────────
   Price label inside day cell
   ────────────────────────────────────────────── */
.aparts-calendar-cell .aparts-day-price {
  font-size: clamp(0.5rem, 2.2vw, 0.65rem);
  opacity: 0.9;
  line-height: 1.1;
  text-align: center;
  max-width: 100%;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

@media (min-width: 360px) {
  .aparts-calendar-cell .aparts-day-price {
    white-space: normal;
  }
}

.aparts-day-price {
  display: block;
}

/* ──────────────────────────────────────────────
   Day states
   ────────────────────────────────────────────── */

/* Past */
.aparts-day-past {
  background: #f3f4f6;
  color: #9ca3af;
  cursor: not-allowed;
}

/* Available */
.aparts-day-available {
  background: #dcfce7;
  border-color: #86efac;
  color: #1f2937;
}

.aparts-day-available:hover {
  background: #bbf7d0;
}

/* Unavailable */
.aparts-day-unavailable {
  background: #f9fafb;
  border-color: #e5e7eb;
  color: #9ca3af;
  cursor: not-allowed;
}

.aparts-day-unavailable .aparts-day-num {
  text-decoration: line-through;
  text-decoration-thickness: 1px;
}

.aparts-day-unavailable .aparts-day-price {
  display: none;
}

/* Checkout-only: prior reservation leaves this morning, afternoon is free for a new arrival.
   Diagonal split — top-left (morning) = booked, bottom-right (afternoon) = free. */
.aparts-day-checkout-only {
  background: linear-gradient(135deg, #f9fafb 0 50%, #dcfce7 50% 100%);
  border-color: #86efac;
  color: #1f2937;
  cursor: pointer;
}

.aparts-day-checkout-only:hover {
  background: linear-gradient(135deg, #f3f4f6 0 50%, #bbf7d0 50% 100%);
}

/* Check-in-only: next reservation starts this afternoon, morning is free for a departure.
   Diagonal split — top-left (morning) = free, bottom-right (afternoon) = booked. */
.aparts-day-checkin-only {
  background: linear-gradient(135deg, #dcfce7 0 50%, #f9fafb 50% 100%);
  border-color: #86efac;
  color: #1f2937;
  cursor: pointer;
}

.aparts-day-checkin-only:hover {
  background: linear-gradient(135deg, #bbf7d0 0 50%, #f3f4f6 50% 100%);
}

/* Range endpoints (check-in / check-out) */
.aparts-day-range-endpoint {
  background: #2870d8;
  border-color: #1e5bb8;
  color: #fff;
}

.aparts-day-range-endpoint:hover {
  background: #1e5bb8;
}

.aparts-day-range-endpoint .aparts-day-price {
  color: rgba(255, 255, 255, 0.85);
}

/* Days between endpoints */
.aparts-day-range-between {
  background: #dbeafe;
  border-color: #bfdbfe;
  color: #1e40af;
}

.aparts-day-range-between:hover {
  background: #bfdbfe;
}

/* Range highlight applied on top of split cells — keep the split visible via a translucent tint. */
.aparts-day-range-between.aparts-day-checkout-only,
.aparts-day-range-between.aparts-day-checkin-only,
.aparts-day-range-endpoint.aparts-day-checkout-only,
.aparts-day-range-endpoint.aparts-day-checkin-only {
  box-shadow: inset 0 0 0 9999px rgba(40, 112, 216, 0.35);
}

/* ──────────────────────────────────────────────
   Responsive cell sizing
   ────────────────────────────────────────────── */

/* Tablet+ with prices visible: taller cells to fit price label */
@media (min-width: 768px) {
  .aparts-calendar-cell {
    aspect-ratio: auto;
    min-height: 3rem;
    padding: 3px 2px;
  }
}

/* ──────────────────────────────────────────────
   Checkout inline validation (checkout-validate.js)
   ────────────────────────────────────────────── */
.aparts-field-error {
  display: block;
  margin-top: 4px;
  color: #dc2626;
  font-size: 13px;
  line-height: 1.4;
}
/* !important: woocommerce.css loads after this file, so its green "validated"
   border would otherwise win the specificity tie when our rule flags an error. */
.woocommerce form .form-row.aparts-invalid input.input-text,
.woocommerce form .form-row.aparts-invalid input,
.woocommerce form .form-row.aparts-invalid select,
.woocommerce form .form-row.aparts-invalid textarea {
  border-color: #dc2626 !important;
  box-shadow: none !important;
}
