/* =========================================================================
   catalog.css: Spec B — rentals catalog, product pages, quote flow.
   New file, additive only. Reuses design tokens + component classes from
   main.css (container, section, btn, card, prose, qty-stepper, link-arrow,
   eyebrow, section-title, quote-band, faq-list, field). Do not duplicate
   those; only new component classes live here.
   ========================================================================= */

/* ---------- Breadcrumb ---------- */
.breadcrumb { margin-bottom: var(--space-3); }
.breadcrumb ol { display: flex; flex-wrap: wrap; align-items: center; gap: 0.35rem; list-style: none; padding: 0; margin: 0; }
.breadcrumb li { font-size: 0.82rem; color: var(--color-text-muted); display: flex; align-items: center; gap: 0.35rem; }
.breadcrumb li:not(:last-child)::after { content: "/"; color: var(--color-border); margin-left: 0.35rem; }
.breadcrumb a { color: var(--color-text-muted); border-bottom: 1px solid transparent; }
.breadcrumb a:hover { color: var(--color-accent); border-color: var(--color-accent); }
.breadcrumb li[aria-current="page"] { color: var(--color-text); }

/* ---------- Catalog grid (category pages + related products) ---------- */
.catalog-grid {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: var(--space-3);
}
@media (min-width: 640px) { .catalog-grid { grid-template-columns: repeat(3, 1fr); } }
@media (min-width: 960px) { .catalog-grid { grid-template-columns: repeat(4, 1fr); } }
.catalog-grid--related { margin-top: var(--space-3); }

.product-card {
  display: flex;
  flex-direction: column;
  background: var(--color-white);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-md);
  overflow: hidden;
  transition: border-color 0.2s var(--ease), transform 0.2s var(--ease);
}
.product-card:hover { border-color: var(--color-accent); transform: translateY(-2px); }
.product-card__media { display: block; aspect-ratio: 4 / 3; background: var(--color-surface-alt); overflow: hidden; }
.product-card__media img { width: 100%; height: 100%; object-fit: cover; }
.product-card__body { display: flex; flex-direction: column; gap: 0.5rem; padding: var(--space-2); flex: 1; }
.product-card__title { font-size: 0.95rem; line-height: 1.3; }
.product-card__title a:hover { color: var(--color-accent); }
.product-card__price { font-family: var(--font-head); font-size: 0.85rem; text-transform: uppercase; color: var(--color-text-muted); letter-spacing: 0.02em; }
.product-card__controls { display: flex; align-items: center; justify-content: space-between; gap: 0.5rem; flex-wrap: wrap; margin-top: auto; }
.product-card__link { font-size: 0.82rem; margin-top: 0.2rem; }

/* ---------- Product hero (product detail page) ---------- */
.product-hero__grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-4);
}
@media (min-width: 860px) {
  .product-hero__grid { grid-template-columns: 1fr 1fr; align-items: start; }
}
.product-hero__media {
  aspect-ratio: 4 / 3;
  background: var(--color-surface-alt);
  border-radius: var(--radius-md);
  overflow: hidden;
}
.product-hero__media img { width: 100%; height: 100%; object-fit: cover; }
.product-hero__price {
  font-family: var(--font-head);
  font-size: 1.3rem;
  color: var(--color-accent-dark);
  margin-block: 0.5rem 1rem;
}
.product-hint {
  margin-top: var(--space-2);
  padding: 0.85rem 1rem;
  background: var(--color-accent-tint);
  border-radius: var(--radius-md);
  font-size: 0.92rem;
}
.product-hint p { color: var(--color-text); }
.spec-list {
  margin: var(--space-2) 0 0;
  display: grid;
  grid-template-columns: auto 1fr;
  gap: 0.3rem 1rem;
  font-size: 0.92rem;
}
.spec-list dt { font-family: var(--font-head); text-transform: uppercase; font-size: 0.78rem; color: var(--color-text-muted); letter-spacing: 0.03em; }
.spec-list dd { margin: 0; }
.spec-note { font-size: 0.8rem; color: var(--color-text-muted); margin-top: 0.4rem; }
.product-hero__add { display: flex; align-items: center; gap: var(--space-2); margin-top: var(--space-3); flex-wrap: wrap; }

.pairs-strip { margin-top: var(--space-4); padding-top: var(--space-3); border-top: 1px solid var(--color-border); }
.pairs-strip h3 { font-size: 0.85rem; text-transform: uppercase; letter-spacing: 0.03em; color: var(--color-text-muted); margin-bottom: 0.6rem; }
.pairs-strip__list { display: flex; flex-wrap: wrap; gap: 0.4rem 1.2rem; list-style: none; padding: 0; margin: 0; }

.related-products .section-title { margin-bottom: var(--space-3); }

