/*
 * simplecrm — default stylesheet for GET /api/v1/page/resolve
 *
 * Canonical source. Consumers copy this into their own static/ and edit freely.
 * Re-fetching via GET /api/v1/page/default.css overwrites the copy — deliberate.
 *
 * Public class contract (rename = breaking change = new /api/v2/ endpoint):
 *   .crm-page          outer wrapper around the rendered body
 *   .crm-row           one structure row (holds 1–4 columns)
 *   .crm-row-N         row variant with N columns (1, 2, 3, or 4)
 *   .crm-col           a single column
 *   .crm-col-{N}-12    column spanning N of 12 grid units (e.g. crm-col-6-12 = 50%)
 *   .crm-element       any content block inside a column
 *   .crm-wysiwyg       rich-text block (admin Quill output, preserves its own markup)
 *   .crm-plaintext     preformatted text block
 *   .crm-unknown       fallback for unrecognised element types (best-effort render)
 */

.crm-page {
  font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
  color: #1f2937;
  line-height: 1.6;
  max-width: 72rem;
  margin: 0 auto;
  padding: 1.5rem 1rem;
}

/* ── Page banner (above body) ─────────────────────────────────
 * Fed by cms_page_banner (headline/subheadline/CTA) + cms_page_images
 * where image_type='banner' (or 'og' as fallback). Category-type menu
 * items fall back to their category's banner when the page has none.
 */
.crm-page-banner {
  position: relative;
  overflow: hidden;
  border-radius: 12px;
  margin-bottom: 1.5rem;
}

.crm-page-banner-image {
  width: 100%;
  max-height: 480px;
  object-fit: cover;
  display: block;
}

.crm-page-banner-overlay {
  position: absolute;
  inset: 0;
  display: flex;
  flex-direction: column;
  justify-content: center;
  padding: 1.5rem 2rem;
  background: linear-gradient(to bottom, rgba(0,0,0,0.1), rgba(0,0,0,0.55));
  color: #ffffff;
  gap: 0.5rem;
}

.crm-page-banner-center .crm-page-banner-overlay { align-items: center; text-align: center; }
.crm-page-banner-left   .crm-page-banner-overlay { align-items: flex-start; text-align: left; }
.crm-page-banner-right  .crm-page-banner-overlay { align-items: flex-end; text-align: right; }

.crm-page-banner-headline {
  font-size: clamp(1.75rem, 3vw, 2.5rem);
  font-weight: 700;
  margin: 0;
  line-height: 1.2;
}

.crm-page-banner-subheadline {
  font-size: 1.1rem;
  margin: 0;
  opacity: 0.95;
  max-width: 48rem;
}

.crm-page-banner-cta {
  display: inline-block;
  margin-top: 0.5rem;
  padding: 0.6rem 1.25rem;
  background: #f5c518;
  color: #000000;
  text-decoration: none;
  font-weight: 700;
  border-radius: 6px;
}

.crm-page-banner-cta:hover {
  background: #e3b617;
}

.crm-row {
  display: flex;
  flex-wrap: wrap;
  gap: 1.5rem;
  margin-bottom: 1.5rem;
}

.crm-col {
  flex: 1 1 0;
  min-width: 0;
}

/* 12-column grid widths — match Bootstrap-style "col-X-12" semantics. */
.crm-col-1-12  { flex: 0 0 calc(1/12*100% - 1.5rem); }
.crm-col-2-12  { flex: 0 0 calc(2/12*100% - 1.5rem); }
.crm-col-3-12  { flex: 0 0 calc(3/12*100% - 1.5rem); }
.crm-col-4-12  { flex: 0 0 calc(4/12*100% - 1.5rem); }
.crm-col-5-12  { flex: 0 0 calc(5/12*100% - 1.5rem); }
.crm-col-6-12  { flex: 0 0 calc(6/12*100% - 1.5rem); }
.crm-col-7-12  { flex: 0 0 calc(7/12*100% - 1.5rem); }
.crm-col-8-12  { flex: 0 0 calc(8/12*100% - 1.5rem); }
.crm-col-9-12  { flex: 0 0 calc(9/12*100% - 1.5rem); }
.crm-col-10-12 { flex: 0 0 calc(10/12*100% - 1.5rem); }
.crm-col-11-12 { flex: 0 0 calc(11/12*100% - 1.5rem); }
.crm-col-12-12 { flex: 0 0 100%; }
.crm-col-1-1   { flex: 0 0 100%; }

.crm-element {
  margin-bottom: 1rem;
}

.crm-wysiwyg img {
  max-width: 100%;
  height: auto;
}

.crm-wysiwyg h1, .crm-wysiwyg h2, .crm-wysiwyg h3,
.crm-wysiwyg h4, .crm-wysiwyg h5, .crm-wysiwyg h6 {
  margin-top: 1.5em;
  margin-bottom: 0.5em;
  line-height: 1.25;
}

