/* ==========================================================================
   RODALICO homepage — visual canon v0.2
   Contract: docs/P2_HOMEPAGE_VISUAL_CANON_v0.2.md
   --------------------------------------------------------------------------
   Scope: loaded ONLY by index.html, after styles.css. Every rule is prefixed
   with .rod-home (the homepage <body> class) so it wins on specificity
   without !important and cannot leak into the other 20+ pages, which stay on
   the existing global palette until a separate migration milestone.
   ========================================================================== */

/* --------------------------------------------------------------------------
   1. TYPEFACES — the @font-face rules now live in styles.css so every page
   shares the same self-hosted Inter / Inter Tight binaries (contract §5).
   They are deliberately NOT redeclared here: home.css loads after
   styles.css, so the families are already available by this point.
   -------------------------------------------------------------------------- */

/* --------------------------------------------------------------------------
   2. TOKENS — from 00_RODALICO_BRAND_SYSTEM.png §01/§02.
   -------------------------------------------------------------------------- */

.rod-home {
  --rod-bg: #0B1E2D;
  --rod-surface: #1A2733;
  --rod-surface-raised: #2E3A46;
  --rod-gold: #FFC844;
  --rod-gold-hover: #FFD978;
  --rod-on-gold: #11212E;
  --rod-text: #FFFFFF;
  --rod-text-muted: rgba(255, 255, 255, 0.72);
  --rod-text-faint: rgba(255, 255, 255, 0.54);
  --rod-border: rgba(255, 255, 255, 0.10);
  --rod-border-strong: rgba(255, 255, 255, 0.18);

  --rod-font: 'Inter Var', system-ui, -apple-system, 'Segoe UI', sans-serif;
  --rod-font-display: 'Inter Tight Var', 'Inter Var', system-ui, 'Segoe UI', sans-serif;

  --rod-r-sm: 8px;
  --rod-r-md: 12px;
  --rod-r-lg: 18px;
  --rod-r-pill: 999px;

  --rod-shadow-1: 0 1px 2px rgba(0, 0, 0, 0.40);
  --rod-shadow-2: 0 10px 30px rgba(0, 0, 0, 0.45);
  --rod-shadow-gold: 0 8px 28px rgba(255, 200, 68, 0.18);

  --rod-motion-fast: 120ms;
  --rod-motion-base: 160ms;
  --rod-motion-slow: 220ms;
  --rod-ease: cubic-bezier(0.22, 0.61, 0.36, 1);

  --rod-max: 1328px;
  --rod-gutter: 24px;

  background: var(--rod-bg);
  color: var(--rod-text);
  font-family: var(--rod-font);
  -webkit-font-smoothing: antialiased;
}

.rod-home .rod-shell {
  max-width: var(--rod-max);
  margin: 0 auto;
  padding: 0 var(--rod-gutter);
}

.rod-home h1,
.rod-home h2,
.rod-home h3,
.rod-home h4 {
  font-family: var(--rod-font-display);
  letter-spacing: -0.015em;
  margin: 0;
}

.rod-home .rod-sr {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0 0 0 0);
  white-space: nowrap;
  border: 0;
}

/* --------------------------------------------------------------------------
   3. BUTTONS
   -------------------------------------------------------------------------- */

.rod-home .rod-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 10px;
  min-height: 48px;
  padding: 0 22px;
  border: 1px solid transparent;
  border-radius: var(--rod-r-sm);
  font: inherit;
  font-weight: 600;
  font-size: 15px;
  text-decoration: none;
  cursor: pointer;
  transition: background var(--rod-motion-base) var(--rod-ease),
    border-color var(--rod-motion-base) var(--rod-ease),
    transform var(--rod-motion-fast) var(--rod-ease),
    box-shadow var(--rod-motion-base) var(--rod-ease);
}

.rod-home .rod-btn-gold {
  background: var(--rod-gold);
  color: var(--rod-on-gold);
}

.rod-home .rod-btn-gold:hover {
  background: var(--rod-gold-hover);
  box-shadow: var(--rod-shadow-gold);
}

.rod-home .rod-btn-gold:active {
  transform: translateY(1px);
}

.rod-home .rod-btn-ghost {
  background: transparent;
  color: var(--rod-text);
  border-color: var(--rod-border-strong);
}

.rod-home .rod-btn-ghost:hover {
  border-color: var(--rod-gold);
  color: var(--rod-gold);
}

/* --------------------------------------------------------------------------
   4. HEADER
   -------------------------------------------------------------------------- */

/* The homepage header sits ON the hero artwork rather than in a bar above it —
   that single change is most of what separates the current build from
   reference 02. It is absolute, not sticky: a transparent sticky bar would
   become unreadable the moment it passed the hero, and the reference header is
   not sticky either. The inner pages keep the solid sticky header from
   styles.css; this rule is .rod-home-scoped and reaches only the homepage. */
.rod-home .site-header {
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  z-index: 40;
  background: transparent;
  border-bottom: 0;
}

