/* public/stylesheets/automotive.css
 *
 * The /automotive hub.
 *
 * Deliberately NOT the violet used across jobcount.org and the /c/ campaign
 * pages. The whole problem this page exists to solve is that the domain reads
 * as fiber-contractor software; a page that looks like the SaaS is a page that
 * keeps telling a visitor — and a crawler — the wrong thing about the
 * business. So: near-black, warm amber, and the shop's own photographs doing
 * the talking. The palette is taken from the photos themselves (red lifts,
 * cool hex lighting, warm sodium glow on an engine bay).
 *
 * External rather than inlined because this page is long and a returning
 * visitor — or someone moving between the hub and a service anchor — should
 * pay for it once. The /c/ pages inline their CSS for the opposite reason:
 * they are single-shot ad landings where one blocking request matters more.
 *
 * Prefixed `au-` throughout so nothing here can reach the Bootstrap pages.
 */

.au *,
.au *::before,
.au *::after { box-sizing: border-box; }

.au {
  --bg:      #08080a;
  --bg2:     #0e0e11;
  --card:    #141418;
  --card2:   #1b1b21;
  --line:    rgba(255, 255, 255, .09);
  --line2:   rgba(255, 255, 255, .16);

  --ink:     #f4f4f5;
  --ink2:    #b4b4bd;
  --muted:   #7c7c88;

  --a:       #f59e0b;   /* amber — the signature */
  --a2:      #fbbf24;
  --hot:     #f97316;   /* orange, for the gradient's far end */
  --danger:  #ef4444;
  --ok:      #34d399;

  --grad:    linear-gradient(135deg, var(--a2), var(--hot));
  --radius:  16px;
  --shadow:  0 2px 4px rgba(0, 0, 0, .4), 0 24px 48px -24px rgba(0, 0, 0, .8);

  --maxw:    1140px;

  margin: 0;
  background: var(--bg);
  color: var(--ink);
  font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
  overflow-x: hidden;
  line-height: 1.6;
}

.au a { color: var(--a2); text-decoration: none; }
.au a:hover { color: var(--a); }
/* `height: auto` is NOT optional here. The images carry width/height
   attributes so the browser can reserve their space before they load (no
   layout shift), but those attributes are presentational hints: with the width
   capped at 100% and the height left at its attribute value, the box keeps the
   literal pixel height from the markup and any `aspect-ratio` beneath it is
   ignored — both dimensions are already definite. That rendered the hero at
   494x960 instead of 4:3, and squashed the static map. */
.au img { max-width: 100%; height: auto; display: block; }
.au h1, .au h2, .au h3, .au h4 { margin: 0; line-height: 1.12; letter-spacing: -.022em; font-weight: 800; }
.au p { margin: 0; }

.au-wrap { max-width: var(--maxw); margin: 0 auto; padding: 0 22px; }
.au-narrow { max-width: 760px; }

/* Anchor targets sit under the sticky bar without this. */
.au [id] { scroll-margin-top: 84px; }

/* ── sticky bar ──────────────────────────────────────────────────────────── */