/* ---------- Cart drawer delivery minimum note (recs.js injects this into
   #cart-drawer-footer without touching quote.js; see recs.js comment) ---- */
.cart-delivery-note {
  font-size: 0.78rem;
  color: var(--color-text-muted);
  background: var(--color-surface-alt);
  border-radius: var(--radius-sm);
  padding: 0.6rem 0.75rem;
  margin-top: var(--space-2);
}

/* ---------- Quote page: 3 step flow ---------- */
.quote-shell { max-width: 880px; margin-inline: auto; }
.quote-steps {
  display: flex;
  gap: 0.5rem;
  list-style: none;
  padding: 0;
  margin: 0 0 var(--space-4);
  counter-reset: quote-step;
}
.quote-steps li {
  flex: 1;
  counter-increment: quote-step;
  text-align: center;
  font-family: var(--font-head);
  font-size: 0.82rem;
  text-transform: uppercase;
  letter-spacing: 0.03em;
  color: var(--color-text-muted);
  padding-bottom: 0.75rem;
  border-bottom: 3px solid var(--color-border);
  position: relative;
}
.quote-steps li::before {
  content: counter(quote-step);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 22px;
  height: 22px;
  border-radius: 50%;
  background: var(--color-border);
  color: var(--color-white);
  font-size: 0.75rem;
  margin-right: 0.4rem;
}
.quote-steps li.is-active { color: var(--color-ink); border-color: var(--color-accent); }
.quote-steps li.is-active::before { background: var(--color-accent); }
.quote-steps li.is-done { color: var(--color-text); }
.quote-steps li.is-done::before { background: var(--color-accent-dark); content: "\2713"; }

.quote-step { display: none; }
.quote-step.is-active { display: block; }

.quote-review-list { display: flex; flex-direction: column; gap: var(--space-2); margin-bottom: var(--space-3); }
.quote-review-group { border: 1px solid var(--color-border); border-radius: var(--radius-md); overflow: hidden; }
.quote-review-group__header {
  background: var(--color-surface-alt);
  padding: 0.6rem 1rem;
  font-family: var(--font-head);
  text-transform: uppercase;
  font-size: 0.82rem;
  letter-spacing: 0.03em;
  color: var(--color-text-muted);
}
.quote-review-line {
  display: flex;
  align-items: center;
  gap: var(--space-2);
  padding: 0.85rem 1rem;
  border-top: 1px solid var(--color-border);
}
.quote-review-line__thumb { width: 56px; height: 56px; border-radius: var(--radius-sm); overflow: hidden; background: var(--color-surface-alt); flex-shrink: 0; }
.quote-review-line__thumb img { width: 100%; height: 100%; object-fit: cover; }
.quote-review-line__info { flex: 1; min-width: 0; }
.quote-review-line__title { font-size: 0.95rem; }
.quote-review-line__price { font-size: 0.85rem; color: var(--color-text-muted); }
.quote-review-line__controls { display: flex; align-items: center; gap: 0.6rem; }

.quote-empty { text-align: center; padding: var(--space-5) var(--space-2); border: 1px dashed var(--color-border); border-radius: var(--radius-md); }
.quote-empty p { color: var(--color-text-muted); margin-bottom: var(--space-3); }
.quote-empty__links { display: flex; flex-wrap: wrap; gap: var(--space-2); justify-content: center; }

.quote-subtotal-bar {
  display: flex;
  justify-content: space-between;
  align-items: baseline;
  padding: var(--space-2) var(--space-3);
  background: var(--color-surface-alt);
  border-radius: var(--radius-md);
  margin-bottom: var(--space-3);
}
.quote-subtotal-bar strong { font-family: var(--font-head); font-size: 1.2rem; }
.quote-subtotal-bar__note { font-size: 0.78rem; color: var(--color-text-muted); display: block; margin-top: 0.2rem; }

.quote-panel {
  border: 1px solid var(--color-border);
  border-radius: var(--radius-md);
  padding: var(--space-3);
  margin-bottom: var(--space-3);
}
.quote-panel h3 { font-size: 0.95rem; margin-bottom: 0.7rem; }
.quote-panel--recs { background: var(--color-accent-tint); border-color: var(--color-accent-tint); }
.quote-rec-item { display: flex; align-items: flex-start; justify-content: space-between; gap: var(--space-2); padding: 0.5rem 0; border-top: 1px solid rgba(0,0,0,0.06); }
.quote-rec-item:first-of-type { border-top: none; }
.quote-rec-item__text { font-size: 0.9rem; flex: 1; }
.quote-rec-item__actions { display: flex; gap: 0.5rem; flex-shrink: 0; white-space: nowrap; }
.quote-rec-item__dismiss { background: none; border: none; color: var(--color-text-muted); font-size: 0.78rem; text-decoration: underline; cursor: pointer; padding: 0.3rem; }
.quote-rec-item__dismiss:hover { color: var(--color-text); }