/* Once the menu is open it needs its own ground: there is no bar behind it. */
.rod-home .site-header:has(.mobile-menu:not([hidden])) {
  background: rgba(11, 30, 45, 0.97);
  backdrop-filter: blur(10px);
}

.rod-home .header-row {
  display: flex;
  align-items: center;
  gap: 20px;
  height: 76px;
  max-width: var(--rod-max);
  margin: 0 auto;
  padding: 0 var(--rod-gutter);
}

/* The brand lockup is deliberately NOT restated here. styles.css already
   stacks the descriptor under the wordmark for every page, and the homepage is
   not an exception to that — it carries the same localized descriptor as the
   rest of the shared shell. The rule this replaced set align-items: center,
   which outranked the shared flex-start and would have centred the descriptor
   under the logo instead of aligning it to the same left edge; everything else
   it declared (display: flex, flex-shrink: 0) the shared rule already says. */

.rod-home .brand-logo {
  height: 40px;
  width: auto;
  display: block;
}

.rod-home .nav-links {
  display: flex;
  align-items: center;
  gap: 26px;
  flex: 1;
  justify-content: center;
}

.rod-home .nav-links a {
  position: relative;
  color: var(--rod-text-muted);
  font-size: 14px;
  font-weight: 600;
  text-decoration: none;
  white-space: nowrap;
  padding: 6px 0;
  transition: color var(--rod-motion-base) var(--rod-ease);
}

.rod-home .nav-links a::after {
  content: '';
  position: absolute;
  left: 0;
  right: 0;
  bottom: 0;
  height: 2px;
  background: var(--rod-gold);
  transform: scaleX(0);
  transform-origin: left;
  transition: transform var(--rod-motion-base) var(--rod-ease);
}

.rod-home .nav-links a:hover,
.rod-home .nav-links a.active {
  color: var(--rod-text);
}

.rod-home .nav-links a:hover::after,
.rod-home .nav-links a.active::after {
  transform: scaleX(1);
}

.rod-home .nav-links a.active {
  color: var(--rod-gold);
}

/* Garage keeps the pill accent the frozen north star gives it. */
.rod-home .nav-links a.rod-nav-pill {
  border: 1px solid var(--rod-border-strong);
  border-radius: var(--rod-r-pill);
  padding: 7px 16px;
}

.rod-home .nav-links a.rod-nav-pill::after {
  display: none;
}

.rod-home .nav-links a.rod-nav-pill:hover {
  border-color: var(--rod-gold);
  color: var(--rod-gold);
}

.rod-home .header-tools {
  display: flex;
  align-items: center;
  gap: 14px;
  flex-shrink: 0;
}

.rod-home .language-selector {
  display: inline-flex;
  border: 1px solid var(--rod-border);
  border-radius: var(--rod-r-sm);
  overflow: hidden;
}

.rod-home .language-selector button {
  background: transparent;
  border: 0;
  color: var(--rod-text-faint);
  font: inherit;
  font-size: 12px;
  font-weight: 700;
  letter-spacing: 0.03em;
  padding: 7px 11px;
  cursor: pointer;
  transition: color var(--rod-motion-fast) var(--rod-ease),
    background var(--rod-motion-fast) var(--rod-ease);
}

.rod-home .language-selector button:hover {
  color: var(--rod-text);
}

.rod-home .language-selector button[aria-pressed='true'] {
  background: var(--rod-gold);
  color: var(--rod-on-gold);
}

.rod-home .nav-actions .btn,
.rod-home .nav-actions .rod-btn {
  min-height: 42px;
  font-size: 14px;
}

.rod-home .menu-toggle {
  display: none;
  flex-direction: column;
  justify-content: center;
  align-items: center;
  gap: 4px;
  width: 46px;
  height: 46px;
  background: transparent;
  border: 1px solid var(--rod-border-strong);
  border-radius: var(--rod-r-sm);
  cursor: pointer;
}

.rod-home .menu-toggle-bar {
  display: block;
  width: 18px;
  height: 2px;
  background: var(--rod-text);
  border-radius: 2px;
}

.rod-home .mobile-menu {
  border-top: 1px solid var(--rod-border);
  background: var(--rod-bg);
  padding: 16px var(--rod-gutter) 22px;
}

.rod-home .mobile-menu nav {
  display: flex;
  flex-direction: column;
  gap: 4px;
}

.rod-home .mobile-menu nav a {
  color: var(--rod-text-muted);
  text-decoration: none;
  font-weight: 600;
  font-size: 15px;
  padding: 13px 4px;
  border-bottom: 1px solid var(--rod-border);
}

.rod-home .mobile-menu nav a.active {
  color: var(--rod-gold);
}

.rod-home .mobile-menu-actions {
  margin-top: 16px;
  display: flex;
  flex-direction: column;
  gap: 10px;
}

/* --------------------------------------------------------------------------
   5. HERO — left-aligned copy, artwork right (reference 02).
   -------------------------------------------------------------------------- */