.crm-wysiwyg p {
  margin: 0 0 1em;
}

.crm-wysiwyg a {
  color: #2563eb;
}

.crm-plaintext {
  white-space: pre-wrap;
  font-family: ui-monospace, SFMono-Regular, "SF Mono", Consolas, "Liberation Mono", monospace;
  font-size: 0.95em;
  background: #f9fafb;
  border: 1px solid #e5e7eb;
  border-radius: 4px;
  padding: 0.75rem 1rem;
}

/* ── Gallery (element type: gallery) ──────────────────────────
 * Reads --crm-gallery-columns and --crm-gallery-gap from inline style.
 * `.glightbox` co-class is emitted when config.lightbox=true so the
 * GLightbox JS library binds without extra work on the consumer.
 */
.crm-gallery {
  display: grid;
  grid-template-columns: repeat(var(--crm-gallery-columns, 4), 1fr);
  gap: var(--crm-gallery-gap, 8px);
}

.crm-gallery-item {
  display: block;
  overflow: hidden;
  border-radius: 4px;
}

.crm-gallery-image {
  width: 100%;
  aspect-ratio: 4 / 3;
  object-fit: cover;
  display: block;
}

@media (max-width: 640px) {
  .crm-gallery {
    grid-template-columns: repeat(2, 1fr);
  }
}

/* ── Webform (element type: webform) ──────────────────────────
 * Form posts to /api/save-form on the CMS. Consumers either proxy
 * that path or rewrite the action client-side.
 */
.crm-webform {
  display: flex;
  flex-direction: column;
  gap: 1rem;
}

.crm-webform-field {
  display: flex;
  flex-direction: column;
  gap: 0.35rem;
}

.crm-webform-label {
  font-weight: 600;
  font-size: 0.9rem;
  color: #374151;
}

.crm-webform-input {
  width: 100%;
  padding: 0.5rem 0.75rem;
  border: 1px solid #d1d5db;
  border-radius: 4px;
  font-size: 1rem;
  font-family: inherit;
  background: #ffffff;
  color: #111827;
}

.crm-webform-input:focus {
  outline: 2px solid #2563eb;
  outline-offset: -1px;
  border-color: #2563eb;
}

.crm-webform-textarea {
  min-height: 6rem;
  resize: vertical;
}

.crm-webform-checkbox-group,
.crm-webform-radio-group {
  display: flex;
  flex-direction: column;
  gap: 0.25rem;
}

.crm-webform-checkbox,
.crm-webform-radio {
  display: inline-flex;
  align-items: center;
  gap: 0.5rem;
  font-size: 0.95rem;
}

.crm-webform-divider {
  border: 0;
  border-top: 1px solid #e5e7eb;
  margin: 0.5rem 0;
}

.crm-webform-submit {
  align-self: flex-start;
  padding: 0.6rem 1.25rem;
  background: #2563eb;
  color: #ffffff;
  border: none;
  border-radius: 4px;
  font-size: 1rem;
  cursor: pointer;
}

.crm-webform-submit:hover,
.crm-webform-submit:focus {
  background: #1d4ed8;
}

/* ── Category (element type: category) ───────────────────────── */
.crm-category-listing {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));
  gap: 1.5rem;
}

.crm-category-list {
  display: block;
  list-style: none;
  padding: 0;
  margin: 0;
}

.crm-category-list .crm-category-item {
  padding: 0.5rem 0;
  border-bottom: 1px solid #e5e7eb;
}

.crm-category-item {
  background: #ffffff;
  border: 1px solid #e5e7eb;
  border-radius: 8px;
  overflow: hidden;
  display: flex;
  flex-direction: column;
}

.crm-category-list .crm-category-item {
  background: none;
  border-radius: 0;
  border: none;
  border-bottom: 1px solid #e5e7eb;
  flex-direction: row;
}

.crm-category-item-image {
  display: block;
  overflow: hidden;
  aspect-ratio: 4 / 3;
}

.crm-category-item-image img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}

.crm-category-item-title {
  font-size: 1rem;
  margin: 0.75rem 1rem;
}

.crm-category-item-title a {
  color: inherit;
  text-decoration: none;
}

.crm-category-item-title a:hover {
  text-decoration: underline;
}

/* ── Subcategory cards (used by Category menu item body) ────── */
.crm-subcategory-cards {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
  gap: 1.5rem;
}

.crm-subcategory-card {
  border: 1px solid #e5e7eb;
  border-radius: 8px;
  overflow: hidden;
  background: #ffffff;
}

.crm-subcategory-image {
  width: 100%;
  aspect-ratio: 4 / 3;
  object-fit: cover;
  display: block;
}

.crm-subcategory-title {
  font-size: 1rem;
  margin: 0.75rem 1rem 0.25rem;
}