.quote-checklist { list-style: none; padding: 0; margin: 0; display: flex; flex-direction: column; gap: 0.5rem; }
.quote-checklist li { display: flex; gap: 0.6rem; align-items: flex-start; font-size: 0.9rem; padding: 0.5rem 0.6rem; border-radius: var(--radius-sm); }
.quote-checklist li[data-level="warn"] { background: #fff6e5; }
.quote-checklist li[data-level="info"] { background: var(--color-surface-alt); }
.quote-checklist li::before { content: "\25CF"; font-size: 0.5rem; color: var(--color-accent-dark); margin-top: 0.45rem; flex-shrink: 0; }

.quote-form-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 0 var(--space-3); }
@media (max-width: 640px) { .quote-form-grid { grid-template-columns: 1fr; } }
.quote-form-grid .field--full { grid-column: 1 / -1; }

.segmented { display: flex; flex-wrap: wrap; gap: 0.5rem; margin-bottom: var(--space-3); }
.segmented label {
  border: 1.5px solid var(--color-border);
  border-radius: var(--radius-pill);
  padding: 0.5rem 1rem;
  font-size: 0.88rem;
  cursor: pointer;
  transition: border-color 0.15s var(--ease), background 0.15s var(--ease);
}
.segmented input { position: absolute; opacity: 0; pointer-events: none; }
.segmented input:checked + span,
.segmented label:has(input:checked) { color: var(--color-white); }
.segmented label:has(input:checked) { background: var(--color-ink); border-color: var(--color-ink); }
.segmented label:has(input:focus-visible) { outline: 3px solid var(--color-accent); outline-offset: 2px; }

.trade-note {
  display: none;
  background: var(--color-accent-tint);
  border-radius: var(--radius-md);
  padding: 0.75rem 1rem;
  font-size: 0.88rem;
  margin-bottom: var(--space-3);
}
.trade-note.is-visible { display: block; }

.quote-summary-card {
  border: 1px solid var(--color-border);
  border-radius: var(--radius-md);
  padding: var(--space-3);
  margin-bottom: var(--space-3);
}
.quote-summary-card h3 { font-size: 1rem; margin-bottom: 0.5rem; }
.quote-summary-card table { width: 100%; border-collapse: collapse; font-size: 0.88rem; margin-bottom: var(--space-2); }
.quote-summary-card th, .quote-summary-card td { text-align: left; padding: 0.4rem 0.3rem; border-bottom: 1px solid var(--color-border); }
.quote-summary-card th:last-child, .quote-summary-card td:last-child { text-align: right; }
.quote-summary-card dl { display: grid; grid-template-columns: auto 1fr; gap: 0.2rem 1rem; font-size: 0.9rem; }
.quote-summary-card dt { color: var(--color-text-muted); }
.quote-summary-card dd { margin: 0; }

.quote-step-actions { display: flex; justify-content: space-between; gap: var(--space-2); margin-top: var(--space-4); }
.quote-step-actions--end { justify-content: flex-end; }

.quote-success { text-align: center; padding: var(--space-6) var(--space-2); }
.quote-success__icon {
  width: 64px; height: 64px; border-radius: 50%;
  background: var(--color-accent); color: var(--color-white);
  display: flex; align-items: center; justify-content: center;
  margin: 0 auto var(--space-3);
  font-size: 1.8rem;
}
.quote-success__ref { font-family: var(--font-head); font-size: 1.4rem; letter-spacing: 0.05em; margin: var(--space-2) 0; }

/* Print: keep only the summary card (Step 3's printable quote), house rule
   keeps consent + a11y widgets in the DOM sitewide, hide them for print only.
   #quote-print-area lives inside Step 3's markup, which is only in the DOM
   when Step 3 is the active step (.quote-step base rule is display:none
   otherwise, print or not). The success screen also offers a print button,
   so quote-page.js's printSummary() adds body.is-printing-quote just before
   calling window.print() to force Step 3 visible regardless of which step
   is on screen, then removes the class right after. */
body.is-printing-quote #quote-step-3 { display: block !important; }
@media print {
  .site-header, .mobile-drawer, .cart-drawer, .consent-banner, .a11y-widget,
  .quote-steps, .quote-step-actions, .site-footer, .skip-link { display: none !important; }
  body * { visibility: hidden; }
  #quote-print-area, #quote-print-area * { visibility: visible; }
  #quote-print-area { position: absolute; left: 0; top: 0; width: 100%; }
}

@media (prefers-color-scheme: dark) {
  /* Site is a light-surface design system sitewide (main.css has no dark
     mode branch); catalog.css intentionally matches that rather than
     introducing a one-off dark mode for only these pages. */
}