.rod-home .rod-hero {
  position: relative;
  isolation: isolate;
  overflow: hidden;
  min-height: clamp(620px, 84vh, 820px);
  display: flex;
  align-items: center;
  background: linear-gradient(180deg, #0B1E2D 0%, #0D2233 100%);
  border-bottom: 1px solid var(--rod-border);
}

/* The artwork occupies the right half and bleeds off both the top and right
   edges. Two scrims do the work that makes left-hand copy readable over a
   photograph: a horizontal one that carries the navy across the middle, and a
   vertical one that lets the header and the section boundary dissolve into it
   instead of cutting the image with a hard line. */
/* The layer starts well left of where the image becomes visible. At 42% its
   own left edge showed as a vertical seam against the flat navy — the gradient
   inside it had no room to reach solid colour before the element simply
   stopped. Starting at 16% gives the scrim that room, so the picture fades in
   rather than beginning at a line. */
.rod-home .rod-hero-media {
  position: absolute;
  inset: 0 0 0 16%;
  z-index: -1;
}

.rod-home .rod-hero-media img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: 62% 50%;
}

.rod-home .rod-hero-media::after {
  content: '';
  position: absolute;
  inset: 0;
  background:
    /* The stops are placed against the copy column, not by eye. This layer
       starts at 16% of the hero, so its own 52% used to land near 60% of the
       viewport — which at 1279px is exactly where the 720px copy column ends,
       putting the last two trust points over a half-transparent scrim with the
       car's headlight showing through the words. Solid navy now holds to 22%
       and stays above 0.72 until 58%, so the copy always sits on a dense
       ground at every width while the vehicle still reads on the right. */
    linear-gradient(90deg, #0B1E2D 0%, #0B1E2D 22%, rgba(11, 30, 45, 0.94) 40%, rgba(11, 30, 45, 0.72) 58%, rgba(11, 30, 45, 0.28) 76%, rgba(11, 30, 45, 0) 92%),
    linear-gradient(180deg, rgba(11, 30, 45, 0.55) 0%, rgba(11, 30, 45, 0) 26%, rgba(11, 30, 45, 0) 68%, rgba(11, 30, 45, 0.72) 100%);
}

/* A single left column now — the artwork is no longer a grid cell, so the copy
   is free to run at its own measure instead of being squeezed into 1.12fr.
   The top padding clears the absolute header at every header height. */
.rod-home .rod-hero-grid {
  position: relative;
  width: 100%;
  max-width: var(--rod-max);
  margin: 0 auto;
  padding: clamp(108px, 12vh, 148px) var(--rod-gutter) clamp(48px, 7vh, 84px);
}

/* Wide enough to hold "Надійні запчастини" on one line at the display size —
   at 660px it broke into four lines where the reference has three. */
.rod-home .rod-hero-copy {
  max-width: 720px;
}

.rod-home .rod-kicker {
  color: var(--rod-text-faint);
  font-size: 12px;
  font-weight: 700;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  margin: 0 0 18px;
}

.rod-home .rod-hero h1 {
  font-size: clamp(38px, 5.4vw, 78px);
  line-height: 1.03;
  font-weight: 700;
  letter-spacing: -0.025em;
  margin: 0 0 22px;
  text-wrap: balance;
}

.rod-home .rod-hero h1 .rod-gold-line {
  display: block;
  color: var(--rod-gold);
}

.rod-home .rod-hero-lead {
  color: var(--rod-text-muted);
  font-size: 17px;
  line-height: 1.55;
  max-width: 34em;
  margin: 0 0 30px;
}

/* Four across, as in reference 02, separated by hairlines rather than boxes. */
.rod-home .rod-trust-points {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: 0;
  margin: 0 0 34px;
  padding: 0;
  list-style: none;
}

.rod-home .rod-trust-points > li + li {
  padding-left: 18px;
  border-left: 1px solid var(--rod-border);
}

.rod-home .rod-trust-points > li:not(:last-child) {
  padding-right: 18px;
}

.rod-home .rod-trust-point {
  display: flex;
  align-items: flex-start;
  gap: 11px;
  font-size: 14px;
  line-height: 1.4;
  color: var(--rod-text-muted);
}

.rod-home .rod-trust-point svg {
  flex-shrink: 0;
  width: 22px;
  height: 22px;
  color: var(--rod-gold);
}

/* The old .rod-hero-art card is gone: the artwork is now the full-bleed
   .rod-hero-media layer above. The <picture> is still a real element, not a
   CSS background, so it keeps its width/height and fetchpriority hints and
   LCP/CLS stay predictable. */

/* The beta banner sits between the trust points and the search chips. Globally
   .beta-note carries margin: var(--sp-4) 0 0 — 16px above, nothing below — so on
   the homepage it drifted down onto the chip row with no air under it. Moving
   that 16px from above to below lifts the banner, opens a clear gap before the
   chips, and leaves the hero's total height unchanged. Homepage-only: every
   other page keeps the global spacing. */
.rod-home .beta-note {
  margin-top: 0;
  margin-bottom: 16px;
}

/* --------------------------------------------------------------------------
   6. SEARCH — one dominant field + signpost chips.
   -------------------------------------------------------------------------- */

/* Search is the dominant interaction surface of the canon, so it is sized like
   one: a wide white field that reads as the brightest object on the screen. */
.rod-home .rod-search {
  max-width: 660px;
}

/* The field's own size lives with the original .rod-search-row rules further
   down — stating it here as well simply lost to them, since they come later
   and carry the same specificity. Only the button needs to be here, and only
   because its selector outranks .rod-btn regardless of order. */
.rod-home .rod-search-row .rod-btn-gold {
  min-height: 58px;
  padding: 0 30px;
  font-size: 16px;
}

.rod-home .rod-chips {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  margin: 0 0 14px;
}

.rod-home .rod-chip {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  min-height: 44px;
  padding: 0 18px;
  border-radius: var(--rod-r-sm);
  border: 1px solid var(--rod-border);
  background: var(--rod-surface);
  color: var(--rod-text-muted);
  font-size: 14px;
  font-weight: 600;
  text-decoration: none;
  transition: color var(--rod-motion-base) var(--rod-ease),
    border-color var(--rod-motion-base) var(--rod-ease);
}

.rod-home .rod-chip svg {
  width: 18px;
  height: 18px;
}

.rod-home a.rod-chip:hover {
  color: var(--rod-text);
  border-color: var(--rod-border-strong);
}

.rod-home .rod-chip-active {
  background: var(--rod-gold);
  border-color: var(--rod-gold);
  color: var(--rod-on-gold);
}

/* Coming-soon controls are inert by construction: rendered as <span>, never
   focusable, never clickable, and always carrying a visible badge. */
.rod-home .rod-chip-soon {
  color: var(--rod-text-faint);
  cursor: default;
  background: transparent;
}

.rod-home .rod-chip-badge {
  font-size: 10px;
  font-weight: 700;
  letter-spacing: 0.05em;
  text-transform: uppercase;
  color: var(--rod-text-faint);
  border: 1px solid var(--rod-border);
  border-radius: var(--rod-r-pill);
  padding: 3px 8px;
}

.rod-home .rod-search-row {
  display: flex;
  gap: 10px;
  background: #FFFFFF;
  border-radius: var(--rod-r-md);
  padding: 10px;
  box-shadow: 0 18px 44px rgba(0, 0, 0, 0.42);
}

.rod-home .rod-search-field {
  display: flex;
  align-items: center;
  gap: 10px;
  flex: 1;
  min-width: 0;
  padding-left: 12px;
  color: #6B7785;
}

.rod-home .rod-search-field svg {
  flex-shrink: 0;
  width: 20px;
  height: 20px;
}

.rod-home .rod-search-row input {
  flex: 1;
  min-width: 0;
  border: 0;
  outline: none;
  background: transparent;
  font: inherit;
  font-size: 17px;
  color: #0B1E2D;
  min-height: 58px;
}

.rod-home .rod-search-row input::placeholder {
  color: #8A94A1;
}

.rod-home .rod-examples {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 8px;
  margin: 16px 0 0;
  font-size: 13px;
  color: var(--rod-text-faint);
}

.rod-home .rod-example {
  border: 1px solid var(--rod-border);
  border-radius: var(--rod-r-pill);
  background: transparent;
  color: var(--rod-text-muted);
  font: inherit;
  font-size: 13px;
  padding: 7px 14px;
  cursor: pointer;
  transition: border-color var(--rod-motion-base) var(--rod-ease),
    color var(--rod-motion-base) var(--rod-ease);
}

.rod-home .rod-example:hover {
  border-color: var(--rod-gold);
  color: var(--rod-gold);
}

/* --------------------------------------------------------------------------
   7. SECTION SCAFFOLDING
   -------------------------------------------------------------------------- */

.rod-home .rod-section {
  padding: 72px 0;
}

.rod-home .rod-section-alt {
  background: linear-gradient(180deg, rgba(26, 39, 51, 0.55), rgba(26, 39, 51, 0));
  border-top: 1px solid var(--rod-border);
  border-bottom: 1px solid var(--rod-border);
}

.rod-home .rod-section-head {
  display: flex;
  align-items: flex-end;
  justify-content: space-between;
  gap: 24px;
  margin-bottom: 32px;
}

.rod-home .rod-section-head h2 {
  font-size: clamp(24px, 2.6vw, 40px);
  line-height: 1.2;
  font-weight: 600;
}

.rod-home .rod-section-head p {
  margin: 10px 0 0;
  color: var(--rod-text-muted);
  font-size: 15px;
  max-width: 62ch;
}

.rod-home .rod-section-link {
  color: var(--rod-gold);
  font-size: 14px;
  font-weight: 600;
  text-decoration: none;
  white-space: nowrap;
  transition: color var(--rod-motion-base) var(--rod-ease);
}

.rod-home .rod-section-link:hover {
  color: var(--rod-gold-hover);
}

/* --------------------------------------------------------------------------
   8. CATEGORIES — live vocabulary only, name + icon, no invented copy.
   -------------------------------------------------------------------------- */

.rod-home .category-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(196px, 1fr));
  gap: 16px;
}