.crm-subcategory-desc {
  color: #6b7280;
  margin: 0 1rem 1rem;
  font-size: 0.9rem;
}

/* ── WST classes live in the WST module stylesheet (api/wst/default.css).
 * Consumers that use WST load /api/v1/wst/default.css separately. */

/* ── MrTravel (element type: mrtravel) ──────────────────────── */
.crm-mrtravel-categories {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
  gap: 1rem;
  margin-bottom: 1.5rem;
}

.crm-mrtravel-category {
  position: relative;
  display: block;
  overflow: hidden;
  border-radius: 8px;
  aspect-ratio: 4 / 3;
  text-decoration: none;
}

.crm-mrtravel-category img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}

.crm-mrtravel-category-overlay {
  position: absolute;
  inset: 0;
  display: flex;
  align-items: flex-end;
  padding: 0.75rem;
  background: linear-gradient(to top, rgba(0,0,0,0.6), rgba(0,0,0,0));
}

.crm-mrtravel-category-overlay h3 {
  color: #ffffff;
  margin: 0;
  font-size: 1rem;
}

.crm-mrtravel-grid {
  display: grid;
  grid-template-columns: repeat(var(--crm-mrtravel-columns, 4), 1fr);
  gap: 1.25rem;
}

.crm-mrtravel-tile {
  position: relative;
  display: flex;
  flex-direction: column;
  background: #ffffff;
  border: 1px solid #e5e7eb;
  border-radius: 10px;
  overflow: hidden;
  text-decoration: none;
  color: inherit;
}

.crm-mrtravel-tile-bubble {
  position: absolute;
  top: 0.5rem;
  right: 0.5rem;
  background: #dc2626;
  color: #ffffff;
  padding: 0.2rem 0.5rem;
  border-radius: 3px;
  font-size: 0.75rem;
  font-weight: 600;
  z-index: 1;
}

.crm-mrtravel-tile-image {
  position: relative;
  aspect-ratio: 3 / 2;
  overflow: hidden;
}

.crm-mrtravel-tile-image img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}

.crm-mrtravel-tile-badges {
  position: absolute;
  bottom: 0.5rem;
  left: 0.5rem;
  right: 0.5rem;
  display: flex;
  gap: 0.25rem;
}

.crm-mrtravel-tile-badge {
  background: rgba(14, 48, 86, 0.85);
  color: #ffffff;
  padding: 0.2rem 0.5rem;
  border-radius: 3px;
  font-size: 0.75rem;
}

.crm-mrtravel-tile-policy {
  background: rgba(5, 150, 105, 0.9);
}

.crm-mrtravel-tile-body {
  padding: 0.75rem 1rem 1rem;
  display: flex;
  flex-direction: column;
  gap: 0.4rem;
  flex: 1;
}

.crm-mrtravel-tile-title {
  font-size: 1rem;
  margin: 0;
  color: #0e3056;
  line-height: 1.3;
}

.crm-mrtravel-tile-rating {
  display: inline-flex;
  align-items: center;
  gap: 0.35rem;
  font-size: 0.85rem;
}

.crm-mrtravel-tile-stars {
  color: #f59e0b;
}

.crm-mrtravel-tile-score {
  font-weight: 700;
  color: #0e3056;
}

.crm-mrtravel-tile-reviews,
.crm-mrtravel-tile-bookings {
  color: #6b7280;
}

.crm-mrtravel-tile-highlights {
  list-style: disc inside;
  margin: 0;
  padding: 0;
  font-size: 0.85rem;
  color: #446e87;
  line-height: 1.5;
}

.crm-mrtravel-tile-price {
  margin-top: auto;
  display: flex;
  align-items: baseline;
  gap: 0.4rem;
  padding-top: 0.5rem;
}

.crm-mrtravel-tile-price-label {
  font-size: 0.75rem;
  color: #6b7280;
  font-weight: 600;
}

.crm-mrtravel-tile-price-rrp {
  text-decoration: line-through;
  color: #9ca3af;
  font-size: 0.85rem;
}

.crm-mrtravel-tile-price-value {
  font-size: 1.1rem;
  font-weight: 700;
  color: #0e3056;
}

@media (max-width: 768px) {
  .crm-mrtravel-grid {
    grid-template-columns: repeat(2, 1fr);
  }
}

@media (max-width: 768px) {
  .crm-row {
    flex-direction: column;
  }
  .crm-col,
  .crm-col-1-12, .crm-col-2-12, .crm-col-3-12, .crm-col-4-12,
  .crm-col-5-12, .crm-col-6-12, .crm-col-7-12, .crm-col-8-12,
  .crm-col-9-12, .crm-col-10-12, .crm-col-11-12, .crm-col-12-12 {
    flex: 0 0 100%;
  }
}