.au-bar {
  position: sticky; top: 0; z-index: 50;
  background: rgba(8, 8, 10, .78);
  backdrop-filter: saturate(1.6) blur(18px);
  -webkit-backdrop-filter: saturate(1.6) blur(18px);
  border-bottom: 1px solid var(--line);
}
.au-bar-in {
  max-width: var(--maxw); margin: 0 auto; padding: 11px 22px;
  display: flex; align-items: center; gap: 16px;
}
.au-brand { display: flex; align-items: center; gap: 11px; min-width: 0; }
.au-brand-mark {
  width: 34px; height: 34px; border-radius: 9px; flex: none;
  background: var(--grad);
  display: grid; place-items: center;
  font-weight: 900; font-size: 15px; color: #1a1205; letter-spacing: -.04em;
}
.au-brand-txt { min-width: 0; }
.au-brand-name {
  font-weight: 800; font-size: 14.5px; letter-spacing: -.015em; line-height: 1.15;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.au-brand-sub {
  font-size: 11.5px; color: var(--muted); line-height: 1.3;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}

/* On a phone the strap wraps to four lines and turns a 56 px bar into 120 px
   of header above the headline. The shop's name and city are already the first
   two things in the page body, so the strap simply steps aside. */
@media (max-width: 560px) {
  .au-bar-in { gap: 10px; padding: 9px 14px; }
  .au-brand-sub { display: none; }
  .au-brand-name { font-size: 14px; }
  .au-bar-cta { gap: 7px; flex: none; }
  .au-bar-cta .au-btn-sm { padding: 8px 12px; font-size: 12.5px; }
  /* The phone number crowds the shop's own name off the bar at this width,
     and the fixed dock at the bottom of the screen already puts Call under
     the visitor's thumb — so the duplicate goes rather than the identity. */
  .au-bar-cta .au-bar-tel { display: none; }
}

.au-nav { display: flex; gap: 22px; margin-left: auto; }
.au-nav a { color: var(--ink2); font-size: 13.5px; font-weight: 600; white-space: nowrap; }
.au-nav a:hover { color: var(--ink); }
@media (max-width: 900px) { .au-nav { display: none; } }

.au-bar-cta { margin-left: auto; display: flex; gap: 9px; align-items: center; }
@media (min-width: 901px) { .au-bar-cta { margin-left: 22px; } }

/* ── buttons ─────────────────────────────────────────────────────────────── */

.au-btn {
  display: inline-flex; align-items: center; justify-content: center; gap: 9px;
  padding: 13px 22px; border-radius: 12px; border: 1px solid transparent;
  font-size: 15px; font-weight: 800; letter-spacing: -.01em;
  cursor: pointer; white-space: nowrap; transition: transform .14s ease, filter .14s ease;
}
.au-btn:active { transform: translateY(1px); }

/* The `.au ` prefix on the colour rules is load-bearing, not tidiness.
   Almost every button on this page is an <a>, and `.au a { color: var(--a2) }`
   scores 0-1-1 — which beats a bare `.au-btn-primary` at 0-1-0. Without the
   extra class the primary CTA rendered amber text on an amber gradient and the
   ghost buttons lost their white. The <button> submit was unaffected, which is
   exactly why it is easy to miss. */
.au .au-btn-primary { background: var(--grad); color: #1a1205; box-shadow: 0 8px 24px -10px rgba(245, 158, 11, .7); }
.au .au-btn-primary:hover { filter: brightness(1.07); color: #1a1205; }
.au .au-btn-ghost { background: rgba(255, 255, 255, .05); border-color: var(--line2); color: var(--ink); }
.au .au-btn-ghost:hover { background: rgba(255, 255, 255, .1); color: var(--ink); }
.au-btn-sm { padding: 9px 15px; font-size: 13.5px; border-radius: 10px; }
.au-btn-lg { padding: 16px 30px; font-size: 16.5px; }
.au-btn-block { width: 100%; }

/* ── hero ────────────────────────────────────────────────────────────────── */

.au-hero { position: relative; overflow: hidden; padding: 62px 0 0; }
.au-hero::before {
  content: ""; position: absolute; inset: 0; pointer-events: none;
  background:
    radial-gradient(ellipse 70% 50% at 12% -8%, rgba(245, 158, 11, .16), transparent 62%),
    radial-gradient(ellipse 60% 46% at 92% 4%, rgba(239, 68, 68, .12), transparent 60%);
}
.au-hero-in {
  position: relative; display: grid; gap: 46px;
  grid-template-columns: 1.06fr .94fr; align-items: center;
}
@media (max-width: 940px) { .au-hero-in { grid-template-columns: 1fr; gap: 34px; } }

.au-eyebrow {
  display: inline-flex; align-items: center; gap: 9px;
  font-size: 12px; font-weight: 800; letter-spacing: .1em; text-transform: uppercase;
  color: var(--a2); margin-bottom: 20px;
}
.au-eyebrow::before {
  content: ""; width: 26px; height: 2px; border-radius: 2px; background: var(--grad);
}

.au-h1 { font-size: clamp(34px, 5.4vw, 55px); letter-spacing: -.032em; }
.au-h1 em { font-style: normal; background: var(--grad); -webkit-background-clip: text; background-clip: text; color: transparent; }
.au-lede { margin-top: 20px; font-size: clamp(16px, 2vw, 18.5px); color: var(--ink2); max-width: 33em; }

.au-hero-cta { display: flex; flex-wrap: wrap; gap: 12px; margin-top: 30px; }

.au-hero-facts {
  display: flex; flex-wrap: wrap; gap: 9px 22px; margin-top: 28px;
  font-size: 13.5px; color: var(--ink2);
}
.au-hero-facts span { display: inline-flex; align-items: center; gap: 7px; }

.au-hero-art { position: relative; }
.au-hero-art img {
  width: 100%; border-radius: 20px; border: 1px solid var(--line2);
  box-shadow: var(--shadow); aspect-ratio: 4 / 3; object-fit: cover;
}
.au-hero-cap {
  position: absolute; left: 16px; right: 16px; bottom: 16px;
  background: rgba(8, 8, 10, .82);
  backdrop-filter: blur(12px); -webkit-backdrop-filter: blur(12px);
  border: 1px solid var(--line2); border-radius: 12px;
  padding: 11px 14px; font-size: 12.5px; color: var(--ink2); line-height: 1.45;
}
.au-hero-cap b { color: var(--ink); display: block; font-size: 13px; margin-bottom: 1px; }

/* open/closed pill */
.au-open {
  display: inline-flex; align-items: center; gap: 7px;
  padding: 5px 12px; border-radius: 999px; font-size: 12.5px; font-weight: 700;
}
.au-open-yes { background: rgba(52, 211, 153, .13); color: var(--ok); border: 1px solid rgba(52, 211, 153, .32); }
.au-open-no  { background: rgba(255, 255, 255, .05); color: var(--ink2); border: 1px solid var(--line2); }
.au-open i { width: 7px; height: 7px; border-radius: 50%; background: currentColor; }

/* ── section furniture ───────────────────────────────────────────────────── */

.au-sec { padding: 82px 0; }
.au-sec-tight { padding: 56px 0; }
.au-sec-alt { background: var(--bg2); border-top: 1px solid var(--line); border-bottom: 1px solid var(--line); }

.au-kicker {
  font-size: 12px; font-weight: 800; letter-spacing: .1em; text-transform: uppercase;
  color: var(--a2); margin-bottom: 14px;
}
.au-h2 { font-size: clamp(26px, 3.6vw, 37px); }
.au-sub { margin-top: 15px; color: var(--ink2); font-size: 16.5px; max-width: 62ch; }
.au-sec-head { margin-bottom: 44px; }

/* ── offers ──────────────────────────────────────────────────────────────── */

.au-offers { display: grid; gap: 18px; grid-template-columns: repeat(auto-fit, minmax(268px, 1fr)); }
.au-offer {
  background: var(--card); border: 1px solid var(--line); border-radius: var(--radius);
  padding: 26px 24px; display: flex; flex-direction: column;
}
.au-offer-lead { background: linear-gradient(165deg, rgba(245, 158, 11, .1), var(--card) 62%); border-color: rgba(245, 158, 11, .3); }
.au-offer h3 { font-size: 19.5px; margin-bottom: 11px; }
.au-offer-detail { color: var(--ink2); font-size: 14.5px; }
/* The fine print is NOT optional and NOT hidden behind a toggle. An offer
   stated without its condition is the complaint the shop then has to handle
   at the counter, and `marketingProfile.offers[].terms` exists precisely so
   the condition travels with the offer. */
.au-offer-terms {
  margin-top: auto; padding-top: 16px; border-top: 1px solid var(--line);
  font-size: 12.5px; line-height: 1.5; color: var(--muted);
}
.au-offer-terms b { color: var(--ink2); font-weight: 700; }

/* ── service feature rows ────────────────────────────────────────────────── */

.au-feat { display: grid; gap: 46px; grid-template-columns: 1fr 1fr; align-items: center; padding: 46px 0; }
.au-feat + .au-feat { border-top: 1px solid var(--line); }
.au-feat-art img {
  width: 100%; border-radius: var(--radius); border: 1px solid var(--line2);
  box-shadow: var(--shadow); aspect-ratio: 5 / 4; object-fit: cover;
}
/* Even rows mirror. `order` rather than direction so the DOM stays in reading
   order for a screen reader and for the crawler. */
.au-feat-flip .au-feat-art { order: 2; }
@media (max-width: 880px) {
  .au-feat { grid-template-columns: 1fr; gap: 26px; padding: 34px 0; }
  .au-feat-flip .au-feat-art { order: 0; }
}
.au-feat h3 { font-size: clamp(22px, 2.8vw, 28px); margin-bottom: 15px; }
.au-feat p { color: var(--ink2); font-size: 15.5px; }
.au-feat p + p { margin-top: 13px; }
.au-feat-list { list-style: none; margin: 20px 0 0; padding: 0; display: grid; gap: 9px; }
.au-feat-list li { position: relative; padding-left: 24px; font-size: 14.5px; color: var(--ink2); }
.au-feat-list li::before {
  content: ""; position: absolute; left: 0; top: .55em;
  width: 7px; height: 7px; border-radius: 2px; background: var(--grad);
}

/* ── plain service grid ──────────────────────────────────────────────────── */

.au-grid { display: grid; gap: 14px; grid-template-columns: repeat(auto-fit, minmax(238px, 1fr)); }
.au-tile {
  background: var(--card); border: 1px solid var(--line); border-radius: 13px;
  padding: 19px 20px; transition: border-color .15s ease, background .15s ease;
}
a.au-tile:hover { border-color: rgba(245, 158, 11, .45); background: var(--card2); }
.au-tile h4 { font-size: 15.5px; margin-bottom: 5px; color: var(--ink); }
.au-tile p { font-size: 13.5px; color: var(--muted); line-height: 1.5; }

/* ── makes strip ─────────────────────────────────────────────────────────── */

.au-makes { display: flex; flex-wrap: wrap; gap: 12px; justify-content: center; }
.au-make {
  display: flex; align-items: center; gap: 10px;
  background: var(--card); border: 1px solid var(--line); border-radius: 11px;
  padding: 10px 16px 10px 12px; font-size: 14px; font-weight: 700; color: var(--ink2);
}
.au-make picture { display: flex; flex: none; }
.au-make img {
  width: 26px; height: 26px; object-fit: contain; flex: none;
  /* Marque logos are dark-on-transparent; without this they vanish on black. */
  filter: brightness(0) invert(1); opacity: .82;
}

/* ── the "we don't" panel ────────────────────────────────────────────────── */

.au-not {
  background: var(--card); border: 1px solid var(--line); border-radius: var(--radius);
  padding: 30px 28px;
}
.au-not-list { list-style: none; margin: 18px 0 0; padding: 0; display: grid; gap: 10px; grid-template-columns: repeat(auto-fit, minmax(228px, 1fr)); }
.au-not-list li { position: relative; padding-left: 26px; font-size: 14.5px; color: var(--ink2); }
.au-not-list li::before {
  content: "×"; position: absolute; left: 4px; top: -.06em;
  color: var(--danger); font-weight: 800; font-size: 17px;
}

/* ── steps ───────────────────────────────────────────────────────────────── */

.au-steps { display: grid; gap: 18px; grid-template-columns: repeat(auto-fit, minmax(230px, 1fr)); counter-reset: au-step; }
.au-step { background: var(--card); border: 1px solid var(--line); border-radius: var(--radius); padding: 26px 22px; }
.au-step::before {
  counter-increment: au-step; content: counter(au-step);
  display: grid; place-items: center; width: 34px; height: 34px; border-radius: 10px;
  background: var(--grad); color: #1a1205; font-weight: 900; font-size: 15px; margin-bottom: 16px;
}
.au-step h4 { font-size: 16.5px; margin-bottom: 8px; }
.au-step p { font-size: 14px; color: var(--ink2); }

/* ── booking ─────────────────────────────────────────────────────────────── */

.au-book { display: grid; gap: 42px; grid-template-columns: .92fr 1.08fr; align-items: start; }
@media (max-width: 940px) { .au-book { grid-template-columns: 1fr; gap: 30px; } }

.au-form {
  background: var(--card); border: 1px solid var(--line2); border-radius: 20px;
  padding: 30px 28px; box-shadow: var(--shadow);
}
@media (max-width: 520px) { .au-form { padding: 24px 19px; } }
.au-form h3 { font-size: 22px; margin-bottom: 6px; }
.au-form-sub { font-size: 14px; color: var(--muted); margin-bottom: 22px; }

.au-f { display: block; margin-bottom: 15px; }
.au-f label, .au-r2 label {
  display: block; font-size: 12.5px; font-weight: 700; color: var(--ink2);
  margin-bottom: 6px; letter-spacing: .01em;
}
.au-form input[type="text"], .au-form input[type="tel"], .au-form input[type="email"],
.au-form input[type="date"], .au-form select, .au-form textarea {
  width: 100%; padding: 12px 14px; border-radius: 11px;
  background: rgba(255, 255, 255, .04); border: 1px solid var(--line2);
  color: var(--ink); font-size: 15.5px; font-family: inherit; line-height: 1.4;
  /* 15.5px because iOS zooms the whole page in on focus under 16px, which on a
     phone throws the visitor out of the form mid-booking. */
  transition: border-color .14s ease, background .14s ease;
}
.au-form input:focus, .au-form select:focus, .au-form textarea:focus {
  outline: none; border-color: var(--a); background: rgba(255, 255, 255, .07);
}
.au-form textarea { resize: vertical; min-height: 86px; }
.au-form select { appearance: none; -webkit-appearance: none; cursor: pointer;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%237c7c88'%3E%3Cpath d='M4.5 6.5 8 10l3.5-3.5z'/%3E%3C/svg%3E");
  background-repeat: no-repeat; background-position: right 12px center; background-size: 17px;
  padding-right: 36px;
}
.au-form input::placeholder, .au-form textarea::placeholder { color: #5c5c66; }

/* The dropdown LIST, which is a different surface to the closed <select>.
   The closed control inherits this page's near-white text on a dark field —
   but the native popup that opens on click is painted by the OS, and on
   Windows and Linux that is a WHITE panel. The inherited white text then sits
   on white and the times are invisible until highlighted.
   Setting both colours on the option itself is what fixes it in Chrome and
   Firefox; Safari paints its own popup and is unaffected either way. */
.au-form select option {
  background-color: #1b1b21;
  color: #f4f4f5;
}
.au-form select option:disabled { color: #7c7c88; }
/* The browser's own date/time glyphs are near-black on a near-black field. */
.au-form input[type="date"]::-webkit-calendar-picker-indicator { filter: invert(.72); cursor: pointer; }

.au-r2 { display: grid; gap: 13px; grid-template-columns: 1fr 1fr; margin-bottom: 15px; }
@media (max-width: 460px) { .au-r2 { grid-template-columns: 1fr; } }

/* Honeypot. Off-screen rather than display:none — some bots skip hidden
   fields, and the whole point is that they fill this one in. */
.au-hp { position: absolute; left: -9999px; width: 1px; height: 1px; overflow: hidden; }

.au-form-fine { margin-top: 14px; font-size: 12px; color: var(--muted); line-height: 1.5; text-align: center; }

/* The repeat-booking panel that replaces the form. */
.au-held { text-align: center; }
.au-held-when {
  font-size: 21px; font-weight: 800; color: var(--a2); margin: 14px 0 6px; letter-spacing: -.02em;
}

/* ── location ────────────────────────────────────────────────────────────── */

.au-loc { display: grid; gap: 34px; grid-template-columns: 1fr 1fr; align-items: start; }
@media (max-width: 880px) { .au-loc { grid-template-columns: 1fr; } }
.au-map img { width: 100%; border-radius: var(--radius); border: 1px solid var(--line2); }

.au-hours { list-style: none; margin: 20px 0 0; padding: 0; }
.au-hours li {
  display: flex; justify-content: space-between; gap: 18px;
  padding: 9px 0; border-bottom: 1px solid var(--line); font-size: 14.5px; color: var(--ink2);
}
.au-hours li:last-child { border-bottom: 0; }
.au-hours .au-today { color: var(--ink); font-weight: 700; }
.au-hours .au-today .au-hours-day::after {
  content: "Today"; margin-left: 9px; font-size: 10.5px; font-weight: 800;
  text-transform: uppercase; letter-spacing: .06em; color: var(--a2);
  background: rgba(245, 158, 11, .14); border-radius: 4px; padding: 2px 6px; vertical-align: 1.5px;
}
.au-hours .au-closed { color: var(--muted); }

/* ── FAQ ─────────────────────────────────────────────────────────────────── */

.au-faq { display: grid; gap: 12px; }
.au-faq details {
  background: var(--card); border: 1px solid var(--line); border-radius: 13px; padding: 0 22px;
}
.au-faq details[open] { border-color: var(--line2); }
.au-faq summary {
  cursor: pointer; list-style: none; padding: 19px 0; font-weight: 700; font-size: 16px;
  display: flex; align-items: flex-start; gap: 14px;
}
.au-faq summary::-webkit-details-marker { display: none; }
.au-faq summary::after {
  content: "+"; margin-left: auto; color: var(--a2); font-size: 21px; font-weight: 400;
  line-height: 1; flex: none; transition: transform .18s ease;
}
.au-faq details[open] summary::after { transform: rotate(45deg); }
.au-faq-a { padding: 0 0 20px; color: var(--ink2); font-size: 15px; max-width: 72ch; }
.au-faq-a p + p { margin-top: 11px; }

/* ── final CTA ───────────────────────────────────────────────────────────── */

.au-final { position: relative; overflow: hidden; text-align: center; padding: 78px 0; }
.au-final::before {
  content: ""; position: absolute; inset: 0; pointer-events: none;
  background: radial-gradient(ellipse 62% 108% at 50% 0%, rgba(245, 158, 11, .17), transparent 66%);
}
.au-final .au-wrap { position: relative; }
.au-final .au-sub { margin-left: auto; margin-right: auto; }
.au-final-cta { display: flex; flex-wrap: wrap; gap: 12px; justify-content: center; margin-top: 30px; }

/* ── footer ──────────────────────────────────────────────────────────────── */

.au-foot { border-top: 1px solid var(--line); padding: 42px 0 34px; font-size: 13.5px; color: var(--muted); }
.au-foot-in { display: flex; flex-wrap: wrap; gap: 22px; justify-content: space-between; }
.au-foot a { color: var(--ink2); }
.au-foot a:hover { color: var(--a2); }
.au-foot-links { display: flex; flex-wrap: wrap; gap: 18px; }
.au-foot-legal { margin-top: 22px; padding-top: 20px; border-top: 1px solid var(--line); font-size: 12.5px; line-height: 1.6; }

/* ── mobile call dock ────────────────────────────────────────────────────── */

/* On a phone the primary action is a call, and the visitor is often standing
   next to a car that will not start. The dock keeps it one thumb away without
   covering the form's submit button — hence the body padding. */
.au-dock { display: none; }
@media (max-width: 700px) {
  .au-dock {
    display: flex; gap: 10px; position: fixed; left: 0; right: 0; bottom: 0; z-index: 60;
    padding: 10px 14px calc(10px + env(safe-area-inset-bottom));
    background: rgba(8, 8, 10, .93);
    backdrop-filter: blur(16px); -webkit-backdrop-filter: blur(16px);
    border-top: 1px solid var(--line2);
  }
  .au-dock .au-btn { flex: 1; }
  .au-dock-pad { height: 76px; }
}

/* ── consent partial, re-skinned ─────────────────────────────────────────── */

/* The markup is shared with the ad pages (views/public/partials/_smsConsent).
   Only the surface changes here — the wording is frozen and must not. */
.au .jc-consent { background: rgba(255, 255, 255, .04); border-color: var(--line2); color: var(--ink2); }
.au .jc-consent:hover { border-color: rgba(245, 158, 11, .45); }
.au .jc-consent-text b { color: var(--ink); }

@media (prefers-reduced-motion: reduce) {
  .au *, .au *::before, .au *::after { transition: none !important; animation: none !important; }
}