.rod-home .category-tile {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  justify-content: space-between;
  gap: 18px;
  min-height: 132px;
  padding: 20px;
  background: var(--rod-surface);
  border: 1px solid var(--rod-border);
  border-radius: var(--rod-r-md);
  color: var(--rod-text);
  text-decoration: none;
  transition: border-color var(--rod-motion-base) var(--rod-ease),
    transform var(--rod-motion-base) var(--rod-ease),
    box-shadow var(--rod-motion-base) var(--rod-ease);
}

.rod-home .category-tile:hover {
  border-color: var(--rod-gold);
  transform: translateY(-2px);
  box-shadow: var(--rod-shadow-2);
}

/* The homepage lifted its tiles on hover but had no press state at all, so a
   click was indistinguishable from hovering. The shared rule in styles.css
   cannot supply it here: .rod-home .category-tile:hover outranks a bare
   .category-tile:active, so the lift simply stayed. Stated here, at matching
   specificity, the card settles back onto the page when pressed. */
.rod-home .category-tile:active {
  transform: translateY(0);
  box-shadow: none;
  transition-duration: var(--rod-motion-fast);
}

.rod-home .category-tile-icon {
  display: inline-flex;
  color: var(--rod-gold);
}

.rod-home .category-tile-icon svg {
  width: 28px;
  height: 28px;
}

.rod-home .category-tile-label {
  font-size: 15px;
  font-weight: 600;
  line-height: 1.3;
}

.rod-home .category-tile-all {
  background: linear-gradient(135deg, rgba(255, 200, 68, 0.12), rgba(255, 200, 68, 0));
  border-color: var(--rod-border-strong);
}

/* --------------------------------------------------------------------------
   9. MARKETPLACE — restyles the EXISTING renderOfferCard markup. Its
   semantics (fields, trust badge derivation, links) are untouched.
   -------------------------------------------------------------------------- */

.rod-home .listings-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(268px, 1fr));
  gap: 16px;
}

.rod-home .offer-card-wrap {
  position: relative;
}

.rod-home .offer-card {
  display: flex;
  flex-direction: column;
  gap: 10px;
  height: 100%;
  padding: 20px;
  background: var(--rod-surface);
  border: 1px solid var(--rod-border);
  border-radius: var(--rod-r-md);
  color: var(--rod-text);
  text-decoration: none;
  transition: border-color var(--rod-motion-base) var(--rod-ease),
    transform var(--rod-motion-base) var(--rod-ease);
}

.rod-home .offer-card:hover {
  border-color: var(--rod-gold);
  transform: translateY(-2px);
}

.rod-home .offer-card:active {
  transform: translateY(0);
  transition-duration: var(--rod-motion-fast);
}

.rod-home .offer-card h3 {
  font-size: 17px;
  font-weight: 600;
  line-height: 1.3;
}

.rod-home .offer-card .category-tag {
  align-self: flex-start;
  font-size: 11px;
  font-weight: 700;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  color: var(--rod-text-faint);
  border: 1px solid var(--rod-border);
  border-radius: var(--rod-r-pill);
  padding: 4px 10px;
}

.rod-home .offer-card .offer-card-number {
  font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
  font-size: 13px;
  color: var(--rod-gold);
}

.rod-home .offer-card .offer-card-number.is-missing {
  color: var(--rod-text-faint);
  font-family: var(--rod-font);
}

.rod-home .offer-card .meta-line {
  font-size: 13px;
  color: var(--rod-text-muted);
}

.rod-home .offer-card .price-row {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 12px;
  margin-top: auto;
  padding-top: 8px;
}

.rod-home .offer-card .price {
  font-family: var(--rod-font-display);
  font-size: 22px;
  font-weight: 700;
  color: var(--rod-gold);
}

.rod-home .offer-card .availability,
.rod-home .offer-card .posted {
  font-size: 12px;
  color: var(--rod-text-faint);
}

/* Trust badge colours follow the frozen rule: green only for a real
   VERIFIED state, neutral for everything else. Never decorative. */
.rod-home .trust-badge {
  align-self: flex-start;
  font-size: 12px;
  font-weight: 600;
  border-radius: var(--rod-r-pill);
  padding: 5px 12px;
}

.rod-home .trust-unverified {
  color: var(--rod-text-muted);
  background: rgba(255, 255, 255, 0.06);
  border: 1px solid var(--rod-border);
}

.rod-home .trust-verified {
  color: #79C99B;
  background: rgba(121, 201, 155, 0.10);
  border: 1px solid rgba(121, 201, 155, 0.35);
}

.rod-home .compare-select {
  display: inline-flex;
  align-items: center;
  gap: 7px;
  margin-bottom: 8px;
  font-size: 12px;
  color: var(--rod-text-faint);
}

.rod-home .empty-state,
.rod-home .loading-state,
.rod-home .error-state {
  color: var(--rod-text-muted);
  font-size: 15px;
  background: var(--rod-surface);
  border: 1px solid var(--rod-border);
  border-radius: var(--rod-r-md);
  padding: 28px;
  display: flex;
  align-items: center;
  gap: 14px;
  flex-wrap: wrap;
}

.rod-home .empty-state a {
  color: var(--rod-gold);
}

/* --------------------------------------------------------------------------
   10. VEHICLE ENTRY + GARAGE
   -------------------------------------------------------------------------- */

.rod-home .rod-split {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(320px, 1fr));
  gap: 20px;
}

.rod-home .rod-panel {
  display: flex;
  flex-direction: column;
  gap: 14px;
  padding: 32px;
  background: var(--rod-surface);
  border: 1px solid var(--rod-border);
  border-radius: var(--rod-r-lg);
}

.rod-home .rod-panel h3 {
  font-size: 22px;
  font-weight: 600;
}

.rod-home .rod-panel p {
  margin: 0;
  color: var(--rod-text-muted);
  font-size: 15px;
  line-height: 1.55;
}

.rod-home .rod-panel .rod-btn {
  align-self: flex-start;
  margin-top: 6px;
}

.rod-home .rod-panel-soon {
  border-style: dashed;
  background: transparent;
}

.rod-home .rod-tag-soon {
  align-self: flex-start;
  font-size: 11px;
  font-weight: 700;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--rod-text-faint);
  border: 1px solid var(--rod-border);
  border-radius: var(--rod-r-pill);
  padding: 4px 11px;
}

/* --------------------------------------------------------------------------
   11. TRUST — qualitative only, zero numbers.
   -------------------------------------------------------------------------- */

.rod-home .rod-trust-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(248px, 1fr));
  gap: 20px;
}

.rod-home .rod-trust-card {
  padding: 26px;
  background: var(--rod-surface);
  border: 1px solid var(--rod-border);
  border-radius: var(--rod-r-md);
}

.rod-home .rod-trust-card svg {
  width: 26px;
  height: 26px;
  color: var(--rod-gold);
  margin-bottom: 14px;
}

.rod-home .rod-trust-card h3 {
  font-size: 17px;
  font-weight: 600;
  margin-bottom: 8px;
}

.rod-home .rod-trust-card p {
  margin: 0;
  color: var(--rod-text-muted);
  font-size: 14px;
  line-height: 1.55;
}

/* --------------------------------------------------------------------------
   12. B2B + SUPPLIER BAND
   -------------------------------------------------------------------------- */

.rod-home .rod-b2b {
  background:
    radial-gradient(900px 420px at 88% 18%, rgba(255, 200, 68, 0.08), transparent 62%),
    var(--rod-surface);
  border-top: 1px solid var(--rod-border);
  border-bottom: 1px solid var(--rod-border);
  padding: 72px 0;
}

.rod-home .rod-b2b-grid {
  display: grid;
  grid-template-columns: minmax(0, 0.9fr) minmax(0, 1.1fr);
  gap: 48px;
  align-items: start;
}

.rod-home .rod-b2b-points {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(210px, 1fr));
  gap: 22px;
  margin: 0;
  padding: 0;
  list-style: none;
}

.rod-home .rod-b2b-point h3 {
  font-size: 16px;
  font-weight: 600;
  margin-bottom: 6px;
}

.rod-home .rod-b2b-point p {
  margin: 0;
  color: var(--rod-text-muted);
  font-size: 14px;
  line-height: 1.5;
}

.rod-home .rod-b2b-point svg {
  width: 24px;
  height: 24px;
  color: var(--rod-gold);
  margin-bottom: 10px;
}

.rod-home .rod-supplier {
  margin-top: 40px;
  padding: 28px 32px;
  background: rgba(11, 30, 45, 0.55);
  border: 1px solid var(--rod-border-strong);
  border-radius: var(--rod-r-lg);
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 28px;
  flex-wrap: wrap;
}

.rod-home .rod-supplier h3 {
  font-size: 20px;
  font-weight: 600;
  margin-bottom: 8px;
}

.rod-home .rod-supplier p {
  margin: 0;
  color: var(--rod-text-muted);
  font-size: 14px;
}

.rod-home .rod-supplier-actions {
  display: flex;
  gap: 12px;
  flex-wrap: wrap;
}

/* --------------------------------------------------------------------------
   13. AI BLOCK
   -------------------------------------------------------------------------- */

.rod-home .rod-ai {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  gap: 36px;
  align-items: center;
  padding: 36px;
  background: linear-gradient(120deg, rgba(255, 200, 68, 0.10), rgba(26, 39, 51, 0.9) 58%);
  border: 1px solid var(--rod-border-strong);
  border-radius: var(--rod-r-lg);
}

.rod-home .rod-ai h2 {
  font-size: clamp(22px, 2.2vw, 32px);
  margin-bottom: 12px;
}

.rod-home .rod-ai p {
  margin: 0 0 22px;
  color: var(--rod-text-muted);
  font-size: 15px;
  line-height: 1.6;
  max-width: 60ch;
}

.rod-home .rod-ai-mark {
  width: 96px;
  height: 96px;
  border-radius: 50%;
  display: grid;
  place-items: center;
  background: rgba(255, 200, 68, 0.12);
  border: 1px solid rgba(255, 200, 68, 0.35);
  color: var(--rod-gold);
}

.rod-home .rod-ai-mark svg {
  width: 44px;
  height: 44px;
}

/* --------------------------------------------------------------------------
   14. FOOTER
   -------------------------------------------------------------------------- */

.rod-home .site-footer {
  background: #08161F;
  border-top: 1px solid var(--rod-border);
  padding: 56px 0 28px;
}

.rod-home .footer-grid {
  display: grid;
  grid-template-columns: minmax(0, 1.4fr) repeat(3, minmax(0, 1fr));
  gap: 36px;
}

.rod-home .footer-logo {
  height: 34px;
  width: auto;
  display: block;
  margin-bottom: 14px;
}

.rod-home .footer-brand p {
  margin: 0;
  color: var(--rod-text-faint);
  font-size: 14px;
  line-height: 1.6;
  max-width: 34ch;
}

.rod-home .footer-col h3 {
  font-size: 13px;
  font-weight: 700;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--rod-text-faint);
  margin-bottom: 14px;
}

.rod-home .footer-col a {
  display: block;
  color: var(--rod-text-muted);
  font-size: 14px;
  text-decoration: none;
  padding: 6px 0;
  transition: color var(--rod-motion-base) var(--rod-ease);
}

.rod-home .footer-col a:hover {
  color: var(--rod-gold);
}

.rod-home .footer-bottom {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  flex-wrap: wrap;
  margin-top: 40px;
  padding-top: 22px;
  border-top: 1px solid var(--rod-border);
  color: var(--rod-text-faint);
  font-size: 13px;
}

.rod-home .footer-bottom a {
  color: var(--rod-text-faint);
  text-decoration: none;
}

.rod-home .footer-bottom a:hover {
  color: var(--rod-gold);
}

/* --------------------------------------------------------------------------
   15. RESPONSIVE — 1440 / 1024 / 768 / 390
   -------------------------------------------------------------------------- */

@media (max-width: 1100px) {
  .rod-home .nav-links {
    gap: 18px;
  }

  .rod-home .nav-links a {
    font-size: 13px;
  }

  /* No padding override here any more. The header is absolute over the hero,
     so the grid's top padding is what keeps the headline clear of it; a fixed
     56px stated later in the file simply won the cascade and dropped the copy
     under the header at narrow widths. Vertical spacing stays with the clamp
     on the base rule, which already scales. */
  .rod-home .rod-trust-points {
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 14px 0;
  }
}

/* The homepage header needs 1218px with the nav expanded (measured per part in
   all three languages: brand 170 + seven nav items and their gaps 702-725 +
   tools 88-92 + 2 x 20px gaps + 2 x 24px padding). It collapsed at 900px, so
   a wide band of widths overflowed horizontally — a pre-existing defect that
   the first release gate missed by sampling only 1440/1024/768/390.
   These header rules are scoped under .rod-home, which outranks the shared
   hamburger rule in styles.css, so the shared breakpoint could never apply
   here; the homepage has to state it itself. Collapsing at the same 1080px as
   every other page fixes the overflow and removes the last threshold mismatch
   between the homepage and the rest of the site. The hero and section layout
   below stays at 900px, where it was designed and approved. */
@media (max-width: 1279px) {
  .rod-home .nav-links,
  .rod-home .nav-actions {
    display: none;
  }

  .rod-home .menu-toggle {
    display: flex;
  }

  /* min-height, not height. The shared narrow-width rules let this row wrap,
     and with the descriptor stacked under the logo the brand block is 57px
     tall, which pushes the hamburger onto a second line at phone widths. A
     pinned height does not grow with it, so the button rendered outside the
     header and on top of the hero — measured at 390px: toggle bottom 123 vs
     header bottom 69. The inner pages already behave correctly here, their row
     resolving to 121px, so this matches them rather than inventing anything. */
  .rod-home .header-row {
    justify-content: space-between;
    height: auto;
    min-height: 68px;
  }
}

@media (max-width: 900px) {
  /* The artwork keeps its cinematic role but stops competing with the words.
     It spans the full width as an atmospheric backdrop and takes a far heavier
     scrim, because here the copy sits ON it rather than beside it. The old
     rules in this block addressed .rod-hero-art, which no longer exists. */
  .rod-home .rod-hero {
    min-height: 0;
  }

  .rod-home .rod-hero-media {
    inset: 0;
  }

  .rod-home .rod-hero-media img {
    object-position: 60% 38%;
  }

  .rod-home .rod-hero-media::after {
    background:
      linear-gradient(180deg, rgba(11, 30, 45, 0.92) 0%, rgba(11, 30, 45, 0.80) 38%, rgba(11, 30, 45, 0.88) 72%, #0B1E2D 100%);
  }

  /* The header wraps onto two rows at phone widths (brand block 57px plus the
     hamburger below it), so the clearance has to be generous enough for the
     tallest form of it, not for the 68px single-row case. */
  .rod-home .rod-hero-grid {
    padding-top: 150px;
  }

  .rod-home .rod-hero-copy {
    max-width: none;
  }

  .rod-home .rod-b2b-grid {
    grid-template-columns: minmax(0, 1fr);
    gap: 32px;
  }

  .rod-home .rod-ai {
    grid-template-columns: minmax(0, 1fr);
    gap: 24px;
  }

  .rod-home .rod-ai-mark {
    order: -1;
  }

  .rod-home .footer-grid {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
}

@media (max-width: 620px) {
  .rod-home {
    --rod-gutter: 18px;
  }

  .rod-home .rod-section,
  .rod-home .rod-b2b {
    padding: 52px 0;
  }

  .rod-home .rod-section-head {
    flex-direction: column;
    align-items: flex-start;
    gap: 12px;
  }

  /* Stacked, so the hairline separators that divide the desktop row would
     become a stray left border on every item. */
  .rod-home .rod-trust-points {
    grid-template-columns: minmax(0, 1fr);
    gap: 13px;
  }

  .rod-home .rod-trust-points > li + li {
    padding-left: 0;
    border-left: 0;
  }

  .rod-home .rod-trust-points > li:not(:last-child) {
    padding-right: 0;
  }

  .rod-home .rod-search-row {
    flex-direction: column;
    gap: 8px;
  }

  .rod-home .rod-search-row .rod-btn {
    width: 100%;
  }

  .rod-home .category-grid {
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 12px;
  }

  .rod-home .listings-grid {
    grid-template-columns: minmax(0, 1fr);
  }

  .rod-home .rod-panel,
  .rod-home .rod-supplier,
  .rod-home .rod-ai {
    padding: 24px;
  }

  .rod-home .footer-grid {
    grid-template-columns: minmax(0, 1fr);
    gap: 28px;
  }
}

/* --------------------------------------------------------------------------
   16. FOCUS + MOTION PREFERENCES
   -------------------------------------------------------------------------- */

.rod-home :focus-visible {
  outline: 2px solid var(--rod-gold);
  outline-offset: 2px;
  border-radius: 4px;
}

.rod-home .rod-search-row:focus-within {
  box-shadow: 0 0 0 2px var(--rod-gold), var(--rod-shadow-2);
}

@media (prefers-reduced-motion: reduce) {
  .rod-home *,
  .rod-home *::before,
  .rod-home *::after {
    transition-duration: 0.001ms !important;
    animation-duration: 0.001ms !important;
    animation-iteration-count: 1 !important;
  }

  .rod-home .category-tile:hover,
  .rod-home .category-tile:active,
  .rod-home .offer-card:hover,
  .rod-home .offer-card:active,
  .rod-home .rod-btn-gold:active {
    transform: none;
  }
}

/* --------------------------------------------------------------------------
   17. SECTION PRESENCE
   --------------------------------------------------------------------------
   After the hero, the page's remaining distance from reference 03 was scale
   and air, not content: 72px of rhythm everywhere, 20px section headings and
   small tiles read as stacked boxes rather than a composition.

   Only spacing and type scale change here. No content is added: the catalogue
   vocabulary stays whatever /api/categories returns, and the marketplace strip
   stays however many real offers exist. The reference shows a dense product
   row and image-led category tiles; we have neither the offers nor any
   category imagery, and inventing either is exactly what the canon forbids.

   Everything is .rod-home-scoped so /categories and the other 20+ pages keep
   the shared shell untouched. These rules set no transform and no transition,
   so the reduced-motion block above still governs motion.
   -------------------------------------------------------------------------- */

.rod-home .rod-section {
  padding: clamp(76px, 9vh, 116px) 0;
}

.rod-home .rod-b2b {
  padding: clamp(76px, 9vh, 116px) 0;
}

.rod-home .rod-section-head {
  margin-bottom: clamp(28px, 3.4vh, 44px);
}

.rod-home .rod-section-head h2 {
  font-size: clamp(26px, 2.9vw, 40px);
  line-height: 1.12;
  letter-spacing: -0.02em;
}

.rod-home .rod-b2b-grid h2 {
  font-size: clamp(26px, 2.9vw, 40px);
  line-height: 1.12;
  letter-spacing: -0.02em;
}

.rod-home .rod-ai h2 {
  font-size: clamp(24px, 2.6vw, 36px);
  line-height: 1.12;
}

.rod-home .rod-section-head p {
  font-size: 15px;
  margin-top: 10px;
}

/* Tiles gain height and a larger gold mark so the strip reads as a catalogue
   entry point rather than a list of chips. */
.rod-home .category-grid {
  gap: 14px;
}

.rod-home .category-tile {
  min-height: 132px;
  padding: 22px;
  gap: 14px;
}

.rod-home .category-tile-icon svg {
  width: 32px;
  height: 32px;
}

.rod-home .category-tile-label {
  font-size: 15px;
  line-height: 1.32;
}

/* Wider minimum so a real offer card has room to breathe; with one offer in
   the database the row is honestly short, and no filler is added to hide it. */
.rod-home .listings-grid {
  grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
  gap: 18px;
}

.rod-home .rod-trust-card,
.rod-home .rod-panel {
  padding: 24px;
}

.rod-home .rod-trust-card h3 {
  font-size: 17px;
}
